summaryrefslogtreecommitdiff
path: root/nix/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nix/default.nix')
-rw-r--r--nix/default.nix106
1 files changed, 106 insertions, 0 deletions
diff --git a/nix/default.nix b/nix/default.nix
new file mode 100644
index 0000000..a0dcda0
--- /dev/null
+++ b/nix/default.nix
@@ -0,0 +1,106 @@
+{
+ lib,
+ stdenvNoCC,
+ cacert,
+ jq,
+ moreutils,
+ nodejs,
+}:
+stdenvNoCC.mkDerivation (finalAttrs: {
+ name = "getchoo-website";
+
+ src = lib.fileset.toSource {
+ root = ../.;
+ fileset = lib.fileset.gitTracked ../.;
+ };
+
+ __structuredAttrs = true;
+
+ nativeBuildInputs = [
+ nodejs
+ nodejs.pkgs.pnpm
+ ];
+
+ env = {
+ pnpmDeps = stdenvNoCC.mkDerivation (finalAttrs': {
+ name = "${finalAttrs.name}-pnpm-deps";
+ inherit (finalAttrs) src;
+
+ __structuredAttrs = true;
+
+ nativeBuildInputs = [
+ cacert
+ jq
+ moreutils
+ nodejs.pkgs.pnpm
+ ];
+
+ dontConfigure = true;
+ dontBuild = true;
+ doCheck = false;
+
+ installPhase = ''
+ runHook preInstall
+
+ export HOME="$(mktemp -d)"
+ pnpm config set store-dir "$out"
+ pnpm install --force --frozen-lockfile --ignore-script
+
+ runHook postInstall
+ '';
+
+ fixupPhase = ''
+ runHook preFixup
+
+ rm -rf "$out"/v3/tmp
+ for f in $(find "$out" -name "*.json"); do
+ sed -i -E -e 's/"checkedAt":[0-9]+,//g' $f
+ jq --sort-keys . $f | sponge $f
+ done
+
+ runHook postFixup
+ '';
+
+ outputHashMode = "recursive";
+ outputHash = "sha256-pKo1t9K24HUOjjfwfubx+JorlAJeshAQBLSABRoSF/k=";
+ });
+ };
+
+ postConfigure = ''
+ export HOME="$(mktemp -d)"
+ export STORE_PATH="$(mktemp -d)"
+
+ cp -rT "$pnpmDeps" "$STORE_PATH"
+ chmod -R +w "$STORE_PATH"
+
+ pnpm config set store-dir "$STORE_PATH"
+
+ pnpm install --force --frozen-lockfile --ignore-script --offline
+
+ patchShebangs node_modules/{*,.*}
+ '';
+
+ buildPhase = ''
+ runHook preBuild
+ pnpm run build
+ runHook postBuild
+ '';
+
+ installPhase = ''
+ runHook preInstall
+ mv dist "$out"
+ runHook postInstall
+ '';
+
+ checkPhase = ''
+ runHook preCheck
+ pnpm run check
+ runHook postCheck
+ '';
+
+ meta = with lib; {
+ homepage = "https://github.com/getchoo/website";
+ license = licenses.mit;
+ maintainers = with maintainers; [getchoo];
+ };
+})