1{ pkgs }:
2
3{
4 buildInputs ? [ ],
5 generated,
6 ...
7}@attrs:
8
9let
10 # Fetches the bower packages. `generated` should be the result of a
11 # `bower2nix` command.
12 bowerPackages = import generated {
13 inherit (pkgs) buildEnv fetchbower;
14 };
15
16in
17pkgs.stdenv.mkDerivation (
18 attrs
19 // {
20 name = "bower_components-" + attrs.name;
21
22 inherit bowerPackages;
23
24 builder = builtins.toFile "builder.sh" ''
25 # The project's bower.json is required
26 cp $src/bower.json .
27
28 # Dereference symlinks -- bower doesn't like them
29 cp --recursive --reflink=auto \
30 --dereference --no-preserve=mode \
31 $bowerPackages bc
32
33 # Bower install in offline mode -- links together the fetched
34 # bower packages.
35 HOME=$PWD bower \
36 --config.storage.packages=bc/packages \
37 --config.storage.registry=bc/registry \
38 --offline install
39
40 # Sets up a single bower_components directory within
41 # the output derivation.
42 mkdir -p $out
43 mv bower_components $out
44 '';
45
46 buildInputs = buildInputs ++ [
47 pkgs.git
48 pkgs.nodePackages.bower
49 ];
50 }
51)