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