Files
nix-config/packages/linux-cachyos/update.nix
2025-12-10 09:30:35 -06:00

117 lines
3.5 KiB
Nix

{
writeShellScript,
lib,
coreutils,
findutils,
gnugrep,
gnused,
curl,
jq,
git,
nix,
nix-prefetch-git,
moreutils,
withUpdateScript,
}:
let
path = lib.makeBinPath [
coreutils
curl
findutils
gnugrep
gnused
jq
moreutils
git
nix-prefetch-git
nix
];
releaseSrcUrl = "https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-\${latestVer%.0}.tar.xz";
major =
if withUpdateScript == "stable" then
{
versionsFile = "versions.json";
suffix = "";
flavors = [
"-gcc"
"-lto"
"-server"
];
srcUrl = releaseSrcUrl;
}
else if withUpdateScript == "rc" then
{
versionsFile = "versions-rc.json";
suffix = "-rc";
flavors = [ "-rc" ];
srcUrl = "https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/snapshot/linux-\${latestVer%.0}.tar.gz";
}
else if withUpdateScript == "hardened" then
{
versionsFile = "versions-hardened.json";
suffix = "-hardened";
flavors = [ "-hardened" ];
srcUrl = releaseSrcUrl;
}
else if withUpdateScript == "lts" then
{
versionsFile = "versions-lts.json";
suffix = "-lts";
flavors = [ "-lts" ];
srcUrl = releaseSrcUrl;
}
else
throw "Unsupported update-script for linux-cachyos";
in
with major;
writeShellScript "update-cachyos" ''
set -euo pipefail
PATH=${path}
srcJson=/etc/nixos/packages/linux-cachyos/${versionsFile}
localVer=$(jq -r .linux.version < $srcJson)
latestVer=$(curl 'https://raw.githubusercontent.com/CachyOS/linux-cachyos/master/linux-cachyos${suffix}/.SRCINFO' | grep -Po '(?<=pkgver = )(.+)$' | sed 's/\.rc/-rc/')
if [ "$localVer" == "$latestVer" ]; then
exit 0
fi
latestSha256=$(nix-prefetch-url --type sha256 "${srcUrl}")
latestHash=$(nix-hash --to-sri --type sha256 $latestSha256)
configRepo=$(nix-prefetch-git --quiet 'https://github.com/CachyOS/linux-cachyos.git')
configRev=$(echo "$configRepo" | jq -r .rev)
configHash=$(echo "$configRepo" | jq -r .hash)
configPath=$(echo "$configRepo" | jq -r .path)
patchesRepo=$(nix-prefetch-git --quiet 'https://github.com/CachyOS/kernel-patches.git')
patchesRev=$(echo "$patchesRepo" | jq -r .rev)
patchesHash=$(echo "$patchesRepo" | jq -r .hash)
zfsRev=$(grep -Po '(?<=zfs.git#commit=)([^"]+)' $configPath/linux-cachyos${suffix}/PKGBUILD)
zfsRepo=$(nix-prefetch-git --quiet 'https://github.com/CachyOS/zfs.git' --rev $zfsRev)
zfsHash=$(echo "$zfsRepo" | jq -r .hash)
jq \
--arg latestVer "$latestVer" --arg latestHash "$latestHash" \
--arg configRev "$configRev" --arg configHash "$configHash" \
--arg patchesRev "$patchesRev" --arg patchesHash "$patchesHash" \
--arg zfsRev "$zfsRev" --arg zfsHash "$zfsHash" \
".linux.version = \$latestVer | .linux.hash = \$latestHash |\
.config.rev = \$configRev | .config.hash = \$configHash |\
.patches.rev = \$patchesRev | .patches.hash = \$patchesHash |\
.zfs.rev = \$zfsRev | .zfs.hash = \$zfsHash" \
"$srcJson" | sponge "$srcJson"
${lib.strings.concatMapStrings (flavor: ''
cat "$(nix build '.#legacyPackages.x86_64-linux.linuxPackages_cachyos${flavor}.kernel.kconfigToNix' --no-link --print-out-paths)" \
> /etc/nixos/packages/linux-cachyos/config-nix/cachyos${flavor}.x86_64-linux.nix || true
'') flavors}
git add /etc/nixos/packages/linux-cachyos
git commit -m "linux_cachyos${suffix}: $localVer -> $latestVer"
''