diff --git a/flake.nix b/flake.nix index ea8787858..4807d5240 100644 --- a/flake.nix +++ b/flake.nix @@ -51,8 +51,6 @@ '' self.nixosModules.nvf; }; - - pins = import ./npins; }; perSystem = {pkgs, ...}: { @@ -62,6 +60,8 @@ # syntax elements and results in unreadable code. formatter = pkgs.alejandra; + legacyPackages.pins = pkgs.callPackages ./npins/sources.nix {}; + # Check if codebase is properly formatted. # This can be initiated with `nix build .#checks..nix-fmt` # or with `nix flake check` diff --git a/npins/default.nix b/npins/default.nix deleted file mode 100644 index 5e7d086ee..000000000 --- a/npins/default.nix +++ /dev/null @@ -1,80 +0,0 @@ -# Generated by npins. Do not modify; will be overwritten regularly -let - data = builtins.fromJSON (builtins.readFile ./sources.json); - version = data.version; - - mkSource = - spec: - assert spec ? type; - let - path = - if spec.type == "Git" then - mkGitSource spec - else if spec.type == "GitRelease" then - mkGitSource spec - else if spec.type == "PyPi" then - mkPyPiSource spec - else if spec.type == "Channel" then - mkChannelSource spec - else - builtins.throw "Unknown source type ${spec.type}"; - in - spec // { outPath = path; }; - - mkGitSource = - { - repository, - revision, - url ? null, - hash, - branch ? null, - ... - }: - assert repository ? type; - # At the moment, either it is a plain git repository (which has an url), or it is a GitHub/GitLab repository - # In the latter case, there we will always be an url to the tarball - if url != null then - (builtins.fetchTarball { - inherit url; - sha256 = hash; # FIXME: check nix version & use SRI hashes - }) - else - assert repository.type == "Git"; - let - urlToName = - url: rev: - let - matched = builtins.match "^.*/([^/]*)(\\.git)?$" repository.url; - - short = builtins.substring 0 7 rev; - - appendShort = if (builtins.match "[a-f0-9]*" rev) != null then "-${short}" else ""; - in - "${if matched == null then "source" else builtins.head matched}${appendShort}"; - name = urlToName repository.url revision; - in - builtins.fetchGit { - url = repository.url; - rev = revision; - inherit name; - # hash = hash; - }; - - mkPyPiSource = - { url, hash, ... }: - builtins.fetchurl { - inherit url; - sha256 = hash; - }; - - mkChannelSource = - { url, hash, ... }: - builtins.fetchTarball { - inherit url; - sha256 = hash; - }; -in -if version == 3 then - builtins.mapAttrs (_: mkSource) data.pins -else - throw "Unsupported format version ${toString version} in sources.json. Try running `npins upgrade`" diff --git a/npins/sources.nix b/npins/sources.nix new file mode 100644 index 000000000..a291f6653 --- /dev/null +++ b/npins/sources.nix @@ -0,0 +1,80 @@ +# Based off of: +# https://github.com/NixOS/nixpkgs/blob/776c3bee4769c616479393aeefceefeda16b6fcb/pkgs/tools/nix/npins/source.nix +{ + lib, + fetchurl, + fetchgit, + fetchzip, +}: +builtins.mapAttrs + ( + _: + let + getZip = + { url, hash, ... }: + fetchzip { + inherit url; + sha256 = hash; + extension = "tar"; + + }; + mkGitSource = + { + repository, + revision, + url ? null, + hash, + ... + }@attrs: + assert repository ? type; + if url != null then + getZip attrs + else + assert repository.type == "Git"; + let + urlToName = + url: rev: + let + matched = builtins.match "^.*/([^/]*)(\\.git)?$" repository.url; + short = builtins.substring 0 7 rev; + appendShort = if (builtins.match "[a-f0-9]*" rev) != null then "-${short}" else ""; + in + "${if matched == null then "source" else builtins.head matched}${appendShort}"; + name = urlToName repository.url revision; + in + fetchgit { + inherit name; + inherit (repository) url; + rev = revision; + sha256 = hash; + }; + + mkPyPiSource = + { url, hash, ... }: + fetchurl { + inherit url; + sha256 = hash; + }; + in + spec: + assert spec ? type; + let + func = + { + Git = mkGitSource; + GitRelease = mkGitSource; + PyPi = mkPyPiSource; + Channel = getZip; + } + .${spec.type} or (builtins.throw "Unknown source type ${spec.type}"); + in + spec // { outPath = func spec; } + + ) + ( + let + json = lib.importJSON ./sources.json; + in + assert lib.assertMsg (json.version == 3) "Npins version mismatch!"; + json.pins + )