commit
4ce91a2379
4 changed files with 186 additions and 0 deletions
@ -0,0 +1,13 @@
|
||||
{ |
||||
hs-pkg-name ? "wcwidth", |
||||
ghcSrc ? /home/ninjatrappeur/Code/perso/haskell/ghc |
||||
}: |
||||
let |
||||
ghcOverlay = |
||||
import ./overlays/ghc.nix { |
||||
inherit ghcSrc pkgs; |
||||
}; |
||||
nixpkgsConfig = { overlays = [ ghcOverlay ]; }; |
||||
nixpkgsSrc = (import ./nix/sources.nix).nixpkgs; |
||||
pkgs = import nixpkgsSrc nixpkgsConfig; |
||||
in pkgs.customGhcHEAD."${hs-pkg-name}" |
@ -0,0 +1,27 @@
|
||||
{ |
||||
"niv": { |
||||
"branch": "master", |
||||
"description": "Easy dependency management for Nix projects", |
||||
"homepage": "https://github.com/nmattia/niv", |
||||
"owner": "nmattia", |
||||
"repo": "niv", |
||||
"rev": "f73bf8d584148677b01859677a63191c31911eae", |
||||
"sha256": "0jlmrx633jvqrqlyhlzpvdrnim128gc81q5psz2lpp2af8p8q9qs", |
||||
"type": "tarball", |
||||
"url": "https://github.com/nmattia/niv/archive/f73bf8d584148677b01859677a63191c31911eae.tar.gz", |
||||
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz" |
||||
}, |
||||
"nixpkgs": { |
||||
"branch": "nixos-unstable", |
||||
"description": "A read-only mirror of NixOS/nixpkgs tracking the released channels. Send issues and PRs to", |
||||
"homepage": "https://github.com/NixOS/nixpkgs", |
||||
"owner": "NixOS", |
||||
"repo": "nixpkgs-channels", |
||||
"rev": "fce7562cf46727fdaf801b232116bc9ce0512049", |
||||
"sha256": "14rvi69ji61x3z88vbn17rg5vxrnw2wbnanxb7y0qzyqrj7spapx", |
||||
"type": "tarball", |
||||
"url": "https://github.com/NixOS/nixpkgs-channels/archive/fce7562cf46727fdaf801b232116bc9ce0512049.tar.gz", |
||||
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz", |
||||
"version": "nixos-unstable" |
||||
} |
||||
} |
@ -0,0 +1,134 @@
|
||||
# This file has been generated by Niv. |
||||
|
||||
let |
||||
|
||||
# |
||||
# The fetchers. fetch_<type> fetches specs of type <type>. |
||||
# |
||||
|
||||
fetch_file = pkgs: spec: |
||||
if spec.builtin or true then |
||||
builtins_fetchurl { inherit (spec) url sha256; } |
||||
else |
||||
pkgs.fetchurl { inherit (spec) url sha256; }; |
||||
|
||||
fetch_tarball = pkgs: spec: |
||||
if spec.builtin or true then |
||||
builtins_fetchTarball { inherit (spec) url sha256; } |
||||
else |
||||
pkgs.fetchzip { inherit (spec) url sha256; }; |
||||
|
||||
fetch_git = spec: |
||||
builtins.fetchGit { url = spec.repo; inherit (spec) rev ref; }; |
||||
|
||||
fetch_builtin-tarball = spec: |
||||
builtins.trace |
||||
'' |
||||
WARNING: |
||||
The niv type "builtin-tarball" will soon be deprecated. You should |
||||
instead use `builtin = true`. |
||||
|
||||
$ niv modify <package> -a type=tarball -a builtin=true |
||||
'' |
||||
builtins_fetchTarball { inherit (spec) url sha256; }; |
||||
|
||||
fetch_builtin-url = spec: |
||||
builtins.trace |
||||
'' |
||||
WARNING: |
||||
The niv type "builtin-url" will soon be deprecated. You should |
||||
instead use `builtin = true`. |
||||
|
||||
$ niv modify <package> -a type=file -a builtin=true |
||||
'' |
||||
(builtins_fetchurl { inherit (spec) url sha256; }); |
||||
|
||||
# |
||||
# Various helpers |
||||
# |
||||
|
||||
# The set of packages used when specs are fetched using non-builtins. |
||||
mkPkgs = sources: |
||||
let |
||||
sourcesNixpkgs = |
||||
import (builtins_fetchTarball { inherit (sources.nixpkgs) url sha256; }) {}; |
||||
hasNixpkgsPath = builtins.any (x: x.prefix == "nixpkgs") builtins.nixPath; |
||||
hasThisAsNixpkgsPath = <nixpkgs> == ./.; |
||||
in |
||||
if builtins.hasAttr "nixpkgs" sources |
||||
then sourcesNixpkgs |
||||
else if hasNixpkgsPath && ! hasThisAsNixpkgsPath then |
||||
import <nixpkgs> {} |
||||
else |
||||
abort |
||||
'' |
||||
Please specify either <nixpkgs> (through -I or NIX_PATH=nixpkgs=...) or |
||||
add a package called "nixpkgs" to your sources.json. |
||||
''; |
||||
|
||||
# The actual fetching function. |
||||
fetch = pkgs: name: spec: |
||||
|
||||
if ! builtins.hasAttr "type" spec then |
||||
abort "ERROR: niv spec ${name} does not have a 'type' attribute" |
||||
else if spec.type == "file" then fetch_file pkgs spec |
||||
else if spec.type == "tarball" then fetch_tarball pkgs spec |
||||
else if spec.type == "git" then fetch_git spec |
||||
else if spec.type == "builtin-tarball" then fetch_builtin-tarball spec |
||||
else if spec.type == "builtin-url" then fetch_builtin-url spec |
||||
else |
||||
abort "ERROR: niv spec ${name} has unknown type ${builtins.toJSON spec.type}"; |
||||
|
||||
# Ports of functions for older nix versions |
||||
|
||||
# a Nix version of mapAttrs if the built-in doesn't exist |
||||
mapAttrs = builtins.mapAttrs or ( |
||||
f: set: with builtins; |
||||
listToAttrs (map (attr: { name = attr; value = f attr set.${attr}; }) (attrNames set)) |
||||
); |
||||
|
||||
# fetchTarball version that is compatible between all the versions of Nix |
||||
builtins_fetchTarball = { url, sha256 }@attrs: |
||||
let |
||||
inherit (builtins) lessThan nixVersion fetchTarball; |
||||
in |
||||
if lessThan nixVersion "1.12" then |
||||
fetchTarball { inherit url; } |
||||
else |
||||
fetchTarball attrs; |
||||
|
||||
# fetchurl version that is compatible between all the versions of Nix |
||||
builtins_fetchurl = { url, sha256 }@attrs: |
||||
let |
||||
inherit (builtins) lessThan nixVersion fetchurl; |
||||
in |
||||
if lessThan nixVersion "1.12" then |
||||
fetchurl { inherit url; } |
||||
else |
||||
fetchurl attrs; |
||||
|
||||
# Create the final "sources" from the config |
||||
mkSources = config: |
||||
mapAttrs ( |
||||
name: spec: |
||||
if builtins.hasAttr "outPath" spec |
||||
then abort |
||||
"The values in sources.json should not have an 'outPath' attribute" |
||||
else |
||||
spec // { outPath = fetch config.pkgs name spec; } |
||||
) config.sources; |
||||
|
||||
# The "config" used by the fetchers |
||||
mkConfig = |
||||
{ sourcesFile ? ./sources.json |
||||
, sources ? builtins.fromJSON (builtins.readFile sourcesFile) |
||||
, pkgs ? mkPkgs sources |
||||
}: rec { |
||||
# The sources, i.e. the attribute set of spec name to spec |
||||
inherit sources; |
||||
|
||||
# The "pkgs" (evaluated nixpkgs) to use for e.g. non-builtin fetchers |
||||
inherit pkgs; |
||||
}; |
||||
in |
||||
mkSources (mkConfig {}) // { __functor = _: settings: mkSources (mkConfig settings); } |
@ -0,0 +1,12 @@
|
||||
{ ghcSrc, pkgs }: |
||||
let |
||||
ghcOverride = self: super: { |
||||
ghc = super.ghc.overrideDerivation (oldGhc: { |
||||
src = ghcSrc; |
||||
# Autotools need git to find the rev of the local ghc git repo. |
||||
nativeBuildInputs = oldGhc.nativeBuildInputs ++ [ pkgs.git ]; |
||||
}); |
||||
}; |
||||
in self: super: { |
||||
customGhcHEAD = super.haskell.packages.ghcHEAD.extend ghcOverride; |
||||
} |
Loading…
Reference in new issue