yep, more dotfiles

add git-pages module

wiro.world dd5ef127 75b73a99

verified
+242 -9
+101 -4
flake.lock
··· 250 250 }, 251 251 "flake-utils": { 252 252 "inputs": { 253 - "systems": "systems_3" 253 + "systems": "systems_2" 254 + }, 255 + "locked": { 256 + "lastModified": 1731533236, 257 + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", 258 + "owner": "numtide", 259 + "repo": "flake-utils", 260 + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", 261 + "type": "github" 262 + }, 263 + "original": { 264 + "owner": "numtide", 265 + "repo": "flake-utils", 266 + "type": "github" 267 + } 268 + }, 269 + "flake-utils_2": { 270 + "inputs": { 271 + "systems": "systems_4" 254 272 }, 255 273 "locked": { 256 274 "lastModified": 1694529238, ··· 302 320 "owner": "mrnossiom", 303 321 "repo": "git-leave", 304 322 "type": "github" 323 + } 324 + }, 325 + "git-pages": { 326 + "inputs": { 327 + "flake-utils": "flake-utils", 328 + "gomod2nix": "gomod2nix", 329 + "nix-filter": "nix-filter", 330 + "nixpkgs": [ 331 + "nixpkgs" 332 + ] 333 + }, 334 + "locked": { 335 + "lastModified": 1769213934, 336 + "narHash": "sha256-LB4KT3TqBOMzqbkm9UJo5dsasbwF7lgPEFN1FuwoxBY=", 337 + "ref": "refs/heads/main", 338 + "rev": "d3c8db6229094b756a15a7d8c6bc1707959ddded", 339 + "revCount": 418, 340 + "type": "git", 341 + "url": "https://codeberg.org/git-pages/git-pages" 342 + }, 343 + "original": { 344 + "type": "git", 345 + "url": "https://codeberg.org/git-pages/git-pages" 305 346 } 306 347 }, 307 348 "gitignore": { ··· 410 451 }, 411 452 "gomod2nix": { 412 453 "inputs": { 413 - "flake-utils": "flake-utils", 454 + "flake-utils": [ 455 + "git-pages", 456 + "flake-utils" 457 + ], 458 + "nixpkgs": [ 459 + "git-pages", 460 + "nixpkgs" 461 + ] 462 + }, 463 + "locked": { 464 + "lastModified": 1763982521, 465 + "narHash": "sha256-ur4QIAHwgFc0vXiaxn5No/FuZicxBr2p0gmT54xZkUQ=", 466 + "owner": "nix-community", 467 + "repo": "gomod2nix", 468 + "rev": "02e63a239d6eabd595db56852535992c898eba72", 469 + "type": "github" 470 + }, 471 + "original": { 472 + "owner": "nix-community", 473 + "repo": "gomod2nix", 474 + "type": "github" 475 + } 476 + }, 477 + "gomod2nix_2": { 478 + "inputs": { 479 + "flake-utils": "flake-utils_2", 414 480 "nixpkgs": [ 415 481 "tangled", 416 482 "nixpkgs" ··· 618 684 "type": "github" 619 685 } 620 686 }, 687 + "nix-filter": { 688 + "locked": { 689 + "lastModified": 1757882181, 690 + "narHash": "sha256-+cCxYIh2UNalTz364p+QYmWHs0P+6wDhiWR4jDIKQIU=", 691 + "owner": "numtide", 692 + "repo": "nix-filter", 693 + "rev": "59c44d1909c72441144b93cf0f054be7fe764de5", 694 + "type": "github" 695 + }, 696 + "original": { 697 + "owner": "numtide", 698 + "repo": "nix-filter", 699 + "type": "github" 700 + } 701 + }, 621 702 "nix-index-database": { 622 703 "inputs": { 623 704 "nixpkgs": [ ··· 723 804 "agenix": "agenix", 724 805 "disko": "disko", 725 806 "git-leave": "git-leave", 807 + "git-pages": "git-pages", 726 808 "home-manager": "home-manager", 727 809 "hypixel-bank-tracker": "hypixel-bank-tracker", 728 810 "lanzaboote": "lanzaboote", ··· 868 950 "nixpkgs" 869 951 ], 870 952 "nur": "nur", 871 - "systems": "systems_2", 953 + "systems": "systems_3", 872 954 "tinted-foot": "tinted-foot", 873 955 "tinted-kitty": "tinted-kitty", 874 956 "tinted-schemes": "tinted-schemes", ··· 935 1017 "type": "github" 936 1018 } 937 1019 }, 1020 + "systems_4": { 1021 + "locked": { 1022 + "lastModified": 1681028828, 1023 + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", 1024 + "owner": "nix-systems", 1025 + "repo": "default", 1026 + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", 1027 + "type": "github" 1028 + }, 1029 + "original": { 1030 + "owner": "nix-systems", 1031 + "repo": "default", 1032 + "type": "github" 1033 + } 1034 + }, 938 1035 "tangled": { 939 1036 "inputs": { 940 1037 "actor-typeahead-src": "actor-typeahead-src", 941 1038 "flake-compat": "flake-compat_3", 942 - "gomod2nix": "gomod2nix", 1039 + "gomod2nix": "gomod2nix_2", 943 1040 "htmx-src": "htmx-src", 944 1041 "htmx-ws-src": "htmx-ws-src", 945 1042 "ibm-plex-mono-src": "ibm-plex-mono-src",
+3
flake.nix
··· 36 36 git-leave.url = "github:mrnossiom/git-leave"; 37 37 git-leave.inputs.nixpkgs.follows = "nixpkgs"; 38 38 39 + git-pages.url = "git+https://codeberg.org/git-pages/git-pages"; 40 + git-pages.inputs.nixpkgs.follows = "nixpkgs"; 41 + 39 42 hypixel-bank-tracker.url = "github:pixilie/hypixel-bank-tracker"; 40 43 hypixel-bank-tracker.inputs.nixpkgs.follows = "nixpkgs"; 41 44
+1
globals.nix
··· 11 11 headscale = "headscale.${wiro-world}"; 12 12 matrix = "matrix.${wiro-world}"; 13 13 miniflux = "news.${wiro-world}"; 14 + pages = "pages.${wiro-world}"; 14 15 pds = "pds.${wiro-world}"; 15 16 static = "static.${wiro-world}"; 16 17 tangled-knot = "knot.${wiro-world}";
+1
home-manager/fragments/tools.nix
··· 40 40 file 41 41 fzf 42 42 gemini-cli 43 + git-pages-cli 43 44 inetutils 44 45 jq 45 46 just
+1 -5
hosts/weird-row-server/default.nix
··· 25 25 26 26 ./agnos.nix 27 27 ./authelia.nix 28 + # ./git-pages.nix 28 29 ./goatcounter.nix 29 30 ./grafana.nix 30 31 ./headscale.nix ··· 168 169 header_up Host {http.request.host} 169 170 } 170 171 ''; 171 - 172 - virtualHosts.${globals.domains.static}.extraConfig = '' 173 - root /var/www/static 174 - file_server browse 175 - ''; 176 172 }; 177 173 178 174 # TODO: use bind to declare dns records declaratively
+42
hosts/weird-row-server/git-pages.nix
··· 1 + { 2 + self, 3 + config, 4 + globals, 5 + ... 6 + }: 7 + 8 + { 9 + imports = [ self.nixosModules.git-pages ]; 10 + 11 + config = { 12 + local.ports.git-pages = 3017; 13 + 14 + services.git-pages = { 15 + enable = true; 16 + settings = { 17 + log-format = "text"; 18 + 19 + server = { 20 + pages = "tcp/localhost:${config.local.ports.git-pages.string}"; 21 + caddy = "-"; 22 + metrics = "-"; 23 + }; 24 + 25 + # TODO: fallback to 404 page 26 + }; 27 + }; 28 + 29 + services.caddy = { 30 + virtualHosts.${globals.domains.pages} = { 31 + serverAliases = [ "test.wiro.world" ]; 32 + extraConfig = '' 33 + # TODO: enforce some kind of authentication for publishing websites 34 + # @write_ops { not method GET HEAD } 35 + # basicauth @write_ops { } 36 + 37 + reverse_proxy http://localhost:${config.local.ports.git-pages.string} 38 + ''; 39 + }; 40 + }; 41 + }; 42 + }
+1
modules/nixos/default.nix
··· 1 1 { 2 2 logiops = ./logiops.nix; 3 + git-pages = ./git-pages.nix; 3 4 }
+90
modules/nixos/git-pages.nix
··· 1 + { 2 + config, 3 + lib, 4 + pkgs, 5 + lpkgs, 6 + ... 7 + }: 8 + 9 + let 10 + inherit (lib) 11 + mkEnableOption 12 + mkPackageOption 13 + mkOption 14 + mkIf 15 + types 16 + ; 17 + 18 + cfg = config.services.git-pages; 19 + 20 + toml-format = pkgs.formats.toml { }; 21 + configFile = toml-format.generate "git-pages-config.toml" cfg.settings; 22 + in 23 + { 24 + options.services.git-pages = { 25 + enable = mkEnableOption "git-pages static site server"; 26 + 27 + package = mkPackageOption lpkgs "git-pages" { }; 28 + 29 + dataDir = mkOption { 30 + type = types.path; 31 + default = "/var/lib/git-pages"; 32 + description = "Directory to store site data and manifests."; 33 + }; 34 + 35 + insecure = mkOption { 36 + type = types.bool; 37 + default = false; 38 + description = "Whether to enable PAGES_INSECURE (disables authentication). Do not use in production."; 39 + }; 40 + 41 + settings = mkOption { 42 + type = types.attrsOf types.anything; 43 + default = { }; 44 + example = { 45 + storage = { 46 + type = "filesystem"; 47 + path = "/var/lib/git-pages/data"; 48 + }; 49 + }; 50 + description = "Structured TOML configuration for the server."; 51 + }; 52 + 53 + environmentFile = mkOption { 54 + type = types.nullOr types.path; 55 + default = null; 56 + description = "File containing environment variables (e.g., for S3 credentials or Sentry DSN)."; 57 + }; 58 + }; 59 + 60 + config = mkIf cfg.enable { 61 + systemd.services.git-pages = { 62 + description = "git-pages static site server"; 63 + after = [ "network.target" ]; 64 + wantedBy = [ "multi-user.target" ]; 65 + 66 + serviceConfig = { 67 + ExecStart = "${cfg.package}/bin/git-pages -config ${configFile}"; 68 + Restart = "always"; 69 + User = "git-pages"; 70 + Group = "git-pages"; 71 + StateDirectory = "git-pages"; 72 + WorkingDirectory = cfg.dataDir; 73 + EnvironmentFile = mkIf (cfg.environmentFile != null) cfg.environmentFile; 74 + }; 75 + 76 + environment = { 77 + PAGES_INSECURE = if cfg.insecure then "1" else "0"; 78 + ENVIRONMENT = "production"; 79 + }; 80 + }; 81 + 82 + users.users.git-pages = { 83 + isSystemUser = true; 84 + group = "git-pages"; 85 + home = cfg.dataDir; 86 + createHome = true; 87 + }; 88 + users.groups.git-pages = { }; 89 + }; 90 + }
+2
pkgs/default.nix
··· 12 12 inherit (self.inputs) 13 13 agenix 14 14 git-leave 15 + git-pages 15 16 nix-alien 16 17 wakatime-ls 17 18 ; ··· 27 28 # Import packages defined in foreign repositories 28 29 inherit (agenix.packages.${system}) agenix; 29 30 inherit (git-leave.packages.${system}) git-leave; 31 + inherit (git-pages.packages.${system}) git-pages; 30 32 inherit (nix-alien.packages.${system}) nix-alien; 31 33 inherit (wakatime-ls.packages.${system}) wakatime-ls; 32 34 }