compressDrv: use upstream
This commit is contained in:
parent
49f32034b8
commit
e4fa6645f1
@ -94,9 +94,6 @@
|
|||||||
deploy-rs-pkg = null;
|
deploy-rs-pkg = null;
|
||||||
})
|
})
|
||||||
(_: super: {
|
(_: super: {
|
||||||
compressDrv = super.callPackage ./pkgs/compress-drv { };
|
|
||||||
compressDrvWeb = super.callPackage ./pkgs/compress-drv/web.nix { };
|
|
||||||
|
|
||||||
nicer = super.callPackage ./pkgs/nicer.nix { };
|
nicer = super.callPackage ./pkgs/nicer.nix { };
|
||||||
tmuxbash = super.callPackage ./pkgs/tmuxbash.nix { };
|
tmuxbash = super.callPackage ./pkgs/tmuxbash.nix { };
|
||||||
vanta-agent = super.callPackage ./pkgs/vanta-agent.nix { };
|
vanta-agent = super.callPackage ./pkgs/vanta-agent.nix { };
|
||||||
@ -351,8 +348,6 @@
|
|||||||
statix.enable = true;
|
statix.enable = true;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
compress-drv-test = pkgs.callPackage ./pkgs/compress-drv/test.nix { };
|
|
||||||
}
|
}
|
||||||
) deploy-rs.lib;
|
) deploy-rs.lib;
|
||||||
}
|
}
|
||||||
|
@ -217,7 +217,7 @@ in
|
|||||||
'';
|
'';
|
||||||
"irc.jakstys.lt".extraConfig =
|
"irc.jakstys.lt".extraConfig =
|
||||||
let
|
let
|
||||||
gamja = pkgs.compressDrvWeb (pkgs.gamja.override {
|
gamja = pkgs.pkgs-unstable.compressDrvWeb (pkgs.gamja.override {
|
||||||
gamjaConfig = {
|
gamjaConfig = {
|
||||||
server = {
|
server = {
|
||||||
url = "irc.jakstys.lt:6698";
|
url = "irc.jakstys.lt:6698";
|
||||||
|
@ -171,6 +171,7 @@ in
|
|||||||
neomutt
|
neomutt
|
||||||
picocom
|
picocom
|
||||||
inferno
|
inferno
|
||||||
|
libheif
|
||||||
inkscape
|
inkscape
|
||||||
chromium
|
chromium
|
||||||
hunspell
|
hunspell
|
||||||
|
@ -80,7 +80,7 @@
|
|||||||
route /static/assets/* {
|
route /static/assets/* {
|
||||||
uri strip_prefix /static
|
uri strip_prefix /static
|
||||||
file_server * {
|
file_server * {
|
||||||
root ${pkgs.compressDrvWeb pkgs.gitea.data { }}/public
|
root ${pkgs.pkgs-unstable.compressDrvWeb pkgs.gitea.data { }}/public
|
||||||
precompressed br gzip
|
precompressed br gzip
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,63 +0,0 @@
|
|||||||
/*
|
|
||||||
compressDrv compresses files in a given derivation.
|
|
||||||
|
|
||||||
Inputs:
|
|
||||||
|
|
||||||
- formats :: [String]
|
|
||||||
|
|
||||||
List of file extensions to compress.
|
|
||||||
|
|
||||||
Example: ["txt" "svg" "xml"]
|
|
||||||
|
|
||||||
- compressors :: {String -> String}
|
|
||||||
|
|
||||||
Map a desired extension (e.g. `gz`) to a compress program.
|
|
||||||
|
|
||||||
The compressor program that will be executed to get the `COMPRESSOR`
|
|
||||||
extension. The program should have a single " {}", which will be the
|
|
||||||
replaced with the target filename.
|
|
||||||
|
|
||||||
Compressor must:
|
|
||||||
- read symlinks (thus --force is needed to gzip, zstd, xz).
|
|
||||||
- keep the original file in place (--keep).
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
{
|
|
||||||
xz = "${xz}/bin/xz --force --keep {}";
|
|
||||||
}
|
|
||||||
|
|
||||||
See compressDrvWeb, which is a wrapper on top of compressDrv, for broader
|
|
||||||
use examples.
|
|
||||||
*/
|
|
||||||
{
|
|
||||||
lib,
|
|
||||||
xorg,
|
|
||||||
runCommand,
|
|
||||||
}:
|
|
||||||
drv:
|
|
||||||
{ formats, compressors }:
|
|
||||||
let
|
|
||||||
validProg =
|
|
||||||
ext: prog:
|
|
||||||
let
|
|
||||||
matches = (builtins.length (builtins.split "\\{}" prog) - 1) / 2;
|
|
||||||
in
|
|
||||||
lib.assertMsg (
|
|
||||||
matches == 1
|
|
||||||
) "compressor ${ext} needs to have exactly one '{}', found ${builtins.toString matches}";
|
|
||||||
mkCmd =
|
|
||||||
ext: prog:
|
|
||||||
assert validProg ext prog;
|
|
||||||
''
|
|
||||||
find -L $out -type f -regextype posix-extended -iregex '.*\.(${formatsPipe})' -print0 \
|
|
||||||
| xargs -0 -P$NIX_BUILD_CORES -I{} ${prog}
|
|
||||||
'';
|
|
||||||
formatsPipe = builtins.concatStringsSep "|" formats;
|
|
||||||
in
|
|
||||||
runCommand "${drv.name}-compressed" { } ''
|
|
||||||
mkdir $out
|
|
||||||
(cd $out; ${xorg.lndir}/bin/lndir ${drv})
|
|
||||||
|
|
||||||
${lib.concatStringsSep "\n\n" (lib.mapAttrsToList mkCmd compressors)}
|
|
||||||
''
|
|
@ -1,42 +0,0 @@
|
|||||||
{
|
|
||||||
gzip,
|
|
||||||
runCommand,
|
|
||||||
compressDrv,
|
|
||||||
}:
|
|
||||||
let
|
|
||||||
example = runCommand "sample-drv" { } ''
|
|
||||||
mkdir $out
|
|
||||||
echo 42 > $out/1.txt
|
|
||||||
echo 43 > $out/1.md
|
|
||||||
touch $out/2.png
|
|
||||||
'';
|
|
||||||
drv = compressDrv example {
|
|
||||||
formats = [ "txt" ];
|
|
||||||
compressors.gz = "${gzip}/bin/gzip --force --keep --fast {}";
|
|
||||||
};
|
|
||||||
wrapped = compressDrv drv {
|
|
||||||
formats = [ "md" ];
|
|
||||||
compressors.gz = "${gzip}/bin/gzip --force --keep --fast {}";
|
|
||||||
};
|
|
||||||
in
|
|
||||||
runCommand "test-compressDrv" { } ''
|
|
||||||
set -ex
|
|
||||||
|
|
||||||
ls -l ${drv}
|
|
||||||
test -h ${drv}/1.txt
|
|
||||||
test -f ${drv}/1.txt.gz
|
|
||||||
cmp ${drv}/1.txt <(${gzip}/bin/zcat ${drv}/1.txt.gz)
|
|
||||||
|
|
||||||
test -h ${drv}/2.png
|
|
||||||
test ! -a ${drv}/2.png.gz
|
|
||||||
|
|
||||||
# compressDrv always points to the final file, no matter how many times
|
|
||||||
# it's been wrapped
|
|
||||||
cmp <(readlink -e ${drv}/1.txt) <(readlink -e ${wrapped}/1.txt)
|
|
||||||
|
|
||||||
test -f ${wrapped}/1.txt.gz
|
|
||||||
test -f ${wrapped}/1.md.gz
|
|
||||||
test ! -f ${drv}/1.md.gz
|
|
||||||
|
|
||||||
mkdir $out
|
|
||||||
''
|
|
@ -1,102 +0,0 @@
|
|||||||
/*
|
|
||||||
compressDrvWeb compresses a derivation for common web server use.
|
|
||||||
|
|
||||||
Useful when one wants to pre-compress certain static assets and pass them to
|
|
||||||
the web server. For example, `pkgs.gamja` creates this derivation:
|
|
||||||
|
|
||||||
/nix/store/2wn1qbk8gp4y2m8xvafxv1b2dcdqj8fz-gamja-1.0.0-beta.9/
|
|
||||||
├── index.2fd01148.js
|
|
||||||
├── index.2fd01148.js.map
|
|
||||||
├── index.37aa9a8a.css
|
|
||||||
├── index.37aa9a8a.css.map
|
|
||||||
├── index.html
|
|
||||||
└── manifest.webmanifest
|
|
||||||
|
|
||||||
`pkgs.compressDrvWeb pkgs.gamja`:
|
|
||||||
|
|
||||||
/nix/store/f5ryid7zrw2hid7h9kil5g5j29q5r2f7-gamja-1.0.0-beta.9-compressed
|
|
||||||
├── index.2fd01148.js -> /nix/store/2wn1qbk8gp4y2m8xvafxv1b2dcdqj8fz-gamja-1.0.0-beta.9/index.2fd01148.js
|
|
||||||
├── index.2fd01148.js.br
|
|
||||||
├── index.2fd01148.js.gz
|
|
||||||
├── index.2fd01148.js.map -> /nix/store/2wn1qbk8gp4y2m8xvafxv1b2dcdqj8fz-gamja-1.0.0-beta.9/index.2fd01148.js.map
|
|
||||||
├── index.2fd01148.js.map.br
|
|
||||||
├── index.2fd01148.js.map.gz
|
|
||||||
├── index.37aa9a8a.css -> /nix/store/2wn1qbk8gp4y2m8xvafxv1b2dcdqj8fz-gamja-1.0.0-beta.9/index.37aa9a8a.css
|
|
||||||
├── index.37aa9a8a.css.br
|
|
||||||
├── index.37aa9a8a.css.gz
|
|
||||||
├── index.37aa9a8a.css.map -> /nix/store/2wn1qbk8gp4y2m8xvafxv1b2dcdqj8fz-gamja-1.0.0-beta.9/index.37aa9a8a.css.map
|
|
||||||
├── index.37aa9a8a.css.map.br
|
|
||||||
├── index.37aa9a8a.css.map.gz
|
|
||||||
├── index.html -> /nix/store/2wn1qbk8gp4y2m8xvafxv1b2dcdqj8fz-gamja-1.0.0-beta.9/index.html
|
|
||||||
├── index.html.br
|
|
||||||
├── index.html.gz
|
|
||||||
├── manifest.webmanifest -> /nix/store/2wn1qbk8gp4y2m8xvafxv1b2dcdqj8fz-gamja-1.0.0-beta.9/manifest.webmanifest
|
|
||||||
├── manifest.webmanifest.br
|
|
||||||
└── manifest.webmanifest.gz
|
|
||||||
|
|
||||||
When this `-compressed` directory is passed to a properly configured web
|
|
||||||
server, it will serve those pre-compressed files:
|
|
||||||
|
|
||||||
$ curl -I -H 'Accept-Encoding: br' https://irc.example.org/
|
|
||||||
<...>
|
|
||||||
content-encoding: br
|
|
||||||
<...>
|
|
||||||
|
|
||||||
For example, a caddy configuration snippet for gamja to serve
|
|
||||||
the static assets (JS, CSS files) pre-compressed:
|
|
||||||
|
|
||||||
virtualHosts."irc.example.org".extraConfig = ''
|
|
||||||
root * ${pkgs.compressDrvWeb pkgs.gamja {}}
|
|
||||||
file_server browse {
|
|
||||||
precompressed br gzip
|
|
||||||
}
|
|
||||||
'';
|
|
||||||
|
|
||||||
This feature is also available in nginx via `ngx_brotli` and
|
|
||||||
`ngx_http_gzip_static_module`.
|
|
||||||
|
|
||||||
Inputs:
|
|
||||||
- formats :: [String]
|
|
||||||
|
|
||||||
List of file extensions to compress.
|
|
||||||
|
|
||||||
Default: common formats that compress well. The list may be expanded.
|
|
||||||
|
|
||||||
- extraFormats :: [String]
|
|
||||||
|
|
||||||
Extra extensions to compress in addition to `formats`.
|
|
||||||
|
|
||||||
- compressors :: {String -> String}
|
|
||||||
|
|
||||||
See parameter `compressors` of compressDrv.
|
|
||||||
*/
|
|
||||||
{
|
|
||||||
zopfli,
|
|
||||||
brotli,
|
|
||||||
compressDrv,
|
|
||||||
}:
|
|
||||||
drv:
|
|
||||||
{
|
|
||||||
formats ? [
|
|
||||||
"css"
|
|
||||||
"js"
|
|
||||||
"svg"
|
|
||||||
"ttf"
|
|
||||||
"eot"
|
|
||||||
"txt"
|
|
||||||
"xml"
|
|
||||||
"map"
|
|
||||||
"html"
|
|
||||||
"json"
|
|
||||||
"webmanifest"
|
|
||||||
],
|
|
||||||
extraFormats ? [ ],
|
|
||||||
compressors ? {
|
|
||||||
"gz" = "${zopfli}/bin/zopfli --keep {}";
|
|
||||||
"br" = "${brotli}/bin/brotli --keep --no-copy-stat {}";
|
|
||||||
},
|
|
||||||
}:
|
|
||||||
compressDrv drv {
|
|
||||||
formats = formats ++ extraFormats;
|
|
||||||
compressors = compressors;
|
|
||||||
}
|
|
@ -1,11 +1,2 @@
|
|||||||
ignore = ['modules/base/boot']
|
ignore = ['modules/base/boot']
|
||||||
|
|
||||||
# If the attrset has an optional field, `inherit` will not inherit it:
|
|
||||||
# compressDrvWeb = drv: {
|
|
||||||
# compressors ? ["gz" "br"],
|
|
||||||
# ...
|
|
||||||
# } @ args:
|
|
||||||
# compressDrv drv {
|
|
||||||
# inherit (compressors) <<- function 'compressDrv' called without required argument 'compressors'
|
|
||||||
# }
|
|
||||||
disabled = ["manual_inherit", "manual_inherit_from"]
|
disabled = ["manual_inherit", "manual_inherit_from"]
|
||||||
|
Loading…
Reference in New Issue
Block a user