The code and data behind xeiaso.net
5
fork

Configure Feed

Select the types of activity you want to include in your feed.

niv (#114)

authored by

Christine Dodrill and committed by
GitHub
ae03b169 a7849dd6

+163 -7
+26
nix/sources.json
··· 1 + { 2 + "niv": { 3 + "branch": "master", 4 + "description": "Easy dependency management for Nix projects", 5 + "homepage": "https://github.com/nmattia/niv", 6 + "owner": "nmattia", 7 + "repo": "niv", 8 + "rev": "2ecfd86b631714b457e56d70dd83fa60435baeb6", 9 + "sha256": "01j6727cws8blg1npp54b4w6xa0gpgyzhyws2vqgp8clnlnmqqhi", 10 + "type": "tarball", 11 + "url": "https://github.com/nmattia/niv/archive/2ecfd86b631714b457e56d70dd83fa60435baeb6.tar.gz", 12 + "url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz" 13 + }, 14 + "vgo2nix": { 15 + "branch": "master", 16 + "description": null, 17 + "homepage": null, 18 + "owner": "adisbladis", 19 + "repo": "vgo2nix", 20 + "rev": "1288e3dbf23ed79cef237661225df0afa30f8510", 21 + "sha256": "1xcf2g4n38zbizgqhyrmh440bdg3yap6h9nr22dmgm5hsml6mdia", 22 + "type": "tarball", 23 + "url": "https://github.com/adisbladis/vgo2nix/archive/1288e3dbf23ed79cef237661225df0afa30f8510.tar.gz", 24 + "url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz" 25 + } 26 + }
+134
nix/sources.nix
··· 1 + # This file has been generated by Niv. 2 + 3 + let 4 + 5 + # 6 + # The fetchers. fetch_<type> fetches specs of type <type>. 7 + # 8 + 9 + fetch_file = pkgs: spec: 10 + if spec.builtin or true then 11 + builtins_fetchurl { inherit (spec) url sha256; } 12 + else 13 + pkgs.fetchurl { inherit (spec) url sha256; }; 14 + 15 + fetch_tarball = pkgs: spec: 16 + if spec.builtin or true then 17 + builtins_fetchTarball { inherit (spec) url sha256; } 18 + else 19 + pkgs.fetchzip { inherit (spec) url sha256; }; 20 + 21 + fetch_git = spec: 22 + builtins.fetchGit { url = spec.repo; inherit (spec) rev ref; }; 23 + 24 + fetch_builtin-tarball = spec: 25 + builtins.trace 26 + '' 27 + WARNING: 28 + The niv type "builtin-tarball" will soon be deprecated. You should 29 + instead use `builtin = true`. 30 + 31 + $ niv modify <package> -a type=tarball -a builtin=true 32 + '' 33 + builtins_fetchTarball { inherit (spec) url sha256; }; 34 + 35 + fetch_builtin-url = spec: 36 + builtins.trace 37 + '' 38 + WARNING: 39 + The niv type "builtin-url" will soon be deprecated. You should 40 + instead use `builtin = true`. 41 + 42 + $ niv modify <package> -a type=file -a builtin=true 43 + '' 44 + (builtins_fetchurl { inherit (spec) url sha256; }); 45 + 46 + # 47 + # Various helpers 48 + # 49 + 50 + # The set of packages used when specs are fetched using non-builtins. 51 + mkPkgs = sources: 52 + let 53 + sourcesNixpkgs = 54 + import (builtins_fetchTarball { inherit (sources.nixpkgs) url sha256; }) {}; 55 + hasNixpkgsPath = builtins.any (x: x.prefix == "nixpkgs") builtins.nixPath; 56 + hasThisAsNixpkgsPath = <nixpkgs> == ./.; 57 + in 58 + if builtins.hasAttr "nixpkgs" sources 59 + then sourcesNixpkgs 60 + else if hasNixpkgsPath && ! hasThisAsNixpkgsPath then 61 + import <nixpkgs> {} 62 + else 63 + abort 64 + '' 65 + Please specify either <nixpkgs> (through -I or NIX_PATH=nixpkgs=...) or 66 + add a package called "nixpkgs" to your sources.json. 67 + ''; 68 + 69 + # The actual fetching function. 70 + fetch = pkgs: name: spec: 71 + 72 + if ! builtins.hasAttr "type" spec then 73 + abort "ERROR: niv spec ${name} does not have a 'type' attribute" 74 + else if spec.type == "file" then fetch_file pkgs spec 75 + else if spec.type == "tarball" then fetch_tarball pkgs spec 76 + else if spec.type == "git" then fetch_git spec 77 + else if spec.type == "builtin-tarball" then fetch_builtin-tarball spec 78 + else if spec.type == "builtin-url" then fetch_builtin-url spec 79 + else 80 + abort "ERROR: niv spec ${name} has unknown type ${builtins.toJSON spec.type}"; 81 + 82 + # Ports of functions for older nix versions 83 + 84 + # a Nix version of mapAttrs if the built-in doesn't exist 85 + mapAttrs = builtins.mapAttrs or ( 86 + f: set: with builtins; 87 + listToAttrs (map (attr: { name = attr; value = f attr set.${attr}; }) (attrNames set)) 88 + ); 89 + 90 + # fetchTarball version that is compatible between all the versions of Nix 91 + builtins_fetchTarball = { url, sha256 }@attrs: 92 + let 93 + inherit (builtins) lessThan nixVersion fetchTarball; 94 + in 95 + if lessThan nixVersion "1.12" then 96 + fetchTarball { inherit url; } 97 + else 98 + fetchTarball attrs; 99 + 100 + # fetchurl version that is compatible between all the versions of Nix 101 + builtins_fetchurl = { url, sha256 }@attrs: 102 + let 103 + inherit (builtins) lessThan nixVersion fetchurl; 104 + in 105 + if lessThan nixVersion "1.12" then 106 + fetchurl { inherit url; } 107 + else 108 + fetchurl attrs; 109 + 110 + # Create the final "sources" from the config 111 + mkSources = config: 112 + mapAttrs ( 113 + name: spec: 114 + if builtins.hasAttr "outPath" spec 115 + then abort 116 + "The values in sources.json should not have an 'outPath' attribute" 117 + else 118 + spec // { outPath = fetch config.pkgs name spec; } 119 + ) config.sources; 120 + 121 + # The "config" used by the fetchers 122 + mkConfig = 123 + { sourcesFile ? ./sources.json 124 + , sources ? builtins.fromJSON (builtins.readFile sourcesFile) 125 + , pkgs ? mkPkgs sources 126 + }: rec { 127 + # The sources, i.e. the attribute set of spec name to spec 128 + inherit sources; 129 + 130 + # The "pkgs" (evaluated nixpkgs) to use for e.g. non-builtin fetchers 131 + inherit pkgs; 132 + }; 133 + in 134 + mkSources (mkConfig {}) // { __functor = _: settings: mkSources (mkConfig settings); }
+3 -7
shell.nix
··· 1 1 let 2 - pkgs = import <nixpkgs> {}; 3 - in 4 - pkgs.mkShell { 5 - buildInputs = [ 6 - pkgs.go 7 - ]; 8 - } 2 + pkgs = import <nixpkgs> { }; 3 + sources = import ./nix/sources.nix; 4 + in pkgs.mkShell { buildInputs = [ pkgs.go sources.vgo2nix sources.niv ]; }