forked from
tangled.org/core
fork
Configure Feed
Select the types of activity you want to include in your feed.
Monorepo for Tangled
fork
Configure Feed
Select the types of activity you want to include in your feed.
1{
2 description = "atproto github";
3
4 inputs = {
5 nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
6 gomod2nix = {
7 url = "github:nix-community/gomod2nix";
8 inputs.nixpkgs.follows = "nixpkgs";
9 };
10 indigo = {
11 url = "github:oppiliappan/indigo";
12 flake = false;
13 };
14 htmx-src = {
15 url = "https://unpkg.com/htmx.org@2.0.4/dist/htmx.min.js";
16 flake = false;
17 };
18 htmx-ws-src = {
19 # strange errors in consle that i can't really make out
20 # url = "https://unpkg.com/htmx.org@2.0.4/dist/ext/ws.js";
21 url = "https://cdn.jsdelivr.net/npm/htmx-ext-ws@2.0.2";
22 flake = false;
23 };
24 lucide-src = {
25 url = "https://github.com/lucide-icons/lucide/releases/download/0.536.0/lucide-icons-0.536.0.zip";
26 flake = false;
27 };
28 inter-fonts-src = {
29 url = "https://github.com/rsms/inter/releases/download/v4.1/Inter-4.1.zip";
30 flake = false;
31 };
32 ibm-plex-mono-src = {
33 url = "https://github.com/IBM/plex/releases/download/%40ibm%2Fplex-mono%401.1.0/ibm-plex-mono.zip";
34 flake = false;
35 };
36 sqlite-lib-src = {
37 url = "https://sqlite.org/2024/sqlite-amalgamation-3450100.zip";
38 flake = false;
39 };
40 };
41
42 outputs = {
43 self,
44 nixpkgs,
45 gomod2nix,
46 indigo,
47 htmx-src,
48 htmx-ws-src,
49 lucide-src,
50 inter-fonts-src,
51 sqlite-lib-src,
52 ibm-plex-mono-src,
53 }: let
54 supportedSystems = ["x86_64-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin"];
55 forAllSystems = nixpkgs.lib.genAttrs supportedSystems;
56 nixpkgsFor = forAllSystems (system: nixpkgs.legacyPackages.${system});
57
58 mkPackageSet = pkgs:
59 pkgs.lib.makeScope pkgs.newScope (self: {
60 src = let
61 fs = pkgs.lib.fileset;
62 in
63 fs.toSource {
64 root = ./.;
65 fileset = fs.difference (fs.intersection (fs.gitTracked ./.) (fs.fileFilter (file: !(file.hasExt "nix")) ./.)) (fs.maybeMissing ./.jj);
66 };
67 buildGoApplication =
68 (self.callPackage "${gomod2nix}/builder" {
69 gomod2nix = gomod2nix.legacyPackages.${pkgs.system}.gomod2nix;
70 }).buildGoApplication;
71 modules = ./nix/gomod2nix.toml;
72 sqlite-lib = self.callPackage ./nix/pkgs/sqlite-lib.nix {
73 inherit (pkgs) gcc;
74 inherit sqlite-lib-src;
75 };
76 genjwks = self.callPackage ./nix/pkgs/genjwks.nix {};
77 lexgen = self.callPackage ./nix/pkgs/lexgen.nix {inherit indigo;};
78 appview-static-files = self.callPackage ./nix/pkgs/appview-static-files.nix {
79 inherit htmx-src htmx-ws-src lucide-src inter-fonts-src ibm-plex-mono-src;
80 };
81 appview = self.callPackage ./nix/pkgs/appview.nix {};
82 spindle = self.callPackage ./nix/pkgs/spindle.nix {};
83 knot-unwrapped = self.callPackage ./nix/pkgs/knot-unwrapped.nix {};
84 knot = self.callPackage ./nix/pkgs/knot.nix {};
85 });
86 in {
87 overlays.default = final: prev: {
88 inherit (mkPackageSet final) lexgen sqlite-lib genjwks spindle knot-unwrapped knot appview;
89 };
90
91 packages = forAllSystems (system: let
92 pkgs = nixpkgsFor.${system};
93 packages = mkPackageSet pkgs;
94 staticPackages = mkPackageSet pkgs.pkgsStatic;
95 crossPackages = mkPackageSet pkgs.pkgsCross.gnu64.pkgsStatic;
96 in {
97 inherit (packages) appview appview-static-files lexgen genjwks spindle knot knot-unwrapped sqlite-lib;
98
99 pkgsStatic-appview = staticPackages.appview;
100 pkgsStatic-knot = staticPackages.knot;
101 pkgsStatic-knot-unwrapped = staticPackages.knot-unwrapped;
102 pkgsStatic-spindle = staticPackages.spindle;
103 pkgsStatic-sqlite-lib = staticPackages.sqlite-lib;
104
105 pkgsCross-gnu64-pkgsStatic-appview = crossPackages.appview;
106 pkgsCross-gnu64-pkgsStatic-knot = crossPackages.knot;
107 pkgsCross-gnu64-pkgsStatic-knot-unwrapped = crossPackages.knot-unwrapped;
108 pkgsCross-gnu64-pkgsStatic-spindle = crossPackages.spindle;
109
110 treefmt-wrapper = pkgs.treefmt.withConfig {
111 settings.formatter = {
112 alejandra = {
113 command = pkgs.lib.getExe pkgs.alejandra;
114 includes = ["*.nix"];
115 };
116
117 gofmt = {
118 command = pkgs.lib.getExe' pkgs.go "gofmt";
119 options = ["-w"];
120 includes = ["*.go"];
121 };
122
123 # prettier = let
124 # wrapper = pkgs.runCommandLocal "prettier-wrapper" {nativeBuildInputs = [pkgs.makeWrapper];} ''
125 # makeWrapper ${pkgs.prettier}/bin/prettier "$out" --add-flags "--plugin=${pkgs.prettier-plugin-go-template}/lib/node_modules/prettier-plugin-go-template/lib/index.js"
126 # '';
127 # in {
128 # command = wrapper;
129 # options = ["-w"];
130 # includes = ["*.html"];
131 # # causes Go template plugin errors: https://github.com/NiklasPor/prettier-plugin-go-template/issues/120
132 # excludes = ["appview/pages/templates/layouts/repobase.html" "appview/pages/templates/repo/tags.html"];
133 # };
134 };
135 };
136 });
137 defaultPackage = forAllSystems (system: self.packages.${system}.appview);
138 devShells = forAllSystems (system: let
139 pkgs = nixpkgsFor.${system};
140 packages' = self.packages.${system};
141 staticShell = pkgs.mkShell.override {
142 stdenv = pkgs.pkgsStatic.stdenv;
143 };
144 in {
145 default = staticShell {
146 nativeBuildInputs = [
147 pkgs.go
148 pkgs.air
149 pkgs.gopls
150 pkgs.httpie
151 pkgs.litecli
152 pkgs.websocat
153 pkgs.tailwindcss
154 pkgs.nixos-shell
155 pkgs.redis
156 pkgs.coreutils # for those of us who are on systems that use busybox (alpine)
157 packages'.lexgen
158 packages'.treefmt-wrapper
159 ];
160 shellHook = ''
161 mkdir -p appview/pages/static
162 # no preserve is needed because watch-tailwind will want to be able to overwrite
163 cp -fr --no-preserve=ownership ${packages'.appview-static-files}/* appview/pages/static
164 export TANGLED_OAUTH_JWKS="$(${packages'.genjwks}/bin/genjwks)"
165 '';
166 env.CGO_ENABLED = 1;
167 };
168 });
169 apps = forAllSystems (system: let
170 pkgs = nixpkgsFor."${system}";
171 packages' = self.packages.${system};
172 air-watcher = name: arg:
173 pkgs.writeShellScriptBin "run"
174 ''
175 ${pkgs.air}/bin/air -c /dev/null \
176 -build.cmd "${pkgs.go}/bin/go build -o ./out/${name}.out ./cmd/${name}/main.go" \
177 -build.bin "./out/${name}.out" \
178 -build.args_bin "${arg}" \
179 -build.stop_on_error "true" \
180 -build.include_ext "go"
181 '';
182 tailwind-watcher =
183 pkgs.writeShellScriptBin "run"
184 ''
185 ${pkgs.tailwindcss}/bin/tailwindcss -w -i input.css -o ./appview/pages/static/tw.css
186 '';
187 in {
188 fmt = {
189 type = "app";
190 program = pkgs.lib.getExe packages'.treefmt-wrapper;
191 };
192 watch-appview = {
193 type = "app";
194 program = toString (pkgs.writeShellScript "watch-appview" ''
195 echo "copying static files to appview/pages/static..."
196 ${pkgs.coreutils}/bin/cp -fr --no-preserve=ownership ${packages'.appview-static-files}/* appview/pages/static
197 ${air-watcher "appview" ""}/bin/run
198 '');
199 };
200 watch-knot = {
201 type = "app";
202 program = ''${air-watcher "knot" "server"}/bin/run'';
203 };
204 watch-tailwind = {
205 type = "app";
206 program = ''${tailwind-watcher}/bin/run'';
207 };
208 vm = let
209 guestSystem =
210 if pkgs.stdenv.hostPlatform.isAarch64
211 then "aarch64-linux"
212 else "x86_64-linux";
213 in {
214 type = "app";
215 program =
216 (pkgs.writeShellApplication {
217 name = "launch-vm";
218 text = ''
219 rootDir=$(jj --ignore-working-copy root || git rev-parse --show-toplevel) || (echo "error: can't find repo root?"; exit 1)
220 cd "$rootDir"
221
222 mkdir -p nix/vm-data/{knot,repos,spindle,spindle-logs}
223
224 export TANGLED_VM_DATA_DIR="$rootDir/nix/vm-data"
225 exec ${pkgs.lib.getExe
226 (import ./nix/vm.nix {
227 inherit nixpkgs self;
228 system = guestSystem;
229 hostSystem = system;
230 }).config.system.build.vm}
231 '';
232 })
233 + /bin/launch-vm;
234 };
235 gomod2nix = {
236 type = "app";
237 program = toString (pkgs.writeShellScript "gomod2nix" ''
238 ${gomod2nix.legacyPackages.${system}.gomod2nix}/bin/gomod2nix generate --outdir ./nix
239 '');
240 };
241 lexgen = {
242 type = "app";
243 program =
244 (pkgs.writeShellApplication {
245 name = "lexgen";
246 text = ''
247 if ! command -v lexgen > /dev/null; then
248 echo "error: must be executed from devshell"
249 exit 1
250 fi
251
252 rootDir=$(jj --ignore-working-copy root || git rev-parse --show-toplevel) || (echo "error: can't find repo root?"; exit 1)
253 cd "$rootDir"
254
255 rm -f api/tangled/*
256 lexgen --build-file lexicon-build-config.json lexicons
257 sed -i.bak 's/\tutil/\/\/\tutil/' api/tangled/*
258 ${pkgs.gotools}/bin/goimports -w api/tangled/*
259 go run cmd/gen.go
260 lexgen --build-file lexicon-build-config.json lexicons
261 rm api/tangled/*.bak
262 '';
263 })
264 + /bin/lexgen;
265 };
266 });
267
268 nixosModules.appview = {
269 lib,
270 pkgs,
271 ...
272 }: {
273 imports = [./nix/modules/appview.nix];
274
275 services.tangled-appview.package = lib.mkDefault self.packages.${pkgs.system}.appview;
276 };
277 nixosModules.knot = {
278 lib,
279 pkgs,
280 ...
281 }: {
282 imports = [./nix/modules/knot.nix];
283
284 services.tangled-knot.package = lib.mkDefault self.packages.${pkgs.system}.knot;
285 };
286 nixosModules.spindle = {
287 lib,
288 pkgs,
289 ...
290 }: {
291 imports = [./nix/modules/spindle.nix];
292
293 services.tangled-spindle.package = lib.mkDefault self.packages.${pkgs.system}.spindle;
294 };
295 };
296}