nix: dedup appview static files into a package, and use that everywhere, including copying before watching appview #431

merged
opened by ptr.pet targeting master from ptr.pet/core: copy-static-on-watch
Changed files
+39 -30
nix
+13 -16
flake.nix
···
};
genjwks = self.callPackage ./nix/pkgs/genjwks.nix {};
lexgen = self.callPackage ./nix/pkgs/lexgen.nix {inherit indigo;};
-
appview = self.callPackage ./nix/pkgs/appview.nix {
+
appview-static-files = self.callPackage ./nix/pkgs/appview-static-files.nix {
inherit htmx-src htmx-ws-src lucide-src inter-fonts-src ibm-plex-mono-src;
};
+
appview = self.callPackage ./nix/pkgs/appview.nix {};
spindle = self.callPackage ./nix/pkgs/spindle.nix {};
knot-unwrapped = self.callPackage ./nix/pkgs/knot-unwrapped.nix {};
knot = self.callPackage ./nix/pkgs/knot.nix {};
···
staticPackages = mkPackageSet pkgs.pkgsStatic;
crossPackages = mkPackageSet pkgs.pkgsCross.gnu64.pkgsStatic;
in {
-
appview = packages.appview;
-
lexgen = packages.lexgen;
-
knot = packages.knot;
-
knot-unwrapped = packages.knot-unwrapped;
-
spindle = packages.spindle;
-
genjwks = packages.genjwks;
-
sqlite-lib = packages.sqlite-lib;
+
inherit (packages) appview appview-static-files lexgen genjwks spindle knot knot-unwrapped sqlite-lib;
pkgsStatic-appview = staticPackages.appview;
pkgsStatic-knot = staticPackages.knot;
···
pkgs.tailwindcss
pkgs.nixos-shell
pkgs.redis
+
pkgs.coreutils # for those of us who are on systems that use busybox (alpine)
packages'.lexgen
];
shellHook = ''
-
mkdir -p appview/pages/static/{fonts,icons}
-
cp -f ${htmx-src} appview/pages/static/htmx.min.js
-
cp -f ${htmx-ws-src} appview/pages/static/htmx-ext-ws.min.js
-
cp -rf ${lucide-src}/*.svg appview/pages/static/icons/
-
cp -f ${inter-fonts-src}/web/InterVariable*.woff2 appview/pages/static/fonts/
-
cp -f ${inter-fonts-src}/web/InterDisplay*.woff2 appview/pages/static/fonts/
-
cp -f ${ibm-plex-mono-src}/fonts/complete/woff2/IBMPlexMono-Regular.woff2 appview/pages/static/fonts/
+
mkdir -p appview/pages/static
+
# no preserve is needed because watch-tailwind will want to be able to overwrite
+
cp -frv --no-preserve=ownership ${packages'.appview-static-files}/* appview/pages/static
export TANGLED_OAUTH_JWKS="$(${packages'.genjwks}/bin/genjwks)"
'';
env.CGO_ENABLED = 1;
···
});
apps = forAllSystems (system: let
pkgs = nixpkgsFor."${system}";
+
packages' = self.packages.${system};
air-watcher = name: arg:
pkgs.writeShellScriptBin "run"
''
···
in {
watch-appview = {
type = "app";
-
program = ''${air-watcher "appview" ""}/bin/run'';
+
program = toString (pkgs.writeShellScript "watch-appview" ''
+
echo "copying static files to appview/pages/static..."
+
${pkgs.coreutils}/bin/cp -frv --no-preserve=ownership ${packages'.appview-static-files}/* appview/pages/static
+
${air-watcher "appview" ""}/bin/run
+
'');
};
watch-knot = {
type = "app";
+23
nix/pkgs/appview-static-files.nix
···
+
{
+
runCommandLocal,
+
htmx-src,
+
htmx-ws-src,
+
lucide-src,
+
inter-fonts-src,
+
ibm-plex-mono-src,
+
sqlite-lib,
+
tailwindcss,
+
src,
+
}:
+
runCommandLocal "appview-static-files" {} ''
+
mkdir -p $out/{fonts,icons} && cd $out
+
cp -f ${htmx-src} htmx.min.js
+
cp -f ${htmx-ws-src} htmx-ext-ws.min.js
+
cp -rf ${lucide-src}/*.svg icons/
+
cp -f ${inter-fonts-src}/web/InterVariable*.woff2 fonts/
+
cp -f ${inter-fonts-src}/web/InterDisplay*.woff2 fonts/
+
cp -f ${ibm-plex-mono-src}/fonts/complete/woff2/IBMPlexMono-Regular.woff2 fonts/
+
# tailwindcss -c $src/tailwind.config.js -i $src/input.css -o tw.css won't work
+
# for whatever reason (produces broken css), so we are doing this instead
+
cd ${src} && ${tailwindcss}/bin/tailwindcss -i input.css -o $out/tw.css
+
''
+3 -14
nix/pkgs/appview.nix
···
{
buildGoApplication,
modules,
-
htmx-src,
-
htmx-ws-src,
-
lucide-src,
-
inter-fonts-src,
-
ibm-plex-mono-src,
-
tailwindcss,
+
appview-static-files,
sqlite-lib,
src,
}:
···
postUnpack = ''
pushd source
-
mkdir -p appview/pages/static/{fonts,icons}
-
cp -f ${htmx-src} appview/pages/static/htmx.min.js
-
cp -f ${htmx-ws-src} appview/pages/static/htmx-ext-ws.min.js
-
cp -rf ${lucide-src}/*.svg appview/pages/static/icons/
-
cp -f ${inter-fonts-src}/web/InterVariable*.woff2 appview/pages/static/fonts/
-
cp -f ${inter-fonts-src}/web/InterDisplay*.woff2 appview/pages/static/fonts/
-
cp -f ${ibm-plex-mono-src}/fonts/complete/woff2/IBMPlexMono-Regular.woff2 appview/pages/static/fonts/
-
${tailwindcss}/bin/tailwindcss -i input.css -o appview/pages/static/tw.css
+
mkdir -p appview/pages/static
+
cp -frv ${appview-static-files}/* appview/pages/static
popd
'';