From bb8d4e5b57c05c008af83d6c599405a84c28a504 Mon Sep 17 00:00:00 2001 From: Souldbminer <162390887+souldbminersmwc@users.noreply.github.com> Date: Mon, 6 Oct 2025 19:24:08 -0400 Subject: [PATCH 1/6] Update main.yml --- .github/workflows/main.yml | 100 ++++++++++++++++--------------------- 1 file changed, 43 insertions(+), 57 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 69a1b7df..8d9a4c68 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -4,16 +4,13 @@ on: push: branches: - '**' + workflow_dispatch: permissions: - contents: read + contents: write pages: write id-token: write -concurrency: - group: "release-deploy" - cancel-in-progress: true - jobs: release: runs-on: ubuntu-latest @@ -22,74 +19,63 @@ jobs: uses: actions/checkout@v3 - name: Install dependencies - run: | - sudo apt-get update - sudo apt-get install -y zip gh + run: sudo apt-get update && sudo apt-get install -y zip jq - name: Create dist zip run: | mkdir -p release zip -r release/dist.zip dist - - name: Get latest release tag - id: get_latest_tag + - name: Determine latest release tag + id: get_latest run: | - LATEST_TAG=$(gh release list --limit 1 --json tagName -q '.[0].tagName' || echo "") - echo "LATEST_TAG=$LATEST_TAG" >> $GITHUB_ENV - - - name: Determine release tag - run: | - if [ -z "${{ env.LATEST_TAG }}" ]; then + LATEST=$(curl -s -H "Authorization: token ${{ secrets.PAT_TOKEN }}" \ + https://api.github.com/repos/${GITHUB_REPOSITORY}/releases/latest \ + | jq -r '.tag_name // empty') + echo "LATEST_TAG=$LATEST" >> $GITHUB_ENV + if [ -z "$LATEST" ]; then echo "RELEASE_TAG=v0.1.0" >> $GITHUB_ENV else - echo "RELEASE_TAG=${{ env.LATEST_TAG }}" >> $GITHUB_ENV + echo "RELEASE_TAG=$LATEST" >> $GITHUB_ENV fi - - name: Create or update GitHub release + - name: Create or update release + id: release run: | - gh auth setup-git - if gh release view "$RELEASE_TAG" &>/dev/null; then - gh release edit "$RELEASE_TAG" --generate-notes + RELEASE_NAME=${{ env.RELEASE_TAG }} + # Check if release exists + RELEASE_ID=$(curl -s -H "Authorization: token ${{ secrets.PAT_TOKEN }}" \ + https://api.github.com/repos/${GITHUB_REPOSITORY}/releases/tags/${{ env.RELEASE_TAG }} \ + | jq -r '.id // empty') + + if [ -z "$RELEASE_ID" ]; then + echo "Creating release $RELEASE_NAME" + RELEASE_ID=$(curl -s -X POST -H "Authorization: token ${{ secrets.PAT_TOKEN }}" \ + -H "Content-Type: application/json" \ + -d "{\"tag_name\":\"${{ env.RELEASE_TAG }}\",\"name\":\"$RELEASE_NAME\",\"draft\":false,\"prerelease\":false}" \ + https://api.github.com/repos/${GITHUB_REPOSITORY}/releases | jq -r '.id') else - gh release create "$RELEASE_TAG" --generate-notes + echo "Release exists, using ID $RELEASE_ID" fi - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + echo "RELEASE_ID=$RELEASE_ID" >> $GITHUB_ENV - name: Upload hoc.kip - run: gh release upload "$RELEASE_TAG" dist/atmosphere/hoc.kip --clobber - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + ASSET="dist/atmosphere/hoc.kip" + FILENAME=$(basename $ASSET) + curl -s -X POST \ + -H "Authorization: token ${{ secrets.PAT_TOKEN }}" \ + -H "Content-Type: application/octet-stream" \ + --data-binary @"$ASSET" \ + "https://uploads.github.com/repos/${GITHUB_REPOSITORY}/releases/${{ env.RELEASE_ID }}/assets?name=$FILENAME" - name: Upload dist.zip - run: gh release upload "$RELEASE_TAG" release/dist.zip --clobber - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - deploy: - runs-on: ubuntu-latest - needs: release - environment: - name: github-pages - steps: - - name: Checkout repository - uses: actions/checkout@v3 - - - name: Setup Pages - uses: actions/configure-pages@v2 - - - name: Ensure dist exists run: | - if [ ! -d "./pages/dist" ]; then - echo "Error: ./pages/dist does not exist" - exit 1 - fi - - - name: Upload artifact - uses: actions/upload-pages-artifact@v1 - with: - path: './pages/dist' - - - name: Deploy to GitHub Pages - id: deployment - uses: actions/deploy-pages@v1 + ASSET="release/dist.zip" + FILENAME=$(basename $ASSET) + curl -s -X POST \ + -H "Authorization: token ${{ secrets.PAT_TOKEN }}" \ + -H "Content-Type: application/zip" \ + --data-binary @"$ASSET" \ + "https://uploads.github.com/repos/${GITHUB_REPOSITORY}/releases/${{ env.RELEASE_ID }}/assets?name=$FILENAME" From a85525aee37bcdf2ff203bc3902ab5794c20fd45 Mon Sep 17 00:00:00 2001 From: Souldbminer <162390887+souldbminersmwc@users.noreply.github.com> Date: Mon, 6 Oct 2025 19:26:52 -0400 Subject: [PATCH 2/6] Update main.yml --- .github/workflows/main.yml | 81 ++++++++++++++++++++++---------------- 1 file changed, 48 insertions(+), 33 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 8d9a4c68..282a0938 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,81 +1,96 @@ -name: Release and Deploy +name: Release on: push: branches: - - '**' - workflow_dispatch: + - main + tags-ignore: + - '*' permissions: - contents: write - pages: write - id-token: write + contents: write # Required to create releases and push tags jobs: - release: + unit-test: runs-on: ubuntu-latest + permissions: + contents: read steps: - - name: Checkout repository - uses: actions/checkout@v3 + - uses: actions/checkout@v5 + - run: make test - - name: Install dependencies - run: sudo apt-get update && sudo apt-get install -y zip jq + integration-test: + runs-on: ubuntu-latest + needs: unit-test + permissions: + contents: write + steps: + - uses: actions/checkout@v5 - - name: Create dist zip + - name: Create dist.zip run: | mkdir -p release zip -r release/dist.zip dist - - name: Determine latest release tag - id: get_latest + - name: Determine release tag + id: tag run: | - LATEST=$(curl -s -H "Authorization: token ${{ secrets.PAT_TOKEN }}" \ + LATEST_TAG=$(curl -s -H "Authorization: token ${{ secrets.PAT_TOKEN }}" \ https://api.github.com/repos/${GITHUB_REPOSITORY}/releases/latest \ | jq -r '.tag_name // empty') - echo "LATEST_TAG=$LATEST" >> $GITHUB_ENV - if [ -z "$LATEST" ]; then - echo "RELEASE_TAG=v0.1.0" >> $GITHUB_ENV + if [ -z "$LATEST_TAG" ]; then + RELEASE_TAG="v0.1.0" else - echo "RELEASE_TAG=$LATEST" >> $GITHUB_ENV + RELEASE_TAG="$LATEST_TAG" fi + echo "RELEASE_TAG=$RELEASE_TAG" >> $GITHUB_ENV - - name: Create or update release - id: release + - name: Create or update GitHub release via API run: | - RELEASE_NAME=${{ env.RELEASE_TAG }} - # Check if release exists RELEASE_ID=$(curl -s -H "Authorization: token ${{ secrets.PAT_TOKEN }}" \ - https://api.github.com/repos/${GITHUB_REPOSITORY}/releases/tags/${{ env.RELEASE_TAG }} \ + https://api.github.com/repos/${GITHUB_REPOSITORY}/releases/tags/$RELEASE_TAG \ | jq -r '.id // empty') if [ -z "$RELEASE_ID" ]; then - echo "Creating release $RELEASE_NAME" RELEASE_ID=$(curl -s -X POST -H "Authorization: token ${{ secrets.PAT_TOKEN }}" \ -H "Content-Type: application/json" \ - -d "{\"tag_name\":\"${{ env.RELEASE_TAG }}\",\"name\":\"$RELEASE_NAME\",\"draft\":false,\"prerelease\":false}" \ + -d "{\"tag_name\":\"$RELEASE_TAG\",\"name\":\"$RELEASE_TAG\",\"draft\":false,\"prerelease\":false}" \ https://api.github.com/repos/${GITHUB_REPOSITORY}/releases | jq -r '.id') - else - echo "Release exists, using ID $RELEASE_ID" fi - echo "RELEASE_ID=$RELEASE_ID" >> $GITHUB_ENV - name: Upload hoc.kip run: | ASSET="dist/atmosphere/hoc.kip" - FILENAME=$(basename $ASSET) + if [ ! -f "$ASSET" ]; then + echo "File $ASSET not found!" + exit 1 + fi curl -s -X POST \ -H "Authorization: token ${{ secrets.PAT_TOKEN }}" \ -H "Content-Type: application/octet-stream" \ --data-binary @"$ASSET" \ - "https://uploads.github.com/repos/${GITHUB_REPOSITORY}/releases/${{ env.RELEASE_ID }}/assets?name=$FILENAME" + "https://uploads.github.com/repos/${GITHUB_REPOSITORY}/releases/$RELEASE_ID/assets?name=$(basename $ASSET)" - name: Upload dist.zip run: | ASSET="release/dist.zip" - FILENAME=$(basename $ASSET) curl -s -X POST \ -H "Authorization: token ${{ secrets.PAT_TOKEN }}" \ -H "Content-Type: application/zip" \ --data-binary @"$ASSET" \ - "https://uploads.github.com/repos/${GITHUB_REPOSITORY}/releases/${{ env.RELEASE_ID }}/assets?name=$FILENAME" + "https://uploads.github.com/repos/${GITHUB_REPOSITORY}/releases/$RELEASE_ID/assets?name=$(basename $ASSET)" + + release: + runs-on: ubuntu-latest + needs: integration-test + steps: + - uses: actions/checkout@v5 + with: + token: ${{ secrets.RELEASE_TOKEN }} # for pushing to protected branch + - name: Publish new tag + run: | + git config --global user.email "no_reply@gohr.digital" + git config --global user.name "Release Bot" + git tag -fa v5 -m "Update v5 tag" + git push origin v5 --force From 11080b8d84c82ca80d602ef33c00f24728dffbac Mon Sep 17 00:00:00 2001 From: Souldbminer <162390887+souldbminersmwc@users.noreply.github.com> Date: Mon, 6 Oct 2025 19:27:29 -0400 Subject: [PATCH 3/6] Create deploy_pages.yml --- .github/workflows/deploy_pages.yml | 42 ++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 .github/workflows/deploy_pages.yml diff --git a/.github/workflows/deploy_pages.yml b/.github/workflows/deploy_pages.yml new file mode 100644 index 00000000..54e3bfc8 --- /dev/null +++ b/.github/workflows/deploy_pages.yml @@ -0,0 +1,42 @@ +# Simple workflow for deploying static content to GitHub Pages +name: Deploy static content to Pages + +on: + # Runs on pushes targeting the default branch + push: + branches: ["master"] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +# Allow one concurrent deployment +concurrency: + group: "pages" + cancel-in-progress: true + +jobs: + # Single deploy job since we're just deploying + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Setup Pages + uses: actions/configure-pages@v2 + - name: Upload artifact + uses: actions/upload-pages-artifact@v1 + with: + # Upload entire repository + path: './pages/dist' + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v1 From 6852bd8e10c22584a6fcf23af99292052c254758 Mon Sep 17 00:00:00 2001 From: Souldbminer <162390887+souldbminersmwc@users.noreply.github.com> Date: Mon, 6 Oct 2025 19:28:04 -0400 Subject: [PATCH 4/6] Delete .github/workflows/main.yml --- .github/workflows/main.yml | 96 -------------------------------------- 1 file changed, 96 deletions(-) delete mode 100644 .github/workflows/main.yml diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml deleted file mode 100644 index 282a0938..00000000 --- a/.github/workflows/main.yml +++ /dev/null @@ -1,96 +0,0 @@ -name: Release - -on: - push: - branches: - - main - tags-ignore: - - '*' - -permissions: - contents: write # Required to create releases and push tags - -jobs: - unit-test: - runs-on: ubuntu-latest - permissions: - contents: read - steps: - - uses: actions/checkout@v5 - - run: make test - - integration-test: - runs-on: ubuntu-latest - needs: unit-test - permissions: - contents: write - steps: - - uses: actions/checkout@v5 - - - name: Create dist.zip - run: | - mkdir -p release - zip -r release/dist.zip dist - - - name: Determine release tag - id: tag - run: | - LATEST_TAG=$(curl -s -H "Authorization: token ${{ secrets.PAT_TOKEN }}" \ - https://api.github.com/repos/${GITHUB_REPOSITORY}/releases/latest \ - | jq -r '.tag_name // empty') - if [ -z "$LATEST_TAG" ]; then - RELEASE_TAG="v0.1.0" - else - RELEASE_TAG="$LATEST_TAG" - fi - echo "RELEASE_TAG=$RELEASE_TAG" >> $GITHUB_ENV - - - name: Create or update GitHub release via API - run: | - RELEASE_ID=$(curl -s -H "Authorization: token ${{ secrets.PAT_TOKEN }}" \ - https://api.github.com/repos/${GITHUB_REPOSITORY}/releases/tags/$RELEASE_TAG \ - | jq -r '.id // empty') - - if [ -z "$RELEASE_ID" ]; then - RELEASE_ID=$(curl -s -X POST -H "Authorization: token ${{ secrets.PAT_TOKEN }}" \ - -H "Content-Type: application/json" \ - -d "{\"tag_name\":\"$RELEASE_TAG\",\"name\":\"$RELEASE_TAG\",\"draft\":false,\"prerelease\":false}" \ - https://api.github.com/repos/${GITHUB_REPOSITORY}/releases | jq -r '.id') - fi - echo "RELEASE_ID=$RELEASE_ID" >> $GITHUB_ENV - - - name: Upload hoc.kip - run: | - ASSET="dist/atmosphere/hoc.kip" - if [ ! -f "$ASSET" ]; then - echo "File $ASSET not found!" - exit 1 - fi - curl -s -X POST \ - -H "Authorization: token ${{ secrets.PAT_TOKEN }}" \ - -H "Content-Type: application/octet-stream" \ - --data-binary @"$ASSET" \ - "https://uploads.github.com/repos/${GITHUB_REPOSITORY}/releases/$RELEASE_ID/assets?name=$(basename $ASSET)" - - - name: Upload dist.zip - run: | - ASSET="release/dist.zip" - curl -s -X POST \ - -H "Authorization: token ${{ secrets.PAT_TOKEN }}" \ - -H "Content-Type: application/zip" \ - --data-binary @"$ASSET" \ - "https://uploads.github.com/repos/${GITHUB_REPOSITORY}/releases/$RELEASE_ID/assets?name=$(basename $ASSET)" - - release: - runs-on: ubuntu-latest - needs: integration-test - steps: - - uses: actions/checkout@v5 - with: - token: ${{ secrets.RELEASE_TOKEN }} # for pushing to protected branch - - name: Publish new tag - run: | - git config --global user.email "no_reply@gohr.digital" - git config --global user.name "Release Bot" - git tag -fa v5 -m "Update v5 tag" - git push origin v5 --force From 1e56f1b016d7f0e71c17f887f372962e61ab2aa3 Mon Sep 17 00:00:00 2001 From: Dominator <160497584+dominatorul@users.noreply.github.com> Date: Fri, 10 Oct 2025 23:14:42 +0300 Subject: [PATCH 5/6] Update README.md --- README.md | 151 ++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 112 insertions(+), 39 deletions(-) diff --git a/README.md b/README.md index 4bf17ffe..c7e507db 100644 --- a/README.md +++ b/README.md @@ -1,58 +1,131 @@

+ Advanced Open Source Overclocking Tool for Nintendo Switch (Atmosphere CFW) +
+--- -  [](https://discord.com/invite/S3eX47dHsB)   []() + + + +[](https://discord.com/invite/S3eX47dHsB) + + + + +---
- Advanced Open Source Overclocking Tool for Nintendo Switch (Atmosphere CFW) -
+
---
-

-
-[](https://discord.com/invite/S3eX47dHsB)
-
-
+
+[](https://discord.com/invite/S3eX47dHsB)
+
+

---
@@ -28,79 +18,79 @@
## ⚠️ Disclaimer
-> **THIS TOOL CAN BE DANGEROUS IF MISUSED. PROCEED WITH CAUTION.**
-> Overclocking RAM can cause **NAND DAMAGE** due to Horizon OS design.
-> Always ensure you have a **full NAND backup** before proceeding.
+> **THIS TOOL CAN BE DANGEROUS IF MISUSED. PROCEED WITH CAUTION.**
+> Due to the design of Horizon OS, **overclocking RAM can cause NAND DAMAGE.**
+> Ensure you have a **full NAND backup** before proceeding.
---
## 🌀 About
-**Horizon OC** is an **open-source overclocking suite** for Nintendo Switch consoles running **Atmosphere** custom firmware.
-It provides safe and flexible control over CPU, GPU, and RAM frequencies, with a modern configuration utility.
+**Horizon OC** is an open-source overclocking tool for Nintendo Switch consoles running **Atmosphere custom firmware**.
+It enables advanced CPU, GPU, and RAM tuning with user-friendly configuration tools.
---
## 🚀 Features
-✅ CPU up to **2397MHz** (Mariko) / **2091MHz** (Erista)
-✅ GPU up to **1305MHz** (Mariko) / **998MHz** (Erista)
-✅ RAM up to **3200MHz** (Mariko) / **2360MHz** (Erista)
-✅ Overclock & undervolt support
-✅ Built-in configuration tool
-✅ Compatible with most homebrew
+* **CPU:** Up to `2397MHz` (Mariko) / `2091MHz` (Erista)
+* **GPU:** Up to `1305MHz` (Mariko) / `998MHz` (Erista)
+* **RAM:** Up to `3200MHz` (Mariko) / `2360MHz` (Erista)
+* Over/undervolting support
+* Built-in configurator
+* Compatible with most homebrew
-> ⚡ *Higher (potentially dangerous) frequencies are unlockable.*
-> ⚙️ *Exact maximums vary per console.*
+> ⚡ *Higher (potentially dangerous) frequencies are unlockable.*
+> ⚙️ *Exact maximum values vary per console.*
---
## 🧩 Installation
-1. Install the latest versions of:
- - [Atmosphere](https://github.com/Atmosphere-NX/Atmosphere)
- - [Ultrahand Overlay](https://github.com/ppkantorski/Ultrahand-Overlay)
+1. Ensure you have the latest versions of
-2. Download the latest `hoc.kip` from the [Releases](../../releases) tab.
-3. If using **Hekate**, edit `hekate_ipl.ini`:
- ```ini
+ * [Atmosphere](https://github.com/Atmosphere-NX/Atmosphere)
+ * [Ultrahand Overlay](https://github.com/ppkantorski/Ultrahand-Overlay)
+2. Download the latest **hoc.kip** file from the [Releases](../../releases) tab.
+3. If using **Hekate**, edit `hekate_ipl.ini` to include:
+
+ ```
kip1=atmosphere/kips/*
-````
+ ```
-*(No edits needed if using fusee.)*
-
-4. Download and extract the **Horizon OC sysmodule** to your SD card root.
-5. Optionally, use the **Configurator** to install automatically via GUI.
+ *(No changes needed if using fusee.)*
+4. Download and extract the **Horizon OC sysmodule** to the root of your SD card.
+5. Alternatively, use the **Configurator** and click the **Install** buttons for automatic setup.
---
## ⚙️ Configuration
-1. Download the **Configurator** on your PC.
+1. Download the latest **Configurator** on your computer.
2. Run the executable.
-3. Select your SD card or UMS device.
-4. Adjust frequency settings.
+3. Select your SD card or UMS drive.
+4. Adjust overclocking settings as desired.
5. Click **Save** to apply your configuration.
---
## 🧱 Building from Source
-1. Set up a build environment for **Atmosphere**.
-2. Clone the repo:
+1. Set up a development environment for compiling **Atmosphere**.
+2. Clone Atmosphere:
```bash
git clone https://github.com/Atmosphere-NX/Atmosphere.git
```
-3. Move it into the `build/` folder.
-4. Copy your `Source/stratosphere` folder into `build/`.
-5. Build with:
+3. Move the cloned folder into `build/`.
+4. Insert your `Source/stratosphere` folder into `build/`.
+5. Run:
```bash
./build.sh
```
-**Build the Configurator:**
+To build the Configurator:
```bash
cd Source/Configurator
@@ -113,19 +103,9 @@ python -m PyInstaller --onefile --add-data "assets;assets" --icon=assets/icon.ic
## 💎 Credits
-| Contributor | Contribution |
-| ------------------------------- | ---------------------- |
-| **Lightos**, **Dominatorul** | RAM timings |
-| **KazushiMe**, **meha** | Switch-OC-Suite |
-| **sys-clk team** | sys-clk base |
-| **b0rd2death** | Ultrahand sys-clk fork |
-| **Lightos**, **Sammybigio2011** | Early testing |
+* **Lightos** & **Dominatorul** – RAM timings
+* **KazushiMe** & **meha** – Switch-OC-Suite
+* **sys-clk team** – sys-clk
+* **b0rd2death** – Ultrahand sys-clk fork
+* **Lightos** & **Sammybigio2011** – Early testing
----
-
-