38
38
, # `testTools` are extra derivations to append to the `buildInputs` for
39
39
# the tests (see the variable `test`)
40
40
testTools ? [ ]
41
+ , # Extra data to include in the project `${name}-typescript` in the directory
42
+ # `dataDir`.
43
+ # Type is:
44
+ # - List of attribute sets like:
45
+ # [ { name = "name"; path = "/nix/store/..."; } ]
46
+ # Internally, this uses `pkgs.linkFarm`.
47
+ data ? [ ]
48
+ , # Name of the directory to put `data` in.
49
+ dataDir ? "data"
50
+ ,
41
51
} :
42
52
pkgs . lib . makeExtensible
43
53
( self : with self . __typescriptFlake__ ;
@@ -59,6 +69,35 @@ pkgs.lib.makeExtensible
59
69
npmExtraDependenciesFolder = "./extra-dependencies" ;
60
70
61
71
72
+ # Creates something like
73
+ # /nix/store/....-${name}-data
74
+ # |-- foobar -> /nix/store/...
75
+ # `-- hello-test -> /nix/store/...
76
+ # see `pkgs.linkFarm` (a trivial builder) for details
77
+ dataLinkFarm = pkgs . linkFarm "${ name } -data" data ;
78
+
79
+ # Directory to put the `data` in
80
+ dataFolder = dataDir ;
81
+
82
+ # Shell script to create the dataLinkFarm in the directory `dataDir`.
83
+ dataLinkFarmCmd =
84
+ let cmdName = "${ name } -data" ;
85
+ in pkgs . writeShellApplication rec {
86
+ name = cmdName ;
87
+ runtimeInputs = [ ] ;
88
+ text =
89
+ ''
90
+ printf "flake-lang.nix: %s: copying \`%s/.\` to \`%s\`\n" \
91
+ ${ pkgs . lib . escapeShellArg name } \
92
+ ${ pkgs . lib . escapeShellArg dataLinkFarm } \
93
+ ${ pkgs . lib . escapeShellArg dataFolder }
94
+
95
+ cp -Lr ${ pkgs . lib . escapeShellArg dataLinkFarm } \
96
+ ${ pkgs . lib . escapeShellArg dataFolder }
97
+
98
+ chmod -R "=755" ${ pkgs . lib . escapeShellArg dataFolder }
99
+ '' ;
100
+ } ;
62
101
63
102
# Creates a nix derivation with all the extra npm dependencies provided
64
103
# by nix.
@@ -85,7 +124,10 @@ pkgs.lib.makeExtensible
85
124
name = cmdName ;
86
125
runtimeInputs = [ ] ;
87
126
text = ''
88
- printf "%s: copying \`%s/.\` to \`%s\`\n" ${ pkgs . lib . escapeShellArg name } ${ pkgs . lib . escapeShellArg mkNpmExtraDependencies } ${ pkgs . lib . escapeShellArg npmExtraDependenciesFolder }
127
+ printf "flake-lang.nix: %s: copying \`%s/.\` to \`%s\`\n" \
128
+ ${ pkgs . lib . escapeShellArg name } \
129
+ ${ pkgs . lib . escapeShellArg mkNpmExtraDependencies } \
130
+ ${ pkgs . lib . escapeShellArg npmExtraDependenciesFolder }
89
131
90
132
cp -r ${ pkgs . lib . escapeShellArg mkNpmExtraDependencies } /. ${ pkgs . lib . escapeShellArg npmExtraDependenciesFolder }
91
133
@@ -100,12 +142,13 @@ pkgs.lib.makeExtensible
100
142
srcWithNode2nix = pkgs . stdenv . mkDerivation {
101
143
name = "${ name } -node2nix" ;
102
144
inherit src ;
103
- buildInputs = [ pkgs . node2nix nodejs mkNpmExtraDependenciesCmd ] ;
145
+ buildInputs = [ pkgs . node2nix nodejs mkNpmExtraDependenciesCmd dataLinkFarmCmd ] ;
104
146
configurePhase =
105
147
''
106
148
runHook preConfigure
107
149
108
150
${ pkgs . lib . escapeShellArg mkNpmExtraDependenciesCmd . name }
151
+ ${ pkgs . lib . escapeShellArg dataLinkFarmCmd . name }
109
152
110
153
runHook postConfigure
111
154
'' ;
0 commit comments