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