blob: 2e57656cc84a0c53fa076f8e465079c6123beda8 (
plain)
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
|
{pkgs}: {
pkg,
binName ? pkg.meta.mainProgram,
extraFlags ? [],
extraWrapperFlags ? [],
extraPkgs ? [],
extraEnv ? {},
postBuild ? "",
hidePkgs ? false,
reducePath ? false,
}: let
extraFlagsArgs = pkgs.lib.pipe extraFlags [
(builtins.map (x: ''--add-flags "${x}" ''))
(builtins.concatStringsSep " ")
];
extraWrapperFlagsArgs = builtins.concatStringsSep " " extraWrapperFlags;
pathArg =
if (extraPkgs != [])
then ''--prefix PATH : "${pkgs.lib.makeBinPath extraPkgs}"''
else "";
# Looks like {
# VAR = "value";
# VAR2 = "value_again";
# }
envArgs = pkgs.lib.pipe extraEnv [
(builtins.mapAttrs (k: v: ''--set ${k} "${v}"''))
builtins.attrValues
(builtins.concatStringsSep " ")
];
extraPkgs2 =
if reducePath
then
(pkgs.symlinkJoin {
name = "${binName}-extra-pkgs";
paths = extraPkgs;
})
else extraPkgs;
wrapped-program = pkgs.symlinkJoin {
name = "${binName}-wrapped-program";
paths = [pkg] ++ extraPkgs2;
buildInputs = [pkgs.makeWrapper];
postBuild = ''
${postBuild}
wrapProgram $out/bin/${binName} ${extraFlagsArgs} ${pathArg} ${envArgs} ${extraWrapperFlagsArgs}
'';
};
in
if hidePkgs
then
(pkgs.linkFarm "${binName}-only-bin" [
{
name = "bin/${binName}";
path = "${wrapped-program}/bin/${binName}";
}
])
else wrapped-program
|