Author SHA1 Message Date
klaatu 37cf9825a7 chore: update flake.lock 2026-06-07
buildbot/nix-eval Build done. (2 warnings)
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux Build done.
buildbot/nix-build gitea:greg/nixos#checks.aarch64-linux Build done.
buildbot/nix-build gitea:greg/nixos#checks.aarch64-darwin.pkg-aacs Build done.
buildbot/nix-build gitea:greg/nixos#checks.aarch64-darwin.hm-gregs-MacBook-Pro-16-inch-Nov-2024 Build done.
buildbot/nix-build gitea:greg/nixos#checks.aarch64-darwin.pkg-adblock_update Build done.
buildbot/nix-build gitea:greg/nixos#checks.aarch64-darwin.pkg-brew Build done.
buildbot/nix-build gitea:greg/nixos#checks.aarch64-darwin.pkg-gcc-tune Build done.
buildbot/nix-build gitea:greg/nixos#checks.aarch64-darwin.pkg-inject Build done.
buildbot/nix-build gitea:greg/nixos#checks.aarch64-darwin.pkg-hms Build done.
buildbot/nix-build gitea:greg/nixos#checks.aarch64-darwin.pkg-create_ssl Build done.
buildbot/nix-build gitea:greg/nixos#checks.aarch64-darwin.pkg-inject-darwin Build done.
buildbot/nix-build gitea:greg/nixos#checks.aarch64-darwin.pkg-setup-ssh Build done.
buildbot/nix-build gitea:greg/nixos#checks.aarch64-darwin.hm-lithic Build done.
buildbot/nix-build gitea:greg/nixos#checks.aarch64-darwin.pkg-upgrade-pg-cluster Build done.
buildbot/nix-build Build done.
2026-06-07 00:02:03 +00:00
Greg Hellings c8951f6da8 chore: add build tools
buildbot/nix-eval Build done. (1 warning)
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
2026-06-05 10:39:41 -05:00
Greg Hellings 394c2c2aba chore: arr to NAS
buildbot/nix-eval Build done. (1 warning)
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
2026-06-04 13:31:26 -05:00
Greg Hellings bb7a01f758 fix: point directly to pypi, not through simple
buildbot/nix-eval Build done. (1 warning)
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
2026-06-04 10:24:49 -05:00
Greg Hellings a6b46f9c74 chore: remove unused anubis container
buildbot/nix-eval Build done. (1 warning)
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
2026-06-03 21:02:00 -05:00
Greg Hellings e865d0832e chore: update longhorn and gitea versions 2026-06-01 15:56:06 -05:00
Greg Hellings 307dbbe044 fix: do not claim mastery of TS net
buildbot/nix-eval Build done. (1 warning)
buildbot/nix-build Build started.
2026-05-30 00:24:36 -05:00
Greg Hellings 69651258d6 chore: connect buildbot and gitea by tailscale 2026-05-28 16:57:05 -05:00
Greg Hellings 53c491f537 fix: buildbot domain name 2026-05-26 07:48:39 -05:00
klaatuandGreg Hellings a8ccb1b6ba chore: update flake.lock 2026-05-24
buildbot/nix-eval Build done. (1 warning)
buildbot/nix-build Build started.
2026-05-24 21:30:35 -05:00
rootandGreg Hellings e6217401f9 feat(gitea): add Anubis anti-crawler proxy
buildbot/nix-eval Build done. (1 warning)
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
Anubis (https://anubis.techaro.lol) is a lightweight proof-of-work
challenge that protects web services from AI crawlers and scrapers.
2026-05-24 21:25:50 -05:00
Greg Hellings d97fb37f0e chore: update SSH config for home-manager updates
buildbot/nix-eval Build done. (1 warning)
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
Update flake.lock / update-flake-lock (push) Successful in 1m46s
Update manifest chart versions / update-manifests (push) Successful in 29s
2026-05-21 13:19:26 -05:00
Greg Hellings 75e71f9ce9 fix: get Matrix running again
buildbot/nix-eval Build done. (1 warning)
buildbot/nix-effects Build done.
buildbot/nix-build Build done.
2026-05-20 03:27:45 -05:00
Greg Hellings 19540ea1da chore: update mariadb-operator version 2026-05-20 03:26:37 -05:00
Greg Hellings 431f78f8af fix: enable minio access for gitea backups 2026-05-19 23:48:34 -05:00
Greg Hellings 95eea6fc26 fix: enable s3 DNS aliases 2026-05-19 23:47:42 -05:00
greg 387a34ffff Merge pull request 'chore: update flake.lock 2026-05-18' (#23) from auto/update-flake-lock-20260518 into main
buildbot/nix-eval Build done. (1 warning)
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
Reviewed-on: https://src.thehellings.com/greg/nixos/pulls/23
Reviewed-by: klaatu <klaatu@thehellings.com>
2026-05-19 15:16:50 +00:00
greg 37a833887b Merge branch 'main' into auto/update-flake-lock-20260518
buildbot/nix-eval Build done. (1 warning)
buildbot/nix-build Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-hosea Build done.
2026-05-19 07:53:55 +00:00
Greg Hellings a69fc4240a chore: build IVR home config
buildbot/nix-eval Build done.
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
2026-05-19 02:40:33 -05:00
Greg Hellings 15c586fbdb fix: build failures on darwin
buildbot/nix-eval Build done.
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
2026-05-19 02:37:25 -05:00
klaatu 2daf74d134 chore: update flake.lock 2026-05-18
buildbot/nix-eval Build done. (1 warning)
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.pkg-hms Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-genesis Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-icdm-root Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-exodus Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-isaiah Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.hm-icdm-root Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-iso Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-zeke Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-hosea Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-jeremiah Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.hm-linode Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.hm-zeke Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.hm-jeremiah Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.hm-exodus Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-proxmoxtemplate Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-linode Build done.
buildbot/nix-build Build done.
2026-05-18 17:58:09 +00:00
Greg Hellings 1934787e80 chore: create desktop entry for prismlauncher
buildbot/nix-eval Build done.
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
2026-05-18 12:45:52 -05:00
Greg Hellings 2a476a7bfe chore: update refined-storage to release 2026-05-18 12:45:34 -05:00
Greg Hellings e94137ecbf fix: enable colmena building with new overlays 2026-05-18 12:45:04 -05:00
Greg Hellings d22f543043 chore: update niks3 pin to fix mega file problem 2026-05-18 12:44:34 -05:00
Greg Hellings e5e4a38cf1 chore: begin updating zim updater
buildbot/nix-eval Build done.
buildbot/nix-build Build done.
Update manifest chart versions / update-manifests (push) Successful in 29s
Update flake.lock / update-flake-lock (push) Successful in 2m49s
2026-05-13 11:01:33 -05:00
Greg Hellings 89faa7d97d fix: update SHA hashes 2026-05-13 10:50:26 -05:00
Greg Hellings fc4430e4f1 fix: system build fixes for new package setup 2026-05-13 08:33:48 -05:00
Greg Hellings f735423d98 chore: make zims separate packages
buildbot/nix-eval Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.hm-exodus Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.hm-icdm-root Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.hm-jeremiah Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-genesis Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.hm-zeke Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-linode Build done.
buildbot/nix-build gitea:greg/nixos#checks.aarch64-darwin.hm-gregs-MacBook-Pro-16-inch-Nov-2024 Build done.
buildbot/nix-build gitea:greg/nixos#checks.aarch64-darwin.hm-ivr Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux."pkg-zim-wikipedia-wikipedia_ht_all_maxi.zim" Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux."pkg-zim-phet-phet_fr_all.zim" Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux."pkg-zim-phet-phet_en_all.zim" Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux."pkg-zim-wikiversity-wikiversity_fr_all_maxi.zim" Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux."pkg-zim-wikibooks-wikibooks_fr_all_maxi.zim" Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux."pkg-zim-wiktionary-wiktionary_fr_all_nopic.zim" Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux."pkg-zim-wikiversity-wikiversity_en_all_maxi.zim" Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux."pkg-zim-wikibooks-wikibooks_en_all_maxi.zim" Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux."pkg-zim-wiktionary-wiktionary_en_all_nopic.zim" Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux."pkg-zim-gutenberg-gutenberg_fr_all.zim" Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux."pkg-zim-wikisource-wikisource_en_all_maxi.zim" Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux."pkg-zim-wikisource-wikisource_fr_all_maxi.zim" Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux."pkg-zim-wikipedia-wikipedia_fr_all_maxi.zim" Build done.
buildbot/nix-build Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux."pkg-zim-wikipedia-wikipedia_en_all_maxi.zim" Build done.
2026-05-13 08:06:57 -05:00
Greg Hellings 985dd927c4 chore: move from attic to niks3
buildbot/nix-eval Build done.
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
2026-05-12 21:25:24 -05:00
Greg Hellings 10d6f85b5e chore: update pre-commit
buildbot/nix-eval Build done.
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
Update manifest chart versions / update-manifests (push) Successful in 3s
2026-05-10 01:48:45 -05:00
Greg Hellings 85cdfce6a9 fix: use proper runs-on for updates 2026-05-10 01:47:34 -05:00
Greg Hellings e62757cf1c chore: add Ubuntu 26.04 to matrix 2026-05-10 01:42:28 -05:00
Greg Hellings a1fb195bf4 chore: add podman-tui and other goodies
buildbot/nix-eval Build done.
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
Update flake.lock / update-flake-lock (push) Failing after 4s
2026-05-07 08:28:44 -05:00
Greg Hellings 9eb9fdec6c chore: try allowing nix darwin builds
buildbot/nix-eval Build done.
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
Update flake.lock / update-flake-lock (push) Failing after 3s
Update manifest chart versions / update-manifests (push) Successful in 4s
2026-04-30 17:18:36 -05:00
Greg Hellings a8323e2396 fix: unstick macOS builds for libdrm missing
buildbot/nix-eval Build done.
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
2026-04-30 16:13:36 -05:00
Greg Hellings 855ab6e277 chore: try forcing build of linux-builder packages
buildbot/nix-eval Build done.
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
2026-04-30 16:08:23 -05:00
Greg Hellings 2932e9e335 chore: remove vm-gitlab which is no longer in use 2026-04-30 16:06:58 -05:00
Greg Hellings 4940550c62 chore: enable linux-builder on Mac
buildbot/nix-eval Build done.
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
2026-04-30 14:42:55 -05:00
Greg Hellings 258934a46b chore: update Claude code usage 2026-04-30 14:42:29 -05:00
Greg Hellings 2476be3799 chore: make builder hostname more accessible
buildbot/nix-eval Build done.
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
2026-04-30 10:09:18 -05:00
Greg Hellings 08111e7a8a chore: add ssh key to remote-builder config 2026-04-30 10:08:57 -05:00
Greg Hellings 99cc8efea0 chore: add builders to darwin baseline
buildbot/nix-eval Build done.
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
2026-04-30 09:43:46 -05:00
Greg Hellings 09198fda28 Merge branch 'main' of srcpub:greg/nixos 2026-04-30 09:40:34 -05:00
Greg Hellings e16886c62c chore: add mcp-grafana to li 2026-04-30 09:40:25 -05:00
Greg Hellings c939d67cb6 chore: allow genesis to use its own DNS
buildbot/nix-eval Build done.
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
2026-04-29 16:11:20 -05:00
Greg Hellings 600aa885d4 chore: add minecraft server 2026-04-29 16:10:31 -05:00
Greg Hellings 8efd97599a chore: remove exodus, which is x86 linux
buildbot/nix-eval Build done.
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
2026-04-29 13:20:04 -05:00
Greg Hellings 686df31049 chore: make garnix builds an array
buildbot/nix-eval Build done.
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
2026-04-29 13:14:55 -05:00
Greg Hellings c3e3ca84a2 chore: cleanup unused packages on Darwin
buildbot/nix-eval Build done.
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
2026-04-29 13:02:12 -05:00
Greg Hellings f8cc47614f chore: remove unused genesis config bits
buildbot/nix-eval Build done.
buildbot/nix-build gitea:greg/nixos#checks.aarch64-darwin.pkg-adblock_update Build done.
buildbot/nix-build Build done.
Update flake.lock / update-flake-lock (push) Failing after 8s
Update manifest chart versions / update-manifests (push) Successful in 4s
2026-04-24 18:56:10 -05:00
Greg Hellings 904754e059 fix: re-enable scheduling on Zeke disk replacement
buildbot/nix-eval Build done.
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
2026-04-24 06:46:29 -05:00
Greg Hellings 673f9b1f8b chore: expose credentials to Claude
buildbot/nix-eval Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.pkg-setup-ssh Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.hm-jeremiah Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.hm-icdm-root Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.hm-linode Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.hm-exodus Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.hm-zeke Build done.
buildbot/nix-build Build done.
2026-04-22 21:59:30 -05:00
Greg Hellings 993385f1db chore: update flake pins 2026-04-22 21:59:16 -05:00
Greg Hellings 088c1a0033 chore: add new uuid for zeke
buildbot/nix-eval Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.pkg-zim Build done.
buildbot/nix-build Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-icdm-root Build done.
2026-04-22 21:01:42 -05:00
Greg Hellings fcba03f3d0 chore: update Gitea to latest.
buildbot/nix-eval Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.pkg-zim Build done.
buildbot/nix-build Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-icdm-root Build done.
2026-04-22 20:36:03 -05:00
Greg Hellings 8ba503ca5d chore: upgrade Immich db to PG 18 2026-04-21 16:22:21 -05:00
Greg Hellings 3b78dfec41 chore: add printer to network 2026-04-20 16:18:20 -05:00
Greg Hellings 8509fff746 chore: upgrade from dnsmasq to bind 2026-04-19 01:04:41 -05:00
Greg Hellings fb4c6966af chore: upgrade Nextcloud to 33
buildbot/nix-eval Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.pkg-zim Build done.
buildbot/nix-build Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-icdm-root Build done.
Update manifest chart versions / update-manifests (push) Successful in 20s
Update flake.lock / update-flake-lock (push) Failing after 15s
2026-04-17 16:01:36 -05:00
Greg Hellings ec8c826565 chore: fix building
buildbot/nix-eval Build done. (1 warning)
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.pkg-zim Build done.
buildbot/nix-build Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-icdm-root Build done.
2026-04-17 15:54:48 -05:00
Greg Hellings e84e03cd05 chore: move charts into manifests 2026-04-17 15:43:57 -05:00
Greg Hellings 2a81d137a8 chore: add linode to new home
buildbot/nix-eval Build done.
buildbot/nix-build gitea:greg/nixos#checks.aarch64-darwin Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux Build done.
buildbot/nix-build gitea:greg/nixos#checks.aarch64-linux Build done.
buildbot/nix-build Build done.
2026-04-17 18:42:41 +00:00
Greg Hellings 70934153ac chore: update lock and links 2026-04-16 13:00:36 -05:00
Greg Hellings db475b232f Merge branch 'main' of srcpub:greg/nixos 2026-04-15 13:56:51 -05:00
Greg Hellings 32a75d84cc chore: update locks and add pulumi plugins
buildbot/nix-eval Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux Build done.
buildbot/nix-build gitea:greg/nixos#checks.aarch64-linux Build done.
buildbot/nix-build gitea:greg/nixos#checks.aarch64-darwin Build done.
buildbot/nix-build Build done.
2026-04-15 08:53:28 -05:00
Greg Hellings 640552e260 Revert "chore: update flake pins"
This reverts commit 6d1490bd28.
2026-04-13 17:35:21 -05:00
Greg Hellings b37f597eaa chore: fix pathing 2026-04-13 17:35:01 -05:00
Greg Hellings f8954fd200 fix: correct workflow runner
buildbot/nix-eval Build done.
buildbot/nix-build gitea:greg/nixos#checks.aarch64-linux Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux Build done.
buildbot/nix-build gitea:greg/nixos#checks.aarch64-darwin Build done.
buildbot/nix-build Build done.
2026-04-13 16:08:44 -05:00
Greg Hellings 6d1490bd28 chore: update flake pins 2026-04-13 16:07:23 -05:00
Greg Hellings 234f000756 feat: claude code support 2026-04-13 16:00:26 -05:00
Greg Hellings 14c7f34108 chore: lithic stuff
buildbot/nix-eval Build done.
buildbot/nix-build gitea:greg/nixos#checks.aarch64-darwin Build done.
buildbot/nix-build gitea:greg/nixos#checks.aarch64-linux Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux Build done.
buildbot/nix-build Build done.
Update manifest chart versions / update-manifests (push) Has been cancelled
Update flake.lock / update-flake-lock (push) Has been cancelled
2026-04-08 08:00:35 -05:00
Greg Hellings f354c3f353 chore: add mcp servers and claude code
buildbot/nix-eval Build done.
buildbot/nix-build gitea:greg/nixos#checks.aarch64-linux Build done.
buildbot/nix-build gitea:greg/nixos#checks.aarch64-darwin Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux Build done.
buildbot/nix-build Build done.
2026-04-07 08:43:30 -05:00
Greg Hellings c0a0c64425 feat: add ~/.local/bin/ to nushell PATH
buildbot/nix-eval Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux Build done.
buildbot/nix-build gitea:greg/nixos#checks.aarch64-darwin Build done.
buildbot/nix-build gitea:greg/nixos#checks.aarch64-linux Build done.
buildbot/nix-build Build done.
2026-04-06 16:50:06 -05:00
Greg Hellings 05f3f118ac fix: simplify inject-darwin 2026-04-06 16:24:53 -05:00
Greg Hellings 21dbcb3113 feat: aws-cli and cargo on lithic 2026-04-06 16:23:03 -05:00
Greg Hellings 6b7f54d0a2 feat: pull dynamic names for Darwin/Home 2026-04-06 16:21:02 -05:00
Greg Hellings 0d70a9e018 feat: add li host
buildbot/nix-eval Build done. (1 warning)
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
2026-04-06 08:43:41 -05:00
Greg Hellings aee34e5b86 feat: more bookmarks 2026-04-05 20:03:51 -05:00
Greg Hellings 0460014b75 feat: Add minio-client and Discord to Exodus
buildbot/nix-eval Build done. (1 warning)
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
2026-04-05 19:45:36 -05:00
Greg Hellings 84d050fb0c fix: remove files before re-upload in Immich backup
buildbot/nix-eval Build done. (1 warning)
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
Update manifest chart versions / update-manifests (push) Has been cancelled
2026-04-05 16:52:04 -05:00
Greg Hellings 3847c7d92d fix: streamline Gitea runners 2026-04-05 16:51:31 -05:00
klaatu 81936ac524 feat: Gitea Actions shell runners + flake-lock workflow
buildbot/nix-eval Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-linode Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-isaiah Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-jeremiah Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-zeke Build done.
buildbot/nix-build Build done.
- Add modules/nixos/gitea-runner.nix: NixOS module for act_runner in
  shell mode, with options for enable, instanceURL, name, labels, and
  tokenFile (agenix secret path).
- Deploy gitea-runner to jeremiah, isaiah, zeke, and linode with
  appropriate labels. Agenix secret placeholders left with TODOs.
- Add .gitea/workflows/update-flake-lock.yaml: weekly workflow (Sunday
  midnight) that runs nix flake update and opens a PR if flake.lock
  changed, using GITEA_TOKEN secret for authentication.

Closes part of #15 (NixOS shell runners + flake-lock workflow).
2026-04-05 04:58:27 -05:00
Greg Hellings 45d8154a04 Merge remote-tracking branch 'origin/feat/gitea-actions'
buildbot/nix-eval Build done. (1 warning)
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
Update flake.lock / update-flake-lock (push) Has been cancelled
2026-04-04 14:18:22 -05:00
Greg Hellings 03400f1c93 fix: pull correct secrets 2026-04-04 14:14:23 -05:00
greg 603598a3f9 Merge branch 'main' into feat/gitea-actions
buildbot/nix-eval Build done. (1 warning)
buildbot/nix-build Build done.
2026-04-04 19:13:31 +00:00
klaatu 757b07c22f fix: replace placeholder Secret with ExternalSecret via bitwarden-login
buildbot/nix-eval Build done. (1 warning)
buildbot/nix-build Build done.
2026-04-04 19:05:17 +00:00
klaatu b7fba0e151 fix: chart name act_runner -> actions, version 0.2.5 -> 0.0.4 2026-04-04 19:05:06 +00:00
greg 75278cdb6a Merge pull request 'fix: set MC_CONFIG_DIR to /tmp/.mc so mc can write config as non-root' (#20) from klaatu/nixos:fix/mc-config-dir into main
buildbot/nix-eval Build done. (1 warning)
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
Reviewed-on: https://src.thehellings.com/greg/nixos/pulls/20
Reviewed-by: greg <gitea@local.domain>
2026-04-04 18:23:42 +00:00
klaatu 67f12856e1 fix: set MC_CONFIG_DIR to /tmp/.mc so mc can write config as non-root
buildbot/nix-eval Build done. (1 warning)
buildbot/nix-build Build done.
2026-04-04 18:18:43 +00:00
Greg Hellings 475c0eda64 fix: minio secrets exposed
buildbot/nix-effects Build done.
buildbot/nix-eval Build done. (1 warning)
buildbot/nix-build Build done.
2026-04-04 13:11:31 -05:00
greg 828d61d818 Merge pull request 'feat: backup improvements — AlbyHub Restic, Gitea dump CronJob, Immich → MinIO' (#17) from klaatu/nixos:feature/backup-improvements into main
buildbot/nix-eval Build done. (1 warning)
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
Reviewed-on: https://src.thehellings.com/greg/nixos/pulls/17
Reviewed-by: greg <gitea@local.domain>
2026-04-04 18:00:16 +00:00
klaatu 0218447008 fix: address review feedback on backup improvements
buildbot/nix-eval Build done. (1 warning)
buildbot/nix-build Build done.
- manifests/gitea/dump-cronjob.yaml: Remove --skip-log, --skip-custom-dir,
  --skip-db flags to make backup complete
- manifests/gitea/dump-cronjob.yaml: Replace NFS volume + cleanup container
  with S3 upload to backup-gitea bucket using MinIO client (mc).
  30-day lifecycle set via mc ilm. Uses minio_key/minio_secret from
  existing gitea-config secret.
- hosts/unstable/hosea/default.nix: Replace raw services.restic.backups.albyhub
  block with greg.backup.jobs.albyhub using the greg.backup module.
  Remove manual age.secrets.restic-env and age.secrets.restic-pw entries
  since the greg.backup module declares them.
2026-04-04 02:05:03 -05:00
klaatu 2741be72c7 feat: add update-manifests workflow
buildbot/nix-eval Build done. (1 warning)
buildbot/nix-build Build done.
2026-04-04 06:18:14 +00:00
klaatu e8beb7f2a9 feat: add update-flake-lock workflow 2026-04-04 06:18:12 +00:00
klaatu b2728bf1de feat: add gitea-runner NixOS module 2026-04-04 06:18:10 +00:00
klaatu d65dcb51a3 feat: add gitea-runner secret placeholder 2026-04-04 06:18:07 +00:00
klaatu 87bc9a21d9 feat: add gitea-runner kustomization 2026-04-04 06:18:04 +00:00
klaatu ca25dde780 feat: add gitea-runner FluxCD HelmRelease 2026-04-04 06:18:01 +00:00
klaatu c61900f9e6 feat: add gitea-runner namespace manifest 2026-04-04 06:17:59 +00:00
klaatu 1077d357ca feat(immich): switch backup to rclone sync → MinIO immich bucket on nas1 2026-04-04 06:13:43 +00:00
klaatu 6b84824a53 feat(gitea): add dump-cronjob to kustomization 2026-04-04 06:13:00 +00:00
klaatu c74d647ec3 feat(gitea): add daily dump CronJob writing to NAS1 NFS 2026-04-04 06:12:56 +00:00
klaatu 58a5c95c32 feat(hosea): add Restic backup for AlbyHub /chain/alby 2026-04-04 06:12:31 +00:00
Greg Hellings 9a26c75884 chore: allow outgoing webhooks
buildbot/nix-eval Build done. (1 warning)
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
2026-04-03 23:49:27 -05:00
Greg Hellings 276b939252 fix: expose buildbot 2026-04-03 23:49:12 -05:00
greg 3eb44f2958 Merge pull request 'feat: expose Buildbot via nginx proxy on LAN' (#13) from klaatu/nixos:feat/buildbot-proxy into main
buildbot/nix-eval Build done. (1 warning)
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
Reviewed-on: https://src.thehellings.com/greg/nixos/pulls/13
2026-04-04 03:45:51 +00:00
klaatu 9bbdb74f85 fix: merge conflict — keep both nebula.enable and buildbot proxies
buildbot/nix-eval Build done. (1 warning)
buildbot/nix-build Build done.
2026-04-03 22:18:17 -05:00
greg 35b6058c09 Merge pull request 'feat: Nebula mesh network overlay' (#12) from klaatu/nixos:feat/nebula-mesh into main
buildbot/nix-eval Build done. (1 warning)
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
Reviewed-on: https://src.thehellings.com/greg/nixos/pulls/12
2026-04-04 03:03:53 +00:00
Greg Hellings 88d9234332 fix: no default routes 2026-04-02 08:11:32 -05:00
root eabead05ab feat: expose Buildbot via nginx proxy on LAN
buildbot/nix-eval Build done. (1 warning)
buildbot/nix-build Build done.
Add greg.proxies entries on jeremiah for buildbot.home and
buildbot.thehellings.lan, both proxying to http://localhost:8010/.
Nginx handles auth passthrough - Buildbot's own Gitea OAuth applies.

Add DNS aliases in genesis hosts file:
- buildbot.thehellings.lan → 10.42.1.8 (LAN)
- buildbot.home → 100.102.186.39 (Tailscale)
2026-04-01 17:31:38 -05:00
Greg Hellings a1bef073cf fix: generate linode certs
buildbot/nix-eval Build done. (1 warning)
buildbot/nix-build Build done.
2026-04-01 17:20:46 -05:00
root f35e8c755c fix: only set listen.port on lighthouse/relay nodes (regular nodes use OS-assigned port 0)
buildbot/nix-eval Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-linode Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-proxmoxtemplate Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-zeke Build done.
buildbot/nix-build Build done.
2026-04-01 17:14:12 -05:00
root 71ae25a58c fix: move unsafe_routes to settings.tun.unsafe_routes (correct NixOS nebula option path)
buildbot/nix-eval Build done.
2026-04-01 17:13:37 -05:00
root 0e61efe5b5 fix: rename tun.dev to tun.device (correct NixOS option name)
buildbot/nix-eval Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-exodus Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-genesis Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-isaiah Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-zeke Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-jeremiah Build done.
buildbot/nix-build Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-hosea Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-linode Build done.
2026-04-01 17:07:47 -05:00
root 84e4c68f0e fix: move unsafeRoutes to module default, genesis overrides to []
buildbot/nix-eval Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-genesis Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-exodus Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-hosea Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-isaiah Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-jeremiah Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-linode Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-zeke Build done.
buildbot/nix-build Build done.
Per review feedback:
- nebula module now defaults unsafeRoutes to [{route=10.42.0.0/16 via=10.157.0.2}]
  so all regular nodes get home LAN routing automatically
- genesis overrides unsafeRoutes=[] since it IS the routing node (avoids loop)
- exodus and all k3s nodes (hosea, isaiah, jeremiah, zeke) simplified to
  nebula.enable = true only, relying on the new default
2026-04-01 16:45:59 -05:00
greg 559155d411 Merge branch 'main' into feat/nebula-mesh
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-jeremiah Build done.
buildbot/nix-eval Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-exodus Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-isaiah Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-genesis Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-linode Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-zeke Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-hosea Build done.
buildbot/nix-build Build done.
2026-04-01 21:36:08 +00:00
Greg Hellings 2bb0177ffa chore: add encrypted keys and unencrypted certs
buildbot/nix-eval Build done.
buildbot/nix-build Build started.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-exodus Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.hm-exodus Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-genesis Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-isaiah Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-jeremiah Build done.
2026-04-01 16:33:59 -05:00
Greg Hellings 15ed4ae5f7 chore: allow click.discord.com
buildbot/nix-eval Build done. (1 warning)
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
2026-04-01 15:49:32 -05:00
root 792217f640 feat: add Nebula mesh network overlay
buildbot/nix-eval Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-exodus Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-isaiah Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-genesis Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-linode Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-jeremiah Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-zeke Build done.
buildbot/nix-build gitea:greg/nixos#checks.x86_64-linux.nixos-hosea Build done.
buildbot/nix-build Build done.
Introduces a greg.nebula NixOS module and enables it across all managed
hosts for the nebula.thehellings.com overlay (CIDR: 10.157.0.0/16).

Architecture:
- linode: lighthouse + relay (public internet, UDP 4242)
- genesis: regular node + unsafe_routes router for 10.42.0.0/16 (home LAN)
- hosea, isaiah, jeremiah, zeke, exodus: regular nodes with unsafe_routes
  pointing to genesis to reach the home LAN

Changes:
- modules/nixos/nebula.nix: new greg.nebula module
  - isLighthouse / isRelay options
  - unsafeRoutes option (tun.unsafe_routes)
  - routesSubnet option: enables IP forwarding + nftables masquerade NAT
    on the gateway host (genesis) so Nebula peers reach 10.42.0.0/16
  - agenix secret reference per-host (secrets/nebula/<name>.key.age)
  - opens UDP/4242 in the firewall
- modules/nixos/default.nix: import nebula.nix
- hosts/unstable/linode/default.nix: greg.nebula.isLighthouse = true
- hosts/unstable/genesis/default.nix: greg.nebula.routesSubnet = "10.42.0.0/16"
- hosts/unstable/{hosea,isaiah,jeremiah,zeke,exodus}/default.nix:
  greg.nebula.enable = true with unsafeRoutes via genesis
- network.json: add nebulaIp field for each managed host
- secrets/secrets.nix: declare nebula/<host>.key.age entries
- secrets/nebula/README.md: full PKI bootstrap guide (CA, certs, agenix)
2026-03-28 23:24:52 -05:00
greg ba1914e48c Merge pull request 'feat: add top-5 fullest PVs panel to Kubernetes dashboard' (#11) from klaatu/nixos:feat/k8s-volume-dashboard into main
buildbot/nix-eval Build done. (1 warning)
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
Reviewed-on: https://src.thehellings.com/greg/nixos/pulls/11
2026-03-27 15:25:44 +00:00
root 07b3601206 feat: add top-5 fullest PVs panel to Kubernetes dashboard
buildbot/nix-eval Build done. (1 warning)
buildbot/nix-build Build done.
Add a horizontal bar gauge showing the disk usage % of the 5 most-full
PersistentVolumes in the cluster, using kubelet volume stats already
scraped by Prometheus:

  topk(5, kubelet_volume_stats_used_bytes
           / kubelet_volume_stats_capacity_bytes * 100)

Labels show namespace/PVC name. Color thresholds: green <70%, yellow
70–90%, red >90%. Placed at the bottom of the dashboard (y=46).

Bump dashboard version to 3.
2026-03-27 09:06:19 -05:00
Greg Hellings 93458eb6d4 chore: slight updates to Network dashboard
buildbot/nix-eval Build done. (1 warning)
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
2026-03-27 09:03:07 -05:00
greg 6f7b3c238e Merge pull request 'fix: correct unpoller metric names in Network & UniFi dashboard' (#10) from klaatu/nixos:fix/network-dashboard-metrics into main
buildbot/nix-eval Build done. (1 warning)
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
Reviewed-on: https://src.thehellings.com/greg/nixos/pulls/10
Reviewed-by: greg <gitea@local.domain>
2026-03-27 13:51:18 +00:00
root de0b8fb07e fix: correct unpoller metric names in network dashboard
buildbot/nix-eval Build done. (1 warning)
buildbot/nix-build Build done.
All metrics had wrong prefix (unifipoller_ → unpoller_) and several
had incorrect names entirely. Corrected against unpoller master source
(pkg/promunifi/):

- unifipoller_device_uptime_seconds → unpoller_device_uptime_seconds
- unifipoller_port_receive_bytes_total → unpoller_device_port_receive_bytes_total
  (port metrics live under device_ namespace: unpoller_device_port_*)
- unifipoller_port_transmit_bytes_total → unpoller_device_port_transmit_bytes_total
- unifipoller_device_wan_receive_bytes_total → unpoller_wan_max_rx_bytes_rate
  (no per-device WAN bytes total counter; WAN ns is unpoller_wan_*;
   rate metrics are already instantaneous gauges, no rate() wrapper)
- unifipoller_device_wan_transmit_bytes_total → unpoller_wan_max_tx_bytes_rate
- unifipoller_client_wifi_tx_rate_bps → count(unpoller_client_uptime_seconds{wired="false"})
  (no wifi-specific rate metric; wired label distinguishes client types)
- unifipoller_client_wired_tx_rate_bps → count(unpoller_client_uptime_seconds{wired="true"})
- unifipoller_client_receive_bytes_total → unpoller_client_receive_bytes_total
- unifipoller_client_transmit_bytes_total → unpoller_client_transmit_bytes_total

Bump dashboard version to 3.
2026-03-27 08:44:12 -05:00
greg 3111548c99 Merge pull request 'feat: kube-state-metrics, Restic ExternalSecret, updated dashboards' (#9) from klaatu/nixos:fix/observability-complete into main
buildbot/nix-eval Build done. (1 warning)
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
Reviewed-on: https://src.thehellings.com/greg/nixos/pulls/9
Reviewed-by: greg <gitea@local.domain>
2026-03-27 13:27:30 +00:00
Greg Hellings 841224b20f fix: update external-secrets apiVersion
buildbot/nix-eval Build done. (1 warning)
buildbot/nix-build Build done.
2026-03-27 08:27:03 -05:00
klaatuandGreg Hellings 45536f4a8d feat: update kubernetes and network Grafana dashboards
buildbot/nix-eval Build done. (1 warning)
buildbot/nix-build Build done.
2026-03-27 08:19:45 -05:00
klaatuandGreg Hellings 4717763fed feat: add restic ExternalSecret for Prometheus basic auth 2026-03-27 08:19:45 -05:00
klaatuandGreg Hellings 53f33eb13a feat: add kube-state-metrics 2026-03-27 08:19:45 -05:00
klaatuandGreg Hellings b18807b1ef feat: add kube-state-metrics.yaml and restic-secret.yaml to kustomization 2026-03-27 08:19:45 -05:00
klaatuandGreg Hellings 2c0b4b1472 feat: add kube_state_metrics job, restic basic_auth, remove kea job 2026-03-27 08:19:40 -05:00
klaatuandGreg Hellings d713e5104c feat: mount restic-credentials secret into Prometheus 2026-03-27 08:18:53 -05:00
Greg Hellings e9a4662620 fix: open kubelet/cadvisor prometheus ports
buildbot/nix-eval Build done. (1 warning)
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
2026-03-26 05:58:52 -05:00
Greg Hellings eba1a0c1ca fix: make restic https 2026-03-26 05:56:21 -05:00
Greg Hellings 4eb5d6873a chore: remove unused kea configuration
buildbot/nix-eval Build done. (1 warning)
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
2026-03-26 05:45:16 -05:00
greg 71f553a6f2 Merge pull request 'fix: add missing shire-zebra.ts.net DNS entries; update exodus Tailscale IP' (#8) from klaatu/nixos:fix/tailscale-dns-entries into main
buildbot/nix-eval Build done. (1 warning)
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
Reviewed-on: https://src.thehellings.com/greg/nixos/pulls/8
2026-03-26 02:48:34 +00:00
root 8e218a71e0 fix: add missing shire-zebra.ts.net DNS entries; update exodus Tailscale IP
buildbot/nix-eval Build done. (1 warning)
buildbot/nix-build Build done.
genesis, zeke, linode, and exodus were missing shire-zebra.ts.net
aliases in the genesis dnsmasq hosts file. Only hosea, isaiah,
jeremiah, gitlab, matrix, chronicles, and nas1 had them. Since
genesis is the DNS server for the whole network, Prometheus (and
everything else) couldn't resolve those four hostnames, causing
instant connection failures on scrape.

Also update exodus Tailscale IP from 100.80.99.48 to 100.70.99.91
(stale IP in both network.json and the hosts file).
2026-03-25 21:12:51 -05:00
175 changed files with 3354 additions and 2704 deletions
+51
View File
@@ -0,0 +1,51 @@
name: Update flake.lock
"on":
schedule:
- cron: "0 0 * * 0" # Every Sunday at midnight UTC
workflow_dispatch:
jobs:
update-flake-lock:
runs-on: nix-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Update flake.lock
run: nix flake update
- name: Create PR if changed
env:
GITEA_TOKEN: ${{ secrets.KLAATU_TOKEN }}
GITEA_URL: https://src.thehellings.com
REPO: greg/nixos
run: |
if git diff --quiet flake.lock; then
echo "flake.lock unchanged, nothing to do"
exit 0
fi
BRANCH="auto/update-flake-lock-$(date +%Y%m%d)"
git config user.email "klaatu@thehellings.com"
git config user.name "klaatu"
git checkout -b "$BRANCH"
git add flake.lock
git commit -m "chore: update flake.lock $(date +%Y-%m-%d)"
# Push branch using token auth
git remote set-url origin "https://klaatu:${GITEA_TOKEN}@${GITEA_URL#https://}/${REPO}.git"
git push origin "$BRANCH"
# Create PR via Gitea API
curl -s -X POST \
-H "Authorization: token ${GITEA_TOKEN}" \
-H "Content-Type: application/json" \
"${GITEA_URL}/api/v1/repos/${REPO}/pulls" \
-d "{
\"title\": \"chore: update flake.lock $(date +%Y-%m-%d)\",
\"head\": \"$BRANCH\",
\"base\": \"main\",
\"body\": \"Automated weekly flake.lock update.\\n\\nGenerated by Gitea Actions.\",
\"assignees\": [\"greg\"]
}"
+58
View File
@@ -0,0 +1,58 @@
name: Update manifest chart versions
on:
schedule:
- cron: "0 0 * * 1" # Every Monday at midnight UTC
workflow_dispatch:
jobs:
update-manifests:
runs-on: [bare-metal, nix-latest]
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Scan manifests for chart version updates
run: |
echo "TODO: implement manifest update scanning"
echo ""
echo "Planned implementation:"
echo " 1. Parse each manifests/*/chart.yaml for HelmRelease chart versions"
echo " 2. Query artifact hub or helm repo for latest versions"
echo " 3. Emit a diff of available updates"
echo ""
echo "Scanned manifests directories:"
ls manifests/
- name: Create PR if changes found
env:
GITEA_TOKEN: ${{ secrets.KLAATU_TOKEN }}
GITEA_URL: https://src.thehellings.com
REPO: greg/nixos
run: |
if git diff --quiet; then
echo "No manifest changes, nothing to do"
exit 0
fi
BRANCH="auto/update-manifests-$(date +%Y%m%d)"
git config user.email "klaatu@thehellings.com"
git config user.name "klaatu"
git checkout -b "$BRANCH"
git add manifests/
git commit -m "chore: update manifest chart versions $(date +%Y-%m-%d)"
git remote set-url origin "https://klaatu:${GITEA_TOKEN}@${GITEA_URL#https://}/${REPO}.git"
git push origin "$BRANCH"
curl -s -X POST \
-H "Authorization: token ${GITEA_TOKEN}" \
-H "Content-Type: application/json" \
"${GITEA_URL}/api/v1/repos/${REPO}/pulls" \
-d "{
\"title\": \"chore: update manifest chart versions $(date +%Y-%m-%d)\",
\"head\": \"$BRANCH\",
\"base\": \"main\",
\"body\": \"Automated weekly manifest chart version update.\\n\\nGenerated by Gitea Actions.\",
\"assignees\": [\"greg\"]
}"
-23
View File
@@ -1,23 +0,0 @@
stages:
- eval
- build
- push
"Evaluate for builds":
stage: eval
tags:
- kubernetes
image: "$CI_REGISTRY/greg/ci-images/builder:latest"
artifacts:
paths:
- gitlab-ci-continue.yml
script: nix run ".#gen-build" > gitlab-ci-continue.yml
"Trigger builds":
stage: build
trigger:
include:
- artifact: gitlab-ci-continue.yml
job: "Evaluate for builds"
variables:
PARENT_PIPELINE_ID: $CI_PIPELINE_ID
+3 -2
View File
@@ -17,7 +17,7 @@ repos:
- id: mixed-line-ending
- id: trailing-whitespace
- repo: https://github.com/adrienverge/yamllint.git
rev: v1.37.1
rev: v1.38.0
hooks:
- id: yamllint
args:
@@ -30,8 +30,9 @@ repos:
comments: false
comments-indentation: false
document-start: false
line-length: false
- repo: https://github.com/NixOS/nixfmt
rev: v1.1.0
rev: v1.2.0
hooks:
- id: nixfmt-nix
- repo: https://github.com/astro/deadnix
+25 -24
View File
@@ -1,29 +1,40 @@
{
lib,
pkgs,
pkgs',
top,
...
}:
let
builder-config = {
darwin-aarch-builder = top.self.nixosConfigurations.builder-aarch;
darwin-x86-builder = top.self.nixosConfigurations.builder-x86;
system = builtins.replaceStrings [ "darwin" ] [ "linux" ] pkgs.stdenv.hostPlatform.system;
builderConfig = top.nixunstable.lib.nixosSystem {
inherit system;
modules = [
"${top.nixunstable}/nixos/modules/profiles/nix-builder-vm.nix"
{
virtualisation = {
host.pkgs = pkgs;
darwin-builder = {
workingDirectory = "/var/lib/darwin-builder";
hostPort = 22;
};
};
}
];
};
builder = arch: let
b = builder-config."darwin-${arch}-builder";
in {
command = "${b.config.system.build.macos-builder-installer}/bin/create-builder";
builder = {
command = "${builderConfig.config.system.build.macos-builder-installer}/bin/create-builder";
serviceConfig = {
KeepAlive = true;
RunAtLoad = true;
StandardOutPath = "/var/log/builder-vm-${arch}.log";
StandardErrorPath = "/var/log/builder-vm-${arch}.stderr.log";
StandardOutPath = "/var/log/builder-vm-${system}.log";
StandardErrorPath = "/var/log/builder-vm-${system}.stderr.log";
};
};
in
{
environment.systemPackages = with pkgs; [
hms
agenix
pkgs'.hms
];
fonts.packages = with pkgs; [
@@ -31,23 +42,13 @@ in
nerd-fonts.hack
];
launchd.daemons = lib.genAttrs' [ "x86" "aarch" ] (arch: lib.nameValuePair "builder-${arch}-machine" (builder arch));
#launchd.daemons.darwin-builder = builder;
nix = {
#buildMachines = [ { systems = ["aarch64-linux"]; sshUser = "builder"; sshKey = "/etc/nix/builder_ed25519"; hostName = "localhost:31022"; protocol = "ssh-ng"; }];
enable = true;
buildMachines = [
{
hostName = "ssh-ng://builder@localhost";
system = "aarch64-linux";
maxJobs = 4;
supportedFeatures = [
"kvm"
"benchmarch"
"big-parallel"
];
}
];
gc.interval.Hour = 3;
#linux-builder.enable = true;
settings.auto-optimise-store = false; # Darwin bugs?
};
+2 -4
View File
@@ -19,6 +19,7 @@ let
specialArgs = {
inherit metadata top;
inherit (top) self;
pkgs' = top.self.packages.${system};
};
modules = [
{
@@ -37,7 +38,4 @@ let
++ lib.optionals (builtins.pathExists ./hosts/${name}) [ ./hosts/${name} ];
};
in
{
"MacBook-Pro" = mac { name = "ivr"; };
"MacBook-Prolocal" = mac { name = "ivr"; };
}
(lib.genAttrs (builtins.attrNames (builtins.readDir ./hosts)) (name: mac { inherit name; }))
+1
View File
@@ -0,0 +1 @@
gregory
+1
View File
@@ -0,0 +1 @@
gregory
@@ -31,6 +31,7 @@ in
"bitwarden"
"bruno"
"chromium"
"claude"
"dbeaver-community"
"ghostty"
"firefox"
+1
View File
@@ -0,0 +1 @@
gregory/
+1
View File
@@ -0,0 +1 @@
lithic/
+53
View File
@@ -0,0 +1,53 @@
{ ... }:
let
username = "greg";
in
{
greg = {
nix.cache = false;
};
homebrew = {
enable = true;
brews = [
"bitwarden-cli"
"direnv"
"github-mcp-server"
{
name = "libvirt";
restart_service = true;
}
"mcp-atlassian"
"notion-mcp-server"
"nushell"
"qemu"
"slack-mcp-server"
"zlib"
];
casks = [
"alt-tab"
"audacity"
"bitwarden"
"bruno"
"chromium"
"claude-code"
"dbeaver-community"
"ghostty"
"firefox"
"notion"
"notunes"
"onlyoffice"
"podman-desktop"
"tabby"
"zed"
];
user = username;
};
system.primaryUser = username;
users.users."${username}" = {
name = username;
home = "/Users/${username}";
};
}
Generated
+206 -282
View File
@@ -25,19 +25,17 @@
},
"buildbot": {
"inputs": {
"flake-parts": "flake-parts",
"hercules-ci-effects": "hercules-ci-effects",
"nixpkgs": [
"nixunstable"
],
"treefmt-nix": "treefmt-nix"
},
"locked": {
"lastModified": 1772467670,
"narHash": "sha256-DF/1VCg7Qmw5iaFhBeKBysOSTDCxZlKJHdbJc7Q2e1k=",
"lastModified": 1780652294,
"narHash": "sha256-pW0RrDJvj8EcbxXPxWVwMQ+x8LdEij3S3oB+inIUeKU=",
"owner": "nix-community",
"repo": "buildbot-nix",
"rev": "f927795b97474875738ac134525af560b2d4a8a5",
"rev": "b16ef5c60459c94bd7f512977908c69b6e53b1e0",
"type": "github"
},
"original": {
@@ -46,36 +44,12 @@
"type": "github"
}
},
"charts": {
"inputs": {
"flake-utils": "flake-utils",
"haumea": "haumea",
"nix-kube-generators": "nix-kube-generators",
"nixpkgs": "nixpkgs",
"pyproject-build-systems": "pyproject-build-systems",
"pyproject-nix": "pyproject-nix",
"uv2nix": "uv2nix"
},
"locked": {
"lastModified": 1772676442,
"narHash": "sha256-bPxUBXS2mdT4BjMAmTap5TkXnUX807qo4Uho2oVb2Fg=",
"owner": "nix-community",
"repo": "nixhelm",
"rev": "19cdbb3a03554059165a25a18b32bd253e62c883",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "nixhelm",
"type": "github"
}
},
"colmena": {
"inputs": {
"flake-compat": "flake-compat",
"flake-utils": "flake-utils_2",
"flake-utils": "flake-utils",
"nix-github-actions": "nix-github-actions",
"nixpkgs": "nixpkgs_2",
"nixpkgs": "nixpkgs",
"stable": "stable"
},
"locked": {
@@ -121,11 +95,11 @@
]
},
"locked": {
"lastModified": 1772379624,
"narHash": "sha256-NG9LLTWlz4YiaTAiRGChbrzbVxBfX+Auq4Ab/SWmk4A=",
"lastModified": 1779036909,
"narHash": "sha256-zXcwYQGCT6pzinK+1dBB2ekTVtfxGZAapb3Evdcu4fY=",
"owner": "lnl7",
"repo": "nix-darwin",
"rev": "52d061516108769656a8bd9c6e811c677ec5b462",
"rev": "56c666e108467d87d13508936aade6d567f2a501",
"type": "github"
},
"original": {
@@ -152,6 +126,22 @@
}
},
"flake-compat_2": {
"flake": false,
"locked": {
"lastModified": 1747046372,
"narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-compat_3": {
"flake": false,
"locked": {
"lastModified": 1767039857,
@@ -169,17 +159,14 @@
},
"flake-parts": {
"inputs": {
"nixpkgs-lib": [
"buildbot",
"nixpkgs"
]
"nixpkgs-lib": "nixpkgs-lib"
},
"locked": {
"lastModified": 1769996383,
"narHash": "sha256-AnYjnFWgS49RlqX7LrC4uA+sCCDBj0Ry/WOJ5XWAsa0=",
"lastModified": 1778716662,
"narHash": "sha256-m1Yf0wZ8j1OHjTc2UwHwyQRSnNeSgLJOd7q5Y45hzi4=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "57928607ea566b5db3ad13af0e57e921e6b12381",
"rev": "f7c1a2d347e4c52d5fb8d10cb4d94b5884e546fb",
"type": "github"
},
"original": {
@@ -190,14 +177,17 @@
},
"flake-parts_2": {
"inputs": {
"nixpkgs-lib": "nixpkgs-lib"
"nixpkgs-lib": [
"nixvimunstable",
"nixpkgs"
]
},
"locked": {
"lastModified": 1772408722,
"narHash": "sha256-rHuJtdcOjK7rAHpHphUb1iCvgkU3GpfvicLMwwnfMT0=",
"lastModified": 1778716662,
"narHash": "sha256-m1Yf0wZ8j1OHjTc2UwHwyQRSnNeSgLJOd7q5Y45hzi4=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "f20dc5d9b8027381c474144ecabc9034d6a839a3",
"rev": "f7c1a2d347e4c52d5fb8d10cb4d94b5884e546fb",
"type": "github"
},
"original": {
@@ -207,27 +197,6 @@
}
},
"flake-parts_3": {
"inputs": {
"nixpkgs-lib": [
"nixvimunstable",
"nixpkgs"
]
},
"locked": {
"lastModified": 1769996383,
"narHash": "sha256-AnYjnFWgS49RlqX7LrC4uA+sCCDBj0Ry/WOJ5XWAsa0=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "57928607ea566b5db3ad13af0e57e921e6b12381",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "flake-parts",
"type": "github"
}
},
"flake-parts_4": {
"inputs": {
"nixpkgs-lib": [
"nurpkgs",
@@ -249,24 +218,6 @@
}
},
"flake-utils": {
"inputs": {
"systems": "systems_2"
},
"locked": {
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flake-utils_2": {
"locked": {
"lastModified": 1659877975,
"narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=",
@@ -281,53 +232,6 @@
"type": "github"
}
},
"haumea": {
"inputs": {
"nixpkgs": [
"charts",
"nixpkgs"
]
},
"locked": {
"lastModified": 1685133229,
"narHash": "sha256-FePm/Gi9PBSNwiDFq3N+DWdfxFq0UKsVVTJS3cQPn94=",
"owner": "nix-community",
"repo": "haumea",
"rev": "34dd58385092a23018748b50f9b23de6266dffc2",
"type": "github"
},
"original": {
"owner": "nix-community",
"ref": "v0.2.2",
"repo": "haumea",
"type": "github"
}
},
"hercules-ci-effects": {
"inputs": {
"flake-parts": [
"buildbot",
"flake-parts"
],
"nixpkgs": [
"buildbot",
"nixpkgs"
]
},
"locked": {
"lastModified": 1771131391,
"narHash": "sha256-HPBNYf7HiKtBVy7/69vKpLYHX6wTcUxndxmybzDlXP8=",
"owner": "hercules-ci",
"repo": "hercules-ci-effects",
"rev": "0b152e0f7c5cc265a529cd63374b80e2771b207b",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "hercules-ci-effects",
"type": "github"
}
},
"hmunstable": {
"inputs": {
"nixpkgs": [
@@ -335,11 +239,11 @@
]
},
"locked": {
"lastModified": 1772633327,
"narHash": "sha256-jl+DJB2DUx7EbWLRng+6HNWW/1/VQOnf0NsQB4PlA7I=",
"lastModified": 1780679734,
"narHash": "sha256-KmRNvpNOb7QEORa06bVgjW9kITcx0VhsI7w0vhmZyD8=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "5a75730e6f21ee624cbf86f4915c6e7489c74acc",
"rev": "b2b7db486e06e098711dc291bb25db82850e1d16",
"type": "github"
},
"original": {
@@ -370,6 +274,45 @@
"type": "github"
}
},
"minecraft": {
"inputs": {
"flake-compat": "flake-compat_2",
"nixpkgs": "nixpkgs_2",
"systems": "systems_2"
},
"locked": {
"lastModified": 1780375694,
"narHash": "sha256-TznzgYVONg28KiSFB2rVdf/eLVIMtEQOxKt13Kzyrp8=",
"owner": "Infinidoge",
"repo": "nix-minecraft",
"rev": "e6f8bec35104ca5955efe73742da58d2823684f7",
"type": "github"
},
"original": {
"owner": "Infinidoge",
"repo": "nix-minecraft",
"type": "github"
}
},
"niks3": {
"inputs": {
"nixpkgs": "nixpkgs_3",
"treefmt-nix": "treefmt-nix_2"
},
"locked": {
"lastModified": 1780530521,
"narHash": "sha256-728J4gTwpnug5C6QpnPbFyceYlfhPeX6SEP/K4PPbVs=",
"owner": "Mic92",
"repo": "niks3",
"rev": "c9a54708e881d51a76309168c5cda516bb2daeb0",
"type": "github"
},
"original": {
"owner": "Mic92",
"repo": "niks3",
"type": "github"
}
},
"nix-github-actions": {
"inputs": {
"nixpkgs": [
@@ -392,12 +335,15 @@
}
},
"nix-hardware": {
"inputs": {
"nixpkgs": "nixpkgs_4"
},
"locked": {
"lastModified": 1771969195,
"narHash": "sha256-qwcDBtrRvJbrrnv1lf/pREQi8t2hWZxVAyeMo7/E9sw=",
"lastModified": 1780310866,
"narHash": "sha256-fPBRVf6A5xlACYcOI59shGrjURuvwu0lRsDoSCEXt/I=",
"owner": "nixos",
"repo": "nixos-hardware",
"rev": "41c6b421bdc301b2624486e11905c9af7b8ec68e",
"rev": "4ed851c979641e28597a05086332d75cdc9e395f",
"type": "github"
},
"original": {
@@ -406,53 +352,7 @@
"type": "github"
}
},
"nix-kube-generators": {
"locked": {
"lastModified": 1762437901,
"narHash": "sha256-5yuJODagAq+aMXQAT2c0gfXKLqapmA6eUHR33jKNHuU=",
"owner": "farcaller",
"repo": "nix-kube-generators",
"rev": "810dcf792081790648ba9ae705b9a2286115ace8",
"type": "github"
},
"original": {
"owner": "farcaller",
"repo": "nix-kube-generators",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1767767207,
"narHash": "sha256-Mj3d3PfwltLmukFal5i3fFt27L6NiKXdBezC1EBuZs4=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "5912c1772a44e31bf1c63c0390b90501e5026886",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-lib": {
"locked": {
"lastModified": 1772328832,
"narHash": "sha256-e+/T/pmEkLP6BHhYjx6GmwP5ivonQQn0bJdH9YrRB+Q=",
"owner": "nix-community",
"repo": "nixpkgs.lib",
"rev": "c185c7a5e5dd8f9add5b2f8ebeff00888b070742",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "nixpkgs.lib",
"type": "github"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1750134718,
"narHash": "sha256-v263g4GbxXv87hMXMCpjkIxd/viIF7p3JpJrwgKdNiI=",
@@ -468,13 +368,43 @@
"type": "github"
}
},
"nixpkgs_3": {
"nixpkgs-lib": {
"locked": {
"lastModified": 1772624091,
"narHash": "sha256-QKyJ0QGWBn6r0invrMAK8dmJoBYWoOWy7lN+UHzW1jc=",
"lastModified": 1777168982,
"narHash": "sha256-GOkGPcboWE9BmGCRMLX3worL4EMnsnG8MyKmXNeYuhQ=",
"owner": "nix-community",
"repo": "nixpkgs.lib",
"rev": "f5901329dade4a6ea039af1433fb087bd9c1fe14",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "nixpkgs.lib",
"type": "github"
}
},
"nixpkgs-lib_2": {
"locked": {
"lastModified": 1780195591,
"narHash": "sha256-/LAL+E75c0ioCHxyVFGwzXorfuHzToKgqPUCRq4RTIY=",
"owner": "nix-community",
"repo": "nixpkgs.lib",
"rev": "49d924421d7c3175edc499fdc738bd70d69d97d5",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "nixpkgs.lib",
"type": "github"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1769461804,
"narHash": "sha256-msG8SU5WsBUfVVa/9RPLaymvi5bI8edTavbIq3vRlhI=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "80bdc1e5ce51f56b19791b52b2901187931f5353",
"rev": "bfc1b8a4574108ceef22f02bafcf6611380c100d",
"type": "github"
},
"original": {
@@ -484,29 +414,74 @@
"type": "github"
}
},
"nixpkgs_3": {
"locked": {
"lastModified": 1780475387,
"narHash": "sha256-JsufhU/MyfEEJMNmtmW0DY6LbOVIjjPS0zGQpHvgrBY=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "c8560a2e8ad260841c482fe30731087b92f2223e",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable-small",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_4": {
"locked": {
"lastModified": 1766025857,
"narHash": "sha256-Lav5jJazCW4mdg1iHcROpuXqmM94BWJvabLFWaJVJp0=",
"lastModified": 1767892417,
"narHash": "sha256-8bW3q88CEg2u4hSP66Vf4lpbLonHz7hqDNBMcCY7E9U=",
"rev": "3497aa5c9457a9d88d71fa93a4a8368816fbeeba",
"type": "tarball",
"url": "https://releases.nixos.org/nixos/unstable/nixos-26.05pre924538.3497aa5c9457/nixexprs.tar.xz"
},
"original": {
"type": "tarball",
"url": "https://channels.nixos.org/nixos-unstable/nixexprs.tar.xz"
}
},
"nixpkgs_5": {
"locked": {
"lastModified": 1780243769,
"narHash": "sha256-x5UQuRsH3MqI0U9afaXSNqzTPSeZlRLvFAav2Ux1pNw=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "def3da69945bbe338c373fddad5a1bb49cf199ce",
"rev": "331800de5053fcebacf6813adb5db9c9dca22a0c",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_6": {
"locked": {
"lastModified": 1777207419,
"narHash": "sha256-V3bmPWAajDiC+1ClDOp55gianW2EyRJSJOyu1RUQibc=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "a7ecea3deccfbdbf22945a89984fcc5a169da8aa",
"type": "github"
},
"original": {
"owner": "nixos",
"repo": "nixpkgs",
"rev": "def3da69945bbe338c373fddad5a1bb49cf199ce",
"rev": "a7ecea3deccfbdbf22945a89984fcc5a169da8aa",
"type": "github"
}
},
"nixunstable": {
"locked": {
"lastModified": 1772963539,
"narHash": "sha256-9jVDGZnvCckTGdYT53d/EfznygLskyLQXYwJLKMPsZs=",
"lastModified": 1780243769,
"narHash": "sha256-x5UQuRsH3MqI0U9afaXSNqzTPSeZlRLvFAav2Ux1pNw=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "9dcb002ca1690658be4a04645215baea8b95f31d",
"rev": "331800de5053fcebacf6813adb5db9c9dca22a0c",
"type": "github"
},
"original": {
@@ -518,18 +493,18 @@
},
"nixvimunstable": {
"inputs": {
"flake-parts": "flake-parts_3",
"flake-parts": "flake-parts_2",
"nixpkgs": [
"nixunstable"
],
"systems": "systems_3"
},
"locked": {
"lastModified": 1772402258,
"narHash": "sha256-3DmCFOdmbkFML1/G9gj8Wb+rCCZFPOQtNoMCpqOF8SA=",
"lastModified": 1780646548,
"narHash": "sha256-Ckyl/l1XBmEwnaHcHD8PvBZk1uph0NqwbJ//CAvB7iE=",
"owner": "nix-community",
"repo": "nixvim",
"rev": "21ae25e13b01d3b4cdc750b5f9e7bad68b150c10",
"rev": "816a15282e58678dde831477964987d0262d4293",
"type": "github"
},
"original": {
@@ -541,15 +516,15 @@
},
"nurpkgs": {
"inputs": {
"flake-parts": "flake-parts_4",
"nixpkgs": "nixpkgs_3"
"flake-parts": "flake-parts_3",
"nixpkgs": "nixpkgs_5"
},
"locked": {
"lastModified": 1772717146,
"narHash": "sha256-x2nJlzpiHWHLkGDBvaiO1ysLhaxjQCLsG3XieRueJ/c=",
"lastModified": 1780789357,
"narHash": "sha256-YrZPqCwHzUYb+fbH9tp8T90x3pN37D7onc4X7+bzktc=",
"owner": "nix-community",
"repo": "NUR",
"rev": "2e1bffbdde931c4300a59418d0150c7457022f2d",
"rev": "55cbac785808e7e62aee241f5b789b8f5adb8e95",
"type": "github"
},
"original": {
@@ -558,66 +533,18 @@
"type": "github"
}
},
"pyproject-build-systems": {
"inputs": {
"nixpkgs": [
"charts",
"nixpkgs"
],
"pyproject-nix": [
"charts",
"pyproject-nix"
],
"uv2nix": [
"charts",
"uv2nix"
]
},
"locked": {
"lastModified": 1763662255,
"narHash": "sha256-4bocaOyLa3AfiS8KrWjZQYu+IAta05u3gYZzZ6zXbT0=",
"owner": "pyproject-nix",
"repo": "build-system-pkgs",
"rev": "042904167604c681a090c07eb6967b4dd4dae88c",
"type": "github"
},
"original": {
"owner": "pyproject-nix",
"repo": "build-system-pkgs",
"type": "github"
}
},
"pyproject-nix": {
"inputs": {
"nixpkgs": [
"charts",
"nixpkgs"
]
},
"locked": {
"lastModified": 1764134915,
"narHash": "sha256-xaKvtPx6YAnA3HQVp5LwyYG1MaN4LLehpQI8xEdBvBY=",
"owner": "pyproject-nix",
"repo": "pyproject.nix",
"rev": "2c8df1383b32e5443c921f61224b198a2282a657",
"type": "github"
},
"original": {
"owner": "pyproject-nix",
"repo": "pyproject.nix",
"type": "github"
}
},
"root": {
"inputs": {
"agenix": "agenix",
"buildbot": "buildbot",
"charts": "charts",
"colmena": "colmena",
"darwin": "darwin_2",
"flake-parts": "flake-parts_2",
"flake-parts": "flake-parts",
"hmunstable": "hmunstable",
"minecraft": "minecraft",
"niks3": "niks3",
"nix-hardware": "nix-hardware",
"nixpkgs-lib": "nixpkgs-lib_2",
"nixunstable": "nixunstable",
"nixvimunstable": "nixvimunstable",
"nurpkgs": "nurpkgs",
@@ -673,15 +600,16 @@
},
"systems_3": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"lastModified": 1774449309,
"narHash": "sha256-brhZ8DmuGtzkCYHJg4HEd602amKm89Y9ytsFZ5uWD1w=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"rev": "c29398b59d2048c4ab79345812849c9bd15e9150",
"type": "github"
},
"original": {
"owner": "nix-systems",
"ref": "future-26.11",
"repo": "default",
"type": "github"
}
@@ -694,11 +622,11 @@
]
},
"locked": {
"lastModified": 1770228511,
"narHash": "sha256-wQ6NJSuFqAEmIg2VMnLdCnUc0b7vslUohqqGGD+Fyxk=",
"lastModified": 1775636079,
"narHash": "sha256-pc20NRoMdiar8oPQceQT47UUZMBTiMdUuWrYu2obUP0=",
"owner": "numtide",
"repo": "treefmt-nix",
"rev": "337a4fe074be1042a35086f15481d763b8ddc0e7",
"rev": "790751ff7fd3801feeaf96d7dc416a8d581265ba",
"type": "github"
},
"original": {
@@ -707,41 +635,37 @@
"type": "github"
}
},
"uv2nix": {
"treefmt-nix_2": {
"inputs": {
"nixpkgs": [
"charts",
"niks3",
"nixpkgs"
],
"pyproject-nix": [
"charts",
"pyproject-nix"
]
},
"locked": {
"lastModified": 1767701098,
"narHash": "sha256-CJhKZnWb3gumR9oTRjFvCg/6lYTGbZRU7xtvcyWIRwU=",
"owner": "pyproject-nix",
"repo": "uv2nix",
"rev": "9d357f0d2ce6f5f35ec7959d7e704452352eb4da",
"lastModified": 1780220602,
"narHash": "sha256-eynAfOmbmxJnkp7YewvCEbShNnnYJ9gLLqkzsYtBPeM=",
"owner": "numtide",
"repo": "treefmt-nix",
"rev": "db947814a175b7ca6ded66e21383d938df01c227",
"type": "github"
},
"original": {
"owner": "pyproject-nix",
"repo": "uv2nix",
"owner": "numtide",
"repo": "treefmt-nix",
"type": "github"
}
},
"vsext": {
"inputs": {
"nixpkgs": "nixpkgs_4"
"nixpkgs": "nixpkgs_6"
},
"locked": {
"lastModified": 1772678592,
"narHash": "sha256-1VZ1hg1YHW+WyBXIOfrQ9Oq+qLL0w93lkdKAiRRHEuI=",
"lastModified": 1780718391,
"narHash": "sha256-hQOS9bTTzVXQNYaW4bi2EyXN8jqDe7ge07xPPbvUMuA=",
"owner": "nix-community",
"repo": "nix-vscode-extensions",
"rev": "5521856f37c3d2654fe9b20b03331a6594f855c6",
"rev": "e2ccd7477aa7174e34bd32c135dc470a3f822a82",
"type": "github"
},
"original": {
@@ -752,17 +676,17 @@
},
"wsl": {
"inputs": {
"flake-compat": "flake-compat_2",
"flake-compat": "flake-compat_3",
"nixpkgs": [
"nixunstable"
]
},
"locked": {
"lastModified": 1772386632,
"narHash": "sha256-sm6OpWZuoDwR53KNlsY482YOoHFWlWYwt0wHmqLkRGE=",
"lastModified": 1780765279,
"narHash": "sha256-md6QHmlIx40bQkun43M2eT8aav5GURGkXEMFwof6uZs=",
"owner": "nix-community",
"repo": "NixOS-WSL",
"rev": "be894604b2aa2184c0b3d3b44995acd0da14dc0c",
"rev": "3e6d8af994e2a2d31af7a91863d7c0d6e278d951",
"type": "github"
},
"original": {
+11 -6
View File
@@ -13,9 +13,6 @@
url = "github:nix-community/buildbot-nix";
inputs.nixpkgs.follows = "nixunstable";
};
charts = {
url = "github:nix-community/nixhelm";
};
colmena.url = "github:zhaofengli/colmena";
darwin = {
url = "github:lnl7/nix-darwin/master";
@@ -26,7 +23,10 @@
url = "github:nix-community/home-manager/master";
inputs.nixpkgs.follows = "nixunstable";
};
minecraft.url = "github:Infinidoge/nix-minecraft";
niks3.url = "github:Mic92/niks3";
nix-hardware.url = "github:nixos/nixos-hardware";
nixpkgs-lib.url = "github:nix-community/nixpkgs.lib";
nixvimunstable = {
url = "github:nix-community/nixvim/main";
inputs.nixpkgs.follows = "nixunstable";
@@ -50,6 +50,7 @@
top.nixvimunstable.overlays.default
top.nurpkgs.overlays.default
top.vsext.overlays.default
top.minecraft.overlay
];
metadata = builtins.fromJSON (builtins.readFile ./network.json);
systems = [
@@ -68,6 +69,7 @@
};
}
);
lib' = import ./lib { inherit (top.nixunstable) lib; };
in
top.flake-parts.lib.mkFlake { inputs = top; } {
inherit systems;
@@ -79,10 +81,12 @@
nixpkgs = imported_packages.x86_64-linux;
specialArgs = {
inherit
lib'
metadata
self
top
;
pkgs' = top.self.packages.x86_64-linux;
};
};
}
@@ -115,7 +119,7 @@
nixosConfigurations = (
import ./hosts {
inherit top metadata;
inherit top metadata lib';
nixpkgs = imported_packages;
}
);
@@ -144,16 +148,17 @@
pkgs = imported_packages.${system};
};
packages = (import ./pkgs { inherit pkgs; });
packages = (import ./pkgs { inherit pkgs top; });
checks = import ./checks.nix {
inherit system top self';
inherit (pkgs) lib;
inherit (top.nixpkgs-lib) lib;
};
devShells = import ./shells.nix {
inherit pkgs;
inherit (top) colmena;
inherit (self') packages;
};
};
};
+22 -22
View File
@@ -1,23 +1,23 @@
builds:
exclude:
- "homeConfigurations.*"
- "nixosConfigurations.*"
- "packages.*"
# bitwarden-cli package is broken on aarch64-darwin
- "packages.aarch64-darwin.img-bitwarden"
# kmod-31 is not a thing on Darwin
- "packages.aarch64-darwin.qemu-hook"
- "packages.aarch64-darwin.vfio_shutdown"
- "packages.aarch64-darwin.vfio_startup"
# This one is a bit of a beast and shouldn't take up Garnix time
- "packages.aarch64-darwin.zim"
# These are just images which I will build when
# I feel like it
- "devShells.*"
include:
- "packages.aarch64-darwin.*"
- homeConfigurations.exodus
- darwinConfigurations.MacBook-Pro
- darwinConfigurations.MacBook-Prolocal
- nixosConfigurations.builder-x86
- nixosConfigurations.builder-aarch
# Exclude most things, as I locally build x86_64-linux and aarch64-linux
- exclude:
- "homeConfigurations.*"
- "nixosConfigurations.*"
- "packages.*"
# These are just images which I will build when
# I feel like it
- "devShells.*"
include:
- "packages.aarch64-darwin.*"
- darwinConfigurations.MacBook-Pro
- darwinConfigurations.MacBook-Prolocal
- darwinConfigurations.li
# Some specific includes which are not specific enough to override the rules
# above, due to the intrepretation of the glob excludes, but which I still
# need included
- include:
# These are Mac homeConfigurations, which I do not have the infra
# to build at home
- homeConfigurations."gregory.hellings-mbp"
- homeConfigurations.gregs-MacBook-Pro-16-inch-Nov-2024
- homeConfigurations.ivr
+9 -1
View File
@@ -1,5 +1,5 @@
# vim: set filetype=nushell :
let servers = [isaiah jeremiah zeke genesis vm-gitlab]
let servers = [isaiah jeremiah zeke genesis]
def par-map [ items: list, c: closure ] {
let results = $items | par-each -k $c
@@ -69,6 +69,14 @@ def dc [ $cmd: string = "sh" ] {
}
}
def claude [ ] {
unlock
$env.GITLAB_TOKEN = ^bw get item 7d3da4e9-5f9a-49d0-8e14-b39c010a4001 | from json | get fields | find claudeapi | get value
#$env.ANTHROPIC_API_KEY = ^bw get item e122fd08-3506-4f21-9c6a-b42b00fe5be1 | from json | get login.password
^claude
}
if ("/usr/local/bin" | path exists) {
$env.PATH = $env.PATH | append "/usr/local/bin"
}
$env.PATH = $env.PATH | prepend "~/.local/bin"
+1
View File
@@ -26,6 +26,7 @@
nixcopy = "nix copy --to \"s3://binary-cache/?profile=default&endpoint=nas.home%3A9000&scheme=http\"";
r = "run0";
updateScript = "nix-shell maintainers/scripts/update.nix --argstr package";
p = "${lib.getExe pkgs.podman-tui}";
# General
k = "kubectl";
+25 -27
View File
@@ -5,7 +5,7 @@
# This allows things like SSH in distrobox to read the config file just fine
home.file.".ssh/config" = {
target = ".ssh/config_source";
onChange = ''cat ~/.ssh/config_source > ~/.ssh/config && chmod 600 ~/.ssh/config'';
onChange = "cat ~/.ssh/config_source > ~/.ssh/config && chmod 600 ~/.ssh/config";
};
programs.ssh = {
enable = true;
@@ -13,25 +13,23 @@
includes = [ "config.local" ];
enableDefaultConfig = false;
matchBlocks =
settings =
let
nas = {
user = "admin";
User = "admin";
};
owned = {
user = "greg";
User = "greg";
};
in
{
inherit nas;
"*" = {
dynamicForwards = [ { port = 10240; } ];
serverAliveInterval = 60;
extraOptions = {
LogLevel = "error";
SetEnv = "TERM=xterm-256color";
};
DynamicForward = [ "10240" ];
ServerAliveInterval = 60;
LogLevel = "error";
SetEnv = { TERM = "xterm-256color"; };
};
"10.42.1.4" = lib.hm.dag.entryBefore [ "10.42.*" ] nas;
@@ -41,46 +39,46 @@
"chronicles.thehellings.lan" = lib.hm.dag.entryBefore [ "*.thehellings.lan" ] nas;
gh = {
user = "git";
hostname = "github.com";
User = "git";
Hostname = "github.com";
};
"src" = {
user = "git";
hostname = "jeremiah.shire-zebra.ts.net";
port = 32222;
User = "git";
Hostname = "jeremiah.shire-zebra.ts.net";
Port = 32222;
};
srcpub = {
user = "git";
hostname = "src.thehellings.com";
port = 2222;
User = "git";
Hostname = "src.thehellings.com";
Port = 2222;
};
ivr = {
user = "git";
hostname = "gitlab.com";
User = "git";
Hostname = "gitlab.com";
};
"ivr.thehellings.lan" = lib.hm.dag.entryBefore [ "ivr" ] {
user = "gregory.hellings";
User = "gregory.hellings";
};
"*.thehellings.lan" = owned;
"10.42.*" = owned;
"host.crosswire.org crosswire" = {
hostname = "host.crosswire.org";
user = "ghellings";
Hostname = "host.crosswire.org";
User = "ghellings";
};
fedpeople = {
hostname = "fedorapeople.org";
user = "greghellings";
Hostname = "fedorapeople.org";
User = "greghellings";
};
"src.fedoraproject.org pkgs.fedoraproject.org" = {
user = "greghellings";
User = "greghellings";
};
"127.*".extraOptions = {
"127.*" = {
PubkeyAcceptedAlgorithms = "+ssh-rsa";
HostkeyAlgorithms = "+ssh-rsa";
};
+1 -1
View File
@@ -12,7 +12,7 @@
dig
jqp
kubernetes-helm
iamb
#iamb
lazyssh
rainfrog
tenere
-5
View File
@@ -38,11 +38,6 @@ def _ivr2(args):
vpn("gregory_hellings@ra.ivrtechnology.com", "IVR Technology")
aliases['ivr2'] = _ivr2
def _glrestart(args):
sudo nixos-container run gitlab -- systemctl restart gitlab
sudo nixos-container run gitlab -- systemctl restart nginx
aliases['glrestart'] = _glrestart
def _aws_creds(args):
$AWS_ACCESS_KEY_ID=$(bw get username "AWS Access Key")
$AWS_SECRET_ACCESS_KEY=$(bw get password "AWS Access Key")
+7 -16
View File
@@ -4,11 +4,15 @@
top,
}:
let
inherit (top.nixunstable) lib;
user =
host: username:
host:
let
inherit (metadata.hosts.${host}) system;
pkgs = nixpkgs.${system};
pkgs' = top.self.packages.${system};
username =
if builtins.hasAttr "user" metadata.hosts.${host} then metadata.hosts.${host}.user else "greg";
in
top.hmunstable.lib.homeManagerConfiguration {
inherit pkgs;
@@ -22,25 +26,12 @@ let
host
username
metadata
pkgs'
;
nixvim = top.nixvimunstable;
gui = false;
gnome = false;
};
};
greg = host: (user host "greg");
in
{
"MacBook-Pro.local" = user "ivr" "gregory.hellings";
"MacBook-Prolocal.local" = user "ivr" "gregory.hellings";
"MacBook-Pro.thehellings.lan" = user "ivr" "gregory.hellings";
"gregory.hellings-mbp" = user "ivr" "gregory.hellings";
genesis = greg "genesis";
exodus = greg "exodus";
zeke = greg "zeke";
isaiah = greg "isaiah";
jeremiah = greg "jeremiah";
linode = greg "linode";
hosea = greg "hosea";
gitlab = greg "gitlab";
}
(lib.genAttrs (builtins.attrNames (builtins.readDir ./hosts)) user)
+9 -3
View File
@@ -1,5 +1,6 @@
{
pkgs,
pkgs',
lib,
host ? "most",
top,
@@ -19,9 +20,14 @@ in
imports = [
top.nixvimunstable.homeModules.nixvim
top.self.modules.homeManagerModule
top.agenix.homeManagerModules.default
./baseline
]
++ lib.optionals (builtins.pathExists ./hosts/${host}) [ ./hosts/${host} ];
++ lib.optionals (builtins.pathExists ./hosts/${host}/default.nix) [ ./hosts/${host} ];
age = {
identityPaths = [ "${homeDirectory}/.ssh/id_ed25519" ];
};
home = {
inherit homeDirectory username;
@@ -33,7 +39,7 @@ in
gh
git
gnupatch
hms
pkgs'.hms
btop
inetutils
jq
@@ -41,7 +47,7 @@ in
nix-prefetch
nmap
openssl
setup-ssh
pkgs'.setup-ssh
tmux
tree
unzip
+18 -1
View File
@@ -1,4 +1,4 @@
{ pkgs, ... }:
{ lib, pkgs, ... }:
{
greg = {
@@ -21,11 +21,28 @@
kubectl
kubectl-cnpg
mattermost-desktop
minio-client
mumble
pre-commit
prismlauncher
restic
restic-browser
tea
wineWow64Packages.stable
];
programs = {
discord = {
enable = true;
settings.SKIP_HOST_UPDATE = true;
};
};
xdg.desktopEntries = {
prismlauncher = {
name = "Prism Launcher - Minecraft";
actions.minecraft = {
name = "Minecraft";
exec = lib.getExe pkgs.prismlauncher;
};
};
};
}
@@ -1,21 +1,9 @@
{
pkgs,
lib,
username,
...
}:
let
username = "gregory.hellings";
x = pkgs.xonsh.override {
extraPackages = (
ps: [
pkgs.nur.repos.xonsh-xontribs.xonsh-direnv
pkgs.nur.repos.xonsh-xontribs.xontrib-vox
ps.xonsh-apipenv
pkgs.pipenv-ivr
]
);
};
in
{
# Disables hitting local cache
_module.args.cache = lib.mkForce false;
@@ -28,41 +16,36 @@ in
home = {
packages = with pkgs; [
aacs
ansible
claude-code
direnv
home-manager
python3Packages.ipython
just
glab
go
gopls
k9s
kubectl
mariadb
minikube
mise
nil
nixVersions.stable
pipenv-ivr
pre-commit
python311
python3Packages.flake8
skaffold
twine
x
];
file = {
".pip/pip.conf".text = ''
[global]
retries = 1
index-url = https://pypi.python.org/simple
index-url = https://pypi.python.org/
extra-index-url =
https://pypidev.ivrtechnology.com/simple/
https://pypidev.ivrtechnology.com/
'';
".config/uv/uv.toml".text = ''
index-strategy = "unsafe-first-match"
[[index]]
url = "https://pypidev.ivrtechnology.com/simple/"
url = "https://pypidev.ivrtechnology.com/"
name = "pypidev"
ignore-error-codes = [403]
'';
};
username = username;
@@ -108,6 +91,5 @@ in
"web4"
]
);
tmux.shell = (lib.getExe x);
};
}
+1
View File
@@ -0,0 +1 @@
lithic/
+1
View File
@@ -0,0 +1 @@
gregory.hellings-mbp/
View File
+78
View File
@@ -0,0 +1,78 @@
{
pkgs,
lib,
...
}:
let
python = pkgs.python312.withPackages (
p: with p; [
ipython
]
);
in
{
# Disables hitting local cache
_module.args.cache = lib.mkForce false;
greg = {
development = true;
gui = true;
nix.cache = false;
zed = true;
};
home = {
packages = with pkgs; [
ansible
awscli2
cargo
clippy
direnv
go
home-manager
just
mcp-grafana
nil
nixVersions.stable
podman
podman-compose
poetry
pre-commit
(pulumi.withPackages (
p: with p; [
pulumi-aws-native
pulumi-command
pulumi-go
pulumi-nodejs
pulumi-python
]
))
python
rustc
rustfmt
terraform
];
};
programs = {
direnv = {
enable = true;
enableNushellIntegration = true;
};
nushell = {
enable = true;
};
starship = {
enable = true;
enableNushellIntegration = true;
settings = {
directory = {
home_symbol = "~";
truncate_to_repo = false;
truncation_length = 0;
use_os_path_sep = true;
};
};
};
};
}
-7
View File
@@ -1,7 +0,0 @@
{ pkgs, ... }:
{
greg.vscodium.enable = false;
home.packages = with pkgs; [ brew ];
}
+44 -12
View File
@@ -3,19 +3,24 @@
lib,
metadata,
pkgs,
top,
...
}:
{
imports = [
../modules/nix-conf.nix
top.niks3.nixosModules.niks3-auto-upload
];
age.secrets.niks3-api-token.file = ../secrets/niks3/api_token.age;
console = {
font = "Lat2-Terminus16";
keyMap = "us";
};
environment.systemPackages = with pkgs; [
top.niks3.packages.${pkgs.stdenv.hostPlatform.system}.niks3
agenix
bitwarden-cli
bmon
@@ -26,10 +31,9 @@
efibootmgr
findutils
file
gcc-tune
git
gnupatch
hms # My own home manager switcher
top.self.packages.${pkgs.stdenv.hostPlatform.system}.hms # My own home manager switcher
iperf
killall
nano
@@ -53,9 +57,25 @@
# Network Manager pulls in too many deps
networking = {
extraHosts =
let
onNetwork =
attr: _k: v:
(builtins.hasAttr attr v) && v.${attr} != null;
getIPs =
attr: domain:
(lib.mapAttrsToList (host: v: "${builtins.getAttr attr v} ${host}.${domain}") (
lib.filterAttrs (onNetwork attr) metadata.hosts
));
in
builtins.concatStringsSep "\n" (
(getIPs "ts" "shire-zebra.ts.net")
++ (getIPs "nebulaIp" "nebula.thehellings.com")
++ (getIPs "nebulaIp" "nebula")
++ (getIPs "ip" "thehellings.lan")
);
search = [
"thehellings.lan"
"home"
"nebula.thehellings.com"
];
networkmanager.enable = false;
};
@@ -81,6 +101,12 @@
# Enable the OpenSSH daemon for remote control
services = {
locate.enable = true;
niks3-auto-upload = {
enable = config.greg.nix.cache;
authTokenFile = config.age.secrets.niks3-api-token.path;
serverUrl = "http://hosea.nebula.thehellings.com:5751";
verifyS3Integrity = true;
};
openssh = {
enable = true;
settings.X11Forwarding = true;
@@ -114,17 +140,23 @@
};
};
security.sudo.extraRules = [
{
users = [ "greg" ];
commands = [
security = {
sudo-rs = {
enable = true;
extraRules = [
{
command = "ALL";
options = [ "NOPASSWD" ];
users = [ "greg" ];
commands = [
{
command = "ALL";
options = [ "NOPASSWD" ];
}
];
}
];
}
];
};
sudo.enable = false;
};
# Define a user account. Don't forget to set a password with passwd.
users.users.greg = {
+8 -33
View File
@@ -1,5 +1,6 @@
{
top,
lib',
metadata,
nixpkgs,
}:
@@ -14,11 +15,17 @@ let
}:
let
inherit (metadata.hosts.${name}) system;
pkgs' = top.self.packages.${system};
in
channel.lib.nixosSystem {
pkgs = nixpkgs.${system};
specialArgs = {
inherit metadata top;
inherit
metadata
top
lib'
pkgs'
;
};
modules = [
{
@@ -44,16 +51,6 @@ in
})
)
)
// (lib.genAttrs
(builtins.attrNames (lib.filterAttrs (_: v: v == "directory") (builtins.readDir ./vm)))
(
name:
(unstable {
inherit name;
extraMods = [ ./vm/${name} ];
})
)
)
// {
# nix build '.#nixosConfigurations.wsl.config.system.build.installer'
#nixos = wsl { name = "wsl"; };
@@ -62,26 +59,4 @@ in
# name = "wsl";
# system = "aarch64-linux";
#};
builder-aarch = lib.nixosSystem {
system = "aarch64-linux";
modules = [
"${top.nixunstable}/nixos/modules/profiles/nix-builder-vm.nix"
{
virtualisation.host.pkgs = import top.nixunstable { system = "aarch64-darwin"; };
boot.loader.grub.devices = [ "/dev/vda" ];
}
];
};
builder-x86 = lib.nixosSystem {
system = "x86_64-linux";
modules = [
"${top.nixunstable}/nixos/modules/profiles/nix-builder-vm.nix"
{
virtualisation.host.pkgs = import top.nixunstable { system = "aarch64-darwin"; };
boot.loader.grub.devices = [ "/dev/vda" ];
}
];
};
}
+8 -5
View File
@@ -18,7 +18,11 @@
boot = {
loader = {
systemd-boot.enable = true;
systemd-boot = {
enable = true;
memtest86.enable = true;
netbootxyz.enable = true;
};
efi.canTouchEfiVariables = true;
};
binfmt.emulatedSystems = [
@@ -30,16 +34,15 @@
greg = {
home = true;
gnome.enable = true;
nebula = {
enable = true;
};
podman.enable = true;
print.enable = true;
tailscale = {
enable = true;
tags = [ "mobile" ];
};
runner = {
enable = true;
qemu = true;
};
};
hardware = {
+117 -38
View File
@@ -2,34 +2,18 @@
# your system. Help is available in the configuration.nix(5) man page
# and in the NixOS manual (accessible by running nixos-help).
{ lib, pkgs, ... }:
let
adblockUpdate = pkgs.writeShellApplication {
name = "adblock-update";
runtimeInputs = with pkgs; [
curl
gnused
systemd
];
text = ''
curl -s https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts | sed '1,33d' > /etc/adblock_hosts
curl -s https://adaway.org/hosts.txt | sed '1,24d' | sed 's/127.0.0.1/0.0.0.0/' >> /etc/adblock_hosts
# Custom domains that I need to preserve for some reason
for f in "segment.com" "segment.io" "branch.io" "dev.visualwebsiteoptimizer.com"; do
sed -i -e "/''${f}/d" /etc/adblock_hosts # Blocks Trelly content for house investors
done
systemctl restart dnsmasq
'';
};
in
{
top,
pkgs,
pkgs',
...
}:
{
imports = [
# Include the results of the hardware scan.
./hardware-configuration.nix
./networking.nix
top.minecraft.nixosModules.minecraft-servers
];
greg = {
@@ -52,26 +36,121 @@ in
};
environment.systemPackages = with pkgs; [
create_ssl
pkgs'.create_ssl
step-ca
];
networking.hostName = "genesis"; # Define your hostname.
systemd = {
services.adblock-update = {
after = [ "network-online.target" ];
requires = [ "network-online.target" ];
script = lib.getExe adblockUpdate;
serviceConfig.Type = "oneshot";
};
timers.adblock-update = {
wantedBy = [ "multi-user.target" ];
after = [ "network-online.target" ];
requires = [ "network-online.target" ];
timerConfig = {
OnCalendar = "daily";
Unit = "adblock-update.service";
services = {
minecraft-servers = {
enable = true;
eula = true;
openFirewall = true;
servers = {
maya = {
enable = true;
operators = {
Almec = {
bypassesPlayerLimit = true;
uuid = "7884dc5a-ae21-43d5-9506-a934d59be19a";
};
};
package = pkgs.fabricServers.fabric.override { jre_headless = pkgs.openjdk25_headless; };
serverProperties = {
allow-flight = true;
motd = "Maya's Minecraft World";
online-mode = true;
};
whitelist = { };
jvmOpts = "-Xms4092M -Xmx4092M";
symlinks = {
mods = pkgs.linkFarmFromDrvs "mods" (
builtins.attrValues {
# Health info
appleskin = pkgs.fetchurl {
url = "https://cdn.modrinth.com/data/EsAfCjCV/versions/HwaLJe3v/appleskin-fabric-mc26.1-3.0.9.jar";
hash = "sha256-iNCycR/oxqFpbPGfIcfgfWOm7PzPiIu5AmBWb8asTb4=";
};
# Needed by survivalfly
balm = pkgs.fetchurl {
url = "https://mediafilez.forgecdn.net/files/7959/843/balm-fabric-26.1.2-26.1.2.4.jar";
hash = "sha256-zDtDxkxOftpW0wUIap7l6abGCjXNczwrF2wLZDztyA0=";
};
# Adds more diverse biomes
# https://www.curseforge.com/minecraft/mc-mods/biomes-o-plenty
biomes = pkgs.fetchurl {
url = "https://mediafilez.forgecdn.net/files/7977/180/BiomesOPlenty-fabric-26.1.2-26.1.2.0.3.jar";
hash = "sha256-0aPtsRep0ftbkKqbp69PgUnNJyOBLY9vcPsB1mhOy/M=";
};
# Automation engines
# https://www.curseforge.com/minecraft/mc-mods/create
#create = pkgs.fetchurl {
# url = "https://mediafilez.forgecdn.net/files/7963/363/create-1.21.1-6.0.10.jar";
# hash = "sha256-74f+Vwnxuh9bi7IKKSW1r7RmnheP1ti/EMFndZ7v43o=";
#};
fabric_api = pkgs.fetchurl {
url = "https://cdn.modrinth.com/data/P7dR8mSH/versions/tnmuHGZA/fabric-api-0.146.1%2B26.1.2.jar";
hash = "sha256-8Jy/xmxRtw4z4GJ+38wwbXHVn4NGYp4w/mFvW9cmvKg=";
};
# Required by biomes-o-plenty
# https://www.curseforge.com/minecraft/mc-mods/glitchcore
glitchcore = pkgs.fetchurl {
url = "https://mediafilez.forgecdn.net/files/7975/608/GlitchCore-fabric-26.1.2-26.1.2.0.0.jar";
hash = "sha256-IDz+TblWvgt4UxFg3L3DhFMEESoX7y5cTOvXhyccQm8=";
};
# Tooltips
# https://www.curseforge.com/minecraft/mc-mods/jade/
jade = pkgs.fetchurl {
url = "https://mediafilez.forgecdn.net/files/7886/518/Jade-mc26.1-Fabric-26.0.8.jar";
hash = "sha256-Pc3R5eO4Jf+94mNMPtY/vvpbomp+S+qnAUAVbQk1r2Y=";
};
# Gives info on crafting recipes
# https://www.curseforge.com/minecraft/mc-mods/jei
jei = pkgs.fetchurl {
url = "https://mediafilez.forgecdn.net/files/7920/925/jei-26.1.2-fabric-29.5.0.26.jar";
hash = "sha256-7nF7fXYPIg9the/mxi6pUYEmKtosZO6yL2b0Dgf8+fI=";
};
# Machines
# https://www.curseforge.com/minecraft/mc-mods/mekanism
#mekanism = pkgs.fetchurl {
# url = "https://mediafilez.forgecdn.net/files/7904/58/Mekanism-1.21.1-10.7.19.85.jar";
# hash = "sha256-AE28nzEG9NGSrqoe4RkN0W7JyoBZ7T0JO4ADT0xXT0M=";
#};
# Shows installed mods
modmenu = pkgs.fetchurl {
url = "https://cdn.modrinth.com/data/mOgUt4GM/versions/jvjwXH6l/modmenu-18.0.0-alpha.8.jar";
hash = "sha256-u0gtCOVAnNxyHcslo+y9l/jCGsFb+U/Y8soiUilhZDA=";
};
# Better storage engines
# https://www.curseforge.com/minecraft/mc-mods/refined-storage
refined-storage = pkgs.fetchurl {
url = "https://mediafilez.forgecdn.net/files/8086/588/refinedstorage-fabric-3.0.0.jar";
hash = "sha256-LuOF0aYQon78AQeD5fQ8OXHCnekfa+PNKpH7cqimFNs=";
};
# https://www.curseforge.com/minecraft/mc-mods/storage-drawers
#storagedrawers = pkgs.fetchurl {
#url = "https://mediafilez.forgecdn.net/files/7352/799/StorageDrawers-fabric-1.21.11-20.0.0.jar";
#hash = "sha256-eBKCmAtjAhdAjOyLMRneu/NZnNt+orIezxPy6V8g/S8=";
#};
survivalfly = pkgs.fetchurl {
url = "https://mediafilez.forgecdn.net/files/7870/312/survivalfly-1.3_fabric-mc26.1.1.jar";
hash = "sha256-Kai4wSxckpXbs1yLp8wJ4BmmjNkdDbeqerqWGIz3+Zk=";
};
# Also needed by biomes
# https://www.curseforge.com/minecraft/mc-mods/terrablender-fabric
terrablender = pkgs.fetchurl {
url = "https://mediafilez.forgecdn.net/files/7933/873/TerraBlender-fabric-26.1.2-26.1.2.0.1.jar";
hash = "sha256-lUrkmMIod54Qj78H0rzT4EYoEeiBG7w6sVOJlRvsnQ4=";
};
}
);
};
};
};
};
};
+6 -9
View File
@@ -12,7 +12,7 @@
10.42.1.5 genesis genesis.thehellings.lan dns dns.thehellings.lan smart smart.thehellings.lan speedtest.thehellings.lan nixcache.thehellings.lan gitcache.thehellings.lan
10.42.1.6 isaiah isaiah.thehellings.lan minio-01.thehellings.lan
10.42.1.7 hosea hosea.thehellings.lan jellyfin jellyfin.thehellings.lan grafana grafana.thehellings.lan
10.42.1.8 jeremiah jeremiah.thehellings.lan minio-02.thehellings.lan
10.42.1.8 jeremiah jeremiah.thehellings.lan minio-02.thehellings.lan buildbot.thehellings.lan
10.42.1.9 ivr ivr.thehellings.lan
# 10 - monitor
# 11 - old jude
@@ -22,8 +22,6 @@
# VMs
10.42.4.1 matrix matrix.thehellings.lan
#10.42.4.2 vm-jellyfin vm-jellyfin.thehellings.lan
10.42.4.3 git gitlab git.thehellings.lan gitlab.thehellings.lan
# VIP
10.42.5.1 longhorn.cluster matrix.cluster pgadmin.cluter postgres.cluster immich.cluster
@@ -35,14 +33,13 @@
# Tailscale hosts
100.119.228.115 nas.home chronicles.shire-zebra.ts.net
100.88.91.27 dns.home
100.80.99.48 exodus.home
100.96.198.104 genesis.home smart.home zwave.home nixcache.home gitcache.home dashy.home uptime.home speed.home
100.117.28.111 gitlab.home gitlab.shire-zebra.ts.net gitlab.thehellings.lan registry.thehellings.lan git.thehellings.lan
100.70.99.91 exodus.home exodus.shire-zebra.ts.net
100.96.198.104 genesis.home genesis.shire-zebra.ts.net smart.home zwave.home nixcache.home gitcache.home dashy.home uptime.home speed.home
100.68.203.1 hosea.home hosea.shire-zebra.ts.net grafana.home
100.84.183.79 isaiah.home isaiah.shire-zebra.ts.net pgadmin.kubernetes longhorn.kubernetes
100.102.186.39 jeremiah.home jeremiah.shire-zebra.ts.net matrix.kubernetes immich.kubernetes postgres.kubernetes
100.90.74.19 zeke.home
100.115.57.8 linode.home
100.102.186.39 jeremiah.home jeremiah.shire-zebra.ts.net matrix.kubernetes immich.kubernetes postgres.kubernetes buildbot.home
100.90.74.19 zeke.home zeke.shire-zebra.ts.net
100.109.86.8 linode.home linode.shire-zebra.ts.net
100.65.5.38 matrix.home matrix.shire-zebra.ts.net
#100.127.55.22 jellyfin.home
100.114.187.61 nas1.home nas1.shire-zebra.ts.net
+59 -44
View File
@@ -1,7 +1,9 @@
{
config,
pkgs,
lib,
lib',
metadata,
pkgs,
...
}:
let
@@ -9,7 +11,6 @@ let
lanIP = metadata.hosts.${config.networking.hostName}.ip;
iot = "enp2s0";
iotIP = "192.168.66.250";
routerIP = metadata.infra.gw;
extraHosts = builtins.readFile ./net/hosts;
proxyPort = 3128;
@@ -21,12 +22,24 @@ let
#"1.0.0.1" # Cloudflare
#"149.112.112.112" # Quad 9
metadata.infra.gw # Currently using our UniFi router for DNS as well
"100.100.100.100"
];
in
{
greg.tailscale = {
enable = true;
tags = [ "home" ];
greg = {
nebula = {
enable = true;
# genesis IS the routing node for the home LAN — it does not route through itself.
# Override the module default (which points at genesis) to avoid a routing loop.
unsafeRoutes = [ ];
# genesis routes the home LAN (10.42.0.0/16) into the Nebula overlay.
# Sign genesis's cert with -subnets '10.42.0.0/16' (see secrets/nebula/README.md).
routesSubnet = "10.42.0.0/16";
};
tailscale = {
enable = true;
tags = [ "home" ];
};
};
# Really, why do I still have to force-disable this crap?
@@ -81,49 +94,51 @@ in
environment.etc."hosts.d/local".text = extraHosts;
services = {
kea = {
dhcp4 = (
import ./networking/dhcp.nix {
inherit
iot
lan
lanIP
routerIP
;
}
);
};
#########
# dnsmasq config
########
dnsmasq = {
bind = {
enable = true;
settings = {
domain = "thehellings.lan";
expand-hosts = true;
log-queries = true;
no-hosts = true; # Do not read /etc/hosts, which makes genesis resolve to 127.0.0.2
addn-hosts = "/etc/adblock_hosts";
hostsdir = "/etc/hosts.d/";
server = dnsServers;
};
};
prometheus.exporters = {
dnsmasq.enable = true;
blackbox = {
enable = true;
openFirewall = true;
configFile = pkgs.writeText "blackbox.yml" ''
modules:
icmp:
prober: icmp
timeout: 5s
icmp:
preferred_ip_protocol: ip4
'';
};
cacheNetworks = [
metadata.infra.lan
metadata.infra.tailscale
metadata.infra.nebula
"127.0.0.0/8"
];
zones =
let
makeZoneFile =
hosts: domain:
let
preamble = [
"$ORIGIN\t${domain}."
"$TTL\t1h"
"@\tIN\tSOA\t${config.networking.hostName}\tgreg@thehellings.com (1 1m 1m 1m 1m)"
"\tIN\tNS\t${config.networking.hostName}"
];
makeHost =
host:
[ "${host.name}\tIN\tA\t${host.address}" ]
++ lib.map (a: "${a}\tIN\tA\t${host.address}") (
if builtins.hasAttr "aliases" host then host.aliases else [ ]
);
in
pkgs.writeText "${domain}" (
builtins.concatStringsSep "\n" (preamble ++ (lib.flatten (lib.map makeHost hosts)) ++ [ "" ])
);
in
lib.mapAttrs
(domain: net: {
master = true;
file = makeZoneFile (lib'.hostsByNet net metadata.hosts) domain;
})
{
#"shire-zebra.ts.net" = "tailscale";
"nebula.thehellings.com" = "nebula";
nebula = "nebula";
"thehellings.lan" = "lan";
lan = "lan";
};
};
}; # End of services configuration
-70
View File
@@ -1,70 +0,0 @@
{
lib,
metadata,
pkgs,
...
}:
let
ips = lib.filterAttrs (_k: v: v ? "ip" && v.ip != null) metadata.hosts;
tps = lib.filterAttrs (_k: v: v ? "ts" && v.ts != null) metadata.hosts;
get = field: set: lib.mapAttrsToList (_k: v: v.${field}) set;
getTS = get "ts" tps;
getIP = get "ip" ips;
whitelists = builtins.concatStringsSep "," (
[
"localhost"
"127.0.0.1"
]
++ getTS
++ getIP
);
in
{
services = {
prowlarr = {
enable = true;
dataDir = "/arr/prowlarr";
openFirewall = true;
};
radarr = {
enable = true;
openFirewall = true;
};
transmission = {
enable = true;
openPeerPorts = true;
openRPCPort = true;
package = pkgs.transmission_4;
settings = {
download-dir = "/arr/transmission/downloads";
rpc-bind-address = "0.0.0.0";
rpc-host-whitelist = whitelists;
rpc-host-whitelist-enabled = false;
rpc-whitelist = whitelists;
rpc-whitelist-enabled = false;
watch-dir-enabled = true;
watch-dir = "/arr/transmission/incoming";
};
};
};
systemd.mounts =
let
nfs = name: {
what = "nas1.shire-zebra.ts.net:/mnt/all/${name}";
type = "nfs";
name = "${name}.mount";
where = "/${name}";
requires = [ "tailscaled-autoconnect.service" ];
after = [ "tailscaled-autoconnect.service" ];
wantedBy = [ "multi-user.target" ];
mountConfig.Options = "_netdev,noexec,timeo=50,retrans=5,soft";
};
in
[
(nfs "arr")
(nfs "music")
(nfs "photos")
(nfs "video")
];
}
+122 -18
View File
@@ -6,6 +6,7 @@
config,
metadata,
pkgs,
top,
...
}:
let
@@ -17,13 +18,31 @@ in
{
imports = [
# Include the results of the hardware scan.
./arr.nix
./hardware-configuration.nix
top.niks3.nixosModules.niks3
];
age.secrets.grafana-secret-key = {
file = ../../../secrets/grafana-secret-key.age;
owner = "grafana";
age.secrets = {
cache-private-key = {
file = ../../../secrets/cache-private-key.age;
owner = "niks3";
};
grafana-secret-key = {
file = ../../../secrets/grafana-secret-key.age;
owner = "grafana";
};
niks3-access-key-id = {
file = ../../../secrets/niks3/access_key_id.age;
owner = "niks3";
};
niks3-api-token = {
file = ../../../secrets/niks3/api_token.age;
owner = "niks3";
};
niks3-secret-access-key = {
file = ../../../secrets/niks3/secret_access_key.age;
owner = "niks3";
};
};
# Bootloader
@@ -49,6 +68,7 @@ in
greg = {
home = true;
nebula.enable = true;
proxies = {
"jellyfin.home".target = "http://localhost:8096/";
"jellyfin.thehellings.lan".target = "http://localhost:8096/";
@@ -59,6 +79,12 @@ in
enable = true;
tags = [ "home" ];
};
backup.jobs.albyhub = {
src = "/chain/alby";
dest = "albyhub";
pre = "systemctl stop albyhub || true";
post = "systemctl start albyhub";
};
};
hardware = {
@@ -91,6 +117,7 @@ in
];
};
};
firewall.interfaces.nebula0.allowedTCPPorts = [ 5751 ];
nameservers = [ metadata.infra.dns ];
};
@@ -143,6 +170,27 @@ in
analytics.reporting_enabled = false;
};
};
niks3 = {
enable = true;
apiTokenFile = config.age.secrets.niks3-api-token.path;
gc.enable = false;
httpAddr = "${metadata.hosts.hosea.nebulaIp}:5751";
nginx = {
enable = true;
domain = "hosea.nebula";
enableACME = false;
forceSSL = false;
};
s3 = {
accessKeyFile = config.age.secrets.niks3-access-key-id.path;
bucket = "niks3";
endpoint = "nas1.shire-zebra.ts.net:9000";
secretKeyFile = config.age.secrets.niks3-secret-access-key.path;
useSSL = false;
};
signKeyFiles = [ config.age.secrets.cache-private-key.path ];
};
prometheus.exporters.graphite.enable = true;
# Configure keymap
xserver.xkb = {
@@ -151,6 +199,25 @@ in
};
};
systemd.mounts =
let
nfs = name: {
what = "nas1.shire-zebra.ts.net:/mnt/all/${name}";
type = "nfs";
name = "${name}.mount";
where = "/${name}";
requires = [ "tailscaled-autoconnect.service" ];
after = [ "tailscaled-autoconnect.service" ];
wantedBy = [ "multi-user.target" ];
mountConfig.Options = "_netdev,noexec,timeo=50,retrans=5,soft";
};
in
[
(nfs "music")
(nfs "photos")
(nfs "video")
];
# After first deploy: create a Grafana service account + API token for Klaatu
# via the Grafana UI, then encrypt it: agenix -e secrets/grafana-api-token.age
age.secrets.grafana-api-token = {
@@ -285,7 +352,7 @@ in
"uid": "kubernetes-overview",
"title": "Kubernetes Overview",
"schemaVersion": 38,
"version": 2,
"version": 3,
"refresh": "30s",
"time": {"from": "now-3h", "to": "now"},
"panels": [
@@ -390,6 +457,41 @@ in
"title": "Node Memory Usage %",
"gridPos": {"x": 12, "y": 38, "w": 12, "h": 8},
"targets": [{"datasource": {"type": "prometheus", "uid": "prometheus"}, "expr": "(1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100", "refId": "A"}]
},
{
"id": 12,
"type": "bargauge",
"title": "Top 5 Fullest PersistentVolumes",
"gridPos": {"x": 0, "y": 46, "w": 24, "h": 8},
"targets": [
{
"datasource": {"type": "prometheus", "uid": "prometheus"},
"expr": "topk(5, kubelet_volume_stats_used_bytes / kubelet_volume_stats_capacity_bytes * 100)",
"legendFormat": "{{namespace}}/{{persistentvolumeclaim}}",
"refId": "A",
"instant": true
}
],
"options": {
"reduceOptions": {"calcs": ["lastNotNull"]},
"orientation": "horizontal",
"displayMode": "gradient"
},
"fieldConfig": {
"defaults": {
"unit": "percent",
"min": 0,
"max": 100,
"thresholds": {
"mode": "absolute",
"steps": [
{"color": "green", "value": null},
{"color": "yellow", "value": 70},
{"color": "red", "value": 90}
]
}
}
}
}
]
}
@@ -400,44 +502,44 @@ in
"uid": "network-overview",
"title": "Network & UniFi",
"schemaVersion": 38,
"version": 2,
"version": 3,
"refresh": "30s",
"time": {"from": "now-3h", "to": "now"},
"panels": [
{
"id": 1,
"type": "stat",
"title": "DNS Queries/s",
"type": "timeseries",
"title": "DNS Queries",
"gridPos": {"x": 0, "y": 0, "w": 6, "h": 4},
"targets": [{"datasource": {"type": "prometheus", "uid": "prometheus"}, "expr": "rate(dnsmasq_queries_total[5m]) or vector(0)", "refId": "A"}]
"targets": [{"datasource": {"type": "prometheus", "uid": "prometheus"}, "expr": "rate(dnsmasq_servers_queries[5m]) or vector(0)", "refId": "A"}]
},
{
"id": 3,
"type": "stat",
"title": "UniFi Devices",
"gridPos": {"x": 6, "y": 0, "w": 6, "h": 4},
"targets": [{"datasource": {"type": "prometheus", "uid": "prometheus"}, "expr": "count(unifipoller_device_uptime_seconds) or vector(0)", "refId": "A"}]
"targets": [{"datasource": {"type": "prometheus", "uid": "prometheus"}, "expr": "count(unpoller_device_uptime_seconds) or vector(0)", "refId": "A"}]
},
{
"id": 7,
"type": "stat",
"title": "WiFi Clients",
"gridPos": {"x": 12, "y": 0, "w": 6, "h": 4},
"targets": [{"datasource": {"type": "prometheus", "uid": "prometheus"}, "expr": "count(unifipoller_client_wifi_tx_rate_bps) or vector(0)", "refId": "A"}]
"targets": [{"datasource": {"type": "prometheus", "uid": "prometheus"}, "expr": "count(unpoller_client_uptime_seconds{wired=\"false\"}) or vector(0)", "refId": "A"}]
},
{
"id": 8,
"type": "stat",
"title": "Wired Clients",
"gridPos": {"x": 18, "y": 0, "w": 6, "h": 4},
"targets": [{"datasource": {"type": "prometheus", "uid": "prometheus"}, "expr": "count(unifipoller_client_wired_tx_rate_bps) or vector(0)", "refId": "A"}]
"targets": [{"datasource": {"type": "prometheus", "uid": "prometheus"}, "expr": "count(unpoller_client_uptime_seconds{wired=\"true\"}) or vector(0)", "refId": "A"}]
},
{
"id": 9,
"type": "timeseries",
"title": "WAN RX (bytes/s)",
"gridPos": {"x": 0, "y": 4, "w": 12, "h": 8},
"targets": [{"datasource": {"type": "prometheus", "uid": "prometheus"}, "expr": "rate(unifipoller_device_wan_receive_bytes_total[5m])", "legendFormat": "{{name}}", "refId": "A"}],
"targets": [{"datasource": {"type": "prometheus", "uid": "prometheus"}, "expr": "unpoller_device_wan_receive_rate_bytes", "legendFormat": "{{name}}", "refId": "A"}],
"fieldConfig": {"defaults": {"unit": "Bps"}}
},
{
@@ -445,7 +547,7 @@ in
"type": "timeseries",
"title": "WAN TX (bytes/s)",
"gridPos": {"x": 12, "y": 4, "w": 12, "h": 8},
"targets": [{"datasource": {"type": "prometheus", "uid": "prometheus"}, "expr": "rate(unifipoller_device_wan_transmit_bytes_total[5m])", "legendFormat": "{{name}}", "refId": "A"}],
"targets": [{"datasource": {"type": "prometheus", "uid": "prometheus"}, "expr": "unpoller_device_wan_transmit_rate_bytes", "legendFormat": "{{name}}", "refId": "A"}],
"fieldConfig": {"defaults": {"unit": "Bps"}}
},
{
@@ -453,21 +555,23 @@ in
"type": "timeseries",
"title": "UniFi Port RX (bytes/s)",
"gridPos": {"x": 0, "y": 12, "w": 12, "h": 8},
"targets": [{"datasource": {"type": "prometheus", "uid": "prometheus"}, "expr": "rate(unifipoller_port_receive_bytes_total[5m])", "legendFormat": "{{port_id}} {{name}}", "refId": "A"}]
"targets": [{"datasource": {"type": "prometheus", "uid": "prometheus"}, "expr": "rate(unpoller_device_port_receive_bytes_total[5m])", "legendFormat": "{{port_id}} {{name}}", "refId": "A"}],
"fieldConfig": {"defaults": {"unit": "Bps"}}
},
{
"id": 5,
"type": "timeseries",
"title": "UniFi Port TX (bytes/s)",
"gridPos": {"x": 12, "y": 12, "w": 12, "h": 8},
"targets": [{"datasource": {"type": "prometheus", "uid": "prometheus"}, "expr": "rate(unifipoller_port_transmit_bytes_total[5m])", "legendFormat": "{{port_id}} {{name}}", "refId": "A"}]
"targets": [{"datasource": {"type": "prometheus", "uid": "prometheus"}, "expr": "rate(unpoller_device_port_transmit_bytes_total[5m])", "legendFormat": "{{port_id}} {{name}}", "refId": "A"}],
"fieldConfig": {"defaults": {"unit": "Bps"}}
},
{
"id": 11,
"type": "timeseries",
"title": "Top Client Throughput (bytes/s)",
"gridPos": {"x": 0, "y": 20, "w": 24, "h": 8},
"targets": [{"datasource": {"type": "prometheus", "uid": "prometheus"}, "expr": "topk(10, rate(unifipoller_client_receive_bytes_total[5m]) + rate(unifipoller_client_transmit_bytes_total[5m]))", "legendFormat": "{{name}} {{ip}}", "refId": "A"}],
"targets": [{"datasource": {"type": "prometheus", "uid": "prometheus"}, "expr": "topk(10, rate(unpoller_client_receive_bytes_total[5m]) + rate(unpoller_client_transmit_bytes_total[5m]))", "legendFormat": "{{name}} {{ip}}", "refId": "A"}],
"fieldConfig": {"defaults": {"unit": "Bps"}}
},
{
@@ -482,7 +586,7 @@ in
"type": "table",
"title": "Device Status",
"gridPos": {"x": 12, "y": 28, "w": 12, "h": 8},
"targets": [{"datasource": {"type": "prometheus", "uid": "prometheus"}, "expr": "unifipoller_device_uptime_seconds", "instant": true, "refId": "A"}],
"targets": [{"datasource": {"type": "prometheus", "uid": "prometheus"}, "expr": "unpoller_device_uptime_seconds", "instant": true, "refId": "A"}],
"fieldConfig": {"defaults": {"unit": "s"}}
}
]
+3 -43
View File
@@ -9,12 +9,6 @@
./hardware-configuration.nix
];
age.secrets = {
gitea-runner-isaiah-podman.file = ../../../secrets/gitea/runner-isaiah-podman.age;
gitea-workerPassword.file = ../../../secrets/gitea/workerPassword.age;
runner-reg.file = ../../../secrets/gitlab/kubernetes-k3s-local.age;
};
boot = {
binfmt.emulatedSystems = [ "aarch64-linux" ];
extraModprobeConfig = "options kvm_amd nested=1";
@@ -42,15 +36,16 @@
vip = metadata.hosts.${config.networking.hostName}.ip;
priority = 255;
};
nebula.enable = true;
podman.enable = true;
tailscale = {
enable = true;
tags = [ "home" ];
};
remote-builder.enable = true;
runner = {
gitea-runner = {
enable = true;
qemu = true;
extraLabels = [ "bare-metal:host" ];
};
};
@@ -66,41 +61,6 @@
};
services = {
gitea-actions-runner.instances.podman = {
enable = true;
labels = [
"debian-latest:docker://node:25-trixie"
"ubuntu-latest:docker://docker.gitea.com/runner-images:ubuntu-latest"
"ubuntu-24.04:docker://docker.gitea.com/runner-images:ubuntu-24.04"
"ubuntu-22.04:docker://docker.gitea.com/runner-images:ubuntu-22.04"
"ubuntu-full-latest:docker://ghcr.io/catthehacker/ubuntu:full-latest"
"ubuntu-full-24.04:docker://ghcr.io/catthehacker/ubuntu:full-24.04"
"ubuntu-full-22.04:docker://ghcr.io/catthehacker/ubuntu:full-22.04"
"ubuntu-act-latest:docker://ghcr.io/catthehacker/ubuntu:act-latest"
"ubuntu-act-24.04:docker://ghcr.io/catthehacker/ubuntu:act-24.04"
"ubuntu-act-22.04:docker://ghcr.io/catthehacker/ubuntu:act-22.04"
"ubuntu-runner-latest:docker://ghcr.io/catthehacker/ubuntu:runner-latest"
"ubuntu-runner-24.04:docker://ghcr.io/catthehacker/ubuntu:runner-24.04"
"ubuntu-runner-22.04:docker://ghcr.io/catthehacker/ubuntu:runner-22.04"
"ubuntu-rust-latest:docker://ghcr.io/catthehacker/ubuntu:rust-latest"
"ubuntu-rust-24.04:docker://ghcr.io/catthehacker/ubuntu:rust-24.04"
"ubuntu-rust-22.04:docker://ghcr.io/catthehacker/ubuntu:rust-22.04"
"nix-latest:docker://src.thehellings.com/greg/builder:latest"
];
name = "isaiah-podman";
settings = {
container.force_pull = true;
runner.capacity = 7;
};
tokenFile = config.age.secrets.gitea-runner-isaiah-podman.path;
url = "https://gitea.shire-zebra.ts.net";
};
k3s.clusterInit = true; # This is the first node in the cluster
openssh = {
enable = true;
+7 -8
View File
@@ -22,8 +22,6 @@ in
];
age.secrets = {
runner-reg.file = ../../../secrets/gitlab/nixos-qemu-shell.age;
gitea-buildbotWorkersFile = mk ../../../secrets/gitea/buildbotWorkersFile.age;
gitea-oauthToken = mk ../../../secrets/gitea/oauthToken.age;
gitea-oauthSecret = mk ../../../secrets/gitea/oauthSecret.age;
@@ -78,6 +76,10 @@ in
};
greg = {
gitea-runner = {
enable = true;
extraLabels = [ "bare-metal:host" ];
};
home = true;
kubernetes = {
enable = true;
@@ -85,16 +87,12 @@ in
vip = ip;
priority = 254;
};
nebula.enable = true;
tailscale = {
enable = true;
tags = [ "home" ];
};
remote-builder.enable = true;
runner = {
enable = true;
threads = 3;
qemu = true;
};
};
hardware = {
@@ -115,6 +113,7 @@ in
interface = "br0";
};
firewall.allowedTCPPorts = [
8010
3389
9989 # buildbot communications port
];
@@ -148,7 +147,7 @@ in
evalWorkerCount = 4;
gitea = {
enable = true;
instanceUrl = "https://src.thehellings.com";
instanceUrl = "https://gitea.shire-zebra.ts.net";
oauthId = "7ec9107d-379b-47c8-870f-1191956d0500";
oauthSecretFile = config.age.secrets.gitea-oauthSecret.path;
tokenFile = config.age.secrets.gitea-oauthToken.path;
+11 -16
View File
@@ -24,8 +24,19 @@
];
greg = {
gitea-runner = {
enable = true;
extraLabels = [
"vps:host"
"blog:host"
];
};
home = false;
linode.enable = true;
nebula = {
enable = true;
isLighthouse = true;
};
proxies."immich.thehellings.com" = {
genAliases = false;
target = "http://localhost:${builtins.toString config.services.immich-public-proxy.port}";
@@ -55,20 +66,4 @@
immichUrl = "https://immich.shire-zebra.ts.net";
};
};
security.sudo.extraRules = [
{
users = [ "gitlab-runner" ];
commands = [
{
command = "/run/current-system/sw/bin/systemctl";
options = [ "NOPASSWD" ];
}
{
command = "/run/current-system/sw/bin/podman";
options = [ "NOPASSWD" ];
}
];
}
];
}
+53 -27
View File
@@ -1,4 +1,4 @@
{ ... }:
{ config, ... }:
let
srcDomain = "src.thehellings.com";
@@ -6,15 +6,23 @@ let
in
{
greg.proxies."${srcDomain}" = {
target = "https://gitea.shire-zebra.ts.net";
target = "http://unix:${config.services.anubis.instances.git.settings.BIND}";
ssl = true;
genAliases = false;
extraConfig = ''
proxy_ssl_verify off;
proxy_ssl_server_name on;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Ssl on;
#proxy_ssl_verify off;
#proxy_ssl_server_name on;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Http-Version $server_protocol;
proxy_set_header User-Agent $http_user_agent;
client_max_body_size 100000m;
#proxy_set_header Host $host;
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#proxy_set_header X-Forwarded-Proto $scheme;
#proxy_set_header X-Forwarded-Ssl on;
# Ultimate AI Block List v1.7 20250924
# https://perishablepress.com/ultimate-ai-block-list/
@@ -87,6 +95,44 @@ in
networking.firewall.allowedTCPPorts = [ sshPort ];
services = {
anubis = {
instances = {
git = {
enable = true;
settings = {
BIND = "/run/anubis/anubis-git/anubis.sock";
COOKIE_DOMAIN = "thehellings.com";
SERVE_ROBOTS_TXT = true;
TARGET = "https://gitea.shire-zebra.ts.net/";
};
};
};
};
haproxy = {
enable = true;
config = ''
global
daemon
maxconn 20
defaults
timeout connect 500s
timeout client 500s
timeout server 1h
listen gitsshd
bind *:${toString sshPort}
timeout client 1h
mode tcp
server git-isaiah isaiah.shire-zebra.ts.net:32222
server git-jeremiah jeremiah.shire-zebra.ts.net:32222
server git-zeke zeke.shire-zebra.ts.net:32222
'';
};
};
systemd.services = {
haproxy = {
after = [
@@ -98,25 +144,5 @@ in
};
};
services.haproxy = {
enable = true;
config = ''
global
daemon
maxconn 20
defaults
timeout connect 500s
timeout client 500s
timeout server 1h
listen gitsshd
bind *:${toString sshPort}
timeout client 1h
mode tcp
server git-isaiah isaiah.shire-zebra.ts.net:32222
server git-jeremiah jeremiah.shire-zebra.ts.net:32222
server git-zeke zeke.shire-zebra.ts.net:32222
'';
};
users.users.nginx.extraGroups = [ config.users.groups.anubis.name ];
}
+13 -31
View File
@@ -2,12 +2,24 @@
# them by the following commands:
# nix run nixpkgs.matrix-synapse
# register_new_matrix_user -k "B9EoPr2WV9hzwc7uL2Sx1JmvCeKDEOGCpB0uginQcQtEH4wzRtkSIdo7lltrjSQa" http://localhost:8448
{ config, lib, ... }:
{ config, ... }:
let
domain = "${config.networking.domain}";
fqdn = "matrix.${domain}";
in
{
greg.proxies."${fqdn}" = {
extraConfig = ''
error_log /var/log/nginx/debug.log debug;
proxy_ssl_verify off;
proxy_ssl_server_name on;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Ssl on;
'';
genAliases = false;
ssl = true;
target = "https://matrix.shire-zebra.ts.net";
};
services.nginx = {
virtualHosts = {
# Server the '.well-known' files to find the Matrix API server
@@ -44,36 +56,6 @@ in
return 200 '${builtins.toJSON client}';
'';
};
# Reverse proxy in front of the actual Matrix server
"${fqdn}" = {
enableACME = true;
forceSSL = true;
extraConfig = ''
error_log /var/log/nginx/debug.log debug;
'';
# Not the appropriate place for the chat client
locations =
(builtins.listToAttrs (
builtins.map
(
val:
lib.nameValuePair "/_${val}" {
proxyPass = "http://matrix.kubernetes";
}
)
[
"matrix"
"synapse"
"dendrite"
]
))
// {
"/".extraConfig = "return 404;";
};
};
};
};
+1 -1
View File
@@ -13,7 +13,7 @@
services.nextcloud = {
enable = true;
package = pkgs.nextcloud32;
package = pkgs.nextcloud33;
appstoreEnable = true;
hostName = "next.${config.networking.domain}";
https = true;
-6
View File
@@ -24,7 +24,6 @@ in
virtualisation.oci-containers = {
backend = "podman";
containers."homepage" = {
# needs explicit port to match what gitlab-runner sees when pulling
image = "registry.thehellings.com:443/greg/homepage/gregs-homepage:latest";
ports = [ "${homepage}:80" ];
};
@@ -35,10 +34,5 @@ in
ssl = true;
genAliases = false;
};
"doubles.thehellings.com" = {
target = "http://localhost:8081";
ssl = true;
genAliases = false;
};
};
}
+7 -2
View File
@@ -1,7 +1,12 @@
{ config, pkgs, ... }:
{
config,
pkgs,
pkgs',
...
}:
{
environment.systemPackages = [ pkgs.upgrade-pg-cluster ];
environment.systemPackages = [ pkgs'.upgrade-pg-cluster ];
services.postgresql = {
enable = true;
+5 -8
View File
@@ -14,23 +14,20 @@
top.nix-hardware.nixosModules.system76
];
age.secrets = {
gitea-workerPassword.file = ../../../secrets/gitea/workerPassword.age;
};
boot.extraModulePackages = [ config.boot.kernelPackages.v4l2loopback ];
greg = {
gitea-runner = {
enable = true;
extraLabels = [ "bare-metal:host" ];
};
kubernetes = {
enable = true;
vipInterface = "enp12s0";
priority = 253;
};
nebula.enable = true;
remote-builder.enable = true;
runner = {
enable = true;
vbox = false;
};
tailscale = {
enable = true;
tags = [ "home" ];
@@ -35,10 +35,11 @@
device = "/dev/nvme0n1p1";
fsType = "auto";
};
#"/mnt/disk1" = {
#device = "/dev/disk/by-uuid/0bb64e76-8811-499a-b60e-cc97808f2b0e";
#fsType = "btrfs";
#};
"/mnt/disk1" = {
device = "/dev/disk/by-uuid/bd04e868-034e-46e8-84ae-cd7347448bbd";
fsType = "xfs";
options = [ "nofail" ];
};
};
swapDevices = [ ];
-273
View File
@@ -1,273 +0,0 @@
# Edit this configuration file to define what should be installed on
# your system. Help is available in the configuration.nix(5) man page
# and in the NixOS manual (accessible by running nixos-help).
{
config,
pkgs,
lib,
...
}:
let
registryPort = 5000;
vpnIp = "100.117.28.111";
in
{
imports = [
./hardware-configuration.nix
];
age.secrets =
let
cfg = n: {
file = ../../../secrets/gitlab/${n}.age;
owner = "gitlab";
group = "gitlab";
mode = "0444";
};
in
{
gitlab-secret = cfg "secret";
gitlab-otp = cfg "otp";
gitlab-db = cfg "db";
gitlab-db-password = cfg "db-password";
gitlab-jws = cfg "jws";
gitlab-key = cfg "key";
gitlab-cert = cfg "cert";
gitlab-salt = cfg "salt";
gitlab-primary-key = cfg "primary-key";
gitlab-deterministic-key = cfg "deterministic-key";
minio_access_key_id = {
file = ../../../secrets/minio_access_key_id.age;
owner = "gitlab";
group = "gitlab";
mode = "0444";
};
minio_secret_access_key = {
file = ../../../secrets/minio_secret_access_key.age;
owner = "gitlab";
group = "gitlab";
mode = "0444";
};
};
greg = {
backup.jobs.nas-backup = {
src = "/var/gitlab/state/backup/";
dest = "gitlab";
};
home = true;
tailscale = {
enable = true;
tags = [ "home" ];
};
};
networking = {
hostName = "gitlab"; # Define your hostname.
firewall.allowedTCPPorts = [
80
registryPort
];
};
services = {
gitlab = {
enable = true;
backup = {
keepTime = 288;
startAt = [ "03:00" ];
};
databaseHost = "postgres.kubernetes";
databaseName = "gitlab";
databaseUsername = "gitlab";
databasePasswordFile = config.age.secrets.gitlab-db-password.path;
databaseCreateLocally = false;
extraConfig = {
registry.port = null;
gitlab = {
trustedProxies = [
"${vpnIp}/32" # The system itself
"100.109.86.8/32" # Public server's IP
];
};
object_store = {
enabled = true;
proxy_download = true; # Tell them to reach out to object storage themselves!
connection = {
provider = "AWS";
endpoint = "http://s3.thehellings.lan:9000";
region = "us-east-1";
aws_access_key_id = {
_secret = config.age.secrets.minio_access_key_id.path;
};
aws_secret_access_key = {
_secret = config.age.secrets.minio_secret_access_key.path;
};
path_style = true; # True for MinIO
aws_signature_version = 2;
};
#storage_options = ...;
objects = builtins.listToAttrs (
builtins.map
(
x: lib.attrsets.nameValuePair x { bucket = "gitlab-${builtins.replaceStrings [ "_" ] [ "-" ] x}"; }
)
[
"artifacts"
"ci_secure_files"
"dependency_proxy"
"external_diffs"
"lfs"
"packages"
"pages"
"terraform_state"
"uploads"
]
);
};
};
host = "src.thehellings.com";
https = true;
initialRootEmail = "greg@thehellings.com";
initialRootPasswordFile = pkgs.writeText "initialRootPassword" "root_password";
pages = {
enable = true;
settings.pages-domain = "pages.thehellings.com";
};
port = 443;
puma = {
threadsMax = 6;
threadsMin = 2;
workers = 6;
};
redisUrl = "unix:${config.services.redis.servers.gitlab.unixSocket}";
registry = {
enable = true;
certFile = config.age.secrets.gitlab-cert.path;
keyFile = config.age.secrets.gitlab-key.path;
externalAddress = "registry.thehellings.com";
externalPort = 443;
};
secrets = {
activeRecordDeterministicKeyFile = config.age.secrets.gitlab-deterministic-key.path;
activeRecordPrimaryKeyFile = config.age.secrets.gitlab-primary-key.path;
activeRecordSaltFile = config.age.secrets.gitlab-salt.path;
dbFile = config.age.secrets.gitlab-db.path;
jwsFile = config.age.secrets.gitlab-jws.path;
otpFile = config.age.secrets.gitlab-otp.path;
secretFile = config.age.secrets.gitlab-secret.path;
};
};
nginx = {
enable = true;
clientMaxBodySize = "25000m";
virtualHosts = {
"vm-gitlab.shire-zebra.ts.net" = {
listen = [
{
addr = "0.0.0.0";
port = 443;
ssl = true;
}
];
locations."/" = {
proxyPass = "http://unix:/run/gitlab/gitlab-workhorse.socket";
recommendedProxySettings = true;
};
extraConfig = ''
ssl_certificate /etc/certs/vm-gitlab.shire-zebra.ts.net.crt ;
ssl_certificate_key /etc/certs/vm-gitlab.shire-zebra.ts.net.key ;
client_max_body_size 10000m ;
'';
};
"registry" = {
listen = [
{
addr = "0.0.0.0";
port = registryPort;
ssl = true;
}
];
locations."/" = {
proxyPass = "http://127.0.0.1:4567/";
recommendedProxySettings = true;
};
extraConfig = ''
ssl_certificate /etc/certs/vm-gitlab.shire-zebra.ts.net.crt ;
ssl_certificate_key /etc/certs/vm-gitlab.shire-zebra.ts.net.key ;
client_max_body_size 25000m ;
'';
serverAliases = [
"vm-gitlab.shire-zebra.ts.net"
];
};
};
};
openssh.enable = true;
postgresql.enable = true;
qemuGuest.enable = true;
redis.servers.gitlab = {
enable = true;
};
#resolved.enable = true;
};
# Do not start nginx until we have tailscaled up and running, so it can bind
# to the 100.* addresses
systemd = {
services = {
certRefresh =
let
script = pkgs.writeShellApplication {
name = "cert-refresh";
runtimeInputs = [ pkgs.tailscale ];
text = ''
cd /etc/certs
tailscale cert vm-gitlab.shire-zebra.ts.net
chown nginx ./*
systemctl reload nginx
'';
};
in
{
script = lib.getExe script;
serviceConfig = {
Type = "oneshot";
User = "root";
};
};
nginx = rec {
after = [ "network-online.target" ];
requires = [ "network-online.target" ];
wants = after;
serviceConfig = {
RestartMaxDelaySec = "30s";
RestartSteps = "5";
};
};
tailscaled.partOf = [ "network-online.target" ];
};
timers = {
"cert-refresh" = {
wantedBy = [ "cert-refresh.service" ];
timerConfig = {
OnCalendar = "monthly";
Persistent = true;
};
};
};
};
system.stateVersion = lib.mkForce "24.11";
}
@@ -1,58 +0,0 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{
lib,
modulesPath,
...
}:
{
imports = [
(modulesPath + "/profiles/qemu-guest.nix")
];
# Bootloader.
boot = {
extraModulePackages = [ ];
initrd = {
availableKernelModules = [
"uhci_hcd"
"ehci_pci"
"ahci"
"virtio_pci"
"virtio_scsi"
"sd_mod"
"sr_mod"
];
kernelModules = [ ];
};
loader = {
efi.canTouchEfiVariables = true;
systemd-boot.enable = true;
};
};
fileSystems."/" = {
device = lib.mkDefault "/dev/disk/by-uuid/1fdbe86e-ce6f-4af3-a876-aec35731adab";
fsType = "ext4";
};
fileSystems."/boot" = {
device = "/dev/disk/by-uuid/1E6A-C3BB";
fsType = "vfat";
options = [
"fmask=0077"
"dmask=0077"
];
};
swapDevices = [ ];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.enp6s18.useDHCP = lib.mkDefault true;
}
+25
View File
@@ -0,0 +1,25 @@
{ lib, ... }:
{
hostsByNet =
net: hosts:
let
netAttr =
{
lan = "ip";
nebula = "nebulaIp";
tailscale = "ts";
}
.${net};
in
lib.mapAttrsToList
(name: value: {
inherit name;
address = builtins.getAttr netAttr value;
aliases = lib.optionals (builtins.hasAttr "aliases" value) (builtins.getAttr "aliases" value);
})
(
lib.filterAttrs (
_host: settings: (builtins.hasAttr netAttr settings) && (builtins.getAttr netAttr settings) != null
) hosts
);
}
+1 -1
View File
@@ -40,7 +40,7 @@ metadata:
},
{
"path": "/mnt/disk1",
"allowScheduling": false,
"allowScheduling": true,
"tags": ["hdd", "large"]
}
]
-3
View File
@@ -21,9 +21,6 @@ spec:
spec:
containers:
- name: bitwarden-cli
# Since my gitlab instance depends on the database hosted in k3s, and
# the database depends on this image, I need a way to bootstrap the
# system if # I am doing disaster recovery. And this is it.
image: "ghcr.io/greg-hellings/nixos-config/img-bitwarden:latest"
#image: >-
# registry.thehellings.com/greg/nixos-config/img-bitwarden:latest
+5 -16
View File
@@ -1,32 +1,21 @@
apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
metadata:
name: kubernetes-dashboard
name: headlamp
spec:
url: https://kubernetes.github.io/dashboard/
url: "https://kubernetes-sigs.github.io/headlamp/"
interval: "24h"
---
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: kubernetes-dashboard
name: headlamp
spec:
interval: "24h"
chart:
spec:
chart: kubernetes-dashboard
chart: headlamp
sourceRef:
kind: HelmRepository
name: kubernetes-dashboard
name: headlamp
interval: "24h"
values:
app:
settings:
global:
clusterName: Hellings Home
itemsPerPage: 25
ingress:
enabled: true
hosts:
- dashboard.shire-zebra.ts.net
ingressClassName: tailscale
+14
View File
@@ -0,0 +1,14 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: dashboard-tailscale
spec:
ingressClassName: tailscale
defaultBackend:
service:
name: headlamp
port:
number: 3001
tls:
- hosts:
- headlamp
+1
View File
@@ -4,3 +4,4 @@ resources:
- namespace.yaml
- chart.yaml
- user.yaml
- ingress.yaml
-89
View File
@@ -1,89 +0,0 @@
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
name: immich
spec:
imageName: "ghcr.io/corentingiraud/cnpg-pgvector-vectorchord:16-migration"
#imageName: "ghcr.io/tensorchord/cloudnative-pgvecto.rs:16-v0.3.0"
#postgresUID: 1
instances: 1
storage:
size: 60Gi
primaryUpdateStrategy: unsupervised
postgresql:
shared_preload_libraries:
- vectors.so
- vchord.so
bootstrap:
recovery:
source: origin
# initdb:
# database: immich
# owner: immich
# secret:
# name: postgres-user-immich
# dataChecksums: true
# postInitApplicationSQL:
# - ALTER SYSTEM SET search_path TO "$user", public, vectors;
# - SET search_path TO "$user", public, vectors;
# - CREATE EXTENSION IF NOT EXISTS "cube";
# - CREATE EXTENSION IF NOT EXISTS "earthdistance";
# - GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO "immich";
externalClusters:
- name: origin
plugin:
name: barman-cloud.cloudnative-pg.io
parameters:
barmanObjectName: k3sbackup-objectstore
serverName: pgvector
managed:
roles:
- name: immich
ensure: present
comment: Immich DB user
login: true
superuser: true
passwordSecret:
name: postgres-user-immich
plugins:
- name: barman-cloud.cloudnative-pg.io
isWALArchiver: true
parameters:
barmanObjectName: k3sbackup-objectstore
---
apiVersion: postgresql.cnpg.io/v1
kind: Database
metadata:
name: database-immich
spec:
name: immich
owner: immich
cluster:
name: immich
extensions:
- name: vectors
ensure: present
- name: vectorchord
ensure: present
- name: cube
ensure: present
- name: earthdistance
ensure: present
---
apiVersion: postgresql.cnpg.io/v1
kind: ScheduledBackup
metadata:
name: immich-backup
spec:
immediate: true # Create one when this is added to the cluster
schedule: "0 2 0 * * *" # 1AM, nightly
backupOwnerReference: self
cluster:
name: immich
method: plugin
pluginConfiguration:
name: barman-cloud.cloudnative-pg.io
-2
View File
@@ -14,14 +14,12 @@ spec:
- 100.88.91.27 # dns?
- 100.80.99.48 # exodus
- 100.88.91.27 # genesis
- 100.117.28.111 # gitlab
- 100.68.203.1 # hosea
- 100.84.183.79 # isaiah
- 100.102.186.39 # jeremiah
- 100.90.74.19 # zeke
- 100.115.57.8 # linode
- 100.65.5.38 # matrix
#- 100.127.55.22 # jellyfin
---
apiVersion: traefik.io/v1alpha1
kind: IngressRouteTCP
-2
View File
@@ -4,8 +4,6 @@ resources:
- namespace.yaml
- secrets.yaml
- postgres-cluster.yaml
- postgres-gitlab.yaml
- postgres-pgadmin.yaml
- postgres-matrix.yaml
- immich.yaml
- ingress.yaml
@@ -11,13 +11,6 @@ spec:
managed:
roles:
- name: gitlab
ensure: present
comment: Gitlab user
login: true
superuser: false
passwordSecret:
name: postgres-user-gitlab
- name: pgadmin
ensure: present
comment: PG Admin user
-9
View File
@@ -1,9 +0,0 @@
apiVersion: postgresql.cnpg.io/v1
kind: Database
metadata:
name: database-gitlab
spec:
name: gitlab
owner: gitlab
cluster:
name: postgres
-68
View File
@@ -1,39 +1,5 @@
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: postgres-user-gitlab
namespace: db
spec:
target:
name: postgres-user-gitlab
deletionPolicy: Delete
template:
type: Opaque
data:
username: |-
{{ .username }}
password: |-
{{ .password }}
data:
- secretKey: username
sourceRef:
storeRef:
name: bitwarden-login
kind: ClusterSecretStore
remoteRef:
key: 5282ad16-c2dc-49d3-8fb3-b2e9012bab57
property: username
- secretKey: password
sourceRef:
storeRef:
name: bitwarden-login
kind: ClusterSecretStore
remoteRef:
key: 5282ad16-c2dc-49d3-8fb3-b2e9012bab57
property: password
---
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: postgres-user-matrix
namespace: db
@@ -133,37 +99,3 @@ spec:
remoteRef:
key: 685b29c6-9264-4e60-ba4a-b2ea005a5d7b
property: password
---
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: postgres-user-immich
namespace: db
spec:
target:
name: postgres-user-immich
deletionPolicy: Delete
template:
type: Opaque
data:
username: |-
{{ .username }}
password: |-
{{ .password }}
data:
- secretKey: username
sourceRef:
storeRef:
name: bitwarden-login
kind: ClusterSecretStore
remoteRef:
key: 5ce63e26-dd7f-46d4-b7ed-b310002ef93f
property: username
- secretKey: password
sourceRef:
storeRef:
name: bitwarden-login
kind: ClusterSecretStore
remoteRef:
key: 5ce63e26-dd7f-46d4-b7ed-b310002ef93f
property: password
+56
View File
@@ -0,0 +1,56 @@
apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
metadata:
name: gitea
spec:
interval: "24h"
url: https://dl.gitea.com/charts/
---
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: gitea-runner
namespace: gitea-runner
spec:
interval: 10m
chart:
spec:
chart: actions
version: "0.0.4"
sourceRef:
kind: HelmRepository
name: gitea
interval: "1h"
values:
rbac:
create: true
serviceAccount:
create: true
gitea:
instanceURL: https://src.thehellings.com
runnerToken:
existingSecret: gitea-runner
existingSecretKey: token
imagePullSecrets:
- name: image-pull-secrets
config:
runner:
labels:
# Ubuntu
- "ubuntu-22.04:docker://ubuntu:22.04"
- "ubuntu-24.04:docker://ubuntu:24.04"
- "ubuntu-24.10:docker://ubuntu:24.10"
# Fedora
- "fedora-41:docker://fedora:41"
- "fedora-42:docker://fedora:42"
# CentOS Stream
- "centos-stream-9:docker://quay.io/centos/centos:stream9"
- "centos-stream-10:docker://quay.io/centos/centos:stream10"
# Nix
- "nix:docker://nixos/nix:latest"
# ci-images (internal registry: src.thehellings.com/greg)
- "ci-builder:docker://src.thehellings.com/greg/builder:latest"
- "ci-vm-test:docker://src.thehellings.com/greg/vm-test:latest"
- "ci-sword:docker://src.thehellings.com/greg/sword-container-builder:latest"
- "ci-bitwarden:docker://src.thehellings.com/greg/bitwarden:latest"
- "ci-immich:docker://src.thehellings.com/greg/immich:latest"
@@ -1,4 +1,4 @@
namespace: gitlab-runner
namespace: gitea-runner
resources:
- namespace.yaml
@@ -1,4 +1,4 @@
apiVersion: v1
kind: Namespace
metadata:
name: gitlab-runner
name: gitea-runner
+18
View File
@@ -0,0 +1,18 @@
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: gitea-runner
namespace: gitea-runner
spec:
refreshInterval: 1h
secretStoreRef:
name: bitwarden-login
kind: ClusterSecretStore
target:
name: gitea-runner
creationPolicy: Owner
data:
- secretKey: token
remoteRef:
key: 11419680-5338-4f19-bdd9-b422007046af
property: password
+6 -4
View File
@@ -15,7 +15,7 @@ spec:
chart:
spec:
chart: gitea
version: "12.5.0"
version: "12.6.0"
sourceRef:
kind: HelmRepository
name: gitea-repository
@@ -35,7 +35,7 @@ spec:
storageClass: longhorn-default
image:
tag: "1.25.4"
tag: "1.26.2"
replicaCount: 1
@@ -66,8 +66,8 @@ spec:
APP_NAME: "Gitea: Greg's Cup of Git"
RUN_MODE: dev
server:
DOMAIN: "thehellings.com"
ROOT_URL: "https://src.thehellings.com"
DOMAIN: "shire-zebra.ts.net"
ROOT_URL: "https://gitea.shire-zebra.ts.net"
SSH_PORT: "2222"
database:
DB_TYPE: postgres
@@ -92,6 +92,8 @@ spec:
# MINIO_SECRET_ACCESS_KEY: ""
MINIO_USE_SSL: "false"
MINIO_INSECURE_SKIP_VERIFY: "true"
webhook:
ALLOWED_HOST_LIST: loopback,private,*.shire-zebra.ts.net
metrics:
enabled: false
+78
View File
@@ -0,0 +1,78 @@
apiVersion: batch/v1
kind: CronJob
metadata:
name: gitea-dump
spec:
schedule: "0 3 * * *"
successfulJobsHistoryLimit: 3
failedJobsHistoryLimit: 3
jobTemplate:
spec:
template:
spec:
restartPolicy: Never
securityContext:
runAsUser: 1000
runAsGroup: 1000
fsGroup: 1000
volumes:
- name: gitea-data
persistentVolumeClaim:
claimName: gitea-shared-storage
- name: dump-staging
emptyDir: {}
initContainers:
- name: gitea-dump
image: "gitea/gitea:1.25.4"
command:
- /bin/sh
- "-c"
- |
set -e
TIMESTAMP=$(date +%Y%m%d-%H%M%S)
OUTFILE="/dump-staging/gitea-dump-${TIMESTAMP}.zip"
gitea dump \
--config /data/gitea/conf/app.ini \
--file "${OUTFILE}" \
--type zip
echo "Dump written to ${OUTFILE}"
volumeMounts:
- name: gitea-data
mountPath: /data
readOnly: true
- name: dump-staging
mountPath: /dump-staging
containers:
- name: upload-to-s3
image: "minio/mc:latest"
command:
- /bin/sh
- "-c"
- |
set -e
# Configure mc alias for MinIO
mc alias set nas1 http://nas1.shire-zebra.ts.net:9000 \
"${MINIO_ACCESS_KEY}" "${MINIO_SECRET_KEY}"
# Upload dump to backup-gitea bucket
DUMP_FILE=$(ls /dump-staging/gitea-dump-*.zip | head -1)
mc cp "${DUMP_FILE}" "nas1/backup-gitea/$(basename ${DUMP_FILE})"
echo "Uploaded $(basename ${DUMP_FILE}) to backup-gitea"
# Set 30-day lifecycle on the bucket (idempotent)
mc ilm rule add --expire-days 30 nas1/backup-gitea 2>/dev/null || true
volumeMounts:
- name: dump-staging
mountPath: /dump-staging
readOnly: true
env:
- name: MC_CONFIG_DIR
value: /tmp/.mc
- name: MINIO_ACCESS_KEY
valueFrom:
secretKeyRef:
name: gitea-config
key: minio_key
- name: MINIO_SECRET_KEY
valueFrom:
secretKeyRef:
name: gitea-config
key: minio_secret
+1
View File
@@ -6,3 +6,4 @@ resources:
- chart.yaml
- ingress.yaml
- secrets.yaml
- dump-cronjob.yaml
+13 -2
View File
@@ -13,8 +13,10 @@ spec:
USER={{ .dbuser }}
PASSWD="""{{ .dbpass }}"""
storage: |-
MINIO_ACCESS_KEY_ID={{ .minio_key }}
MINIO_SECRET_ACCESS_KEY={{ .minio_secret }}
MINIO_ACCESS_KEY_ID={{ .minio_nas1_key }}
MINIO_SECRET_ACCESS_KEY={{ .minio_nas1_secret }}
#minio_key: "{{ .minio_nas1_key }}"
#minio_secret: "{{ .minio_nas1_secret }}"
secretStoreRef:
name: bitwarden-login
kind: ClusterSecretStore
@@ -28,6 +30,15 @@ spec:
remoteRef:
key: dcbcf704-7dce-48d7-bbd1-b3a801875b3d
property: password
# MinIO credentials for NAS1
- secretKey: minio_nas1_key
remoteRef:
key: c4c66ab3-2ade-4086-9c0d-b3a80172b1ba
property: username
- secretKey: minio_nas1_secret
remoteRef:
key: c4c66ab3-2ade-4086-9c0d-b3a80172b1ba
property: password
# Postgres credentials
- secretKey: dbuser
remoteRef:
-64
View File
@@ -1,64 +0,0 @@
apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
metadata:
name: gitlab-runner
spec:
interval: "24h"
url: https://charts.gitlab.io
---
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: gitlab-runner
spec:
interval: 10m
chart:
spec:
chart: gitlab-runner
version: "0.83.1"
sourceRef:
kind: HelmRepository
name: gitlab-runner
interval: "1h"
dependsOn:
- name: external-secrets
namespace: external-secrets
- name: tailscae
namespace: tailscale
values:
crds:
create: true
includeCRDs: true
gitlabUrl: https://src.thehellings.com
runners:
secret: gitlab-runner
imagePullSecrets:
- name: image-pull-secrets
rbac:
create: true
serviceAccount:
create: true
metrics:
enabled: true
extraEnv:
CACHE_TYPE: s3
CACHE_SHARED: "true"
CACHE_S3_BUCKET_NAME: gitlab-runner-cache
CACHE_S3_INSECURE: "true"
extraEnvFrom:
PACKER_GITHUB_API_TOKEN:
secretKeyRef:
name: gitlab-runner
key: PACKER_GITHUB_API_TOKEN
CACHE_S3_SERVER_ADDRESS:
secretKeyRef:
name: gitlab-runner
key: CACHE_S3_SERVER_ADDRESS
CACHE_S3_ACCESS_KEY:
secretKeyRef:
name: s3-access
key: username
CACHE_S3_SECRET_KEY:
secretKeyRef:
name: s3-access
key: password
-101
View File
@@ -1,101 +0,0 @@
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: gitlab-runner
namespace: gitlab-runner
spec:
secretStoreRef:
name: bitwarden-fields
kind: ClusterSecretStore
target:
name: gitlab-runner
deletionPolicy: Delete
template:
type: Opaque
data:
runner-registration-token: ""
runner-token: "{{ .runnerToken }}"
PACKER_GITHUB_API_TOKEN: "{{ .PACKER_GITHUB_API_TOKEN }}"
CACHE_S3_SERVER_ADDRESS: "{{ .CACHE_S3_SERVER_ADDRESS }}"
data:
- secretKey: runnerToken
remoteRef:
key: &key 53719920-b100-4355-8c80-b2f9002fad22
property: CI_SERVER_TOKEN
- secretKey: PACKER_GITHUB_API_TOKEN
remoteRef:
key: *key
property: PACKER_GITHUB_API_TOKEN
- secretKey: CACHE_S3_SERVER_ADDRESS
remoteRef:
key: *key
property: CACHE_S3_SERVER_ADDRESS
# Includes
# CI_SERVER_TOKEN
# PACKER_GITHUB_API_TOKEN
# CACHE_S3_SERVER_ADDRESS
---
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: s3-access
namespace: gitlab-runner
spec:
secretStoreRef:
name: bitwarden-login
kind: ClusterSecretStore
target:
name: s3-access
deletionPolicy: Delete
data:
- secretKey: username
remoteRef:
key: &key 04dd39c2-268d-4a33-aa4c-b1550166139f
property: username
- secretKey: password
remoteRef:
key: *key
property: password
---
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: image-pull-secrets
namespace: gitlab-runner
spec:
secretStoreRef:
name: bitwarden-login
kind: ClusterSecretStore
target:
deletionPolicy: Delete
template:
type: kubernetes.io/dockerconfigjson
data:
.dockerconfigjson: >-
{
"auths": {
"https://index.docker.io/v1/": {
"username": "{{ .user }}",
"password": "{{ .password }}",
"email": "greg.hellings@gmail.com",
"auth": "{{ .auth }}"
}
}
}
data:
- secretKey: user
remoteRef:
key: &key f560ae38-368c-4e58-898c-aeb90012d597
property: username
- secretKey: password
remoteRef:
key: *key
property: password
- secretKey: auth
sourceRef:
storeRef:
name: bitwarden-fields
kind: ClusterSecretStore
remoteRef:
key: *key
property: auth
+36
View File
@@ -0,0 +1,36 @@
apiVersion: v1
kind: Namespace
metadata:
name: external-secrets
---
apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
metadata:
name: external-secrets
namespace: external-secrets
spec:
interval: "24h"
url: "https://charts.external-secrets.io/"
---
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: external-secrets
namespace: external-secrets
spec:
interval: 10m
chart:
spec:
chart: external-secrets
version: "2.3.0"
sourceRef:
kind: HelmRepository
name: external-secrets
interval: "1h"
values:
crds:
create: true
includeCRDs: true
webhook:
certManager:
enable: true
+3
View File
@@ -1,3 +1,6 @@
resources:
- kyverno.yaml
- external-secrets.yaml
- tailscale.yaml
- longhorn.yaml # Needed for storage
- traefik.yaml
+40
View File
@@ -0,0 +1,40 @@
apiVersion: v1
kind: Namespace
metadata:
name: kyverno-system
---
apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
metadata:
name: kyverno
namespace: kyverno-system
spec:
interval: "24h"
url: "https://kyverno.github.io/kyverno/"
---
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: kyverno
namespace: kyverno-system
spec:
interval: 10m
chart:
spec:
chart: kyverno
version: "3.7.1"
sourceRef:
kind: HelmRepository
name: kyverno
interval: "1h"
values:
admissionController:
replicas: 3
backgroundController:
replicas: 3
cleanupController:
replicas: 2
reportsController:
replicas: 2
crds:
install: true
+6 -1
View File
@@ -19,10 +19,15 @@ metadata:
namespace: longhorn-system
spec:
interval: 10m
dependsOn:
- name: tailscale
namespace: tailscale
- name: kyverno
namespace: kyverno-system
chart:
spec:
chart: longhorn
version: "1.10.2"
version: "1.11.2"
sourceRef:
kind: HelmRepository
name: longhorn
@@ -1,3 +1,36 @@
apiVersion: v1
kind: Namespace
metadata:
name: tailscale
---
apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
metadata:
name: tailscale
namespace: tailscale
spec:
interval: "24h"
url: "https://pkgs.tailscale.com/helmcharts"
---
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: tailscale
namespace: tailscale
spec:
interval: 10m
dependsOn:
- name: external-secrets
namespace: external-secrets
chart:
spec:
chart: tailscale-operator
version: "1.96.5"
sourceRef:
kind: HelmRepository
name: tailscale
interval: "1h"
---
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
+82 -8
View File
@@ -19,23 +19,76 @@ spec:
key: "dd0de40c-9ad6-4034-9d5c-b311016ebf19"
property: apikey
---
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: immich-minio-creds
spec:
target:
name: immich-minio-creds
deletionPolicy: Delete
template:
type: Opaque
data:
access-key: "{{ .minio_key }}"
secret-key: "{{ .minio_secret }}"
rclone.conf: |
[nas1minio]
type = s3
provider = Minio
endpoint = http://nas1.shire-zebra.ts.net:9000
access_key_id = {{ .minio_key }}
secret_access_key = {{ .minio_secret }}
region = us-east-1
secretStoreRef:
name: bitwarden-login
kind: ClusterSecretStore
data:
- secretKey: minio_key
remoteRef:
key: c4c66ab3-2ade-4086-9c0d-b3a80172b1ba
property: username
- secretKey: minio_secret
remoteRef:
key: c4c66ab3-2ade-4086-9c0d-b3a80172b1ba
property: password
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: immich-backup-staging
spec:
accessModes:
- ReadWriteOnce
storageClassName: longhorn-default
resources:
requests:
storage: 400Gi
---
apiVersion: batch/v1
kind: CronJob
metadata:
name: backup
spec:
schedule: "0 4 * * *" # At 4am each day
successfulJobsHistoryLimit: 3
failedJobsHistoryLimit: 3
jobTemplate:
spec:
template:
spec:
restartPolicy: Never
volumes:
- name: nas1
nfs:
path: /mnt/all/backups/immich
server: nas1.shire-zebra.ts.net
containers:
- name: staging
persistentVolumeClaim:
claimName: immich-backup-staging
- name: rclone-config
secret:
secretName: immich-minio-creds
items:
- key: rclone.conf
path: rclone.conf
initContainers:
- name: immich-go
image: "src.thehellings.com/greg/immich:latest"
imagePullPolicy: "Always"
@@ -43,21 +96,42 @@ spec:
- /bin/sh
- "-c"
- >-
rm -r /staging/*;
immich-go
archive
"--write-to-folder"
/nas1
/staging
from-immich
"--from-api-key"
"$IMMICH_API_KEY"
"--from-server"
"http://immich-server:2283"
volumeMounts:
- name: nas1
mountPath: /nas1
- name: staging
mountPath: /staging
env:
- name: IMMICH_API_KEY
valueFrom:
secretKeyRef:
name: immich-login
key: apikey
containers:
- name: rclone-sync
image: "rclone/rclone:1.68"
command:
- /bin/sh
- "-c"
- |
rclone sync \
--config /rclone-config/rclone.conf \
--checksum \
--progress \
--transfers 4 \
--checkers 8 \
/staging nas1minio:immich
volumeMounts:
- name: staging
mountPath: /staging
- name: rclone-config
mountPath: /rclone-config
readOnly: true
+2 -2
View File
@@ -32,9 +32,9 @@ spec:
containers:
main:
image:
tag: v2.4.1
tag: v2.7.5
env:
DB_HOSTNAME: immich-rw.db.svc.cluster.local
DB_HOSTNAME: immich-rw
DB_DATABASE_NAME: immich
DB_USERNAME:
valueFrom:
+161
View File
@@ -0,0 +1,161 @@
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
name: immich
spec:
imageName: "ghcr.io/tensorchord/cloudnative-vectorchord:18"
#postgresUID: 1
instances: 1
storage:
size: 60Gi
primaryUpdateStrategy: unsupervised
postgresql:
shared_preload_libraries:
- vchord.so
bootstrap:
# Use these with the name "immich-1" to restore from the backups
recovery:
source: origin
# Use these two lines in order to restore from the other database,
# once it has restored from the WALs
#pg_basebackup:
# source: restore
# Use this block to bootstrap the cluster, if you don't have backups.
# What are you doing without backups, you chump?!
# initdb:
# database: immich
# owner: immich
# secret:
# name: postgres-user-immich
# dataChecksums: true
# postInitApplicationSQL:
# - ALTER SYSTEM SET search_path TO "$user", public, vectors;
# - SET search_path TO "$user", public, vectors;
# - CREATE EXTENSION IF NOT EXISTS "cube";
# - CREATE EXTENSION IF NOT EXISTS "earthdistance";
# - GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO "immich";
externalClusters:
- name: origin
plugin:
name: barman-cloud.cloudnative-pg.io
parameters:
barmanObjectName: k3sbackup-objectstore
serverName: immich
- name: restore
connectionParameters:
host: immich-1-rw
user: streaming_replica
sslmode: verify-full
sslCert:
name: immich-1-replication
key: tls.crt
sslKey:
name: immich-1-replication
key: tls.key
sslRootCert:
name: immich-1-ca
key: ca.crt
managed:
roles:
- name: immich
ensure: present
comment: Immich DB user
login: true
superuser: true
passwordSecret:
name: postgres-user-immich
plugins:
- name: barman-cloud.cloudnative-pg.io
isWALArchiver: true
parameters:
barmanObjectName: k3sbackup-objectstore
---
apiVersion: postgresql.cnpg.io/v1
kind: Database
metadata:
name: database-immich
spec:
name: immich
owner: immich
cluster:
name: immich
extensions:
- name: vectors
ensure: present
- name: vectorchord
ensure: present
- name: cube
ensure: present
- name: earthdistance
ensure: present
---
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: k3sbackup-externalsecret
spec:
target:
name: k3sbackup-secret
deletionPolicy: Delete
template:
type: Opaque
data:
username: |-
{{ .username }}
password: |-
{{ .password }}
data:
- secretKey: username
sourceRef:
storeRef:
name: bitwarden-login
kind: ClusterSecretStore
remoteRef:
key: 685b29c6-9264-4e60-ba4a-b2ea005a5d7b
property: username
- secretKey: password
sourceRef:
storeRef:
name: bitwarden-login
kind: ClusterSecretStore
remoteRef:
key: 685b29c6-9264-4e60-ba4a-b2ea005a5d7b
property: password
---
apiVersion: barmancloud.cnpg.io/v1
kind: ObjectStore
metadata:
name: k3sbackup-objectstore
spec:
configuration:
destinationPath: "s3://k3sbackup/postgres"
endpointURL: "http://chronicles.thehellings.lan:9000/"
s3Credentials:
accessKeyId:
name: k3sbackup-secret
key: username
secretAccessKey:
name: k3sbackup-secret
key: password
wal:
compression: gzip
retentionPolicy: "30d"
---
apiVersion: postgresql.cnpg.io/v1
kind: ScheduledBackup
metadata:
name: immich-backup
spec:
immediate: false # Create one when this is added to the cluster
schedule: "0 2 0 * * *" # 1AM, nightly
backupOwnerReference: self
cluster:
name: immich
method: plugin
pluginConfiguration:
name: barman-cloud.cloudnative-pg.io
+2 -1
View File
@@ -2,8 +2,9 @@ namespace: immich
resources:
- namespace.yaml
- chart.yaml
- postgres-user-secret.yaml
- database.yaml
- chart.yaml
- pvc.yaml
- ingress.yaml
- backup.yaml
-1
View File
@@ -7,7 +7,6 @@ resources:
- mariadb-operator
- databases
- matrix
#- gitlab-runner
- immich
- monitoring
- pinchflat
+2
View File
@@ -19,6 +19,7 @@ spec:
kind: HelmRepository
name: mariadb-operator
interval: "1h"
version: "26.3.0"
---
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
@@ -33,6 +34,7 @@ spec:
kind: HelmRepository
name: mariadb-operator
interval: "1h"
version: "26.3.0"
dependsOn:
- name: mariadb-operator-crds
- name: longhorn
@@ -11,6 +11,7 @@ spec:
kind: HelmRepository
name: mariadb-operator
interval: "1h"
version: "26.3.0"
dependsOn:
- name: mariadb-operator-crds
- name: mariadb-operator
+1 -1
View File
@@ -1,4 +1,4 @@
apiVersion: external-secrets.io/v1beta1
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: restic-credentials
+2
View File
@@ -158,6 +158,8 @@ in
"https://thehellings.com"
else
"https://kuma.shire-zebra.ts.net/";
"devtools.debugger.remote-enabled" = true;
"devtools.debugger.remote-port" = 9222;
"doh-rollout.doorhanger-decision" = "UIDisabled";
"doh-rollout.doneFirstRun" = true;
"signon.rememberSignons" = false;
+56 -5
View File
@@ -35,6 +35,23 @@
}
];
}
{
name = "Lithic";
bookmarks = [
{
name = "Okta";
url = "https://privacy.okta.com";
}
{
name = "Jira";
url = "https://lithichq.atlassian.net";
}
{
name = "Notion";
url = "https://www.notion.so/lithichq/";
}
];
}
{
name = "IVR";
bookmarks = [
@@ -351,6 +368,15 @@
}
];
}
{
name = "Jurisdictions";
bookmarks = [
{
name = "Weatherford";
url = "https://weatherfordtx.gov/3062/Development-Services";
}
];
}
{
name = "Door Loop";
url = "https://btrgpm.app.doorloop.com/home";
@@ -359,22 +385,47 @@
name = "HELOC payoff calculator";
url = "https://acceleratedstrategies.com/free-calculator/";
}
{
name = "Odoo";
url = "http://10.42.2.57:8069/odoo/crm";
}
{
name = "Mattermost";
url = "http://10.42.2.89:8065/login";
}
];
}
{
name = "Media";
bookmarks = [
{
name = "Prowlarr";
url = "https://hosea.shire-zebra.ts.net:9696/";
name = "Flaresolverr";
url = "http://nas1.shire-zebra.ts.net:30098";
}
{
name = "Transmission";
url = "https://hosea.shire-zebra.ts.net:9091/";
name = "Prowlarr";
url = "http://nas1.shire-zebra.ts.net:30050/";
}
{
name = "Sonarr (TV)";
url = "http://nas1.shire-zebra.ts.net:30113/";
}
{
name = "Radarr (Movies)";
url = "https://hosea.shire-zebra.ts.net:7878/";
url = "http://nas1.shire-zebra.ts.net:30025/";
}
{
name = "Transmission";
url = "http://nas1.shire-zebra.ts.net:30096/";
}
];
}
{
name = "Home";
bookmarks = [
{
name = "Home Assistant";
url = "http://10.42.2.155:8123/config/dashboard";
}
];
}
+15 -7
View File
@@ -9,6 +9,7 @@
let
builderHosts = lib.filterAttrs (_n: v: (builtins.hasAttr "builder" v) && v.builder) metadata.hosts;
cfg = config.greg.nix;
hostname = x: if cfg.cache then "${x}.shire-zebra.ts.net" else "${x}.thehellings.lan";
in
{
options.greg.nix = {
@@ -22,7 +23,7 @@ in
programs.ssh.extraConfig = builtins.concatStringsSep "\n" (
lib.map (x: ''
Host ${x}-builder
Hostname ${x}.shire-zebra.ts.net
Hostname ${hostname x}
User remote-builder-user
'') (lib.attrNames builderHosts)
);
@@ -57,12 +58,18 @@ in
"gregory.hellings"
]; # For home and for work machines
substituters =
(if cfg.cache then [
#"http://chronicles.shire-zebra.ts.net:9000/binary-cache/"
"http://nas1.shire-zebra.ts.net:8080/default"
] else [
"http://nas1.thehellings.lan:8080/default"
])
(
if cfg.cache then
[
#"http://chronicles.shire-zebra.ts.net:9000/binary-cache/"
"http://nas1.shire-zebra.ts.net:9000/niks3"
#"http://nas1.shire-zebra.ts.net:8080/default"
]
else
[
"http://nas1.thehellings.lan:8080/default"
]
)
++ [
"https://ai.cachix.org"
"https://nixpkgs-python.cachix.org"
@@ -72,6 +79,7 @@ in
"https://nixhelm.cachix.org"
];
trusted-public-keys = [
"niks3:8iztr/NACwYEK5O7JJtGFGuv+ho/cmwql8NeoCiXNto="
#"chronicles.shire-zebra.ts.net:0qWYHn3gGllXChhAaaxKlNZtRy6yG/XJs1RFSqV3nW8="
"default:DTGxNijw2D8FrZJPT1pFTWcLqbt60tovL+9Z+VW0HRY="
"ai.cachix.org-1:N9dzRK+alWwoKXQlnn0H6aUx0lU/mspIoz8hMvGvbbc="
+35
View File
@@ -0,0 +1,35 @@
{
config,
lib,
pkgs,
...
}:
let
cfg = config.greg.adblockUpdate;
in
{
options.greg.adblockUpdate = {
enable = lib.mkEnableOption "Enable auto-update of block list";
};
config = lib.mkIf cfg.enable {
systemd = {
services.adblock-update = {
after = [ "network-online.target" ];
requires = [ "network-online.target" ];
script = lib.getExe pkgs.adblockUpdate;
serviceConfig.Type = "oneshot";
};
timers.adblock-update = {
wantedBy = [ "multi-user.target" ];
after = [ "network-online.target" ];
requires = [ "network-online.target" ];
timerConfig = {
OnCalendar = "daily";
Unit = "adblock-update.service";
};
};
};
};
}
+3 -1
View File
@@ -4,11 +4,12 @@
{
imports = [
./adblock-update.nix
./albyhub.nix
./backup.nix
./ceph.nix
./db.nix
./gitlab-runner.nix
./gitea-runner.nix
./gnome.nix
./home.nix
./kde.nix
@@ -22,6 +23,7 @@
./router.nix
./rpi4.nix
./syncthing.nix
./nebula.nix
./tailscale.nix
./vmdev.nix
];
+110
View File
@@ -0,0 +1,110 @@
{
config,
lib,
pkgs,
...
}:
let
cfg = config.greg.gitea-runner;
host = config.networking.hostName;
labels = cfg.labels ++ cfg.extraLabels;
in
{
options.greg.gitea-runner = {
enable = lib.mkEnableOption "Enable Gitea act_runner (shell mode)";
instanceURL = lib.mkOption {
type = lib.types.str;
default = "https://src.thehellings.com";
description = "URL of the Gitea instance to connect to";
};
name = lib.mkOption {
type = lib.types.str;
default = config.networking.hostName;
description = "Name of the runner (defaults to hostname)";
};
capacity = lib.mkOption {
type = lib.types.int;
default = 5;
description = "Number of concurrent jobs the runner can handle";
};
extraLabels = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [ ];
};
labels = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [
"self-hosted:host"
"nixos-${host}:host"
"debian-latest:docker://node:25-trixie"
"ubuntu-latest:docker://docker.gitea.com/runner-images:ubuntu-latest"
"ubuntu-26.04:docker://docker.gitea.com/runner-images:ubuntu-26.04"
"ubuntu-24.04:docker://docker.gitea.com/runner-images:ubuntu-24.04"
"ubuntu-22.04:docker://docker.gitea.com/runner-images:ubuntu-22.04"
"ubuntu-full-latest:docker://ghcr.io/catthehacker/ubuntu:full-latest"
"ubuntu-full-26.04:docker://ghcr.io/catthehacker/ubuntu:full-26.04"
"ubuntu-full-24.04:docker://ghcr.io/catthehacker/ubuntu:full-24.04"
"ubuntu-full-22.04:docker://ghcr.io/catthehacker/ubuntu:full-22.04"
"ubuntu-act-latest:docker://ghcr.io/catthehacker/ubuntu:act-latest"
"ubuntu-act-26.04:docker://ghcr.io/catthehacker/ubuntu:act-26.04"
"ubuntu-act-24.04:docker://ghcr.io/catthehacker/ubuntu:act-24.04"
"ubuntu-act-22.04:docker://ghcr.io/catthehacker/ubuntu:act-22.04"
"ubuntu-runner-latest:docker://ghcr.io/catthehacker/ubuntu:runner-latest"
"ubuntu-runner-26.04:docker://ghcr.io/catthehacker/ubuntu:runner-26.04"
"ubuntu-runner-24.04:docker://ghcr.io/catthehacker/ubuntu:runner-24.04"
"ubuntu-runner-22.04:docker://ghcr.io/catthehacker/ubuntu:runner-22.04"
"ubuntu-rust-latest:docker://ghcr.io/catthehacker/ubuntu:rust-latest"
"ubuntu-rust-26.04:docker://ghcr.io/catthehacker/ubuntu:rust-26.04"
"ubuntu-rust-24.04:docker://ghcr.io/catthehacker/ubuntu:rust-24.04"
"ubuntu-rust-22.04:docker://ghcr.io/catthehacker/ubuntu:rust-22.04"
"nix-latest:docker://src.thehellings.com/greg/builder:latest"
];
description = "Labels to assign to this runner";
};
tokenFile = lib.mkOption {
type = lib.types.path;
description = "Path to a file containing the runner registration token (from agenix)";
default = ../../secrets/gitea/runner-isaiah-podman.age;
};
};
config = lib.mkIf cfg.enable {
age.secrets."gitea-runner-${host}-podman".file = cfg.tokenFile;
environment.systemPackages = with pkgs; [
bash
git
nodejs
];
greg.podman.enable = true;
services.gitea-actions-runner = {
package = pkgs.gitea-actions-runner;
instances.${cfg.name} = {
inherit labels;
inherit (cfg) name;
enable = true;
url = cfg.instanceURL;
tokenFile = config.age.secrets."gitea-runner-${host}-podman".path;
settings = {
container.force_pull = true;
runner.capacity = cfg.capacity;
};
};
};
};
}
-82
View File
@@ -1,82 +0,0 @@
{
config,
lib,
pkgs,
...
}:
let
cfg = config.greg.runner;
environmentVariables = {
EFI_DIR = "${pkgs.OVMF.fd}/FV/";
STORAGE_URL = "s3.thehellings.lan:9000";
};
runnerCfg = file: {
inherit environmentVariables;
authenticationTokenConfigFile = file;
executor = "shell";
limit = cfg.threads;
};
in
# We want exactly one of these to be true, but not both. Neither can both be false
{
options.greg.runner = {
enable = lib.mkEnableOption "Enable as a gitlab-runner with both libvirt and virtualbox";
threads = lib.mkOption {
default = 5;
type = lib.types.int;
description = "The maximum number of concurrent jobs";
};
qemu = lib.mkEnableOption "Enable the qemu host (mutually exclusive with vbox)";
vbox = lib.mkEnableOption "Enable the vbox host (mutually exclusive with qemu)";
};
config = lib.mkIf cfg.enable ({
# assertions = [
# {
# assertion = cfg.qemu || cfg.vbox && (cfg.qemu != cfg.vbox);
# message = "You must enable exactly one of qemu or vbox";
# }
# ];
# Shared configurations
age.secrets = {
qemu.file = ../../secrets/gitlab/nixos-qemu-shell.age;
vbox.file = ../../secrets/gitlab/nixos-vbox-shell.age;
};
services.gitlab-runner = {
enable = false;
settings.concurrent = cfg.threads;
services = {
qemu = lib.mkIf cfg.qemu (runnerCfg config.age.secrets.qemu.path);
vbox = lib.mkIf cfg.vbox (runnerCfg config.age.secrets.vbox.path);
};
};
systemd.services.gitlab-runner = {
serviceConfig = {
DevicePolicy = lib.mkForce "auto";
User = "root";
DynamicUser = lib.mkForce false;
};
};
users.extraGroups.vboxusers.members = lib.optional cfg.vbox "greg";
virtualisation = {
libvirtd = lib.mkIf cfg.qemu {
enable = true;
allowedBridges = [
"br0"
"virbr0"
];
onBoot = "ignore"; # only restart VMs labeled 'autostart'
};
virtualbox.host = lib.mkIf cfg.vbox {
enable = true;
enableExtensionPack = true;
};
};
});
}
+5 -41
View File
@@ -2,14 +2,13 @@
config,
lib,
pkgs,
top,
...
}:
let
cfg = config.greg.kubernetes;
cert-manager = pkgs.fetchurl {
url = "https://github.com/cert-manager/cert-manager/releases/download/v1.18.2/cert-manager.yaml";
sha256 = "0vx1nfyhl0rzb6psfxplq8pfp18mrrdk83n8rj2ph8q6r15vcih5";
url = "https://github.com/cert-manager/cert-manager/releases/download/v1.20.2/cert-manager.yaml";
sha256 = "sha256-HOEcrpEq3sxp5rtiNDX6/J7SFQX57/+YvXHXuA8B2x8=";
};
flux = pkgs.fetchurl {
url = "https://github.com/fluxcd/flux2/releases/download/v2.7.2/install.yaml";
@@ -67,6 +66,9 @@ in
443
5432
6443
8080
8443
10250
]
++ (
if cfg.agentOnly then
@@ -83,43 +85,6 @@ in
services = {
k3s = {
enable = true;
autoDeployCharts = {
external-secrets = {
inherit (top.charts.chartsMetadata.external-secrets.external-secrets) repo version;
enable = true;
name = top.charts.chartsMetadata.external-secrets.external-secrets.chart;
hash = "sha256-dPuUWthwN6L0jdAKRpkDtDedGyDUxUlJrwkvUNwLsrU=";
createNamespace = true;
targetNamespace = "external-secrets";
values = {
crds.create = true;
includeCRDs = true;
};
};
kyverno = {
inherit (top.charts.chartsMetadata.kyverno.kyverno) repo version;
enable = true;
name = top.charts.chartsMetadata.kyverno.kyverno.chart;
hash = "sha256-sNdFEupwfnYSo2iGqKwTadPtXfcbyM1kuisavpiGUyU=";
createNamespace = true;
targetNamespace = "kyverno-system";
values = {
admissionController.replicas = 3;
backgroundController.replicas = 3;
cleanupController.replicas = 2;
reportsController.replicas = 2;
crds.install = true;
};
};
tailscale = {
inherit (top.charts.chartsMetadata.tailscale.tailscale-operator) repo version;
enable = true;
name = top.charts.chartsMetadata.tailscale.tailscale-operator.chart;
hash = "sha256-BtZ24mCT2GMHE9iR+2xuIkB+4m1r2OC3WLkY3jC3i3I=";
createNamespace = true;
targetNamespace = "tailscale";
};
};
extraFlags = [
"--cluster-cidr=10.211.0.0/16"
"--service-cidr=10.221.0.0/16"
@@ -135,7 +100,6 @@ in
cert-manager.source = cert-manager;
flux.source = flux;
node-annotations.source = ../../manifests/auto/nodes.yaml;
operator-oauth.source = ../../manifests/auto/operator-oauth.yaml;
};
role = if cfg.agentOnly then "agent" else "server";
serverAddr = lib.mkIf (
+229
View File
@@ -0,0 +1,229 @@
{
config,
lib,
metadata,
...
}:
# Nebula overlay mesh network module (greg namespace)
#
# This module configures a Nebula node for the nebula.thehellings.com overlay.
# CIDR: 10.157.0.0/16
# Lighthouse: linode (public internet, acts as relay too)
#
# Each host requires:
# secrets/nebula/<hostname>.key.age - encrypted private key
# secrets/nebula/<hostname>.crt - certificate (public, unencrypted in repo)
# secrets/nebula/ca.crt - CA certificate (public, unencrypted in repo)
#
# The nebula IP for each host must be set in network.json under
# hosts.<name>.nebulaIp (e.g. "10.157.0.1")
#
# Lighthouse address is the public IP/DNS of linode. Update the
# `lighthouseAddrs` option below or override per-host if it changes.
let
cfg = config.greg.nebula;
nebulaDomain = "nebula.thehellings.com";
# Linode's public address — used by all non-lighthouse hosts to reach it.
# Override with greg.nebula.lighthouseAddr if the public IP ever changes.
defaultLighthouseAddr = "thehellings.com";
in
{
options.greg.nebula = {
enable = lib.mkEnableOption "Nebula overlay mesh network";
isLighthouse = lib.mkOption {
type = lib.types.bool;
default = false;
description = "Whether this host is a Nebula lighthouse/relay node";
};
isRelay = lib.mkOption {
type = lib.types.bool;
default = cfg.isLighthouse;
description = "Whether this host acts as a relay (am_relay). Defaults to true when isLighthouse is true.";
};
nebulaIp = lib.mkOption {
type = lib.types.str;
description = "This host's Nebula overlay IP (e.g. 10.157.0.1)";
default =
let
hostData = metadata.hosts.${config.networking.hostName} or { };
in
hostData.nebulaIp
or (throw "greg.nebula.nebulaIp must be set for host ${config.networking.hostName}");
};
lighthouseAddr = lib.mkOption {
type = lib.types.str;
default = defaultLighthouseAddr;
description = "Public address (host:port) used to reach the lighthouse from non-lighthouse hosts";
};
lighthouseNebulaIp = lib.mkOption {
type = lib.types.str;
default =
let
linodeData = metadata.hosts.linode or { };
in
linodeData.nebulaIp or "10.157.0.1";
description = "Nebula overlay IP of the lighthouse host";
};
port = lib.mkOption {
type = lib.types.port;
default = 4242;
description = "UDP port Nebula listens on";
};
# unsafe_routes: allow non-Nebula subnets to be routed through this host.
# Used on genesis to expose 10.42.0.0/16 (the home LAN) to the overlay.
unsafeRoutes = lib.mkOption {
type = lib.types.listOf (
lib.types.submodule {
options = {
route = lib.mkOption {
type = lib.types.str;
description = "CIDR to route through this host (e.g. 10.42.0.0/16)";
};
via = lib.mkOption {
type = lib.types.str;
description = "Nebula overlay IP of the host that provides the route";
};
};
}
);
# Default: route the home LAN through genesis (the home router node).
# Hosts that ARE genesis (or any other routing node) should override this to [].
default = [ ];
description = ''
List of unsafe_routes to configure on this host (for reaching non-Nebula subnets).
Defaults to routing the home LAN (10.42.0.0/16) through genesis (10.157.0.2).
Override to [] on hosts that are themselves a routing node (e.g. genesis).
'';
};
# Whether this host IS the router for an unsafe subnet
# (enables IP forwarding + nftables masquerade for the home LAN)
routesSubnet = lib.mkOption {
type = lib.types.nullOr lib.types.str;
default = null;
description = ''
When set, this host will route traffic from the Nebula overlay
to this subnet. Enables IP forwarding and nftables masquerade.
Example: "10.42.0.0/16"
'';
};
};
config = lib.mkIf cfg.enable {
# agenix: decrypt this host's Nebula private key at boot
age.secrets."nebula-${config.networking.hostName}-key" = {
file = ../../secrets/nebula/${config.networking.hostName}.key.age;
owner = config.systemd.services."nebula@${nebulaDomain}".serviceConfig.User;
mode = "0400";
};
services.nebula.networks.${nebulaDomain} = {
enable = true;
# CA certificate (public — lives unencrypted in the repo)
ca = ../../secrets/nebula/ca.crt;
# Host certificate (public — lives unencrypted in the repo)
cert = ../../secrets/nebula/${config.networking.hostName}.crt;
# Private key (agenix-decrypted at runtime)
key = config.age.secrets."nebula-${config.networking.hostName}-key".path;
# Static host map: tell every node where the lighthouse lives
staticHostMap = {
"${cfg.lighthouseNebulaIp}" = [ "${cfg.lighthouseAddr}:${toString cfg.port}" ];
};
isLighthouse = cfg.isLighthouse;
isRelay = cfg.isRelay;
listen = {
host = "0.0.0.0";
# Lighthouses and relays need a fixed port; regular nodes use 0 (OS-assigned)
port = if (cfg.isLighthouse || cfg.isRelay) then cfg.port else null;
};
lighthouses = lib.optionals (!cfg.isLighthouse) [ cfg.lighthouseNebulaIp ];
relays = lib.optionals (!cfg.isLighthouse && !cfg.isRelay) [ cfg.lighthouseNebulaIp ];
tun = {
# Interface name
device = "nebula0";
};
settings.tun.unsafe_routes = cfg.unsafeRoutes;
# Firewall: permissive defaults — tighten per-host as desired
firewall = {
outbound = [
{
port = "any";
proto = "any";
host = "any";
}
];
inbound = [
# Allow ICMP (ping) from any Nebula peer
{
port = "any";
proto = "icmp";
host = "any";
}
# Allow all traffic from within the Nebula overlay
{
port = "any";
proto = "any";
host = "any";
}
]
# When routing an unsafe subnet, allow inbound traffic destined
# for that subnet from any Nebula peer (local_cidr scopes it)
++ lib.optionals (cfg.routesSubnet != null) [
{
port = "any";
proto = "any";
host = "any";
local_cidr = cfg.routesSubnet;
}
];
};
};
# Open the Nebula UDP port in the firewall
networking.firewall.allowedUDPPorts = [ cfg.port ];
# When this host routes traffic to a non-Nebula subnet, enable IP
# forwarding and add nftables masquerade rules (see unsafe_routes guide).
boot.kernel.sysctl = lib.mkIf (cfg.routesSubnet != null) {
"net.ipv4.ip_forward" = lib.mkDefault "1";
};
networking.nftables.tables = lib.mkIf (cfg.routesSubnet != null) {
nebula_routing = {
family = "ip";
content = ''
chain postrouting {
type nat hook postrouting priority srcnat; policy accept;
ip saddr 10.157.0.0/16 ip daddr ${cfg.routesSubnet} counter masquerade
}
chain forward {
type filter hook forward priority filter; policy accept;
ct state related,established counter accept
iifname "nebula0" ip saddr 10.157.0.0/16 ip daddr ${cfg.routesSubnet} counter accept
}
'';
};
};
};
}
+1 -1
View File
@@ -54,7 +54,7 @@ with lib;
target = mkOption {
type = types.str;
description = ''The destination that is being proxied.'';
description = "The destination that is being proxied.";
example = "http://localhost:8080";
};
+1
View File
@@ -57,6 +57,7 @@ with lib;
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBLOqwbp4hFYkiJpokh9i2RToa/6tQcwthDNQH69tyBF root@vm-matrix.thehellings.lan"
# Mac
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBT5BFHQz1I5k/zkLQNLjL77EaqfdpRiF2Ci4eS9LMDK gregory.hellings@jude.thehellings.lan"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPVlMoN2pkKRRwKNuMbMczki5ybR34wvjdgDNlgR74Wh greg@gregs-MacBook-Pro-16-inch-Nov-2024"
];
homeMode = "500";
isNormalUser = true;
-1
View File
@@ -18,7 +18,6 @@ with lib;
devices = {
chronicles.id = "7FI6Y3M-C7YQEDI-IB345L6-RKLXMB6-AEIV57Y-3J2RCXQ-MK6QRNK-EINPXAE";
genesis.id = "YDTH4SD-GUAC5AA-SSYWYPZ-YMJW5LK-LE7PZKJ-GV2UJFZ-CU7LZAD-GTYWCQK";
gitlab.id = "GKNOZWI-CNC2Q2F-R5GGGDX-RYFGHK4-CCC37LC-GVOEMJI-46QPC6G-AWFEOQE";
linode.id = "IJMMXPR-WNALZBD-FMJH5W5-WV7XGJY-HLJTKGT-5TKHJIH-75LT56D-UUZCYQE";
};
options = {
+42 -17
View File
@@ -2,35 +2,42 @@
"infra": {
"dns": "10.42.1.5",
"gw": "10.42.1.1",
"lan": "10.42.0.0/16",
"netmask": "255.255.0.0",
"prefix": "16"
"nebula": "10.157.0.0/16",
"prefix": "16",
"tailscale": "100.64.0.0/10"
},
"hosts": {
"chronicles": {
"ip": "10.42.1.4",
"pubkey": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEBecZUva9OnZuXLaBun6/1ITo5f9p0YMLPD+q0egLRS",
"external": true,
"ts": "100.119.228.115"
"ts": "100.119.228.115",
"aliases": ["s3"]
},
"exodus": {
"ip": null,
"pubkey": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFxmnCj2E9DxcnefPW+n4yCuLShxqr0p024riogdeXA3",
"ts": "100.80.99.48",
"system": "x86_64-linux"
"ts": "100.70.99.91",
"system": "x86_64-linux",
"nebulaIp": "10.157.0.7"
},
"genesis": {
"ip": "10.42.1.5",
"pubkey": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO/CGE2rqlL2Qr0TJkwQMsHFSDkhGWlrUlvfcvcylO1n",
"ts": "100.96.198.104",
"system": "x86_64-linux",
"tags": ["router", "server"]
"tags": ["router", "server"],
"nebulaIp": "10.157.0.2"
},
"hosea": {
"ip": "10.42.1.7",
"pubkey": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKLIwkTTXA56sUlUjEulXXZRvZy5H4a5ZwgKWLlpkQDz",
"ts": "100.68.203.1",
"system": "x86_64-linux",
"tags": ["server"]
"tags": ["server"],
"nebulaIp": "10.157.0.3"
},
"icdm-root": {
"external": true,
@@ -43,15 +50,17 @@
"ts": "100.84.183.79",
"system": "x86_64-linux",
"systems": ["x86_64-linux", "aarch64-linux"],
"tags": ["builder", "kube", "server"]
"tags": ["builder", "kube", "server"],
"nebulaIp": "10.157.0.4"
},
"iso": {
"external": true,
"system": "x86_64-linux"
},
"ivr": {
"gregory.hellings-mbp": {
"external": true,
"system": "aarch64-darwin"
"system": "aarch64-darwin",
"user": "gregory.hellings"
},
"jeremiah": {
"builder": true,
@@ -60,27 +69,41 @@
"ts": "100.102.186.39",
"system": "x86_64-linux",
"systems": ["x86_64-linux", "aarch64-linux"],
"tags": ["builder", "kube", "server"]
"tags": ["builder", "kube", "server"],
"nebulaIp": "10.157.0.5"
},
"joel": {
"external": true,
"ip": "10.42.0.4",
"ts": null
},
"gregs-MacBook-Pro-16-inch-Nov-2024": {
"external": true,
"system": "aarch64-darwin"
},
"lithic": {
"external": true,
"system": "aarch64-darwin"
},
"linode": {
"ip": null,
"pubkey": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMv9Zud3kZOl86gtmkn+uj3D4kiXWDPtyUL02VVLNR4Q",
"ts": "100.109.86.8",
"system": "x86_64-linux",
"tags": ["public", "server"]
"tags": ["public", "server"],
"nebulaIp": "10.157.0.1"
},
"ivr": {
"external": true,
"system": "aarch64-darwin"
},
"MacBook-Pro.local": {
"external": true,
"system": "aarc64-darwin"
"system": "aarch64-darwin"
},
"MacBook-Prolocal.local": {
"external": true,
"system": "aarc64-darwin"
"system": "aarch64-darwin"
},
"nas1": {
"external": true,
@@ -91,13 +114,14 @@
"external": true,
"system": "x86_64-linux"
},
"printer": {
"external": true,
"ip": "10.42.1.3"
},
"proxmoxtemplate": {
"external": true,
"system": "x86_64-linux"
},
"gitlab": {
"system": "x86_64-linux"
},
"wsl": {
"external": true,
"system": "aarch64-linux"
@@ -109,7 +133,8 @@
"ts": "100.90.74.19",
"system": "x86_64-linux",
"systems": ["x86_64-linux", "aarch64-linux"],
"tags": ["builder", "kube", "server"]
"tags": ["builder", "kube", "server"],
"nebulaIp": "10.157.0.6"
}
}
}
-3
View File
@@ -10,7 +10,6 @@ final: prev:
in
{
daikinone = cp ./daikinone.nix { };
xonsh-apipenv = cp ./xonsh-apipenv.nix { };
}
)
];
@@ -25,11 +24,9 @@ final: prev:
withBDplus = true;
};
handbrake = prev.handbrake.override { libbluray = final.libbluray-custom; };
pipenv-ivr = prev.callPackage ./pipenv.nix { };
OVMFFull = prev.OVMFFull.override {
secureBoot = true;
msVarsTemplate = true;
tpmSupport = true;
};
}
// (import ../pkgs { pkgs = prev; })
-92
View File
@@ -1,92 +0,0 @@
{
lib,
stdenv,
python3,
fetchFromGitHub,
installShellFiles,
}:
let
runtimeDeps =
ps:
with ps;
[
certifi
pysocks
setuptools
(pip.overridePythonAttrs {
dependencies = [ ps.pysocks ];
})
virtualenv
virtualenv-clone
]
++ lib.optionals stdenv.hostPlatform.isAndroid [ pyjnius ];
pythonEnv = python3.withPackages runtimeDeps;
in
python3.pkgs.buildPythonApplication rec {
pname = "pipenv";
version = "2023.11.15";
format = "pyproject";
src = fetchFromGitHub {
owner = "pypa";
repo = "pipenv";
rev = "refs/tags/v${version}";
hash = "sha256-kxwyws22xJkqBy/hXXcAPHZR2NgZHbmwZr9vYqce434=";
};
env.LC_ALL = "en_US.UTF-8";
nativeBuildInputs = with python3.pkgs; [
installShellFiles
setuptools
wheel
];
postPatch = ''
# pipenv invokes python in a subprocess to create a virtualenv
# and to call setup.py.
# It would use sys.executable, which in our case points to a python that
# does not have the required dependencies.
substituteInPlace pipenv/utils/virtualenv.py \
--replace "sys.executable" "'${pythonEnv.interpreter}'"
'';
propagatedBuildInputs = runtimeDeps python3.pkgs;
preCheck = ''
export HOME="$TMPDIR"
'';
nativeCheckInputs = with python3.pkgs; [
mock
pytestCheckHook
pytest-xdist
pytz
requests
];
disabledTests = [
"test_convert_deps_to_pip"
"test_download_file"
];
disabledTestPaths = [ "tests/integration" ];
postInstall = ''
installShellCompletion --cmd pipenv \
--bash <(_PIPENV_COMPLETE=bash_source $out/bin/pipenv) \
--zsh <(_PIPENV_COMPLETE=zsh_source $out/bin/pipenv) \
--fish <(_PIPENV_COMPLETE=fish_source $out/bin/pipenv)
'';
meta = with lib; {
description = "Python Development Workflow for Humans";
license = licenses.mit;
platforms = platforms.all;
maintainers = with maintainers; [ berdario ];
};
}
-31
View File
@@ -1,31 +0,0 @@
{
lib,
buildPythonPackage,
fetchFromGitHub,
toPythonModule,
pipenv,
setuptools,
}:
buildPythonPackage rec {
pname = "xonsh-apipenv";
version = "0.6.0";
pyproject = true;
src = fetchFromGitHub {
owner = "greg-hellings";
repo = "xontrib-apipenv";
rev = version;
hash = "sha256-Wa8iev0ow1oh95tPCv5tAJUMBYiStWms8I31WbVcOok=";
};
dependencies = [ (toPythonModule pipenv) ];
build-system = [ setuptools ];
meta = with lib; {
description = "Auto pipenv support for Xonsh";
homepage = "https://github.com/greg-hellings/xontrib-apipenv";
license = licenses.mit;
maintainers = [ ];
};
}

Some files were not shown because too many files have changed in this diff Show More