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