Compare commits

23 Commits
Author SHA1 Message Date
fen 68317127ba goyplex-vm: disable k3s network-policy controller (kube-router fwmark 0x20000 collides with netbird routing-peer mark 0x1bd20; no NetworkPolicies in use) 2026-09-09 20:29:43 -05:00
poslop 53b6e300d2 core: add netbird package 2026-09-05 09:32:39 -05:00
poslop 223b1c52f3 goyplex-vm: add fen user (key + NOPASSWD sudo), fix rebuild.sh host, retire hermes input 2026-09-05 09:16:55 -05:00
poslop 8ac8e29256 hermes: remove module, secrets, flake input, and host entry (VM to be decommissioned) 2026-09-04 15:05:49 -05:00
poslop 804764f874 hermes: retire agent service from hermes-vm (migrated to fen-vm) 2026-09-04 15:05:23 -05:00
poslop 564b974d34 flake: update lock (nixpkgs/aquamarine bumps) 2026-09-04 15:03:26 -05:00
poslop 9b9cdb1795 hosts: static IPs for goyplex-vm (10.0.1.47) and hermes-vm (10.0.1.140) via NM ensureProfiles in per-host custom.nix 2026-08-28 17:05:41 +00:00
poslop 1422f3ce5c Merge remote-tracking branch 'origin/dev' 2026-08-28 14:31:46 +00:00
poslop a6bea2a0e6 Merge branch 'dev' of https://git.archfox.org/poslop/rice-flakes into dev 2026-08-28 14:29:58 +00:00
poslop cce057cb6c agenix: use stdenv.hostPlatform.system, fixes eval warning 2026-08-28 14:29:46 +00:00
poslop 89b08bad3f Merge branch 'dev' of https://git.archfox.org/poslop/rice-flakes into dev 2026-08-28 09:23:09 -05:00
poslop 4f777a9b96 hermes: glm-5.3-flash delegation, drop auxiliary block; flake.lock bump (live system state) 2026-08-28 09:23:08 -05:00
poslop 041a8a36af remove write test file 2026-08-28 14:22:26 +00:00
poslop f885cd0e55 Merge branch 'dev' of https://git.archfox.org/poslop/rice-flakes into dev 2026-08-28 14:22:06 +00:00
poslop 5e0bcc53ff write test 2026-08-28 09:21:45 -05:00
poslop 3d15148c77 roles: add role-based host composition in flake
- mkHost now takes a role list, roles resolve to ./roles/<name>.nix
- roles/core.nix = shared baseline (modules/)
- roles/k3s-server.nix = core + k3s (goyplex-vm)
- roles/hermes.nix = core + hermes (hermes-vm)
- host configuration.nix trimmed to hardware + boot + stateVersion
- optional hosts/<name>/custom.nix loads last for per-host overrides
- new hosts: one flake line + hosts/<name>/ dir
2026-08-28 14:13:43 +00:00
poslop 15b0702eb4 flake update 2026-08-21 09:40:56 -05:00
poslop d54d954dff secrets: re-encrypt hermes-env.age 2026-08-19 16:59:16 -05:00
poslop 7ae32770d5 hermes: add serve and dashboard services, run as hermes user
- Add hermes-serve (port 9120) for desktop JSON-RPC backend
- Add hermes-dashboard (port 9121) for web UI
- Both docker exec with -u hermes to avoid root-owned files
- Add BW_SERVERURL env var
- Expose port 9120 in container extraOptions
2026-08-19 16:59:13 -05:00
poslop d0dc1743e1 core/network: enable netbird 2026-08-19 16:59:08 -05:00
poslop 96865caaeb hermes-vm: narrow module import to modules/core 2026-08-19 16:59:05 -05:00
poslop 590f4a70ac flake.lock: bump inputs (hyprland, flake-parts, hermes-agent) 2026-08-19 16:59:01 -05:00
poslop 35b065ec49 Merge pull request 'Dev' (#2) from dev into master
Reviewed-on: #2
2026-07-23 12:48:53 -05:00
26 changed files with 188 additions and 374 deletions
Generated
+50 -229
View File
@@ -41,11 +41,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1784368054, "lastModified": 1788444081,
"narHash": "sha256-zF1iJkBQSDWmRO4/LEeHR1SpKY0lqZaxkoQJpPS9K9U=", "narHash": "sha256-I8i97p9WBQaZQyyBaHFMt8e01VfgfFZSaO+vAUd0u0A=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "aquamarine", "repo": "aquamarine",
"rev": "9b5f14d9483445e766294eb8fbe0b8f370269ed0", "rev": "36b66db4ddd708ad19f5db850af6a478d8a19b2a",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -92,50 +92,6 @@
"type": "github" "type": "github"
} }
}, },
"flake-parts": {
"inputs": {
"nixpkgs-lib": [
"hermes-agent",
"nixpkgs"
]
},
"locked": {
"lastModified": 1772408722,
"narHash": "sha256-rHuJtdcOjK7rAHpHphUb1iCvgkU3GpfvicLMwwnfMT0=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "f20dc5d9b8027381c474144ecabc9034d6a839a3",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "flake-parts",
"type": "github"
}
},
"hermes-agent": {
"inputs": {
"flake-parts": "flake-parts",
"nixpkgs": "nixpkgs_2",
"npm-lockfile-fix": "npm-lockfile-fix",
"pyproject-build-systems": "pyproject-build-systems",
"pyproject-nix": "pyproject-nix",
"uv2nix": "uv2nix"
},
"locked": {
"lastModified": 1784644108,
"narHash": "sha256-WFwNw701EOVHRwEpgifbYQaT68LOxATKDTXaep82yN4=",
"owner": "NousResearch",
"repo": "hermes-agent",
"rev": "d604141d097eec4a49493ad1eaceb9b2ca1e496d",
"type": "github"
},
"original": {
"owner": "NousResearch",
"repo": "hermes-agent",
"type": "github"
}
},
"hjem": { "hjem": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
@@ -143,11 +99,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1784601896, "lastModified": 1787500880,
"narHash": "sha256-rkpUOBv9pVG+GxhK90ebCrFpvjnfP4u2y/iGrzA42K4=", "narHash": "sha256-UrAlku7KST0DT+j1bdVGYI8tCz23PWL88uGMer3IZ2U=",
"owner": "feel-co", "owner": "feel-co",
"repo": "hjem", "repo": "hjem",
"rev": "35e95ebb9557ac41a72fe00dd55218d1a7f21679", "rev": "d248f0e4f7abd6e1f0eb9ace778dd7928481943e",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -161,17 +117,16 @@
"hjem": [ "hjem": [
"hjem" "hjem"
], ],
"nix-darwin": "nix-darwin",
"nixpkgs": [ "nixpkgs": [
"nixpkgs" "nixpkgs"
] ]
}, },
"locked": { "locked": {
"lastModified": 1784361899, "lastModified": 1787315974,
"narHash": "sha256-QIzbnJIwy5cMYvPmLYPA4ar0lhficYLKZ6ytcHK90Uo=", "narHash": "sha256-LLToYudTlFqNY0NsG//CnE2I/zF0cpktX44ZhFJ2alY=",
"owner": "snugnug", "owner": "snugnug",
"repo": "hjem-rum", "repo": "hjem-rum",
"rev": "73f6d1c01fe94e3de1cb3a84b9346da52f483c60", "rev": "217c6e1f445b3973ca8f988f070c9b84cceaa1ca",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -217,11 +172,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1776511930, "lastModified": 1786464181,
"narHash": "sha256-fCpwFiTW0rT7oKJqr3cqHMnkwypSwQKpbtUEtxdkgrM=", "narHash": "sha256-2alOMkLjXANh7unkZnYnCF2K2rApZaOLMoQ3o+VX2CY=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprcursor", "repo": "hyprcursor",
"rev": "39435900785d0c560c6ae8777d29f28617d031ef", "rev": "e4ed7c08123df5af460a0a70961380cbfb872f76",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -246,11 +201,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1782566056, "lastModified": 1786464367,
"narHash": "sha256-haEZcHzYrePnjFOYSWTbxm/Nrla0aPslJfmvdCvqtVc=", "narHash": "sha256-k58p4wbzIXWyRWrW84pP8tD+iaZSSYiiM+fr0Auk4oU=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprgraphics", "repo": "hyprgraphics",
"rev": "c6e7b9f673f4360bc813d3dc75028f75ee88d3f8", "rev": "7c895c44e3ca6d28ed68ddd80ec02b02b925e7fc",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -270,17 +225,17 @@
"hyprutils": "hyprutils", "hyprutils": "hyprutils",
"hyprwayland-scanner": "hyprwayland-scanner", "hyprwayland-scanner": "hyprwayland-scanner",
"hyprwire": "hyprwire", "hyprwire": "hyprwire",
"nixpkgs": "nixpkgs_3", "nixpkgs": "nixpkgs_2",
"pre-commit-hooks": "pre-commit-hooks", "pre-commit-hooks": "pre-commit-hooks",
"systems": "systems_2", "systems": "systems_2",
"xdph": "xdph" "xdph": "xdph"
}, },
"locked": { "locked": {
"lastModified": 1784641930, "lastModified": 1788607141,
"narHash": "sha256-j1c/65skFvp1WPbHBlAfVWaeCz0Bgwr/WPwIg0H+Ncg=", "narHash": "sha256-yjVNYxNkV7KST+K1kW0i4uts2KvZDuK98oot12xHJQ0=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "Hyprland", "repo": "Hyprland",
"rev": "1a3606234c59842340ad9a42baeeffe44a9d6cda", "rev": "2eb5180c6f258bb73c4b9b71a1361dede0e1453e",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -322,11 +277,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1784196523, "lastModified": 1786464504,
"narHash": "sha256-ahtKMGXFJdlQNhatQm1+BBU/pGfGYnAqQt3vWvq4p8s=", "narHash": "sha256-7sHwM86KILQyHDHDuE2SDBlQ2jvZ0EW3hY7sW009/cg=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprland-guiutils", "repo": "hyprland-guiutils",
"rev": "a6ccb6cb112ed5a244c0191fb972347ecfa893e0", "rev": "4c30cf3097ea963c0e250749ee0c59f8b08816d6",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -376,11 +331,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1777320127, "lastModified": 1786464129,
"narHash": "sha256-Qu+Wf2Bp5qUjyn2YpZNq8a7JyzTGowhT1knrwE38a9U=", "narHash": "sha256-339AkTlpMYSIvFuG0rnR+8Yg4/AZKeJalshJavlnKfg=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprlang", "repo": "hyprlang",
"rev": "090117506ddc3d7f26e650ff344d378c2ec329cc", "rev": "9508458be316a0d70d37ebed1ab725ccd10411ff",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -428,11 +383,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1782554491, "lastModified": 1785930473,
"narHash": "sha256-+p3MlyN/nqRefcf2IckPlGRUn9+hielqpS9XClbLleM=", "narHash": "sha256-DitTu625BhEYpZjtjxtGpjrEJwPwW+X/+jJvhSZNSJM=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprtoolkit", "repo": "hyprtoolkit",
"rev": "bdba25ced39ea39ab004a8f31593ba0b0ff1ca35", "rev": "af515b69dfbe366dc7873aa1475cb2f4db3ebad7",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -453,11 +408,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1784323413, "lastModified": 1786903207,
"narHash": "sha256-XnAVV+H4f8Xdv0yZcSwJ5kCjLyE8fHxPeLX6a3HSrAU=", "narHash": "sha256-QTwMqLLONRhv9iz6CVeuX6BqQNQCIqI8hL/cPYlR/24=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprutils", "repo": "hyprutils",
"rev": "5f03477ab3a005ff27c527486f551883535aea2f", "rev": "6cf50415e06dc6bd9f1252f1b745eac6b4a1cc39",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -478,11 +433,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1777159683, "lastModified": 1786464033,
"narHash": "sha256-Jxixw6wZphUp+nHYxOKUYSckL17QMBx2d5Zp0rJHr1g=", "narHash": "sha256-QM8Qe4/L8lpdVN4bgwahmi+jyyc4fisseDMe4afcDxA=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprwayland-scanner", "repo": "hyprwayland-scanner",
"rev": "b8632713a6beaf28b56f2a7b0ab2fb7088dbb404", "rev": "62e62c1ca23da17612c6890d4ad2064f575643db",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -507,11 +462,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1778410714, "lastModified": 1786464294,
"narHash": "sha256-o6RzFj4nJXaPRY7EM01siuCQeT41RfwwmcmFQqwFJJg=", "narHash": "sha256-ZQsZ2WvBdkboCIyh8LStDPdAIARmxzn0XMNxxoOhjPE=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprwire", "repo": "hyprwire",
"rev": "85148a8e612808cf5ddb25d0b3c5840f3498a7dc", "rev": "4ce7cd6b6128c1ac41caf23c58a30a26b327f9dd",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -520,27 +475,6 @@
"type": "github" "type": "github"
} }
}, },
"nix-darwin": {
"inputs": {
"nixpkgs": [
"hjem-rum",
"nixpkgs"
]
},
"locked": {
"lastModified": 1779036909,
"narHash": "sha256-zXcwYQGCT6pzinK+1dBB2ekTVtfxGZAapb3Evdcu4fY=",
"owner": "nix-darwin",
"repo": "nix-darwin",
"rev": "56c666e108467d87d13508936aade6d567f2a501",
"type": "github"
},
"original": {
"owner": "nix-darwin",
"repo": "nix-darwin",
"type": "github"
}
},
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1754028485, "lastModified": 1754028485,
@@ -559,11 +493,11 @@
}, },
"nixpkgs_2": { "nixpkgs_2": {
"locked": { "locked": {
"lastModified": 1775036866, "lastModified": 1788404924,
"narHash": "sha256-ZojAnPuCdy657PbTq5V0Y+AHKhZAIwSIT2cb8UgAz/U=", "narHash": "sha256-lhEhY8X5EgkQ/eg6IFz4cc8jRuSYSvnxx1al7d1dvZ0=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "6201e203d09599479a3b3450ed24fa81537ebc4e", "rev": "0968519e14f7aa7d3e9b389682bd74d2b51c8ce8",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -575,27 +509,11 @@
}, },
"nixpkgs_3": { "nixpkgs_3": {
"locked": { "locked": {
"lastModified": 1784356753, "lastModified": 1788531059,
"narHash": "sha256-12KrbMiWLcf8m7pCvAtZh1ZrgF85ZXDXvfR/fWTKy84=", "narHash": "sha256-hLD4l3QOGBQhkVp3mQ2lJ/YbEi99qUgKapb40KovZ88=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "61b7c44c4073f0b827768aff0049561b5110ea5a",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_4": {
"locked": {
"lastModified": 1784497964,
"narHash": "sha256-vlHUuqAcbcH2RKmHbPiuQzbv1pnzzavXnI62RD0bqCU=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "241313f4e8e508cb9b13278c2b0fa25b9ca27163", "rev": "801bef6abd86b91e51083066b83fb354a11fc640",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -605,27 +523,6 @@
"type": "github" "type": "github"
} }
}, },
"npm-lockfile-fix": {
"inputs": {
"nixpkgs": [
"hermes-agent",
"nixpkgs"
]
},
"locked": {
"lastModified": 1775903712,
"narHash": "sha256-2GV79U6iVH4gKAPWYrxUReB0S41ty/Y3dBLquU8AlaA=",
"owner": "jeslie0",
"repo": "npm-lockfile-fix",
"rev": "c6093acb0c0548e0f9b8b3d82918823721930fe8",
"type": "github"
},
"original": {
"owner": "jeslie0",
"repo": "npm-lockfile-fix",
"type": "github"
}
},
"pre-commit-hooks": { "pre-commit-hooks": {
"inputs": { "inputs": {
"flake-compat": "flake-compat", "flake-compat": "flake-compat",
@@ -635,11 +532,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1784288435, "lastModified": 1788267358,
"narHash": "sha256-ReRHaLgr/uVqdD8afFSn+myXIfpHeOhP0yYe0TJqAA8=", "narHash": "sha256-nt+lUqYVpc9Y6JeMd2WmXzCDojasdadKo0mWcluvY2Y=",
"owner": "cachix", "owner": "cachix",
"repo": "git-hooks.nix", "repo": "git-hooks.nix",
"rev": "43b3c1ab9d40fb1dbb008f451988a91e375825e9", "rev": "27555e2624241fb116b49095df4caaee85a25691",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -648,64 +545,13 @@
"type": "github" "type": "github"
} }
}, },
"pyproject-build-systems": {
"inputs": {
"nixpkgs": [
"hermes-agent",
"nixpkgs"
],
"pyproject-nix": [
"hermes-agent",
"pyproject-nix"
],
"uv2nix": [
"hermes-agent",
"uv2nix"
]
},
"locked": {
"lastModified": 1772555609,
"narHash": "sha256-3BA3HnUvJSbHJAlJj6XSy0Jmu7RyP2gyB/0fL7XuEDo=",
"owner": "pyproject-nix",
"repo": "build-system-pkgs",
"rev": "c37f66a953535c394244888598947679af231863",
"type": "github"
},
"original": {
"owner": "pyproject-nix",
"repo": "build-system-pkgs",
"type": "github"
}
},
"pyproject-nix": {
"inputs": {
"nixpkgs": [
"hermes-agent",
"nixpkgs"
]
},
"locked": {
"lastModified": 1772865871,
"narHash": "sha256-/ZTSg97aouL0SlPHaokA4r3iuH9QzHVuWPACD2CUCFY=",
"owner": "pyproject-nix",
"repo": "pyproject.nix",
"rev": "e537db02e72d553cea470976b9733581bcf5b3ed",
"type": "github"
},
"original": {
"owner": "pyproject-nix",
"repo": "pyproject.nix",
"type": "github"
}
},
"root": { "root": {
"inputs": { "inputs": {
"agenix": "agenix", "agenix": "agenix",
"hermes-agent": "hermes-agent",
"hjem": "hjem", "hjem": "hjem",
"hjem-rum": "hjem-rum", "hjem-rum": "hjem-rum",
"hyprland": "hyprland", "hyprland": "hyprland",
"nixpkgs": "nixpkgs_4" "nixpkgs": "nixpkgs_3"
} }
}, },
"systems": { "systems": {
@@ -738,31 +584,6 @@
"type": "github" "type": "github"
} }
}, },
"uv2nix": {
"inputs": {
"nixpkgs": [
"hermes-agent",
"nixpkgs"
],
"pyproject-nix": [
"hermes-agent",
"pyproject-nix"
]
},
"locked": {
"lastModified": 1773039484,
"narHash": "sha256-+boo33KYkJDw9KItpeEXXv8+65f7hHv/earxpcyzQ0I=",
"owner": "pyproject-nix",
"repo": "uv2nix",
"rev": "b68be7cfeacbed9a3fa38a2b5adc0cfb81d9bb1f",
"type": "github"
},
"original": {
"owner": "pyproject-nix",
"repo": "uv2nix",
"type": "github"
}
},
"xdph": { "xdph": {
"inputs": { "inputs": {
"hyprland-protocols": [ "hyprland-protocols": [
@@ -791,11 +612,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1784371182, "lastModified": 1788025068,
"narHash": "sha256-S8A1lezEalltWcCp3gAic5lssS0xTSISK6fKODefhOk=", "narHash": "sha256-TBqronrrc/F2Ry/E37d/1TLldDLJDFNSwvJjgk+cXzU=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "xdg-desktop-portal-hyprland", "repo": "xdg-desktop-portal-hyprland",
"rev": "08d99f727944dd15e4740090305e31c5fb92a50a", "rev": "ba31964ee42b56bcb0d3b78a64ead5d8a1c3c6f6",
"type": "github" "type": "github"
}, },
"original": { "original": {
+20 -8
View File
@@ -3,7 +3,6 @@
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
hyprland.url = "github:hyprwm/Hyprland"; hyprland.url = "github:hyprwm/Hyprland";
hermes-agent.url = "github:NousResearch/hermes-agent";
agenix.url = "github:ryantm/agenix"; agenix.url = "github:ryantm/agenix";
hjem = { hjem = {
@@ -27,26 +26,39 @@
let let
system = "x86_64-linux"; system = "x86_64-linux";
username = "poslop"; username = "poslop";
lib = nixpkgs.lib;
# mkHost <hostname> <role list>
# roles resolve to ./roles/<name>.nix; list entries may also be
# inline attrsets or paths, which load after (and override) roles.
# hosts/<host>/custom.nix, if present, always loads last.
mkHost = mkHost =
host: modules: name: roles:
nixpkgs.lib.nixosSystem { nixpkgs.lib.nixosSystem {
modules = [ { nixpkgs.hostPlatform = system; } ] ++ modules; modules =
[ { nixpkgs.hostPlatform = system; } ]
++ [ ./hosts/${name}/configuration.nix ]
++ map (
role:
if builtins.isString role then ./roles/${role}.nix else role
) roles
++ lib.optional (builtins.pathExists ./hosts/${name}/custom.nix)
./hosts/${name}/custom.nix;
specialArgs = { specialArgs = {
inherit inherit
self self
inputs inputs
username username
host
; ;
host = name;
}; };
}; };
in in
{ {
nixosConfigurations = { nixosConfigurations = {
nixos-vm2 = mkHost "nixos-vm2" [ ./hosts/nixos-vm2/configuration.nix ]; nixos-vm2 = mkHost "nixos-vm2" [ "core" ];
qemu-vm = mkHost "qemu-vm" [ ./hosts/qemu-vm/configuration.nix ]; qemu-vm = mkHost "qemu-vm" [ "core" ];
goyplex-vm = mkHost "goyplex-vm" [ ./hosts/goyplex-vm/configuration.nix ]; goyplex-vm = mkHost "goyplex-vm" [ "k3s-server" ];
hermes-vm = mkHost "hermes-vm" [ ./hosts/hermes-vm/configuration.nix ];
}; };
}; };
} }
+4 -3
View File
@@ -1,10 +1,11 @@
{ pkgs, ... }: {
pkgs,
...
}:
{ {
imports = [ imports = [
./hardware-configuration.nix ./hardware-configuration.nix
../../modules
../../modules/k3s/k3s.nix
]; ];
boot.loader.systemd-boot.enable = true; boot.loader.systemd-boot.enable = true;
+23
View File
@@ -0,0 +1,23 @@
# per-host overrides: static IP for the k3s edge node
# LAN: 10.0.1.0/24, gw 10.0.1.1, DNS pas 10.0.1.45 + 1.1.1.1
{ ... }:
{
networking.networkmanager.ensureProfiles.environmentFiles = [ ];
networking.networkmanager.ensureProfiles.profiles = {
"ens18-static" = {
connection = {
id = "ens18-static";
type = "ethernet";
interface-name = "ens18";
};
ipv4 = {
method = "manual";
addresses = "10.0.1.47/24";
gateway = "10.0.1.1";
dns = "10.0.1.45;1.1.1.1;";
};
ipv6.method = "disabled";
};
};
}
+4 -3
View File
@@ -1,10 +1,11 @@
{ pkgs, ... }: {
pkgs,
...
}:
{ {
imports = [ imports = [
./hardware-configuration.nix ./hardware-configuration.nix
../../modules
../../modules/hermes
]; ];
boot.loader.systemd-boot.enable = true; boot.loader.systemd-boot.enable = true;
+23
View File
@@ -0,0 +1,23 @@
# per-host overrides: static IP for the hermes agent host
# LAN: 10.0.1.0/24, gw 10.0.1.1, DNS pas 10.0.1.45 + 1.1.1.1
{ ... }:
{
networking.networkmanager.ensureProfiles.environmentFiles = [ ];
networking.networkmanager.ensureProfiles.profiles = {
"ens18-static" = {
connection = {
id = "ens18-static";
type = "ethernet";
interface-name = "ens18";
};
ipv4 = {
method = "manual";
addresses = "10.0.1.140/24";
gateway = "10.0.1.1";
dns = "10.0.1.45;1.1.1.1;";
};
ipv6.method = "disabled";
};
};
}
-1
View File
@@ -5,7 +5,6 @@
{ {
imports = [ imports = [
./hardware-configuration.nix ./hardware-configuration.nix
../../modules
]; ];
boot.loader.grub.enable = true; boot.loader.grub.enable = true;
-1
View File
@@ -5,7 +5,6 @@
{ {
imports = [ imports = [
./hardware-configuration.nix ./hardware-configuration.nix
../../modules
]; ];
boot.loader.grub.enable = true; boot.loader.grub.enable = true;
+1 -1
View File
@@ -9,7 +9,7 @@
./timezone.nix ./timezone.nix
./nix.nix ./nix.nix
./program.nix ./program.nix
./user.nix ./users.nix
./ssh.nix ./ssh.nix
]; ];
} }
+2
View File
@@ -3,4 +3,6 @@
{ {
networking.hostName = host; networking.hostName = host;
networking.networkmanager.enable = true; networking.networkmanager.enable = true;
services.netbird.enable = true;
} }
+3 -3
View File
@@ -1,5 +1,5 @@
{ {
nix.settings = { # nix.settings = {
experimental-features = "nix-command flakes"; # experimental-features = "nix-command flakes";
}; # };
} }
+1
View File
@@ -2,6 +2,7 @@
{ {
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
zsh zsh
netbird
]; ];
} }
-14
View File
@@ -1,14 +0,0 @@
{ username, pkgs, ... }:
{
users.users.${username} = {
isNormalUser = true;
description = "${username}";
extraGroups = [
"wheel"
"docker"
];
shell = pkgs.zsh;
};
nix.settings.allowed-users = [ "@wheel" ];
}
+35
View File
@@ -0,0 +1,35 @@
{ username, pkgs, ... }:
{
users.users.${username} = {
isNormalUser = true;
description = "${username}";
extraGroups = [
"wheel"
"docker"
];
shell = pkgs.zsh;
};
users.users.fen = {
isNormalUser = true;
extraGroups = [ "wheel" ];
openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJ8nZT7pA+Wp7mnjKSJPpmYs+tFx5q+gtvOcSSMJt93D fen"
];
};
nix.settings.allowed-users = [ "@wheel" ];
security.sudo.extraRules = [
{
users = [ "fen" ];
commands = [
{
command = "ALL";
options = [ "NOPASSWD" ];
}
];
}
];
}
-7
View File
@@ -1,7 +0,0 @@
{
imports = [
./sudo.nix
./hermes.nix
./secrets
];
}
-63
View File
@@ -1,63 +0,0 @@
{
inputs,
config,
...
}:
{
imports = [ inputs.hermes-agent.nixosModules.default ];
services.hermes-agent = {
enable = true;
addToSystemPackages = true;
environmentFiles = [
config.age.secrets.hermes-env.path
];
container = {
image = "debian:bookworm";
backend = "docker";
enable = true;
hostUsers = [ "poslop" ];
extraOptions = [
"-p"
"9119:9119"
"-p"
"8642:8642"
];
};
settings = {
approvals = {
mode = "off";
cron_mode = "deny";
mcp_reload_confirm = "false";
};
memory = {
memory_enabled = true;
user_profile_enabled = true;
};
display = {
credits_notices = true;
};
delegation = {
model = "us.anthropic.claude-sonnet-5";
provider = "bedrock";
};
discord = {
group_sessions_per_user = false;
reactions = false;
};
};
};
networking.firewall.allowedTCPPorts = [
8080
9119
8642
];
}
-15
View File
@@ -1,15 +0,0 @@
{
inputs,
pkgs,
username,
...
}:
{
imports = [ inputs.agenix.nixosModules.default ];
age.secrets."hermes-env".file = ./hermes-env.age;
hjem.users.${username}.packages = with pkgs; [
inputs.agenix.packages."${system}".default
];
}
-5
View File
@@ -1,5 +0,0 @@
{
imports = [
./agenix.nix
];
}
Binary file not shown.
-6
View File
@@ -1,6 +0,0 @@
let
hermes-vm = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIFqtbtEYL4pPNvJV64FjDXT6zT2ew0IFK8XHJ9LP7ae";
in
{
"hermes-env.age".publicKeys = [ hermes-vm ];
}
-13
View File
@@ -1,13 +0,0 @@
{
security.sudo.extraRules = [
{
users = [ "poslop" ];
commands = [
{
command = "/run/current-system/sw/bin/docker";
options = [ "NOPASSWD" ];
}
];
}
];
}
+1 -1
View File
@@ -11,7 +11,7 @@
services.k3s = { services.k3s = {
enable = true; enable = true;
role = "server"; role = "server";
extraFlags = "--write-kubeconfig-mode 644"; extraFlags = "--write-kubeconfig-mode 644 --disable-network-policy";
}; };
fileSystems."/var/lib/rancher/k3s/server/manifests/apps" = { fileSystems."/var/lib/rancher/k3s/server/manifests/apps" = {
+1 -1
View File
@@ -1 +1 @@
sudo nixos-rebuild switch --flake ./#qemu-vm sudo nixos-rebuild switch --flake ./#goyplex-vm
+6
View File
@@ -0,0 +1,6 @@
{
# shared baseline: core system + home manager config
imports = [
../modules
];
}
+7
View File
@@ -0,0 +1,7 @@
{
# hermes agent retired (migrated to standalone debian VM fen-vm).
# Kept as core-only so the host still builds until it is decommissioned.
imports = [
./core.nix
];
}
+7
View File
@@ -0,0 +1,7 @@
{
# k3s server node (goyplex-vm): k3s + manifests + firewall
imports = [
./core.nix
../modules/k3s/k3s.nix
];
}