From 9ba34c6a05b0110e39b6e9cc0f26e0fa5efc0808 Mon Sep 17 00:00:00 2001 From: lewo Date: Fri, 26 Apr 2019 12:41:13 +0200 Subject: [PATCH] Use niv to fetch the nix-container-images repository (#5) This allows us to easily update it by running `niv update`. --- default.nix | 6 ++--- nix/sources.json | 13 ++++++++++ nix/sources.nix | 67 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 82 insertions(+), 4 deletions(-) create mode 100644 nix/sources.json create mode 100644 nix/sources.nix diff --git a/default.nix b/default.nix index 0e70ba1..e67957c 100644 --- a/default.nix +++ b/default.nix @@ -1,9 +1,7 @@ { nixpkgs ? }: let - nix-container-images = builtins.fetchTarball { - url = "https://github.com/nlewo/nix-container-images/archive/7577da87f7249442b51359e36a0f0493949a14d6.tar.gz"; - sha256 = "0cv3b8gngvb2my1rqs2kxszmwb3s3i72j1wp6jin5f1wjp9km32w"; - }; + sources = import ./nix/sources.nix; + nix-container-images = sources."nix-container-images"; in import nixpkgs { # docker images run on Linux diff --git a/nix/sources.json b/nix/sources.json new file mode 100644 index 0000000..a1973ad --- /dev/null +++ b/nix/sources.json @@ -0,0 +1,13 @@ +{ + "nix-container-images": { + "url": "https://github.com/cloudwatt/nix-container-images/archive/cf1dbb827946b22a36d0eeb64a0e062d5e7cba53.tar.gz", + "owner": "cloudwatt", + "branch": "master", + "url_template": "https://github.com///archive/.tar.gz", + "repo": "nix-container-images", + "type": "tarball", + "sha256": "0svfqzp91qrx82w5wy0ax8vx54mqa1hgipbb1jbd96wqxhbxwgsl", + "description": "Write container images as NixOS machines", + "rev": "cf1dbb827946b22a36d0eeb64a0e062d5e7cba53" + } +} \ No newline at end of file diff --git a/nix/sources.nix b/nix/sources.nix new file mode 100644 index 0000000..dc040f8 --- /dev/null +++ b/nix/sources.nix @@ -0,0 +1,67 @@ +# This file has been generated by Niv. + +# A record, from name to path, of the third-party packages +with rec +{ + pkgs = + if hasNixpkgsPath + then + if hasThisAsNixpkgsPath + then import (builtins_fetchTarball { inherit (sources_nixpkgs) url sha256; }) {} + else import {} + else + import (builtins_fetchTarball { inherit (sources_nixpkgs) url sha256; }) {}; + + sources_nixpkgs = + if builtins.hasAttr "nixpkgs" sources + then sources.nixpkgs + else abort + '' + Please specify either (through -I or NIX_PATH=nixpkgs=...) or + add a package called "nixpkgs" to your sources.json. + ''; + + builtins_fetchTarball = + # fetchTarball version that is compatible between all the versions of + # Nix + { url, sha256 }@attrs: + let + inherit (builtins) lessThan nixVersion fetchTarball; + in + if lessThan nixVersion "1.12" then + fetchTarball { inherit url; } + else + fetchTarball attrs; + + hasNixpkgsPath = (builtins.tryEval ).success; + hasThisAsNixpkgsPath = + (builtins.tryEval ).success && == ./.; + + sources = builtins.fromJSON (builtins.readFile ./sources.json); + + mapAttrs = builtins.mapAttrs or + (f: set: with builtins; + listToAttrs (map (attr: { name = attr; value = f attr set.${attr}; }) (attrNames set))); + + getFetcher = spec: + let fetcherName = + if builtins.hasAttr "type" spec + then builtins.getAttr "type" spec + else "tarball"; + in builtins.getAttr fetcherName { + "tarball" = pkgs.fetchzip; + "file" = pkgs.fetchurl; + }; +}; +# NOTE: spec must _not_ have an "outPath" attribute +mapAttrs (_: spec: + if builtins.hasAttr "outPath" spec + then abort + "The values in sources.json should not have an 'outPath' attribute" + else + if builtins.hasAttr "url" spec && builtins.hasAttr "sha256" spec + then + spec // + { outPath = getFetcher spec { inherit (spec) url sha256; } ; } + else spec + ) sources