diff --git a/update-scripts/version-info/default.nix b/update-scripts/version-info/default.nix index c7f15aea..94fdd92c 100644 --- a/update-scripts/version-info/default.nix +++ b/update-scripts/version-info/default.nix @@ -2,19 +2,41 @@ lib, callPackage, writeShellApplication, + stdenv, }: let mainInfo = callPackage ./main.nix { }; + channelsURL = "https://raw.githubusercontent.com/NixOS/infra/refs/heads/main/channels.nix"; in writeShellApplication { name = "version-info"; + + runtimeEnv = { + NIX_CONFIG = '' + experimental-features = nix-command flakes pipe-operators + ''; + }; + text = '' + # Download channel info from NixOS/infra + curl ${channelsURL} | nix eval --file - --json > channels.json + + # Use channels.nix to build channels.toml + nix build --impure \ + --inputs-from ${toString ../..} \ + --file ${./supported-versions.nix} \ + --argstr system ${stdenv.hostPlatform.system} \ + --arg-from-file channelsJSON channels.json \ + --out-link channels.toml + ( echo "# DO NOT MODIFY!" echo "# This file was generated by ${ lib.strings.removePrefix (toString ../.. + "/") (toString ./default.nix) }" cat ${mainInfo} + echo + cat channels.toml ) > version-info.toml ''; } diff --git a/update-scripts/version-info/supported-versions.nix b/update-scripts/version-info/supported-versions.nix new file mode 100644 index 00000000..73c7a4d4 --- /dev/null +++ b/update-scripts/version-info/supported-versions.nix @@ -0,0 +1,62 @@ +{ + system ? builtins.currentSystem, + pkgs ? import { inherit system; }, + lib ? import , + channelsJSON ? throw "Neither `channels` or `channelsJSON` provided", + channels ? builtins.fromJSON channelsJSON, +}: +let + # Pick out supported stable channels + supported = [ + "beta" + "stable" + "deprecated" + ]; + + stable_versions = + channels.channels + |> builtins.mapAttrs (channel: entry: entry // { inherit channel; }) + |> builtins.attrValues + |> builtins.filter (entry: entry.variant or null == "primary") + |> builtins.filter (entry: builtins.elem entry.status supported) + |> builtins.map (entry: { + name = entry.channel |> builtins.match "nixos-(.+)" |> builtins.head; + value = { + inherit (entry) channel status; + # Currently, Nixvim stable branches match NixOS channel names + branch = entry.channel; + }; + }) + |> builtins.listToAttrs; + + newest_stable = + stable_versions |> builtins.attrNames |> builtins.sort (a: b: a > b) |> builtins.head; + + bumpYear = y: toString (lib.toIntBase10 y + 1); + bumpMonth = + m: + assert m == "05" || m == "11"; + if m == "05" then "11" else "05"; + + unstable = + newest_stable + |> builtins.match "(.+)[.](.+)" + |> (v: { + y = builtins.elemAt v 0; + m = builtins.elemAt v 1; + }) + |> (v: { + y = if v.m == "11" then bumpYear v.y else v.y; + m = bumpMonth v.m; + }) + |> (v: "${v.y}.${v.m}"); +in +pkgs.writers.writeTOML "channels.toml" { + versions = stable_versions // { + ${unstable} = { + branch = "main"; + channel = "nixpkgs-unstable"; + status = "rolling"; + }; + }; +} diff --git a/version-info.toml b/version-info.toml index 965a0002..3185ca36 100644 --- a/version-info.toml +++ b/version-info.toml @@ -3,3 +3,18 @@ nixpkgs_rev = "7282cb574e0607e65224d33be8241eae7cfe0979" release = "25.05" unstable = false + +[versions."24.11"] +branch = "nixos-24.11" +channel = "nixos-24.11" +status = "deprecated" + +[versions."25.05"] +branch = "nixos-25.05" +channel = "nixos-25.05" +status = "stable" + +[versions."25.11"] +branch = "main" +channel = "nixpkgs-unstable" +status = "rolling"