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}