diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000..4872c5af --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,7 @@ +version: 2 +updates: +- package-ecosystem: npm + directory: "/" + schedule: + interval: daily + open-pull-requests-limit: 10 diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 61f71055..28afce8b 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -3,53 +3,42 @@ name: Deploy site on: push: branches: [ master ] + workflow_dispatch: jobs: - doc-deploy: - runs-on: ubuntu-22.04 + build: + runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: persist-credentials: false + submodules: recursive - - name: Set up Python 3.x - uses: actions/setup-python@v4 - with: - # Semantic version range syntax or exact version of a Python version - python-version: '3.11.0' - - # You can test your matrix by printing the current Python version - - name: Display Python version - run: python -c "import sys; print(sys.version)" + - name: Configure GitHub Pages + uses: actions/configure-pages@v5 - - name: Cache pip - uses: actions/cache@v3 + - name: Setup Node + uses: actions/setup-node@v4 with: - # This path is specific to Ubuntu - path: ~/.cache/pip - # Look to see if there is a cache hit for the corresponding requirements file - key: ${{ runner.os }}-pip-${{ hashFiles('requirements.txt') }} - restore-keys: | - ${{ runner.os }}-pip- - ${{ runner.os }}- + node-version: 20 + cache: npm - name: Install dependencies - run: pip install -r requirements.txt + run: npm ci - - name: Run Mkdocs - # Build the site using mkdocs - run: mkdocs build --verbose --clean --strict + - name: Build site + run: npm run docs:build - name: Post-Mkdocs touch/copy files # miscellaneous files needed for GitHub etc run: | - touch site/.nojekyll - cp CNAME site/CNAME + touch docs/.vitepress/dist/.nojekyll + cp CNAME docs/.vitepress/dist/CNAME - name: Deploy 🚀 uses: JamesIves/github-pages-deploy-action@v4.4.1 with: branch: gh-pages # The branch the action should deploy to. - folder: site # The folder the action should deploy. + folder: docs/.vitepress/dist # The folder the action should deploy. clean: true # Automatically remove deleted files from the deploy branch diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index fd38d492..ff4ee13c 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,42 +1,26 @@ -name: Test build +name: Test site build on: pull_request: - branches: [ master ] jobs: - build: - runs-on: ubuntu-22.04 + doc-test: + runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: persist-credentials: false + submodules: recursive - - name: Set up Python 3.x - uses: actions/setup-python@v4 + - name: Setup Node + uses: actions/setup-node@v4 with: - # Semantic version range syntax or exact version of a Python version - python-version: '3.11.0' - - # You can test your matrix by printing the current Python version - - name: Display Python version - run: python -c "import sys; print(sys.version)" - - - name: Cache pip - uses: actions/cache@v3 - with: - # This path is specific to Ubuntu - path: ~/.cache/pip - # Look to see if there is a cache hit for the corresponding requirements file - key: ${{ runner.os }}-pip-${{ hashFiles('requirements.txt') }} - restore-keys: | - ${{ runner.os }}-pip- - ${{ runner.os }}- + node-version: 20 + cache: npm - name: Install dependencies - run: pip install -r requirements.txt + run: npm ci - - name: Run Mkdocs - # Build the site using mkdocs - run: mkdocs build --verbose --clean --strict + - name: Build site + run: npm run docs:build diff --git a/.gitignore b/.gitignore index 712be594..d9ef377e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,8 @@ -site -venv +# Node.js and NPM +node_modules +npm-debug.log* +codekit-config.json + +# VitePress +docs/.vitepress/cache +docs/.vitepress/dist diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..319138d7 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "docs/.vitepress/theme"] + path = docs/.vitepress/theme + url = https://github.com/hacks-guide/vitepress-theme diff --git a/LICENSE.md b/LICENSE.md index ba7a024a..4d9ca974 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,7 +1,35 @@ -ISC License (ISC) +Copyright (c) 2024, Nintendo Homebrew -Copyright 2023 Nintendo Homebrew Staff +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. -Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +Additionally, files in `docs/.vitepress` is licensed under the following: + +Copyright (c) 2024, Nintendo Homebrew + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/docs/.vitepress/config.mjs b/docs/.vitepress/config.mjs new file mode 100644 index 00000000..144dd6ac --- /dev/null +++ b/docs/.vitepress/config.mjs @@ -0,0 +1,104 @@ +/* + Copyright (C) 2024 Nintendo Homebrew + SPDX-License-Identifier: MIT +*/ + +import { fileURLToPath, URL } from 'node:url' +import { defineConfig } from 'vitepress' + +import container from 'markdown-it-container' + +import * as i18n from './i18n' + +export default defineConfig({ + title: "NH Switch Guide", + description: "Switch CFW Guide.", + sitemap: { + hostname: 'https://switch.hacks.guide' + }, + head: [['link', { rel: 'icon', href: '/img/favicon.ico' }]], + themeConfig: { + docFooter: { + prev: false, + next: false + }, + socialLinks: [ + { icon: 'discord', link: 'https://discord.gg/C29hYvh' }, + { icon: 'github', link: 'https://github.com/nh-server/switch-guide' } + ] + }, + locales: { + root: i18n.en_US + }, + vite: { + resolve: { + alias: [ + { + find: /^.*\/VPDocOutlineItem\.vue$/, + replacement: fileURLToPath( + new URL('./theme/components/VPDocOutlineItem.vue', import.meta.url) + ) + }, + { + find: /^.*\/VPFooter\.vue$/, + replacement: fileURLToPath( + new URL('./theme/components/VPFooter.vue', import.meta.url) + ) + }, + { + find: /^.*\/VPHero\.vue$/, + replacement: fileURLToPath( + new URL('./theme/components/VPHero.vue', import.meta.url) + ) + } + ] + } + }, + markdown: { + config: (md) => { + md.use(container, "cards", { + render: (tokens, idx) => { + const token = tokens[idx]; + if (token.nesting === 1) { + return `
\n`; + } else { + return `
\n`; + } + } + }); + md.use(container, 'card', { + render: (tokens, idx) => { + const token = tokens[idx]; + if (token.nesting === 1) { + return `
\n`; + } else { + return `
\n`; + } + } + }); + md.use(container, "tabs", { + render: (tokens, idx) => { + const token = tokens[idx]; + if (token.nesting === 1) { + return `\n`; + } else { + return `\n`; + } + } + }); + md.use(container, 'tab', { + render: (tokens, idx) => { + const token = tokens[idx]; + if (token.nesting === 1) { + let tokenData = token.info.match(/^ ?tab\s(default\s)?(.*)$/); + let isDefault = typeof tokenData[1] !== 'undefined'; + let name = tokenData[2]; + return ``; + } else { + return `\n`; + } + } + }); + } + } +}) diff --git a/docs/.vitepress/i18n/en_US.js b/docs/.vitepress/i18n/en_US.js new file mode 100644 index 00000000..bf8eb6b0 --- /dev/null +++ b/docs/.vitepress/i18n/en_US.js @@ -0,0 +1,229 @@ +import { en_US as localeData } from './strings' + +const sidebar_common = { + text: localeData.other, + items: [ + { text: localeData.pages["faq"], link: `/faq` }, + { text: localeData.pages["about"], link: `/about` } + ] +} + +const themeConfig = { + langMenuLabel: localeData.langMenuLabel, + darkModeSwitchLabel: localeData.darkModeSwitchLabel, + darkModeSwitchTitle: localeData.darkModeSwitchTitle, + lightModeSwitchTitle: localeData.lightModeSwitchTitle, + sidebarMenuLabel: localeData.sidebarMenuLabel, + returnToTopLabel: localeData.returnToTopLabel, + + nav: [ + { text: localeData.guide, link: `/user_guide/getting_started` }, + { text: localeData.pages["homebrew"], link: `/homebrew/` }, + { text: localeData.pages["extras"], link: `/extras/` }, + { text: localeData.pages["faq"], link: `/faq` }, + { text: localeData.pages["about"], link: `/about` } + ], + sidebar: { + [`/extras/`]: [ + { + text: localeData.pages["extras"], + link: `/extras/`, + items: [ + { text: localeData.pages["extras/blocking_nintendo"], link: `/extras/blocking_nintendo` }, + { text: localeData.pages["extras/nandrestore"], link: `/extras/nandrestore` }, + { text: localeData.pages["extras/autorcm"], link: `/extras/autorcm` }, + { text: localeData.pages["extras/game_modding"], link: `/extras/game_modding` }, + { text: localeData.pages["extras/adding_udev"], link: `/extras/adding_udev` }, + { text: localeData.pages["extras/showing_file_extensions"], link: `/extras/showing_file_extensions` }, + { text: localeData.pages["extras/alternate_bootsetups"], link: `/extras/alternate_bootsetups` }, + { text: localeData.pages["extras/rcm_injectors"], link: `/extras/rcm_injectors` }, + { text: localeData.pages["extras/updating"], link: `/extras/updating` }, + { text: localeData.pages["extras/transfer_sd"], link: `/extras/transfer_sd` }, + { text: localeData.pages["extras/installing_android"], link: `/extras/installing_android` }, + { text: localeData.pages["extras/installing_linux"], link: `/extras/installing_linux` }, + { text: localeData.pages["extras/glossary"], link: `/extras/glossary` } + ] + }, + sidebar_common + ], + [`/homebrew/`]: [ + { + text: localeData.pages["homebrew"], + link: `/homebrew/`, + items: [ + { text: localeData.pages["homebrew/jksv"], link: `/homebrew/jksv` }, + { text: localeData.pages["homebrew/goldleaf"], link: `/homebrew/goldleaf` }, + { text: localeData.pages["homebrew/ftpd"], link: `/homebrew/ftpd` }, + { text: localeData.pages["homebrew/nxtheme-installer"], link: `/homebrew/nxtheme-installer` }, + { text: localeData.pages["homebrew/nx-shell"], link: `/homebrew/nx-shell` }, + { text: localeData.pages["homebrew/edizon"], link: `/homebrew/edizon` }, + { text: localeData.pages["homebrew/simplemodmanager"], link: `/homebrew/simplemodmanager` }, + { text: localeData.pages["homebrew/tesla-menu"], link: `/homebrew/tesla-menu` }, + { text: localeData.pages["homebrew/mission-control"], link: `/homebrew/mission-control` }, + { text: localeData.pages["homebrew/sys-con"], link: `/homebrew/sys-con` }, + { text: localeData.pages["homebrew/sys-botbase"], link: `/homebrew/sys-botbase` }, + { text: localeData.pages["homebrew/sysdvr"], link: `/homebrew/sysdvr` }, + { text: localeData.pages["homebrew/sys-clk"], link: `/homebrew/sys-clk` }, + { text: localeData.pages["homebrew/ldn_mitm"], link: `/homebrew/ldn_mitm` } + ] + }, + sidebar_common + ], + [`/user_guide/all/partitioning_sd_syscfw`]: [ + { + text: localeData.guide, + items: [ + { text: localeData.pages["user_guide/getting_started"], link: `/user_guide/getting_started` }, + { + text: localeData.rcm, + items: [ + { text: localeData.pages["user_guide/rcm"], link: `/user_guide/rcm/` }, + { text: localeData.pages["user_guide/rcm/entering_rcm"], link: `/user_guide/rcm/entering_rcm` }, + { text: localeData.pages["user_guide/rcm/sending_payload"], link: `/user_guide/rcm/sending_payload` } + ] + }, + { + text: localeData.modchip, + items: [ + { text: localeData.pages["user_guide/modchip"], link: `/user_guide/modchip/` }, + { text: localeData.pages["user_guide/modchip/preparing_hekate"], link: `/user_guide/modchip/preparing_hekate` } + ] + }, + { text: localeData.pages["user_guide/all/cfw_environment"], link: `/user_guide/all/cfw_environment` }, + { text: localeData.pages["user_guide/all/partitioning_sd_syscfw"], link: `/user_guide/all/partitioning_sd_syscfw` }, + { text: localeData.pages["user_guide/all/sd_preparation"], link: `/user_guide/all/sd_preparation` }, + { text: localeData.pages["user_guide/all/making_essential_backups"], link: `/user_guide/all/making_essential_backups` }, + { text: localeData.pages["user_guide/all/launching_cfw"], link: `/user_guide/all/launching_cfw` } + ] + }, + sidebar_common + ], + [`/user_guide/all/partitioning_sd`]: [ + { + text: localeData.guide, + items: [ + { text: localeData.pages["user_guide/getting_started"], link: `/user_guide/getting_started` }, + { + text: localeData.rcm, + items: [ + { text: localeData.pages["user_guide/rcm"], link: `/user_guide/rcm/` }, + { text: localeData.pages["user_guide/rcm/entering_rcm"], link: `/user_guide/rcm/entering_rcm` }, + { text: localeData.pages["user_guide/rcm/sending_payload"], link: `/user_guide/rcm/sending_payload` } + ] + }, + { + text: localeData.modchip, + items: [ + { text: localeData.pages["user_guide/modchip"], link: `/user_guide/modchip/` }, + { text: localeData.pages["user_guide/modchip/preparing_hekate"], link: `/user_guide/modchip/preparing_hekate` } + ] + }, + { text: localeData.pages["user_guide/all/cfw_environment"], link: `/user_guide/all/cfw_environment` }, + { text: localeData.pages["user_guide/all/partitioning_sd"], link: `/user_guide/all/partitioning_sd` }, + { text: localeData.pages["user_guide/all/sd_preparation"], link: `/user_guide/all/sd_preparation` }, + { text: localeData.pages["user_guide/all/making_essential_backups"], link: `/user_guide/all/making_essential_backups` }, + { text: localeData.pages["user_guide/all/launching_cfw"], link: `/user_guide/all/launching_cfw` } + ] + }, + sidebar_common + ], + [`/user_guide/modchip/`]: [ + { + text: localeData.guide, + items: [ + { text: localeData.pages["user_guide/getting_started"], link: `/user_guide/getting_started` }, + { text: localeData.pages["user_guide/modchip"], link: `/user_guide/modchip/` }, + { text: localeData.pages["user_guide/modchip/preparing_hekate"], link: `/user_guide/modchip/preparing_hekate` }, + { text: localeData.pages["user_guide/all/cfw_environment"], link: `/user_guide/all/cfw_environment` }, + { + text: localeData.pages["multiple-options"], + items: [ + { text: localeData.pages["user_guide/all/partitioning_sd"], link: `/user_guide/all/partitioning_sd` }, + { text: localeData.pages["user_guide/all/partitioning_sd_syscfw"], link: `/user_guide/all/partitioning_sd_syscfw` }, + ] + }, + { text: localeData.pages["user_guide/all/sd_preparation"], link: `/user_guide/all/sd_preparation` }, + { text: localeData.pages["user_guide/all/making_essential_backups"], link: `/user_guide/all/making_essential_backups` }, + { text: localeData.pages["user_guide/all/launching_cfw"], link: `/user_guide/all/launching_cfw` } + ] + }, + sidebar_common + ], + [`/user_guide/rcm/`]: [ + { + text: localeData.guide, + items: [ + { text: localeData.pages["user_guide/getting_started"], link: `/user_guide/getting_started` }, + { text: localeData.pages["user_guide/rcm"], link: `/user_guide/rcm/` }, + { text: localeData.pages["user_guide/rcm/entering_rcm"], link: `/user_guide/rcm/entering_rcm` }, + { text: localeData.pages["user_guide/rcm/sending_payload"], link: `/user_guide/rcm/sending_payload` }, + { text: localeData.pages["user_guide/all/cfw_environment"], link: `/user_guide/all/cfw_environment` }, + { + text: localeData.pages["multiple-options"], + items: [ + { text: localeData.pages["user_guide/all/partitioning_sd"], link: `/user_guide/all/partitioning_sd` }, + { text: localeData.pages["user_guide/all/partitioning_sd_syscfw"], link: `/user_guide/all/partitioning_sd_syscfw` }, + ] + }, + { text: localeData.pages["user_guide/all/sd_preparation"], link: `/user_guide/all/sd_preparation` }, + { text: localeData.pages["user_guide/all/making_essential_backups"], link: `/user_guide/all/making_essential_backups` }, + { text: localeData.pages["user_guide/all/launching_cfw"], link: `/user_guide/all/launching_cfw` } + ] + }, + sidebar_common + ], + /* + The `/` path needs to be at the bottom as a catch all! If it is placed anywhere above, + it will select the first matching one and not parse the rest! + */ + [`/`]: [ + { + text: localeData.guide, + items: [ + { text: localeData.pages["user_guide/getting_started"], link: `/user_guide/getting_started` }, + { + text: localeData.rcm, + items: [ + { text: localeData.pages["user_guide/rcm"], link: `/user_guide/rcm/` }, + { text: localeData.pages["user_guide/rcm/entering_rcm"], link: `/user_guide/rcm/entering_rcm` }, + { text: localeData.pages["user_guide/rcm/sending_payload"], link: `/user_guide/rcm/sending_payload` } + ] + }, + { + text: localeData.modchip, + items: [ + { text: localeData.pages["user_guide/modchip"], link: `/user_guide/modchip/` }, + { text: localeData.pages["user_guide/modchip/preparing_hekate"], link: `/user_guide/modchip/preparing_hekate` } + ] + }, + { text: localeData.pages["user_guide/all/cfw_environment"], link: `/user_guide/all/cfw_environment` }, + { + text: localeData.pages["multiple-options"], + items: [ + { text: localeData.pages["user_guide/all/partitioning_sd"], link: `/user_guide/all/partitioning_sd` }, + { text: localeData.pages["user_guide/all/partitioning_sd_syscfw"], link: `/user_guide/all/partitioning_sd_syscfw` }, + ] + }, + { text: localeData.pages["user_guide/all/sd_preparation"], link: `/user_guide/all/sd_preparation` }, + { text: localeData.pages["user_guide/all/making_essential_backups"], link: `/user_guide/all/making_essential_backups` }, + { text: localeData.pages["user_guide/all/launching_cfw"], link: `/user_guide/all/launching_cfw` } + ] + }, + sidebar_common + ], + }, + footer: { + copyright: 'Copyright © 2024 Nintendo Homebrew', + items: [ + { text: localeData.pages["about"], link: `/about` } + ] + } +}; + +export default { + lang: "en", + label: localeData.language, + title: localeData.title, + description: localeData.description, + themeConfig: themeConfig +} diff --git a/docs/.vitepress/i18n/index.js b/docs/.vitepress/i18n/index.js new file mode 100644 index 00000000..3156a8f9 --- /dev/null +++ b/docs/.vitepress/i18n/index.js @@ -0,0 +1,3 @@ +import en_US from './en_US' + +export { en_US } diff --git a/docs/.vitepress/i18n/strings/en_US.json b/docs/.vitepress/i18n/strings/en_US.json new file mode 100644 index 00000000..2ba7cebc --- /dev/null +++ b/docs/.vitepress/i18n/strings/en_US.json @@ -0,0 +1,62 @@ +{ + "language": "English", + "title": "NH Switch Guide", + "description": "Switch CFW Guide.", + "langMenuLabel": "Switch language", + "darkModeSwitchLabel": "Appearance", + "darkModeSwitchTitle": "Switch to dark theme", + "lightModeSwitchTitle": "Switch to light theme", + "sidebarMenuLabel": "Menu", + "returnToTopLabel": "Return to top", + + "guide": "User Guide", + "other": "Other", + "rcm": "RCM", + "modchip": "Modchip", + "pages": { + "about": "About", + "extras": "Tutorials", + "extras/adding_udev": "Linux injection without root", + "extras/alternate_bootsetups": "Alternate Boot Setups", + "extras/autorcm": "AutoRCM", + "extras/blocking_nintendo": "Blocking Nintendo servers", + "extras/games_modding": "Game Modding", + "extras/glossary": "Glossary", + "extras/installing_android": "Installing Android", + "extras/installing_linux": "Installing Linux", + "extras/nandrestore": "Restoring a NAND Backup", + "extras/rcm_injectors": "RCM Payload Injectors", + "extras/showing_file_extensions": "Showing File Name Extensions (Windows)", + "extras/transfer_sd": "Changing SD cards", + "extras/updating": "Updating CFW", + "faq": "FAQ", + "homebrew": "Homebrew", + "homebrew/edizon": "EdiZon", + "homebrew/ftpd": "FTPD", + "homebrew/goldleaf": "Goldleaf", + "homebrew/jksv": "JKSV", + "homebrew/ldn_mitm": "ldn_mitm", + "homebrew/mission-control": "MissionControl", + "homebrew/nx-shell": "NX-Shell", + "homebrew/nxtheme-installer": "NXTheme Installer", + "homebrew/simplemodmanager": "SimpleModManager", + "homebrew/sys-botbase": "sys-botbase", + "homebrew/sys-clk": "sys-clk", + "homebrew/sys-con": "sys-con", + "homebrew/sysdvr": "SysDVR", + "homebrew/tesla-menu": "Tesla Menu", + "multiple-options": "Multiple Options", + "user_guide/all/cfw_environment": "CFW on sysMMC vs. CFW on emuMMC", + "user_guide/all/launching_cfw": "Launching CFW", + "user_guide/all/making_essential_backups": "Making Essential Backups", + "user_guide/all/partitioning_sd": "Partitioning the microSD Card and creating the emuMMC", + "user_guide/all/partitioning_sd_syscfw": "Formatting and/or partitioning the microSD Card", + "user_guide/all/sd_preparation": "microSD Card preparations", + "user_guide/getting_started": "Getting Started", + "user_guide/modchip": "Introduction to Modchips", + "user_guide/modchip/preparing_hekate": "Payload and bootloader folder placement", + "user_guide/rcm": "RCM", + "user_guide/rcm/entering_rcm": "Entering RCM", + "user_guide/rcm/sending_payload": "Sending a Payload" + } +} diff --git a/docs/.vitepress/i18n/strings/index.js b/docs/.vitepress/i18n/strings/index.js new file mode 100644 index 00000000..e986e7bc --- /dev/null +++ b/docs/.vitepress/i18n/strings/index.js @@ -0,0 +1,3 @@ +import en_US from './en_US' with { type: 'json' } + +export { en_US } \ No newline at end of file diff --git a/docs/.vitepress/theme b/docs/.vitepress/theme new file mode 160000 index 00000000..1be2c700 --- /dev/null +++ b/docs/.vitepress/theme @@ -0,0 +1 @@ +Subproject commit 1be2c70084dbcb71415d490c569ab7ab08b5445e diff --git a/docs/about.md b/docs/about.md index c8556f39..310593f6 100644 --- a/docs/about.md +++ b/docs/about.md @@ -1,14 +1,10 @@ - - # About this guide This guide was written by community members of the [Nintendo Homebrew Discord Server](https://discord.gg/C29hYvh). [You can find this guide on GitHub](https://github.com/nh-server/switch-guide), It is licensed under the [ISC license](https://github.com/nh-server/switch-guide/blob/master/LICENSE.md). ------ - -### Guide Writers / Maintainers +## Guide Writers / Maintainers - [SuchMemeManySkill](https://github.com/suchmememanyskill) - [DefenderOfHyrule](https://github.com/DefenderOfHyrule) - [ha1vorsen](https://github.com/ha1vorsen) @@ -31,9 +27,7 @@ This guide was written by community members of the [Nintendo Homebrew Discord Se Thank you to [everyone else](https://github.com/nh-server/switch-guide/graphs/contributors) that contributed to the guide on GitHub, but special thanks to **noirscape**. ------ - -### Developers +## Developers - [**Atmosphere-NX**](https://github.com/Atmosphere-NX) for [Atmosphere](https://github.com/Atmosphere-NX/Atmosphere). - [**switchbrew**](https://github.com/switchbrew) for [nx-hbloader](https://github.com/switchbrew/nx-hbloader) and [nx-hbmenu](https://github.com/switchbrew/nx-hbmenu). @@ -53,5 +47,8 @@ Thank you to [everyone else](https://github.com/nh-server/switch-guide/graphs/co - [**exelix11**](https://github.com/exelix11) for [Switch Theme Injector](https://github.com/exelix11/SwitchThemeInjector). - [**suchmememanyskill**](https://github.com/suchmememanyskill) for [TegraExplorer](https://github.com/suchmememanyskill/TegraExplorer) -!!! tip "" - ![Nintendo Homebrew](img/nh.jpg) +::: tip + +![Nintendo Homebrew](img/nh.jpg) + +::: diff --git a/docs/css/custom.css b/docs/css/custom.css deleted file mode 100644 index 2f2579e1..00000000 --- a/docs/css/custom.css +++ /dev/null @@ -1,27 +0,0 @@ - -@media screen and (min-width: 76.25em) { - .md-nav--lifted > .md-nav__list > .md-nav__item--active > .md-nav__link { - position: absolute; - box-shadow: none; - padding-top: 4px; - } - - .md-sidebar__scrollwrap { - background: rgba(0, 0, 0, 0.2); - border-radius: 10px; - height: fit-content !important; - } - - .md-sidebar__scrollwrap > .md-sidebar__inner { - padding-top: 5px; - padding-bottom: 20px; - } - - .md-sidebar.md-sidebar--primary { - order: 1; - } - - .md-sidebar__scrollwrap:not(:has(.md-nav.md-nav--secondary)) { - background: transparent; - } -} \ No newline at end of file diff --git a/docs/extras/adding_udev.md b/docs/extras/adding_udev.md index de617f8b..21c78115 100644 --- a/docs/extras/adding_udev.md +++ b/docs/extras/adding_udev.md @@ -6,16 +6,19 @@ The following instructions only work if you have a system that implements `udev` Do the following instructions while your Switch is _not_ connected to your computer. -!!! note "For Arch Linux users:" - The package `android-udev` includes rules that will also allow for payload injection to work without root. Do note this also allows Android specific commands such as `adb` and `fastboot` to also work without root (as is the intention of it.) +::: tip -  +**For Arch Linux users:** -### **Option 1: Manually adding rules and group** +The package `android-udev` includes rules that will also allow for payload injection to work without root. Do note this also allows Android specific commands such as `adb` and `fastboot` to also work without root (as is the intention of it.) + +::: + +## Option 1: Manually adding rules and group The following instructions are not for beginners. Only do this if you understand what you are doing. -#### **Creating a new group** +### Creating a new group To start, we will create a new group and add ourselves to it. The group the Nintendo Switch device will be owned by on Linux will be set to this group. @@ -25,7 +28,7 @@ To start, we will create a new group and add ourselves to it. The group the Nint 1. Enter the following command: `sudo usermod -a -G nintendo_switch $USER`. Make sure that the `G` is capitalized! 1. Close the terminal. -#### **Adding a udev rule** +### Adding a udev rule Next we're gonna add a new `udev` rule. `udev` is a device manager for the linux kernel. The rule we're gonna specify is that if the Switch is connected in `RCM`, the group the Switch belongs to will be the group we made in the previous section. @@ -39,9 +42,7 @@ Next we're gonna add a new `udev` rule. `udev` is a device manager for the linux You should now be able to run the payload sender without having to use `sudo`. -  - -### **Option 2: Installing a package with the rules** +## Option 2: Installing a package with the rules These rules will actually allow _ANY_ user to access your Switch via USB, not only _your_ user. diff --git a/docs/extras/alternate_bootsetups.md b/docs/extras/alternate_bootsetups.md index 50e3564e..3c75e202 100644 --- a/docs/extras/alternate_bootsetups.md +++ b/docs/extras/alternate_bootsetups.md @@ -2,18 +2,21 @@ If you need to troubleshoot something, or need to try a different boot setup, read on. -!!! danger "Do I need any of these?" - Unless you are experiencing problems with booting or Atmosphère itself, it's strongly recommended to use the main guide instead of these. They are provided for the sake of completeness. +::: danger -  +**Do I need any of these?** -### **Chainloading Fusee from Hekate** +Unless you are experiencing problems with booting or Atmosphère itself, it's strongly recommended to use the main guide instead of these. They are provided for the sake of completeness. + +::: + +## Chainloading Fusee from Hekate - The latest release of [Hekate](https://github.com/CTCaer/hekate/releases/) - The latest release of [Atmosphère](https://github.com/Atmosphere-NX/Atmosphere/releases) - You will need to download both the release zip and the `fusee.bin` -#### **Instructions:** +### Instructions: 1. Insert your Switch's microSD card into your PC. 1. Copy *the contents of* the Atmosphere `.zip` file to the root of your microSD card. @@ -22,22 +25,19 @@ If you need to troubleshoot something, or need to try a different boot setup, re 1. The setup is complete, you can inject the Hekate payload (Unpatched Switch users) or place the Hekate payload on the root of your microSD card and rename it to `payload.bin` (Modchipped Switch users). 1. Navigate to and select `Payloads` > `fusee.bin`. - Note: `fusee` uses a set boot order that is not as easily configurable as Hekate. Its boot order is `emuMMC` > `sysCFW` > `stock`. - If an emuMMC isn't present, it will boot into sysCFW for example. Make sure you have a method of blocking Nintendo's servers set up (such as [DNS-MITM](../extras/blocking_nintendo.md/#instructions-ams-dns-redirection)) if you do use `fusee` and have an `emuMMC`. - - -  + If an emuMMC isn't present, it will boot into sysCFW for example. Make sure you have a method of blocking Nintendo's servers set up (such as [DNS-MITM](../extras/blocking_nintendo#instructions-ams-dns-redirection)) if you do use `fusee` and have an `emuMMC`. -### **Using Fusee without Hekate** +## Using Fusee without Hekate This method will *not* work for Modchipped Switch users. - The latest release of [Atmosphère](https://github.com/Atmosphere-NX/Atmosphere/releases) - You will need to download both the release zip and the `fusee.bin` -#### **Instructions:** +### Instructions: 1. Insert your Switch's microSD card into your PC. 1. Copy *the contents of* the Atmosphere `.zip` file to the root of your microSD card. 1. The setup is complete, you can inject the `fusee.bin` payload. - Note: `fusee` uses a set boot order that is not as easily configurable as Hekate. Its boot order is `emuMMC` > `sysCFW` > `stock`. - If an emuMMC isn't present, it will boot into sysCFW for example. Make sure you have a method of blocking Nintendo's servers set up (such as [DNS-MITM](../extras/blocking_nintendo.md/#instructions-ams-dns-redirection)) if you do use `fusee` and have an `emuMMC`. + If an emuMMC isn't present, it will boot into sysCFW for example. Make sure you have a method of blocking Nintendo's servers set up (such as [DNS-MITM](../extras/blocking_nintendo#instructions-ams-dns-redirection)) if you do use `fusee` and have an `emuMMC`. diff --git a/docs/extras/autorcm.md b/docs/extras/autorcm.md index f83437d8..fee89b30 100644 --- a/docs/extras/autorcm.md +++ b/docs/extras/autorcm.md @@ -1,17 +1,22 @@ -### **AutoRCM** +# AutoRCM AutoRCM causes the console to believe it is bricked, and will automatically launch RCM upon boot for recovery purposes, without needing a jig. As RCM is a recovery mode from repair specialists, this is an intended feature from the device developer, though is also considered a softbrick. If you aren't careful, misuse of AutoRCM can lead to real **damage**, especially with units that cannot inject custom RCM payloads (like Mariko hardware). Please take care when using it. Please keep in mind that the console can no longer boot on its own, so you'll need a PC, phone, or other payload injector to start the console after a coldboot. - Note: If the console screen stays black when pressing the power button after activating AutoRCM, remember that it's not broken. It's in RCM. -!!! warning "If you don't have a BOOT0/1 backup yet..." - You really want to kill your console, huh? If you haven't made a BOOT0/1 backup yet, it is recommended to make one **right now**. +::: warning - 1. Boot into Hekate - 1. Go to `Tools`, and select `Backup eMMC` - 1. Then tap `eMMC BOOT0 & BOOT1` and let the process complete. +**If you don't have a BOOT0/1 backup yet...** -### **Disadvantages of AutoRCM** +You really want to kill your console, huh? If you haven't made a BOOT0/1 backup yet, it is recommended to make one **right now**. + +1. Boot into Hekate +1. Go to `Tools`, and select `Backup eMMC` +1. Then tap `eMMC BOOT0 & BOOT1` and let the process complete. + +::: + +## Disadvantages of AutoRCM There are some disadvantages you should consider before installing AutoRCM: @@ -20,7 +25,7 @@ There are some disadvantages you should consider before installing AutoRCM: - When completely discharged, your Switch will take a very long time to charge while in RCM. To solve this, charge the console for approximately twenty minutes before booting into Hekate and selecting a boot option. After it's done booting, the console will now charge at a normal speed with a battery icon in the corner. - When a system update is completed while stock firmware is running, AutoRCM becomes disabled so you need to turn it on again. AutoRCM can be preserved by updating while CFW is active. -### **Advantages of AutoRCM** +## Advantages of AutoRCM AutoRCM can be used for good as well: @@ -29,11 +34,16 @@ AutoRCM can be used for good as well: - Note: updating the console while booted into Hekate's "stock" configuration will clear AutoRCM on the next reboot. Please update while using custom firmware, or be sure to use a jig after the console reboots. - It's easier to inject a payload using a payload injector, as using your jig and booting into RCM manually is no longer required. -!!! tip "Other information..." - - This method corrupts a single byte in both your BOOT0 and your BOOT1 partitions. This is why a backup of those is recommended. - - This software version of AutoRCM can almost always be reversed, so don't freak out if it doesn't work out the way you'd like it to. +::: tip + +**Other information...** + +- This method corrupts a single byte in both your BOOT0 and your BOOT1 partitions. This is why a backup of those is recommended. +- This software version of AutoRCM can almost always be reversed, so don't freak out if it doesn't work out the way you'd like it to. + +::: -### **Enable/Disable AutoRCM** +## Enable/Disable AutoRCM If, despite all of the information above, you still wish to enable (or disable) AutoRCM, and understand the risks, do the following: diff --git a/docs/extras/blocking_nintendo.md b/docs/extras/blocking_nintendo.md index f8a46212..da65d424 100644 --- a/docs/extras/blocking_nintendo.md +++ b/docs/extras/blocking_nintendo.md @@ -2,14 +2,14 @@ This page will help you set up a method to block all communication with Nintendo. This will stop any updates and reporting to Nintendo, but it will prevent use of the eShop and online games. -### **Instructions (AMS DNS redirection)** +## Instructions (AMS DNS redirection) You can configure Atmosphère to automatically redirect any requests directed to Nintendo to nothing instead. Documentation about this feature can be [found here](https://github.com/Atmosphere-NX/Atmosphere/blob/master/docs/features/dns_mitm.md). The section below will help you set up DNS redirection on your emummc. Note that this will only apply when you are using cfw. -#### What you need: -- emummc.txt +### What you need: +- emummc.txt - Atmosphère 0.18.0 or higher -#### Setup: +### Setup: 1. Enter RCM and inject the Hekate payload. - If you use a modchipped Switch, you can simply just turn your Switch on with the Hekate payload renamed to `payload.bin` on the root of your SD. @@ -21,25 +21,33 @@ You can configure Atmosphère to automatically redirect any requests directed to - If you want to apply the DNS redirection to sysmmc instead of emummc, rename the file to `sysmmc.txt` 1. Eject the `UMS` device safely from within your computer's operating system and boot into CFW. -!!! note "Verify functionality" - You can verify the functionality of the DNS redirection by booting into emummc (or sysmmc if you applied the config to sys), and powering off after. +::: tip - A report will be generated in `sd:/atmosphere/logs` called `dns_mitm_startup.log`. If this starts with the following, the dns redirection is active +**Verify functionality** - ![dnsmitmlog](../extras/img/dnsmitm.png) +You can verify the functionality of the DNS redirection by booting into emummc (or sysmmc if you applied the config to sys), and powering off after. -  +A report will be generated in `sd:/atmosphere/logs` called `dns_mitm_startup.log`. If this starts with the following, the dns redirection is active -### **Instructions (90DNS)** +![dnsmitmlog](../extras/img/dnsmitm.png) + +::: + +## Instructions (90DNS) You can add a custom DNS to your WiFi connection that will block all communication with Nintendo's servers. We will be using [90DNS](https://gitlab.com/a/90dns), a community-run custom DNS server. If you prefer, you can run your own DNS server following the instructions on the [GitLab repository.](https://gitlab.com/a/90dns/blob/master/SELFHOST.md) Enter the console's System Settings, and then proceed to the Internet tab. From here: -#### **Setting up a new connection via Wi-Fi** +### Setting up a new connection via Wi-Fi + +::: warning + +**Open WiFi networks without a password** -!!! warning "Open WiFi networks without a password" - Not all WiFi networks require a password to connect. If your network does not use one, you can use the `Manual Setup` option, located at the very bottom of the `Internet Settings` screen below all other WiFi networks. +Not all WiFi networks require a password to connect. If your network does not use one, you can use the `Manual Setup` option, located at the very bottom of the `Internet Settings` screen below all other WiFi networks. + +::: 1. Select your WiFi network from the list of networks. 1. Enter an **incorrect** password that is 8 characters long and press `OK`. @@ -54,7 +62,7 @@ Enter the console's System Settings, and then proceed to the Internet tab. From ----- -#### **Editing an existing WiFi connection** +### Editing an existing WiFi connection 1. Select your existing WiFi network from the list of networks. 1. Select `Change Settings`. 1. Pick the server that is the closest to your location out of the below chart and enter its Primary and Secondary DNS into your connection settings. @@ -62,7 +70,7 @@ Enter the console's System Settings, and then proceed to the Internet tab. From ----- -#### **Using homebrew to set 90DNS on all existing WiFi networks** +### Using homebrew to set 90DNS on all existing WiFi networks 1. Download [switch-90dns-setter](https://github.com/suchmememanyskill/switch-90dns-setter/releases) and put it in the `/switch` folder. 1. Launch CFW and open the homebrew menu. 1. Launch `90DNS Setter`. @@ -77,24 +85,28 @@ Enter the console's System Settings, and then proceed to the Internet tab. From | America (Server located in the USA) | `207.246.121.77` | `163.172.141.219` | -!!! tip "" - Example for a 90DNS connection with the Europe settings: - ![Visual for System Settings serial location](../extras/img/blocking_updates.png) +::: tip + +Example for a 90DNS connection with the Europe settings: +![Visual for System Settings serial location](../extras/img/blocking_updates.png) -  +::: -### **Testing if you can reach Nintendo** +## Testing if you can reach Nintendo -#### **Testing via the eShop (Stock)** +### Testing via the eShop (Stock) 1. Open the eShop. Wait until it either opens or displays an error. 1. If it displays "Unable to display page.", you seem to have blocked Nintendo's servers. -#### **Testing via a homebrew app (CFW)** +### Testing via a homebrew app (CFW) 1. Download the latest release of the [90DNS Tester](https://github.com/meganukebmp/Switch_90DNS_tester/releases) 1. Place the `Switch_90DNS_tester.nro` in the `switch` folder on your SD. 1. Enter the homebrew menu and run the 90DNS Tester. 1. After the test finished it should look similar to the below picture, with every `nintendo` domain being blocked. -!!! tip "" - ![tester example](../extras/img/90dns_tester_switch.jpg) +::: tip + +![tester example](../extras/img/90dns_tester_switch.jpg) + +::: diff --git a/docs/extras/game_modding.md b/docs/extras/game_modding.md index ed78c418..e6c48a8e 100644 --- a/docs/extras/game_modding.md +++ b/docs/extras/game_modding.md @@ -1,30 +1,35 @@ -# **Game modding with LayeredFS** +# Game modding with LayeredFS LayeredFS, a tool built into Atmosphere, allows you to (temporarily) replace a game's assets with your own, modified assets as long as you're booted into CFW. -### **Usage instructions** +## Usage instructions Check the section below to find your mod's folder/file structure, then install your mod accordingly. -!!! note "**Checking folder/file structures**" - - If the mod solely includes a `romfs` (and/or `exefs` folder), you will need to place that folder inside of `sd:/atmosphere/contents//`. - - **Note:** The title ID folder has to be created manually in this case. This is game specific and the title ID of every game can be found on the following websites: [switchbrew](https://switchbrew.org/wiki/Title_list/Games) and [nswdb](https://nswdb.com/). +::: tip - - If the mod solely includes a `contents` folder, you can simply copy that folder to `sd:/atmosphere/` on your microSD card and merge folders if prompted. +**Checking folder/file structures** - - If the mod has the complete folder structure set up (i.e. `atmosphere/contents//romfs`), you can simply copy the `atmosphere` folder (likely inside of a mod's `.zip` file) to the root of your microSD card and merge folders if prompted. +- If the mod solely includes a `romfs` (and/or `exefs` folder), you will need to place that folder inside of `sd:/atmosphere/contents//`. + - **Note:** The title ID folder has to be created manually in this case. This is game specific and the title ID of every game can be found on the following websites: [switchbrew](https://switchbrew.org/wiki/Title_list/Games) and [nswdb](https://nswdb.com/). +- If the mod solely includes a `contents` folder, you can simply copy that folder to `sd:/atmosphere/` on your microSD card and merge folders if prompted. +- If the mod has the complete folder structure set up (i.e. `atmosphere/contents//romfs`), you can simply copy the `atmosphere` folder (likely inside of a mod's `.zip` file) to the root of your microSD card and merge folders if prompted. -!!! warning "Atmosphere 0.9.4 and below" - **Note: On Atmosphère 0.9.4 and below, `contents` is called `titles`** +::: -In the image below, you can see a Batman skin mod being used in The Legend of Zelda: Breath of the Wild. In this example, the title ID and mod installation directory would be `sd:/atmosphere/contents/0100509005AF2000/`. +::: warning -![ExampleGameMod](../extras/img/game_modding.jpg) +**Atmosphere 0.9.4 and below** +**Note: On Atmosphère 0.9.4 and below, `contents` is called `titles`** ------ +::: -### **Additional notes** +In the image below, you can see a Batman skin mod being used in The Legend of Zelda: Breath of the Wild. In this example, the title ID and mod installation directory would be `sd:/atmosphere/contents/0100509005AF2000/`. + +![ExampleGameMod](../extras/img/game_modding.jpg) + +## Additional notes The `romfs` folder contains modified assets in the way the game would normally read them. `romfs` stands for "romFileSystem", which is quite literally what the filesystem (folder and file structure) of the game you're modding consists of internally.
@@ -33,18 +38,16 @@ If you want to disable mods on launch of a game, hold the `L` button before laun While most games only require Atmosphere's LayeredFS to enable game modding, there are some games that may require more specialized setup. For example: - Modding Super Smash Bros. requires [ARCropolis](https://github.com/Raytwo/ARCropolis/releases) and [skyline](https://github.com/skyline-dev/skyline/releases). Skyline's `exefs` folder goes into the `atmosphere/contents/01006A800016E000/` directory. ARCropolis looks for mods in the `sd:/ultimate/mods` directory on your microSD card. - - Modding Breath of the Wild and Tears of the Kingdom with multiple mods requires the use of [BCML](https://github.com/NiceneNerd/BCML) or [UKMM](https://github.com/NiceneNerd/UKMM/releases) (Recommended) and [TKMM](https://github.com/TKMM-Team/Tkmm/releases) respectively. - - Animal Crossing: New Horizons requires some extra setup for mods to work. The folder that would normally be called `romfs` has to be called `romFs` and you'll need to create an empty file inside of `atmosphere/contents/01006F8002326000/romFs/System/Resource/` called `ResourceSizeTable.srsizetable`. More information on this can be found on the [ac-modding website](https://ac-modding.com/ACNH/mods.html). ------ +## Troubleshooting +### My game crashes upon launch! -### **Troubleshooting** -#### **My game crashes upon launch!** If your game crashes during launch, hold the `L` button to see if disabling all modifications for your game solves the issue. If so, delete the most recently added mod(s) for your game. -#### **My mods aren't showing up in-game!** +### My mods aren't showing up in-game! + Assuming you've followed the installation instructions successfully, this is probably due to the archive bit being set on one or more folders/files on your microSD card. This is usually the result of copying files to a microSD card via a Mac. If you are experiencing this issue, try running the archive bit fixer utility via Hekate for all files. This can be done by booting into Hekate and going to `Tools` > `Arch bit • RCM Touch • Pkg1/2` > `Fix Archive Bit`. diff --git a/docs/extras/glossary.md b/docs/extras/glossary.md index 9351f05a..8a040707 100644 --- a/docs/extras/glossary.md +++ b/docs/extras/glossary.md @@ -6,7 +6,7 @@ This section is dedicated to explaining a number of common terms that are used w The following list is in alphabetical order. -- **90DNS**: DNS that blocks system updates on the Nintendo Switch. This can be enabled by following the guide [here](blocking_nintendo.md). +- **90DNS**: DNS that blocks system updates on the Nintendo Switch. This can be enabled by following the guide [here](blocking_nintendo). - **[Atmosphère](https://github.com/Atmosphere-NX/Atmosphere)**: The CFW developed by the Atmosphere-NX organization on GitHub and the one used in this guide. - **AutoRCM**: A method that corrupts parts of your boot0 and boot1, causing the Switch to boot into RCM automatically. Using this requires an additional peripheral (such as a computer, phone, dongle, or modchip) to be able to boot your Switch. - **boot0 and boot1**: Two partitions of the Switch NAND. @@ -29,7 +29,7 @@ The following list is in alphabetical order. - **PRODINFO**: A partition on the NAND of your Switch. This along with boot0 and boot1 is the only part of your Switch that can render it unbootable if improperly modified. Atmosphère backs up this partition on booting and it is included in your NAND backup. - **qLaunch**: This is similar to the HOME Menu on the Nintendo 3DS. It serves as a launcher for many applets such as System Settings, the main home menu (ResidentMenu), User/Friends Page (myPage), Lock Screen (Entrance), News menu (Notification), and so on. - **ReSwitched**: A hacking team that is one of the main developers for Atmosphère. -- **RCM**: A shorthand for "Recovery Mode". When talking about hacking the Switch, this commonly refers to the Recovery Mode in the Tegra X1 chip that is included in the Nintendo Switch. Can be entered by holding down the Tegra X1 home button. This button is not the same as the home button on the joycons. Ways of pressing this button can be found [here](../user_guide/rcm/entering_rcm.md). +- **RCM**: A shorthand for "Recovery Mode". When talking about hacking the Switch, this commonly refers to the Recovery Mode in the Tegra X1 chip that is included in the Nintendo Switch. Can be entered by holding down the Tegra X1 home button. This button is not the same as the home button on the joycons. Ways of pressing this button can be found [here](../user_guide/rcm/entering_rcm). - **ROM**: "Read-only memory"; a section of data that cannot be modified once it is written.
Some forms of ROM can be rewritten under very specific scenarios, such as [EEPROM](https://en.wikipedia.org/wiki/EEPROM) (electronically-erasable/programmable ROM). - **[TegraRCMGUI](https://github.com/eliboa/TegraRcmGUI/releases)/[fusee-interface-tk](https://github.com/nh-server/fusee-interfacee-tk/releases)**: Software used to run the fusee-gelee exploit on the Switch. - **Stock**: "Stock" generally refers to the original factory operation or state of something.
For example, stock firmware means the original operation of Horizon, not using CFW. diff --git a/docs/extras/img/save_checkpoint.jpg b/docs/extras/img/save_checkpoint.jpg old mode 100755 new mode 100644 diff --git a/docs/extras/img/save_edizon.jpg b/docs/extras/img/save_edizon.jpg old mode 100755 new mode 100644 diff --git a/docs/extras/index.md b/docs/extras/index.md index 0ab6f659..4450d434 100644 --- a/docs/extras/index.md +++ b/docs/extras/index.md @@ -6,6 +6,6 @@ They are listed in the sidebar as well. ### **Commonly used guides**: -- [Updating CFW](updating.md) -- [Blocking Nintendo servers](blocking_nintendo.md) -- [Changing microSD cards](transfer_sd.md) +- [Updating CFW](updating) +- [Blocking Nintendo servers](blocking_nintendo) +- [Changing microSD cards](transfer_sd) diff --git a/docs/extras/installing_android.md b/docs/extras/installing_android.md index a0b65479..2cd5303e 100644 --- a/docs/extras/installing_android.md +++ b/docs/extras/installing_android.md @@ -2,24 +2,41 @@ This page will detail the setup of Switchroot Android (Android 11) for the Nintendo Switch. -!!! warning "Have you partitioned your microSD card?" - This page assumes that you've followed our guide to set up Atmosphère. Before starting, your microSD card needs partitions for Android set up via Hekate.
- If you didn't do so, see [this page](../user_guide/all/partitioning_sd_syscfw.md) to install Android alongside Atmosphère. If you don't want to use Switch CFW and only Android, check the [Official Switchroot Documentation](https://wiki.switchroot.org/wiki/android/11-r-setup-guide) instead.
- If you already have Android fully installed, do not follow this guide, as your current installation would be erased. +::: warning -!!! info "Looking for Android 10?" - An unfortunate bug with clocking on Android 11 results in degraded performance for Erista (v1) units on Android 11. Android 10 installation is not covered here, but there is a [guide](https://wiki.switchroot.org/wiki/android/10-q-setup-guide) on the Switchroot Wiki. However, Android 11 is the currently supported version and uses much more updated drivers. +**Have you partitioned your microSD card?** -!!! info "Looking for Android 14?" - Recently, Android 14 was released for the Switch. You can follow the official [LineageOS guide](https://wiki.lineageos.org/devices/nx_tab/) to install Android 14. +This page assumes that you've followed our guide to set up Atmosphère. Before starting, your microSD card needs partitions for Android set up via Hekate. - - **Note:** You can skip the partitioning in the LineageOS guide. You already did this during the guide and do *not* have to do so again. +If you didn't do so, see [this page](../user_guide/all/partitioning_sd_syscfw) to install Android alongside Atmosphère. If you don't want to use Switch CFW and only Android, check the [Official Switchroot Documentation](https://wiki.switchroot.org/wiki/android/11-r-setup-guide) instead. - The Switch lacks a cell modem; simply installing Android does not grant your Switch access to cell towers. This means, unlike most Android devices, you will not be able to make emergency phone calls, and you will still need Wi-Fi to access the Internet. You can, however, natively run Android programs and games. +If you already have Android fully installed, do not follow this guide, as your current installation would be erased. + +::: + +::: info + +**Looking for Android 10?** + +An unfortunate bug with clocking on Android 11 results in degraded performance for Erista (v1) units on Android 11. Android 10 installation is not covered here, but there is a [guide](https://wiki.switchroot.org/wiki/android/10-q-setup-guide) on the Switchroot Wiki. However, Android 11 is the currently supported version and uses much more updated drivers. + +::: + +::: info + +**Looking for Android 14?** + +Recently, Android 14 was released for the Switch. You can follow the official [LineageOS guide](https://wiki.lineageos.org/devices/nx_tab/) to install Android 14. + +- **Note:** You can skip the partitioning in the LineageOS guide. You already did this during the guide and do *not* have to do so again. + +::: + +The Switch lacks a cell modem; simply installing Android does not grant your Switch access to cell towers. This means, unlike most Android devices, you will not be able to make emergency phone calls, and you will still need Wi-Fi to access the Internet. You can, however, natively run Android programs and games. This page will also *not* detail things such as rooting and overclocking; external links to these types of additions can be found in the [Power User Guides](#power-user-guides) section at the bottom of this page. -### **Requirements:** +## Requirements: - A Nintendo Switch console that is capable of running Hekate.
- A microSD card *larger than* 8GB. - Please consult the [Switchroot microSD Card Guide](https://wiki.switchroot.org/wiki/sd-card-guide) before buying! @@ -27,32 +44,47 @@ This page will also *not* detail things such as rooting and overclocking; extern - C to C is unstable, but this will be fixed in the next release. - A computer. -### **Instructions:** +## Instructions: -#### Step 0: Preparation +### Step 0: Preparation If you have official Joy-Con controllers, you can set up auto-pairing so undocking them seamlessly connects to the console regardless of what OS is running. To make this work, boot HOS, ensure both work undocked (pair them), then reboot to Hekate. Select `Nyx Options` followed by `Dump Joy-Con BT`. You should see "Found 2 out of 2 Joy-Con pairing data!" -!!! tip "Have a Switch Lite?" - You should poke the dump button in Hekate anyway -- this will dump factory stick and IMU calibration for use in Android. +::: tip + +**Have a Switch Lite?** + +You should poke the dump button in Hekate anyway -- this will dump factory stick and IMU calibration for use in Android. + +::: ----- -#### Step 1: Downloading Files +### Step 1: Downloading Files Download the latest `.7z` release archive from [the official Switchroot download site](https://download.switchroot.org/android-11/)--choose `nx-atv...` for Android TV (more console-like experience) or `nx-tab...` for standard Android (a more standard Android tablet experience). Both are usable with controllers and docking, but only tab supports proper touch input. -!!! tip "If you prefer [TWRP recovery](https://twrp.me/)..." - ...you can download `twrp.img` from the [extras folder](https://download.switchroot.org/android-11/extras/). +::: tip + +**If you prefer [TWRP recovery](https://twrp.me/)...** + +...you can download `twrp.img` from the [extras folder](https://download.switchroot.org/android-11/extras/). + +::: ----- -#### Step 2: Arranging the microSD Card +### Step 2: Arranging the microSD Card + +::: tip -!!! tip "Are you using a V1 or V2 Switch (standard models)?" - These models have a poorly designed microSD card reader and repeated removals/reinsertions can eventually cause the reader to fail. Please use Hekate SD UMS to transfer files instead of removing the microSD card from your Switch! +**Are you using a V1 or V2 Switch (standard models)?** - - This can be done by booting into Hekate and going to `Tools` > `USB Tools` > `SD Card` and plugging your Switch into your PC via USB. +These models have a poorly designed microSD card reader and repeated removals/reinsertions can eventually cause the reader to fail. Please use Hekate SD UMS to transfer files instead of removing the microSD card from your Switch! + +- This can be done by booting into Hekate and going to `Tools` > `USB Tools` > `SD Card` and plugging your Switch into your PC via USB. + +::: Extract the archive to the root of the microSD card (the FAT32 partition). The microSD card file structure should look more or less like this: @@ -77,44 +109,55 @@ root |- lineage-18.1-[date]-UNOFFICIAL-[device].zip ``` -!!! tip "If you downloaded TWRP..." - ...you have to replace `/switchroot/install/recovery.img` with `twrp.img`. No need to rename the file, just swap it out. +::: tip + +**If you downloaded TWRP...** + +...you have to replace `/switchroot/install/recovery.img` with `twrp.img`. No need to rename the file, just swap it out. + +::: ----- -#### Step 3: Flashing Android +### Step 3: Flashing Android Open the Hekate partition manager (located in `Tools` > `Partition SD Card`) and select Flash Android at the bottom of your screen. All three images should be found and successfully flashed. Select the option to reboot to recovery. Once in recovery, select `Factory Reset` followed by `Format Data`. This *does not delete anything here*, but rather is used to prepare your data partitions for flashing. Ignore any errors that may appear. Return to the main menu and select `Apply Update` followed by `Select from SWITCH SD`. Find and select the `lineage-18.1...` zip in the list, and wait for it to finish. -!!! warning "Did the zip fail to flash?" - Your microSD card is probably bad... Take a look at Hekate's microSD card info, and consider buying a better card. +::: warning + +**Did the zip fail to flash?** + +Your microSD card is probably bad... Take a look at Hekate's microSD card info, and consider buying a better card. + +::: + +::: tip -!!! tip "If you are using TWRP..." - Good luck... TWRP is for advanced users; no user support will be provided. TWRP is provided for power users who have a specific need for it. +**If you are using TWRP...** + +Good luck... TWRP is for advanced users; no user support will be provided. TWRP is provided for power users who have a specific need for it. + +::: Once done, reboot the system when prompted -- Android is now installed! -### **Post-Install** +## Post-Install -#### Tips and Tricks +### Tips and Tricks - If Joy-Con autopairing has not kicked in, try a reboot. Sometimes the first boot doesn't pick up the addition. - - To access recovery/TWRP: hold `VOL+` on boot or reboot. - - To access Hekate from Android: hold `VOL-` on reboot. - - To reboot back to Android: hold `Power` for a few seconds and perform a standard reboot. - - To return to Horizon (`OFW/CFW`): power your Switch off fully, then boot into your desired mode. -#### Power User Guides +### Power User Guides To learn more about using the Switch Configuration App and overclocking, see the [Switch Configuration App](https://wiki.switchroot.org/wiki/android/11-r-setup-guide#switch-configuration-app) section. Furthermore, you can check out the [INI guide](https://wiki.switchroot.org/wiki/android/11-r-ini-guide) as well. -### **Need Help?** +## Need Help? Join the [Switchroot Discord server](https://discord.gg/N9PPYXjWMY). @@ -122,17 +165,20 @@ Join the [Switchroot Discord server](https://discord.gg/N9PPYXjWMY). This page was made in collaboration with `makinbacon21` on Discord. See the collapsible section below for the Switchroot guide maintainers. -??? note "Switchroot Project Staff (Android / Linux)" - If you'd like, you can donate to the people who made this project possible using these links. +::: details Switchroot Project Staff (Android / Linux) + +If you'd like, you can donate to the people who made this project possible using these links. + +- makinbacon (Android developer) +[https://paypal.me/makinbacon21](https://paypal.me/makinbacon21) - - makinbacon (Android developer) - [https://paypal.me/makinbacon21](https://paypal.me/makinbacon21) +- npjohnson (Android developer) +[https://paypal.me/nolenjohnson](https://paypal.me/nolenjohnson) - - npjohnson (Android developer) - [https://paypal.me/nolenjohnson](https://paypal.me/nolenjohnson) +- CTCaer (Linux & Low level developer, Hekate maintainer) +[https://www.patreon.com/ctcaer](https://www.patreon.com/ctcaer) - - CTCaer (Linux & Low level developer, Hekate maintainer) - [https://www.patreon.com/ctcaer](https://www.patreon.com/ctcaer) +- ave (Infrastructure & Hosting) +[https://patreon.com/aveao](https://patreon.com/aveao) - - ave (Infrastructure & Hosting) - [https://patreon.com/aveao](https://patreon.com/aveao) +::: diff --git a/docs/extras/installing_linux.md b/docs/extras/installing_linux.md index 697cf441..baa1a04f 100644 --- a/docs/extras/installing_linux.md +++ b/docs/extras/installing_linux.md @@ -1,23 +1,29 @@ # Installing Linux 4 Switch -!!! warning "Have you partitioned your microSD card?" - This guide assumes that you've followed the NH-Server guide up until this point, your microSD card should be partitioned accordingly. If you didn't do so, see [this page](../user_guide/all/partitioning_sd_syscfw.md) of our guide. +::: warning + +**Have you partitioned your microSD card?** + +This guide assumes that you've followed the NH-Server guide up until this point, your microSD card should be partitioned accordingly. If you didn't do so, see [this page](../user_guide/all/partitioning_sd_syscfw) of our guide. + +::: Linux 4 Switch is a sister project to Switchroot Android--it uses a similar kernel but provides a variety of Linux distributions.The available distributions at this time are: - Ubuntu Bionic (maintained by CTCaer, the primary dev of both the L4S kernel and hekate--this is the most stable and supported distro) - - Ubuntu Jammy (maintained by theofficialgman, one of the primary devs of the L4T Megascript installer program) - - Fedora 39 (maintained by azkali, a L4S kernel developer) - - Lakka 5.x (maintained by gavin_darkglider, a L4S kernel developer and Lakka maintainer) -!!! info "Looking for Arch?" - Unfortunately, L4S Arch Linux is deprecated following an xorg ABI change that breaks compatibility with the Tegra210 BSP. +::: info + +**Looking for Arch?** + +Unfortunately, L4S Arch Linux is deprecated following an xorg ABI change that breaks compatibility with the Tegra210 BSP. +::: -### **The installation** +## The installation To install an L4S distribution, follow the official guide starting from [0. Linux Distributions](https://wiki.switchroot.org/wiki/linux/linux-distributions). - **Note:** You can skip partitioning your microSD card since you partitioned your microSD card during the NH-Server guide. Start from step 4. during the [Installation](https://wiki.switchroot.org/wiki/linux/linux-install-update-guide#installation) section. @@ -26,17 +32,20 @@ To install an L4S distribution, follow the official guide starting from [0. Linu This page was made in collaboration with `makinbacon21` on Discord. See the collapsible section below for the L4S guide maintainers. -??? note "L4S Project Staff (Android / Linux)" - If you'd like, you can donate to the people who made this project possible using these links. +::: details L4S Project Staff (Android / Linux) + +If you'd like, you can donate to the people who made this project possible using these links. + +- CTCaer (Linux & Low level developer, Hekate maintainer) +[https://www.patreon.com/ctcaer](https://www.patreon.com/ctcaer) - - CTCaer (Linux & Low level developer, Hekate maintainer) - [https://www.patreon.com/ctcaer](https://www.patreon.com/ctcaer) +- Azkali (Linux & Low level developer) +[https://www.patreon.com/azkali](https://www.patreon.com/azkali) - - Azkali (Linux & Low level developer) - [https://www.patreon.com/azkali](https://www.patreon.com/azkali) +- gavin_darkglider (Linux & Lakka developer) +[https://paypal.me/gavindarkglider](https://paypal.me/gavindarkglider) - - gavin_darkglider (Linux & Lakka developer) - [https://paypal.me/gavindarkglider](https://paypal.me/gavindarkglider) +- ave (Infrastructure & Hosting) +[https://patreon.com/aveao](https://patreon.com/aveao) - - ave (Infrastructure & Hosting) - [https://patreon.com/aveao](https://patreon.com/aveao) +::: diff --git a/docs/extras/nandrestore.md b/docs/extras/nandrestore.md index a02f5730..ac81cdff 100644 --- a/docs/extras/nandrestore.md +++ b/docs/extras/nandrestore.md @@ -1,27 +1,35 @@ -## Restore a NAND backup to the Switch +# Restore a NAND backup to the Switch -!!! danger "Warning:" - - This will reset all of your saves, games, system version and other system settings back to the point of when you made the NAND backup. Keep this in mind, as you probably don't have to restore a NAND backup unless you have bricked your Switch or want to go back online safely after using CFW. +::: warning +**Warning:** - - If you're going to restore an old NAND which will downgrade your firmware it's best to create a second NAND backup before restoring the first one in case something goes wrong. +- This will reset all of your saves, games, system version and other system settings back to the point of when you made the NAND backup. Keep this in mind, as you probably don't have to restore a NAND backup unless you have bricked your Switch or want to go back online safely after using CFW. +- If you're going to restore an old NAND which will downgrade your firmware it's best to create a second NAND backup before restoring the first one in case something goes wrong. -### What you need: +::: + +## What you need: - Your `rawnand.bin` (Combined or in 15 or 30 parts) - Your `BOOT0` and `BOOT1` - If you're missing any of the files above, ask for further help in the [Nintendo Homebrew](https://discord.gg/C29hYvh) Discord server. - The [Hekate](https://github.com/CTCaer/hekate/releases/) Payload - A microSD card larger than 32GB -### Instructions: +## Instructions: Before we start, check if you have a tree of folders called `backup/[8 Character NAND id]/restore` on your microSD card. -!!! warning "If you don't see a backup or [8 Character NAND id] folder on your microSD card:" - This means you do not have a nand backup, it is highly recommended you make one as soon as possible. Follow the steps below to make one. +::: warning + +**If you don't see a backup or [8 Character NAND id] folder on your microSD card:** + +This means you do not have a nand backup, it is highly recommended you make one as soon as possible. Follow the steps below to make one. + +1. Launch the latest Hekate payload on your Switch. +1. Navigate to `Tools` > `Backup eMMC` > `eMMC BOOT0 & BOOT1` and let it do its thing. +1. Wait for the process to complete. When it's completed, you now have a `backup/[8 Character NAND id]/restore` folder on your microSD card. Continue with step 1 of the instructions below. - 1. Launch the latest Hekate payload on your Switch. - 1. Navigate to `Tools` > `Backup eMMC` > `eMMC BOOT0 & BOOT1` and let it do its thing. - 1. Wait for the process to complete. When it's completed, you now have a `backup/[8 Character NAND id]/restore` folder on your microSD card. Continue with step 1 of the instructions below. +::: 1. Enter RCM and inject the Hekate payload. - If you use a modchipped Switch, you can simply just turn your Switch on with the Hekate payload renamed to `payload.bin` on the root of your SD. @@ -32,14 +40,19 @@ Before we start, check if you have a tree of folders called `backup/[8 Character 1. In that same menu, select `eMMC RAW GPP` and wait for the process to complete. - This will generally take a long time to complete, the time it takes depends on your microSD card's specifications. (10-15 minutes is expected.) -!!! danger "If you're downgrading using your NAND backup" - If the security version you were on before you performed the NAND restore is HIGHER than the NAND backup itself, you have to enable autoRCM to not get stuck in a boot crash. +::: danger + +**If you're downgrading using your NAND backup** + +If the security version you were on before you performed the NAND restore is HIGHER than the NAND backup itself, you have to enable autoRCM to not get stuck in a boot crash. + +- Note: This section can be disregarded for modchipped Switch users. - - Note: This section can be disregarded for modchipped Switch users. +A system update is considered a security version when a fuse is burned, you can check **[which versions burn fuses here](https://switchbrew.org/wiki/Fuses#Anti-downgrade)**. - A system update is considered a security version when a fuse is burned, you can check **[which versions burn fuses here](https://switchbrew.org/wiki/Fuses#Anti-downgrade)**. +If you were in AutoRCM before you upgraded to a newer security version (and still were after the upgrade) you don't have to do this. - If you were in AutoRCM before you upgraded to a newer security version (and still were after the upgrade) you don't have to do this. +1. In Hekate's main menu, navigate to `Tools` and go to the bottom of the page where you will find a button called `Archive bit - AutoRCM` +1. Select the `AutoRCM` buttom and you will see `ON` written next to it. This means it is enabled. - 1. In Hekate's main menu, navigate to `Tools` and go to the bottom of the page where you will find a button called `Archive bit - AutoRCM` - 1. Select the `AutoRCM` buttom and you will see `ON` written next to it. This means it is enabled. +::: diff --git a/docs/extras/showing_file_extensions.md b/docs/extras/showing_file_extensions.md index 52b636a0..e405b0f1 100644 --- a/docs/extras/showing_file_extensions.md +++ b/docs/extras/showing_file_extensions.md @@ -2,17 +2,20 @@ By default, Microsoft Windows 10 and 11 do not show file extensions for known file types. This can result in problems when you need to rename files. -### **Instructions for Windows 10:** +## Instructions for Windows 10: 1. Open a new File Explorer window. 1. Switch to the View tab/ribbon. 1. On this tab, if the `File name extensions` checkbox is not ticked, put a check/tick mark in it by clicking it. -### **Instructions for Windows 11:** +## Instructions for Windows 11: 1. Open a new File Explorer window. 1. Click the `View` hamburger menu/dropdown menu. 1. Go to `Show` at the bottom and ensure that `File name extensions` is ticked. -!!! tip "" - ![Visual for the above instructions](img/file_extensions.png) +::: tip + +![Visual for the above instructions](img/file_extensions.png) + +::: diff --git a/docs/extras/transfer_sd.md b/docs/extras/transfer_sd.md index 0b57cc3c..188af768 100644 --- a/docs/extras/transfer_sd.md +++ b/docs/extras/transfer_sd.md @@ -4,7 +4,7 @@ The goal of this page is to transfer the contents from one microSD card to anoth We will be using [hekate](https://github.com/CTCaer/hekate/releases/) to both backup and restore the emuMMC, so make sure that you have its latest files on your microSD card already. -#### **Instructions:** +## Instructions: You should first check whether you have a file or partition based emuMMC: @@ -15,7 +15,8 @@ You should first check whether you have a file or partition based emuMMC: - If you have one it should be either `SD Raw Partition` or `SD File`. ----- -### **If you are using a file based emuMMC or are using no emuMMC at all:** + +### If you are using a file based emuMMC or are using no emuMMC at all: 1. Enter RCM and inject the Hekate payload. - If you use a modchipped Switch, you can simply just turn your Switch on with the Hekate payload renamed to `payload.bin` on the root of your microSD card. @@ -28,10 +29,16 @@ You should first check whether you have a file or partition based emuMMC: 1. Eject the `UMS` device safely from within your computer's operating system. ----- -### **If you are using a partition based emuMMC:** -!!! warning "Space for the backup" - You need at least 30GB (or 60GB if using an OLED Switch) of free space to be able to restore the emuMMC! +### If you are using a partition based emuMMC: + +::: warning + +**Space for the backup** + +You need at least 30GB (or 60GB if using an OLED Switch) of free space to be able to restore the emuMMC! + +::: 1. Enter RCM and inject the Hekate payload. - If you use a modchipped Switch, you can simply just turn your Switch on with the Hekate payload renamed to `payload.bin` on the root of your SD. @@ -40,9 +47,9 @@ You should first check whether you have a file or partition based emuMMC: 1. Once both are done, go back to the main menu, navigate to `Tools` > `USB Tools` > `SD Card` and plug your Switch into your PC via USB. 1. If Windows asks you to format a drive, discard it and open the accessible drive containing the contents of your microSD card. 1. Copy the contents of your old microSD card somewhere to your PC. -1. Follow the `Preparing Hekate` section at the bottom of [this page](../user_guide/rcm/sending_payload.md) (Unpatched Switch users only) to prepare your new SD card with Hekate's files. - - If you have a modchipped Switch, follow [this page](../user_guide/modchip/preparing_hekate.md) instead. -1. Follow only steps 1-3 on [this page](../user_guide/all/partitioning_sd.md) to partition the new microSD card for an emuMMC setup. +1. Follow the `Preparing Hekate` section at the bottom of [this page](../user_guide/rcm/sending_payload) (Unpatched Switch users only) to prepare your new SD card with Hekate's files. + - If you have a modchipped Switch, follow [this page](../user_guide/modchip/preparing_hekate) instead. +1. Follow only steps 1-3 on [this page](../user_guide/all/partitioning_sd) to partition the new microSD card for an emuMMC setup. 1. After it’s done, boot into Hekate and navigate to `Tools` > `USB Tools` > `SD Card`, then plug your Switch into your PC via USB. 1. Copy the backup you made of your old microSD card on your PC to your new microSD card. 1. Navigate to `/backup//emummc` on your microSD card and move `BOOT0`, `BOOT1` and the `rawnand.bin.xx` files to `/backup//restore/emummc`. diff --git a/docs/extras/updating.md b/docs/extras/updating.md index 1dfb8e46..c3efead6 100644 --- a/docs/extras/updating.md +++ b/docs/extras/updating.md @@ -4,12 +4,17 @@ This page documents how you can keep your system up-to-date. After following our guide, your system will consist of three core elements that can be updated. Atmosphere, Hekate and your system firmware. -### **Updating Atmosphere** +## Updating Atmosphere When updating Atmosphère, always make sure to _read the release notes_. They may list important changes and modifications to your system. -!!! warning "Updating from below Atmosphère 1.0.0" - If you update from below Atmosphère 1.0.0, there are additional steps to follow. You will have to delete the `sept` folder from your microSD, delete `fusee-secondary.bin` from your `atmosphere` folder and update your Hekate config file: hekate_ipl.ini in the `bootloader` folder. +::: warning + +**Updating from below Atmosphère 1.0.0** + +If you update from below Atmosphère 1.0.0, there are additional steps to follow. You will have to delete the `sept` folder from your microSD, delete `fusee-secondary.bin` from your `atmosphere` folder and update your Hekate config file: hekate_ipl.ini in the `bootloader` folder. + +::: When a new version of Atmosphère releases, you can update Atmosphère by following these steps: @@ -23,7 +28,7 @@ When a new version of Atmosphère releases, you can update Atmosphère by follow 1. Eject the `UMS` device safely from within your computer's operating system. 1. (If your Hekate is not on the latest version) update Hekate via the steps below. -### **Updating Hekate** +## Updating Hekate When updating Hekate always make sure to _read the release notes_. They may list important changes and modifications to your system. @@ -38,7 +43,7 @@ When a new version of Hekate releases, you can update by following these steps: 1. Go back to Hekate's main menu and press `Reload` > `Reload` to reload Hekate from your microSD card. 1. From here, you're done and you can boot into CFW. -### **Updating your firmware** +## Updating your firmware Always check _before_ updating your system firmware if the latest version of Atmosphère _as well_ as the latest version of Hekate support the firmware version you are updating towards. @@ -64,31 +69,47 @@ Atmosphere (and Hekate) come bundled with patches that automatically disable the Otherwise, you can safely update your system firmware through the system settings. -!!!warning "Note about autoRCM" - If you have autoRCM enabled and you're updating your system while in stock firmware, **updating will disable autoRCM** and you will need to enter RCM manually to boot custom firmware again. - To prevent autoRCM from being disabled, boot CFW on sysMMC and update through settings from there, as booting without AutoRCM will burn any preserved fuses. +::: warning + +**Note about autoRCM** + +If you have autoRCM enabled and you're updating your system while in stock firmware, **updating will disable autoRCM** and you will need to enter RCM manually to boot custom firmware again. + +To prevent autoRCM from being disabled, boot CFW on sysMMC and update through settings from there, as booting without AutoRCM will burn any preserved fuses. + +::: -### **About emuMMC** +### About emuMMC sysMMC and emuMMC have separate system firmwares and need to be updated separately. If you keep your emuMMC offline, you will have to use a gamecard to update your system firmware, synchronize it with another Nintendo Switch or dump an updated firmware from your sysMMC. -### **Updating emuMMC by dumping an updated firmware from your sysMMC** +### Updating emuMMC by dumping an updated firmware from your sysMMC + +::: warning + +**Do you have an eMMC backup yet?** + +Please do not start this guide without doing a RAW GPP and a BOOT 0/1 eMMC backup! + +You can learn how to make one [here](../user_guide/all/making_essential_backups). + +::: + +::: danger -!!! warning "Do you have an eMMC backup yet?" - Please do not start this guide without doing a RAW GPP and a BOOT 0/1 eMMC backup! +**Downgrading** - You can learn how to make one [here](../user_guide/all/making_essential_backups.md). +This guide is made for updating your emuMMC. It is **not** for downgrading. Downgrading at all, sysMMC or emuMMC, is not recommended and not worth it. Downgrading is also very dangerous and can lead to serious complications even when performed correctly. -!!! danger "Downgrading" - This guide is made for updating your emuMMC. It is **not** for downgrading. Downgrading at all, sysMMC or emuMMC, is not recommended and not worth it. Downgrading is also very dangerous and can lead to serious complications even when performed correctly. +::: -#### **What you need:** +#### What you need: - The latest release of [TegraExplorer](https://github.com/suchmememanyskill/TegraExplorer/releases) - The latest release of [Atmosphere](https://github.com/Atmosphere-NX/Atmosphere/releases) -#### **Preparing your microSD card** +#### Preparing your microSD card 1. Boot into Hekate. 1. Go to `Tools` > `USB Tools` > `SD Card` and connect your Switch to your PC via USB. @@ -96,7 +117,7 @@ If you keep your emuMMC offline, you will have to use a gamecard to update your Make sure your sysMMC is updated before moving onto the instructions below. -#### **Dumping your sysMMC firmware** +#### Dumping your sysMMC firmware 1. Make sure your sysMMC is up to date. If your sysMMC is not up-to-date, boot into Stock or sysCFW and update it through the System Settings. - sysCFW is recommended since it preserves e-fuses and preserves AutoRCM (if applicable). @@ -109,7 +130,7 @@ Make sure your sysMMC is updated before moving onto the instructions below. 1. When the script finishes, press any button. 1. Select `Reboot to bootloader/update.bin`. -#### **Updating your emuMMC with Daybreak** +#### Updating your emuMMC with Daybreak 1. In Hekate go to `Launch -> Atmosphere FSS0 emuMMC`. 1. Once booted, hold `R` while launching a game to boot into the homebrew menu. diff --git a/docs/faq.md b/docs/faq.md index 0c9388f0..a13c0720 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -1,4 +1,6 @@ -### **What firmware versions are currently hackable?** +# FAQ + +## What firmware versions are currently hackable? Currently two hardware revisions of the Switch exist. Any Switch bought or manufactured before the middle of 2018 has a bootrom bug that allows us to run code regardless of the firmware version on the Switch. When Nintendo updates the system, however, CFW will usually need an update to account for it. This bug cannot be fixed by Nintendo once the console leaves the factory, unless the console is sent in for repairs. This means that all current and future firmwares will be able to launch CFW through this exploit on the old hardware revision. @@ -11,17 +13,17 @@ The serial number on the back of the box can possibly tell you which consoles ar See [here](https://gbatemp.net/threads/switch-informations-by-serial-number.481215/) for an up to date list. -### **How do I use fusee-gelee? How can I boot into RCM?** +## How do I use fusee-gelee? How can I boot into RCM? To launch CFW through the fusee-gelee, the Switch needs to be in "ReCovery Mode"(RCM). The easiest way to enter RCM is by grounding pin 10 in the right joycon rail and holding VOL+ on boot. -Several methods and designs to do this exist, see [our guide](user_guide/rcm/entering_rcm.md) for more information. +Several methods and designs to do this exist, see [our guide](user_guide/rcm/entering_rcm) for more information. Once the Switch is in RCM it needs to be connected to either a computer, phone or dongle to send the exploit and the payload. This procedure needs to happen every time the Switch boots from a completely "off" state, otherwise the Switch will boot into the stock firmware. -### **What makes a good jig good? Can I use a paperclip?** +## What makes a good jig good? Can I use a paperclip? Most people prefer to use 3d-printed jigs to enter RCM. These jigs are made in a way that they slide into the right joycon rail and have a piece of connected wire that then bridges pin 10 and one of the grounded pins on the Switch. @@ -34,7 +36,7 @@ You can download and 3d-print your own jig and use the pictures on [this website Premade jigs can be found on online marketplaces for cheap. -### **Is there an easier way to enter RCM?** +## Is there an easier way to enter RCM? To enter RCM more comfortably a solution called "AutoRCM" exists. Once set up, this method will always boot the Switch into RCM, even without a jig or holding any buttons. @@ -45,7 +47,7 @@ The big downside of this method is, that it is impossible to boot the Switch wit Many Android-phones are able to send the exploit to the Switch, making them a perfect portable way to launch CFW. Different designs for portable dongles exist, ranging from Raspberry Pi Zero and Arduino projects to internal dongles, that work completely autonomous. The latter should only be done by advanced users, as it requires soldering onto the Switch mainboard itself. -### **Should I update my Firmware?** +## Should I update my Firmware? If your Switch is one of the new hardware revisions that patched the exploit in RCM and you are on firmware 7.0.1 or lower, you should not update if you want to have CFW in the forseeable future. @@ -58,7 +60,7 @@ This will not work on an unpatched system, and is practically useless for most u On every boot the Switch firmware checks how many e-fuses have been burned and how many e-fuses the Switch expects to be burned. Major updates to the Switch, or updates in which a large vulnerability has been patched, irreversibly burn one of the Switch's 64 "e-fuses". *If the Switch ever detects that more e-fuses have been burned than expected (meaning a downgrade happened), it will refuse to boot. Replacing e-fuses is not an option.* -You can find more information about fuses [here](https://switchbrew.org/wiki/Fuses#Anti-downgrade) +You can find more information about fuses [here](https://switchbrew.org/wiki/Fuses#Anti-downgrade). Atmosphèreis maintained to support the latest firmware updates on unpatched units. The situation for patched and new units is as follows: - **"Old"** *Patched Switch (HAC-001): Do NOT update past 7.0.1. Units on 7.0.1 and below will eventually get CFW. Patched units that have upgraded to 8.0.0 or 8.0.1 will likely get homebrew.* @@ -70,7 +72,7 @@ Atmosphèreis maintained to support the latest firmware updates on unpatched uni A method to update without burning e-fuses exists, but, like downgrading, it forces you to use AutoRCM and sending the exploit via USB every time, as booting into the stock firmware even once would instantly burn the e-fuse. Note that other anti-downgrade mechanisms exist, making it for example impossible to boot game carts on a firmware below 4.1/9.0.0 if the Switch has ever launched a game on firmware 4.1+/9.0.0+. This can only be worked around by completely disabling the game cart slot while on 4.1/9.0.0 or greater, which is similarly impractical for most users. -### **Is it safe to use homebrew? Will I get banned?** +## Is it safe to use homebrew? Will I get banned? The Switch comes with a lot of telemetry, and has been called a "telemetry monster" by several prominent developers. As long as the Switch is connected to the internet, Nintendo gets a report about a lot of different actions and states and has the option to log or act on them. @@ -83,14 +85,17 @@ Nintendo still receives a lot of information, even with those options disabled. We also cannot know if Nintendo decides to look for something in the logs and ban people in retrospect. They have also shown to expand their telemetry options with every other firmware update. -!!! warning "Currently all bans have been for very obvious and intrusive actions, specifically:" - - Developers using their unique Switch data to poke and reverse-engineer Nintendos Server responses - - People pirating games and using them online - - People changing their profile pictures to custom pictures - - People using savegame editors to unlock content that is not available yet and using it online (Splatoon 2) - - People cheating online in general (Modifying Cart stats in MK8) - - People installing homebrew NSP files, which Nintendo can pick up on with their telemetry +::: warning + +**Currently all bans have been for very obvious and intrusive actions, specifically:** +- Developers using their unique Switch data to poke and reverse-engineer Nintendos Server responses +- People pirating games and using them online +- People changing their profile pictures to custom pictures +- People using savegame editors to unlock content that is not available yet and using it online (Splatoon 2) +- People cheating online in general (Modifying Cart stats in MK8) +- People installing homebrew NSP files, which Nintendo can pick up on with their telemetry +::: Atmosphère stops some, but ***not all*** of Nintendo's telemetry, and prevents crash reports from being sent. This means Nintendo can't tell if anything, including homebrew or modded games crashed, and Atmosphère dumps the crash log to the microSD card to help homebrew developers. However, Nintendo still receives information about what is being played, and general system report information. @@ -105,7 +110,7 @@ All of these alternative CFWs also tend to use non-conventional setups which can Additionally, it is advised to use 90DNS which blocks connections to any Nintendo servers. If you use an emuNAND for CFW and keep your sysNAND clean for playing online, you should use 90DNS on your emuNAND. *Note: Keeping your emuNAND "dirty" and your sysNAND "clean" pertains primarily to those using the RCM exploit. Users employing Nereba or Caffeine will do the opposite.* -### **What formats can homebrew come in** +## What formats can homebrew come in Homebrew can come in two different formats, namely in `nro` files and in `bin` files. @@ -117,7 +122,7 @@ Homebrew can come in two different formats, namely in `nro` files and in `bin` f *Homebrew can potentially damage your system! Atmosphère provides protections against common bricking methods, but these are not guaranteed to always work!* -### **What microSD card/format should I use?** +## What microSD card/format should I use? microSD cards that are 32GB or smaller can be used for homebrew, but are not recommended as these will not permit you to have a full NAND dump and/or an emuMMC on them. @@ -127,7 +132,7 @@ The recommended filesystem format is FAT32. While the Switch supports exFAT thro -### **Fake microSD cards** +## Fake microSD cards Do not buy microSD cards from sites like eBay. These microSD cards are often fake and do not have the advertised amount of storage and will result in data corruption if used. @@ -139,7 +144,7 @@ If you suspect your microSD card is fake or damaged, see the instructions [here] -### **My Homebrew apps are not showing up in the Homebrew menu!** +## My Homebrew apps are not showing up in the Homebrew menu! This is an issue primarily affecting macOS users, but may occur on other devices as well. If you are able to launch the homebrew menu, but you are not seeing some or any of your Homebrew apps, you may need to unset the archive bit with Hekate. @@ -150,4 +155,4 @@ This is an issue primarily affecting macOS users, but may occur on other devices 1. Press `Fix Archive bit` - this might take a while. 1. Press `Close` in the top right corner. 1. Press `Home` in the top menu bar to get back from where you started. -1. Follow the instructions at the Launching CFW page [here](user_guide/all/launching_cfw.md) to launch Atmosphere. +1. Follow the instructions at the Launching CFW page [here](user_guide/all/launching_cfw) to launch Atmosphere. diff --git a/docs/homebrew/edizon.md b/docs/homebrew/edizon.md index 4a301c50..7e19a965 100644 --- a/docs/homebrew/edizon.md +++ b/docs/homebrew/edizon.md @@ -1,59 +1,67 @@ # Games cheats -### **EdiZon** +## EdiZon For cheats management, [EdiZon](https://github.com/WerWolv/EdiZon) and/or [EdiZon-SE](https://github.com/tomvita/EdiZon-SE) (up to date and offers more features) are recommended. They offer support for Atmosphere's cheat engine, providing an easy way to download new cheats, as well as toggle them on or off. -#### Installation requirements: +## Installation requirements: - An archive manager like [7-Zip](https://www.7-zip.org/) - The latest release of [EdiZon](https://github.com/WerWolv/EdiZon/releases) (the `EdiZon.nro` file) or [EdiZon-SE](https://github.com/tomvita/EdiZon-SE/releases) (the `EdiZon.zip` file) -!!! note "EdiZon overlay" - EdiZon also offers a Tesla-Menu overlay, however, the official EdiZon overlay is no longer maintained and will result in Atmosphere crashing when trying to use the EdiZon overlay on firmware version 16.0.0+. - The maintained EdiZon overlay can be found [here](https://github.com/proferabg/EdiZon-Overlay/releases). +::: tip +**EdiZon overlay** -=== "Installation instructions (EdiZon):" - 1. Boot into Hekate and go to `Tools` > `USB Tools` > `SD Card`, then plug your Switch into your PC via USB. - 1. Your microSD card should now be accessible on your PC, open it. - 1. Put the `EdiZon.nro` in `sd:/switch`. - 1. Boot into CFW. +EdiZon also offers a Tesla-Menu overlay, however, the official EdiZon overlay is no longer maintained and will result in Atmosphere crashing when trying to use the EdiZon overlay on firmware version 16.0.0+. -=== "Installation instructions (EdiZon-SE):" - 1. Boot into Hekate and go to `Tools` > `USB Tools` > `SD Card`, then plug your Switch into your PC via USB. - 1. Your microSD card should now be accessible on your PC, open it. - 1. Extract the `.zip` file to a location on your computer. - - If your archive manager allows for it, you can also simply open the `.zip` file directly. - 1. Copy the *contents* of the (extracted) `.zip` file to the root of your microSD card. - - **Optional:** You can verify if you've installed EdiZon-SE correctly, you should have a folder called `054e4f4558454000` (EdiZon-SE) in `sd:/atmosphere/contents` and an `EdiZon.nro` file in `sd:/switch/EdiZon`. - 1. Boot into CFW. +The maintained EdiZon overlay can be found [here](https://github.com/proferabg/EdiZon-Overlay/releases). ------ +::: -### **Usage instructions** +::::: tabs + +:::: tab default Installation instructions (EdiZon): + +1. Boot into Hekate and go to `Tools` > `USB Tools` > `SD Card`, then plug your Switch into your PC via USB. +1. Your microSD card should now be accessible on your PC, open it. +1. Put the `EdiZon.nro` in `sd:/switch`. +1. Boot into CFW. + +:::: + +:::: tab Installation instructions (EdiZon-SE): + +1. Boot into Hekate and go to `Tools` > `USB Tools` > `SD Card`, then plug your Switch into your PC via USB. +1. Your microSD card should now be accessible on your PC, open it. +1. Extract the `.zip` file to a location on your computer. + - If your archive manager allows for it, you can also simply open the `.zip` file directly. +1. Copy the *contents* of the (extracted) `.zip` file to the root of your microSD card. + - **Optional:** You can verify if you've installed EdiZon-SE correctly, you should have a folder called `054e4f4558454000` (EdiZon-SE) in `sd:/atmosphere/contents` and an `EdiZon.nro` file in `sd:/switch/EdiZon`. +1. Boot into CFW. + +:::: + +::::: + +## Usage instructions Atmosphère looks for cheats to load in the `contents` sub-folder of the `atmosphere` folder. The template it looks for is `sd:/atmosphere/contents//cheats/.txt`. You need to create the `` folder and sub-folders manually: - `title_id` being the title or program of a game. This is game specific and can be found on EdiZon's cheat menu (TID and BID, see the bottom of this page for a sample), [switchbrew](https://switchbrew.org/wiki/Title_list/Games) and [nswdb](https://nswdb.com/). - - **Note:** Title ID means the same thing as Program ID. - - `build_id` being the version of a game. This is game specific and can be found on EdiZon's cheat menu (BID, see the bottom of this page for a sample) Cheats can be version specific so make sure the cheats you are using are compatible with your game version. **Note:** On Atmosphère 0.9.4 and below `contents` is called `titles`. Once the title is launched while in Atmosphere, your cheats should be applied. ------ - -### **Preventing cheats from being enabled by default** +## Preventing cheats from being enabled by default To prevent cheats from being enabled by default, you can change your Atmosphère configuration by following the steps below. 1. Copy `system_settings.ini` from `sd:/atmosphere/config_templates` to `sd:/atmosphere/config` if it's not already there. 1. Open the `system_settings.ini` file with a text editor and edit the line `; dmnt_cheats_enabled_by_default = u8!0x1` to `dmnt_cheats_enabled_by_default = u8!0x0`. - - Make sure you remove the space and the semicolon "`; `" in front of `dmnt_cheats_enabled_by_default`. By default, holding the L button while launching a game will disable any game modification. @@ -62,14 +70,13 @@ Here the Title ID of the game (TID) is `0100646009FBE000` and the Build ID of th ![ExampleGameCheat](../extras/img/game_cheating.jpg) ------ +## Additional information: -### **Additional information:** +For more in-depth details about Atmosphere's cheat engine, you can refer to [this page](https://github.com/Atmosphere-NX/Atmosphere/blob/master/docs/features/cheats.md). -For more in-depth details about Atmosphere's cheat engine, you can refer to [this page](https://github.com/Atmosphere-NX/Atmosphere/blob/master/docs/features/cheats.md).
+## Troubleshooting -### **Troubleshooting** -#### **EdiZon isn't showing up when I open the Homebrew menu!:** +### EdiZon isn't showing up when I open the Homebrew menu!: Assuming you've followed the installation instructions successfully, this is probably due to the archive bit being set on one or more folders/files on your microSD card. This is usually the result of copying files to a microSD card via a Mac. If you are experiencing this issue, try running the archive bit fixer utility via Hekate for all files. diff --git a/docs/homebrew/ftpd.md b/docs/homebrew/ftpd.md index 775068be..6e5280fd 100644 --- a/docs/homebrew/ftpd.md +++ b/docs/homebrew/ftpd.md @@ -1,18 +1,21 @@ -### **FTPD** +# FTPD FTPD is simply an FTP server for the Switch, it can be used to transfer files wirelessly to- and from- your microSD card. ------ - -#### Usage requirements: +## Usage requirements: - An FTP client such as [WinSCP](https://winscp.net/eng/download.php) (Windows) - Any device that can connect to an FTP server with an FTP client -#### Usage instructions: +## Usage instructions: + +::: tip + +**Note** -!!! note "Note" - This section assumes that the device running the FTP client and your Switch are connected to the same network. If it's not, make sure they are connected to the same network before continuing. +This section assumes that the device running the FTP client and your Switch are connected to the same network. If it's not, make sure they are connected to the same network before continuing. + +::: 1. Launch the FTPD Homebrew app from the Homebrew menu. 1. Open your FTP client of choice. @@ -21,12 +24,10 @@ FTPD is simply an FTP server for the Switch, it can be used to transfer files wi 1. Type in port `5000` for the port and attempt to connect to your Switch. 1. You should now be able to access your microSD card wirelessly and transfer files to- and from- the microSD card. -#### FTPD's main menu: +### FTPD's main menu: ![FTPD](img/ftpd.jpg) ------ - -#### Additional information: +## Additional information: FTPD can also run in the form of a background process (sysmodule), called sys-ftpd. It can be found [here](https://github.com/cathery/sys-ftpd), usage and configuration options are mentioned there as well. diff --git a/docs/homebrew/goldleaf.md b/docs/homebrew/goldleaf.md index 9a3c9bc1..b6fa2ae4 100644 --- a/docs/homebrew/goldleaf.md +++ b/docs/homebrew/goldleaf.md @@ -1,10 +1,8 @@ -### **Goldleaf** +# Goldleaf Goldleaf is primarily a very extensive file and console content manager. ------ - -#### Common use cases for Goldleaf are: +## Common use cases for Goldleaf are: - Account management - Browsing your microSD card @@ -16,8 +14,6 @@ Goldleaf is primarily a very extensive file and console content manager. And a *lot* more, which you can view on Goldleaf's Github repository [here](https://github.com/XorTroll/Goldleaf). ------ - -#### Goldleaf screenshots: +## Goldleaf screenshots: ![main menu](img/goldleaf.jpg) diff --git a/docs/homebrew/img/ftpd.jpg b/docs/homebrew/img/ftpd.jpg old mode 100755 new mode 100644 diff --git a/docs/homebrew/index.md b/docs/homebrew/index.md index 2c6cf599..d3bd694f 100644 --- a/docs/homebrew/index.md +++ b/docs/homebrew/index.md @@ -1,30 +1,30 @@ -### **Information** +# Information This page summarizes the included Homebrew apps and additional Homebrew you can check out. -#### The guide includes a few Homebrew apps by default, these apps are: +### The guide includes a few Homebrew apps by default, these apps are: -- [JKSV](jksv.md) -- [Goldleaf](goldleaf.md) -- [FTPD](ftpd.md) -- [NXTheme Installer](nxtheme-installer.md) -- [NX-Shell](nx-shell.md) +- [JKSV](jksv) +- [Goldleaf](goldleaf) +- [FTPD](ftpd) +- [NXTheme Installer](nxtheme-installer) +- [NX-Shell](nx-shell) -#### Terminologies +### Terminologies Homebrew is a general term, the term can be used for Homebrew apps (`.nro` files) or in the form of background processes, called "sysmodules". The Switch natively has sysmodules built into its firmware but you can run additional Homebrew sysmodules that can add functionality to your Switch. In the section below, you can find additional and commonly used Homebrew apps and sysmodules. Homebrew apps are stored in `sd:/switch` by default and Homebrew sysmodules are stored in `sd:/atmosphere/contents` by default. -#### Additional Homebrew apps/sysmodules: - -- [EdiZon](edizon.md) (sysmodule and Homebrew app) -- [SimpleModManager](simplemodmanager.md) (Homebrew app) -- [Tesla-Menu](tesla-menu.md) (sysmodule) -- [MissionControl](mission-control.md) (sysmodule) -- [sys-con](sys-con.md)(sysmodule) -- [sys-botbase](sys-botbase.md) (sysmodule) -- [SysDVR](sysdvr.md) (sysmodule and Homebrew app) -- [sys-clk](sys-clk.md) (sysmodule and Homebrew app) -- [ldn_mitm](ldn_mitm.md) (sysmodule and Homebrew app) +### Additional Homebrew apps/sysmodules: + +- [EdiZon](edizon) (sysmodule and Homebrew app) +- [SimpleModManager](simplemodmanager) (Homebrew app) +- [Tesla-Menu](tesla-menu) (sysmodule) +- [MissionControl](mission-control) (sysmodule) +- [sys-con](sys-con)(sysmodule) +- [sys-botbase](sys-botbase) (sysmodule) +- [SysDVR](sysdvr) (sysmodule and Homebrew app) +- [sys-clk](sys-clk) (sysmodule and Homebrew app) +- [ldn_mitm](ldn_mitm) (sysmodule and Homebrew app) diff --git a/docs/homebrew/jksv.md b/docs/homebrew/jksv.md index 6eb332c5..a661527d 100644 --- a/docs/homebrew/jksv.md +++ b/docs/homebrew/jksv.md @@ -1,12 +1,12 @@ # Save Management -### **JKSV** +## JKSV For save management, [JKSV](https://github.com/J-D-K/JKSV) is recommended. It can be used to back up and restore game saves to your microSD card. -### **Backing up save data using JKSV** +## Backing up save data using JKSV -#### Instructions: +### Instructions: 1. Launch JKSV from the homebrew menu. 1. Select your Switch user on the left side with the `A` button. @@ -15,11 +15,9 @@ For save management, [JKSV](https://github.com/J-D-K/JKSV) is recommended. It ca 1. Enter a name for the save data folder containing the save data and press `+` or `OK`. 1. Wait for it to finish backing up your save data. ------ +## Restoring save data using JKSV -### **Restoring save data using JKSV** - -#### Instructions: +### Instructions: 1. Launch JKSV from the homebrew menu. 1. Select your Switch user on the left side with the `A` button. @@ -27,14 +25,12 @@ For save management, [JKSV](https://github.com/J-D-K/JKSV) is recommended. It ca 1. Hover over the save data folder containing the save data you want and press `Y`. 1. Hold the `A` button to restore the save data, keep holding it until it's finished. -#### **JKSV Documentation** +### JKSV Documentation Please read JKSV's [homepage](https://github.com/J-D-K/JKSV) for information on how to use it. ![ExampleSwitchTheme](../extras/img/save_jksv.jpg){ width="600" } ------ - -### **Checkpoint** +## Checkpoint [Checkpoint](https://github.com/FlagBrew/Checkpoint) is also a save manager. It can be used to back up and restore game saves to your microSD card. It also has the ability to share save data over FTP and WiFi. diff --git a/docs/homebrew/ldn_mitm.md b/docs/homebrew/ldn_mitm.md index 257503dd..ba531a88 100644 --- a/docs/homebrew/ldn_mitm.md +++ b/docs/homebrew/ldn_mitm.md @@ -1,19 +1,17 @@ -### **Information** +# Information -ldn_mitm is a [sysmodule](index.md#terminologies) that allows you to route the local wireless ad-hoc network traffic of the Switch via the network your Switch is connected to, essentially allowing "LAN" functionality between consoles and emulators using ldn_mitm. The official Github repository for ldn_mitm can be found [here](https://github.com/spacemeowx2/ldn_mitm). +ldn_mitm is a [sysmodule](index#terminologies) that allows you to route the local wireless ad-hoc network traffic of the Switch via the network your Switch is connected to, essentially allowing "LAN" functionality between consoles and emulators using ldn_mitm. The official Github repository for ldn_mitm can be found [here](https://github.com/spacemeowx2/ldn_mitm). -#### Common use cases for ldn_mitm: +### Common use cases for ldn_mitm: - It can be used in combination with [lan-play](http://lan-play.com/install-switch) - It can be used in combination with [XLink Kai](https://www.teamxlink.co.uk/wiki/Nintendo_Switch_XLink_Kai_Setup) - It can be used in combination with real Switch consoles and emulators ------ - -#### Installation requirements: +## Installation requirements: - An archive manager like [7-Zip](https://www.7-zip.org/) - The latest release of [ldn_mitm](https://github.com/DefenderOfHyrule/ldn_mitm/releases) (the `ldn_mitm.zip` file) -#### Installation instructions: +## Installation instructions: 1. Boot into Hekate and go to `Tools` > `USB Tools` > `SD Card`, then plug your Switch into your PC via USB. 1. Your microSD card should now be accessible on your PC, open it. 1. Extract the `.zip` file to a location on your computer. @@ -22,24 +20,18 @@ ldn_mitm is a [sysmodule](index.md#terminologies) that allows you to route the l - **Optional:** You can verify if you've installed ldn_mitm correctly, you should have a folder called `4200000000000010` (ldn_mitm) in `sd:/atmosphere/contents` and the `ldnmitm_config.nro` file in `sd:/switch/ldnmitm_config`. 1. Boot into CFW. ------ - -### **Basic usage instructions** +## Basic usage instructions You can enable/disable ldn_mitm by opening the Homebrew menu, opening ldn_mitm's config app and pressing `Y` to toggle ldn_mitm. ![ldn_mitm](img/ldn_mitm.jpg) ------ - -### **Troubleshooting** -#### **My Switch crashes on boot after I installed ldn_mitm!:** +## Troubleshooting +### My Switch crashes on boot after I installed ldn_mitm!: **Cause:** If your Switch crashes with Error `std::abort (0xFFE)` and Title ID `4200000000000010`, you're using a version of ldn_mitm that's incompatible with your Atmosphere version. The expected Atmosphere version is mentioned on each release page of an ldn_mitm release. -  - -#### **ldn_mitm isn't working!:** +### ldn_mitm isn't working!: Assuming you've followed the installation instructions successfully, this is probably due to the archive bit being set on one or more folders/files on your microSD card. This is usually the result of copying files to a microSD card via a Mac. If you are experiencing this issue, try running the archive bit fixer utility via Hekate for all files. diff --git a/docs/homebrew/mission-control.md b/docs/homebrew/mission-control.md index a6a0b0d0..44743c6b 100644 --- a/docs/homebrew/mission-control.md +++ b/docs/homebrew/mission-control.md @@ -1,14 +1,12 @@ -### **Information** +# MissionControl -MissionControl is a [sysmodule](index.md#terminologies) that allows you to pair normally-unsupported controllers as if they were natively supported, like PS3, PS4, PS5 and Xbox One S/X controllers via Bluetooth. The full supported controller list can be found on the official Github repository [here](https://github.com/ndeadly/MissionControl) including pairing instructions for the supported controllers. +MissionControl is a [sysmodule](index#terminologies) that allows you to pair normally-unsupported controllers as if they were natively supported, like PS3, PS4, PS5 and Xbox One S/X controllers via Bluetooth. The full supported controller list can be found on the official Github repository [here](https://github.com/ndeadly/MissionControl) including pairing instructions for the supported controllers. ------ - -#### Installation requirements: +## Installation requirements: - An archive manager like [7-Zip](https://www.7-zip.org/) - The latest release of [MissionControl](https://github.com/ndeadly/MissionControl/releases) (the `MissionControl-(version)-master.zip` file) -#### Installation instructions: +## Installation instructions: 1. Boot into Hekate and go to `Tools` > `USB Tools` > `SD Card`, then plug your Switch into your PC via USB. 1. Your microSD card should now be accessible on your PC, open it. 1. Extract the `.zip` file to a location on your computer. @@ -17,16 +15,12 @@ MissionControl is a [sysmodule](index.md#terminologies) that allows you to pair - **Optional:** You can verify if you've installed MissionControl correctly, you should have a folder called `010000000000BD00` (MissionControl) in `sd:/atmosphere/contents`. 1. Boot into CFW. ------ - -### **Troubleshooting** -#### **My Switch crashes on boot after I installed MissionControl!:** +## Troubleshooting +### My Switch crashes on boot after I installed MissionControl!: **Cause:** If your Switch crashes with Error `std::abort (0xFFE)` and Title ID `010000000000BD00`, you're using a version of MissionControl that's incompatible with your Atmosphere version. The expected Atmosphere version is mentioned on each release page of a MissionControl release. -  - -#### **MissionControl isn't working!:** +### MissionControl isn't working!: Assuming you've followed the installation instructions successfully, this is probably due to the archive bit being set on one or more folders/files on your microSD card. This is usually the result of copying files to a microSD card via a Mac. If you are experiencing this issue, try running the archive bit fixer utility via Hekate for all files. diff --git a/docs/homebrew/nx-shell.md b/docs/homebrew/nx-shell.md index d7a1eabd..5da8ad74 100644 --- a/docs/homebrew/nx-shell.md +++ b/docs/homebrew/nx-shell.md @@ -1,9 +1,8 @@ -### **NX-Shell** -NX-Shell is a file manager. +# NX-Shell ------ +NX-Shell is a file manager. -#### Common use cases for NX-Shell +### Common use cases for NX-Shell - Copying files - Moving files @@ -15,9 +14,7 @@ NX-Shell is a file manager. For more information, you can check out NX-Shell's Github repository [here](https://github.com/joel16/NX-Shell). ------ - -#### NX-Shell screenshots: +### NX-Shell screenshots: ![nx-shell-main](img/nx-shell-main.jpg) diff --git a/docs/homebrew/nxtheme-installer.md b/docs/homebrew/nxtheme-installer.md index 35a333a1..0b403799 100644 --- a/docs/homebrew/nxtheme-installer.md +++ b/docs/homebrew/nxtheme-installer.md @@ -2,79 +2,89 @@ Using NXTheme Installer, you can install and create unique styles and layouts for your Switch Home Menu. -### **Index** +### Index - Follow the [Installing a theme](#installing-a-theme) section if you want to install a theme. - - Follow the [Making a theme](#making-a-theme) section if you want to make a theme manually. - - Follow the [Installing a custom font](#installing-a-custom-font) section if you want to install a custom font. - - If you run into any issues, visit the [Troubleshooting](#troubleshooting) section. ------ +## Installing a theme -### **Installing a theme** +::: tip -!!! note "Community Themes" - If you want to use community made themes, for example from the [r/NXThemes](https://www.reddit.com/r/NXThemes/) subreddit or [Themezer](https://themezer.net), you can follow the guide below to install a community provided `.nxtheme` file. +**Community Themes** -#### **What you need:** +If you want to use community made themes, for example from the [r/NXThemes](https://www.reddit.com/r/NXThemes/) subreddit or [Themezer](https://themezer.net), you can follow the guide below to install a community provided `.nxtheme` file. + +::: + +## What you need: - The latest release of [NXThemes Installer](https://github.com/exelix11/SwitchThemeInjector/releases) -#### **Instructions:** +## Instructions: 1. Download `NXThemesInstaller.nro` and put it in `sd:/switch`. 1. Copy the `.nxtheme` files to the `themes` folder on your microSD card (It is recommended you put them into their own folders, e.g. `sd:/themes/awesome_theme/awesome.nxtheme`). - Create the `themes` folder on the root of your microSD card if it does not exist. 1. Boot into sysCFW/emuMMC and launch the Homebrew Menu, then launch `NXThemes Installer` *with* an internet connection. - NXTheme Installer will automatically download the required theme patches if it has a connection to the internet. These theme patches are required for themes to work. - If you don't want to or don't have the ability connect to a Wi-Fi network, installing the theme patches can be done manually. - See the instructions [here](https://github.com/exelix11/theme-patches#if-you-dont-want-to-connect-your-console-to-the-internet) on how to install them manually. + - If you don't want to or don't have the ability connect to a Wi-Fi network, installing the theme patches can be done manually. + - See the instructions [here](https://github.com/exelix11/theme-patches#if-you-dont-want-to-connect-your-console-to-the-internet) on how to install them manually. 1. If you get prompted about extracting your home menu data, do so. - You can always do this manually via the `Extract home menu` tab in `NXTheme Installer`. 1. You should now see the main menu of `NXTheme Installer`, the `Themes` tab is where you will find your themes. To install them, press the folder name of your theme and go through each home menu section to install the desired theme for that section (e.g. going to `/awesome_theme` and selecting your theme for the specific menu you want to change, do the same for the other menus). 1. Reboot into CFW via the `Reboot` tab to see the changes. -!!! tip "An example of a Home Menu theme being installed" - ![ExampleSwitchTheme](../extras/img/switch_theming.jpg) +::: tip ------ +**An example of a Home Menu theme being installed** + +![ExampleSwitchTheme](../extras/img/switch_theming.jpg) -### **Making a theme** +::: -=== "**Windows**" +## Making a theme - #### **What you need:** +::::: tabs - The latest release of [**Switch Theme Injector**](https://github.com/exelix11/SwitchThemeInjector/releases) +:::: tab default Windows - - You need to download the `ReleaseVx.x.zip` on the download page +### What you need: - #### **Making the theme** +The latest release of [**Switch Theme Injector**](https://github.com/exelix11/SwitchThemeInjector/releases) +- You need to download the `ReleaseVx.x.zip` on the download page - 1. Unzip `ReleaseVx.x.zip` to somewhere on your PC's drive. - 1. Open up the `SwitchThemes.exe` app. Navigate to `NXTheme Builder`. - 1. Select a Home menu part, A 720p image and a Layout patch. Click on `Build NXTheme` after selecting your home menu part, image and layout patch. - 1. Fill out the details in the window that pops up. After filling out this window and clicking ok, you will get asked where to save the NXTheme file. Save this file to a temporary folder. - 1. Repeat step 3 and 4 for every Home Menu part of the Switch you want to modify. +### Making the theme -=== "**Mac / Linux / ChromeOS**" +1. Unzip `ReleaseVx.x.zip` to somewhere on your PC's drive. +1. Open up the `SwitchThemes.exe` app. Navigate to `NXTheme Builder`. +1. Select a Home menu part, A 720p image and a Layout patch. Click on `Build NXTheme` after selecting your home menu part, image and layout patch. +1. Fill out the details in the window that pops up. After filling out this window and clicking ok, you will get asked where to save the NXTheme file. Save this file to a temporary folder. +1. Repeat step 3 and 4 for every Home Menu part of the Switch you want to modify. - #### **Making the theme** +:::: - Make sure that the images you want to use are 1280x720 and in JPG! +:::: tab Mac / Linux / ChromeOS - 1. Navigate to [**Exelix's Web Injector**](https://exelix11.github.io/SwitchThemeInjector/v2/) - 1. Select a Theme Target you want to edit. After this, click the Open an Image button and select your background image. - 1. Choose a theme name and an author name and optionally a different layout, then click build NxTheme. - 1. Your browser will prompt you to download a file. Save this file to a temporary folder. - 1. Repeat step 2 to 4 for every Home Menu part of the Switch you want to modify. +#### Making the theme + +Make sure that the images you want to use are 1280x720 and in JPG! + +1. Navigate to [**Exelix's Web Injector**](https://exelix11.github.io/SwitchThemeInjector/v2/). +1. Select a Theme Target you want to edit. After this, click the Open an Image button and select your background image. +1. Choose a theme name and an author name and optionally a different layout, then click build NxTheme. +1. Your browser will prompt you to download a file. Save this file to a temporary folder. +1. Repeat step 2 to 4 for every Home Menu part of the Switch you want to modify. + +:::: + +::::: ----- -### **Installing a custom font** +## Installing a custom font 1. Put a font with the `.ttf` file type into the `themes` folder (It is recommended you put them into their own folders, e.g. `sd:/themes/cool_font/font.ttf`). 1. Boot into sysCFW/emuMMC, launch the Homebrew Menu and launch `NXThemes Installer`. @@ -82,11 +92,9 @@ Using NXTheme Installer, you can install and create unique styles and layouts fo 1. Install your desired font by selecting the `.ttf` file in the font folder you created. 1. Reboot into CFW via the `Reboot` tab to see the changes. +## Troubleshooting ------ - -### **Troubleshooting** -#### **My Switch crashes on boot after I installed a theme!:** +### My Switch crashes on boot after I installed a theme!: **Cause 1:** You didn't install the required theme patches for your firmware version. You can remove your installed custom theme data by navigating to `sd:/atmosphere/contents` and deleting the `01000000000001000` folder. @@ -96,9 +104,7 @@ Using NXTheme Installer, you can install and create unique styles and layouts fo - **Note:** `contents` is called `titles` on Atmosphère versions 0.9.4 and below. -  - -#### **My Switch crashes on boot after I installed a font!:** +### My Switch crashes on boot after I installed a font!: **Cause 1:** You installed a font that was too large in file size (maximum file size being 1.9MB). You can remove your installed custom font data by navigating to `sd:/atmosphere/contents` and deleting the `0100000000000811` folder. @@ -106,9 +112,7 @@ Using NXTheme Installer, you can install and create unique styles and layouts fo - **Note:** `contents` is called `titles` on Atmosphère versions 0.9.4 and below. -  - -#### **The NXTheme installer crashes when I launch it:** +### The NXTheme installer crashes when I launch it: This is probably due to the archive bit being set on either the app or the `.nxtheme` files. This is usually the result of copying files to a microSD card via a Mac. If you are experiencing this issue, try running the archive bit fixer utility via Hekate for all files. diff --git a/docs/homebrew/simplemodmanager.md b/docs/homebrew/simplemodmanager.md index 0b263f44..99f66c31 100644 --- a/docs/homebrew/simplemodmanager.md +++ b/docs/homebrew/simplemodmanager.md @@ -1,29 +1,33 @@ -### Information +# SimpleModManager -SimpleModManager is a [homebrew app](index.md#terminologies) that allows easily adding and removing mods to the layeredFS directory from another directory on the SD card. +SimpleModManager is a [homebrew app](index#terminologies) that allows easily adding and removing mods to the layeredFS directory from another directory on the SD card. -#### Common use cases for SimpleModManager: +### Common use cases for SimpleModManager: - Switching between large modpacks - Enabling and disabling individual mods -!!! warning "What **not** to use SimpleModManager for." - SimpleModManager should not be used for some specific games like Super Smash Bros. Ultimate and The Legend of Zelda: Breath of the Wild and Tears of the Kingdom. This is due to how these games handle mods differently from others. - ----- +::: warning -#### Installation requirements: +**What NOT to use SimpleModManager for.** + +SimpleModManager should not be used for some specific games like Super Smash Bros. Ultimate and The Legend of Zelda: Breath of the Wild and Tears of the Kingdom. This is due to how these games handle mods differently from others. + +::: + +## Installation requirements: - The latest release of [SimpleModManager](https://github.com/nadrino/SimpleModManager/releases/latest) (the `SimpleModManager.nro` file) -#### Installation instructions: +## Installation instructions: 1. Boot into Hekate and go to `Tools` > `USB Tools` > `SD Card`, then plug your Switch into your PC via USB. 1. Your microSD card should now be accessible on your PC, open it. 1. Copy the `SimpleModManager.nro` file the `/switch/` folder on your microSD card. 1. Boot into CFW. -#### Usage instructions: +## Usage instructions: 1. Create a directory named `mods///` on the root of the SD card. - What you put for the mod name does not have to align with anything, put whatever you like! -1. Create the layeredFS directory for your mod that can be found on the [Game Modding](../extras/game_modding.md) page, skipping the `atmosphere` folder inside the `` folder. +1. Create the layeredFS directory for your mod that can be found on the [Game Modding](../extras/game_modding) page, skipping the `atmosphere` folder inside the `` folder. 1. Launch SimpleModManager via the Homebrew Menu and your games will show up, pressing A on them will show the mods available. ![ExampleSwitchTheme](img/simplemodmanager1.jpg){ width="600" } diff --git a/docs/homebrew/sys-botbase.md b/docs/homebrew/sys-botbase.md index 5eae2e65..f6f08a95 100644 --- a/docs/homebrew/sys-botbase.md +++ b/docs/homebrew/sys-botbase.md @@ -1,19 +1,17 @@ -### **Information** +# sys-botbase -sys-botbase is an advanced [sysmodule](index.md#terminologies) that allows users to interact with their Switch remotely, to "remote control" their Switch. This remote control allows users to create automated tasks, simulate button presses, simulate touchscreen input and read/write to the memory of the Switch while in-game. +sys-botbase is an advanced [sysmodule](index#terminologies) that allows users to interact with their Switch remotely, to "remote control" their Switch. This remote control allows users to create automated tasks, simulate button presses, simulate touchscreen input and read/write to the memory of the Switch while in-game. -#### Common use cases for sys-botbase: +### Common use cases for sys-botbase: - Use ACNHPokerCore in combination with ACNH - Controlling a game remotely - Automation ------ - -#### Installation requirements: +## Installation requirements: - An archive manager like [7-Zip](https://www.7-zip.org/) - The latest release of [sys-botbase](https://github.com/olliz0r/sys-botbase/releases) (the `sys-botbase(version).zip` file) -#### Installation instructions: +## Installation instructions: 1. Boot into Hekate and go to `Tools` > `USB Tools` > `SD Card`, then plug your Switch into your PC via USB. 1. Your microSD card should now be accessible on your PC, open it. 1. Extract the `.zip` file to a location on your computer. @@ -22,18 +20,15 @@ sys-botbase is an advanced [sysmodule](index.md#terminologies) that allows users - **Optional:** You can verify if you've installed sys-botbase correctly, you should have a folder called `430000000000000B` (sys-botbase) in `sd:/atmosphere/contents`. 1. Boot into CFW. ------ +## Troubleshooting -### **Troubleshooting** -#### **My Switch crashes on boot after I installed sys-botbase!:** +### My Switch crashes on boot after I installed sys-botbase!: **Cause:** While it's almost impossible for this to happen, if your Switch crashes with Error `2001-0123 (0xf601)` and Title ID `430000000000000B`, you're using a version of sys-botbase that's incompatible with your Atmosphere version. - **Note:** sys-botbase will almost never crash unless something is fundamentally wrong with the contents of your microSD card. If it does crash and need an update, an updated release will be mentioned here. -  - -#### **sys-botbase isn't working!:** +### sys-botbase isn't working!: Assuming you've followed the installation instructions successfully, this is probably due to the archive bit being set on one or more folders/files on your microSD card. This is usually the result of copying files to a microSD card via a Mac. If you are experiencing this issue, try running the archive bit fixer utility via Hekate for all files. diff --git a/docs/homebrew/sys-clk.md b/docs/homebrew/sys-clk.md index e3e92037..4d30e050 100644 --- a/docs/homebrew/sys-clk.md +++ b/docs/homebrew/sys-clk.md @@ -1,17 +1,20 @@ -### **Information** +## sys-clk -sys-clk is a [sysmodule](index.md#terminologies) that allows you to overclock the hardware of your Switch. The usage, configuration and clock speed information can be found on the official Github repository [here](https://github.com/retronx-team/sys-clk) +sys-clk is a [sysmodule](index#terminologies) that allows you to overclock the hardware of your Switch. The usage, configuration and clock speed information can be found on the official Github repository [here](https://github.com/retronx-team/sys-clk) -!!! danger "Limits of sys-clk" - sys-clk has limits for a reason, which is to not damage the hardware of your Switch. Using ***any*** modified version of sys-clk puts your Switch at risk of hardware failure. We do not support any modified version of sys-clk nor should you ever touch them. Overclocking is not something you should be doing 24/7 as overclocking in general will always degrade/wear out the hardware of your Switch faster and you should know what you're doing if you *do* decide to do so. +::: danger ------ +**Limits of sys-clk** -#### Installation requirements: +sys-clk has limits for a reason, which is to not damage the hardware of your Switch. Using ***any*** modified version of sys-clk puts your Switch at risk of hardware failure. We do not support any modified version of sys-clk nor should you ever touch them. Overclocking is not something you should be doing 24/7 as overclocking in general will always degrade/wear out the hardware of your Switch faster and you should know what you're doing if you *do* decide to do so. + +::: + +## Installation requirements: - An archive manager like [7-Zip](https://www.7-zip.org/) - The latest release of [sys-clk](https://github.com/retronx-team/sys-clk/releases) (the `sys-clk-(version).zip` file) -#### Installation instructions: +## Installation instructions: 1. Boot into Hekate and go to `Tools` > `USB Tools` > `SD Card`, then plug your Switch into your PC via USB. 1. Your microSD card should now be accessible on your PC, open it. 1. Extract the `.zip` file to a location on your computer. @@ -20,28 +23,20 @@ sys-clk is a [sysmodule](index.md#terminologies) that allows you to overclock th - **Optional:** You can verify if you've installed sys-clk correctly, you should have a folder called `00FF0000636C6BFF` (sys-clk) in `sd:/atmosphere/contents`. 1. Boot into CFW. ------ - -### **Basic usage instructions** +## Basic usage instructions Open the Homebrew menu and open sys-clk's manager app. This app allows you to change the global clock speeds or clock speeds based on title. ------ - -### **Troubleshooting** -#### **My Switch crashes on boot after I installed sys-clk!:** +## Troubleshooting +### My Switch crashes on boot after I installed sys-clk!: **Cause:** If your Switch crashes on boot, make sure you're using the latest release of sys-clk. If it continues to crash afterwards, see the troubleshooting step at the bottom of this page. -  - -#### **My Switch crashes while using sys-clk!:** +## My Switch crashes while using sys-clk!: **Cause:** You're either using a modified version of sys-clk and pushing the hardware of your Switch too far or your console is overheating. The cooling system of the Switch is *not* the best and overheating can be a cause of dried up thermal paste/lack of thermal paste. Overclock with caution and be careful, monitor the temperatures of your Switch using a Tesla-Menu overlay like [Status-Monitor-Overlay](https://github.com/masagrator/Status-Monitor-Overlay) (requires Tesla-Menu). -  - -#### **sys-clk isn't working!:** +## sys-clk isn't working!: Assuming you've followed the installation instructions successfully, this is probably due to the archive bit being set on one or more folders/files on your microSD card. This is usually the result of copying files to a microSD card via a Mac. If you are experiencing this issue, try running the archive bit fixer utility via Hekate for all files. diff --git a/docs/homebrew/sys-con.md b/docs/homebrew/sys-con.md index 4808ead7..7d89cf30 100644 --- a/docs/homebrew/sys-con.md +++ b/docs/homebrew/sys-con.md @@ -1,14 +1,12 @@ -### **Information** +# sys-con -sys-con is a [sysmodule](index.md#terminologies) that allows you to use normally-unsupported controllers as if they were natively supported, like PS3, PS4, PS5 and Xbox One S/X controllers via USB. The full supported feature and controller list can be found on the official Github repository [here](https://github.com/cathery/sys-con) including usage instructions and configuration options. +sys-con is a [sysmodule](index#terminologies) that allows you to use normally-unsupported controllers as if they were natively supported, like PS3, PS4, PS5 and Xbox One S/X controllers via USB. The full supported feature and controller list can be found on the official Github repository [here](https://github.com/cathery/sys-con) including usage instructions and configuration options. ------ - -#### Installation requirements: +## Installation requirements: - An archive manager like [7-Zip](https://www.7-zip.org/) - The latest release of [sys-con](https://github.com/cathery/sys-con/releases) (the `sys-con-(version).zip` file) -#### Installation instructions: +## Installation instructions: 1. Boot into Hekate and go to `Tools` > `USB Tools` > `SD Card`, then plug your Switch into your PC via USB. 1. Your microSD card should now be accessible on your PC, open it. 1. Extract the `.zip` file to a location on your computer. @@ -17,18 +15,15 @@ sys-con is a [sysmodule](index.md#terminologies) that allows you to use normally - **Optional:** You can verify if you've installed sys-con correctly, you should have a folder called `690000000000000D` (sys-con) in `sd:/atmosphere/contents`. 1. Boot into CFW. ------ +## Troubleshooting -### **Troubleshooting** -#### **My Switch crashes on boot after I installed sys-con!:** +### My Switch crashes on boot after I installed sys-con!: **Cause:** While it's almost impossible for this to happen, if your Switch crashes with Error code `2162-0002 (0x4a2)` and Title ID `690000000000000D`, you're using a version of sys-con that's incompatible with your Switch firmware version. The expected firmware version is mentioned on each release page of a sys-con release. - **Note:** sys-con hasn't needed an update for years as of the moment of writing this. If it does need an update, an updated release will be mentioned here. -  - -#### **sys-con isn't working!:** +### sys-con isn't working!: Assuming you've followed the installation instructions successfully, this is probably due to the archive bit being set on one or more folders/files on your microSD card. This is usually the result of copying files to a microSD card via a Mac. If you are experiencing this issue, try running the archive bit fixer utility via Hekate for all files. diff --git a/docs/homebrew/sysdvr.md b/docs/homebrew/sysdvr.md index 8584b2db..08b7ed09 100644 --- a/docs/homebrew/sysdvr.md +++ b/docs/homebrew/sysdvr.md @@ -1,14 +1,12 @@ -### **Information** +# SysDVR -SysDVR is a [sysmodule](index.md#terminologies) that allows you to stream the screen of your Switch (while in-game/in an application) to your PC via the network or USB. +SysDVR is a [sysmodule](index#terminologies) that allows you to stream the screen of your Switch (while in-game/in an application) to your PC via the network or USB. -### **SysDVR** +## Usage Installation, usage, configuration and extensive troubleshooting information can be found on the [SysDVR Wiki](https://github.com/exelix11/SysDVR/wiki). ------ - -#### SysDVR screenshots: +## SysDVR screenshots: ![sysdvr](img/sysdvr1.png) diff --git a/docs/homebrew/tesla-menu.md b/docs/homebrew/tesla-menu.md index f670aa0b..8ef96809 100644 --- a/docs/homebrew/tesla-menu.md +++ b/docs/homebrew/tesla-menu.md @@ -1,11 +1,16 @@ -### **Information** +# Tesla-Menu Tesla-Menu is an overlay menu developed by [WerWolv](https://github.com/WerWolv), Tesla-Menu is comparable to Rosalina menu on the 3DS and its purpose is to be able to load community made overlays for Homebrew apps and sysmodules that can be accessed at any time. Below you can find common use cases for Tesla-Menu. The official Github page for Tesla-Menu can be found [here](https://github.com/WerWolv/Tesla-Menu). -!!! note "Dependencies" - Tesla-Menu is dependent on a [sysmodule](index.md#terminologies) called `nx-ovlloader`, this sysmodule is responsible for loading `ovlmenu.ovl` from `sd:/switch/.overlays`. +::: tip -#### Common use cases for Tesla-Menu: +**Dependencies** + +Tesla-Menu is dependent on a [sysmodule](index#terminologies) called `nx-ovlloader`, this sysmodule is responsible for loading `ovlmenu.ovl` from `sd:/switch/.overlays`. + +::: + +### Common use cases for Tesla-Menu: - Load community made Tesla-Menu overlays - Viewing the temperatures/clock speeds of your hardware - Editing sysmodule configs on the fly (if applicable) @@ -13,14 +18,12 @@ Tesla-Menu is an overlay menu developed by [WerWolv](https://github.com/WerWolv) - Toggling cheats easily - Toggling sysmodules ------ - -#### Installation requirements: +## Installation requirements: - An archive manager like [7-Zip](https://www.7-zip.org/) - The latest release of [Tesla-Menu](https://github.com/WerWolv/Tesla-Menu/releases/tag/v1.2.3) (the `ovlmenu.zip` file) - The latest release of [nx-ovlloader](https://github.com/WerWolv/nx-ovlloader/releases/tag/v1.0.7) (the `nx-ovlloader.zip` file) -#### Installation instructions: +## Installation instructions: 1. Boot into Hekate and go to `Tools` > `USB Tools` > `SD Card`, then plug your Switch into your PC via USB. 1. Your microSD card should now be accessible on your PC, open it. 1. Extract both `.zip` files to a location on your computer. @@ -29,14 +32,12 @@ Tesla-Menu is an overlay menu developed by [WerWolv](https://github.com/WerWolv) - **Optional:** You can verify if you've installed Tesla-Menu and nx-ovlloader correctly, you should have a folder called `420000000007E51A` (nx-ovlloader) in `sd:/atmosphere/contents` and the `ovlmenu.ovl` (Tesla-Menu) file in `sd:/switch/.overlays`. 1. Boot into CFW. ------ - -### **Opening Tesla-Menu** +## Opening Tesla-Menu Tesla-Menu can be opened by pressing `L` + `R Stick press (R3)` + `DPAD down`, assuming you use the default configuration. ![tesla](img/tesla-menu.jpg) -#### Changing the button combination +## Changing the button combination If you wish to change the default button configuration, see the instructions below: @@ -51,9 +52,7 @@ If you wish to change the default button configuration, see the instructions bel ``` 1. Change the `key_combo` value to anything you desire and save the file. The accepted inputs are mentioned on the third line. ------ - -### **Commonly used Tesla-Menu overlays** +## Commonly used Tesla-Menu overlays - [Status-Monitor-Overlay](https://github.com/masagrator/Status-Monitor-Overlay) - [EdiZon overlay](https://github.com/proferabg/EdiZon-Overlay) - [QuickNTP](https://github.com/nedex/QuickNTP) @@ -62,30 +61,22 @@ If you wish to change the default button configuration, see the instructions bel - [ldn_mitm](https://github.com/DefenderOfHyrule/ldn_mitm) (this requires you to also install the ldn_mitm sysmodule) - [Fizeau](https://github.com/averne/Fizeau) (this requires you to also install the Fizeau sysmodule) ------ - -### **Troubleshooting** -#### **My Switch crashes on boot after I installed Tesla-Menu/nx-ovlloader!:** +## Troubleshooting +### My Switch crashes on boot after I installed Tesla-Menu/nx-ovlloader!: **Cause:** If your Switch crashes with Error code `2001-0123 (0xf601)` and Title ID `420000000007E51A`, you didn't successfully install Tesla-Menu or you aren't using the latest release of Tesla-Menu, re-follow the installation instructions above. -  - -#### **My Switch crashes when I open an overlay via Tesla-Menu!:** +### My Switch crashes when I open an overlay via Tesla-Menu!: **Cause:** If your Switch crashes with Error code `2001-0123 (0xf601)` and Title ID `420000000007E51A`, the overlay you're trying to open/use isn't up to date. Check its source repository for updates. - If this overlay doesn't have an updated release, you may have to look for a forked (updated) release or compile it yourself using the latest `libtesla` library. The latter is for developers (or advanced users). -  - -#### **Tesla-Menu is only showing while on the main menu and not in-game!:** +### Tesla-Menu is only showing while on the main menu and not in-game!: **Cause:** This issue will only happen when the Switch is docked, ensure that you've set the "Screen size" in `System Settings` > `TV Output` to 100%. Adjust your TV/monitor to fit the entirety of the screen of your Switch using its OSD (On Screen Display) or remote. -  - -#### **Tesla-Menu isn't opening when I press the correct button combination!:** +### Tesla-Menu isn't opening when I press the correct button combination!: Assuming you've followed the installation instructions successfully, this is probably due to the archive bit being set on one or more folders/files on your microSD card. This is usually the result of copying files to a microSD card via a Mac. If you are experiencing this issue, try running the archive bit fixer utility via Hekate for all files. diff --git a/docs/index.md b/docs/index.md index 7e4bd21f..ce578d0f 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,16 +1,20 @@ - - -# **NH Switch Guide** - -The NH Switch Guide is a collaboration from Nintendo Homebrew's Discord community, getting you from a stock Switch to Atmosphère. - -For live support with this guide, visit us in **#switch-assistance-1** or **#switch-assistance-2** over at the [NH-Discord server](https://discord.gg/C29hYvh). +--- +layout: home +title: "NH Switch Guide" +hero: + text: "NH Switch Guide" + tagline: "A collaboration from Nintendo Homebrew's Discord community, getting you from a stock Switch to Atmosphère." + image: + src: "/img/home-page-feature.jpg" +--- + +::: tip Prepare to set aside a minimum of an hour to follow this guide. This is specifically for you to carefully read and understand each page for safe execution for the safety and longevity of your Switch console. Some required device backups can also take around ten to thirty minutes to create, depending on your Switch model and your microSD card specifications. ------ +::: -### **What is Custom Firmware?** +## What is Custom Firmware? Custom FirmWare (“CFW”) is complex software that modifies the function of a device's operating system, also known as a system firmware. Atmosphère, for example, patches the Switch OS (named Horizon) on the fly. @@ -18,34 +22,26 @@ Atmosphère, for example, patches the Switch OS (named Horizon) on the fly. Custom firmware can be considered a holy grail in terms of device modding, as it allows nearly limitless control and freedoms than you would get with more primitive "userland" access.   ------ - -### **What is homebrew?** +## What is homebrew? Homebrew refers to unofficial software written by hobbyists for locked down systems, like the Nintendo Switch. Homebrew can include original games, emulators, save-editing tools, and much, much more! On the Switch in particular, you need CFW to run almost all available homebrew. Some first-gen ("V1") consoles can run homebrew for free, while all other ("patched") consoles require specialized hardware installation beforehand.   ------ - -### **What are custom operating systems?** +## What are custom operating systems? Custom operating systems (OSes) are alternative system software installations, like Android or Linux, that install alongside the default Switch OS. These are usually perfect for powerusers who want to extend the functionality of their console beyond that of a gaming console, transforming Nintendo Switch to a full-fledged hybrid tablet or desktop. These custom OSes run completely independent of the Switch OS, meaning that anything you do in a custom OS cannot be reported back to Nintendo. Custom operating systems are not "emulated"; they run natively on the Switch's Tegra X1 SoC. This guide will give you the opportunity to set aside space on your microSD to install these custom OSes onto, if you desire. It is important to note that these installations are optional; you do not need to install any custom OS in order to complete this guide and install Atmosphère. However, it is better to decide sooner rather than later, as the installation process involves formatting your microSD card. ------ - -### **What does this guide install?** +## What does this guide install? This guide has the end-goal of taking a completely unmodified Switch from stock firmware to a custom firmware named Atmosphère. [fusee-gelee](files/extras/fusee_gelee_nvidia.pdf) is currently the most widespread software entrypoint of launching custom firmware. It utilizes a vulnerability in the bootROM of the first-generation Switch systems, allowing us to boot the console via any payload we choose, instead of only ones that Nvidia and Nintendo authorize. The result allows full baremetal control over your console, including system storage backups, recovery, custom firmwares, and custom operating systems.   ------ - -### **What can I do with custom firmware?** +## What can I do with custom firmware? - Customize your HOME Menu with user-created themes and splash screens - Run “ROM hacks” for games that you own @@ -56,9 +52,7 @@ This guide has the end-goal of taking a completely unmodified Switch from stock More on this can be found later on in the guide. ------ - -### **What do I need to know before starting?** +## What do I need to know before starting? As previously mentioned, this guide will take a minimum of an hour to fully complete. Please responsibly set aside this time before your first run-through. @@ -66,19 +60,24 @@ Acknowledge that EVERY time you modify your system, there is always the potentia This guide will work on first-generation (V1) and modchipped Switch consoles in all regions on any firmware version. -!!! note "**You will need *one* of the following in order to successfully follow this guide:**" +::: tip + +**You will need *one* of the following in order to successfully follow this guide:** - - A PC, and a USB-C cable capable of data transfer to connect them together - - An Android device, and a USB-C cable capable of data transfer to connect them together - - This does not work on every Android phone - - A Lightning OTG adapter, a jailbroken iOS device, and a USB cable, all capable of data transfer to connect everything together - - This method is not covered by the guide, but you can read more about it at [this website](https://mologie.github.io/nxboot/) - - A successfully modchipped Switch +- A PC, and a USB-C cable capable of data transfer to connect them together +- An Android device, and a USB-C cable capable of data transfer to connect them together + - This does not work on every Android phone +- A Lightning OTG adapter, a jailbroken iOS device, and a USB cable, all capable of data transfer to connect everything together + - This method is not covered by the guide, but you can read more about it at [this website](https://mologie.github.io/nxboot/) +- A successfully modchipped Switch - If you choose the emuMMC path introduced later in the guide, you will also need a microSD card that is *at least* 128 gigabytes. In this path, it'll be important to disable the [Automatic Save Data Cloud](https://en-americas-support.nintendo.com/app/answers/detail/a_id/41209) function beforehand, as well as making sure [the Switch is set as the primary console](https://en-americas-support.nintendo.com/app/answers/detail/a_id/22453/~/how-to-change-the-primary-console-for-your-nintendo-account).
- If you must use a smaller microSD card, you can choose to use the sysCFW path, after assuming the risks involved. +If you choose the emuMMC path introduced later in the guide, you will also need a microSD card that is *at least* 128 gigabytes. In this path, it'll be important to disable the [Automatic Save Data Cloud](https://en-americas-support.nintendo.com/app/answers/detail/a_id/41209) function beforehand, as well as making sure [the Switch is set as the primary console](https://en-americas-support.nintendo.com/app/answers/detail/a_id/22453/~/how-to-change-the-primary-console-for-your-nintendo-account). - Additionally, on a V1 "unpatched" Switch, you will need a way to access the ReCovery Mode (this will be further explained in the "Entering RCM section"). While possible with household tools, you may want to shell money out for a "jig" that inserts into the Joy-Con rail to reliably enable RCM. +If you must use a smaller microSD card, you can choose to use the sysCFW path, after assuming the risks involved. + +Additionally, on a V1 "unpatched" Switch, you will need a way to access the ReCovery Mode (this will be further explained in the "Entering RCM section"). While possible with household tools, you may want to shell money out for a "jig" that inserts into the Joy-Con rail to reliably enable RCM. + +::: Upon completion, you will lose no data, ending up with everything that you started with (games, Nintendo Account, saves, etc will be preserved). Your functionalities will only be enhanced. @@ -90,38 +89,51 @@ It is advised that you read the entire guide from start to finish one or more ti If something doesn't make sense while you follow the guide, please reach out and ask for clarification rather than fumble around on your own. If your English isn't the best, use a translator such as [Google Translate](https://translate.google.com/) to submit your questions, so we can help. ------ +::: tip -### **Click the button below to get started with the guide!** -[Continue to Getting Started :material-arrow-right:](user_guide/getting_started.md){ .md-button .md-button--primary } +[Continue to Getting Started](user_guide/getting_started) +::: ----- Note: We are not currently, historically, or will we ever be, associated with Anton Retro, sthetix, Ely M., or other derivative or YouTube/TikTok guide publishers, especially any that claim relation to us. Furthermore, we resent any implication to the contrary. -??? "Frequently Asked Questions about this page" - - **Q: What are the differences between "first-generation" ("V1") consoles and "patched" consoles when it comes to running homebrew?**
- A: Once you boot into Horizon, not much. The primary things to keep in mind is that only V1 consoles support Atmosphère's "Reboot to Payload" function, but modchips automatically load payloads during reboots on their own. - - **Q: What is Horizon?**
- A: Horizon is the name of the Switch's operating system. It is sometimes called "HorizonNX", because it is actually a derivative version of the Nintendo 3DS's operating system of the same name. +::: details Frequently Asked Questions about this page + +- **Q: What are the differences between "first-generation" ("V1") consoles and "patched" consoles when it comes to running homebrew?** + + A: Once you boot into Horizon, not much. The primary things to keep in mind is that only V1 consoles support Atmosphère's "Reboot to Payload" function, but modchips automatically load payloads during reboots on their own. + +- **Q: What is Horizon?** + + A: Horizon is the name of the Switch's operating system. It is sometimes called "HorizonNX", because it is actually a derivative version of the Nintendo 3DS's operating system of the same name. + +- **Q: Why is it called Atmosphère?** + + A: Atmosphère "runs on top of the Horizon" operating system. Each layer of Horizon's security is referenced via the atmosphere's different layers. For example, the EL1 "kernel" reimplementation is called mesosphère, while the EL3 "TrustZone" reimplementation is called exosphère. + Learn more about ARM Exception Levels [here](https://developer.arm.com/documentation/102412/0103/Privilege-and-Exception-levels/Exception-levels). + +- **Q: What exactly is the "emuMMC path," and why is it recommended for the microSD card to be at least 128GB for this path?** + + A: The purpose of an emuMMC/emuNAND is to give you a safe place to use custom firmware functions without Nintendo catching sight. As it is an offline clone of your internal storage ran entirely from your microSD card, you will need to set allocate up to 64GB on your microSD card for it (depending on the size of your internal storage), plus a duplicate your of digital game data (emuMMC uses a separate Nintendo folder for game installs). + +- **Q: Why do I need to set my console as primary before starting this guide?** + + A: The Switch will otherwise try to connect to Nintendo servers before starting apps, which can lead to unexpected delays and make emuMMCs completely unusable. + +- **Q: Can I follow this guide if I have a smaller microSD card, and what are the risks involved in choosing the sysCFW path?** - - **Q: Why is it called Atmosphère?**
- A: Atmosphère "runs on top of the Horizon" operating system. Each layer of Horizon's security is referenced via the atmosphere's different layers. For example, the EL1 "kernel" reimplementation is called mesosphère, while the EL3 "TrustZone" reimplementation is called exosphère.
Learn more about ARM Exception Levels [here](https://developer.arm.com/documentation/102412/0103/Privilege-and-Exception-levels/Exception-levels). + A: Nothing stops you from using sysCFW, but it is recommended for first-timers to get familiar with CFW by starting with an emuMMC. If used improperly, running sysCFW can cause software bricks and/or [bans](https://nx.eiphax.tech/ban.html). - - **Q: What exactly is the "emuMMC path," and why is it recommended for the microSD card to be at least 128GB for this path?**
- A: The purpose of an emuMMC/emuNAND is to give you a safe place to use custom firmware functions without Nintendo catching sight. As it is an offline clone of your internal storage ran entirely from your microSD card, you will need to set allocate up to 64GB on your microSD card for it (depending on the size of your internal storage), plus a duplicate your of digital game data (emuMMC uses a separate Nintendo folder for game installs). +- **Q: Are there any specific restrictions or limitations imposed by Nintendo on consoles running custom firmware and homebrew?** - - **Q: Why do I need to set my console as primary before starting this guide?**
- A: The Switch will otherwise try to connect to Nintendo servers before starting apps, which can lead to unexpected delays and make emuMMCs completely unusable. + A: Nintendo has shown a distinct tolerance for users using CFW while online. They __do not__ ban for the presence of CFW, they ban for misbehavior - such as piracy or cheating online. Otherwise, you are treated like all other users. - - **Q: Can I follow this guide if I have a smaller microSD card, and what are the risks involved in choosing the sysCFW path?**
- A: Nothing stops you from using sysCFW, but it is recommended for first-timers to get familiar with CFW by starting with an emuMMC. If used improperly, running sysCFW can cause software bricks and/or [bans](https://nx.eiphax.tech/ban.html). +- **Q: Is there any community support or forums recommended for users who may have questions or issues during the process?** - - **Q: Are there any specific restrictions or limitations imposed by Nintendo on consoles running custom firmware and homebrew?**
- A: Nintendo has shown a distinct tolerance for users using CFW while online. They __do not__ ban for the presence of CFW, they ban for misbehavior - such as piracy or cheating online. Otherwise, you are treated like all other users. + A: Of course! As well as the [Nintendo Homebrew Discord server](https://discord.gg/C29hYvh), you can also try the [r/SwitchHacks subreddit](https://www.reddit.com/r/SwitchHacks/)! - - **Q: Is there any community support or forums recommended for users who may have questions or issues during the process?**
- A: Of course! As well as the [Nintendo Homebrew Discord server](https://discord.gg/C29hYvh), you can also try the [r/SwitchHacks subreddit](https://www.reddit.com/r/SwitchHacks/)! +::: diff --git a/docs/files/bootlogos.zip b/docs/public/files/bootlogos.zip similarity index 100% rename from docs/files/bootlogos.zip rename to docs/public/files/bootlogos.zip diff --git a/docs/files/emu/hekate_ipl.ini b/docs/public/files/emu/hekate_ipl.ini similarity index 100% rename from docs/files/emu/hekate_ipl.ini rename to docs/public/files/emu/hekate_ipl.ini diff --git a/docs/files/emummc.txt b/docs/public/files/emummc.txt similarity index 100% rename from docs/files/emummc.txt rename to docs/public/files/emummc.txt diff --git a/docs/files/extras/fusee_gelee_nvidia.pdf b/docs/public/files/extras/fusee_gelee_nvidia.pdf similarity index 100% rename from docs/files/extras/fusee_gelee_nvidia.pdf rename to docs/public/files/extras/fusee_gelee_nvidia.pdf diff --git a/docs/files/extras/hekate_ipl.ini b/docs/public/files/extras/hekate_ipl.ini similarity index 100% rename from docs/files/extras/hekate_ipl.ini rename to docs/public/files/extras/hekate_ipl.ini diff --git a/docs/files/sys/hekate_ipl.ini b/docs/public/files/sys/hekate_ipl.ini similarity index 100% rename from docs/files/sys/hekate_ipl.ini rename to docs/public/files/sys/hekate_ipl.ini diff --git a/docs/public/img/home-page-feature.jpg b/docs/public/img/home-page-feature.jpg new file mode 100644 index 00000000..95488b0f Binary files /dev/null and b/docs/public/img/home-page-feature.jpg differ diff --git a/docs/user_guide/all/cfw_environment.md b/docs/user_guide/all/cfw_environment.md index 5b05258d..23ad9f40 100644 --- a/docs/user_guide/all/cfw_environment.md +++ b/docs/user_guide/all/cfw_environment.md @@ -1,104 +1,133 @@ -### **CFW on sysMMC vs. CFW on emuMMC** +--- +aside: false +--- + +# CFW on sysMMC vs. CFW on emuMMC A "CFW Environment" describes the context in which you are using custom firmware (CFW). As a reminder, custom firmware is never permanently installed, and runs independently on top of the system firmware. This means that you never have to commit to where you want to use custom firmware. Atmosphère temporarily patches HOS (HorizonOS, operating system of the switch) to enable customisations. You can choose what version of HOS it patches, each time you turn on your system. Each option has its own benefits and drawbacks. - - For the purposes of this guide, the suffix -NAND and -MMC are interchangeable. +- For the purposes of this guide, the suffix -NAND and -MMC are interchangeable. Generally, `sys-` refers to the physical storage chip (sysMMC/eMMC) inside of your Switch. It stands for "system". Generally, `emu-` refers to a virtual version of the eMMC (internal storage), running from a microSD card. It stands for "emulated". -For more information on terminology, please refer to the [glossary](../../extras/glossary.md). +For more information on terminology, please refer to the [glossary](../../extras/glossary). **You get to decide!** Your choices are between using the internal storage or emulated storage. We will go over the advantages and disadvantages of either decision below. ----- -
+::::: cards + +:::: card -- ### **emuMMC CFW (Recommended)** - #### **CFW on emuMMC has the following benefits:** +### emuMMC CFW (Recommended) +#### CFW on emuMMC has the following benefits: - - No risk of bans as long as emuMMC remains offline from Nintendo [[info]](../../extras/img/ban.png) - - A safe area to test dangerous or risky mods and homebrew - - No chance of bricking and losing console-unique information while using CFW +- No risk of bans as long as emuMMC remains offline from Nintendo [[info]](../../extras/img/ban.png) +- A safe area to test dangerous or risky mods and homebrew +- No chance of bricking and losing console-unique information while using CFW - #### **The following drawbacks:** +#### The following drawbacks: - - Large microSD size requirement (32GB or 64GB will be reserved, depending on if you use a Switch OLED or not). If you want a *decent* experience, a minimum of 128GB is required (unless you are an advanced user and can resize the USER partition of your NAND) - - Slower console response times due to the limitation of your microSD card's classifications/specifications - - No official online play while in CFW - - More microSD card wear over time - - Doubled digital game storage requirements +- Large microSD size requirement (32GB or 64GB will be reserved, depending on if you use a Switch OLED or not). If you want a *decent* experience, a minimum of 128GB is required (unless you are an advanced user and can resize the USER partition of your NAND) +- Slower console response times due to the limitation of your microSD card's classifications/specifications +- No official online play while in CFW +- More microSD card wear over time +- Doubled digital game storage requirements - #### **And the following considerations:** - No parity between sysMMC and emuMMC (Game installs, save data, and system settings will be separated when you boot between the two) +#### And the following considerations: +No parity between sysMMC and emuMMC (Game installs, save data, and system settings will be separated when you boot between the two) - #### **In particular, here are just *some* popular use-cases for CFW on emuMMC:** +#### In particular, here are just *some* popular use-cases for CFW on emuMMC: - - Restoring modified save data for any game - - Modding and cheating in any game - - Custom fonts and home menu theming - - Downgrading titles to base versions, without mandatory updates - - Enjoying CFW features such as custom sysmodules and homebrew apps +- Restoring modified save data for any game +- Modding and cheating in any game +- Custom fonts and home menu theming +- Downgrading titles to base versions, without mandatory updates +- Enjoying CFW features such as custom sysmodules and homebrew apps - If you prefer foolproofing, and a separation between official features and custom features, you may consider using CFW on emuMMC. In this guide, emuMMC is assumed to be utilised for offline play. +If you prefer foolproofing, and a separation between official features and custom features, you may consider using CFW on emuMMC. In this guide, emuMMC is assumed to be utilised for offline play. - !!! note "About this path" - This path of the guide ***also*** includes sysCFW as launch option. +::: info - ----- +**About this path** - To proceed with CFW on **emuMMC**, click on the button below: +This path of the guide ***also*** includes sysCFW as launch option. - [Continue with the emuMMC path :material-arrow-right:](../all/partitioning_sd.md){ .md-button .md-button--primary } +::: -- ### **sysCFW (CFW on sysMMC)** - #### **CFW on sysMMC has the following benefits:** +::: info - - Parity of system settings, save data, and titles between CFW usage and standard usage (no need to duplicate digital games) - - Significantly lower microSD card storage requirements - - Possibility of online play during CFW use - - Fast console response time by not having to rely on the speed of your microSD card - - Longer microSD card lifespan +To proceed with CFW on **emuMMC**, click on the button below: +[Continue with the emuMMC path](../all/partitioning_sd) - #### **The following drawbacks:** +::: - - A brick risk for risky behaviors, especially for modchip users [[info]](#modchip-instability) - - A Nintendo server ban risk for misbehavior [[info]](https://nx.eiphax.tech/ban.html) - - No possibility of custom profile pictures (guaranteed ban) +:::: - #### **In particular, here are just *some* popular use-cases for sysCFW:** +:::: card - - Enjoying CFW features such as custom sysmodules and homebrew apps - - Dumping eShop games, save data, and encryption keys for preservation or installation on emuMMC or external Switch emulators - - Restoring modified save data for many games - - Custom fonts and home menu theming - - Modifying and cheating in most offline games (and some online games; [[info]](../../homebrew/edizon.md)) +### sysCFW (CFW on sysMMC) +#### CFW on sysMMC has the following benefits: - If you prefer snappiness, online play, and a seamless transition between official features and custom features, you may consider using CFW on sysMMC. In this guide, sysMMC is assumed to be utilised for online play. +- Parity of system settings, save data, and titles between CFW usage and standard usage (no need to duplicate digital games) +- Significantly lower microSD card storage requirements +- Possibility of online play during CFW use +- Fast console response time by not having to rely on the speed of your microSD card +- Longer microSD card lifespan - ----- +#### The following drawbacks: - To proceed with CFW on **sysMMC**, click on the button below: +- A brick risk for risky behaviors, especially for modchip users [[info]](#modchip-instability) +- A Nintendo server ban risk for misbehavior [[info]](https://nx.eiphax.tech/ban.html) +- No possibility of custom profile pictures (guaranteed ban) - [Continue with the sysCFW path :material-arrow-right:](../all/partitioning_sd_syscfw.md){ .md-button .md-button--primary } +#### In particular, here are just *some* popular use-cases for sysCFW: -
+- Enjoying CFW features such as custom sysmodules and homebrew apps +- Dumping eShop games, save data, and encryption keys for preservation or installation on emuMMC or external Switch emulators +- Restoring modified save data for many games +- Custom fonts and home menu theming +- Modifying and cheating in most offline games (and some online games; [[info]](../../homebrew/edizon)) + +If you prefer snappiness, online play, and a seamless transition between official features and custom features, you may consider using CFW on sysMMC. In this guide, sysMMC is assumed to be utilised for online play. ----- -##### Modchip Instability -!!! danger "About Modchipped Switch console users" - Modchips directly infiltrate communication with the internal storage chip. Due to this, there are slight chances of NAND backups being tainted with corrupted data. If a bad backup is restored to sysNAND, the console can be bricked, and a modchip alone won't be able to fix it. To be safe, we recommend setting up an emuMMC on a console with a modchip, verify BOOT0/1 backups using tools like [NXNandManager (Windows)](https://github.com/eliboa/NxNandManager) or test NAND backups by running them as emuMMCs before you flash them to the sysNAND. +::: info + +To proceed with CFW on **sysMMC**, click on the button below: + +[Continue with the sysCFW path](../all/partitioning_sd_syscfw) + +::: + +:::: + +::::: + +### Modchip Instability + +::: danger + +**About Modchipped Switch console users** + +Modchips directly infiltrate communication with the internal storage chip. Due to this, there are slight chances of NAND backups being tainted with corrupted data. If a bad backup is restored to sysNAND, the console can be bricked, and a modchip alone won't be able to fix it. To be safe, we recommend setting up an emuMMC on a console with a modchip, verify BOOT0/1 backups using tools like [NXNandManager (Windows)](https://github.com/eliboa/NxNandManager) or test NAND backups by running them as emuMMCs before you flash them to the sysNAND. + +::: + +::: details Frequently Asked Questions about this page + +- **Q: Why is CFW referred to as being "never permanently installed"?** + + A: Unless you have a modchip of any kind, turning the console off will disactivate the custom firmware. There is no current method for Atmosphère to install-to or permanently replace any part of the Nintendo Switch, so it will need to be triggered by an exploit every time you turn on the console. Atmosphère will then patch Horizon to bring you custom firmware features. -??? "Frequently Asked Questions about this page" - - **Q: Why is CFW referred to as being "never permanently installed"?**
- A: Unless you have a modchip of any kind, turning the console off will disactivate the custom firmware. There is no current method for Atmosphère to install-to or permanently replace any part of the Nintendo Switch, so it will need to be triggered by an exploit every time you turn on the console. Atmosphère will then patch Horizon to bring you custom firmware features. +- **Q: Should I personally use sys/emuMMC?** - - **Q: Should I personally use sys/emuMMC?**
- A: These questions are answered in detail within the webpage. Please make sure that you are fully reading the page before jumping here. + A: These questions are answered in detail within the webpage. Please make sure that you are fully reading the page before jumping here. diff --git a/docs/user_guide/all/launching_cfw.md b/docs/user_guide/all/launching_cfw.md index c2d6cf25..4a906c51 100644 --- a/docs/user_guide/all/launching_cfw.md +++ b/docs/user_guide/all/launching_cfw.md @@ -4,68 +4,111 @@ Now that the preparation work is out of the way, we're finally ready to launch c Unlike systems such as the DSi, Wii, or 3DS, Switch CFW is currently volatile. It will only work as long as your Switch is on. As soon as your Switch completely loses power for any reason (shutting down, battery dying, etc.), CFW will no longer be active and you will need to follow these instructions again. -!!! danger "Keep emuMMC offline at all times" - Your emuMMC (emuNAND) should never connect to Nintendo. For online play, eShop browsing, or any other Nintendo online activity, use your sysNAND. Using both emuMMC and sysNAND online will likely result in a ban. +::: danger -=== "Instructions for emuMMC" +**Keep emuMMC offline at all times** - #### Instructions: +Your emuMMC (emuNAND) should never connect to Nintendo. For online play, eShop browsing, or any other Nintendo online activity, use your sysNAND. Using both emuMMC and sysNAND online will likely result in a ban. - 1. From Hekate's `Home` menu, navigate to the `Launch` menu. - 1. Find `Atmosphere FSS0 emuMMC` and launch it. +::: - Hekate is now booting into your emuMMC. To verify that your emuMMC launched properly, open System Settings and navigate to System. You should see `AMS` next to the version number (`AMS` indicating that you're booted into Atmosphere), as well as an `E` at the end (indicating you are booted into emuMMC). +::::: tabs - !!! note "" - If you wish to set up an extra method of blocking Nintendo's servers on your emuMMC, visit [this page](../../extras/blocking_nintendo.md#instructions-90dns) to set up 90DNS. +:::: tab default Instructions for emuMMC - ![Atmosphere version string](img/launching_cfw_atmosphere_version_string2.jpg) +### Instructions: -=== "Instructions for sysCFW" +1. From Hekate's `Home` menu, navigate to the `Launch` menu. +1. Find `Atmosphere FSS0 emuMMC` and launch it. - #### Instructions: +Hekate is now booting into your emuMMC. To verify that your emuMMC launched properly, open System Settings and navigate to System. You should see `AMS` next to the version number (`AMS` indicating that you're booted into Atmosphere), as well as an `E` at the end (indicating you are booted into emuMMC). - 1. From Hekate's `Home` menu, navigate to the `Launch` menu. - 1. Find `Atmosphere FSS0 sysMMC` and launch it. +::: info - Hekate is now booting into sysCFW. To verify that sysCFW launched properly, open System Settings and navigate to System. You should see `AMS` next to the version number (`AMS` indicating that you're booted into Atmosphere), as well as an `S` at the end (indicating you are booted into sysCFW). +If you wish to set up an extra method of blocking Nintendo's servers on your emuMMC, visit [this page](../../extras/blocking_nintendo.md#instructions-90dns) to set up 90DNS. - - **Note:** You will also have the `Atmosphere FSS0 EmuMMC` launch option in Hekate, launching it will just result in an error and is expected because you don't have an emuMMC. +::: - ![Atmosphere version string](img/launching_cfw_atmosphere_version_string3.jpg) +![Atmosphere version string](img/launching_cfw_atmosphere_version_string2.jpg) -!!! tip "Rebooting to Hekate" - Once booted into CFW, you can easily get back to Hekate by holding the power button, and selecting `Restart` in the power menu or by using the "reboot to payload" homebrew app in the homebrew menu. (Note that while the Reboot to Payload *app* app does *not* work on modchipped Switch consoles, those already automatically run payloads upon reboot in the first place by default.) +:::: + +:::: tab Instructions for sysCFW + +### Instructions: + +1. From Hekate's `Home` menu, navigate to the `Launch` menu. +1. Find `Atmosphere FSS0 sysMMC` and launch it. + +Hekate is now booting into sysCFW. To verify that sysCFW launched properly, open System Settings and navigate to System. You should see `AMS` next to the version number (`AMS` indicating that you're booted into Atmosphere), as well as an `S` at the end (indicating you are booted into sysCFW). + +- **Note:** You will also have the `Atmosphere FSS0 EmuMMC` launch option in Hekate, launching it will just result in an error and is expected because you don't have an emuMMC. + +![Atmosphere version string](img/launching_cfw_atmosphere_version_string3.jpg) + +:::: + +::::: + +::: tip + +**Rebooting to Hekate** + +Once booted into CFW, you can easily get back to Hekate by holding the power button, and selecting `Restart` in the power menu or by using the "reboot to payload" homebrew app in the homebrew menu. (Note that while the Reboot to Payload *app* app does *not* work on modchipped Switch consoles, those already automatically run payloads upon reboot in the first place by default.) + +::: ----- -### **Launching the Homebrew Menu** +### Launching the Homebrew Menu You will now be able to launch the Homebrew Menu by opening the album or by holding the R button while launching any game (including demos/cartridges), or application (e.g. YouTube/Hulu). If R is not held, the game or application will launch like normal. -!!! warning "A note about using the album for the Homebrew Menu" - - Using Album for the Homebrew Menu instead of a game or application has several limitations, including but not limited to: a smaller amount of available memory (RAM), as well as being unable to launch a full-featured web browser. It is strongly recommended to launch homebrew through applications or games instead. +::: warning + +**A note about using the album for the Homebrew Menu** +- Using Album for the Homebrew Menu instead of a game or application has several limitations, including but not limited to: a smaller amount of available memory (RAM), as well as being unable to launch a full-featured web browser. It is strongly recommended to launch homebrew through applications or games instead. -### **About the included Homebrew apps** +::: -See the [Homebrew](../../homebrew/index.md) tab for information about what the included Homebrew apps do and if you want to check out more Homebrew apps and read about sysmodules like MissionControl, ldn_mitm, sys-con and more. +### About the included Homebrew apps + +See the [Homebrew](../../homebrew/index) tab for information about what the included Homebrew apps do and if you want to check out more Homebrew apps and read about sysmodules like MissionControl, ldn_mitm, sys-con and more. If you wish to install more homebrew apps, place them (`.nro` files) in the `switch` folder on your microSD card. ----- -### **Installing Android/Linux** +### Installing Android/Linux If you've partitioned your microSD card for preparation of Android/Linux earlier, you can continue with the installation of Android/Linux here with the guides below: -[Android installation guide :material-arrow-right:](../../extras/installing_android.md){ .md-button .md-button--primary } [Linux installation guide :material-arrow-right:](../../extras/installing_linux.md){ .md-button .md-button--primary } +::: tip + +[Android installation guide](../../extras/installing_android) + +::: + +::: tip + +[Linux installation guide](../../extras/installing_linux) + +::: + +::: details Frequently Asked Questions about this page + +- **Q: How can you verify that sysCFW / emuMMC launched properly?** + + A: Once you boot into the Switch's HOME Menu, navigate to Settings > System. The system version should be prefixed with an S or E, standing for SysMMC or EmuMMC respectively. Seeing either of these confirms which environment you are using. + +- **Q: What options do you have for rebooting to Hekate while booted into CFW?** + + A: If you use a modchip, your console will automatically boot into whatever payload that your modchip would normally boot into via a coldboot, after clicking the restart button in the power-off menu. This can be any payload, but ideally is Hekate. + If you use no modchip (and you're using a V1 console), your console will "reboot-to-payload" by default, triggering whatever fusee payload is located in `atmosphere/reboot_to_payload.bin`. This can be any payload, but ideally is Hekate. + +- **Q: Where can I find additional homebrew apps?** + + A: One of the more convenient sources is the [Homebrew App Store](https://github.com/fortheusers/hb-appstore/releases), hosted by [4TU](https://gitlab.com/4TU). You can also browse the [r/SwitchHacks](https://www.reddit.com/r/SwitchHacks/) subreddit. -??? "Frequently Asked Questions about this page" - - **Q: How can you verify that sysCFW / emuMMC launched properly?**
- A: Once you boot into the Switch's HOME Menu, navigate to Settings > System. The system version should be prefixed with an S or E, standing for SysMMC or EmuMMC respectively. Seeing either of these confirms which environment you are using. - - **Q: What options do you have for rebooting to Hekate while booted into CFW?**
- A: If you use a modchip, your console will automatically boot into whatever payload that your modchip would normally boot into via a coldboot, after clicking the restart button in the power-off menu. This can be any payload, but ideally is Hekate. - If you use no modchip (and you're using a V1 console), your console will "reboot-to-payload" by default, triggering whatever fusee payload is located in `atmosphere/reboot_to_payload.bin`. This can be any payload, but ideally is Hekate. - - **Q: Where can I find additional homebrew apps?**
- A: One of the more convenient sources is the (Homebrew App Store)[https://github.com/fortheusers/hb-appstore/releases], hosted by (4TU)[https://gitlab.com/4TU]. You can also browse the (r/SwitchHacks)[https://www.reddit.com/r/SwitchHacks/] subreddit. +::: diff --git a/docs/user_guide/all/making_essential_backups.md b/docs/user_guide/all/making_essential_backups.md index 71c2d0c3..6c4c7a08 100644 --- a/docs/user_guide/all/making_essential_backups.md +++ b/docs/user_guide/all/making_essential_backups.md @@ -1,15 +1,20 @@ # Making Essential Backups -### **Making a NAND Backup** +## Making a NAND Backup -!!! danger "Important" - A NAND backup is crucial to have, it's a full backup of the internal storage of your Switch and can be used to restore the device to a working state in case of emergencies. **DO NOT SKIP THIS STEP** +::: danger - Once the backup is finished, **keep it somewhere safe.** The best backup is the one you have but never need, and the worst backup is the one you need but never made. To save space, it's recommended to compress the end-result with a `.zip` file or something similar. +**Important** - It's highly recommended that you use an microSD card that is formatted to FAT32 and has at least 32 gigabytes of space free. This will still work on smaller cards, but it's not ideal. +A NAND backup is crucial to have, it's a full backup of the internal storage of your Switch and can be used to restore the device to a working state in case of emergencies. **DO NOT SKIP THIS STEP** -#### **Instructions:** +Once the backup is finished, **keep it somewhere safe.** The best backup is the one you have but never need, and the worst backup is the one you need but never made. To save space, it's recommended to compress the end-result with a `.zip` file or something similar. + +It's highly recommended that you use an microSD card that is formatted to FAT32 and has at least 32 gigabytes of space free. This will still work on smaller cards, but it's not ideal. + +::: + +### Instructions: 1. Enter RCM and inject the Hekate payload. - If you use a modchipped Switch, you can simply just turn your Switch on with the Hekate payload renamed to `payload.bin` on the root of your microSD card. @@ -24,35 +29,46 @@ 1. Copy the `backup` folder on your microSD card to a safe location on your PC. 1. Once done, you may delete the `backup` folder from the root of your microSD card and eject the `UMS` device safely from within your computer's operating system, then return to Hekate's `Home` menu. -??? note "About microSD cards with less than 32GB of free space" +::: details About microSD cards with less than 32GB of free space + +**On FAT32 formatted microSD cards or cards that have less than 32 gigabytes of space available, the NAND backup will be split into 1 or 2 gigabyte parts.** + +Hekate will stop producing these parts when it runs out of space. When this happens, do the following: + +1. Press `OK` when Hekate tells you to back up your stuff.
+ ![nandbackup](img/nandbackup.bmp){ width=600 } +1. Press `Close` > `Close` > `USB Tools` > `SD Card` and connect your Switch to your PC via USB. +1. Your microSD card should now be accessible on your PC, move the `backup` folder on the root of your microSD card to a safe location on your PC. + - *If* you are prompted to merge folders, do so. +1. Eject the `UMS` device safely from within your computer's operating system and close the UMS window in Hekate. +1. Press `Close` > `Backup eMMC` > `eMMC RAW GPP` and continue backing up your NAND. +1. Repeat step 2-5 until the NAND is completely dumped. +1. Once done, return to Hekate's `Home` menu. + +::: + +## Booting into CFW + +::: tip + +Click the link below to continue to Launching **emuMMC**! + +[Launching CFW (emuMMC)](launching_cfw?tab=instructions-for-emummc) - #### On FAT32 formatted microSD cards or cards that have less than 32 gigabytes of space available, the NAND backup will be split into 1 or 2 gigabyte parts. - Hekate will stop producing these parts when it runs out of space. When this happens, do the following: +::: - 1. Press `OK` when Hekate tells you to back up your stuff.
- ![nandbackup](img/nandbackup.bmp){ width=600 } - 1. Press `Close` > `Close` > `USB Tools` > `SD Card` and connect your Switch to your PC via USB. - 1. Your microSD card should now be accessible on your PC, move the `backup` folder on the root of your microSD card to a safe location on your PC. - - *If* you are prompted to merge folders, do so. - 1. Eject the `UMS` device safely from within your computer's operating system and close the UMS window in Hekate. - 1. Press `Close` > `Backup eMMC` > `eMMC RAW GPP` and continue backing up your NAND. - 1. Repeat step 2-5 until the NAND is completely dumped. - 1. Once done, return to Hekate's `Home` menu. +::: tip ------ +Click the link below to continue to Launching **sysCFW**! -##### **Booting into CFW** +[Launching CFW (sysCFW)](launching_cfw?tab=instructions-for-syscfw) -
+::: -- Click the button below to continue to Launching **emuMMC**! - [Launching CFW (emuMMC) :material-arrow-right:](launching_cfw.md#__tabbed_1_1){ .md-button .md-button--primary } +::: details Frequently Asked Questions about this page -- Click the button below to continue to Launching **sysCFW**! - [Launching CFW (sysCFW) :material-arrow-right:](launching_cfw.md#__tabbed_1_2){ .md-button .md-button--primary } +- **Q: Why is making a NAND backup considered crucial?** -
+ A: A NAND backup contains a complete snapshot of the internal files of your Switch, including console-specific files that cannot be regenerated if accidentally lost. This is why it is **mandatory** to keep at least one copy of your NAND backup in a safe place, even if it takes a lot of space. The consequence to not having one is, at best, a Switch that cannot connect to Nintendo Network, or at worst, a full brick. However, it is important to note that it is nearly impossible to permanently brick a hackable Nintendo Switch. -??? "Frequently Asked Questions about this page" - - **Q: Why is making a NAND backup considered crucial?**
- A: A NAND backup contains a complete snapshot of the internal files of your Switch, including console-specific files that cannot be regenerated if accidentally lost. This is why it is **mandatory** to keep at least one copy of your NAND backup in a safe place, even if it takes a lot of space. The consequence to not having one is, at best, a Switch that cannot connect to Nintendo Network, or at worst, a full brick. However, it is important to note that it is nearly impossible to permanently brick a hackable Nintendo Switch. +::: diff --git a/docs/user_guide/all/partitioning_sd.md b/docs/user_guide/all/partitioning_sd.md index e7ad2be2..04ce27d6 100644 --- a/docs/user_guide/all/partitioning_sd.md +++ b/docs/user_guide/all/partitioning_sd.md @@ -1,13 +1,18 @@ # Partitioning the microSD Card and creating the emuMMC -### **What you need:** +## What you need: - Your Switch loaded into Hekate -!!! danger "Partitioning *WILL* wipe all data on your microSD card!" - In case you missed the warning earlier, your microSD card will be wiped during this page. Go to `Tools` > `USB Tools` > `SD Card`, plug your switch into your PC via USB and back up the contents of your microSD card to your PC if you haven't done so yet. If you don't mind redownloading all the games stored on the microSD card and/or all other (potentially important) files getting deleted, you may skip this. +::: danger -### **Instructions:** +**Partitioning *WILL* wipe all data on your microSD card!** + +In case you missed the warning earlier, your microSD card will be wiped during this page. Go to `Tools` > `USB Tools` > `SD Card`, plug your switch into your PC via USB and back up the contents of your microSD card to your PC if you haven't done so yet. If you don't mind redownloading all the games stored on the microSD card and/or all other (potentially important) files getting deleted, you may skip this. + +::: + +## Instructions: 1. Navigate to `Tools` > `Partition SD card` 1. Set the `emuMMC (RAW)` slider to `29 FULL` in the middle of the bar. @@ -21,13 +26,20 @@ 1. Continue with the next step of the guide. - Your microSD card should now be accessible on your PC, if not, consult the warning message below. -!!! warning "Your microSD card is not showing up or Windows complaining about an unreadable drive" - If you get the issue that Windows says the microSD card is unreadable and wants to format it, do not format! This is likely your emuMMC partition. After partitioning your SD, your microSD will show up as 2 drives on your PC. Use the accessible drive. - If your microSD card isn't showing up at all, ensure that you're using a USB cable capable of data transfer and that, if you use Windows, Windows has assigned a drive letter to the FAT32 partition of your SD. If you still experience errors, join the [NH-Discord server](https://discord.gg/C29hYvh) for support. +::: warning + +**Your microSD card is not showing up or Windows complaining about an unreadable drive** +If you get the issue that Windows says the microSD card is unreadable and wants to format it, do not format! This is likely your emuMMC partition. After partitioning your SD, your microSD will show up as 2 drives on your PC. Use the accessible drive. + +If your microSD card isn't showing up at all, ensure that you're using a USB cable capable of data transfer and that, if you use Windows, Windows has assigned a drive letter to the FAT32 partition of your SD. If you still experience errors, join the NH-Discord server for support. + +::: ![hekate-partitioning-emu](img/hekate-partitioning-emu.png) -  +::: tip + +[Continue to SD Preparations](sd_preparation) -[Continue to SD Preparations :material-arrow-right:](sd_preparation.md){ .md-button .md-button--primary } +::: diff --git a/docs/user_guide/all/partitioning_sd_syscfw.md b/docs/user_guide/all/partitioning_sd_syscfw.md index 17b2a4a6..bf310172 100644 --- a/docs/user_guide/all/partitioning_sd_syscfw.md +++ b/docs/user_guide/all/partitioning_sd_syscfw.md @@ -1,13 +1,18 @@ # Formatting and/or partitioning the microSD Card -### **What you need:** +## What you need: - Your Switch loaded into Hekate -!!! danger "Partitioning *WILL* wipe all data on your microSD card!" - In case you missed the warning earlier, your microSD card will be wiped during this page. Go to `Tools` > `USB Tools` > `SD Card`, plug your switch into your PC via USB and back up the contents of your microSD card to your PC if you haven't done so yet. If you don't mind redownloading all the games stored on the microSD card and/or all other (potentially important) files getting deleted, you may skip this. +::: danger -### **Instructions:** +**Partitioning *WILL* wipe all data on your microSD card!** + +In case you missed the warning earlier, your microSD card will be wiped during this page. Go to `Tools` > `USB Tools` > `SD Card`, plug your switch into your PC via USB and back up the contents of your microSD card to your PC if you haven't done so yet. If you don't mind redownloading all the games stored on the microSD card and/or all other (potentially important) files getting deleted, you may skip this. + +::: + +## Instructions: 1. Navigate to `Tools` > `Partition SD card` 1. Navigate to `Next Step` at the bottom right, then select `Start` in the menu that appears. @@ -17,11 +22,18 @@ 1. Continue with the next step of the guide. - Your microSD card should now be accessible on your PC. If not, consult the warning message below. -!!! warning "Your microSD card is not showing up" - If your microSD card isn't showing up at all, ensure that you're using a USB cable capable of data transfer and that if you use Windows, Windows has assigned a drive letter to the FAT32 partition of your microSD card. If you still experience errors, join the [NH-Discord server](https://discord.gg/C29hYvh) for support. +::: warning + +**Your microSD card is not showing up** + +If your microSD card isn't showing up at all, ensure that you're using a USB cable capable of data transfer and that if you use Windows, Windows has assigned a drive letter to the FAT32 partition of your microSD card. If you still experience errors, join the [NH-Discord server](https://discord.gg/C29hYvh) for support. + +::: ![hekate-partitioning-emu](img/hekate-partitioning-sys.png) -  +::: tip + +[Continue to SD Preparations](sd_preparation) -[Continue to SD Preparations :material-arrow-right:](sd_preparation.md){ .md-button .md-button--primary } +::: diff --git a/docs/user_guide/all/sd_preparation.md b/docs/user_guide/all/sd_preparation.md index 10ec91b6..bb8ba91c 100644 --- a/docs/user_guide/all/sd_preparation.md +++ b/docs/user_guide/all/sd_preparation.md @@ -1,21 +1,22 @@ -# **microSD Card preparations** - -### **Information** +# microSD Card preparations We will now place the required files for the Atmosphère custom firmware and some additional homebrew files on the microSD card. Atmosphere has its own bootloader, called fusee. For the purposes of this guide we will be using Hekate instead, so that we can back up the system's NAND (internal storage) and take advantage of other advanced features in the future. -!!! warning "File name extensions" - If you use Windows, you should enable file name extensions before continuing. See [this link](../../extras/showing_file_extensions.md) for a guide on how to do this. +::: warning + +**File name extensions** + +If you use Windows, you should enable file name extensions before continuing. See [this link](../../extras/showing_file_extensions) for a guide on how to do this. ------ +::: -#### **What you need:** +## What you need: - The latest release of [Hekate](https://github.com/CTCaer/Hekate/releases/) (Download the `hekate_ctcaer_(version).zip` release of hekate) -- The Hekate config file: hekate_ipl.ini -- The DNS.MITM DNS redirection config: emummc.txt -- The bootlogo zip folder: bootlogos.zip +- The Hekate config file: hekate_ipl.ini +- The DNS.MITM DNS redirection config: emummc.txt +- The bootlogo zip folder: bootlogos.zip - The latest release of [Atmosphere](https://github.com/Atmosphere-NX/Atmosphere/releases). Download the `atmosphere-(version)-master-(version)+hbl-(version)+hbmenu-(version).zip` release of Atmosphere. - The latest release of [JKSV](https://github.com/J-D-K/JKSV/releases) (Download the `JKSV.nro` release of JKSV) - The latest release of [FTPD](https://github.com/mtheall/ftpd/releases) (Download the `ftpd.nro` release of FTPD) @@ -23,7 +24,7 @@ Atmosphere has its own bootloader, called fusee. For the purposes of this guide - The latest release of [NX-Shell](https://github.com/joel16/NX-Shell/releases) (Download the `NX-Shell.nro` release of nx-shell) - The latest release of [Goldleaf](https://github.com/XorTroll/Goldleaf/releases) (Download the `Goldleaf.nro` release of Goldleaf) -#### **Instructions:** +## Instructions: 1. Navigate to the accessible drive. 1. Copy *the contents of* the Atmosphère`.zip` file to the root of your microSD card. 1. Copy the `bootloader` folder from the Hekate `.zip` file to the root of your microSD card. @@ -37,13 +38,25 @@ Atmosphere has its own bootloader, called fusee. For the purposes of this guide 1. If you were already using your microSD card as a storage device for your games and backed up the Nintendo folder before partitioning your microSD card, please place it back on the root of your microSD card now. - If you created an emuMMC on the previous page, don't forget to copy the Nintendo folder to `sd:/emuMMC/RAW1/`! - !!! danger "About emummc.txt" - Putting the `emummc.txt` file provided by this guide into `/atmosphere/hosts` will prevent your emuMMC (emuNAND) from connecting to Nintendo. Not doing this will likely result in a ban. + ::: danger + + **About emummc.txt** + + Putting the `emummc.txt` file provided by this guide into `/atmosphere/hosts` will prevent your emuMMC (emuNAND) from connecting to Nintendo. Not doing this will likely result in a ban. + + ::: + + ::: tip + + Your microSD card should look similar to the image below. The `Nintendo` folder will not be present if your Switch has not already booted with the microSD card inserted and the `emuMMC` folder will not be present if you're following the sysCFW path of the guide/you haven't created an emuMMC! + `payload.bin` will not be present if you're using an unpatched Switch. + + ![sdfilesimg](img/sdfiles3.png) + + ::: - !!! tip "" - Your microSD card should look similar to the image below. The `Nintendo` folder will not be present if your Switch has not already booted with the microSD card inserted and the `emuMMC` folder will not be present if you're following the sysCFW path of the guide/you haven't created an emuMMC! - `payload.bin` will not be present if you're using an unpatched Switch. +::: tip - ![sdfilesimg](img/sdfiles3.png) +[Continue to Making Essential Backups](making_essential_backups) -[Continue to Making Essential Backups :material-arrow-right:](making_essential_backups.md){ .md-button .md-button--primary } +::: diff --git a/docs/user_guide/getting_started.md b/docs/user_guide/getting_started.md index c85db2ca..281fff8a 100644 --- a/docs/user_guide/getting_started.md +++ b/docs/user_guide/getting_started.md @@ -1,10 +1,14 @@ # Getting Started -!!! note "About modchipped Switch console users" +::: tip - If you already know you have a modchipped Switch console, you can skip ahead to the [Modchip Introduction](../user_guide/modchip/index.md) page. +**About modchipped Switch console users** -### **Finding your serial number** +If you already know you have a modchipped Switch console, you can skip ahead to the [Modchip Introduction](../user_guide/modchip/index) page. + +::: + +## Finding your serial number In the RCM path, we'll first determine if your Switch is vulnerable to fusee-gelee, the exploit we will be using to launch CFW. @@ -12,15 +16,11 @@ The fusee-gelee vulnerability was discovered independently by different Switch h Patched and Mariko units can be identified by their serial number. This number can be found in the Settings applet at **System -> Serial Information**. You can also find it on the bottom of the console, adjacent to the charging port. However, it is always more accurate to use the serial reported in Settings instead, especially if you aren't the original owner of the console. -  - ![Visual for System Settings serial location](../user_guide/img/getting_started_serial_location.jpg) ![Visual for serial location on the bottom of console](../user_guide/img/serial_switch.png) -  - -### **Determining if your Switch is vulnerable** +## Determining if your Switch is vulnerable The community has crowdsourced a list of known serial numbers which are vulnerable to fusee-gelee. @@ -28,12 +28,15 @@ The community has crowdsourced a list of known serial numbers which are vulnerab - If your serial number is listed as "patched", there is nothing you can do at this time besides installing a modchip (hardware modification. It __requires__ experience with microsoldering.). - If your system is patched, it is highly advised to keep it on 7.0.1 or lower, if possible, as there may be a vulnerability for these versions in the far future. **DO NOT update patched consoles past 7.0.1 if you want to ever have a chance of running homebrew and/or CFW on them if you do not have the skills required to install a modchip.** -!!! note "Notice" - If you are unsure if your serial is patched, you can test your console yourself following the instructions [here](rcm/sending_payload.md). +::: tip ------ +**Notice** -### **Serial list** +If you are unsure if your serial is patched, you can test your console yourself following the instructions [here](rcm/sending_payload). + +::: + +## Serial list The following information is based on [this GBATemp thread](https://gbatemp.net/threads/switch-informations-by-serial-number-read-the-first-post-before-asking-questions.481215/). @@ -49,50 +52,70 @@ The following information is based on [this GBATemp thread](https://gbatemp.net/ If your serial number is not listed above, your device is not vulnerable to the fusee-gelee exploit. -### **Version Table** +## Version Table + +::: tip + +**Note** + +While the "New" Switch (HAC-001(-01)'s earliest possible firmware is 7.0.1, it is **not** vulnerable to *déjà vu*, the exploit used by Nereba and Caffeine, because of hardware differences from the "old" Switch (HAC-001). -!!! note "Note" - While the "New" Switch (HAC-001(-01)'s earliest possible firmware is 7.0.1, it is **not** vulnerable to *déjà vu*, the exploit used by Nereba and Caffeine, because of hardware differences from the "old" Switch (HAC-001). +::: | Firmware Version | Unpatched Switch systems (HAC-001) | Patched Switch systems (HAC-001) | "New" Switch (HAC-001(-01) | Switch Lite (HDH-001) | |:-----------------|:--------------------------------------|:---------------------------------|:----------------------------|:-----------------------------------------------------| -| 1.0.0 | Nereba or [**RCM**](rcm/index.md) | **N/A** | **N/A** | **N/A** | -| 2.0.0 - 3.0.2 | Caffeine or [**RCM**](rcm/index.md) | **N/A** | **N/A** | **N/A** | -| 4.0.0 - 4.1.0 | Caffeine or [**RCM**](rcm/index.md) | Caffeine | **N/A** | **N/A** | -| 5.0.0 - 7.0.0 | [**RCM**](rcm/index.md) | [**Modchip**](modchip/index.md) / Wait for CFW | **N/A** | **N/A** | -| 7.0.1 | [**RCM**](rcm/index.md) | [**Modchip**](modchip/index.md) (no software exploit) | [**Modchip**](modchip/index.md) (no software exploit)| **N/A** | -| 8.0.1 | [**RCM**](rcm/index.md) | [**Modchip**](modchip/index.md) (no software exploit) | [**Modchip**](modchip/index.md) (no software exploit)| [**Modchip**](modchip/index.md) (no software exploit)| -| 8.1.0 and up | [**RCM**](rcm/index.md) | [**Modchip**](modchip/index.md) (no software exploit) | [**Modchip**](modchip/index.md) (no software exploit)| [**Modchip**](modchip/index.md) (no software exploit)| +| 1.0.0 | Nereba or [**RCM**](rcm/index) | **N/A** | **N/A** | **N/A** | +| 2.0.0 - 3.0.2 | Caffeine or [**RCM**](rcm/index) | **N/A** | **N/A** | **N/A** | +| 4.0.0 - 4.1.0 | Caffeine or [**RCM**](rcm/index) | Caffeine | **N/A** | **N/A** | +| 5.0.0 - 7.0.0 | [**RCM**](rcm/index) | [**Modchip**](modchip/index) / Wait for CFW | **N/A** | **N/A** | +| 7.0.1 | [**RCM**](rcm/index) | [**Modchip**](modchip/index) (no software exploit) | [**Modchip**](modchip/index) (no software exploit)| **N/A** | +| 8.0.1 | [**RCM**](rcm/index) | [**Modchip**](modchip/index) (no software exploit) | [**Modchip**](modchip/index) (no software exploit)| [**Modchip**](modchip/index) (no software exploit)| +| 8.1.0 and up | [**RCM**](rcm/index) | [**Modchip**](modchip/index) (no software exploit) | [**Modchip**](modchip/index) (no software exploit)| [**Modchip**](modchip/index) (no software exploit)| -!!! note "About Mariko Switch models" - All Mariko (V2) Switch models (`HAC-001(-01)`, `HDH-001`, `HEG-001`) are currently unhackable via software. If **Modchip** is listed as a method for your console model, then that means the device is currently unhackable without a hardware modification (modchip). If there are theoretical exploits that may lead to CFW or homebrew for that device, you also have the choice to "wait" for their release. These exploits may (and will likely) never launch and there is **NO ETA**, so what you choose to do is up to you. This guide assumes you have a functional modchip installation if you *do* have a Patched console. +::: tip +**About Mariko Switch models** -### **Console Preparation** +All Mariko (V2) Switch models (`HAC-001(-01)`, `HDH-001`, `HEG-001`) are currently unhackable via software. If **Modchip** is listed as a method for your console model, then that means the device is currently unhackable without a hardware modification (modchip). If there are theoretical exploits that may lead to CFW or homebrew for that device, you also have the choice to "wait" for their release. These exploits may (and will likely) never launch and there is **NO ETA**, so what you choose to do is up to you. This guide assumes you have a functional modchip installation if you *do* have a Patched console. -#### Important +::: + +## **Console Preparation** + +### Important Before setting up for homebrew, install at least one eShop title to utilize "title takeover", an Atmosphère feature that allows homebrew to use more resources than they would normally have. Try downloading a free game (like [Fallout Shelter](https://www.nintendo.com/games/detail/fallout-shelter-switch/)), application (like [YouTube](https://www.nintendo.com/games/detail/youtube-switch/)), or a game demo (like [10 Second Run RETURNS](https://www.nintendo.com/games/detail/10-second-run-returns-switch)). Running the Homebrew Menu via a game cartridge is an alternative, but requires the game to be inserted any time you want to launch the Homebrew Menu. Generally, title takeover doesn't permanently alter the donor game or application.
Once you obtain any bootable title, you are prepared to continue on with the guide. ----- -
+::: tip + +**If your Switch is not patched, click the button below to follow the RCM path of the guide.** + +[Continue to RCM](rcm/index) + +::: + +::: tip + +**If your Switch is patched and modchipped, click the button below to follow the Modchip path of the guide.** + +[Continue to Modchip introduction](modchip/index) + +::: + +::: details Frequently Asked Questions about this page -- #### If your Switch is not patched, click the button below to follow the RCM path of the guide. +- **Q: How reliable is the crowdsourced list of vulnerable serial numbers, and what if my serial number is not listed?** - [Continue to RCM :material-arrow-right:](rcm/index.md){ .md-button .md-button--primary } + A: To our knowledge, there hasn't been a single console which has disproved the trends documented here. Unless your serial is potentially patched, you can be certain that the table is accurate to reality. -- #### If your Switch is patched and modchipped, click the button below to follow the Modchip path of the guide. +- **Q: Why is it essential to install at least one eShop title before setting up homebrew, and what is "title takeover"?** - [Continue to Modchip introduction :material-arrow-right:](modchip/index.md){ .md-button .md-button--primary } + A: By default, the homebrew menu and its apps inherit the resources of the Album applet. Applets don't have as many system resources as full apps, and as such have inconsistent behavior when used for homebrew purposes. Title takeover ensures the best performance, and is required for some homebrew. -
+- **Q: Why is the "New" Switch (HAC-001(-01)) not vulnerable to *déjà vu*, and what are the implications for Switch Lite (HDH-001) and OLED Switch consoles?** -??? "Frequently Asked Questions about this page" + A: Despite being exploitable via software, *déjà vu* is actually a bootROM exploit that isn't present in the new bootROM of the Tegra X1+. - - **Q: How reliable is the crowdsourced list of vulnerable serial numbers, and what if my serial number is not listed?**
- A: To our knowledge, there hasn't been a single console which has disproved the trends documented here. Unless your serial is potentially patched, you can be certain that the table is accurate to reality. - - **Q: Why is it essential to install at least one eShop title before setting up homebrew, and what is "title takeover"?**
- A: By default, the homebrew menu and its apps inherit the resources of the Album applet. Applets don't have as many system resources as full apps, and as such have inconsistent behavior when used for homebrew purposes. Title takeover ensures the best performance, and is required for some homebrew. - - **Q: Why is the "New" Switch (HAC-001(-01) not vulnerable to *déjà vu*, and what are the implications for Switch Lite (HDH-001) and OLED Switch consoles?**
- A: Despite being exploitable via software, *déjà vu* is actually a bootROM exploit that isn't present in the new bootROM of the Tegra X1+. +::: diff --git a/docs/user_guide/modchip/index.md b/docs/user_guide/modchip/index.md index 433e3680..9aa22f80 100644 --- a/docs/user_guide/modchip/index.md +++ b/docs/user_guide/modchip/index.md @@ -1,21 +1,22 @@ -### **Introduction to Modchips** +# Introduction to Modchips + +## Prerequisites -### **Prerequisites** A modchip is a physical modification to the motherboard of your Switch. It cannot be installed without decent microsoldering experience. You can outsource this work to people who are willing to do the job for you, or you can also view the following guide if you are willing to install one yourself. -[Modchip Installation guide :material-arrow-right:](https://guide.nx-modchip.info/){ .md-button .md-button--primary } +::: tip -**Note:** The above guide is not hosted or supported by NH Server; we cannot provide support for reviving consoles ruined by inexperience. +[Modchip Installation guide](https://guide.nx-modchip.info/) ------ +::: + +**Note:** The above guide is not hosted or supported by NH Server; we cannot provide support for reviving consoles ruined by inexperience. -### **Information** +## Information Unlike "unpatched" consoles, modchips enable CFW via CPU voltage glitching, which bypass bootROM firmware verifications. It allows a ``payload.bin`` file to be launched in place of BOOT0, loaded via a modchip firmware module named `sdloader`. This is much different from RCM and its exploit, [fusee-gelee](https://github.com/Qyriad/fusee-launcher/blob/master/report/fusee_gelee.md), which "unpatched" consoles use. Modchips allow any console, including all patched consoles, to run CFW! ------ - -### **General knowledge** +## General knowledge Patched Switch consoles (consoles produced after mid-2018) are immune to the fusee-gelee exploit in RCM. Attempting to inject a payload on a Patched console will be unsuccessful. @@ -24,8 +25,11 @@ This means without a microSD inserted at all times, your Switch becomes *unusabl If you do turn on your Switch without a microSD card inserted, you should end up at a splash screen saying something along the lines of `NO SD`. -???+ note "About modchips and their firmware versions" - Some modchip firmwares (e.g., Spacecraft-NX, Hwfly-NX and the Picofly firmware) allow bypassing `sdloader` by holding one - or both - of the volume buttons during power-on, enabling normal boot without a microSD card. Not all modchips support manual firmware updates. +::: details About modchips and their firmware versions + +Some modchip firmwares (e.g., Spacecraft-NX, Hwfly-NX and the Picofly firmware) allow bypassing `sdloader` by holding one - or both - of the volume buttons during power-on, enabling normal boot without a microSD card. Not all modchips support manual firmware updates. + +::: Modchipped Switch consoles allow untethered, coldboot CFW loading, directly entering custom firmware without external devices like dongles or jigs. This is in contrast to the tethered coldboot "RCM" entrypoint. @@ -35,32 +39,52 @@ Running CFW on modchipped consoles is more simplistic, as it only requires you t Furthermore, this guide assumes you have a functional modchip installation. ------ - -### **Important** +## Important If you do decide to follow the recommended emuMMC path later in the guide, make sure you disable [Automatic Save Data Cloud backups/downloads](https://www.nintendo.co.uk/Support/Nintendo-Switch/How-to-Enable-Disable-Automatic-Save-Data-Backups-and-Downloads-1434310.html) beforehand as well as making sure [the Switch is set as Primary Console](https://en-americas-support.nintendo.com/app/answers/detail/a_id/22453/~/how-to-change-the-primary-console-for-your-nintendo-account). -!!! danger "Disclaimer" - We **ONLY** support the Picofly modchip (the `RP2040 Zero` development board and the "modchip variant" of it). Installing a modchip safely is your responsibility, so if you don't trust yourself, get someone trusted to perform the install. - There is always a risk of your Switch being rendered dysfunctional when messing with its hardware without proper experience. - The NH-Discord server is not for fixing bad/failed modchip installations. - We can give advice and installation tips for the installation as long as it's for a Picofly modchip. +::: danger + +**Disclaimer** + +We **ONLY** support the Picofly modchip (the `RP2040 Zero` development board and the "modchip variant" of it). Installing a modchip safely is your responsibility, so if you don't trust yourself, get someone trusted to perform the install. + +There is always a risk of your Switch being rendered dysfunctional when messing with its hardware without proper experience. + +The NH-Discord server is not for fixing bad/failed modchip installations. + +We can give advice and installation tips for the installation as long as it's for a Picofly modchip. + +::: + +::: tip + +[Continue to Preparing Hekate](preparing_hekate) + +::: + +::: details Frequently Asked Questions about this page + +- **Q: Can you provide more information about modchip firmwares, specifically regarding their impact on the boot process and the ability to bypass the sdloader?** + + A: Modchip firmwares indirectly determine the functionality of your system. Modern modchips (such as Picofly) typically have firmware flashed to them that support all hardware configurations (namely eMMC brands like Hynix, Samsung and Toshiba) "out-of-the-box" and also allow you to bypass `sdloader`. If this is not the case however, flashing the firmware manually is required by opening up the Switch and using the USB debug port that comes with the modchip to flash the modchip directly. This is especially required in the cases where the eMMC brand is not supported, as your Switch wouldn't boot whatsoever and the modchip would be stuck while trying to glitch/train and write its payload to the `BOOT0` partition of the internal storage. + +- **Q: What different types of modchips are there?** + + A: There are three main types of modchips for the Nintendo Switch. Only two of them are relevant for this guide. + + On the V1 Nintendo Switch, a chip can be installed which automatically injects a payload whenever the console is detected in RCM. This type of modchip is **not** supported by this guide. + + On all other Switch consoles, there are DIY "Picofly" modchips which can be created with Raspberry Pi parts and custom cables. These use special firmwares, and are not compatible with firmwares intended for other modchips. + + There are also other "commercial" modchips of dubious origin by the name of "hwfly" or "SX Core/Lite"; we only will help with flashing new firmwares onto these, if you happen to already have one of them installed. Do not ask for assistance installing or sourcing this type of modchip. -[Continue to Preparing Hekate :material-arrow-right:](preparing_hekate.md){ .md-button .md-button--primary } +- **Q: Can you further explain the concept of running homebrew "over a title" and why it allows for higher resource allocation?** -??? "Frequently Asked Questions about this page" - - **Q: Can you provide more information about modchip firmwares, specifically regarding their impact on the boot process and the ability to bypass the sdloader?**
- A: Modchip firmwares indirectly determine the functionality of your system. Modern modchips (such as Picofly) typically have firmware flashed to them that support all hardware configurations (namely eMMC brands like Hynix, Samsung and Toshiba) "out-of-the-box" and also allow you to bypass `sdloader`. If this is not the case however, flashing the firmware manually is required by opening up the Switch and using the USB debug port that comes with the modchip to flash the modchip directly. This is especially required in the cases where the eMMC brand is not supported, as your Switch wouldn't boot whatsoever and the modchip would be stuck while trying to glitch/train and write its payload to the `BOOT0` partition of the internal storage. + A: The default way to run homebrew within Atmosphère is via the Album applet on the HOME Menu. However, applets have significantly less resources compared to full applications, and homebrew tools often run into constraints with these limits. By holding a button while launching normal apps while in CFW, you can load the Homebrew menu in their stead with full resources. - - **Q: What different types of modchips are there?**
- A: There are three main types of modchips for the Nintendo Switch. Only two of them are relevant for this guide.
- On the V1 Nintendo Switch, a chip can be installed which automatically injects a payload whenever the console is detected in RCM. This type of modchip is **not** supported by this guide.
- On all other Switch consoles, there are DIY "Picofly" modchips which can be created with Raspberry Pi parts and custom cables. These use special firmwares, and are not compatible with firmwares intended for other modchips.
- There are also other "commercial" modchips of dubious origin by the name of "hwfly" or "SX Core/Lite"; we only will help with flashing new firmwares onto these, if you happen to already have one of them installed. Do not ask for assistance installing or sourcing this type of modchip. +- **Q: What makes Picofly the only supported modchip, and what are the potential risks associated with installing a modchip on your Switch without proper experience?** - - **Q: Can you further explain the concept of running homebrew "over a title" and why it allows for higher resource allocation?**
- A: The default way to run homebrew within Atmosphère is via the Album applet on the HOME Menu. However, applets have significantly less resources compared to full applications, and homebrew tools often run into constraints with these limits. By holding a button while launching normal apps while in CFW, you can load the Homebrew menu in their stead with full resources. + A: Picofly is a fully open-source modchip, from the firmware to the RP2040 microcontroller it uses. Other "commercial" modchips have dubious origins, or were manufactured by [established illegal piracy groups](https://www.justice.gov/opa/pr/two-members-notorious-videogame-piracy-group-team-xecuter-custody) that have no place in the homebrew community. For the safety of your console and to respect the law of where NH Server is based, we will not assist with sourcing these types of modchips. - - **Q: What makes Picofly the only supported modchip, and what are the potential risks associated with installing a modchip on your Switch without proper experience?**
- A: Picofly is a fully open-source modchip, from the firmware to the RP2040 microcontroller it uses. Other "commercial" modchips have dubious origins, or were manufactured by [established illegal piracy groups](https://www.justice.gov/opa/pr/two-members-notorious-videogame-piracy-group-team-xecuter-custody) that have no place in the homebrew community. For the safety of your console and to respect the law of where NH Server is based, we will not assist with sourcing these types of modchips. +::: diff --git a/docs/user_guide/modchip/preparing_hekate.md b/docs/user_guide/modchip/preparing_hekate.md index 147aeeab..a6d12fb7 100644 --- a/docs/user_guide/modchip/preparing_hekate.md +++ b/docs/user_guide/modchip/preparing_hekate.md @@ -1,18 +1,20 @@ -# **Payload and bootloader folder placement** +# Payload and bootloader folder placement To get ready for formatting and/or partitioning your microSD card, we will need to prepare and place the required files on the microSD card. -!!! danger "Following the guide will delete everything on your microSD card!" - Later in the guide, you will be formatting and/or partitioning your microSD card. This means that all data on the microSD card will be lost. Now is a good time to back up *all* of its data to a safe place (for example, on your PC or external drive) so that you can restore it later. You can do this by following the instructions below. +::: danger ------ +**Following the guide will delete everything on your microSD card!** +Later in the guide, you will be formatting and/or partitioning your microSD card. This means that all data on the microSD card will be lost. Now is a good time to back up *all* of its data to a safe place (for example, on your PC or external drive) so that you can restore it later. You can do this by following the instructions below. -#### **What you need:** +::: + +## What you need: - The latest release of [Hekate](https://github.com/CTCaer/Hekate/releases/) (Download the `hekate_ctcaer_(version).zip` release of Hekate) - Your microSD card -#### **Instructions:** +## Instructions: 1. Extract the Hekate `.zip` to a location on your computer. 1. Insert your microSD card into your computer. @@ -22,30 +24,45 @@ To get ready for formatting and/or partitioning your microSD card, we will need 1. Rename the `hekate_ctcaer_(version).bin` payload to `payload.bin` 1. Insert your microSD card back into your Switch, then turn it on. 1. You should now be loaded into the Hekate GUI (Nyx), pictured below, within seconds. -![Nyx](../all/img/nyx.bmp){ width="600" } + ![Nyx](../all/img/nyx.bmp){ width="600" } - If you are unable to load into Nyx, consult the warning message below. -!!! warning - If your Switch does not load into the Hekate GUI, or shows a `No SD Card`/`No Payload` screen when turning on the console, ensure that you inserted your microSD card and that Hekate's `payload.bin` is on the root of the microSD card. +::: warning + +If your Switch does not load into the Hekate GUI, or shows a `No SD Card`/`No Payload` screen when turning on the console, ensure that you inserted your microSD card and that Hekate's `payload.bin` is on the root of the microSD card. + +::: + +::: tip + +[Continue to choosing your CFW environment](../all/cfw_environment) + +::: + +::: details Frequently Asked Questions about this page + +**Q: Can I use a microSD card with existing data, or does it need to be formatted specifically for this process?** + +A: It is recommended that you use a microSD that is already formatted as FAT32 before starting. In addition, it is important that the microSD card does not have any data from other Switch consoles already on it. + +**Q: What makes Hekate the recommended choice in this guide?** + +A: Hekate is a polished, multi-purpose bootloader for the Switch. It has the tools to facilitate simple usage of custom firmware and custom operating systems, and aids with organisation and formatting later on in this guide. + +**Q: How do you pronounce "Hekate"?** +A: Hekate comes from Greek. The most commonly accepted pronunciations are "HEK-ate", "HEK-uh-tee", and "hek-AH-tay". -[Continue to choosing your CFW environment :material-arrow-right:](../all/cfw_environment.md){ .md-button .md-button--primary } +**Q: What role does the `/bootloader` folder play in the overall functionality of Hekate?** -??? "Frequently Asked Questions about this page" - **Q: Can I use a microSD card with existing data, or does it need to be formatted specifically for this process?**
- A: It is recommended that you use a microSD that is already formatted as FAT32 before starting. In addition, it is important that the microSD card does not have any data from other Switch consoles already on it. +A: The bootloader folder contains crucial parts of Hekate that can't fit in the injectable RCM/modchip payload, such as Nyx; Hekate's touch-enabled GUI. If you start Hekate without these files on your microSD, Hekate's functionality will be severely limited. - **Q: What makes Hekate the recommended choice in this guide?**
- A: Hekate is a polished, multi-purpose bootloader for the Switch. It has the tools to facilitate simple usage of custom firmware and custom operating systems, and aids with organisation and formatting later on in this guide.
+**Q: How often should I check for updates to Hekate, and what benefits do newer releases bring to the process?** - **Q: How do you pronounce "Hekate"?**
- A: Hekate comes from Greek. The most commonly accepted pronunciations are "HEK-ate", "HEK-uh-tee", and "hek-AH-tay". +A: Nintendo Homebrew's #announcements channel will automatically poll for updates to Atmosphère and Hekate, letting you know when updates are available for them. In general, you'll want to look for updates whenever a major Switch system update is launched, as major updates will stop Horizon from booting until Hekate and Atmosphère are updated accordingly. - **Q: What role does the `/bootloader` folder play in the overall functionality of Hekate?**
- A: The bootloader folder contains crucial parts of Hekate that can't fit in the injectable RCM/modchip payload, such as Nyx; Hekate's touch-enabled GUI. If you start Hekate without these files on your microSD, Hekate's functionality will be severely limited. +**Q: Does this process have any effect on the Switch's system or data?** - **Q: How often should I check for updates to Hekate, and what benefits do newer releases bring to the process?**
- A: Nintendo Homebrew's #announcements channel will automatically poll for updates to Atmosphère and Hekate, letting you know when updates are available for them. In general, you'll want to look for updates whenever a major Switch system update is launched, as major updates will stop Horizon from booting until Hekate and Atmosphère are updated accordingly. +A: No, nothing in the guide has had any permanent effect on the Switch so far. - **Q: Does this process have any effect on the Switch's system or data?**
- A: No, nothing in the guide has had any permanent effect on the Switch so far. +::: \ No newline at end of file diff --git a/docs/user_guide/rcm/entering_rcm.md b/docs/user_guide/rcm/entering_rcm.md index 20e0be39..b043d0d9 100644 --- a/docs/user_guide/rcm/entering_rcm.md +++ b/docs/user_guide/rcm/entering_rcm.md @@ -1,132 +1,153 @@ -### **Entering RCM** +# Entering RCM The Switch's Tegra X1 processor has a recovery mode referred to shorthand as RCM, intended to be useless for end-users. Fortunately, due to the fusee-gelee vulnerability, this special mode acts as our gateway into CFW. Methods to enter RCM can require nothing more than household items (not recommended) to affordable tools ($5-10) available on platforms like AliExpress and Amazon. Avoid the "metal bridge" or "paperclip method" as it can damage your console. You can also consider 3D printing necessary tools. -!!! danger "Patched Switch" - Note that patched units **can** enter RCM, but it is not possible to send a payload on those systems. Also note that RCM is a different recovery mode than the one accessed by holding Volume Up, Volume Down and powering on your console. +::: danger -!!! note "Information about the methods below" - The order of methods on this page is in the order of ease. The easiest method to immediately accomplish is the `RCM Jig` method. The most advanced/difficult methods are mentioned in the other tabs and should not be attempted by most people as they require voiding your warranty and/or soldering. - **USING A PAPERCLIP OR TIN FOIL CAN/WILL DAMAGE YOUR CONSOLE, DO NOT DO THIS!** +**Patched Switch** ------ +Note that patched units **can** enter RCM, but it is not possible to send a payload on those systems. Also note that RCM is a different recovery mode than the one accessed by holding Volume Up, Volume Down and powering on your console. + +::: + +::: tip + +**Information about the methods below** + +The order of methods on this page is in the order of ease. The easiest method to immediately accomplish is the `RCM Jig` method. The most advanced/difficult methods are mentioned in the other tabs and should not be attempted by most people as they require voiding your warranty and/or soldering. + +**USING A PAPERCLIP OR TIN FOIL CAN/WILL DAMAGE YOUR CONSOLE, DO NOT DO THIS!** + +::: -#### **Instructions:** +## Instructions: 1. Power off the Switch and short the pins on the right Joy-Con rail using one of the methods listed below. 1. While holding the `Volume Up` button, press the `Power` button once while holding `Volume Up`. - If your Switch displays the Nintendo logo and boots normally (or the screen was on and goes black), you didn't successfully enter RCM and should try again. Otherwise, if your console still has a black screen (even after tapping the power button again), your Switch is in RCM and you can let go of the `Volume Up` button. 1. Once your Switch is in RCM, remove the RCM jig (if applicable) and continue with the next page of the guide by clicking on the button at the bottom of this page. ------ +::::: tabs + +:::: tab default RCM Jig + +Some jig designs use paperclips, inheriting the same risks as the "metal bridge" / "paperclip method" and should not be done. -=== "RCM Jig" +Once you have successfully entered RCM, you can take the jig out of the Joy-Con rail. - Some jig designs use paperclips, inheriting the same risks as the "metal bridge" / "paperclip method" and should not be done. +This method is similar to the "metal bridge" / "paperclip method", but is more reliable and safer in many cases. Jigs hold a wire in place so the correct pins (10 and a ground) are reliably shorted. - Once you have successfully entered RCM, you can take the jig out of the Joy-Con rail. +#### The RCM jig pictured below is the model we recommend: + +![recommended_jig](../rcm/img/recommended_jig.jpg){ width="250"} + +----- - This method is similar to the "metal bridge" / "paperclip method", but is more reliable and safer in many cases. Jigs hold a wire in place so the correct pins (10 and a ground) are reliably shorted. +::: details Making your own RCM Jig - #### The RCM jig pictured below is the model we recommend: +If you plan on making your own jig, the second image lays out the right Joy-Con pad out on the console. Make sure your jig NEVER touches pin 4. Pin 4 provides 5 volts of power to the Joy-Con, and can permanently damage the rail or console if shorted. +![switchjigs.com jigs](../rcm/img/entering_rcm_jig.jpg){ width="600"} - ![recommended_jig](../rcm/img/recommended_jig.jpg){ width="250"} +![Console Numbered Pads Refrence](../rcm/img/entering_rcm_pads_numbered.jpg){ width="600"} - ----- - - ??? note "Making your own RCM Jig" - If you plan on making your own jig, the second image lays out the right Joy-Con pad out on the console. Make sure your jig NEVER touches pin 4. Pin 4 provides 5 volts of power to the Joy-Con, and can permanently damage the rail or console if shorted. - ![switchjigs.com jigs](../rcm/img/entering_rcm_jig.jpg){ width="600"} +::: - ![Console Numbered Pads Refrence](../rcm/img/entering_rcm_pads_numbered.jpg){ width="600"} +:::: +:::: tab Soldered Joy-Con Pads - Physical RCM Button -=== "Soldered Joy-Con Pads - Physical RCM Button" +This method requires opening your right Joy-Con, voiding its warranty. Not for the faint of heart. - This method requires opening your right Joy-Con, voiding its warranty. Not for the faint of heart. +This method comes to us from the mind of `pbanj` on Discord. All pictures of this method in action were provided by him, with some supplementary images provided by `eip618` on Discord. - This method comes to us from the mind of `pbanj` on Discord. All pictures of this method in action were provided by him, with some supplementary images provided by `eip618` on Discord. +The goal of this method is to open the right Joy-Con to the point that you can reach the contact pads easily. This is similar to the previous method, however you will be soldering wires to pins 7 and 10 (shown below) and wiring them to the "rail release button" at the top back of the right Joy-Con. - The goal of this method is to open the right Joy-Con to the point that you can reach the contact pads easily. This is similar to the previous method, however you will be soldering wires to pins 7 and 10 (shown below) and wiring them to the "rail release button" at the top back of the right Joy-Con. +#### JoyCon pad pinout: +![joycon numbered pads reference](../rcm/img/entering_rcm_solder_numbered.jpg){ width="600"} - #### JoyCon pad pinout: - ![joycon numbered pads reference](../rcm/img/entering_rcm_solder_numbered.jpg){ width="600"} +In order to start this method you will want to take two lengths of wire, and wrap one end of each into a small circle. - In order to start this method you will want to take two lengths of wire, and wrap one end of each into a small circle. +#### Wire reference: +![wire reference](../rcm/img/entering_rcm_button_1.jpg){ width="675"} - #### Wire reference: - ![wire reference](../rcm/img/entering_rcm_button_1.jpg){ width="675"} +You will then want to take the circular end of one of the wires and add a small amount of solder, keeping it mostly flat (ONLY DO THIS TO ONE OF THE WIRES!). You will then glue this wire down to the below point on the rail release button. Make sure glue doesn't cover the top of the solder/wire as it will act as a contact point. Also, ensure that you leave enough space for the button to function correctly. Try pushing the button from the outside and observing its travel path so that you can see where and how you should safely glue the solder glob. - You will then want to take the circular end of one of the wires and add a small amount of solder, keeping it mostly flat (ONLY DO THIS TO ONE OF THE WIRES!). You will then glue this wire down to the below point on the rail release button. Make sure glue doesn't cover the top of the solder/wire as it will act as a contact point. Also, ensure that you leave enough space for the button to function correctly. Try pushing the button from the outside and observing its travel path so that you can see where and how you should safely glue the solder glob. +#### Joy-Con button: +![eip joycon button reference](../rcm/img/entering_rcm_button_5.jpg){ width="650"} - #### Joy-Con button: - ![eip joycon button reference](../rcm/img/entering_rcm_button_5.jpg){ width="650"} +#### Joy-Con button: +![pbanj joycon button reference](../rcm/img/entering_rcm_button_3.jpg){ width="650"} - #### Joy-Con button: - ![pbanj joycon button reference](../rcm/img/entering_rcm_button_3.jpg){ width="650"} +The first wire should now be in place as seen by the green circle below. The second wire does not need any solder, instead you will hold it in place using the screw as shown by the red circle in the picture below. - The first wire should now be in place as seen by the green circle below. The second wire does not need any solder, instead you will hold it in place using the screw as shown by the red circle in the picture below. +#### Joy-Con button in place: +![pbanj joycon button reference](../rcm/img/entering_rcm_button_6.jpg){ width="650"} - #### Joy-Con button in place: - ![pbanj joycon button reference](../rcm/img/entering_rcm_button_6.jpg){ width="650"} +Pressing the Joy-Con button in you should now notice the solder point you created making contact with the piece of metal held in by the screw. Once you have these elements in place you want to connect one wire to pad 7 and the other to pad 10 (it doesn't matter which is which). After that you have successfully created an RCM button on your Joycon. You will now need to hold down the Joycon release button when attempting to boot RCM. - Pressing the Joy-Con button in you should now notice the solder point you created making contact with the piece of metal held in by the screw. Once you have these elements in place you want to connect one wire to pad 7 and the other to pad 10 (it doesn't matter which is which). After that you have successfully created an RCM button on your Joycon. You will now need to hold down the Joycon release button when attempting to boot RCM. +#### Successful installation: +![pbanj joycon button reference](../rcm/img/entering_rcm_button_2.jpg){ width="650"} - #### Successful installation: - ![pbanj joycon button reference](../rcm/img/entering_rcm_button_2.jpg){ width="650"} +:::: +:::: tab Soldered Joy-Con Pads - 7 & 10 +This method requires opening your right Joy-Con, voiding its warranty. Not for the faint of heart. -=== "Soldered Joy-Con Pads - 7 & 10" +The goal of this method is to open the right handed Joy-Con to the point that you can reach the contact pads easily. This is similar to the previous method, however the goal is to solder pins 7 and 10 (shown below) together with a surface-mount `0805 10k` resistor. Apart from using a physical switch/button, this is currently considered the safest method that involves soldering to pads. - This method requires opening your right Joy-Con, voiding its warranty. Not for the faint of heart. +#### JoyCon pad pinout: +![joycon numbered pads reference](../rcm/img/entering_rcm_solder_numbered.jpg){ width="600"} - The goal of this method is to open the right handed Joy-Con to the point that you can reach the contact pads easily. This is similar to the previous method, however the goal is to solder pins 7 and 10 (shown below) together with a surface-mount `0805 10k` resistor. Apart from using a physical switch/button, this is currently considered the safest method that involves soldering to pads. +Here is an example from `stuck_pixel` from the ReSwitched Discord server. - #### JoyCon pad pinout: - ![joycon numbered pads reference](../rcm/img/entering_rcm_solder_numbered.jpg){ width="600"} +#### Successful installation: +![stuckpixel solder example](../rcm/img/entering_rcm_solder_710_stuckpixel.jpg){ width="650"} - Here is an example from `stuck_pixel` from the ReSwitched Discord server. +:::: - #### Successful installation: - ![stuckpixel solder example](../rcm/img/entering_rcm_solder_710_stuckpixel.jpg){ width="650"} +:::: tab Soldered Joy-Con Pads - 9 & 10 +This method will result in the right Joy-Con being seen as "detached" while physically connected to the Switch, so it will not be able to charge. This method may result in the Joy-Con being permanently detected as wireless if you update the Joy-Con firmware while this mod is installed. In the latter case, fixing this requires opening up the Joy-Con and reseating the battery. It is recommended to solder pads 7 and 10 together with a resistor instead. +This method requires opening your right Joy-Con, voiding its warranty. Not for the faint of heart. -=== "Soldered Joy-Con Pads - 9 & 10" +The goal of this method is to open the right Joy-Con to the point that you can reach the contact pads easily. This is similar to the previous method, however the goal is to solder pads 9 and 10 (seen below) together. This can either be done using a small wire, or directly bridging the pads with solder. - This method will result in the right Joy-Con being seen as "detached" while physically connected to the Switch, so it will not be able to charge. This method may result in the Joy-Con being permanently detected as wireless if you update the Joy-Con firmware while this mod is installed. In the latter case, fixing this requires opening up the Joy-Con and reseating the battery. It is recommended to solder pads 7 and 10 together with a resistor instead. +#### JoyCon pad pinout: +![joycon numbered pads reference](../rcm/img/entering_rcm_solder_numbered.jpg){ width="600"} - This method requires opening your right Joy-Con, voiding its warranty. Not for the faint of heart. +Below is an example from `yami0666` from our Discord server. - The goal of this method is to open the right Joy-Con to the point that you can reach the contact pads easily. This is similar to the previous method, however the goal is to solder pads 9 and 10 (seen below) together. This can either be done using a small wire, or directly bridging the pads with solder. +#### Successful soldering job: +![YyAoMmIi solder example](../rcm/img/entering_rcm_solder_910_yyaommii.jpg){ width="650" } - #### JoyCon pad pinout: - ![joycon numbered pads reference](../rcm/img/entering_rcm_solder_numbered.jpg){ width="600"} +:::: - Below is an example from `yami0666` from our Discord server. +:::: tab Bent Joy-Con Pins (Not recommended) - #### Successful soldering job: - ![YyAoMmIi solder example](../rcm/img/entering_rcm_solder_910_yyaommii.jpg){ width="650" } +This method will result in the right Joy-Con being detected as in wireless mode while attached to the Switch, and this method may result in the Joy-Con being permanently detected as wireless if you update the Joy-Con firmware while this mod is installed. In the latter case, fixing this requires opening up the Joy-Con and reseating the battery. +This method requires opening your right Joy-Con, voiding its warranty. Not for the faint of heart. -=== "Bent Joy-Con Pins (Not recommended)" +The goal of this method is to open the right handed Joy-Con to the point that you can reach the contact pads easily, and use a thin object such as a knife to gently bend pin 9 and 10 (shown below) slightly up and towards each other so they touch, shorting them. - This method will result in the right Joy-Con being detected as in wireless mode while attached to the Switch, and this method may result in the Joy-Con being permanently detected as wireless if you update the Joy-Con firmware while this mod is installed. In the latter case, fixing this requires opening up the Joy-Con and reseating the battery. +#### JoyCon pinout: +![Joycon Pin Reference](../rcm/img/enterting_rcm_pins_numbered.jpg){ width="600"} - This method requires opening your right Joy-Con, voiding its warranty. Not for the faint of heart. +Here is an example from `sonlen` on our Discord server. - The goal of this method is to open the right handed Joy-Con to the point that you can reach the contact pads easily, and use a thin object such as a knife to gently bend pin 9 and 10 (shown below) slightly up and towards each other so they touch, shorting them. +#### Bent Joy-Con pins: +![Sonlen's example](../rcm/img/entering_rcm_bent_pins.jpg){ width="650"} - #### JoyCon pinout: - ![Joycon Pin Reference](../rcm/img/enterting_rcm_pins_numbered.jpg){ width="600"} +:::: - Here is an example from `sonlen` on our Discord server. +::::: - #### Bent Joy-Con pins: - ![Sonlen's example](../rcm/img/entering_rcm_bent_pins.jpg){ width="650"} +::: tip +[Continue to Sending a Payload](sending_payload) -[Continue to Sending a Payload :material-arrow-right:](sending_payload.md){ .md-button .md-button--primary } +::: diff --git a/docs/user_guide/rcm/index.md b/docs/user_guide/rcm/index.md index 3b785bb9..5bfd1476 100644 --- a/docs/user_guide/rcm/index.md +++ b/docs/user_guide/rcm/index.md @@ -1,17 +1,22 @@ # RCM -### **About RCM** - RCM (short for **R**e**C**overy **M**ode) is a pre-boot mode for Tegra processors that allows NVIDIA and Nintendo to send the Switch tiny programs for various internal uses. On unpatched consoles, once a payload was sent, then quickly copied into the memory buffer behind the stack, it overflowed the memory buffer into the stack. This leads to a "smashed stack" and unsigned code execution within a bootROM context, giving us access to nearly everything on the console. We use it here to launch Atmosphère. If you choose the emuMMC path introduced later in the guide, it'll be important to disable the [Automatic Save Data Cloud](https://en-americas-support.nintendo.com/app/answers/detail/a_id/41209) function beforehand, as well as making sure [the Switch is set as the primary console](https://en-americas-support.nintendo.com/app/answers/detail/a_id/22453/~/how-to-change-the-primary-console-for-your-nintendo-account).
+::: tip + +[Continue to Entering RCM](entering_rcm) + +::: + +::: details Frequently Asked Questions about this page +- **Q: How does the RCM exploit work on unpatched Nintendo Switch consoles?** + + A: For more information, please reference [this page](../../fusee_gelee). There is also a Medium article about it [here](https://medium.com/@SoyLatteChen/inside-fus%C3%A9e-gel%C3%A9e-the-unpatchable-entrypoint-for-nintendo-switch-hacking-26f42026ada0). -[Continue to Entering RCM :material-arrow-right:](entering_rcm.md){ .md-button .md-button--primary } +- **Q: Does RCM work on patched consoles?** -??? "Frequently Asked Questions about this page" - - **Q: How does the RCM exploit work on unpatched Nintendo Switch consoles?**
- A: For more information, please reference [this page](../../fusee_gelee.md). There is also a Medium article about it [here](https://medium.com/@SoyLatteChen/inside-fus%C3%A9e-gel%C3%A9e-the-unpatchable-entrypoint-for-nintendo-switch-hacking-26f42026ada0). + A: Yes. RCM is an intended mode for all Switch consoles. The exploit is the unintended effect that only some consoles can use. Consoles with the Tegra X1+ have a completely new bootROM with no evidence of the exploit, while "patched" V1 systems have an IROM patch to the bootROM applied that effectively removes fusee-gelee as well. - - **Q: Does RCM work on patched consoles?**
- A: Yes. RCM is an intended mode for all Switch consoles. The exploit is the unintended effect that only some consoles can use. Consoles with the Tegra X1+ have a completely new bootROM with no evidence of the exploit, while "patched" V1 systems have an IROM patch to the bootROM applied that effectively removes fusee-gelee as well. +::: diff --git a/docs/user_guide/rcm/sending_payload.md b/docs/user_guide/rcm/sending_payload.md index 94ee6cc4..4e995ab4 100644 --- a/docs/user_guide/rcm/sending_payload.md +++ b/docs/user_guide/rcm/sending_payload.md @@ -1,139 +1,169 @@ +# Sending a Payload +::: warning -# Sending a Payload +**If you are here to test if your Switch is patched** -!!! warning "If you are here to test if your Switch is patched" - Make sure you have [put your device into RCM](entering_rcm.md) and downloaded Hekate. Once finished, if your console is **not** patched, continue with the "Preparing Hekate" section at the bottom of the page. +Make sure you have [put your device into RCM](entering_rcm) and downloaded Hekate. Once finished, if your console is **not** patched, continue with the "Preparing Hekate" section at the bottom of the page. +::: Now that the device is in RCM, we will need to send it a payload. The methods are mostly the same but slightly differ depending on what hardware you have available. -  +## Injecting a payload + +::::: tabs + +:::: tab default Windows + +### What you need: + +- The latest release of [TegraRcmGUI](https://github.com/eliboa/TegraRcmGUI/releases) (either the MSI or zip) +- A USB-A to USB-C cable (or a standard USB-C cable if your computer natively supports USB-C) +- The latest release of [Hekate](https://github.com/CTCaer/hekate/releases/). The Hekate payload (`hekate_ctcaer_(version).bin`) is located inside of the `hekate_ctcaer_(version).zip`. -=== "Windows" +### Instructions: - #### **What you need:** +1. Install and run TegraRcmGUI. +1. Navigate to the `Settings` tab, then press `Install Driver` and follow the on-screen instructions. + - If you face issues when installing the driver, follow the [driver installation with Zadig](#driver-installation-with-zadig) section below. +1. Connect your Switch in RCM to your PC using the USB cable. +1. Navigate to the `Payload` tab of TegraRcmGUI. + - Your Switch should be shown as detected in the bottom left corner. +1. Press the file button next to `Inject payload`, and navigate to and select the `hekate_ctcaer_X.X.X.bin` file. +1. Click `Inject payload` to launch the payload you selected. + - If your payload was successfully injected your switch should have yellow text that says "Update bootloader folder!", this will be resolved soon. - - The latest release of [TegraRcmGUI](https://github.com/eliboa/TegraRcmGUI/releases) (either the MSI or zip) - - A USB-A to USB-C cable (or a standard USB-C cable if your computer natively supports USB-C) - - The latest release of [Hekate](https://github.com/CTCaer/hekate/releases/). The Hekate payload (`hekate_ctcaer_(version).bin`) is located inside of the `hekate_ctcaer_(version).zip`. +### Driver installation with Zadig - #### **Instructions:** +Follow these steps if you face issues when installing the driver with TegraRcmGUI. You will need the latest version of [Zadig](https://zadig.akeo.ie). - 1. Install and run TegraRcmGUI. - 1. Navigate to the `Settings` tab, then press `Install Driver` and follow the on-screen instructions. - - If you face issues when installing the driver, follow the [driver installation with Zadig](#driver-installation-with-zadig) section below. - 1. Connect your Switch in RCM to your PC using the USB cable. - 1. Navigate to the `Payload` tab of TegraRcmGUI. - - Your Switch should be shown as detected in the bottom left corner. - 1. Press the file button next to `Inject payload`, and navigate to and select the `hekate_ctcaer_X.X.X.bin` file. - 1. Click `Inject payload` to launch the payload you selected. - - If your payload was successfully injected your switch should have yellow text that says "Update bootloader folder!", this will be resolved soon. - #### **Driver installation with Zadig** +1. Launch Zadig. In the `Options` menu, be sure that `List All Devices` is enabled. +1. Connect your Switch in RCM to your PC using the USB cable. +1. In Zadig, select "APX" in the device list. +1. Select `libusbK (v3.1.0.0)` in the driver list. +1. Click `Install Driver` and wait for the installation to finish. - Follow these steps if you face issues when installing the driver with TegraRcmGUI. You will need the latest version of [Zadig](https://zadig.akeo.ie) +:::: - 1. Launch Zadig. In the `Options` menu, be sure that `List All Devices` is enabled. - 1. Connect your Switch in RCM to your PC using the USB cable. - 1. In Zadig, select "APX" in the device list. - 1. Select `libusbK (v3.1.0.0)` in the driver list. - 1. Click `Install Driver` and wait for the installation to finish. +:::: tab Linux -=== "Linux" +### What you need: - #### **What you need:** +- The latest release of [fusee-nano](https://github.com/DefenderOfHyrule/fusee-nano/releases) (also available on the [AUR](https://aur.archlinux.org/packages/fusee-nano)) + - If you use Arch Linux or a derivative distro, the AUR package is recommended. +- A USB-A to USB-C cable (or a standard USB-C cable if your computer natively supports USB-C) +- The latest release of [Hekate](https://github.com/CTCaer/hekate/releases/). The Hekate payload (`hekate_ctcaer_(version).bin`) is located inside of the `hekate_ctcaer_(version).zip`. - - The latest release of [fusee-nano](https://github.com/DefenderOfHyrule/fusee-nano/releases) (also available on the [AUR](https://aur.archlinux.org/packages/fusee-nano)) - - If you use Arch Linux or a derivative distro, the AUR package is recommended. - - A USB-A to USB-C cable (or a standard USB-C cable if your computer natively supports USB-C) - - The latest release of [Hekate](https://github.com/CTCaer/hekate/releases/). The Hekate payload (`hekate_ctcaer_(version).bin`) is located inside of the `hekate_ctcaer_(version).zip`. +### Instructions: - #### **Instructions:** +1. Download and run the payload injector from your terminal. You will need to run the injector as root, unless you follow the instructions at [Linux injection without root](../../extras/adding_udev). +1. Connect your Switch in RCM to your PC using the USB cable. +1. Run fusee-nano with: `./fusee-nano /path/to/hekate-ctcaer_X.X.X.bin` + - As mentioned earlier, unless you have followed the instructions at [Linux injection without root](../../extras/adding_udev), this will require root to run. For most systems, this is done with `sudo` + - If your payload was successfully injected your switch should have yellow text that says "Update bootloader folder!", this will be resolved soon. - 1. Download and run the payload injector from your terminal. You will need to run the injector as root, unless you follow the instructions at [Linux injection without root](../../extras/adding_udev.md). - 1. Connect your Switch in RCM to your PC using the USB cable. - 1. Run fusee-nano with: `./fusee-nano /path/to/hekate-ctcaer_X.X.X.bin` - - As mentioned earlier, unless you have followed the instructions at [Linux injection without root](../../extras/adding_udev.md), this will require root to run. For most systems, this is done with `sudo` - - If your payload was successfully injected your switch should have yellow text that says "Update bootloader folder!", this will be resolved soon. +:::: -=== "Mac" +:::: tab Mac - #### **What you need:** +### What you need: - - The latest release of [CrystalRCM](https://github.com/prayerie/CrystalRCM/releases) (the `CrystalRCM.(version).dmg` file) - - A USB-A to USB-C cable (or a standard USB-C cable if your computer natively supports USB-C) - - The latest release of [Hekate](https://github.com/CTCaer/hekate/releases/). The Hekate payload (`hekate_ctcaer_(version).bin`) is located inside of the `hekate_ctcaer_(version).zip`. +- The latest release of [CrystalRCM](https://github.com/prayerie/CrystalRCM/releases) (the `CrystalRCM.(version).dmg` file) +- A USB-A to USB-C cable (or a standard USB-C cable if your computer natively supports USB-C) +- The latest release of [Hekate](https://github.com/CTCaer/hekate/releases/). The Hekate payload (`hekate_ctcaer_(version).bin`) is located inside of the `hekate_ctcaer_(version).zip`. - #### **Instructions:** +### Instructions: - 1. Download the latest release of CrystalRCM. - 1. Mount the `CrystalRCM.(version).dmg` file, open the mounted disk image in File Explorer and copy the `CrystalRCM.app` file inside of the mounted disk image to any location on your Mac. - 1. Open the `CrystalRCM.app` app, then click `Payload...` and select the `hekate_ctcaer_X.X.X.bin` file. - - macOS may warn you about the application being downloaded from the internet. To get around this warning, hold the control key while clicking the application, then click Open and Open again. - - **macOS Sequoia users:** Apple has changed how unsigned applications from the internet are opened. You will need to follow the instructions [here](https://wiki.hacks.guide/wiki/Open_unsigned_applications_on_macOS_Sequoia) to open the application. - 1. Connect your Switch in RCM to your PC using the USB cable, make sure it's also detected in CrystalRCM. - 1. Once selected, click `Push!`. The payload should now be injected successfully. - - If your payload was successfully injected your switch should have yellow text that says "Update bootloader folder!", this will be resolved soon. -=== "Android" +1. Download the latest release of CrystalRCM. +1. Mount the `CrystalRCM.(version).dmg` file, open the mounted disk image in File Explorer and copy the `CrystalRCM.app` file inside of the mounted disk image to any location on your Mac. +1. Open the `CrystalRCM.app` app, then click `Payload...` and select the `hekate_ctcaer_X.X.X.bin` file. + - macOS may warn you about the application being downloaded from the internet. To get around this warning, hold the control key while clicking the application, then click Open and Open again. + - **macOS Sequoia users:** Apple has changed how unsigned applications from the internet are opened. You will need to follow the instructions [here](https://wiki.hacks.guide/wiki/Open_unsigned_applications_on_macOS_Sequoia) to open the application. +1. Connect your Switch in RCM to your PC using the USB cable, make sure it's also detected in CrystalRCM. +1. Once selected, click `Push!`. The payload should now be injected successfully. + - If your payload was successfully injected your switch should have yellow text that says "Update bootloader folder!", this will be resolved soon. - #### **What you need:** +:::: - - The latest release of [Rekado](https://github.com/MenosGrante/Rekado/releases) - - You will need to enable Unknown Sources in your device settings to install this - - A USB-C cable - - If your device has a USB-C port, you may use a C-C cable - - If your device only has a Micro USB port, you will need a USB OTG adapter and a USB A-C cable +:::: tab Android + +### What you need: + +- The latest release of Rekado +- You will need to enable Unknown Sources in your device settings to install this +- A USB-C cable +- If your device has a USB-C port, you may use a C-C cable +- If your device only has a Micro USB port, you will need a USB OTG adapter and a USB A-C cable - This **will not work** on every phone! - - The latest release of [Hekate](https://github.com/CTCaer/hekate/releases/). The Hekate payload (`hekate_ctcaer_(version).bin`) is located inside of the `hekate_ctcaer_(version).zip`. +- The latest release of [Hekate](https://github.com/CTCaer/hekate/releases/). The Hekate payload (`hekate_ctcaer_(version).bin`) is located inside of the `hekate_ctcaer_(version).zip`. + +### Instructions: + +1. Copy the hekate_ctcaer `.bin` file from the Hekate `.zip` file to a location on your phone. + - A tool such as Amaze File Manager can do this. +1. Launch Rekado on your phone. +1. Navigate to `Payloads` (Signified by a downwards arrow with a line), then press the `+` button at the bottom right. +1. Navigate to your hekate_ctcaer `.bin` file and tap it to add it to Rekado's menu. +1. **Optional, but recommended**: Navigate to Rekado's settings in the top right and enable `Hide bundled`. +1. Connect your Switch in RCM to your phone using the USB cable. +1. If prompted, grant Rekado access to the Switch. +1. Select the `hekate_ctcaer_X.X.X.bin` file in the dialog that pops up. + - If your payload was successfully injected your switch should have yellow text that says "Update bootloader folder!", this will be resolved soon. + +:::: - #### **Instructions:** +:::: tab Chromebook - 1. Copy the hekate_ctcaer `.bin` file from the Hekate `.zip` file to a location on your phone. - - A tool such as Amaze File Manager can do this. - 1. Launch Rekado on your phone. - 1. Navigate to `Payloads` (Signified by a downwards arrow with a line), then press the `+` button at the bottom right. - 1. Navigate to your hekate_ctcaer `.bin` file and tap it to add it to Rekado's menu. - 1. **Optional, but recommended**: Navigate to Rekado's settings in the top right and enable `Hide bundled`. - 1. Connect your Switch in RCM to your phone using the USB cable. - 1. If prompted, grant Rekado access to the Switch. - 1. Select the `hekate_ctcaer_X.X.X.bin` file in the dialog that pops up. - - If your payload was successfully injected your switch should have yellow text that says "Update bootloader folder!", this will be resolved soon. -=== "Chromebook" +### What you need: - #### **What you need:** +- A USB-A to USB-C cable - - A USB-A to USB-C cable - !!! warning "About USB-C" - If your Chromebook has a USB-C port, do note that this will not work using a C-C cable. +::: warning +**About USB-C** - #### **Instructions:** +If your Chromebook has a USB-C port, do note that this will not work using a C-C cable. - 1. Go to the injection [website](https://fusee.eiphax.tech/) and scroll all the way down - 1. Open the dropdown menu and select `hekate_ctcaer_X_X_X` from the list. - 1. Connect your Switch in RCM to your Chromebook using the USB cable. - 1. Select "Deliver Payload". A pop-up will appear. Click the `APX` option. - 1. Press the Connect button and the payload will be injected. - - If your payload was successfully injected your switch should have yellow text that says "Update bootloader folder!", this will be resolved soon. +::: -!!! danger "If nothing happens after you send the payload" - If your console's screen remains black after you've sent Hekate (or any other payload), it's possible your payload was corrupted, or that your console is patched. If your payload injector program shows that zero or 0x0000 bytes were sent, then it is patched. This isn't a one-time glitch or up for debate; it is patched. Consider an alternate method that isn't via RCM. +### Instructions: ------ +1. Go to the injection [website](https://fusee.eiphax.tech/) and scroll all the way down +1. Open the dropdown menu and select `hekate_ctcaer_X_X_X` from the list. +1. Connect your Switch in RCM to your Chromebook using the USB cable. +1. Select "Deliver Payload". A pop-up will appear. Click the `APX` option. +1. Press the Connect button and the payload will be injected. + - If your payload was successfully injected your switch should have yellow text that says "Update bootloader folder!", this will be resolved soon. -### **Preparing Hekate** +:::: + +::::: + +::: danger + +**If nothing happens after you send the payload** + +If your console's screen remains black after you've sent Hekate (or any other payload), it's possible your payload was corrupted, or that your console is patched. If your payload injector program shows that zero or 0x0000 bytes were sent, then it is patched. This isn't a one-time glitch or up for debate; it is patched. Consider an alternate method that isn't via RCM. + +::: + +## Preparing Hekate We will prepare the microSD card for formatting/partitioning before going to the next page. Removing the microSD card while in Hekate is safe so turning off the console is not necessary and keeping it on will save time that would be spent reinjecting the payload. -!!! danger "Following the guide will delete everything on your microSD card!" - Later in the guide, you will be formatting and/or partitioning your microSD card. This means that all data on the microSD card will be lost. Now is a good time to back up *all* of its data to a safe place (for example, on your PC or external drive) so that you can restore it later. You can do this by following the instructions below. +::: danger + +Following the guide will delete everything on your microSD card! + +Later in the guide, you will be formatting and/or partitioning your microSD card. This means that all data on the microSD card will be lost. Now is a good time to back up *all* of its data to a safe place (for example, on your PC or external drive) so that you can restore it later. You can do this by following the instructions below. ------ +::: -#### **What you need:** -- The latest release of [Hekate](https://github.com/CTCaer/hekate/releases/) +### What you need: +- The latest release of [Hekate](https://github.com/CTCaer/hekate/releases/). - Your microSD card -#### **Instructions:** +### Instructions: 1. Without turning your Switch off, remove the microSD card from the Switch. 1. Insert your microSD card into your computer. 1. Copy the `Nintendo` folder (and any other important data) from the root of your microSD card to a safe space on your device. @@ -143,6 +173,10 @@ We will prepare the microSD card for formatting/partitioning before going to the 1. Put your microSD card back into your Switch. 1. Press any button to continue to the Hekate menu. 1. Use volume up and volume down to navigate the Hekate menu. Hover over 'reload' and press the power button to select. Your screen should now have the Hekate GUI (Nyx) pictured below. -![Nyx](../all/img/nyx.bmp){ width="600" } + ![Nyx](../all/img/nyx.bmp){ width="600" } + +::: tip + +[Continue to choosing your CFW environment](../all/cfw_environment) -[Continue to choosing your CFW environment :material-arrow-right:](../all/cfw_environment.md){ .md-button .md-button--primary } +::: diff --git a/mkdocs.yml b/mkdocs.yml deleted file mode 100644 index 9f138984..00000000 --- a/mkdocs.yml +++ /dev/null @@ -1,110 +0,0 @@ -site_name: NH Switch Guide -copyright: Copyright © 2024 Nintendo Homebrew, Maintained by the NH Discord Server. -site_description: Switch CFW Guide. -site_author: NH Discord Server. -site_url: https://switch.hacks.guide -repo_url: https://github.com/nh-server/switch-guide -repo_name: NH Switch Guide - -theme: - name: material - favicon: img/favicon.ico - features: - - toc.integrate - - navigation.instant - - navigation.expand - - navigation.sections - - navigation.tabs - - navigation.tracking - - palette: - # Palette toggle for light mode - - media: "(prefers-color-scheme: light)" - scheme: default - toggle: - icon: material/brightness-7 - name: Switch to dark mode - - # Palette toggle for dark mode - - media: "(prefers-color-scheme: dark)" - scheme: slate - toggle: - icon: material/brightness-4 - name: Switch to system preference - - icon: - repo: fontawesome/brands/github - logo: fontawesome/solid/wrench - -nav: - - Home: index.md - - User Guide: - - 'Getting Started': 'user_guide/getting_started.md' - - RCM: - - 'Introduction': 'user_guide/rcm/index.md' - - 'Entering RCM': 'user_guide/rcm/entering_rcm.md' - - 'Sending a payload': 'user_guide/rcm/sending_payload.md' - - Modchip: - - 'Introduction': 'user_guide/modchip/index.md' - - 'Preparing Hekate': 'user_guide/modchip/preparing_hekate.md' - - Finalizing Setup: - - 'Choosing an Environment': 'user_guide/all/cfw_environment.md' - - 'Partitioning the microSD for emuMMC': 'user_guide/all/partitioning_sd.md' - - 'Partitioning the microSD for sysCFW': 'user_guide/all/partitioning_sd_syscfw.md' - - 'microSD Preparations': 'user_guide/all/sd_preparation.md' - - 'Making Essential Backups': 'user_guide/all/making_essential_backups.md' - - 'Launching CFW': 'user_guide/all/launching_cfw.md' - - Homebrew: - - 'Homebrew': 'homebrew/index.md' - - 'JKSV': 'homebrew/jksv.md' - - 'Goldleaf': 'homebrew/goldleaf.md' - - 'FTPD': 'homebrew/ftpd.md' - - 'NXTheme Installer': 'homebrew/nxtheme-installer.md' - - 'NX-Shell': 'homebrew/nx-shell.md' - - 'EdiZon': 'homebrew/edizon.md' - - 'SimpleModManager': 'homebrew/simplemodmanager.md/' - - 'Tesla-Menu': 'homebrew/tesla-menu.md' - - 'MissionControl': 'homebrew/mission-control.md' - - 'sys-con': 'homebrew/sys-con.md' - - 'sys-botbase': 'homebrew/sys-botbase.md' - - 'SysDVR': 'homebrew/sysdvr.md' - - 'sys-clk': 'homebrew/sys-clk.md' - - 'ldn_mitm': 'homebrew/ldn_mitm.md' - - Tutorials: - - 'Extras': 'extras/index.md' - - 'Blocking Nintendo servers': 'extras/blocking_nintendo.md' - - 'Restoring a NAND Backup': 'extras/nandrestore.md' - - 'AutoRCM': 'extras/autorcm.md' - - 'Game Modding': 'extras/game_modding.md' - - 'Linux injection without root': 'extras/adding_udev.md' - - 'Showing File Name Extensions (Windows)': 'extras/showing_file_extensions.md' - - 'Alternate Boot Setups': 'extras/alternate_bootsetups.md' - - 'RCM Payload Injectors Information': 'extras/rcm_injectors.md' - - 'Updating CFW': 'extras/updating.md' - - 'Changing SD cards': 'extras/transfer_sd.md' - - 'Glossary': 'extras/glossary.md' - - 'Installing Android': 'extras/installing_android.md' - - 'Installing Linux': 'extras/installing_linux.md' - - FAQ: faq.md - - About: about.md - -markdown_extensions: - - admonition - - pymdownx.details - - pymdownx.superfences - - def_list - - attr_list - - md_in_html - - pymdownx.emoji: - emoji_index: !!python/name:material.extensions.emoji.twemoji - emoji_generator: !!python/name:material.extensions.emoji.to_svg - - pymdownx.tasklist: - custom_checkbox: true - - pymdownx.tabbed: - alternate_style: true - - toc: - permalink: true - toc_depth: 3 - -extra_css: - - css/custom.css diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..3db7e983 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2478 @@ +{ + "name": "switch-guide", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "dependencies": { + "@fortawesome/fontawesome-svg-core": "^6.7.1", + "@fortawesome/free-solid-svg-icons": "^6.7.1", + "@fortawesome/vue-fontawesome": "^3.0.8", + "markdown-it-container": "^4.0.0" + }, + "devDependencies": { + "vitepress": "^1.5.0" + } + }, + "node_modules/@algolia/autocomplete-core": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.17.7.tgz", + "integrity": "sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-plugin-algolia-insights": "1.17.7", + "@algolia/autocomplete-shared": "1.17.7" + } + }, + "node_modules/@algolia/autocomplete-plugin-algolia-insights": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.17.7.tgz", + "integrity": "sha512-Jca5Ude6yUOuyzjnz57og7Et3aXjbwCSDf/8onLHSQgw1qW3ALl9mrMWaXb5FmPVkV3EtkD2F/+NkT6VHyPu9A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-shared": "1.17.7" + }, + "peerDependencies": { + "search-insights": ">= 1 < 3" + } + }, + "node_modules/@algolia/autocomplete-preset-algolia": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.17.7.tgz", + "integrity": "sha512-ggOQ950+nwbWROq2MOCIL71RE0DdQZsceqrg32UqnhDz8FlO9rL8ONHNsI2R1MH0tkgVIDKI/D0sMiUchsFdWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-shared": "1.17.7" + }, + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, + "node_modules/@algolia/autocomplete-shared": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.17.7.tgz", + "integrity": "sha512-o/1Vurr42U/qskRSuhBH+VKxMvkkUVTLU6WZQr+L5lGZZLYWyhdzWjW0iGXY7EkwRTjBqvN2EsR81yCTGV/kmg==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, + "node_modules/@algolia/client-abtesting": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.15.0.tgz", + "integrity": "sha512-FaEM40iuiv1mAipYyiptP4EyxkJ8qHfowCpEeusdHUC4C7spATJYArD2rX3AxkVeREkDIgYEOuXcwKUbDCr7Nw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.15.0", + "@algolia/requester-browser-xhr": "5.15.0", + "@algolia/requester-fetch": "5.15.0", + "@algolia/requester-node-http": "5.15.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-analytics": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.15.0.tgz", + "integrity": "sha512-lho0gTFsQDIdCwyUKTtMuf9nCLwq9jOGlLGIeQGKDxXF7HbiAysFIu5QW/iQr1LzMgDyM9NH7K98KY+BiIFriQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.15.0", + "@algolia/requester-browser-xhr": "5.15.0", + "@algolia/requester-fetch": "5.15.0", + "@algolia/requester-node-http": "5.15.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-common": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.15.0.tgz", + "integrity": "sha512-IofrVh213VLsDkPoSKMeM9Dshrv28jhDlBDLRcVJQvlL8pzue7PEB1EZ4UoJFYS3NSn7JOcJ/V+olRQzXlJj1w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-insights": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.15.0.tgz", + "integrity": "sha512-bDDEQGfFidDi0UQUCbxXOCdphbVAgbVmxvaV75cypBTQkJ+ABx/Npw7LkFGw1FsoVrttlrrQbwjvUB6mLVKs/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.15.0", + "@algolia/requester-browser-xhr": "5.15.0", + "@algolia/requester-fetch": "5.15.0", + "@algolia/requester-node-http": "5.15.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-personalization": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.15.0.tgz", + "integrity": "sha512-LfaZqLUWxdYFq44QrasCDED5bSYOswpQjSiIL7Q5fYlefAAUO95PzBPKCfUhSwhb4rKxigHfDkd81AvEicIEoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.15.0", + "@algolia/requester-browser-xhr": "5.15.0", + "@algolia/requester-fetch": "5.15.0", + "@algolia/requester-node-http": "5.15.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-query-suggestions": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.15.0.tgz", + "integrity": "sha512-wu8GVluiZ5+il8WIRsGKu8VxMK9dAlr225h878GGtpTL6VBvwyJvAyLdZsfFIpY0iN++jiNb31q2C1PlPL+n/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.15.0", + "@algolia/requester-browser-xhr": "5.15.0", + "@algolia/requester-fetch": "5.15.0", + "@algolia/requester-node-http": "5.15.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-search": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.15.0.tgz", + "integrity": "sha512-Z32gEMrRRpEta5UqVQA612sLdoqY3AovvUPClDfMxYrbdDAebmGDVPtSogUba1FZ4pP5dx20D3OV3reogLKsRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.15.0", + "@algolia/requester-browser-xhr": "5.15.0", + "@algolia/requester-fetch": "5.15.0", + "@algolia/requester-node-http": "5.15.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/ingestion": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.15.0.tgz", + "integrity": "sha512-MkqkAxBQxtQ5if/EX2IPqFA7LothghVyvPoRNA/meS2AW2qkHwcxjuiBxv4H6mnAVEPfJlhu9rkdVz9LgCBgJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.15.0", + "@algolia/requester-browser-xhr": "5.15.0", + "@algolia/requester-fetch": "5.15.0", + "@algolia/requester-node-http": "5.15.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/monitoring": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.15.0.tgz", + "integrity": "sha512-QPrFnnGLMMdRa8t/4bs7XilPYnoUXDY8PMQJ1sf9ZFwhUysYYhQNX34/enoO0LBjpoOY6rLpha39YQEFbzgKyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.15.0", + "@algolia/requester-browser-xhr": "5.15.0", + "@algolia/requester-fetch": "5.15.0", + "@algolia/requester-node-http": "5.15.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/recommend": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.15.0.tgz", + "integrity": "sha512-5eupMwSqMLDObgSMF0XG958zR6GJP3f7jHDQ3/WlzCM9/YIJiWIUoJFGsko9GYsA5xbLDHE/PhWtq4chcCdaGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.15.0", + "@algolia/requester-browser-xhr": "5.15.0", + "@algolia/requester-fetch": "5.15.0", + "@algolia/requester-node-http": "5.15.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-browser-xhr": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.15.0.tgz", + "integrity": "sha512-Po/GNib6QKruC3XE+WKP1HwVSfCDaZcXu48kD+gwmtDlqHWKc7Bq9lrS0sNZ456rfCKhXksOmMfUs4wRM/Y96w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.15.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-fetch": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.15.0.tgz", + "integrity": "sha512-rOZ+c0P7ajmccAvpeeNrUmEKoliYFL8aOR5qGW5pFq3oj3Iept7Y5mEtEsOBYsRt6qLnaXn4zUKf+N8nvJpcIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.15.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-node-http": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.15.0.tgz", + "integrity": "sha512-b1jTpbFf9LnQHEJP5ddDJKE2sAlhYd7EVSOWgzo/27n/SfCoHfqD0VWntnWYD83PnOKvfe8auZ2+xCb0TXotrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.15.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", + "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.26.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@docsearch/css": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.8.0.tgz", + "integrity": "sha512-pieeipSOW4sQ0+bE5UFC51AOZp9NGxg89wAlZ1BAQFaiRAGK1IKUaPQ0UGZeNctJXyqZ1UvBtOQh2HH+U5GtmA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@docsearch/js": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docsearch/js/-/js-3.8.0.tgz", + "integrity": "sha512-PVuV629f5UcYRtBWqK7ID6vNL5647+2ADJypwTjfeBIrJfwPuHtzLy39hMGMfFK+0xgRyhTR0FZ83EkdEraBlg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@docsearch/react": "3.8.0", + "preact": "^10.0.0" + } + }, + "node_modules/@docsearch/react": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.8.0.tgz", + "integrity": "sha512-WnFK720+iwTVt94CxY3u+FgX6exb3BfN5kE9xUY6uuAH/9W/UFboBZFLlrw/zxFRHoHZCOXRtOylsXF+6LHI+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-core": "1.17.7", + "@algolia/autocomplete-preset-algolia": "1.17.7", + "@docsearch/css": "3.8.0", + "algoliasearch": "^5.12.0" + }, + "peerDependencies": { + "@types/react": ">= 16.8.0 < 19.0.0", + "react": ">= 16.8.0 < 19.0.0", + "react-dom": ">= 16.8.0 < 19.0.0", + "search-insights": ">= 1 < 3" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "search-insights": { + "optional": true + } + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@fortawesome/fontawesome-common-types": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.7.1.tgz", + "integrity": "sha512-gbDz3TwRrIPT3i0cDfujhshnXO9z03IT1UKRIVi/VEjpNHtSBIP2o5XSm+e816FzzCFEzAxPw09Z13n20PaQJQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/fontawesome-svg-core": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.7.1.tgz", + "integrity": "sha512-8dBIHbfsKlCk2jHQ9PoRBg2Z+4TwyE3vZICSnoDlnsHA6SiMlTwfmW6yX0lHsRmWJugkeb92sA0hZdkXJhuz+g==", + "license": "MIT", + "dependencies": { + "@fortawesome/fontawesome-common-types": "6.7.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/free-solid-svg-icons": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.7.1.tgz", + "integrity": "sha512-BTKc0b0mgjWZ2UDKVgmwaE0qt0cZs6ITcDgjrti5f/ki7aF5zs+N91V6hitGo3TItCFtnKg6cUVGdTmBFICFRg==", + "license": "(CC-BY-4.0 AND MIT)", + "dependencies": { + "@fortawesome/fontawesome-common-types": "6.7.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/vue-fontawesome": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@fortawesome/vue-fontawesome/-/vue-fontawesome-3.0.8.tgz", + "integrity": "sha512-yyHHAj4G8pQIDfaIsMvQpwKMboIZtcHTUvPqXjOHyldh1O1vZfH4W03VDPv5RvI9P6DLTzJQlmVgj9wCf7c2Fw==", + "license": "MIT", + "peerDependencies": { + "@fortawesome/fontawesome-svg-core": "~1 || ~6", + "vue": ">= 3.0.0 < 4" + } + }, + "node_modules/@iconify-json/simple-icons": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@iconify-json/simple-icons/-/simple-icons-1.2.12.tgz", + "integrity": "sha512-lRNORrIdeLStShxAjN6FgXE1iMkaAgiAHZdP0P0GZecX91FVYW58uZnRSlXLlSx5cxMoELulkAAixybPA2g52g==", + "dev": true, + "license": "CC0-1.0", + "dependencies": { + "@iconify/types": "*" + } + }, + "node_modules/@iconify/types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz", + "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.27.4.tgz", + "integrity": "sha512-2Y3JT6f5MrQkICUyRVCw4oa0sutfAsgaSsb0Lmmy1Wi2y7X5vT9Euqw4gOsCyy0YfKURBg35nhUKZS4mDcfULw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.27.4.tgz", + "integrity": "sha512-wzKRQXISyi9UdCVRqEd0H4cMpzvHYt1f/C3CoIjES6cG++RHKhrBj2+29nPF0IB5kpy9MS71vs07fvrNGAl/iA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.27.4.tgz", + "integrity": "sha512-PlNiRQapift4LNS8DPUHuDX/IdXiLjf8mc5vdEmUR0fF/pyy2qWwzdLjB+iZquGr8LuN4LnUoSEvKRwjSVYz3Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.27.4.tgz", + "integrity": "sha512-o9bH2dbdgBDJaXWJCDTNDYa171ACUdzpxSZt+u/AAeQ20Nk5x+IhA+zsGmrQtpkLiumRJEYef68gcpn2ooXhSQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.27.4.tgz", + "integrity": "sha512-NBI2/i2hT9Q+HySSHTBh52da7isru4aAAo6qC3I7QFVsuhxi2gM8t/EI9EVcILiHLj1vfi+VGGPaLOUENn7pmw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.27.4.tgz", + "integrity": "sha512-wYcC5ycW2zvqtDYrE7deary2P2UFmSh85PUpAx+dwTCO9uw3sgzD6Gv9n5X4vLaQKsrfTSZZ7Z7uynQozPVvWA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.27.4.tgz", + "integrity": "sha512-9OwUnK/xKw6DyRlgx8UizeqRFOfi9mf5TYCw1uolDaJSbUmBxP85DE6T4ouCMoN6pXw8ZoTeZCSEfSaYo+/s1w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.27.4.tgz", + "integrity": "sha512-Vgdo4fpuphS9V24WOV+KwkCVJ72u7idTgQaBoLRD0UxBAWTF9GWurJO9YD9yh00BzbkhpeXtm6na+MvJU7Z73A==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.27.4.tgz", + "integrity": "sha512-pleyNgyd1kkBkw2kOqlBx+0atfIIkkExOTiifoODo6qKDSpnc6WzUY5RhHdmTdIJXBdSnh6JknnYTtmQyobrVg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.27.4.tgz", + "integrity": "sha512-caluiUXvUuVyCHr5DxL8ohaaFFzPGmgmMvwmqAITMpV/Q+tPoaHZ/PWa3t8B2WyoRcIIuu1hkaW5KkeTDNSnMA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.27.4.tgz", + "integrity": "sha512-FScrpHrO60hARyHh7s1zHE97u0KlT/RECzCKAdmI+LEoC1eDh/RDji9JgFqyO+wPDb86Oa/sXkily1+oi4FzJQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.27.4.tgz", + "integrity": "sha512-qyyprhyGb7+RBfMPeww9FlHwKkCXdKHeGgSqmIXw9VSUtvyFZ6WZRtnxgbuz76FK7LyoN8t/eINRbPUcvXB5fw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.27.4.tgz", + "integrity": "sha512-PFz+y2kb6tbh7m3A7nA9++eInGcDVZUACulf/KzDtovvdTizHpZaJty7Gp0lFwSQcrnebHOqxF1MaKZd7psVRg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.27.4.tgz", + "integrity": "sha512-Ni8mMtfo+o/G7DVtweXXV/Ol2TFf63KYjTtoZ5f078AUgJTmaIJnj4JFU7TK/9SVWTaSJGxPi5zMDgK4w+Ez7Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.27.4.tgz", + "integrity": "sha512-5AeeAF1PB9TUzD+3cROzFTnAJAcVUGLuR8ng0E0WXGkYhp6RD6L+6szYVX+64Rs0r72019KHZS1ka1q+zU/wUw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.27.4.tgz", + "integrity": "sha512-yOpVsA4K5qVwu2CaS3hHxluWIK5HQTjNV4tWjQXluMiiiu4pJj4BN98CvxohNCpcjMeTXk/ZMJBRbgRg8HBB6A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.27.4.tgz", + "integrity": "sha512-KtwEJOaHAVJlxV92rNYiG9JQwQAdhBlrjNRp7P9L8Cb4Rer3in+0A+IPhJC9y68WAi9H0sX4AiG2NTsVlmqJeQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.27.4.tgz", + "integrity": "sha512-3j4jx1TppORdTAoBJRd+/wJRGCPC0ETWkXOecJ6PPZLj6SptXkrXcNqdj0oclbKML6FkQltdz7bBA3rUSirZug==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@shikijs/core": { + "version": "1.23.1", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.23.1.tgz", + "integrity": "sha512-NuOVgwcHgVC6jBVH5V7iblziw6iQbWWHrj5IlZI3Fqu2yx9awH7OIQkXIcsHsUmY19ckwSgUMgrqExEyP5A0TA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/engine-javascript": "1.23.1", + "@shikijs/engine-oniguruma": "1.23.1", + "@shikijs/types": "1.23.1", + "@shikijs/vscode-textmate": "^9.3.0", + "@types/hast": "^3.0.4", + "hast-util-to-html": "^9.0.3" + } + }, + "node_modules/@shikijs/engine-javascript": { + "version": "1.23.1", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-1.23.1.tgz", + "integrity": "sha512-i/LdEwT5k3FVu07SiApRFwRcSJs5QM9+tod5vYCPig1Ywi8GR30zcujbxGQFJHwYD7A5BUqagi8o5KS+LEVgBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "1.23.1", + "@shikijs/vscode-textmate": "^9.3.0", + "oniguruma-to-es": "0.4.1" + } + }, + "node_modules/@shikijs/engine-oniguruma": { + "version": "1.23.1", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-1.23.1.tgz", + "integrity": "sha512-KQ+lgeJJ5m2ISbUZudLR1qHeH3MnSs2mjFg7bnencgs5jDVPeJ2NVDJ3N5ZHbcTsOIh0qIueyAJnwg7lg7kwXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "1.23.1", + "@shikijs/vscode-textmate": "^9.3.0" + } + }, + "node_modules/@shikijs/transformers": { + "version": "1.23.1", + "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-1.23.1.tgz", + "integrity": "sha512-yQ2Cn0M9i46p30KwbyIzLvKDk+dQNU+lj88RGO0XEj54Hn4Cof1bZoDb9xBRWxFE4R8nmK63w7oHnJwvOtt0NQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "shiki": "1.23.1" + } + }, + "node_modules/@shikijs/types": { + "version": "1.23.1", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-1.23.1.tgz", + "integrity": "sha512-98A5hGyEhzzAgQh2dAeHKrWW4HfCMeoFER2z16p5eJ+vmPeF6lZ/elEne6/UCU551F/WqkopqRsr1l2Yu6+A0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/vscode-textmate": "^9.3.0", + "@types/hast": "^3.0.4" + } + }, + "node_modules/@shikijs/vscode-textmate": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-9.3.0.tgz", + "integrity": "sha512-jn7/7ky30idSkd/O5yDBfAnVt+JJpepofP/POZ1iMOxK59cOfqIgg/Dj0eFsjOTMw+4ycJN0uhZH/Eb0bs/EUA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/markdown-it": { + "version": "14.1.2", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz", + "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/linkify-it": "^5", + "@types/mdurl": "^2" + } + }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", + "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@vitejs/plugin-vue": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.0.tgz", + "integrity": "sha512-7n7KdUEtx/7Yl7I/WVAMZ1bEb0eVvXF3ummWTeLcs/9gvo9pJhuLdouSXGjdZ/MKD1acf1I272+X0RMua4/R3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.13.tgz", + "integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.25.3", + "@vue/shared": "3.5.13", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz", + "integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.13", + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz", + "integrity": "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.25.3", + "@vue/compiler-core": "3.5.13", + "@vue/compiler-dom": "3.5.13", + "@vue/compiler-ssr": "3.5.13", + "@vue/shared": "3.5.13", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.11", + "postcss": "^8.4.48", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz", + "integrity": "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.13", + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/devtools-api": { + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.6.4.tgz", + "integrity": "sha512-5AaJ5ELBIuevmFMZYYLuOO9HUuY/6OlkOELHE7oeDhy4XD/hSODIzktlsvBOsn+bto3aD0psj36LGzwVu5Ip8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/devtools-kit": "^7.6.4" + } + }, + "node_modules/@vue/devtools-kit": { + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.6.4.tgz", + "integrity": "sha512-Zs86qIXXM9icU0PiGY09PQCle4TI750IPLmAJzW5Kf9n9t5HzSYf6Rz6fyzSwmfMPiR51SUKJh9sXVZu78h2QA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/devtools-shared": "^7.6.4", + "birpc": "^0.2.19", + "hookable": "^5.5.3", + "mitt": "^3.0.1", + "perfect-debounce": "^1.0.0", + "speakingurl": "^14.0.1", + "superjson": "^2.2.1" + } + }, + "node_modules/@vue/devtools-shared": { + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.6.4.tgz", + "integrity": "sha512-nD6CUvBEel+y7zpyorjiUocy0nh77DThZJ0k1GRnJeOmY3ATq2fWijEp7wk37gb023Cb0R396uYh5qMSBQ5WFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "rfdc": "^1.4.1" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.13.tgz", + "integrity": "sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.13.tgz", + "integrity": "sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.13", + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.13.tgz", + "integrity": "sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.13", + "@vue/runtime-core": "3.5.13", + "@vue/shared": "3.5.13", + "csstype": "^3.1.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.13.tgz", + "integrity": "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.13", + "@vue/shared": "3.5.13" + }, + "peerDependencies": { + "vue": "3.5.13" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.13.tgz", + "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==", + "license": "MIT" + }, + "node_modules/@vueuse/core": { + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-11.3.0.tgz", + "integrity": "sha512-7OC4Rl1f9G8IT6rUfi9JrKiXy4bfmHhZ5x2Ceojy0jnd3mHNEvV4JaRygH362ror6/NZ+Nl+n13LPzGiPN8cKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.20", + "@vueuse/metadata": "11.3.0", + "@vueuse/shared": "11.3.0", + "vue-demi": ">=0.14.10" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/core/node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/@vueuse/integrations": { + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/@vueuse/integrations/-/integrations-11.3.0.tgz", + "integrity": "sha512-5fzRl0apQWrDezmobchoiGTkGw238VWESxZHazfhP3RM7pDSiyXy18QbfYkILoYNTd23HPAfQTJpkUc5QbkwTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vueuse/core": "11.3.0", + "@vueuse/shared": "11.3.0", + "vue-demi": ">=0.14.10" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "async-validator": "^4", + "axios": "^1", + "change-case": "^5", + "drauu": "^0.4", + "focus-trap": "^7", + "fuse.js": "^7", + "idb-keyval": "^6", + "jwt-decode": "^4", + "nprogress": "^0.2", + "qrcode": "^1.5", + "sortablejs": "^1", + "universal-cookie": "^7" + }, + "peerDependenciesMeta": { + "async-validator": { + "optional": true + }, + "axios": { + "optional": true + }, + "change-case": { + "optional": true + }, + "drauu": { + "optional": true + }, + "focus-trap": { + "optional": true + }, + "fuse.js": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "jwt-decode": { + "optional": true + }, + "nprogress": { + "optional": true + }, + "qrcode": { + "optional": true + }, + "sortablejs": { + "optional": true + }, + "universal-cookie": { + "optional": true + } + } + }, + "node_modules/@vueuse/integrations/node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/@vueuse/metadata": { + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-11.3.0.tgz", + "integrity": "sha512-pwDnDspTqtTo2HwfLw4Rp6yywuuBdYnPYDq+mO38ZYKGebCUQC/nVj/PXSiK9HX5otxLz8Fn7ECPbjiRz2CC3g==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-11.3.0.tgz", + "integrity": "sha512-P8gSSWQeucH5821ek2mn/ciCk+MS/zoRKqdQIM3bHq6p7GXDAJLmnRRKmF5F65sAVJIfzQlwR3aDzwCn10s8hA==", + "dev": true, + "license": "MIT", + "dependencies": { + "vue-demi": ">=0.14.10" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared/node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/algoliasearch": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.15.0.tgz", + "integrity": "sha512-Yf3Swz1s63hjvBVZ/9f2P1Uu48GjmjCN+Esxb6MAONMGtZB1fRX8/S1AhUTtsuTlcGovbYLxpHgc7wEzstDZBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-abtesting": "5.15.0", + "@algolia/client-analytics": "5.15.0", + "@algolia/client-common": "5.15.0", + "@algolia/client-insights": "5.15.0", + "@algolia/client-personalization": "5.15.0", + "@algolia/client-query-suggestions": "5.15.0", + "@algolia/client-search": "5.15.0", + "@algolia/ingestion": "1.15.0", + "@algolia/monitoring": "1.15.0", + "@algolia/recommend": "5.15.0", + "@algolia/requester-browser-xhr": "5.15.0", + "@algolia/requester-fetch": "5.15.0", + "@algolia/requester-node-http": "5.15.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/birpc": { + "version": "0.2.19", + "resolved": "https://registry.npmjs.org/birpc/-/birpc-0.2.19.tgz", + "integrity": "sha512-5WeXXAvTmitV1RqJFppT5QtUiz2p1mRSYU000Jkft5ZUCLJIk4uQriYNO50HknxKwM6jd8utNc66K1qGIwwWBQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/copy-anything": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz", + "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-what": "^4.1.8" + }, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/emoji-regex-xs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex-xs/-/emoji-regex-xs-1.0.0.tgz", + "integrity": "sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==", + "dev": true, + "license": "MIT" + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/focus-trap": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.6.2.tgz", + "integrity": "sha512-9FhUxK1hVju2+AiQIDJ5Dd//9R2n2RAfJ0qfhF4IHGHgcoEUTMpbTeG/zbEuwaiYXfuAH6XE0/aCyxDdRM+W5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "tabbable": "^6.2.0" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/hast-util-to-html": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.3.tgz", + "integrity": "sha512-M17uBDzMJ9RPCqLMO92gNNUDuBSq10a25SDBI08iCCxmorf4Yy6sYHK57n9WAbRAAaU+DuR4W6GN9K4DFZesYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-whitespace": "^3.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.0", + "zwitch": "^2.0.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/html-void-elements": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-what": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", + "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/magic-string": { + "version": "0.30.13", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.13.tgz", + "integrity": "sha512-8rYBO+MsWkgjDSOvLomYnzhdwEG51olQ4zL5KXnNJWV5MNmrb4rTZdrtkhxjnD/QyZUqR/Z/XDsUs/4ej2nx0g==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/mark.js": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz", + "integrity": "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/markdown-it-container": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/markdown-it-container/-/markdown-it-container-4.0.0.tgz", + "integrity": "sha512-HaNccxUH0l7BNGYbFbjmGpf5aLHAMTinqRZQAEQbMr2cdD3z91Q6kIo1oUn1CQndkT03jat6ckrdRYuwwqLlQw==", + "license": "MIT" + }, + "node_modules/mdast-util-to-hast": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", + "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.1.tgz", + "integrity": "sha512-534m2WhVTddrcKVepwmVEVnUAmtrx9bfIjNoQHRqfnvdaHQiFytEhJoTgpWJvDEXCO5gLTQh3wYC1PgOJA4NSQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/minisearch": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/minisearch/-/minisearch-7.1.1.tgz", + "integrity": "sha512-b3YZEYCEH4EdCAtYP7OlDyx7FdPwNzuNwLQ34SfJpM9dlbBZzeXndGavTrC+VCiRWomL21SWfMc6SCKO/U2ZNw==", + "dev": true, + "license": "MIT" + }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/oniguruma-to-es": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-0.4.1.tgz", + "integrity": "sha512-rNcEohFz095QKGRovP/yqPIKc+nP+Sjs4YTHMv33nMePGKrq/r2eu9Yh4646M5XluGJsUnmwoXuiXE69KDs+fQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex-xs": "^1.0.0", + "regex": "^5.0.0", + "regex-recursion": "^4.2.1" + } + }, + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/postcss": { + "version": "8.4.49", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", + "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/preact": { + "version": "10.25.0", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.25.0.tgz", + "integrity": "sha512-6bYnzlLxXV3OSpUxLdaxBmE7PMOu0aR3pG6lryK/0jmvcDFPlcXGQAt5DpK3RITWiDrfYZRI0druyaK/S9kYLg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, + "node_modules/property-information": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", + "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/regex": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/regex/-/regex-5.0.2.tgz", + "integrity": "sha512-/pczGbKIQgfTMRV0XjABvc5RzLqQmwqxLHdQao2RTXPk+pmTXB2P0IaUHYdYyk412YLwUIkaeMd5T+RzVgTqnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-recursion": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-4.2.1.tgz", + "integrity": "sha512-QHNZyZAeKdndD1G3bKAbBEKOSSK4KOHQrAJ01N1LJeb0SoH4DJIeFhp0uUpETgONifS4+P3sOgoA1dhzgrQvhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-utilities": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz", + "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==", + "dev": true, + "license": "MIT" + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true, + "license": "MIT" + }, + "node_modules/rollup": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.27.4.tgz", + "integrity": "sha512-RLKxqHEMjh/RGLsDxAEsaLO3mWgyoU6x9w6n1ikAzet4B3gI2/3yP6PWY2p9QzRTh6MfEIXB3MwsOY0Iv3vNrw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.6" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.27.4", + "@rollup/rollup-android-arm64": "4.27.4", + "@rollup/rollup-darwin-arm64": "4.27.4", + "@rollup/rollup-darwin-x64": "4.27.4", + "@rollup/rollup-freebsd-arm64": "4.27.4", + "@rollup/rollup-freebsd-x64": "4.27.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.27.4", + "@rollup/rollup-linux-arm-musleabihf": "4.27.4", + "@rollup/rollup-linux-arm64-gnu": "4.27.4", + "@rollup/rollup-linux-arm64-musl": "4.27.4", + "@rollup/rollup-linux-powerpc64le-gnu": "4.27.4", + "@rollup/rollup-linux-riscv64-gnu": "4.27.4", + "@rollup/rollup-linux-s390x-gnu": "4.27.4", + "@rollup/rollup-linux-x64-gnu": "4.27.4", + "@rollup/rollup-linux-x64-musl": "4.27.4", + "@rollup/rollup-win32-arm64-msvc": "4.27.4", + "@rollup/rollup-win32-ia32-msvc": "4.27.4", + "@rollup/rollup-win32-x64-msvc": "4.27.4", + "fsevents": "~2.3.2" + } + }, + "node_modules/search-insights": { + "version": "2.17.3", + "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.17.3.tgz", + "integrity": "sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/shiki": { + "version": "1.23.1", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.23.1.tgz", + "integrity": "sha512-8kxV9TH4pXgdKGxNOkrSMydn1Xf6It8lsle0fiqxf7a1149K1WGtdOu3Zb91T5r1JpvRPxqxU3C2XdZZXQnrig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/core": "1.23.1", + "@shikijs/engine-javascript": "1.23.1", + "@shikijs/engine-oniguruma": "1.23.1", + "@shikijs/types": "1.23.1", + "@shikijs/vscode-textmate": "^9.3.0", + "@types/hast": "^3.0.4" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/speakingurl": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", + "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "dev": true, + "license": "MIT", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/superjson": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.1.tgz", + "integrity": "sha512-8iGv75BYOa0xRJHK5vRLEjE2H/i4lulTjzpUXic3Eg8akftYjkmQDa8JARQ42rlczXyFR3IeRoeFCc7RxHsYZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "copy-anything": "^3.0.2" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/tabbable": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", + "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", + "dev": true, + "license": "MIT" + }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vite": { + "version": "5.4.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.11.tgz", + "integrity": "sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vitepress": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/vitepress/-/vitepress-1.5.0.tgz", + "integrity": "sha512-q4Q/G2zjvynvizdB3/bupdYkCJe2umSAMv9Ju4d92E6/NXJ59z70xB0q5p/4lpRyAwflDsbwy1mLV9Q5+nlB+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@docsearch/css": "^3.6.2", + "@docsearch/js": "^3.6.2", + "@iconify-json/simple-icons": "^1.2.10", + "@shikijs/core": "^1.22.2", + "@shikijs/transformers": "^1.22.2", + "@shikijs/types": "^1.22.2", + "@types/markdown-it": "^14.1.2", + "@vitejs/plugin-vue": "^5.1.4", + "@vue/devtools-api": "^7.5.4", + "@vue/shared": "^3.5.12", + "@vueuse/core": "^11.1.0", + "@vueuse/integrations": "^11.1.0", + "focus-trap": "^7.6.0", + "mark.js": "8.11.1", + "minisearch": "^7.1.0", + "shiki": "^1.22.2", + "vite": "^5.4.10", + "vue": "^3.5.12" + }, + "bin": { + "vitepress": "bin/vitepress.js" + }, + "peerDependencies": { + "markdown-it-mathjax3": "^4", + "postcss": "^8" + }, + "peerDependenciesMeta": { + "markdown-it-mathjax3": { + "optional": true + }, + "postcss": { + "optional": true + } + } + }, + "node_modules/vue": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.13.tgz", + "integrity": "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.13", + "@vue/compiler-sfc": "3.5.13", + "@vue/runtime-dom": "3.5.13", + "@vue/server-renderer": "3.5.13", + "@vue/shared": "3.5.13" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 00000000..a3ccd8bf --- /dev/null +++ b/package.json @@ -0,0 +1,16 @@ +{ + "devDependencies": { + "vitepress": "^1.5.0" + }, + "scripts": { + "docs:dev": "vitepress dev docs", + "docs:build": "vitepress build docs", + "docs:preview": "vitepress preview docs" + }, + "dependencies": { + "@fortawesome/fontawesome-svg-core": "^6.7.1", + "@fortawesome/free-solid-svg-icons": "^6.7.1", + "@fortawesome/vue-fontawesome": "^3.0.8", + "markdown-it-container": "^4.0.0" + } +} diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 1c36fb88..00000000 --- a/requirements.txt +++ /dev/null @@ -1 +0,0 @@ -mkdocs-material==9.5.5