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}