95 lines
2.5 kB
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
pkgs.wrangler
44
];
45
shellHook = ''
46
cp -f ${ia-fonts-src}/"iA Writer Quattro"/Static/*.ttf static/fonts/
47
cp -f ${ia-fonts-src}/"iA Writer Mono"/Static/*.ttf static/fonts/
48
'';
49
};
50
}
51
);
52
53
apps = forAllSystems (
54
system:
55
let
56
pkgs = nixpkgsFor.${system};
57
in
58
{
59
default = {
60
type = "app";
61
program = "${pkgs.writeShellScriptBin "vite-build" ''
62
#!/usr/bin/env bash
63
${vite.packages.${system}.vite}/bin/vite build
64
''}/bin/vite-build";
65
cwd = ./.;
66
};
67
deploy = {
68
type = "app";
69
program = "${pkgs.writeShellScriptBin "s3-sync" ''
70
#!/usr/bin/env bash
71
${vite.packages.${system}.vite}/bin/vite build
72
${pkgs.awscli2}/bin/aws s3 sync build s3://site/ --size-only
73
''}/bin/s3-sync";
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
}
93
);
94
};
95
}
96