From ea0ba77c80b2b76836eaad7e62666df091262818 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Isma=C3=ABl=20Bouya?= Date: Sat, 27 Aug 2022 19:03:22 +0200 Subject: [PATCH] Improve assets generation --- modules/private/environment.nix | 2 + .../private/websites/tools/assets/default.nix | 38 ++++++++++++++++++- .../tools/games/codenames/immae-assets.patch | 15 ++++++++ .../tools/games/codenames/node-packages.nix | 1 + .../terraforming-mars/immae-assets.patch | 13 +++++++ .../terraforming-mars/terraforming-mars.nix | 1 + pkgs/webapps/apache-theme/theme/style.css | 2 +- 7 files changed, 69 insertions(+), 3 deletions(-) create mode 100644 modules/private/websites/tools/games/codenames/immae-assets.patch create mode 100644 modules/private/websites/tools/games/terraforming-mars/immae-assets.patch diff --git a/modules/private/environment.nix b/modules/private/environment.nix index ae00298..1cc3b6c 100644 --- a/modules/private/environment.nix +++ b/modules/private/environment.nix @@ -908,6 +908,8 @@ in default = {}; type = attrsOf (submodule { options = { + assetType = mkOption { type = enum ["tgz" "url" "googleFont"]; default = "url"; description = "Type of asset"; }; + tgzRemoveComponents = mkOption { type = int; default = 0; description = "Remove components when extracting"; }; url = mkOption { type = str; description = "URL to fetch"; }; sha256 = mkOption { type = str; description = "Hash of the url"; }; }; diff --git a/modules/private/websites/tools/assets/default.nix b/modules/private/websites/tools/assets/default.nix index 0eb476d..1f5f1a4 100644 --- a/modules/private/websites/tools/assets/default.nix +++ b/modules/private/websites/tools/assets/default.nix @@ -1,13 +1,47 @@ { lib, pkgs, config, ... }: let cfg = config.myServices.websites.tools.assets; - assets_urls = lib.mapAttrs (k: v: pkgs.fetchurl v) config.myEnv.tools.assets; + fetchFont = v: pkgs.runCommand "fetch-font" { + outputHashAlgo = "sha256"; + outputHashMode = "recursive"; + outputHash = v.sha256; + } '' + mkdir -p $out + ${pkgs.curl}/bin/curl -k --output $out/font.css -H "User-Agent: Firefox/100.0" "${v.url}" + cat $out/font.css | grep -o "https://[^ )]*" | while read url; do + filename=$(echo "$url" | sed -e "s@.*/@@g") + ${pkgs.curl}/bin/curl -k --output "$out/$filename" "$url" + sed -i -e "s@$url@./$filename@" "$out/font.css" + done + ''; + fetchTgz = v: pkgs.runCommand "fetch-tgz" { + outputHashAlgo = "sha256"; + outputHashMode = "recursive"; + outputHash = v.sha256; + } '' + mkdir -p $out + cd $out + ${pkgs.curl}/bin/curl -L -k "${v.url}" | tar -xz --strip-components=${builtins.toString v.tgzRemoveComponents} + ''; + fetchAsset = v: + if v.assetType == "googleFont" + then fetchFont v + else if v.assetType == "tgz" + then fetchTgz v + else pkgs.fetchurl { url = v.url; sha256 = v.sha256; }; + assets_urls = lib.mapAttrs (k: fetchAsset) config.myEnv.tools.assets; assets = pkgs.runCommand "assets" {} ('' mkdir -p $out cp -a ${./static}/* $out/ '' + builtins.concatStringsSep "\n" (lib.mapAttrsToList (k: v: '' - install -D -m644 -T ${v} $out/${k} + if [ -d "${v}" ]; then + mkdir -p "$out/$(dirname "${k}")" + cp -a "${v}" "$out/${k}" + chmod -R u+rwX "$out/${k}" + else + install -D -m644 -T "${v}" "$out/${k}" + fi '') assets_urls)); in { diff --git a/modules/private/websites/tools/games/codenames/immae-assets.patch b/modules/private/websites/tools/games/codenames/immae-assets.patch new file mode 100644 index 0000000..c53ab97 --- /dev/null +++ b/modules/private/websites/tools/games/codenames/immae-assets.patch @@ -0,0 +1,15 @@ +diff --git a/src/index.html b/src/index.html +index 2559a37..84a0d64 100644 +--- a/src/index.html ++++ b/src/index.html +@@ -6,8 +6,8 @@ + + + +- +- ++ ++ + + + diff --git a/modules/private/websites/tools/games/codenames/node-packages.nix b/modules/private/websites/tools/games/codenames/node-packages.nix index 02595c5..1fb2db3 100644 --- a/modules/private/websites/tools/games/codenames/node-packages.nix +++ b/modules/private/websites/tools/games/codenames/node-packages.nix @@ -6448,6 +6448,7 @@ let chmod -R u+w $out cd $out patch -p1 < ${./codenames.patch} + patch -p1 < ${./immae-assets.patch} ''; dependencies = [ sources."@babel/code-frame-7.0.0" diff --git a/modules/private/websites/tools/games/terraforming-mars/immae-assets.patch b/modules/private/websites/tools/games/terraforming-mars/immae-assets.patch new file mode 100644 index 0000000..684a7df --- /dev/null +++ b/modules/private/websites/tools/games/terraforming-mars/immae-assets.patch @@ -0,0 +1,13 @@ +diff --git a/assets/index.html b/assets/index.html +index 220192834..d77a0fc80 100644 +--- a/assets/index.html ++++ b/assets/index.html +@@ -2,7 +2,7 @@ + + + + diff --git a/modules/private/websites/tools/games/terraforming-mars/terraforming-mars.nix b/modules/private/websites/tools/games/terraforming-mars/terraforming-mars.nix index 502a553..b7c2c8c 100644 --- a/modules/private/websites/tools/games/terraforming-mars/terraforming-mars.nix +++ b/modules/private/websites/tools/games/terraforming-mars/terraforming-mars.nix @@ -23,6 +23,7 @@ let cp -r ${source} ./source chmod -R u+w source cd source + patch -p1 < ${./immae-assets.patch} ln -s ${packages.package}/lib/node_modules/terraforming-mars/node_modules . npm run build mkdir $out diff --git a/pkgs/webapps/apache-theme/theme/style.css b/pkgs/webapps/apache-theme/theme/style.css index 4d25c9f..e46139f 100644 --- a/pkgs/webapps/apache-theme/theme/style.css +++ b/pkgs/webapps/apache-theme/theme/style.css @@ -5,7 +5,7 @@ Theme name: Apaxy Theme author: @adamwhitcroft \*------------------------------------*/ -@import url('//fonts.googleapis.com/css?family=Open+Sans'); +@import url('//assets.immae.eu/fonts/OpenSans/font.css'); /* Have to use @import for the font, as you can only specify a single stylesheet */ * { margin:0; -- 2.41.0