Monorepo for Tangled
tangled.org
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 ,
32 }:
33 let
34 supportedSystems = [ "x86_64-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin" ];
35 forAllSystems = nixpkgs.lib.genAttrs supportedSystems;
36 nixpkgsFor = forAllSystems (system:
37 import nixpkgs {
38 inherit system;
39 overlays = [ self.overlays.default ];
40 });
41 inherit (gitignore.lib) gitignoreSource;
42 in
43 {
44 overlays.default = final: prev: {
45 indigo-lexgen = with final;
46 final.buildGoModule {
47 pname = "indigo-lexgen";
48 version = "0.1.0";
49 src = indigo;
50 subPackages = [ "cmd/lexgen" ];
51 vendorHash = "sha256-pGc29fgJFq8LP7n/pY1cv6ExZl88PAeFqIbFEhB3xXs=";
52 doCheck = false;
53 };
54
55 appview = with final;
56 final.pkgsStatic.buildGoModule {
57 pname = "appview";
58 version = "0.1.0";
59 src = gitignoreSource ./.;
60 postUnpack = ''
61 pushd source
62 cp -f ${htmx-src} appview/pages/static/htmx.min.js
63 cp -f ${lucide-src} appview/pages/static/lucide.min.js
64 ${pkgs.tailwindcss}/bin/tailwindcss -i input.css -o appview/pages/static/tw.css
65 popd
66 '';
67 doCheck = false;
68 subPackages = [ "cmd/appview" ];
69 vendorHash = "sha256-u9LwvapAwyVOIOAag0IRrk+ot6B0PaqyEnt0EeJciGQ=";
70 env.CGO_ENABLED = 1;
71 stdenv = pkgsStatic.stdenv;
72 };
73 knotserver = with final;
74 final.pkgsStatic.buildGoModule {
75 pname = "knotserver";
76 version = "0.1.0";
77 src = gitignoreSource ./.;
78 subPackages = [ "cmd/knotserver" ];
79 vendorHash = "sha256-t7lWrCyFWCI7zjUcC6XNWzCrUPSCFnFu9gTmRTsYrz0=";
80 env.CGO_ENABLED = 1;
81 };
82 repoguard = with final;
83 final.pkgsStatic.buildGoModule {
84 pname = "repoguard";
85 version = "0.1.0";
86 src = gitignoreSource ./.;
87 subPackages = [ "cmd/repoguard" ];
88 vendorHash = "sha256-t7lWrCyFWCI7zjUcC6XNWzCrUPSCFnFu9gTmRTsYrz0=";
89 env.CGO_ENABLED = 0;
90 };
91 keyfetch = with final;
92 final.pkgsStatic.buildGoModule {
93 pname = "keyfetch";
94 version = "0.1.0";
95 src = gitignoreSource ./.;
96 subPackages = [ "cmd/keyfetch" ];
97 vendorHash = "sha256-t7lWrCyFWCI7zjUcC6XNWzCrUPSCFnFu9gTmRTsYrz0=";
98 env.CGO_ENABLED = 0;
99 };
100 };
101 packages = forAllSystems (system: {
102 inherit (nixpkgsFor."${system}") indigo-lexgen appview knotserver repoguard keyfetch;
103 });
104 defaultPackage = forAllSystems (system: nixpkgsFor.${system}.appview);
105 formatter = forAllSystems (system: nixpkgsFor."${system}".alejandra);
106 devShells = forAllSystems (system:
107 let
108 pkgs = nixpkgsFor.${system};
109 staticShell = pkgs.mkShell.override {
110 stdenv = pkgs.pkgsStatic.stdenv;
111 };
112 in
113 {
114 default = staticShell {
115 nativeBuildInputs = [
116 pkgs.go
117 pkgs.air
118 pkgs.gopls
119 pkgs.httpie
120 pkgs.indigo-lexgen
121 pkgs.litecli
122 pkgs.websocat
123 pkgs.tailwindcss
124 ];
125 };
126 });
127 apps = forAllSystems (system:
128 let
129 pkgs = nixpkgsFor."${system}";
130 air-watcher = name:
131 pkgs.writeShellScriptBin "run"
132 ''
133 ${pkgs.air}/bin/air -c /dev/null \
134 -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" \
135 -build.bin "./out/${name}.out" \
136 -build.include_ext "go,html,css"
137 '';
138 in
139 {
140 watch-appview = {
141 type = "app";
142 program = ''${air-watcher "appview"}/bin/run'';
143 };
144 watch-knotserver = {
145 type = "app";
146 program = ''${air-watcher "knotserver"}/bin/run'';
147 };
148 });
149 };
150}