Skip to content

Commit b3818e7

Browse files
authored
Merge pull request #14 from mlabs-haskell/jared/add-data-to-typescript-flake
Added `data` + `dataDir` to the TypeScript flake
2 parents 7a2e13e + a69c674 commit b3818e7

File tree

1 file changed

+48
-3
lines changed

1 file changed

+48
-3
lines changed

flake-lang/typescript/flake-typescript.nix

Lines changed: 48 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,16 @@ pkgs:
3838
, # `testTools` are extra derivations to append to the `buildInputs` for
3939
# the tests (see the variable `test`)
4040
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+
,
4151
}:
4252
pkgs.lib.makeExtensible
4353
(self: with self.__typescriptFlake__;
@@ -59,6 +69,35 @@ pkgs.lib.makeExtensible
5969
npmExtraDependenciesFolder = "./extra-dependencies";
6070

6171

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+
};
62101

63102
# Creates a nix derivation with all the extra npm dependencies provided
64103
# by nix.
@@ -85,7 +124,10 @@ pkgs.lib.makeExtensible
85124
name = cmdName;
86125
runtimeInputs = [ ];
87126
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}
89131
90132
cp -r ${pkgs.lib.escapeShellArg mkNpmExtraDependencies}/. ${pkgs.lib.escapeShellArg npmExtraDependenciesFolder}
91133
@@ -100,12 +142,13 @@ pkgs.lib.makeExtensible
100142
srcWithNode2nix = pkgs.stdenv.mkDerivation {
101143
name = "${name}-node2nix";
102144
inherit src;
103-
buildInputs = [ pkgs.node2nix nodejs mkNpmExtraDependenciesCmd ];
145+
buildInputs = [ pkgs.node2nix nodejs mkNpmExtraDependenciesCmd dataLinkFarmCmd ];
104146
configurePhase =
105147
''
106148
runHook preConfigure
107149
108150
${pkgs.lib.escapeShellArg mkNpmExtraDependenciesCmd.name}
151+
${pkgs.lib.escapeShellArg dataLinkFarmCmd.name}
109152
110153
runHook postConfigure
111154
'';
@@ -243,12 +286,14 @@ pkgs.lib.makeExtensible
243286
};
244287

245288
shell = pkgs.mkShell {
246-
packages = [ nodejs mkNpmExtraDependenciesCmd ] ++ devShellTools;
289+
packages = [ nodejs mkNpmExtraDependenciesCmd dataLinkFarmCmd ] ++ devShellTools;
247290

248291
shellHook =
249292
''
250293
${pkgs.lib.escapeShellArg mkNpmExtraDependenciesCmd.name}
251294
295+
${pkgs.lib.escapeShellArg dataLinkFarmCmd.name}
296+
252297
export NODE_PATH=${pkgs.lib.escapeShellArg "${npmPackage}/lib/node_modules/${srcWithNode2nixIfd.args.packageName}/node_modules"}
253298
254299
[[ -e node_modules ]] && echo 'flake-lang.nix: removing existing `node_modules`'

0 commit comments

Comments
 (0)