├── examples ├── action-minimal.png ├── action-flakes-simple.png └── flakes-simple │ ├── flake.nix │ ├── hello.patch │ └── flake.lock ├── RELEASE ├── .github └── workflows │ ├── examples.yml │ └── cicd.yml ├── vercomp.sh ├── action.yml ├── nix-quick-install.sh ├── flake.nix ├── README.md ├── LICENSE └── flake.lock /examples/action-minimal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nixbuild/nix-quick-install-action/HEAD/examples/action-minimal.png -------------------------------------------------------------------------------- /examples/action-flakes-simple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nixbuild/nix-quick-install-action/HEAD/examples/action-flakes-simple.png -------------------------------------------------------------------------------- /RELEASE: -------------------------------------------------------------------------------- 1 | v34 2 | 3 | ## Changes 4 | 5 | * Update Nix versions: 2.31.0 -> 2.31.2, 2.30.0 -> 2.30.3, 2.29.1 -> 2.29.2, 2.28.4 -> 2.28.5. 6 | 7 | * Bump default Nix version: 2.29.1 -> 2.29.2 8 | -------------------------------------------------------------------------------- /examples/flakes-simple/flake.nix: -------------------------------------------------------------------------------- 1 | { 2 | inputs = { 3 | nixpkgs.url = "nixpkgs/release-20.03"; 4 | }; 5 | 6 | outputs = { self, nixpkgs }: { 7 | 8 | defaultPackage.x86_64-linux = 9 | nixpkgs.legacyPackages.x86_64-linux.hello.overrideDerivation (drv: { 10 | patches = (drv.patches or []) ++ [ ./hello.patch ]; 11 | doCheck = false; 12 | }); 13 | 14 | }; 15 | 16 | nixConfig = { 17 | allow-import-from-derivation = "true"; 18 | }; 19 | 20 | } 21 | -------------------------------------------------------------------------------- /examples/flakes-simple/hello.patch: -------------------------------------------------------------------------------- 1 | diff -ru hello-2.10/src/hello.c hello-2.10_p/src/hello.c 2 | --- hello-2.10/src/hello.c 2014-07-19 18:53:25.000000000 +0200 3 | +++ hello-2.10_p/src/hello.c 2020-09-18 17:02:55.021880337 +0200 4 | @@ -57,7 +57,7 @@ 5 | #endif 6 | 7 | /* Having initialized gettext, get the default message. */ 8 | - greeting_msg = _("Hello, world!"); 9 | + greeting_msg = _("Hello, Nix world!"); 10 | 11 | /* Even exiting has subtleties. On exit, if any writes failed, change 12 | the exit status. The /dev/full device on GNU/Linux can be used for 13 | -------------------------------------------------------------------------------- /.github/workflows/examples.yml: -------------------------------------------------------------------------------- 1 | name: Examples 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | 8 | jobs: 9 | minimal: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - uses: nixbuild/nix-quick-install-action@v34 13 | - run: nix-build --version 14 | 15 | flakes-simple: 16 | runs-on: ubuntu-latest 17 | steps: 18 | - uses: actions/checkout@v4 19 | - uses: nixbuild/nix-quick-install-action@v34 20 | - name: nix build 21 | run: nix build ./examples/flakes-simple 22 | - name: hello 23 | run: ./result/bin/hello 24 | -------------------------------------------------------------------------------- /examples/flakes-simple/flake.lock: -------------------------------------------------------------------------------- 1 | { 2 | "nodes": { 3 | "nixpkgs": { 4 | "locked": { 5 | "lastModified": 1600351140, 6 | "narHash": "sha256-1mnNrYEi3zNPO4YUNso2v+xkDSWv8miX3XEyTmL37uk=", 7 | "owner": "NixOS", 8 | "repo": "nixpkgs", 9 | "rev": "faf5bdea5d9f0f9de26deaa7e864cdcd3b15b4e8", 10 | "type": "github" 11 | }, 12 | "original": { 13 | "id": "nixpkgs", 14 | "ref": "release-20.03", 15 | "type": "indirect" 16 | } 17 | }, 18 | "root": { 19 | "inputs": { 20 | "nixpkgs": "nixpkgs" 21 | } 22 | } 23 | }, 24 | "root": "root", 25 | "version": 7 26 | } 27 | -------------------------------------------------------------------------------- /vercomp.sh: -------------------------------------------------------------------------------- 1 | # taken from: https://stackoverflow.com/a/4025065 2 | vercomp () { 3 | if [[ $1 == $2 ]] 4 | then 5 | return 0 6 | fi 7 | local IFS=. 8 | local i ver1=($1) ver2=($2) 9 | # fill empty fields in ver1 with zeros 10 | for ((i=${#ver1[@]}; i<${#ver2[@]}; i++)) 11 | do 12 | ver1[i]=0 13 | done 14 | for ((i=0; i<${#ver1[@]}; i++)) 15 | do 16 | if [[ -z ${ver2[i]-} ]] 17 | then 18 | # fill empty fields in ver2 with zeros 19 | ver2[i]=0 20 | fi 21 | if ((10#${ver1[i]} > 10#${ver2[i]})) 22 | then 23 | return 1 24 | fi 25 | if ((10#${ver1[i]} < 10#${ver2[i]})) 26 | then 27 | return 2 28 | fi 29 | done 30 | return 0 31 | } 32 | 33 | vergt() { 34 | vercomp $1 $2 35 | case $? in 36 | 0) return 1;; 37 | 1) return 0;; 38 | 2) return 1;; 39 | esac 40 | } 41 | 42 | verlte() { 43 | vercomp $1 $2 44 | case $? in 45 | 0) return 0;; 46 | 1) return 1;; 47 | 2) return 0;; 48 | esac 49 | } 50 | -------------------------------------------------------------------------------- /action.yml: -------------------------------------------------------------------------------- 1 | name: Nix Quick Install 2 | description: Quickly installs Nix in unprivileged single-user mode 3 | author: Rickard Nilsson 4 | 5 | inputs: 6 | 7 | nix_version: 8 | required: true 9 | default: "2.29.2" 10 | description: | 11 | The version of Nix that should be installed 12 | 13 | If not specified, the latest stable Nix release is used. Note that each 14 | release of nix-quick-install-action has a specific set of supported 15 | Nix versions, which do not change. You can check what Nix versions are 16 | supported by the version of nix-quick-install-action you're using by 17 | going to https://github.com/nixbuild/nix-quick-install-action/releases 18 | 19 | nix_conf: 20 | required: false 21 | description: | 22 | If set, this configuration is written to XDG_CONFIG_HOME/nix/nix.conf, 23 | which is read by Nix. 24 | See https://nixos.org/manual/nix/stable/command-ref/conf-file.html for 25 | information on what settings that are available. Make sure the settings 26 | you define are supported by the Nix version you're using. 27 | 28 | github_access_token: 29 | default: ${{ github.token }} 30 | description: | 31 | Configure Nix to use the specified token when fetching from GitHub. 32 | 33 | nix_on_tmpfs: 34 | required: true 35 | default: false 36 | description: | 37 | Installs /nix on a tmpfs mount. This can make Nix operations faster, but 38 | you risk running out of memory if your Nix store grows to big. Only 39 | enable this if you're absolutely sure the size of your Nix store (and 40 | database, logs etc) will be considerably less than the available memory. 41 | This option does nothing on MacOS runners. 42 | 43 | nix_archives_url: 44 | required: false 45 | description: | 46 | Don't use. For bootstrapping purposes only. 47 | 48 | enable_kvm: 49 | description: 'Enable KVM for hardware-accelerated virtualization on Linux, if available.' 50 | required: false 51 | default: true 52 | 53 | 54 | runs: 55 | using: "composite" 56 | steps: 57 | - name: Install Nix in single-user mode 58 | run: ${{ github.action_path }}/nix-quick-install.sh 59 | shell: bash 60 | env: 61 | RELEASE_FILE: ${{ github.action_path }}/RELEASE 62 | NIX_VERSION: ${{ inputs.nix_version }} 63 | NIX_CONF: ${{ inputs.nix_conf }} 64 | NIX_ARCHIVES_URL: ${{ inputs.nix_archives_url }} 65 | NIX_ON_TMPFS: ${{ inputs.nix_on_tmpfs }} 66 | GITHUB_ACCESS_TOKEN: ${{ inputs.github_access_token }} 67 | ENABLE_KVM: ${{ inputs.enable_kvm }} 68 | 69 | branding: 70 | icon: zap 71 | color: gray-dark 72 | -------------------------------------------------------------------------------- /nix-quick-install.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -eu 4 | set -o pipefail 5 | 6 | source "${BASH_SOURCE[0]%/*}/vercomp.sh" 7 | 8 | case "$(uname -m)" in 9 | x86_64) 10 | arch="x86_64" 11 | ;; 12 | arm64) 13 | arch="aarch64" 14 | ;; 15 | aarch64) 16 | arch="aarch64" 17 | ;; 18 | *) 19 | echo >&2 "unsupported architecture: $(uname -m)" 20 | exit 1 21 | esac 22 | 23 | case "$OSTYPE" in 24 | darwin*) 25 | sys="$arch-darwin" 26 | ;; 27 | linux*) 28 | sys="$arch-linux" 29 | ;; 30 | *) 31 | echo >& "unsupported OS type: $OSTYPE" 32 | exit 1 33 | esac 34 | 35 | # Enable KVM on Linux so NixOS tests can run quickly. 36 | # Do this early in the process so nix installation detects the KVM feature. 37 | enable_kvm() { 38 | echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-install-nix-action-kvm.rules 39 | sudo udevadm control --reload-rules && sudo udevadm trigger --name-match=kvm 40 | } 41 | if [[ ("$sys" =~ .*-linux) && ("$ENABLE_KVM" == 'true') ]]; then 42 | enable_kvm && echo 'Enabled KVM' || echo 'KVM is not available' 43 | fi 44 | 45 | # Make sure /nix exists and is writeable 46 | if [ -a /nix ]; then 47 | if ! [ -w /nix ]; then 48 | echo >&2 "/nix exists but is not writeable, can't set up nix-quick-install-action" 49 | exit 1 50 | else 51 | rm -rf /nix/var/nix-quick-install-action 52 | fi 53 | elif [[ "$sys" =~ .*-darwin ]]; then 54 | disk=$(/usr/bin/stat -f "%Sd" /) 55 | disk=${disk%s[0-9]*} 56 | sudo $SHELL -euo pipefail << EOF 57 | echo nix >> /etc/synthetic.conf 58 | echo -e "run\\tprivate/var/run" >> /etc/synthetic.conf 59 | /System/Library/Filesystems/apfs.fs/Contents/Resources/apfs.util -B &>/dev/null \ 60 | || /System/Library/Filesystems/apfs.fs/Contents/Resources/apfs.util -t &>/dev/null \ 61 | || echo "warning: failed to execute apfs.util" 62 | diskutil apfs addVolume "$disk" APFS nix -mountpoint /nix 63 | mdutil -i off /nix 64 | chown $USER /nix 65 | EOF 66 | else 67 | sudo install -d -o "$USER" /nix 68 | if [[ "$NIX_ON_TMPFS" == "true" || "$NIX_ON_TMPFS" == "True" || "$NIX_ON_TMPFS" == "TRUE" ]]; then 69 | sudo mount -t tmpfs -o size=90%,mode=0755,gid="$(id -g)",uid="$(id -u)" tmpfs /nix 70 | fi 71 | fi 72 | 73 | # Fetch and unpack nix archive 74 | if [[ "$sys" =~ .*-darwin ]]; then 75 | # MacOS tar doesn't have the --skip-old-files, so we use gtar 76 | tar=gtar 77 | else 78 | tar=tar 79 | fi 80 | rel="$(head -n1 "$RELEASE_FILE")" 81 | url="${NIX_ARCHIVES_URL:-https://github.com/nixbuild/nix-quick-install-action/releases/download/$rel}/nix-$NIX_VERSION-$sys.tar.zstd" 82 | 83 | echo >&2 "Fetching nix archives from $url" 84 | case "$url" in 85 | file://) 86 | "$tar" --skip-old-files --strip-components 1 -x -I unzstd -C /nix "${url#file://}" 87 | ;; 88 | *) 89 | curl -sL --retry 3 --retry-connrefused "$url" \ 90 | | "$tar" --skip-old-files --strip-components 1 -x -I unzstd -C /nix 91 | ;; 92 | esac 93 | 94 | # Setup nix.conf 95 | NIX_CONF_FILE="${XDG_CONFIG_HOME:-$HOME/.config}/nix/nix.conf" 96 | mkdir -p "$(dirname "$NIX_CONF_FILE")" 97 | touch "$NIX_CONF_FILE" 98 | if [ -n "${NIX_CONF:-}" ]; then 99 | printenv NIX_CONF > "$NIX_CONF_FILE" 100 | fi 101 | 102 | # Setup GitHub access token 103 | if [[ -n "${GITHUB_ACCESS_TOKEN:-}" ]]; then 104 | echo >>"$NIX_CONF_FILE" \ 105 | "access-tokens = github.com=$GITHUB_ACCESS_TOKEN" 106 | fi 107 | 108 | # Setup Flakes 109 | if vergt "$NIX_VERSION" "2.13"; then 110 | echo >>"$NIX_CONF_FILE" \ 111 | "extra-experimental-features = nix-command flakes" 112 | echo >>"$NIX_CONF_FILE" \ 113 | "accept-flake-config = true" 114 | fi 115 | 116 | 117 | # Populate the nix db 118 | nix="$(readlink /nix/var/nix-quick-install-action/nix)" 119 | retries=2 120 | while true; do 121 | "$nix/bin/nix-store" \ 122 | --load-db < /nix/var/nix-quick-install-action/registration && break || true 123 | ((retries--)) 124 | echo >&2 "Retrying Nix DB registration" 125 | sleep 2 126 | done 127 | 128 | 129 | # Install nix in profile 130 | MANPATH= . "$nix/etc/profile.d/nix.sh" 131 | "$nix/bin/nix-env" -i "$nix" 132 | 133 | # Certificate bundle is not detected by nix.sh on macOS. 134 | if [ -z "${NIX_SSL_CERT_FILE:-}" -a -e "/etc/ssl/cert.pem" ]; then 135 | NIX_SSL_CERT_FILE="/etc/ssl/cert.pem" 136 | fi 137 | 138 | # Set env 139 | echo "$HOME/.nix-profile/bin" >> $GITHUB_PATH 140 | echo "NIX_PROFILES=/nix/var/nix/profiles/default $HOME/.nix-profile" >> $GITHUB_ENV 141 | echo "NIX_USER_PROFILE_DIR=/nix/var/nix/profiles/per-user/$USER" >> $GITHUB_ENV 142 | echo "NIX_SSL_CERT_FILE=$NIX_SSL_CERT_FILE" >> $GITHUB_ENV 143 | -------------------------------------------------------------------------------- /.github/workflows/cicd.yml: -------------------------------------------------------------------------------- 1 | name: CI/CD 2 | 3 | on: 4 | pull_request: 5 | push: 6 | branches: 7 | - master 8 | 9 | concurrency: 10 | group: ${{ github.workflow }}-${{ github.ref }} 11 | cancel-in-progress: true 12 | 13 | jobs: 14 | build: 15 | strategy: 16 | fail-fast: true 17 | matrix: 18 | os: 19 | - ubuntu-22.04 20 | - ubuntu-24.04-arm 21 | - macos-15 22 | - macos-13 23 | runs-on: ${{ matrix.os }} 24 | steps: 25 | - uses: actions/checkout@v4 26 | - uses: ./ 27 | with: 28 | nix_archives_url: https://github.com/nixbuild/nix-quick-install-action/releases/download/v34 29 | nix_version: 2.29.2 30 | - uses: cachix/cachix-action@v15 31 | with: 32 | name: nixbuild 33 | signingKey: '${{ secrets.CACHIX_SIGNING_KEY }}' 34 | - name: Build nix archives 35 | id: build-nix-archives 36 | run: | 37 | nix build .#nix-archives 38 | echo "result=$(readlink result)" >> "$GITHUB_OUTPUT" 39 | - uses: actions/upload-artifact@v4 40 | with: 41 | name: nix-archives-${{ runner.os }}-${{ runner.arch }} 42 | path: ${{ steps.build-nix-archives.outputs.result }}/ 43 | 44 | test: 45 | needs: build 46 | strategy: 47 | fail-fast: true 48 | matrix: 49 | os: 50 | - ubuntu-22.04 51 | - ubuntu-24.04-arm 52 | - macos-15 53 | - macos-13 54 | nix_version: 55 | - 2.3.18 56 | - 2.24.15 57 | - 2.26.4 58 | - 2.28.5 59 | - 2.29.2 60 | - 2.30.3 61 | - 2.31.2 62 | exclude: 63 | - os: ubuntu-24.04-arm 64 | nix_version: 2.3.18 65 | runs-on: ${{ matrix.os }} 66 | steps: 67 | - uses: actions/checkout@v4 68 | - uses: actions/download-artifact@v4 69 | id: nix-archives 70 | with: 71 | name: nix-archives-${{ runner.os }}-${{ runner.arch }} 72 | - uses: ./ 73 | with: 74 | nix_archives_url: file://${{steps.nix-archives.outputs.download-path}} 75 | nix_version: ${{ matrix.nix_version }} 76 | nix_on_tmpfs: true 77 | - name: Test nix 78 | run: nix-build -v --version 79 | - name: Add to store 80 | run: | 81 | file="$RANDOM" 82 | echo "$RANDOM" > "$file" 83 | path="$(nix-store --add "./$file")" 84 | 85 | test-cachix: 86 | needs: build 87 | strategy: 88 | fail-fast: true 89 | matrix: 90 | os: 91 | - ubuntu-22.04 92 | - ubuntu-24.04-arm 93 | - macos-15 94 | - macos-13 95 | nix_version: 96 | - 2.3.18 97 | - 2.24.15 98 | - 2.26.4 99 | - 2.28.5 100 | - 2.29.2 101 | - 2.30.3 102 | - 2.31.2 103 | exclude: 104 | - os: ubuntu-24.04-arm 105 | nix_version: 2.3.18 106 | runs-on: ${{ matrix.os }} 107 | steps: 108 | - uses: actions/checkout@v4 109 | - uses: actions/download-artifact@v4 110 | id: nix-archives 111 | with: 112 | name: nix-archives-${{ runner.os }}-${{ runner.arch }} 113 | - uses: ./ 114 | with: 115 | nix_archives_url: file://${{steps.nix-archives.outputs.download-path}} 116 | nix_version: ${{ matrix.nix_version }} 117 | nix_conf: ${{ matrix.nix_conf }} 118 | - uses: cachix/cachix-action@v15 119 | with: 120 | name: nixbuild 121 | signingKey: '${{ secrets.CACHIX_SIGNING_KEY }}' 122 | skipPush: true 123 | - name: Verify nix config 124 | run: | 125 | if ! egrep -q "^substituters = https://cache.nixos.org https://nixbuild.cachix.org$" "$HOME/.config/nix/nix.conf"; then 126 | echo "Invalid substituters config" 127 | exit 1 128 | fi 129 | - name: Push to Cachix 130 | if: github.event_name == 'push' && github.repository_owner == 'nixbuild' 131 | run: | 132 | dd if=/dev/urandom of=random count=1 133 | cachix push nixbuild "$(nix add-to-store random)" 134 | 135 | release: 136 | runs-on: ubuntu-latest 137 | needs: 138 | - build 139 | - test 140 | - test-cachix 141 | if: github.event_name == 'push' && github.ref == 'refs/heads/master' 142 | steps: 143 | - uses: actions/checkout@v4 144 | - uses: actions/download-artifact@v4 145 | with: 146 | name: nix-archives-Linux-X64 147 | path: /tmp/archives 148 | - uses: actions/download-artifact@v4 149 | with: 150 | name: nix-archives-Linux-ARM64 151 | path: /tmp/archives 152 | - uses: actions/download-artifact@v4 153 | with: 154 | name: nix-archives-macOS-X64 155 | path: /tmp/archives 156 | - uses: actions/download-artifact@v4 157 | with: 158 | name: nix-archives-macOS-ARM64 159 | path: /tmp/archives 160 | - uses: ./ 161 | with: 162 | nix_archives_url: file:///tmp/archives 163 | - uses: cachix/cachix-action@v15 164 | with: 165 | name: nixbuild 166 | signingKey: '${{ secrets.CACHIX_SIGNING_KEY }}' 167 | - name: Build release script 168 | run: nix build .#release 169 | - name: Release if needed 170 | run: ./result/bin/release /tmp/archives ./RELEASE 171 | env: 172 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 173 | -------------------------------------------------------------------------------- /flake.nix: -------------------------------------------------------------------------------- 1 | { 2 | description = "nix-quick-install-action"; 3 | 4 | inputs = { 5 | flake-utils.url = "github:numtide/flake-utils"; 6 | nixpkgs.url = "github:nixos/nixpkgs/master"; 7 | nix_2_31.url = "github:nixos/nix/2.31.2"; 8 | nix_2_30.url = "github:nixos/nix/2.30.3"; 9 | nix_2_24.url = "github:nixos/nix/2.24.15"; 10 | nix_2_26.url = "github:nixos/nix/2.26.4"; 11 | nix_2_28.url = "github:nixos/nix/2.28.5"; 12 | nix_2_29.url = "github:nixos/nix/2.29.2"; 13 | }; 14 | 15 | nixConfig = { 16 | # We set some dummy Nix config here so we can use it for verification in our 17 | # CI test 18 | stalled-download-timeout = 333; # default 300 19 | }; 20 | 21 | outputs = { 22 | self, 23 | flake-utils, 24 | nixpkgs, 25 | nix_2_24, 26 | nix_2_26, 27 | nix_2_28, 28 | nix_2_29, 29 | nix_2_30, 30 | nix_2_31 31 | }: 32 | let allSystems = [ "aarch64-linux" "x86_64-linux" "aarch64-darwin" "x86_64-darwin" ]; 33 | in flake-utils.lib.eachSystem allSystems (system: 34 | 35 | let 36 | 37 | inherit (nixpkgs) lib; 38 | 39 | preferRemoteBuild = drv: drv.overrideAttrs (_: { 40 | preferLocalBuild = false; 41 | allowSubstitutes = true; 42 | }); 43 | 44 | pkgs = import nixpkgs { 45 | inherit system; 46 | overlays = [ 47 | (self: super: super.prefer-remote-fetch self super) 48 | ]; 49 | }; 50 | 51 | makeNixArchive = nix: 52 | pkgs.runCommand "nix-archive" { 53 | buildInputs = [ nix pkgs.gnutar pkgs.zstd ]; 54 | closureInfo = pkgs.closureInfo { rootPaths = [ nix ]; }; 55 | fileName = "nix-${nix.version}-${system}.tar.zstd"; 56 | inherit nix; 57 | } '' 58 | mkdir -p "$out" root/nix/var/{nix,nix-quick-install-action} 59 | ln -s $nix root/nix/var/nix-quick-install-action/nix 60 | cp -t root/nix/var/nix-quick-install-action $closureInfo/registration 61 | tar -cvT $closureInfo/store-paths -C root nix | zstd -o "$out/$fileName" 62 | ''; 63 | 64 | nixVersions = system: lib.listToAttrs (map (nix: lib.nameValuePair 65 | nix.version nix 66 | ) ( 67 | [ 68 | nix_2_31.packages.${system}.nix 69 | nix_2_30.packages.${system}.nix 70 | nix_2_29.packages.${system}.nix 71 | nix_2_28.packages.${system}.nix 72 | nix_2_26.packages.${system}.nix 73 | nix_2_24.packages.${system}.nix 74 | ] ++ 75 | lib.optionals (system != "aarch64-linux") 76 | [ 77 | nixpkgs.legacyPackages.${system}.nixVersions.minimum 78 | ] 79 | )); 80 | 81 | nixPackages = lib.mapAttrs' 82 | (v: p: lib.nameValuePair "nix-${lib.replaceStrings ["."] ["_"] v}" p) 83 | (nixVersions system); 84 | 85 | nixArchives = system: lib.mapAttrs (_: makeNixArchive) (nixVersions system); 86 | 87 | allNixArchives = lib.concatMap (system: 88 | map (version: { 89 | inherit system version; 90 | fileName = "nix-${version}-${system}.tar.zstd"; 91 | }) (lib.attrNames (nixArchives system)) 92 | ) allSystems; 93 | 94 | in rec { 95 | defaultApp = apps.release; 96 | 97 | apps.release = flake-utils.lib.mkApp { drv = packages.release; }; 98 | 99 | overlays = final: prev: nixPackages; 100 | 101 | packages = nixPackages // { 102 | nix-archives = preferRemoteBuild (pkgs.buildEnv { 103 | name = "nix-archives"; 104 | paths = lib.attrValues (nixArchives system); 105 | }); 106 | release = preferRemoteBuild (pkgs.writeScriptBin "release" '' 107 | #!${pkgs.stdenv.shell} 108 | 109 | PATH="${lib.makeBinPath (with pkgs; [ 110 | coreutils gitMinimal github-cli 111 | ])}" 112 | 113 | if [ "$GITHUB_ACTIONS" != "true" ]; then 114 | echo >&2 "not running in GitHub, exiting" 115 | exit 1 116 | fi 117 | 118 | set -euo pipefail 119 | 120 | nix_archives="$1" 121 | release_file="$2" 122 | release="$(head -n1 "$release_file")" 123 | prev_release="$(gh release list -L 1 | cut -f 3)" 124 | 125 | if [ "$release" = "$prev_release" ]; then 126 | echo >&2 "Release tag not updated ($release)" 127 | exit 128 | else 129 | release_notes="$(mktemp)" 130 | tail -n+2 "$release_file" > "$release_notes" 131 | 132 | echo "" | cat >>"$release_notes" - "${pkgs.writeText "notes" ( 133 | lib.concatMapStringsSep "\n" (sys: '' 134 | ## Supported Nix Versions on ${sys} runners 135 | ${lib.concatStringsSep "\n" ( 136 | map (v: "* ${v}") ( 137 | lib.reverseList (lib.naturalSort (lib.attrNames (nixArchives sys))) 138 | ) 139 | )} 140 | '') [ 141 | "x86_64-linux" 142 | "aarch64-linux" 143 | "x86_64-darwin" 144 | ] 145 | )}" 146 | 147 | echo >&2 "New release: $prev_release -> $release" 148 | gh release create "$release" ${ 149 | lib.concatMapStringsSep " " ({ system, version, fileName }: 150 | ''"$nix_archives/${fileName}#nix-${version}-${system}"'' 151 | ) allNixArchives 152 | } \ 153 | --title "$GITHUB_REPOSITORY@$release" \ 154 | --notes-file "$release_notes" 155 | fi 156 | ''); 157 | }; 158 | } 159 | ); 160 | } 161 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Nix Quick Install Action 2 | 3 | This GitHub Action installs [Nix](https://nixos.org/nix/) in single-user mode, 4 | and adds almost no time at all to your workflow's running time. 5 | 6 | The Nix installation is deterministic – for a given 7 | release of this action the resulting Nix setup will always be identical, no 8 | matter when you run the action. 9 | 10 | * Supports all Linux and MacOS runners 11 | 12 | * Currently no support for self-hosted runners 13 | 14 | * Single-user installation (no `nix-daemon`) 15 | 16 | * Installs in ≈ 1 second on Linux, ≈ 5 seconds on MacOS 17 | 18 | * Allows selecting Nix version via the `nix_version` input 19 | 20 | * Allows specifying `nix.conf` contents via the `nix_conf` input 21 | 22 | ## Details 23 | 24 | The main motivation behind this action is to install Nix as quickly as possible 25 | in your GitHub workflow. If that isn't important, you should probably use the 26 | [Install Nix](https://github.com/marketplace/actions/install-nix) action 27 | instead, which sets up Nix in multi-user mode (daemon mode) using the official 28 | Nix installer. 29 | 30 | To make this action as quick as possible, the installation is minimal: no 31 | nix-daemon, no nix channels and no `NIX_PATH`. The nix store (`/nix/store`) is 32 | owned by the unprivileged runner user. 33 | 34 | The action provides you with a fully working Nix setup, but since no `NIX_PATH` 35 | or channels are setup you need to handle this on your own. Nix Flakes is great 36 | for this, and works perfectly with this action (see below). 37 | [niv](https://github.com/nmattia/niv) should also work fine, but has not been 38 | tested yet. 39 | 40 | ## Inputs 41 | 42 | See [action.yml](action.yml) for documentation of the available inputs. 43 | The available Nix versions are listed in the [release 44 | notes](https://github.com/nixbuild/nix-quick-install-action/releases/latest). 45 | 46 | ## Usage 47 | 48 | ### Minimal example 49 | 50 | The following workflow installs Nix and then just runs 51 | `nix-build --version`: 52 | 53 | ```yaml 54 | name: Examples 55 | on: push 56 | jobs: 57 | minimal: 58 | runs-on: ubuntu-latest 59 | steps: 60 | - uses: nixbuild/nix-quick-install-action@v34 61 | - run: nix build --version 62 | - run: nix build ./examples/flakes-simple 63 | - name: hello 64 | run: ./result/bin/hello 65 | ``` 66 | 67 | ![action-minimal](examples/action-minimal.png) 68 | 69 | ### Flakes 70 | 71 | For `nix` > `2.13`, these settings are always set by default: 72 | 73 | ```conf 74 | experimental-features = nix-command flakes 75 | accept-flake-config = true 76 | ``` 77 | 78 | ![action-minimal](examples/action-flakes-simple.png) 79 | 80 | You can see the flake definition for the above example in 81 | [examples/flakes-simple/flake.nix](examples/flakes-simple/flake.nix). 82 | 83 | ### Using Cachix 84 | 85 | You can use the [Cachix action](https://github.com/marketplace/actions/cachix) 86 | together with this action, just make sure you put it after this action in your 87 | workflow. 88 | 89 | ### Using specific Nix versions locally 90 | 91 | Locally, you can use this repository's Nix flake to build or run any of the 92 | versions of Nix that this action supports. This is very convenient if you 93 | quickly need to compare the behavior between different Nix versions. 94 | 95 | Build a specific version of Nix like this (requires you to use a version of Nix 96 | that supports flakes): 97 | 98 | ``` 99 | $ nix build github:nixbuild/nix-quick-install-action#nix-2_26_1 100 | 101 | $ ./result/bin/nix --version 102 | nix (Nix) 2.26.1 103 | ``` 104 | 105 | With `nix shell -c` you can also directly run Nix like this: 106 | 107 | ``` 108 | $ nix shell github:nixbuild/nix-quick-install-action#nix-2_26_1 -c nix --version 109 | nix (Nix) 2.26.1 110 | ``` 111 | 112 | List all available Nix versions like this: 113 | 114 | ``` 115 | $ nix flake show --quiet --all-systems github:nixbuild/nix-quick-install-action/v34 116 | github:nixbuild/nix-quick-install-action/2c9db80fb984ceb1bcaa77cdda3fdf8cfba92035?narHash=sha256-a3XXu2WNQ%2BRAWingsm%2BuLIy%2BgHO7JeZRKOqBpbLfH4k%3D 117 | ├───apps 118 | │ ├───aarch64-darwin 119 | │ │ └───release: app: no description 120 | │ ├───aarch64-linux 121 | │ │ └───release: app: no description 122 | │ ├───x86_64-darwin 123 | │ │ └───release: app: no description 124 | │ └───x86_64-linux 125 | │ └───release: app: no description 126 | ├───defaultApp 127 | │ ├───aarch64-darwin: app: no description 128 | │ ├───aarch64-linux: app: no description 129 | │ ├───x86_64-darwin: app: no description 130 | │ └───x86_64-linux: app: no description 131 | ├───overlays 132 | │ ├───aarch64-darwin: Nixpkgs overlay 133 | │ ├───aarch64-linux: Nixpkgs overlay 134 | │ ├───x86_64-darwin: Nixpkgs overlay 135 | │ └───x86_64-linux: Nixpkgs overlay 136 | └───packages 137 | ├───aarch64-darwin 138 | │ ├───nix-2_24_15: package 'nix-2.24.15' 139 | │ ├───nix-2_26_4: package 'nix-2.26.4' 140 | │ ├───nix-2_28_5: package 'nix-2.28.5' 141 | │ ├───nix-2_29_2: package 'nix-2.29.2' 142 | │ ├───nix-2_30_3: package 'nix-2.30.3' 143 | │ ├───nix-2_31_2: package 'nix-2.31.2' 144 | │ ├───nix-2_3_18: package 'nix-2.3.18' 145 | │ ├───nix-archives: package 'nix-archives' 146 | │ └───release: package 'release' 147 | ├───aarch64-linux 148 | │ ├───nix-2_24_15: package 'nix-2.24.15' 149 | │ ├───nix-2_26_4: package 'nix-2.26.4' 150 | │ ├───nix-2_28_5: package 'nix-2.28.5' 151 | │ ├───nix-2_29_2: package 'nix-2.29.2' 152 | │ ├───nix-2_30_3: package 'nix-2.30.3' 153 | │ ├───nix-2_31_2: package 'nix-2.31.2' 154 | │ ├───nix-archives: package 'nix-archives' 155 | │ └───release: package 'release' 156 | ├───x86_64-darwin 157 | │ ├───nix-2_24_15: package 'nix-2.24.15' 158 | │ ├───nix-2_26_4: package 'nix-2.26.4' 159 | │ ├───nix-2_28_5: package 'nix-2.28.5' 160 | │ ├───nix-2_29_2: package 'nix-2.29.2' 161 | │ ├───nix-2_30_3: package 'nix-2.30.3' 162 | │ ├───nix-2_31_2: package 'nix-2.31.2' 163 | │ ├───nix-2_3_18: package 'nix-2.3.18' 164 | │ ├───nix-archives: package 'nix-archives' 165 | │ └───release: package 'release' 166 | └───x86_64-linux 167 | ├───nix-2_24_15: package 'nix-2.24.15' 168 | ├───nix-2_26_4: package 'nix-2.26.4' 169 | ├───nix-2_28_5: package 'nix-2.28.5' 170 | ├───nix-2_29_2: package 'nix-2.29.2' 171 | ├───nix-2_30_3: package 'nix-2.30.3' 172 | ├───nix-2_31_2: package 'nix-2.31.2' 173 | ├───nix-2_3_18: package 'nix-2.3.18' 174 | ├───nix-archives: package 'nix-archives' 175 | └───release: package 'release' 176 | ``` 177 | 178 | If you want to make sure that the version of Nix you're trying to build hasn't 179 | been removed in the latest revision of `nix-quick-install-action`, you can 180 | specify a specific release of `nix-quick-install-action` like this: 181 | 182 | ``` 183 | $ nix build github:nixbuild/nix-quick-install-action/v29#nix-2_24_9 184 | ``` 185 | 186 | Note that we've added `/v29` to the flake url above. 187 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /flake.lock: -------------------------------------------------------------------------------- 1 | { 2 | "nodes": { 3 | "flake-compat": { 4 | "flake": false, 5 | "locked": { 6 | "lastModified": 1696426674, 7 | "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", 8 | "owner": "edolstra", 9 | "repo": "flake-compat", 10 | "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", 11 | "type": "github" 12 | }, 13 | "original": { 14 | "owner": "edolstra", 15 | "repo": "flake-compat", 16 | "type": "github" 17 | } 18 | }, 19 | "flake-compat_2": { 20 | "flake": false, 21 | "locked": { 22 | "lastModified": 1733328505, 23 | "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=", 24 | "owner": "edolstra", 25 | "repo": "flake-compat", 26 | "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec", 27 | "type": "github" 28 | }, 29 | "original": { 30 | "owner": "edolstra", 31 | "repo": "flake-compat", 32 | "type": "github" 33 | } 34 | }, 35 | "flake-compat_3": { 36 | "flake": false, 37 | "locked": { 38 | "lastModified": 1733328505, 39 | "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=", 40 | "owner": "edolstra", 41 | "repo": "flake-compat", 42 | "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec", 43 | "type": "github" 44 | }, 45 | "original": { 46 | "owner": "edolstra", 47 | "repo": "flake-compat", 48 | "type": "github" 49 | } 50 | }, 51 | "flake-compat_4": { 52 | "flake": false, 53 | "locked": { 54 | "lastModified": 1733328505, 55 | "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=", 56 | "owner": "edolstra", 57 | "repo": "flake-compat", 58 | "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec", 59 | "type": "github" 60 | }, 61 | "original": { 62 | "owner": "edolstra", 63 | "repo": "flake-compat", 64 | "type": "github" 65 | } 66 | }, 67 | "flake-compat_5": { 68 | "flake": false, 69 | "locked": { 70 | "lastModified": 1733328505, 71 | "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=", 72 | "owner": "edolstra", 73 | "repo": "flake-compat", 74 | "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec", 75 | "type": "github" 76 | }, 77 | "original": { 78 | "owner": "edolstra", 79 | "repo": "flake-compat", 80 | "type": "github" 81 | } 82 | }, 83 | "flake-compat_6": { 84 | "flake": false, 85 | "locked": { 86 | "lastModified": 1733328505, 87 | "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=", 88 | "owner": "edolstra", 89 | "repo": "flake-compat", 90 | "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec", 91 | "type": "github" 92 | }, 93 | "original": { 94 | "owner": "edolstra", 95 | "repo": "flake-compat", 96 | "type": "github" 97 | } 98 | }, 99 | "flake-parts": { 100 | "inputs": { 101 | "nixpkgs-lib": [ 102 | "nix_2_24", 103 | "nixpkgs" 104 | ] 105 | }, 106 | "locked": { 107 | "lastModified": 1719994518, 108 | "narHash": "sha256-pQMhCCHyQGRzdfAkdJ4cIWiw+JNuWsTX7f0ZYSyz0VY=", 109 | "owner": "hercules-ci", 110 | "repo": "flake-parts", 111 | "rev": "9227223f6d922fee3c7b190b2cc238a99527bbb7", 112 | "type": "github" 113 | }, 114 | "original": { 115 | "owner": "hercules-ci", 116 | "repo": "flake-parts", 117 | "type": "github" 118 | } 119 | }, 120 | "flake-parts_2": { 121 | "inputs": { 122 | "nixpkgs-lib": [ 123 | "nix_2_26", 124 | "nixpkgs" 125 | ] 126 | }, 127 | "locked": { 128 | "lastModified": 1733312601, 129 | "narHash": "sha256-4pDvzqnegAfRkPwO3wmwBhVi/Sye1mzps0zHWYnP88c=", 130 | "owner": "hercules-ci", 131 | "repo": "flake-parts", 132 | "rev": "205b12d8b7cd4802fbcb8e8ef6a0f1408781a4f9", 133 | "type": "github" 134 | }, 135 | "original": { 136 | "owner": "hercules-ci", 137 | "repo": "flake-parts", 138 | "type": "github" 139 | } 140 | }, 141 | "flake-parts_3": { 142 | "inputs": { 143 | "nixpkgs-lib": [ 144 | "nix_2_28", 145 | "nixpkgs" 146 | ] 147 | }, 148 | "locked": { 149 | "lastModified": 1733312601, 150 | "narHash": "sha256-4pDvzqnegAfRkPwO3wmwBhVi/Sye1mzps0zHWYnP88c=", 151 | "owner": "hercules-ci", 152 | "repo": "flake-parts", 153 | "rev": "205b12d8b7cd4802fbcb8e8ef6a0f1408781a4f9", 154 | "type": "github" 155 | }, 156 | "original": { 157 | "owner": "hercules-ci", 158 | "repo": "flake-parts", 159 | "type": "github" 160 | } 161 | }, 162 | "flake-parts_4": { 163 | "inputs": { 164 | "nixpkgs-lib": [ 165 | "nix_2_29", 166 | "nixpkgs" 167 | ] 168 | }, 169 | "locked": { 170 | "lastModified": 1733312601, 171 | "narHash": "sha256-4pDvzqnegAfRkPwO3wmwBhVi/Sye1mzps0zHWYnP88c=", 172 | "owner": "hercules-ci", 173 | "repo": "flake-parts", 174 | "rev": "205b12d8b7cd4802fbcb8e8ef6a0f1408781a4f9", 175 | "type": "github" 176 | }, 177 | "original": { 178 | "owner": "hercules-ci", 179 | "repo": "flake-parts", 180 | "type": "github" 181 | } 182 | }, 183 | "flake-parts_5": { 184 | "inputs": { 185 | "nixpkgs-lib": [ 186 | "nix_2_30", 187 | "nixpkgs" 188 | ] 189 | }, 190 | "locked": { 191 | "lastModified": 1733312601, 192 | "narHash": "sha256-4pDvzqnegAfRkPwO3wmwBhVi/Sye1mzps0zHWYnP88c=", 193 | "owner": "hercules-ci", 194 | "repo": "flake-parts", 195 | "rev": "205b12d8b7cd4802fbcb8e8ef6a0f1408781a4f9", 196 | "type": "github" 197 | }, 198 | "original": { 199 | "owner": "hercules-ci", 200 | "repo": "flake-parts", 201 | "type": "github" 202 | } 203 | }, 204 | "flake-parts_6": { 205 | "inputs": { 206 | "nixpkgs-lib": [ 207 | "nix_2_31", 208 | "nixpkgs" 209 | ] 210 | }, 211 | "locked": { 212 | "lastModified": 1733312601, 213 | "narHash": "sha256-4pDvzqnegAfRkPwO3wmwBhVi/Sye1mzps0zHWYnP88c=", 214 | "owner": "hercules-ci", 215 | "repo": "flake-parts", 216 | "rev": "205b12d8b7cd4802fbcb8e8ef6a0f1408781a4f9", 217 | "type": "github" 218 | }, 219 | "original": { 220 | "owner": "hercules-ci", 221 | "repo": "flake-parts", 222 | "type": "github" 223 | } 224 | }, 225 | "flake-utils": { 226 | "inputs": { 227 | "systems": "systems" 228 | }, 229 | "locked": { 230 | "lastModified": 1731533236, 231 | "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", 232 | "owner": "numtide", 233 | "repo": "flake-utils", 234 | "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", 235 | "type": "github" 236 | }, 237 | "original": { 238 | "owner": "numtide", 239 | "repo": "flake-utils", 240 | "type": "github" 241 | } 242 | }, 243 | "git-hooks-nix": { 244 | "inputs": { 245 | "flake-compat": [ 246 | "nix_2_24" 247 | ], 248 | "gitignore": [ 249 | "nix_2_24" 250 | ], 251 | "nixpkgs": [ 252 | "nix_2_24", 253 | "nixpkgs" 254 | ], 255 | "nixpkgs-stable": [ 256 | "nix_2_24", 257 | "nixpkgs" 258 | ] 259 | }, 260 | "locked": { 261 | "lastModified": 1721042469, 262 | "narHash": "sha256-6FPUl7HVtvRHCCBQne7Ylp4p+dpP3P/OYuzjztZ4s70=", 263 | "owner": "cachix", 264 | "repo": "git-hooks.nix", 265 | "rev": "f451c19376071a90d8c58ab1a953c6e9840527fd", 266 | "type": "github" 267 | }, 268 | "original": { 269 | "owner": "cachix", 270 | "repo": "git-hooks.nix", 271 | "type": "github" 272 | } 273 | }, 274 | "git-hooks-nix_2": { 275 | "inputs": { 276 | "flake-compat": [ 277 | "nix_2_26" 278 | ], 279 | "gitignore": [ 280 | "nix_2_26" 281 | ], 282 | "nixpkgs": [ 283 | "nix_2_26", 284 | "nixpkgs" 285 | ], 286 | "nixpkgs-stable": [ 287 | "nix_2_26", 288 | "nixpkgs" 289 | ] 290 | }, 291 | "locked": { 292 | "lastModified": 1734279981, 293 | "narHash": "sha256-NdaCraHPp8iYMWzdXAt5Nv6sA3MUzlCiGiR586TCwo0=", 294 | "owner": "cachix", 295 | "repo": "git-hooks.nix", 296 | "rev": "aa9f40c906904ebd83da78e7f328cd8aeaeae785", 297 | "type": "github" 298 | }, 299 | "original": { 300 | "owner": "cachix", 301 | "repo": "git-hooks.nix", 302 | "type": "github" 303 | } 304 | }, 305 | "git-hooks-nix_3": { 306 | "inputs": { 307 | "flake-compat": [ 308 | "nix_2_28" 309 | ], 310 | "gitignore": [ 311 | "nix_2_28" 312 | ], 313 | "nixpkgs": [ 314 | "nix_2_28", 315 | "nixpkgs" 316 | ], 317 | "nixpkgs-stable": [ 318 | "nix_2_28", 319 | "nixpkgs" 320 | ] 321 | }, 322 | "locked": { 323 | "lastModified": 1734279981, 324 | "narHash": "sha256-NdaCraHPp8iYMWzdXAt5Nv6sA3MUzlCiGiR586TCwo0=", 325 | "owner": "cachix", 326 | "repo": "git-hooks.nix", 327 | "rev": "aa9f40c906904ebd83da78e7f328cd8aeaeae785", 328 | "type": "github" 329 | }, 330 | "original": { 331 | "owner": "cachix", 332 | "repo": "git-hooks.nix", 333 | "type": "github" 334 | } 335 | }, 336 | "git-hooks-nix_4": { 337 | "inputs": { 338 | "flake-compat": [ 339 | "nix_2_29" 340 | ], 341 | "gitignore": [ 342 | "nix_2_29" 343 | ], 344 | "nixpkgs": [ 345 | "nix_2_29", 346 | "nixpkgs" 347 | ], 348 | "nixpkgs-stable": [ 349 | "nix_2_29", 350 | "nixpkgs" 351 | ] 352 | }, 353 | "locked": { 354 | "lastModified": 1734279981, 355 | "narHash": "sha256-NdaCraHPp8iYMWzdXAt5Nv6sA3MUzlCiGiR586TCwo0=", 356 | "owner": "cachix", 357 | "repo": "git-hooks.nix", 358 | "rev": "aa9f40c906904ebd83da78e7f328cd8aeaeae785", 359 | "type": "github" 360 | }, 361 | "original": { 362 | "owner": "cachix", 363 | "repo": "git-hooks.nix", 364 | "type": "github" 365 | } 366 | }, 367 | "git-hooks-nix_5": { 368 | "inputs": { 369 | "flake-compat": [ 370 | "nix_2_30" 371 | ], 372 | "gitignore": [ 373 | "nix_2_30" 374 | ], 375 | "nixpkgs": [ 376 | "nix_2_30", 377 | "nixpkgs" 378 | ], 379 | "nixpkgs-stable": [ 380 | "nix_2_30", 381 | "nixpkgs" 382 | ] 383 | }, 384 | "locked": { 385 | "lastModified": 1734279981, 386 | "narHash": "sha256-NdaCraHPp8iYMWzdXAt5Nv6sA3MUzlCiGiR586TCwo0=", 387 | "owner": "cachix", 388 | "repo": "git-hooks.nix", 389 | "rev": "aa9f40c906904ebd83da78e7f328cd8aeaeae785", 390 | "type": "github" 391 | }, 392 | "original": { 393 | "owner": "cachix", 394 | "repo": "git-hooks.nix", 395 | "type": "github" 396 | } 397 | }, 398 | "git-hooks-nix_6": { 399 | "inputs": { 400 | "flake-compat": [ 401 | "nix_2_31" 402 | ], 403 | "gitignore": [ 404 | "nix_2_31" 405 | ], 406 | "nixpkgs": [ 407 | "nix_2_31", 408 | "nixpkgs" 409 | ], 410 | "nixpkgs-stable": [ 411 | "nix_2_31", 412 | "nixpkgs" 413 | ] 414 | }, 415 | "locked": { 416 | "lastModified": 1734279981, 417 | "narHash": "sha256-NdaCraHPp8iYMWzdXAt5Nv6sA3MUzlCiGiR586TCwo0=", 418 | "owner": "cachix", 419 | "repo": "git-hooks.nix", 420 | "rev": "aa9f40c906904ebd83da78e7f328cd8aeaeae785", 421 | "type": "github" 422 | }, 423 | "original": { 424 | "owner": "cachix", 425 | "repo": "git-hooks.nix", 426 | "type": "github" 427 | } 428 | }, 429 | "libgit2": { 430 | "flake": false, 431 | "locked": { 432 | "lastModified": 1715853528, 433 | "narHash": "sha256-J2rCxTecyLbbDdsyBWn9w7r3pbKRMkI9E7RvRgAqBdY=", 434 | "owner": "libgit2", 435 | "repo": "libgit2", 436 | "rev": "36f7e21ad757a3dacc58cf7944329da6bc1d6e96", 437 | "type": "github" 438 | }, 439 | "original": { 440 | "owner": "libgit2", 441 | "ref": "v1.8.1", 442 | "repo": "libgit2", 443 | "type": "github" 444 | } 445 | }, 446 | "nix_2_24": { 447 | "inputs": { 448 | "flake-compat": "flake-compat", 449 | "flake-parts": "flake-parts", 450 | "git-hooks-nix": "git-hooks-nix", 451 | "libgit2": "libgit2", 452 | "nixpkgs": "nixpkgs", 453 | "nixpkgs-23-11": "nixpkgs-23-11", 454 | "nixpkgs-regression": "nixpkgs-regression" 455 | }, 456 | "locked": { 457 | "lastModified": 1750774130, 458 | "narHash": "sha256-GHqFHLxvRID2IEPUwIfRMp8epYQMFcvG9ogLzfWRbPc=", 459 | "owner": "nixos", 460 | "repo": "nix", 461 | "rev": "148585470c2a595cf5d4c9b921b286ec9758389f", 462 | "type": "github" 463 | }, 464 | "original": { 465 | "owner": "nixos", 466 | "ref": "2.24.15", 467 | "repo": "nix", 468 | "type": "github" 469 | } 470 | }, 471 | "nix_2_26": { 472 | "inputs": { 473 | "flake-compat": "flake-compat_2", 474 | "flake-parts": "flake-parts_2", 475 | "git-hooks-nix": "git-hooks-nix_2", 476 | "nixpkgs": "nixpkgs_2", 477 | "nixpkgs-23-11": "nixpkgs-23-11_2", 478 | "nixpkgs-regression": "nixpkgs-regression_2" 479 | }, 480 | "locked": { 481 | "lastModified": 1750780801, 482 | "narHash": "sha256-WmGMiwwC9RLomNtpDeRoe5bqBAH84A6pLcqi1MbcQi4=", 483 | "owner": "nixos", 484 | "repo": "nix", 485 | "rev": "844ad565a844a156863be53b34d23feeb606d788", 486 | "type": "github" 487 | }, 488 | "original": { 489 | "owner": "nixos", 490 | "ref": "2.26.4", 491 | "repo": "nix", 492 | "type": "github" 493 | } 494 | }, 495 | "nix_2_28": { 496 | "inputs": { 497 | "flake-compat": "flake-compat_3", 498 | "flake-parts": "flake-parts_3", 499 | "git-hooks-nix": "git-hooks-nix_3", 500 | "nixpkgs": "nixpkgs_3", 501 | "nixpkgs-23-11": "nixpkgs-23-11_3", 502 | "nixpkgs-regression": "nixpkgs-regression_3" 503 | }, 504 | "locked": { 505 | "lastModified": 1756505090, 506 | "narHash": "sha256-oIfAHxO+BCtHXJXLHBnsKkGl1Pw+Uuq1PwNxl+lZ+Oc=", 507 | "owner": "nixos", 508 | "repo": "nix", 509 | "rev": "fefd97fba84ddec10db1408581ae95e28ef1727f", 510 | "type": "github" 511 | }, 512 | "original": { 513 | "owner": "nixos", 514 | "ref": "2.28.5", 515 | "repo": "nix", 516 | "type": "github" 517 | } 518 | }, 519 | "nix_2_29": { 520 | "inputs": { 521 | "flake-compat": "flake-compat_4", 522 | "flake-parts": "flake-parts_4", 523 | "git-hooks-nix": "git-hooks-nix_4", 524 | "nixpkgs": "nixpkgs_4", 525 | "nixpkgs-23-11": "nixpkgs-23-11_4", 526 | "nixpkgs-regression": "nixpkgs-regression_4" 527 | }, 528 | "locked": { 529 | "lastModified": 1756445756, 530 | "narHash": "sha256-50p2sG2RFuRnlS1/Vr5et0Rt+QDgfpNE2C2WWRztnbQ=", 531 | "owner": "nixos", 532 | "repo": "nix", 533 | "rev": "a885a361307fcc76e8814be4fb81ea90d7887442", 534 | "type": "github" 535 | }, 536 | "original": { 537 | "owner": "nixos", 538 | "ref": "2.29.2", 539 | "repo": "nix", 540 | "type": "github" 541 | } 542 | }, 543 | "nix_2_30": { 544 | "inputs": { 545 | "flake-compat": "flake-compat_5", 546 | "flake-parts": "flake-parts_5", 547 | "git-hooks-nix": "git-hooks-nix_5", 548 | "nixpkgs": "nixpkgs_5", 549 | "nixpkgs-23-11": "nixpkgs-23-11_5", 550 | "nixpkgs-regression": "nixpkgs-regression_5" 551 | }, 552 | "locked": { 553 | "lastModified": 1756710690, 554 | "narHash": "sha256-kBuwzMgIE9Tmve0Rpp+q+YCsE2mw9d62M/950ViWeJ0=", 555 | "owner": "nixos", 556 | "repo": "nix", 557 | "rev": "4692c073490be83f9311a1bd6d89e5d8e0f0f0fa", 558 | "type": "github" 559 | }, 560 | "original": { 561 | "owner": "nixos", 562 | "ref": "2.30.3", 563 | "repo": "nix", 564 | "type": "github" 565 | } 566 | }, 567 | "nix_2_31": { 568 | "inputs": { 569 | "flake-compat": "flake-compat_6", 570 | "flake-parts": "flake-parts_6", 571 | "git-hooks-nix": "git-hooks-nix_6", 572 | "nixpkgs": "nixpkgs_6", 573 | "nixpkgs-23-11": "nixpkgs-23-11_6", 574 | "nixpkgs-regression": "nixpkgs-regression_6" 575 | }, 576 | "locked": { 577 | "lastModified": 1758140738, 578 | "narHash": "sha256-NLGXPLjENLeKVOg3OZgHXZ+1x6sPIKq9FHH8pxbCrDI=", 579 | "owner": "nixos", 580 | "repo": "nix", 581 | "rev": "fdea16241777b4a827d99436608b961960198785", 582 | "type": "github" 583 | }, 584 | "original": { 585 | "owner": "nixos", 586 | "ref": "2.31.2", 587 | "repo": "nix", 588 | "type": "github" 589 | } 590 | }, 591 | "nixpkgs": { 592 | "locked": { 593 | "lastModified": 1723688146, 594 | "narHash": "sha256-sqLwJcHYeWLOeP/XoLwAtYjr01TISlkOfz+NG82pbdg=", 595 | "owner": "NixOS", 596 | "repo": "nixpkgs", 597 | "rev": "c3d4ac725177c030b1e289015989da2ad9d56af0", 598 | "type": "github" 599 | }, 600 | "original": { 601 | "owner": "NixOS", 602 | "ref": "nixos-24.05", 603 | "repo": "nixpkgs", 604 | "type": "github" 605 | } 606 | }, 607 | "nixpkgs-23-11": { 608 | "locked": { 609 | "lastModified": 1717159533, 610 | "narHash": "sha256-oamiKNfr2MS6yH64rUn99mIZjc45nGJlj9eGth/3Xuw=", 611 | "owner": "NixOS", 612 | "repo": "nixpkgs", 613 | "rev": "a62e6edd6d5e1fa0329b8653c801147986f8d446", 614 | "type": "github" 615 | }, 616 | "original": { 617 | "owner": "NixOS", 618 | "repo": "nixpkgs", 619 | "rev": "a62e6edd6d5e1fa0329b8653c801147986f8d446", 620 | "type": "github" 621 | } 622 | }, 623 | "nixpkgs-23-11_2": { 624 | "locked": { 625 | "lastModified": 1717159533, 626 | "narHash": "sha256-oamiKNfr2MS6yH64rUn99mIZjc45nGJlj9eGth/3Xuw=", 627 | "owner": "NixOS", 628 | "repo": "nixpkgs", 629 | "rev": "a62e6edd6d5e1fa0329b8653c801147986f8d446", 630 | "type": "github" 631 | }, 632 | "original": { 633 | "owner": "NixOS", 634 | "repo": "nixpkgs", 635 | "rev": "a62e6edd6d5e1fa0329b8653c801147986f8d446", 636 | "type": "github" 637 | } 638 | }, 639 | "nixpkgs-23-11_3": { 640 | "locked": { 641 | "lastModified": 1717159533, 642 | "narHash": "sha256-oamiKNfr2MS6yH64rUn99mIZjc45nGJlj9eGth/3Xuw=", 643 | "owner": "NixOS", 644 | "repo": "nixpkgs", 645 | "rev": "a62e6edd6d5e1fa0329b8653c801147986f8d446", 646 | "type": "github" 647 | }, 648 | "original": { 649 | "owner": "NixOS", 650 | "repo": "nixpkgs", 651 | "rev": "a62e6edd6d5e1fa0329b8653c801147986f8d446", 652 | "type": "github" 653 | } 654 | }, 655 | "nixpkgs-23-11_4": { 656 | "locked": { 657 | "lastModified": 1717159533, 658 | "narHash": "sha256-oamiKNfr2MS6yH64rUn99mIZjc45nGJlj9eGth/3Xuw=", 659 | "owner": "NixOS", 660 | "repo": "nixpkgs", 661 | "rev": "a62e6edd6d5e1fa0329b8653c801147986f8d446", 662 | "type": "github" 663 | }, 664 | "original": { 665 | "owner": "NixOS", 666 | "repo": "nixpkgs", 667 | "rev": "a62e6edd6d5e1fa0329b8653c801147986f8d446", 668 | "type": "github" 669 | } 670 | }, 671 | "nixpkgs-23-11_5": { 672 | "locked": { 673 | "lastModified": 1717159533, 674 | "narHash": "sha256-oamiKNfr2MS6yH64rUn99mIZjc45nGJlj9eGth/3Xuw=", 675 | "owner": "NixOS", 676 | "repo": "nixpkgs", 677 | "rev": "a62e6edd6d5e1fa0329b8653c801147986f8d446", 678 | "type": "github" 679 | }, 680 | "original": { 681 | "owner": "NixOS", 682 | "repo": "nixpkgs", 683 | "rev": "a62e6edd6d5e1fa0329b8653c801147986f8d446", 684 | "type": "github" 685 | } 686 | }, 687 | "nixpkgs-23-11_6": { 688 | "locked": { 689 | "lastModified": 1717159533, 690 | "narHash": "sha256-oamiKNfr2MS6yH64rUn99mIZjc45nGJlj9eGth/3Xuw=", 691 | "owner": "NixOS", 692 | "repo": "nixpkgs", 693 | "rev": "a62e6edd6d5e1fa0329b8653c801147986f8d446", 694 | "type": "github" 695 | }, 696 | "original": { 697 | "owner": "NixOS", 698 | "repo": "nixpkgs", 699 | "rev": "a62e6edd6d5e1fa0329b8653c801147986f8d446", 700 | "type": "github" 701 | } 702 | }, 703 | "nixpkgs-regression": { 704 | "locked": { 705 | "lastModified": 1643052045, 706 | "narHash": "sha256-uGJ0VXIhWKGXxkeNnq4TvV3CIOkUJ3PAoLZ3HMzNVMw=", 707 | "owner": "NixOS", 708 | "repo": "nixpkgs", 709 | "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2", 710 | "type": "github" 711 | }, 712 | "original": { 713 | "owner": "NixOS", 714 | "repo": "nixpkgs", 715 | "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2", 716 | "type": "github" 717 | } 718 | }, 719 | "nixpkgs-regression_2": { 720 | "locked": { 721 | "lastModified": 1643052045, 722 | "narHash": "sha256-uGJ0VXIhWKGXxkeNnq4TvV3CIOkUJ3PAoLZ3HMzNVMw=", 723 | "owner": "NixOS", 724 | "repo": "nixpkgs", 725 | "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2", 726 | "type": "github" 727 | }, 728 | "original": { 729 | "owner": "NixOS", 730 | "repo": "nixpkgs", 731 | "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2", 732 | "type": "github" 733 | } 734 | }, 735 | "nixpkgs-regression_3": { 736 | "locked": { 737 | "lastModified": 1643052045, 738 | "narHash": "sha256-uGJ0VXIhWKGXxkeNnq4TvV3CIOkUJ3PAoLZ3HMzNVMw=", 739 | "owner": "NixOS", 740 | "repo": "nixpkgs", 741 | "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2", 742 | "type": "github" 743 | }, 744 | "original": { 745 | "owner": "NixOS", 746 | "repo": "nixpkgs", 747 | "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2", 748 | "type": "github" 749 | } 750 | }, 751 | "nixpkgs-regression_4": { 752 | "locked": { 753 | "lastModified": 1643052045, 754 | "narHash": "sha256-uGJ0VXIhWKGXxkeNnq4TvV3CIOkUJ3PAoLZ3HMzNVMw=", 755 | "owner": "NixOS", 756 | "repo": "nixpkgs", 757 | "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2", 758 | "type": "github" 759 | }, 760 | "original": { 761 | "owner": "NixOS", 762 | "repo": "nixpkgs", 763 | "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2", 764 | "type": "github" 765 | } 766 | }, 767 | "nixpkgs-regression_5": { 768 | "locked": { 769 | "lastModified": 1643052045, 770 | "narHash": "sha256-uGJ0VXIhWKGXxkeNnq4TvV3CIOkUJ3PAoLZ3HMzNVMw=", 771 | "owner": "NixOS", 772 | "repo": "nixpkgs", 773 | "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2", 774 | "type": "github" 775 | }, 776 | "original": { 777 | "owner": "NixOS", 778 | "repo": "nixpkgs", 779 | "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2", 780 | "type": "github" 781 | } 782 | }, 783 | "nixpkgs-regression_6": { 784 | "locked": { 785 | "lastModified": 1643052045, 786 | "narHash": "sha256-uGJ0VXIhWKGXxkeNnq4TvV3CIOkUJ3PAoLZ3HMzNVMw=", 787 | "owner": "NixOS", 788 | "repo": "nixpkgs", 789 | "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2", 790 | "type": "github" 791 | }, 792 | "original": { 793 | "owner": "NixOS", 794 | "repo": "nixpkgs", 795 | "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2", 796 | "type": "github" 797 | } 798 | }, 799 | "nixpkgs_2": { 800 | "locked": { 801 | "lastModified": 1734359947, 802 | "narHash": "sha256-1Noao/H+N8nFB4Beoy8fgwrcOQLVm9o4zKW1ODaqK9E=", 803 | "owner": "NixOS", 804 | "repo": "nixpkgs", 805 | "rev": "48d12d5e70ee91fe8481378e540433a7303dbf6a", 806 | "type": "github" 807 | }, 808 | "original": { 809 | "owner": "NixOS", 810 | "ref": "release-24.11", 811 | "repo": "nixpkgs", 812 | "type": "github" 813 | } 814 | }, 815 | "nixpkgs_3": { 816 | "locked": { 817 | "lastModified": 1758660139, 818 | "narHash": "sha256-cx4NsO/vQKecV1Ms5fqgLlprIwqTCOYtIZBB3/Lk8uk=", 819 | "owner": "NixOS", 820 | "repo": "nixpkgs", 821 | "rev": "824b0ed85e2daa262f104097bd523e08e9c0fcbe", 822 | "type": "github" 823 | }, 824 | "original": { 825 | "owner": "NixOS", 826 | "ref": "nixos-25.05-small", 827 | "repo": "nixpkgs", 828 | "type": "github" 829 | } 830 | }, 831 | "nixpkgs_4": { 832 | "locked": { 833 | "lastModified": 1758660139, 834 | "narHash": "sha256-cx4NsO/vQKecV1Ms5fqgLlprIwqTCOYtIZBB3/Lk8uk=", 835 | "owner": "NixOS", 836 | "repo": "nixpkgs", 837 | "rev": "824b0ed85e2daa262f104097bd523e08e9c0fcbe", 838 | "type": "github" 839 | }, 840 | "original": { 841 | "owner": "NixOS", 842 | "ref": "nixos-25.05-small", 843 | "repo": "nixpkgs", 844 | "type": "github" 845 | } 846 | }, 847 | "nixpkgs_5": { 848 | "locked": { 849 | "lastModified": 1758660139, 850 | "narHash": "sha256-cx4NsO/vQKecV1Ms5fqgLlprIwqTCOYtIZBB3/Lk8uk=", 851 | "owner": "NixOS", 852 | "repo": "nixpkgs", 853 | "rev": "824b0ed85e2daa262f104097bd523e08e9c0fcbe", 854 | "type": "github" 855 | }, 856 | "original": { 857 | "owner": "NixOS", 858 | "ref": "nixos-25.05-small", 859 | "repo": "nixpkgs", 860 | "type": "github" 861 | } 862 | }, 863 | "nixpkgs_6": { 864 | "locked": { 865 | "lastModified": 1755442223, 866 | "narHash": "sha256-VtMQg02B3kt1oejwwrGn50U9Xbjgzfbb5TV5Wtx8dKI=", 867 | "owner": "NixOS", 868 | "repo": "nixpkgs", 869 | "rev": "cd32a774ac52caaa03bcfc9e7591ac8c18617ced", 870 | "type": "github" 871 | }, 872 | "original": { 873 | "owner": "NixOS", 874 | "ref": "nixos-25.05-small", 875 | "repo": "nixpkgs", 876 | "type": "github" 877 | } 878 | }, 879 | "nixpkgs_7": { 880 | "locked": { 881 | "lastModified": 1750798007, 882 | "narHash": "sha256-ytz2Sju0py1oAaoROLAGJsl+H4Y5u7LH6wBA1xikstg=", 883 | "owner": "nixos", 884 | "repo": "nixpkgs", 885 | "rev": "b4e27ca2789ed6ed26a2d0472e757779e4195b63", 886 | "type": "github" 887 | }, 888 | "original": { 889 | "owner": "nixos", 890 | "ref": "master", 891 | "repo": "nixpkgs", 892 | "type": "github" 893 | } 894 | }, 895 | "root": { 896 | "inputs": { 897 | "flake-utils": "flake-utils", 898 | "nix_2_24": "nix_2_24", 899 | "nix_2_26": "nix_2_26", 900 | "nix_2_28": "nix_2_28", 901 | "nix_2_29": "nix_2_29", 902 | "nix_2_30": "nix_2_30", 903 | "nix_2_31": "nix_2_31", 904 | "nixpkgs": "nixpkgs_7" 905 | } 906 | }, 907 | "systems": { 908 | "locked": { 909 | "lastModified": 1681028828, 910 | "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", 911 | "owner": "nix-systems", 912 | "repo": "default", 913 | "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", 914 | "type": "github" 915 | }, 916 | "original": { 917 | "owner": "nix-systems", 918 | "repo": "default", 919 | "type": "github" 920 | } 921 | } 922 | }, 923 | "root": "root", 924 | "version": 7 925 | } 926 | --------------------------------------------------------------------------------