engineering blog at https://blog.tangled.sh
1{ 2 description = "site"; 3 4 inputs = { 5 nixpkgs.url = "github:nixos/nixpkgs"; 6 vite = { 7 url = "git+https://tangled.sh/@icyphox.sh/vite"; 8 flake = true; 9 }; 10 inter-fonts-src = { 11 url = "https://github.com/rsms/inter/releases/download/v4.1/Inter-4.1.zip"; 12 flake = false; 13 }; 14 ibm-plex-mono-src = { 15 url = "https://github.com/IBM/plex/releases/download/%40ibm%2Fplex-mono%401.1.0/ibm-plex-mono.zip"; 16 flake = false; 17 }; 18 }; 19 20 outputs = 21 { self 22 , nixpkgs 23 , vite 24 , inter-fonts-src 25 , ibm-plex-mono-src 26 }: 27 let 28 supportedSystems = [ 29 "x86_64-linux" 30 "x86_64-darwin" 31 "aarch64-linux" 32 "aarch64-darwin" 33 ]; 34 forAllSystems = nixpkgs.lib.genAttrs supportedSystems; 35 nixpkgsFor = forAllSystems (system: import nixpkgs { inherit system; }); 36 in 37 { 38 devShells = forAllSystems ( 39 system: 40 let 41 pkgs = nixpkgsFor.${system}; 42 in 43 { 44 default = pkgs.mkShell { 45 buildInputs = [ 46 vite.packages.${system}.vite 47 pkgs.gotools 48 pkgs.gnumake 49 pkgs.entr 50 pkgs.tailwindcss 51 ]; 52 shellHook = '' 53 cp -f ${inter-fonts-src}/web/InterVariable*.woff2 static/fonts/ 54 cp -f ${inter-fonts-src}/web/InterDisplay*.woff2 static/fonts/ 55 cp -f ${ibm-plex-mono-src}/fonts/complete/woff2/IBMPlexMono-Regular.woff2 static/fonts/ 56 ''; 57 }; 58 } 59 ); 60 61 apps = forAllSystems ( 62 system: 63 let 64 pkgs = nixpkgsFor.${system}; 65 in 66 { 67 default = { 68 type = "app"; 69 program = "${pkgs.writeShellScriptBin "vite-build" '' 70 #!/usr/bin/env bash 71 ${vite.packages.${system}.vite}/bin/vite build 72 ''}/bin/vite-build"; 73 cwd = ./.; 74 }; 75 serve = { 76 type = "app"; 77 program = "${pkgs.writeShellScriptBin "vite-serve" '' 78 #!/usr/bin/env bash 79 80 kill_vite() { 81 trap SIGINT 82 echo "cleaning up..." 83 pkill vite 84 exit 85 } 86 trap "kill_vite" INT 87 88 ${vite.packages.${system}.vite}/bin/vite serve & 89 find pages/ static/ templates/ | ${pkgs.entr}/bin/entr ${vite.packages.${system}.vite}/bin/vite build --drafts 90 ''}/bin/vite-serve"; 91 }; 92 deploy = { 93 type = "app"; 94 program = "${pkgs.writeShellScriptBin "deploy" '' 95 #!/usr/bin/env bash 96 ${vite.packages.${system}.vite}/bin/vite build 97 ${pkgs.wrangler}/bin/wrangler pages deploy --project-name tangled-blog ./build 98 ''}/bin/deploy"; 99 }; 100 } 101 ); 102 }; 103}