|
10 | 10 | forAllSystems = nixpkgs.lib.genAttrs systems; |
11 | 11 | in |
12 | 12 | { |
13 | | - packages = forAllSystems ( |
14 | | - system: |
15 | | - let |
16 | | - pkgs = import nixpkgs { system = system; }; |
17 | | - dependencies = with pkgs; [ nodejs_23 ]; |
18 | | - nodeModules = pkgs.buildNpmPackage { |
19 | | - pname = "buttonkin-dependencies"; |
20 | | - version = "1.0.0"; |
21 | | - src = pkgs.runCommand "source" { } '' |
22 | | - mkdir -p $out |
23 | | - cp ${./package.json} $out/package.json |
24 | | - cp ${./package-lock.json} $out/package-lock.json |
25 | | - ''; |
26 | | - npmDepsHash = "sha256-FGMvzbHIkV/oOdqD7X3ULn0Vdi+1Exmxw+nmE5kTc6s="; |
27 | | - installPhase = "mkdir -p $out && cp -r node_modules $out/"; |
28 | | - dontNpmBuild = true; |
29 | | - }; |
30 | | - |
31 | | - makeScript = |
32 | | - name: |
33 | | - let |
34 | | - baseScript = pkgs.writeScriptBin name (builtins.readFile ./bin/${name}); |
35 | | - patchedScript = baseScript.overrideAttrs (old: { |
36 | | - buildCommand = "${old.buildCommand}\n patchShebangs $out"; |
37 | | - }); |
38 | | - in |
39 | | - pkgs.symlinkJoin { |
40 | | - name = name; |
41 | | - paths = [ patchedScript ] ++ dependencies; |
42 | | - buildInputs = [ pkgs.makeWrapper ]; |
43 | | - postBuild = '' |
44 | | - wrapProgram $out/bin/${name} --prefix PATH : $out/bin |
45 | | - ''; |
46 | | - }; |
47 | | - |
48 | | - scriptNames = builtins.attrNames (builtins.readDir ./bin); |
49 | | - scriptPackages = nixpkgs.lib.genAttrs scriptNames makeScript; |
50 | | - |
51 | | - sitePackage = pkgs.stdenv.mkDerivation { |
52 | | - name = "buttonkin"; |
53 | | - src = ./.; |
54 | | - buildInputs = dependencies ++ [ nodeModules ]; |
55 | | - |
56 | | - buildPhase = '' |
57 | | - mkdir -p $TMPDIR/build_dir |
58 | | - cd $TMPDIR/build_dir |
59 | | -
|
60 | | - cp -r $src/* . |
61 | | - cp -r $src/.image-cache . |
62 | | - chmod -R a+rwX .image-cache |
63 | | - cp $src/.eleventy.js . |
64 | | -
|
65 | | - ln -s ${nodeModules}/node_modules node_modules |
66 | | -
|
67 | | - mkdir -p src/_data |
68 | | - chmod -R +w src/_data |
69 | | -
|
70 | | - ${scriptPackages.build}/bin/build |
71 | | - ''; |
72 | | - |
73 | | - installPhase = '' |
74 | | - mkdir -p $out |
75 | | - mv $TMPDIR/build_dir/_site $out/ |
76 | | - mv $TMPDIR/build_dir/.image-cache $out/ |
77 | | - ''; |
78 | | - |
79 | | - dontFixup = true; |
80 | | - }; |
81 | | - |
82 | | - allPackages = { |
83 | | - site = sitePackage; |
84 | | - nodeModules = nodeModules; |
85 | | - } // scriptPackages; |
86 | | - in |
87 | | - allPackages |
88 | | - ); |
89 | | - |
90 | | - defaultPackage = forAllSystems (system: self.packages.${system}.site); |
91 | | - |
92 | 13 | devShells = forAllSystems ( |
93 | 14 | system: |
94 | 15 | let |
95 | 16 | pkgs = import nixpkgs { system = system; }; |
96 | 17 |
|
97 | 18 | dependencies = with pkgs; [ |
98 | | - biome |
99 | 19 | nodejs_23 |
100 | 20 | ]; |
101 | | - |
102 | | - nodeModules = pkgs.buildNpmPackage { |
103 | | - pname = "buttonkin-dependencies"; |
104 | | - version = "1.0.0"; |
105 | | - src = pkgs.runCommand "source" { } '' |
106 | | - mkdir -p $out |
107 | | - cp ${./package.json} $out/package.json |
108 | | - cp ${./package-lock.json} $out/package-lock.json |
109 | | - ''; |
110 | | - npmDepsHash = "sha256-FGMvzbHIkV/oOdqD7X3ULn0Vdi+1Exmxw+nmE5kTc6s="; |
111 | | - installPhase = "mkdir -p $out && cp -r node_modules $out/"; |
112 | | - dontNpmBuild = true; |
113 | | - }; |
114 | | - |
115 | | - makeScript = |
116 | | - name: |
117 | | - let |
118 | | - baseScript = pkgs.writeScriptBin name (builtins.readFile ./bin/${name}); |
119 | | - patchedScript = baseScript.overrideAttrs (old: { |
120 | | - buildCommand = "${old.buildCommand}\n patchShebangs $out"; |
121 | | - }); |
122 | | - in |
123 | | - pkgs.symlinkJoin { |
124 | | - name = name; |
125 | | - paths = [ patchedScript ] ++ dependencies; |
126 | | - buildInputs = [ pkgs.makeWrapper ]; |
127 | | - postBuild = '' |
128 | | - wrapProgram $out/bin/${name} --prefix PATH : $out/bin |
129 | | - ''; |
130 | | - }; |
131 | | - |
132 | | - scriptNames = builtins.attrNames (builtins.readDir ./bin); |
133 | | - scriptPackages = nixpkgs.lib.genAttrs scriptNames makeScript; |
134 | | - |
135 | | - scriptPackageList = builtins.attrValues scriptPackages; |
136 | 21 | in |
137 | 22 | { |
138 | 23 | default = pkgs.mkShell { |
139 | | - buildInputs = dependencies ++ scriptPackageList; |
| 24 | + buildInputs = dependencies; |
140 | 25 |
|
141 | 26 | shellHook = '' |
142 | | - rm -rf node_modules |
143 | | - ln -s ${nodeModules}/node_modules node_modules |
144 | 27 | cat <<EOF |
145 | 28 |
|
146 | 29 | Development environment ready! |
147 | 30 |
|
148 | 31 | Available commands: |
149 | | - - 'serve' - Start development server |
150 | | - - 'build' - Build the site in the _site directory |
151 | | - - 'dryrun' - Perform a dry run build |
152 | | - - 'test_flake' - Test building a site using flake.nix |
153 | | - - 'lint' - Lint all files in src using Biome |
| 32 | + - 'npm run serve' # Start development server |
| 33 | + - 'npm run build' # Build the site in the _site directory |
154 | 34 |
|
155 | 35 | EOF |
156 | 36 |
|
|
0 commit comments