Skip to content

Commit c200a51

Browse files
author
jared
committed
Added data + dataDir to the TypeScript flake
1 parent 152cd83 commit c200a51

File tree

1 file changed

+45
-2
lines changed

1 file changed

+45
-2
lines changed

flake-lang/typescript/flake-typescript.nix

Lines changed: 45 additions & 2 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
'';

0 commit comments

Comments
 (0)