blob: f484c2ad766e7c313c00e79a386145948ff5d448 (
plain) (
blame)
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
|
{ stdenv, lib, pkgs }:
let
inherit (pkgs) callPackage;
# Takes a derivation and a list of binary names
# and returns an attribute set of `name -> path`.
# The list can also contain renames in the form of
# { use, as }, which goes `as -> usePath`.
getBins = drv: xs:
let f = x:
# TODO: typecheck
let x' = if builtins.isString x then { use = x; as = x; } else x;
in {
name = x'.as;
value = "${lib.getBin drv}/bin/${x'.use}";
};
in builtins.listToAttrs (builtins.map f xs);
# various nix utils and fun experiments
nixperiments =
let
src = pkgs.fetchFromGitHub {
owner = "Profpatsch";
repo = "nixperiments";
rev = "519cddb867af054f242cb318ea0c61efe56a2471";
sha256 = "1i11yr2q40l2ghccn5lydp3dbag8m7y9vl456ghzygyz48jzavf9";
};
in import src { nixpkgs = pkgs; };
testing = import ./testing {
inherit stdenv lib;
inherit (runExeclineFns) runExecline;
inherit (pkgs) runCommandLocal;
bin = getBins pkgs.s6PortableUtils [ "s6-touch" "s6-echo" ];
};
runExeclineFns =
# todo: factor out calling tests
let
it = import ./execline/run-execline.nix {
bin = getBins pkgs.execline [ "execlineb" "redirfd" "importas" "exec" ];
inherit stdenv lib;
};
itLocal = name: args: execline:
it name (args // {
derivationArgs = args.derivationArgs or {} // {
preferLocalBuild = true;
allowSubstitutes = false;
};
}) execline;
tests = import ./execline/run-execline-tests.nix {
# can’t use runExeclineLocal in the tests,
# because it is tested by the tests (well, it does
# work, but then you have to run the tests every time)
runExecline = it;
inherit (testing) drvSeqL;
inherit (pkgs) coreutils;
inherit stdenv;
bin = (getBins pkgs.execline [
"execlineb"
{ use = "if"; as = "execlineIf"; }
"redirfd" "importas"
])
// (getBins pkgs.s6PortableUtils
[ "s6-cat" "s6-grep" "s6-touch" "s6-test" "s6-chmod" ]);
};
in {
runExecline = it;
runExeclineLocal = name: args: execline:
testing.drvSeqL tests (itLocal name args execline);
};
writeExeclineFns = import ./execline/write-execline.nix {
inherit pkgs;
};
in rec {
inherit (nixperiments)
# filterSource by parsing a .gitignore file
filterSourceGitignore
# canonical pattern matching primitive
match
# generate an option parser for scripts
script
# derivation testing
drvSeq drvSeqL withTests
# using the nix evaluator as a json transformation runtime
json2json json2string;
backlight = callPackage ./backlight { inherit (pkgs.xorg) xbacklight; };
display-infos = callPackage ./display-infos { inherit sfttime; };
git-commit-index = callPackage ./git-commit-index { inherit script; };
nix-http-serve = callPackage ./nix-http-serve {};
nman = callPackage ./nman {};
sfttime = callPackage ./sfttime {};
show-qr-code = callPackage ./show-qr-code {};
warpspeed = callPackage ./warpspeed {
inherit (pkgs.haskellPackages) ghcWithPackages;
};
youtube2audiopodcast = callPackage ./youtube2audiopodcast {
inherit writeExecline getBins runInEmptyEnv sandbox;
};
inherit (callPackage ./utils-hs {})
nix-gen until watch-server
haskellPackages;
# patched version of droopy, with javascript user-enhancement
droopy = pkgs.droopy.overrideDerivation (old: {
src = pkgs.fetchFromGitHub {
owner = "Profpatsch";
repo = "Droopy";
rev = "55c60c612b913f9fbce9fceebbcb3a332152f1a4";
sha256 = "0jcazj9gkdf4k7vsi33dpw9myyy02gjihwsy36dfqq4bas312cq1";
};
installPhase = old.installPhase or "" + ''
mkdir -p $out/share/droopy
cp -r $src/static $out/share/droopy
'';
makeWrapperArgs = old.makeWrapperArgs or [] ++ [
"--set DROOPY_STATIC \"$out/share/droopy/static\""
];
});
inherit (runExeclineFns)
runExecline runExeclineLocal;
inherit (writeExeclineFns)
writeExecline writeExeclineBin;
inherit getBins;
inherit (import ./sandbox.nix {inherit pkgs writeExecline; })
sandbox runInEmptyEnv;
symlink = pkgs.callPackage ./execline/symlink.nix {
inherit runExecline;
};
importer = pkgs.callPackage ./execline/importer.nix {
inherit symlink;
};
}
|