This repository has been archived by the owner on Feb 22, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 4
/
default.nix
61 lines (58 loc) · 2.26 KB
/
default.nix
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# This file acts like the main file of an entire <nixpkgs>.
# It imports a full nixpkgs from our pinned submodule,
# and extends it with our overlay.
#
# This is meant to be used as a channel.
{ pkgsPath ? null
, overlays ? []
, system ? null
}:
let
## Horrible; copied from nixpkgs to get extra overlays to work with our overlay.
homeDir = builtins.getEnv "HOME";
try = x: def: let res = builtins.tryEval x; in if res.success then res.value else def;
extra-overlays = with builtins; let
isDir = path: pathExists (path + "/.");
pathOverlays = try <nixpkgs-overlays> "";
homeOverlaysFile = homeDir + "/.config/nixpkgs/overlays.nix";
homeOverlaysDir = homeDir + "/.config/nixpkgs/overlays";
overlays = path:
# check if the path is a directory or a file
if isDir path then
# it's a directory, so the set of overlays from the directory, ordered lexicographically
let content = readDir path; in
map (n: import (path + ("/" + n)))
(builtins.filter (n: builtins.match ".*\\.nix" n != null || pathExists (path + ("/" + n + "/default.nix")))
(attrNames content))
else
# it's a file, so the result is the contents of the file itself
import path;
in
if pathOverlays != "" && pathExists pathOverlays then overlays pathOverlays
else if pathExists homeOverlaysFile && pathExists homeOverlaysDir then
throw ''
Nixpkgs overlays can be specified with ${homeOverlaysFile} or ${homeOverlaysDir}, but not both.
Please remove one of them and try again.
''
else if pathExists homeOverlaysFile then
if isDir homeOverlaysFile then
throw (homeOverlaysFile + " should be a file")
else overlays homeOverlaysFile
else if pathExists homeOverlaysDir then
if !(isDir homeOverlaysDir) then
throw (homeOverlaysDir + " should be a directory")
else overlays homeOverlaysDir
else [];
in (
(import ./nixpkgs) ({
overlays = [(import ./overlay { flavor = "stable"; })] ++ extra-overlays;
} // (
if system != null then { inherit system; } else {}
))
) // {
master = (import ./nixpkgs) ({
overlays = [(import ./overlay { flavor = "master"; })] ++ extra-overlays;
} // (
if system != null then { inherit system; } else {}
));
}