122 lines
3.7 kB
1
{
2
description = "atproto github";
3
4
inputs = {
5
nixpkgs.url = "github:nixos/nixpkgs";
6
indigo = {
7
url = "github:oppiliappan/indigo";
8
flake = false;
9
};
10
htmx-src = {
11
url = "https://unpkg.com/htmx.org@2.0.4/dist/htmx.min.js";
12
flake = false;
13
};
14
lucide-src = {
15
url = "https://unpkg.com/lucide@latest";
16
flake = false;
17
};
18
gitignore = {
19
url = "github:hercules-ci/gitignore.nix";
20
inputs.nixpkgs.follows = "nixpkgs";
21
};
22
};
23
24
outputs = {
25
self,
26
nixpkgs,
27
indigo,
28
htmx-src,
29
lucide-src,
30
gitignore,
31
}: let
32
supportedSystems = ["x86_64-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin"];
33
forAllSystems = nixpkgs.lib.genAttrs supportedSystems;
34
nixpkgsFor = forAllSystems (system:
35
import nixpkgs {
36
inherit system;
37
overlays = [self.overlays.default];
38
});
39
inherit (gitignore.lib) gitignoreSource;
40
in {
41
overlays.default = final: prev: {
42
indigo-lexgen = with final;
43
final.buildGoModule {
44
pname = "indigo-lexgen";
45
version = "0.1.0";
46
src = indigo;
47
subPackages = ["cmd/lexgen"];
48
vendorHash = "sha256-pGc29fgJFq8LP7n/pY1cv6ExZl88PAeFqIbFEhB3xXs=";
49
doCheck = false;
50
};
51
52
appview = with final;
53
final.pkgsStatic.buildGoModule {
54
pname = "appview";
55
version = "0.1.0";
56
src = gitignoreSource ./.;
57
postConfigureHook = ''
58
cp -f ${htmx-src} appview/pages/static/htmx.min.js
59
cp -f ${lucide-src} appview/pages/static/lucide.min.js
60
${pkgs.tailwindcss}/bin/tailwindcss -i input.css -o appview/pages/static/tw.css
61
'';
62
subPackages = ["cmd/appview"];
63
vendorHash = "sha256-t7lWrCyFWCI7zjUcC6XNWzCrUPSCFnFu9gTmRTsYrz0=";
64
env.CGO_ENABLED = 1;
65
stdenv = pkgsStatic.stdenv;
66
};
67
knotserver = with final;
68
final.pkgsStatic.buildGoModule {
69
pname = "knotserver";
70
version = "0.1.0";
71
src = gitignoreSource ./.;
72
subPackages = ["cmd/knotserver"];
73
vendorHash = "sha256-t7lWrCyFWCI7zjUcC6XNWzCrUPSCFnFu9gTmRTsYrz0=";
74
env.CGO_ENABLED = 1;
75
};
76
};
77
packages = forAllSystems (system: {
78
inherit (nixpkgsFor."${system}") indigo-lexgen appview knotserver;
79
});
80
defaultPackage = forAllSystems (system: nixpkgsFor.${system}.appview);
81
formatter = forAllSystems (system: nixpkgsFor."${system}".alejandra);
82
devShells = forAllSystems (system: let
83
pkgs = nixpkgsFor.${system};
84
staticShell = pkgs.mkShell.override {
85
stdenv = pkgs.pkgsStatic.stdenv;
86
};
87
in {
88
default = staticShell {
89
nativeBuildInputs = [
90
pkgs.go
91
pkgs.air
92
pkgs.gopls
93
pkgs.httpie
94
pkgs.indigo-lexgen
95
pkgs.litecli
96
pkgs.websocat
97
pkgs.tailwindcss
98
];
99
};
100
});
101
apps = forAllSystems (system: let
102
pkgs = nixpkgsFor."${system}";
103
air-watcher = name:
104
pkgs.writeShellScriptBin "run"
105
''
106
${pkgs.air}/bin/air -c /dev/null \
107
-build.cmd "${pkgs.tailwindcss}/bin/tailwindcss -i input.css -o ./appview/pages/static/tw.css && ${pkgs.go}/bin/go build -o ./out/${name}.out ./cmd/${name}/main.go" \
108
-build.bin "./out/${name}.out" \
109
-build.include_ext "go,html,css"
110
'';
111
in {
112
watch-appview = {
113
type = "app";
114
program = ''${air-watcher "appview"}/bin/run'';
115
};
116
watch-knotserver = {
117
type = "app";
118
program = ''${air-watcher "knotserver"}/bin/run'';
119
};
120
});
121
};
122
}
123