{ description = "site"; inputs = { nixpkgs.url = "github:nixos/nixpkgs"; vite = { url = "git+https://tangled.sh/@anirudh.fi/vite"; flake = true; }; inter-fonts-src = { url = "https://github.com/rsms/inter/releases/download/v4.1/Inter-4.1.zip"; flake = false; }; ibm-plex-mono-src = { url = "https://github.com/IBM/plex/releases/download/%40ibm%2Fplex-mono%401.1.0/ibm-plex-mono.zip"; flake = false; }; }; outputs = { self , nixpkgs , vite , inter-fonts-src , ibm-plex-mono-src }: let supportedSystems = [ "x86_64-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin" ]; forAllSystems = nixpkgs.lib.genAttrs supportedSystems; nixpkgsFor = forAllSystems (system: import nixpkgs { inherit system; }); in { devShells = forAllSystems ( system: let pkgs = nixpkgsFor.${system}; in { default = pkgs.mkShell { buildInputs = [ vite.packages.${system}.vite pkgs.gotools pkgs.gnumake pkgs.entr pkgs.tailwindcss ]; shellHook = '' cp -f ${inter-fonts-src}/web/InterVariable*.woff2 static/fonts/ cp -f ${inter-fonts-src}/web/InterDisplay*.woff2 static/fonts/ cp -f ${ibm-plex-mono-src}/fonts/complete/woff2/IBMPlexMono-Regular.woff2 static/fonts/ ''; }; } ); apps = forAllSystems ( system: let pkgs = nixpkgsFor.${system}; in { default = { type = "app"; program = "${pkgs.writeShellScriptBin "vite-build" '' #!/usr/bin/env bash ${vite.packages.${system}.vite}/bin/vite build ''}/bin/vite-build"; cwd = ./.; }; serve = { type = "app"; program = "${pkgs.writeShellScriptBin "vite-serve" '' #!/usr/bin/env bash kill_vite() { trap SIGINT echo "cleaning up..." pkill vite exit } trap "kill_vite" INT ${vite.packages.${system}.vite}/bin/vite serve & find pages/ static/ templates/ | ${pkgs.entr}/bin/entr ${vite.packages.${system}.vite}/bin/vite build --drafts ''}/bin/vite-serve"; }; deploy = { type = "app"; program = "${pkgs.writeShellScriptBin "deploy" '' #!/usr/bin/env bash ${vite.packages.${system}.vite}/bin/vite build ${pkgs.wrangler}/bin/wrangler pages deploy --project-name tangled-blog ./build ''}/bin/deploy"; }; } ); }; }