From 2d47ffb20edbaad0093e10a8dffedb9b6f7eb0b0 Mon Sep 17 00:00:00 2001 From: Thomas Rohloff Date: Sat, 30 May 2026 09:48:37 +0200 Subject: [PATCH 01/11] Update Valve patchset (SteamOS 3.8.6) Signed-off-by: Thomas Rohloff --- PKGBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PKGBUILD b/PKGBUILD index e49ad58..e84fdbf 100755 --- a/PKGBUILD +++ b/PKGBUILD @@ -4,7 +4,7 @@ pkgbase=linux-charcoal-616 _nepbase=linux-neptune-616 -_tag=6.16.12-valve21 +_tag=6.16.12-valve23 _ver=3 pkgver=${_tag//-/.}.cc$_ver pkgrel=1 @@ -96,7 +96,7 @@ source=( 6.16-poc-selector-v2.6.1.patch 6.16-nap-v0.4.0.patch ) -sha256sums=('a69eea3b189ab64e65608140d6cd7c57823d1b39b361e876197eec1b4d1db957' +sha256sums=('4011d16fef57b8f04cbcddc0937819f7fd32225f65d63698afbd5dc6629d0ff0' '37452b4d09e5e42134ae24a61f2f656790837c327268074cf79d7dab3558b972' 'd88eaf0f94bae470040e4882f334c05b1bb2ab0a99e4b7299aa0b2337810ab8d' 'fd57213c524e24cd9c72e2fecd9b2005934b6099e209864e5a93eb03406fca21' From ebbf22760285b13dbf83af33c365c964fa2631eb Mon Sep 17 00:00:00 2001 From: radxp Date: Sat, 30 May 2026 19:17:04 +1000 Subject: [PATCH 02/11] feat: add install.sh for one-command installation Downloads latest release, removes any existing Neptune kernel packages, installs Charcoal kernel and headers, updates GRUB, and re-enables read-only filesystem. Usage: curl -L https://github.com/V10lator/linux-charcoal/raw/master/install.sh | bash --- install.sh | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100755 install.sh diff --git a/install.sh b/install.sh new file mode 100755 index 0000000..4292276 --- /dev/null +++ b/install.sh @@ -0,0 +1,44 @@ +#!/usr/bin/bash + +if [ "$EUID" -eq 0 ]; then + echo "Please do not run as root" + exit 1 +fi + +echo "Fetching latest Charcoal release..." +RELEASE_JSON=$(curl -s https://api.github.com/repos/V10lator/linux-charcoal/releases/latest) +PKG_URL=$(echo "$RELEASE_JSON" | grep "browser_download_url" | grep -v "headers" | grep "x86_64.pkg.tar.zst" | cut -d '"' -f 4) +HEADERS_URL=$(echo "$RELEASE_JSON" | grep "browser_download_url" | grep "headers" | grep "x86_64.pkg.tar.zst" | cut -d '"' -f 4) + +if [ -z "$PKG_URL" ] || [ -z "$HEADERS_URL" ]; then + echo "Failed to fetch release URLs" + exit 1 +fi + +echo "Downloading kernel..." +curl -L "$PKG_URL" -o /tmp/linux-charcoal.pkg.tar.zst + +echo "Downloading headers..." +curl -L "$HEADERS_URL" -o /tmp/linux-charcoal-headers.pkg.tar.zst + +echo "Disabling read-only filesystem..." +sudo steamos-readonly disable + +echo "Removing existing Neptune kernel..." +pacman -Qq 'linux-neptune*' 2>/dev/null | xargs -r sudo pacman -Rns --noconfirm + +echo "Installing Charcoal kernel..." +sudo pacman -U --noconfirm /tmp/linux-charcoal.pkg.tar.zst /tmp/linux-charcoal-headers.pkg.tar.zst + +echo "Updating GRUB..." +sudo grub-mkconfig -o /efi/EFI/steamos/grub.cfg + +echo "Re-enabling read-only filesystem..." +sudo steamos-readonly enable + +echo "Cleaning up..." +rm -f /tmp/linux-charcoal*.pkg.tar.zst + +echo "" +echo "Done! Reboot to use the Charcoal kernel." +echo "Verify after reboot with: uname -a" From 85394e5c30d9823cdb9efc2b315830338a8edd8a Mon Sep 17 00:00:00 2001 From: radxp Date: Sat, 30 May 2026 19:19:41 +1000 Subject: [PATCH 03/11] docs: add install.sh one-liner to README install section --- README.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c55286f..d1630d8 100644 --- a/README.md +++ b/README.md @@ -61,7 +61,13 @@ Charcoal is an optimized Linux kernel for Steam Deck, Asus ROG Ally, and other A ## Install -Download the [latest release](https://github.com/V10lator/linux-charcoal/releases/latest) and run the following on your device: +Run the following on your device to automatically download and install the latest release: + +```bash +curl -L https://github.com/V10lator/linux-charcoal/raw/master/install.sh | bash +``` + +Or manually download the [latest release](https://github.com/V10lator/linux-charcoal/releases/latest) and run: ```bash cd ~/Downloads From 3b328d070ce6a9783d0418732b0bf14a3adef1ee Mon Sep 17 00:00:00 2001 From: radxp Date: Sat, 30 May 2026 19:21:19 +1000 Subject: [PATCH 04/11] feat: add uninstall.sh for one-command uninstallation Detects the matching Neptune kernel from Charcoal's Replaces field, removes all Charcoal packages, reinstalls Neptune, updates GRUB, and re-enables the read-only filesystem. --- README.md | 8 +++++++- uninstall.sh | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) create mode 100755 uninstall.sh diff --git a/README.md b/README.md index d1630d8..15a80fc 100644 --- a/README.md +++ b/README.md @@ -93,7 +93,13 @@ You can also verify in Gaming Mode under **Settings → System**, where the kern ## Uninstall -To remove Charcoal and return to the stock Neptune kernel: +Run the following to automatically remove Charcoal and restore the Neptune kernel: + +```bash +curl -L https://github.com/V10lator/linux-charcoal/raw/master/uninstall.sh | bash +``` + +Or manually: ```bash sudo steamos-readonly disable diff --git a/uninstall.sh b/uninstall.sh new file mode 100755 index 0000000..6e98aca --- /dev/null +++ b/uninstall.sh @@ -0,0 +1,40 @@ +#!/usr/bin/bash + +if [ "$EUID" -eq 0 ]; then + echo "Please do not run as root" + exit 1 +fi + +if ! pacman -Qq 'linux-charcoal*' &>/dev/null; then + echo "Charcoal kernel is not installed" + exit 1 +fi + +echo "Detecting matching Neptune kernel..." +_neptune=$(pacman -Qi $(pacman -Qq 'linux-charcoal*' | grep -v headers | head -1) | awk '/^Replaces/{print $3}') + +if [ -z "$_neptune" ]; then + echo "Failed to detect matching Neptune kernel" + exit 1 +fi + +echo "Will reinstall: $_neptune" + +echo "Disabling read-only filesystem..." +sudo steamos-readonly disable + +echo "Removing Charcoal kernel..." +sudo pacman -Rsn --noconfirm $(pacman -Qq 'linux-charcoal*') + +echo "Reinstalling Neptune kernel..." +sudo pacman -S --noconfirm "$_neptune" + +echo "Updating GRUB..." +sudo grub-mkconfig -o /efi/EFI/steamos/grub.cfg + +echo "Re-enabling read-only filesystem..." +sudo steamos-readonly enable + +echo "" +echo "Done! Reboot to return to the Neptune kernel." +echo "Verify after reboot with: uname -a" From 039ce7fa03bf06a1411e1d8c152ea14230078a5d Mon Sep 17 00:00:00 2001 From: radxp Date: Sat, 30 May 2026 20:35:06 +1000 Subject: [PATCH 05/11] fix: use steamos-devmode enable and fix neptune glob detection MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Switch steamos-readonly disable to steamos-devmode enable — headers package pulls signed repo deps (llvm, clang, lld, polly) which require keyring initialisation - Fix neptune/charcoal package detection: pacman -Qq glob pattern unreliable, use pacman -Qq | grep '^linux-neptune' instead --- install.sh | 10 +++++----- uninstall.sh | 14 +++++++------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/install.sh b/install.sh index 4292276..e0d0002 100755 --- a/install.sh +++ b/install.sh @@ -21,11 +21,11 @@ curl -L "$PKG_URL" -o /tmp/linux-charcoal.pkg.tar.zst echo "Downloading headers..." curl -L "$HEADERS_URL" -o /tmp/linux-charcoal-headers.pkg.tar.zst -echo "Disabling read-only filesystem..." -sudo steamos-readonly disable +echo "Enabling dev mode (disables read-only filesystem and initialises keyring)..." +sudo steamos-devmode enable echo "Removing existing Neptune kernel..." -pacman -Qq 'linux-neptune*' 2>/dev/null | xargs -r sudo pacman -Rns --noconfirm +pacman -Qq 2>/dev/null | grep '^linux-neptune' | xargs -r sudo pacman -Rns --noconfirm echo "Installing Charcoal kernel..." sudo pacman -U --noconfirm /tmp/linux-charcoal.pkg.tar.zst /tmp/linux-charcoal-headers.pkg.tar.zst @@ -33,8 +33,8 @@ sudo pacman -U --noconfirm /tmp/linux-charcoal.pkg.tar.zst /tmp/linux-charcoal-h echo "Updating GRUB..." sudo grub-mkconfig -o /efi/EFI/steamos/grub.cfg -echo "Re-enabling read-only filesystem..." -sudo steamos-readonly enable +echo "Disabling dev mode..." +sudo steamos-devmode disable echo "Cleaning up..." rm -f /tmp/linux-charcoal*.pkg.tar.zst diff --git a/uninstall.sh b/uninstall.sh index 6e98aca..5e3d33e 100755 --- a/uninstall.sh +++ b/uninstall.sh @@ -5,13 +5,13 @@ if [ "$EUID" -eq 0 ]; then exit 1 fi -if ! pacman -Qq 'linux-charcoal*' &>/dev/null; then +if ! pacman -Qq | grep -q '^linux-charcoal'; then echo "Charcoal kernel is not installed" exit 1 fi echo "Detecting matching Neptune kernel..." -_neptune=$(pacman -Qi $(pacman -Qq 'linux-charcoal*' | grep -v headers | head -1) | awk '/^Replaces/{print $3}') +_neptune=$(pacman -Qi $(pacman -Qq | grep '^linux-charcoal' | grep -v headers | head -1) | awk '/^Replaces/{print $3}') if [ -z "$_neptune" ]; then echo "Failed to detect matching Neptune kernel" @@ -20,11 +20,11 @@ fi echo "Will reinstall: $_neptune" -echo "Disabling read-only filesystem..." -sudo steamos-readonly disable +echo "Enabling dev mode (disables read-only filesystem and initialises keyring)..." +sudo steamos-devmode enable echo "Removing Charcoal kernel..." -sudo pacman -Rsn --noconfirm $(pacman -Qq 'linux-charcoal*') +sudo pacman -Rsn --noconfirm $(pacman -Qq | grep '^linux-charcoal') echo "Reinstalling Neptune kernel..." sudo pacman -S --noconfirm "$_neptune" @@ -32,8 +32,8 @@ sudo pacman -S --noconfirm "$_neptune" echo "Updating GRUB..." sudo grub-mkconfig -o /efi/EFI/steamos/grub.cfg -echo "Re-enabling read-only filesystem..." -sudo steamos-readonly enable +echo "Disabling dev mode..." +sudo steamos-devmode disable echo "" echo "Done! Reboot to return to the Neptune kernel." From 577a3e072baf60b2cc612ca233915b329f434600 Mon Sep 17 00:00:00 2001 From: radxp Date: Sat, 30 May 2026 20:37:36 +1000 Subject: [PATCH 06/11] fix: add --no-prompt to steamos-devmode, fix re-enable command - steamos-devmode enable needs --no-prompt to run non-interactively - steamos-devmode disable does not exist; use steamos-readonly enable instead --- install.sh | 6 +++--- uninstall.sh | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/install.sh b/install.sh index e0d0002..a6e85b4 100755 --- a/install.sh +++ b/install.sh @@ -22,7 +22,7 @@ echo "Downloading headers..." curl -L "$HEADERS_URL" -o /tmp/linux-charcoal-headers.pkg.tar.zst echo "Enabling dev mode (disables read-only filesystem and initialises keyring)..." -sudo steamos-devmode enable +sudo steamos-devmode enable --no-prompt echo "Removing existing Neptune kernel..." pacman -Qq 2>/dev/null | grep '^linux-neptune' | xargs -r sudo pacman -Rns --noconfirm @@ -33,8 +33,8 @@ sudo pacman -U --noconfirm /tmp/linux-charcoal.pkg.tar.zst /tmp/linux-charcoal-h echo "Updating GRUB..." sudo grub-mkconfig -o /efi/EFI/steamos/grub.cfg -echo "Disabling dev mode..." -sudo steamos-devmode disable +echo "Re-enabling read-only filesystem..." +sudo steamos-readonly enable echo "Cleaning up..." rm -f /tmp/linux-charcoal*.pkg.tar.zst diff --git a/uninstall.sh b/uninstall.sh index 5e3d33e..3b4faf8 100755 --- a/uninstall.sh +++ b/uninstall.sh @@ -21,7 +21,7 @@ fi echo "Will reinstall: $_neptune" echo "Enabling dev mode (disables read-only filesystem and initialises keyring)..." -sudo steamos-devmode enable +sudo steamos-devmode enable --no-prompt echo "Removing Charcoal kernel..." sudo pacman -Rsn --noconfirm $(pacman -Qq | grep '^linux-charcoal') @@ -32,8 +32,8 @@ sudo pacman -S --noconfirm "$_neptune" echo "Updating GRUB..." sudo grub-mkconfig -o /efi/EFI/steamos/grub.cfg -echo "Disabling dev mode..." -sudo steamos-devmode disable +echo "Re-enabling read-only filesystem..." +sudo steamos-readonly enable echo "" echo "Done! Reboot to return to the Neptune kernel." From 90d301cd74358df4b9793ed126f16c71e2c004cc Mon Sep 17 00:00:00 2001 From: radxp Date: Sat, 30 May 2026 20:41:33 +1000 Subject: [PATCH 07/11] fix: remove steamos-readonly re-enable after install Dev mode stays on after install. SteamOS updates reset it anyway. --- install.sh | 3 --- 1 file changed, 3 deletions(-) diff --git a/install.sh b/install.sh index a6e85b4..cec3614 100755 --- a/install.sh +++ b/install.sh @@ -33,9 +33,6 @@ sudo pacman -U --noconfirm /tmp/linux-charcoal.pkg.tar.zst /tmp/linux-charcoal-h echo "Updating GRUB..." sudo grub-mkconfig -o /efi/EFI/steamos/grub.cfg -echo "Re-enabling read-only filesystem..." -sudo steamos-readonly enable - echo "Cleaning up..." rm -f /tmp/linux-charcoal*.pkg.tar.zst From 48feee38873e0da3312e1f8ae3af5a51c4b14953 Mon Sep 17 00:00:00 2001 From: radxp Date: Sat, 30 May 2026 20:49:58 +1000 Subject: [PATCH 08/11] fix: tested and working on ROG Ally RC71L - Confirmed steamos-devmode enable --no-prompt required (headers package pulls signed repo deps needing keyring init) - Fix package detection: use pacman -Qq | grep instead of glob - Remove steamos-readonly re-enable after install (devmode stays on, SteamOS updates reset it anyway) - Update README manual steps to match script behavior --- README.md | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 15a80fc..a222b75 100644 --- a/README.md +++ b/README.md @@ -71,9 +71,10 @@ Or manually download the [latest release](https://github.com/V10lator/linux-char ```bash cd ~/Downloads -sudo steamos-readonly disable -sudo pacman -U linux-charcoal-*-x86_64.pkg.tar.zst # Confirm when asked to remove linux-neptune-* -sudo steamos-readonly enable +sudo steamos-devmode enable --no-prompt +pacman -Qq | grep '^linux-neptune' | xargs -r sudo pacman -Rns --noconfirm +sudo pacman -U linux-charcoal-*-x86_64.pkg.tar.zst +sudo grub-mkconfig -o /efi/EFI/steamos/grub.cfg rm linux-charcoal* ``` @@ -102,11 +103,11 @@ curl -L https://github.com/V10lator/linux-charcoal/raw/master/uninstall.sh | bas Or manually: ```bash -sudo steamos-readonly disable -_neptune=$(pacman -Qi $(pacman -Qq 'linux-charcoal*') | awk '/^Replaces/{print $3}') -sudo pacman -Rsn $(pacman -Qq 'linux-charcoal*') +sudo steamos-devmode enable --no-prompt +_neptune=$(pacman -Qi $(pacman -Qq | grep '^linux-charcoal' | grep -v headers | head -1) | awk '/^Replaces/{print $3}') +sudo pacman -Rsn $(pacman -Qq | grep '^linux-charcoal') sudo pacman -S "$_neptune" -sudo steamos-readonly enable +sudo grub-mkconfig -o /efi/EFI/steamos/grub.cfg ``` Then reboot. From 05ede6c419f8004109aa8d9a74f8b7fee58c854f Mon Sep 17 00:00:00 2001 From: radxp Date: Sat, 30 May 2026 20:57:37 +1000 Subject: [PATCH 09/11] fix: save original neptune for correct restore, add install fallback - Save originally installed neptune package name to /etc/charcoal-original-neptune during install so uninstall can restore the exact version the user had - Add error handling in install: if charcoal install fails, automatically reinstall the saved neptune and exit cleanly - Uninstall falls back to Replaces field if save file not present --- install.sh | 13 +++++++++++-- uninstall.sh | 18 +++++++++++------- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/install.sh b/install.sh index cec3614..a4687a9 100755 --- a/install.sh +++ b/install.sh @@ -25,10 +25,19 @@ echo "Enabling dev mode (disables read-only filesystem and initialises keyring). sudo steamos-devmode enable --no-prompt echo "Removing existing Neptune kernel..." -pacman -Qq 2>/dev/null | grep '^linux-neptune' | xargs -r sudo pacman -Rns --noconfirm +_original_neptune=$(pacman -Qq | grep '^linux-neptune' | grep -v headers | head -1) +pacman -Qq | grep '^linux-neptune' | xargs -r sudo pacman -Rns --noconfirm echo "Installing Charcoal kernel..." -sudo pacman -U --noconfirm /tmp/linux-charcoal.pkg.tar.zst /tmp/linux-charcoal-headers.pkg.tar.zst +if ! sudo pacman -U --noconfirm /tmp/linux-charcoal.pkg.tar.zst /tmp/linux-charcoal-headers.pkg.tar.zst; then + echo "Install failed — restoring original Neptune kernel..." + sudo pacman -S --noconfirm "$_original_neptune" + rm -f /tmp/linux-charcoal*.pkg.tar.zst + exit 1 +fi + +# Save original neptune for uninstall script to restore correctly +echo "$_original_neptune" | sudo tee /etc/charcoal-original-neptune > /dev/null echo "Updating GRUB..." sudo grub-mkconfig -o /efi/EFI/steamos/grub.cfg diff --git a/uninstall.sh b/uninstall.sh index 3b4faf8..2d137c9 100755 --- a/uninstall.sh +++ b/uninstall.sh @@ -10,16 +10,21 @@ if ! pacman -Qq | grep -q '^linux-charcoal'; then exit 1 fi -echo "Detecting matching Neptune kernel..." -_neptune=$(pacman -Qi $(pacman -Qq | grep '^linux-charcoal' | grep -v headers | head -1) | awk '/^Replaces/{print $3}') +# Use the originally installed neptune saved during install if available, +# otherwise fall back to the series from Charcoal's Replaces field +if [ -f /etc/charcoal-original-neptune ]; then + _neptune=$(cat /etc/charcoal-original-neptune) + echo "Restoring originally installed Neptune kernel: $_neptune" +else + _neptune=$(pacman -Qi $(pacman -Qq | grep '^linux-charcoal' | grep -v headers | head -1) | awk '/^Replaces/{print $3}') + echo "Will reinstall: $_neptune (original not recorded, using Charcoal's Replaces field)" +fi if [ -z "$_neptune" ]; then - echo "Failed to detect matching Neptune kernel" + echo "Failed to detect Neptune kernel to restore" exit 1 fi -echo "Will reinstall: $_neptune" - echo "Enabling dev mode (disables read-only filesystem and initialises keyring)..." sudo steamos-devmode enable --no-prompt @@ -32,8 +37,7 @@ sudo pacman -S --noconfirm "$_neptune" echo "Updating GRUB..." sudo grub-mkconfig -o /efi/EFI/steamos/grub.cfg -echo "Re-enabling read-only filesystem..." -sudo steamos-readonly enable +sudo rm -f /etc/charcoal-original-neptune echo "" echo "Done! Reboot to return to the Neptune kernel." From 29b2f3b0a3841c4370c155ae421ed7e054d16cc5 Mon Sep 17 00:00:00 2001 From: radxp Date: Sat, 30 May 2026 20:59:42 +1000 Subject: [PATCH 10/11] fix: correct neptune extraction from Replaces field awk '/^Replaces/{print $3}' grabbed wrong package (virtualbox-guest-modules-arch). Use grep + tr to extract linux-neptune specifically from the Replaces line. --- uninstall.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uninstall.sh b/uninstall.sh index 2d137c9..73a5179 100755 --- a/uninstall.sh +++ b/uninstall.sh @@ -16,7 +16,7 @@ if [ -f /etc/charcoal-original-neptune ]; then _neptune=$(cat /etc/charcoal-original-neptune) echo "Restoring originally installed Neptune kernel: $_neptune" else - _neptune=$(pacman -Qi $(pacman -Qq | grep '^linux-charcoal' | grep -v headers | head -1) | awk '/^Replaces/{print $3}') + _neptune=$(pacman -Qi $(pacman -Qq | grep '^linux-charcoal' | grep -v headers | head -1) | grep '^Replaces' | tr ' ' '\n' | grep '^linux-neptune' | head -1) echo "Will reinstall: $_neptune (original not recorded, using Charcoal's Replaces field)" fi From d8de0309893cb6e469719f2df9858bda6506bc2e Mon Sep 17 00:00:00 2001 From: radxp Date: Sat, 30 May 2026 21:14:13 +1000 Subject: [PATCH 11/11] fix: correct neptune extraction in README manual uninstall steps --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a222b75..ba02c3b 100644 --- a/README.md +++ b/README.md @@ -104,7 +104,7 @@ Or manually: ```bash sudo steamos-devmode enable --no-prompt -_neptune=$(pacman -Qi $(pacman -Qq | grep '^linux-charcoal' | grep -v headers | head -1) | awk '/^Replaces/{print $3}') +_neptune=$(pacman -Qi $(pacman -Qq | grep '^linux-charcoal' | grep -v headers | head -1) | grep '^Replaces' | tr ' ' '\n' | grep '^linux-neptune' | head -1) sudo pacman -Rsn $(pacman -Qq | grep '^linux-charcoal') sudo pacman -S "$_neptune" sudo grub-mkconfig -o /efi/EFI/steamos/grub.cfg