From a3da9122076ae33d52828d1e6c4a2595378f0ca2 Mon Sep 17 00:00:00 2001 From: Lan Tian Date: Sun, 1 Mar 2026 19:30:11 -0800 Subject: [PATCH] Use prepatched kernel source code from github.com/CachyOS/linux/releases --- .github/workflows/auto-update.yml | 1 + flake.nix | 43 +++++++++------- kernel-cachyos/default.nix | 83 ++++++++++++++++-------------- kernel-cachyos/mkCachyKernel.nix | 3 +- kernel-cachyos/update.py | 84 +++++++++++++++++++++++++++++++ kernel-cachyos/version.json | 17 +++++++ 6 files changed, 172 insertions(+), 59 deletions(-) create mode 100644 kernel-cachyos/update.py create mode 100644 kernel-cachyos/version.json diff --git a/.github/workflows/auto-update.yml b/.github/workflows/auto-update.yml index 01c6e59..8cd83c0 100644 --- a/.github/workflows/auto-update.yml +++ b/.github/workflows/auto-update.yml @@ -66,6 +66,7 @@ jobs: run: | export TMPDIR=/nix/tmpdir nix flake update + nix run .#update-kernel-cachyos nix run .#update-zfs-cachyos - name: Commit back to repository diff --git a/flake.nix b/flake.nix index f22a76c..cffe8d8 100644 --- a/flake.nix +++ b/flake.nix @@ -80,24 +80,31 @@ # Packages only contain linux-cachyos-* due to Flake schema requirements packages = lib.filterAttrs (_: lib.isDerivation) legacyPackages; - apps.update-zfs-cachyos = { - type = "app"; - program = - let - python = pkgs.python3.withPackages (ps: [ ps.requests ]); - script = pkgs.writeShellApplication { - name = "update-zfs-cachyos"; - runtimeInputs = [ - python - pkgs.nix-prefetch-git - ]; - text = '' - python3 ${./zfs-cachyos/update.py} - ''; - }; - in - lib.getExe script; - }; + apps = + let + mkApp = name: script: { + type = "app"; + program = + let + python = pkgs.python3.withPackages (ps: [ ps.requests ]); + app = pkgs.writeShellApplication { + inherit name; + runtimeInputs = [ + python + pkgs.nix-prefetch-git + ]; + text = '' + python3 ${script} + ''; + }; + in + lib.getExe app; + }; + in + { + update-kernel-cachyos = mkApp "update-lernel-cachyos" ./kernel-cachyos/update.py; + update-zfs-cachyos = mkApp "update-zfs-cachyos" ./zfs-cachyos/update.py; + }; # Allow build unfree modules such as nvidia_x11 _module.args.pkgs = lib.mkForce ( diff --git a/kernel-cachyos/default.nix b/kernel-cachyos/default.nix index db4921a..9486452 100644 --- a/kernel-cachyos/default.nix +++ b/kernel-cachyos/default.nix @@ -2,76 +2,81 @@ inputs, callPackage, lib, - linux_latest, - linux_testing, - linux, + fetchurl, ... }: let mkCachyKernel = callPackage ./mkCachyKernel.nix { inherit inputs; }; + + linuxSources = lib.mapAttrs (_: v: { + inherit (v) version; + src = fetchurl { + inherit (v) url hash; + }; + }) (lib.importJSON ./version.json); in builtins.listToAttrs ( builtins.map (v: lib.nameValuePair v.pname v) [ # Latest kernel, provide all LTO/CPU arch variants (mkCachyKernel { pname = "linux-cachyos-latest"; - inherit (linux_latest) version src; + inherit (linuxSources.latest) version src; configVariant = "linux-cachyos"; }) (mkCachyKernel { pname = "linux-cachyos-latest-x86_64-v2"; - inherit (linux_latest) version src; + inherit (linuxSources.latest) version src; configVariant = "linux-cachyos"; processorOpt = "x86_64-v2"; }) (mkCachyKernel { pname = "linux-cachyos-latest-x86_64-v3"; - inherit (linux_latest) version src; + inherit (linuxSources.latest) version src; configVariant = "linux-cachyos"; processorOpt = "x86_64-v3"; }) (mkCachyKernel { pname = "linux-cachyos-latest-x86_64-v4"; - inherit (linux_latest) version src; + inherit (linuxSources.latest) version src; configVariant = "linux-cachyos"; processorOpt = "x86_64-v4"; }) (mkCachyKernel { pname = "linux-cachyos-latest-zen4"; - inherit (linux_latest) version src; + inherit (linuxSources.latest) version src; configVariant = "linux-cachyos"; processorOpt = "zen4"; }) (mkCachyKernel { pname = "linux-cachyos-latest-lto"; - inherit (linux_latest) version src; + inherit (linuxSources.latest) version src; configVariant = "linux-cachyos"; lto = "thin"; }) (mkCachyKernel { pname = "linux-cachyos-latest-lto-x86_64-v2"; - inherit (linux_latest) version src; + inherit (linuxSources.latest) version src; configVariant = "linux-cachyos"; lto = "thin"; processorOpt = "x86_64-v2"; }) (mkCachyKernel { pname = "linux-cachyos-latest-lto-x86_64-v3"; - inherit (linux_latest) version src; + inherit (linuxSources.latest) version src; configVariant = "linux-cachyos"; lto = "thin"; processorOpt = "x86_64-v3"; }) (mkCachyKernel { pname = "linux-cachyos-latest-lto-x86_64-v4"; - inherit (linux_latest) version src; + inherit (linuxSources.latest) version src; configVariant = "linux-cachyos"; lto = "thin"; processorOpt = "x86_64-v4"; }) (mkCachyKernel { pname = "linux-cachyos-latest-lto-zen4"; - inherit (linux_latest) version src; + inherit (linuxSources.latest) version src; configVariant = "linux-cachyos"; lto = "thin"; processorOpt = "zen4"; @@ -80,63 +85,63 @@ builtins.listToAttrs ( # LTS kernel (mkCachyKernel { pname = "linux-cachyos-lts"; - inherit (linux) version src; + inherit (linuxSources.lts) version src; configVariant = "linux-cachyos-lts"; }) (mkCachyKernel { pname = "linux-cachyos-lts-x86_64-v2"; - inherit (linux) version src; + inherit (linuxSources.lts) version src; configVariant = "linux-cachyos-lts"; processorOpt = "x86_64-v2"; }) (mkCachyKernel { pname = "linux-cachyos-lts-x86_64-v3"; - inherit (linux) version src; + inherit (linuxSources.lts) version src; configVariant = "linux-cachyos-lts"; processorOpt = "x86_64-v3"; }) (mkCachyKernel { pname = "linux-cachyos-lts-x86_64-v4"; - inherit (linux) version src; + inherit (linuxSources.lts) version src; configVariant = "linux-cachyos-lts"; processorOpt = "x86_64-v4"; }) (mkCachyKernel { pname = "linux-cachyos-lts-zen4"; - inherit (linux) version src; + inherit (linuxSources.lts) version src; configVariant = "linux-cachyos-lts"; processorOpt = "zen4"; }) (mkCachyKernel { pname = "linux-cachyos-lts-lto"; - inherit (linux) version src; + inherit (linuxSources.lts) version src; configVariant = "linux-cachyos-lts"; lto = "thin"; }) (mkCachyKernel { pname = "linux-cachyos-lts-lto-x86_64-v2"; - inherit (linux) version src; + inherit (linuxSources.lts) version src; configVariant = "linux-cachyos-lts"; lto = "thin"; processorOpt = "x86_64-v2"; }) (mkCachyKernel { pname = "linux-cachyos-lts-lto-x86_64-v3"; - inherit (linux) version src; + inherit (linuxSources.lts) version src; configVariant = "linux-cachyos-lts"; lto = "thin"; processorOpt = "x86_64-v3"; }) (mkCachyKernel { pname = "linux-cachyos-lts-lto-x86_64-v4"; - inherit (linux) version src; + inherit (linuxSources.lts) version src; configVariant = "linux-cachyos-lts"; lto = "thin"; processorOpt = "x86_64-v4"; }) (mkCachyKernel { pname = "linux-cachyos-lts-lto-zen4"; - inherit (linux) version src; + inherit (linuxSources.lts) version src; configVariant = "linux-cachyos-lts"; lto = "thin"; processorOpt = "zen4"; @@ -145,40 +150,40 @@ builtins.listToAttrs ( # Additional CachyOS provided variants (mkCachyKernel { pname = "linux-cachyos-bmq"; - inherit (linux_latest) version src; + inherit (linuxSources.latest) version src; configVariant = "linux-cachyos-bmq"; cpusched = "bmq"; }) (mkCachyKernel { pname = "linux-cachyos-bmq-lto"; - inherit (linux_latest) version src; + inherit (linuxSources.latest) version src; configVariant = "linux-cachyos-bmq"; lto = "thin"; cpusched = "bmq"; }) (mkCachyKernel { pname = "linux-cachyos-bore"; - inherit (linux_latest) version src; + inherit (linuxSources.latest) version src; configVariant = "linux-cachyos-bore"; cpusched = "bore"; }) (mkCachyKernel { pname = "linux-cachyos-bore-lto"; - inherit (linux_latest) version src; + inherit (linuxSources.latest) version src; configVariant = "linux-cachyos-bore"; lto = "thin"; cpusched = "bore"; }) (mkCachyKernel { pname = "linux-cachyos-deckify"; - inherit (linux_latest) version src; + inherit (linuxSources.latest) version src; configVariant = "linux-cachyos-deckify"; acpiCall = true; handheld = true; }) (mkCachyKernel { pname = "linux-cachyos-deckify-lto"; - inherit (linux_latest) version src; + inherit (linuxSources.latest) version src; configVariant = "linux-cachyos-deckify"; lto = "thin"; acpiCall = true; @@ -186,51 +191,51 @@ builtins.listToAttrs ( }) (mkCachyKernel { pname = "linux-cachyos-eevdf"; - inherit (linux_latest) version src; + inherit (linuxSources.latest) version src; configVariant = "linux-cachyos-eevdf"; cpusched = "eevdf"; }) (mkCachyKernel { pname = "linux-cachyos-eevdf-lto"; - inherit (linux_latest) version src; + inherit (linuxSources.latest) version src; configVariant = "linux-cachyos-eevdf"; cpusched = "eevdf"; lto = "thin"; }) (mkCachyKernel { pname = "linux-cachyos-hardened"; - inherit (linux_latest) version src; + inherit (linuxSources.latest) version src; configVariant = "linux-cachyos-hardened"; hardened = true; }) (mkCachyKernel { pname = "linux-cachyos-hardened-lto"; - inherit (linux_latest) version src; + inherit (linuxSources.latest) version src; configVariant = "linux-cachyos-hardened"; hardened = true; lto = "thin"; }) (mkCachyKernel { pname = "linux-cachyos-rc"; - inherit (linux_testing) version src; + inherit (linuxSources.rc) version src; configVariant = "linux-cachyos-rc"; }) (mkCachyKernel { pname = "linux-cachyos-rc-lto"; - inherit (linux_testing) version src; + inherit (linuxSources.rc) version src; configVariant = "linux-cachyos-rc"; lto = "thin"; }) (mkCachyKernel { pname = "linux-cachyos-rt-bore"; - inherit (linux_latest) version src; + inherit (linuxSources.latest) version src; configVariant = "linux-cachyos-rt-bore"; rt = true; cpusched = "bore"; }) (mkCachyKernel { pname = "linux-cachyos-rt-bore-lto"; - inherit (linux_latest) version src; + inherit (linuxSources.latest) version src; configVariant = "linux-cachyos-rt-bore"; rt = true; cpusched = "bore"; @@ -238,7 +243,7 @@ builtins.listToAttrs ( }) (mkCachyKernel { pname = "linux-cachyos-server"; - inherit (linux_latest) version src; + inherit (linuxSources.latest) version src; configVariant = "linux-cachyos-server"; cpusched = "eevdf"; hzTicks = "300"; @@ -246,7 +251,7 @@ builtins.listToAttrs ( }) (mkCachyKernel { pname = "linux-cachyos-server-lto"; - inherit (linux_latest) version src; + inherit (linuxSources.latest) version src; configVariant = "linux-cachyos-server"; cpusched = "eevdf"; hzTicks = "300"; diff --git a/kernel-cachyos/mkCachyKernel.nix b/kernel-cachyos/mkCachyKernel.nix index c401850..5989b2c 100644 --- a/kernel-cachyos/mkCachyKernel.nix +++ b/kernel-cachyos/mkCachyKernel.nix @@ -83,8 +83,7 @@ lib.makeOverridable ( cachyosConfigFile = "${inputs.cachyos-kernel.outPath}/${configVariant}/config"; cachyosPatches = builtins.map (p: "${inputs.cachyos-kernel-patches.outPath}/${patchVersion}/${p}") ( - [ "all/0001-cachyos-base-all.patch" ] - ++ (lib.optional (cpusched == "bore") "sched/0001-bore-cachy.patch") + (lib.optional (cpusched == "bore") "sched/0001-bore-cachy.patch") ++ (lib.optional (cpusched == "bmq") "sched/0001-prjc-cachy.patch") ++ (lib.optional hardened "misc/0001-hardened.patch") ++ (lib.optional rt "misc/0001-rt-i915.patch") diff --git a/kernel-cachyos/update.py b/kernel-cachyos/update.py new file mode 100644 index 0000000..1fdccb3 --- /dev/null +++ b/kernel-cachyos/update.py @@ -0,0 +1,84 @@ +import json +from pathlib import Path +import re +import subprocess + +import requests + + +def get_srctag(variant: str = "latest") -> str: + pkgbuild_path = f"linux-cachyos-{variant}" if variant != "latest" else "linux-cachyos" + url = f"https://github.com/CachyOS/linux-cachyos/raw/refs/heads/master/{pkgbuild_path}/PKGBUILD" + pkgbuild = requests.get(url).text + + script = pkgbuild + "\necho $_srctag" + result = subprocess.run( + ["bash"], + input=script, + capture_output=True, + text=True, + check=True, + ) + return result.stdout.strip() + + +def nix_sha256_to_sri(hash: str) -> str: + cmd = ["nix", "hash", "convert", "--hash-algo", "sha256", "--to", "sri", hash] + + print(f"Running command: {' '.join(cmd)}") + result = subprocess.run(cmd, capture_output=True, text=True, timeout=300) + + if result.returncode != 0: + raise RuntimeError(f"nix hash command failed with return code: {result.returncode}") + + output = result.stdout.strip() + if not output: + raise RuntimeError("nix hash output is empty") + + return output + + +def run_nix_prefetch_url(url: str) -> str: + cmd = ["nix-prefetch-url", url] + + print(f"Running command: {' '.join(cmd)}") + result = subprocess.run(cmd, capture_output=True, text=True, timeout=300) + + if result.returncode != 0: + raise RuntimeError(f"nix-prefetch-url command failed with return code: {result.returncode}") + + output = result.stdout.strip() + if not output: + raise RuntimeError("nix-prefetch-url output is empty") + + return output + + +if __name__ == "__main__": + versions = {} + for variant in ["latest", "lts", "rc"]: + print(f"{variant=}") + srctag = get_srctag(variant) + real_version = "-".join(srctag.split("-")[1:-1]) + print(f"{srctag=} {real_version=}") + + url = f"https://github.com/CachyOS/linux/releases/download/{srctag}/{srctag}.tar.gz" + print(f"{url=}") + hash = run_nix_prefetch_url(url) + hash = nix_sha256_to_sri(hash) + print(f"{hash=}") + versions[variant] = { + "version": real_version, + "url": url, + "hash": hash, + } + + current = Path.cwd() + while not (current / "flake.lock").exists(): + if current == current.parent: + raise RuntimeError("Could not find flake.lock in any parent directory, exiting") + current = current.parent + + output_file = current / "kernel-cachyos" / "version.json" + with open(output_file, "w", encoding="utf-8") as f: + json.dump(versions, f, indent=2) diff --git a/kernel-cachyos/version.json b/kernel-cachyos/version.json new file mode 100644 index 0000000..172e077 --- /dev/null +++ b/kernel-cachyos/version.json @@ -0,0 +1,17 @@ +{ + "latest": { + "version": "6.19.5", + "url": "https://github.com/CachyOS/linux/releases/download/cachyos-6.19.5-2/cachyos-6.19.5-2.tar.gz", + "hash": "sha256-KgOZl6MTmH4IvuopKArhK2fMzM1E+4zOeq9HeWUPmYY=" + }, + "lts": { + "version": "6.18.15", + "url": "https://github.com/CachyOS/linux/releases/download/cachyos-6.18.15-2/cachyos-6.18.15-2.tar.gz", + "hash": "sha256-WpGH+tHh6vipOwqg1ZupEL40KF9FliYVwuOiykEj0Gc=" + }, + "rc": { + "version": "7.0-rc1", + "url": "https://github.com/CachyOS/linux/releases/download/cachyos-7.0-rc1-2/cachyos-7.0-rc1-2.tar.gz", + "hash": "sha256-BxeMq0M0C98Wcc9d+GxYVzPNdw6hK4kmj+xW9Ck3mgg=" + } +} \ No newline at end of file