diff --git a/default.nix b/default.nix index 866a700..93a424e 100644 --- a/default.nix +++ b/default.nix @@ -1,26 +1,6 @@ -{ pkgs -, google-chrome -, symlinkJoin -, stdenv -, elmPackages -, libjpeg -, optipng -, pngquant -, libwebp -, ... -}: +pkgs: inputs: let - workingElmPackages = if elmPackages.elmVersion == "0.19.1" then - elmPackages - else - (import {}).elmPackages; - - pnpm2nix = pkgs.callPackage ( - builtins.fetchGit { - url = "https://github.com/notgne2/pnpm2nix.git"; - rev = "909accd35d23664254b43109ee58cd0c3d83a6d9"; - } - ) {}; + pnpm2nix = pkgs.callPackage inputs.pnpm2nix { }; nodeCleanSourceFilter = name: type: pkgs.lib.cleanSourceFilter name type @@ -48,85 +28,85 @@ let overrides = pnpm2nix.defaultPnpmOverrides // { puppeteer = ( drv: - drv.overrideAttrs ( - oldAttrs: { - preBuild = '' - # Define the local chromium directory - local_chromium=$HOME/node_modules/puppeteer/.local-chromium/linux-686378 - # Make sure that directory exists - mkdir -p $local_chromium - # Link pkgs' standard google chrome into place - cp -r --no-preserve=mode,ownership ${google-chrome}/share/google/chrome $local_chromium/chrome-linux - cp ${google-chrome}/bin/google-chrome-stable $local_chromium/chrome-linux/chrome - chmod +x $local_chromium/chrome-linux/chrome - ''; - } - ) + drv.overrideAttrs ( + oldAttrs: { + preBuild = '' + # Define the local chromium directory + local_chromium=$HOME/node_modules/puppeteer/.local-chromium/linux-686378 + # Make sure that directory exists + mkdir -p $local_chromium + # Link pkgs' standard google chrome into place + cp -r --no-preserve=mode,ownership ${pkgs.google-chrome}/share/google/chrome $local_chromium/chrome-linux + cp ${pkgs.google-chrome}/bin/google-chrome-stable $local_chromium/chrome-linux/chrome + chmod +x $local_chromium/chrome-linux/chrome + ''; + } + ) ); imagemin-pngquant = ( drv: - drv.overrideAttrs - (oldAttrs: { buildInputs = oldAttrs.buildInputs ++ [ pkgs.libpng ]; }) + drv.overrideAttrs + (oldAttrs: { buildInputs = oldAttrs.buildInputs ++ [ pkgs.libpng ]; }) ); pngquant-bin = ( drv: - drv.overrideAttrs ( - oldAttrs: { - preBuild = '' - mkdir -p $HOME/node_modules/pngquant-bin/vendor - ln -s ${pngquant}/bin/pngquant $HOME/node_modules/pngquant-bin/vendor/pngquant - ''; - } - ) + drv.overrideAttrs ( + oldAttrs: { + preBuild = '' + mkdir -p $HOME/node_modules/pngquant-bin/vendor + ln -s ${pkgs.pngquant}/bin/pngquant $HOME/node_modules/pngquant-bin/vendor/pngquant + ''; + } + ) ); gifsicle = ( drv: - drv.overrideAttrs ( - oldAttrs: { - buildInputs = oldAttrs.buildInputs ++ [ pkgs.autoconf pkgs.automake ]; - } - ) + drv.overrideAttrs ( + oldAttrs: { + buildInputs = oldAttrs.buildInputs ++ [ pkgs.autoconf pkgs.automake ]; + } + ) ); optipng = - (drv: drv.overrideAttrs (oldAttrs: { buildInputs = [ optipng ]; })); + (drv: drv.overrideAttrs (oldAttrs: { buildInputs = [ pkgs.optipng ]; })); optipng-bin = ( drv: - drv.overrideAttrs ( - oldAttrs: { - preBuild = '' - mkdir -p $HOME/node_modules/optipng-bin/vendor - ln -s ${optipng}/bin/optipng $HOME/node_modules/optipng-bin/vendor/optipng - ''; - } - ) + drv.overrideAttrs ( + oldAttrs: { + preBuild = '' + mkdir -p $HOME/node_modules/optipng-bin/vendor + ln -s ${pkgs.optipng}/bin/optipng $HOME/node_modules/optipng-bin/vendor/optipng + ''; + } + ) ); jpegtran = - (drv: drv.overrideAttrs (oldAttrs: { buildInputs = [ libjpeg ]; })); + (drv: drv.overrideAttrs (oldAttrs: { buildInputs = [ pkgs.libjpeg ]; })); jpegtran-bin = ( drv: - drv.overrideAttrs ( - oldAttrs: { - preBuild = '' - mkdir -p $HOME/node_modules/jpegtran-bin/vendor - ln -s ${libjpeg}/bin/jpegtran $HOME/node_modules/jpegtran-bin/vendor/jpegtran - ''; - } - ) + drv.overrideAttrs ( + oldAttrs: { + preBuild = '' + mkdir -p $HOME/node_modules/jpegtran-bin/vendor + ln -s ${pkgs.libjpeg}/bin/jpegtran $HOME/node_modules/jpegtran-bin/vendor/jpegtran + ''; + } + ) ); cwebp-bin = ( drv: - drv.overrideAttrs ( - oldAttrs: { - buildPhase = '' - mkdir -p $HOME/node_modules/cwebp-bin/vendor/ - ln -s ${libwebp}/bin/cwebp $HOME/node_modules/cwebp-bin/vendor/cwebp - ''; - } - ) + drv.overrideAttrs ( + oldAttrs: { + buildPhase = '' + mkdir -p $HOME/node_modules/cwebp-bin/vendor/ + ln -s ${pkgs.libwebp}/bin/cwebp $HOME/node_modules/cwebp-bin/vendor/cwebp + ''; + } + ) ); }; }; @@ -138,93 +118,94 @@ let , themeColor ? "#000000" , backgroundColor ? "#000000" , src - , nodePackages ? [] + , nodePackages ? [ ] , routes ? [ "/" ] , extraHead ? "" , extraBody ? "" , extraPostBody ? "" }: - let - nodeSource = symlinkJoin { - name = "${name}-node-sources"; - paths = [ builderPkg.lib ] ++ nodePackages; - }; + let + nodeSource = pkgs.symlinkJoin { + name = "${name}-node-sources"; + paths = [ builderPkg.lib ] ++ nodePackages; + }; - baseWebpackConfig = builtins.readFile ./webpack.config.js; - webpackConfig = '' - const ROUTES = ${builtins.toJSON routes} - const PRETTY_NAME = ${builtins.toJSON prettyName} - const DESCRIPTION = ${builtins.toJSON description} - const THEME_COLOR = ${builtins.toJSON themeColor} - const BACKGROUND_COLOR = ${builtins.toJSON backgroundColor} - '' + "\n" + baseWebpackConfig; - webpackConfigFile = pkgs.writeText "${name}-webpack-config" webpackConfig; + baseWebpackConfig = builtins.readFile ./webpack.config.js; + webpackConfig = '' + const ROUTES = ${builtins.toJSON routes} + const PRETTY_NAME = ${builtins.toJSON prettyName} + const DESCRIPTION = ${builtins.toJSON description} + const THEME_COLOR = ${builtins.toJSON themeColor} + const BACKGROUND_COLOR = ${builtins.toJSON backgroundColor} + '' + "\n" + baseWebpackConfig; + webpackConfigFile = pkgs.writeText "${name}-webpack-config" webpackConfig; - wandInit = pkgs.writeText "wand.js" '' - document.body.innerHTML = ''' - const sourceTarget = document.createElement('script') - sourceTarget.src = '/main.js' - document.body.appendChild(sourceTarget) - ''; + wandInit = pkgs.writeText "wand.js" '' + document.body.innerHTML = ''' + const sourceTarget = document.createElement('script') + sourceTarget.src = '/main.js' + document.body.appendChild(sourceTarget) + ''; - templateHtml = pkgs.writeText "template.html" '' - - - - - ${prettyName} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ${extraHead} - - - ${extraBody} - - ${extraPostBody} - - ''; - in stdenv.mkDerivation { - inherit name; + templateHtml = pkgs.writeText "template.html" '' + + + + + ${prettyName} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${extraHead} + + + ${extraBody} + + ${extraPostBody} + + ''; + in + pkgs.stdenv.mkDerivation { + inherit name; - src = elmCleanSource src; + src = elmCleanSource src; - buildInputs = with workingElmPackages; [ elm nodeSource ]; + buildInputs = with pkgs.elmPackages; [ elm nodeSource ]; - patchPhase = '' + patchPhase = '' ln -sf ${nodeSource}/node_modules . cp ${webpackConfigFile} webpack.config.js cp ${ @@ -232,9 +213,9 @@ let } .imagemin-jpgify-webpack-plugin.js cp ${wandInit} wand.js cp ${templateHtml} template.html - ''; + ''; - shellHook = '' + shellHook = '' ln -sf ${nodeSource}/node_modules . rm -f webpack.config.js rm -f wand.js @@ -246,19 +227,19 @@ let cp ${wandInit} wand.js cp ${templateHtml} template.html export NODE_PATH=$PWD/node_modules - ''; + ''; - buildPhase = workingElmPackages.fetchElmDeps { - elmPackages = import (src + "/elm-srcs.nix"); - registryDat = src + "/registry.dat"; - elmVersion = "0.19.1"; - }; - - installPhase = '' - mkdir -p $out - ${nodeSource}/node_modules/webpack-cli/bin/cli.js --mode production - mv dist/* $out - ''; + buildPhase = pkgs.elmPackages.fetchElmDeps { + elmPackages = import (src + "/elm-srcs.nix"); + registryDat = src + "/registry.dat"; + elmVersion = "0.19.1"; }; + + installPhase = '' + mkdir -p $out + ${nodeSource}/node_modules/webpack-cli/bin/cli.js --mode production + mv dist/* $out + ''; + }; in { inherit mkWandardFront; } diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..b95bd8c --- /dev/null +++ b/flake.lock @@ -0,0 +1,77 @@ +{ + "nodes": { + "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1606424373, + "narHash": "sha256-oq8d4//CJOrVj+EcOaSXvMebvuTkmBJuT5tzlfewUnQ=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "99f1c2157fba4bfe6211a321fd0ee43199025dbf", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1612996220, + "narHash": "sha256-l2kzWXxL3vXr8VxUzRtORPJS0nFQ3E5kBPF/AYAK0wI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "758b29b5a28b818e311ad540637a5c1e40867489", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "pnpm2nix": { + "flake": false, + "locked": { + "lastModified": 1613295715, + "narHash": "sha256-bj4daCwh8AerFz65yUYRBkJTdP+PdvGKNozdbAdHiUI=", + "ref": "master", + "rev": "55487e9b92017d9cadf7e6ed4c090e15e7eaf8a9", + "revCount": 88, + "type": "git", + "url": "ssh://git@github.com/notgne2/pnpm2nix.git" + }, + "original": { + "type": "git", + "url": "ssh://git@github.com/notgne2/pnpm2nix.git" + } + }, + "root": { + "inputs": { + "flake-compat": "flake-compat", + "nixpkgs": "nixpkgs", + "pnpm2nix": "pnpm2nix", + "utils": "utils" + } + }, + "utils": { + "locked": { + "lastModified": 1610051610, + "narHash": "sha256-U9rPz/usA1/Aohhk7Cmc2gBrEEKRzcW4nwPWMPwja4Y=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "3982c9903e93927c2164caa727cd3f6a0e6d14cc", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..f74de0b --- /dev/null +++ b/flake.nix @@ -0,0 +1,24 @@ +{ + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + + pnpm2nix.url = "git+ssh://git@github.com/notgne2/pnpm2nix.git"; + pnpm2nix.flake = false; + + utils.url = "github:numtide/flake-utils"; + + flake-compat = { + url = "github:edolstra/flake-compat"; + flake = false; + }; + }; + + outputs = { self, nixpkgs, utils, ... } @ inputs: + utils.lib.eachDefaultSystem (system: + let + pkgs = import nixpkgs { inherit system; }; + in + { + lib = import ./default.nix pkgs inputs; + }); +}