forked from
tangled.org/core
Monorepo for Tangled — https://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 }: 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}