fix(colmena): expose colmenaHive for the nix-community evaluator (#361)

* fix(colmena): expose colmenaHive for the new evaluator

nixpkgs now ships the nix-community Colmena rewrite, whose default
evaluator reads an evaluated colmenaHive flake output instead of the raw
colmena hive. Without it every colmena apply recipe failed with
"does not provide attribute colmenaHive".

Add a colmena input pinned to the same v0.5.0 as nixpkgs and expose
colmenaHive = colmena.lib.makeHive <raw hive>, with the raw hive kept as
an internal binding rather than a flake output of its own.

* chore: clean up stale colmena and aquamarine references

- point the Colmena links at nix-community/colmena after the move
- rename the security-aquamarine-metrics test to youko-metrics (it
  already tested youko) and update the outputs README
- drop the commented aquamarine remote-builder example
This commit is contained in:
ryan4yin | 二花 authored and GitHub committed 2026-10-03 12:14:13 +08:00
1 parent d056aece28
commit 18925eac8b
9 files changed
+164 -60

No files matched your search

+2 -2
View File
@@ -146,8 +146,8 @@ just local
just local debug # detailed output (macOS has no switch/boot mode)
```
Remote / cluster hosts are deployed with [Colmena](https://github.com/zhaofengli/colmena) on top of
the same flake, e.g. `just col <tag>`, `just k3s-test`, `just lab`.
Remote / cluster hosts are deployed with [Colmena](https://github.com/nix-community/colmena) on top
of the same flake, e.g. `just col <tag>`, `just k3s-test`, `just lab`.
> [What y'all will need when Nix drives you to drink.](https://www.youtube.com/watch?v=Eni9PPPPBpg)
> (copy from hlissner's dotfiles, it really matches my feelings when I first started using NixOS...)
Generated
+121 -23
View File
@@ -82,6 +82,33 @@
"type": "github"
}
},
"colmena": {
"inputs": {
"flake-compat": "flake-compat",
"flake-utils": "flake-utils",
"nix-github-actions": "nix-github-actions",
"nixpkgs": [
"nixpkgs"
],
"stable": [
"nixpkgs-stable"
]
},
"locked": {
"lastModified": 1790091756,
"narHash": "sha256-YkaWZQV/OO4ZEmin+RHZ/6qFfBah/qSSXduTQMZTNR0=",
"owner": "nix-community",
"repo": "colmena",
"rev": "948491ae031dc0e2e61f0982943dd9964a724bdb",
"type": "github"
},
"original": {
"owner": "nix-community",
"ref": "v0.5.0",
"repo": "colmena",
"type": "github"
}
},
"crane": {
"locked": {
"lastModified": 1781825982,
@@ -144,13 +171,13 @@
"locked": {
"lastModified": 1767039857,
"narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=",
"owner": "NixOS",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab",
"type": "github"
},
"original": {
"owner": "NixOS",
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
@@ -172,21 +199,6 @@
}
},
"flake-compat_3": {
"locked": {
"lastModified": 1761640442,
"narHash": "sha256-AtrEP6Jmdvrqiv4x2xa5mrtaIp3OEe8uBYCDZDS+hu8=",
"owner": "nix-community",
"repo": "flake-compat",
"rev": "4a56054d8ffc173222d09dad23adf4ba946c8884",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "flake-compat",
"type": "github"
}
},
"flake-compat_4": {
"flake": false,
"locked": {
"lastModified": 1767039857,
@@ -202,7 +214,38 @@
"type": "github"
}
},
"flake-compat_4": {
"locked": {
"lastModified": 1761640442,
"narHash": "sha256-AtrEP6Jmdvrqiv4x2xa5mrtaIp3OEe8uBYCDZDS+hu8=",
"owner": "nix-community",
"repo": "flake-compat",
"rev": "4a56054d8ffc173222d09dad23adf4ba946c8884",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "flake-compat",
"type": "github"
}
},
"flake-compat_5": {
"flake": false,
"locked": {
"lastModified": 1767039857,
"narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=",
"owner": "NixOS",
"repo": "flake-compat",
"rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab",
"type": "github"
},
"original": {
"owner": "NixOS",
"repo": "flake-compat",
"type": "github"
}
},
"flake-compat_6": {
"flake": false,
"locked": {
"lastModified": 1761640442,
@@ -314,6 +357,24 @@
"type": "github"
}
},
"flake-utils": {
"inputs": {
"systems": "systems"
},
"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"
}
},
"git-hooks": {
"inputs": {
"flake-compat": [
@@ -484,7 +545,7 @@
"bun2nix": "bun2nix",
"flake-parts": "flake-parts",
"nixpkgs": "nixpkgs",
"systems": "systems",
"systems": "systems_2",
"treefmt-nix": "treefmt-nix"
},
"locked": {
@@ -607,7 +668,7 @@
},
"nix-gaming": {
"inputs": {
"flake-compat": "flake-compat_2",
"flake-compat": "flake-compat_3",
"flake-parts": "flake-parts_2",
"git-hooks": "git-hooks",
"nixpkgs": [
@@ -628,9 +689,30 @@
"type": "github"
}
},
"nix-github-actions": {
"inputs": {
"nixpkgs": [
"colmena",
"nixpkgs"
]
},
"locked": {
"lastModified": 1737420293,
"narHash": "sha256-F1G5ifvqTpJq7fdkT34e/Jy9VCyzd5XfJ9TO8fHhJWE=",
"owner": "nix-community",
"repo": "nix-github-actions",
"rev": "f4158fa080ef4503c8f4c820967d946c2af31ec9",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "nix-github-actions",
"type": "github"
}
},
"nixos-apple-silicon": {
"inputs": {
"flake-compat": "flake-compat_3",
"flake-compat": "flake-compat_4",
"nixpkgs": [
"nixpkgs"
]
@@ -852,7 +934,7 @@
},
"pre-commit": {
"inputs": {
"flake-compat": "flake-compat",
"flake-compat": "flake-compat_2",
"gitignore": "gitignore",
"nixpkgs": [
"lanzaboote",
@@ -875,7 +957,7 @@
},
"pre-commit-hooks": {
"inputs": {
"flake-compat": "flake-compat_4",
"flake-compat": "flake-compat_5",
"nixpkgs": [
"nixpkgs"
]
@@ -934,6 +1016,7 @@
"inputs": {
"agenix": "agenix",
"catppuccin": "catppuccin",
"colmena": "colmena",
"disko": "disko",
"haumea": "haumea",
"home-manager": "home-manager",
@@ -1014,6 +1097,21 @@
"type": "github"
}
},
"systems_2": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"treefmt-nix": {
"inputs": {
"nixpkgs": [
@@ -1059,7 +1157,7 @@
"tuios": {
"inputs": {
"devshell": "devshell",
"flake-compat": "flake-compat_5",
"flake-compat": "flake-compat_6",
"flake-parts": "flake-parts_4",
"flake-root": "flake-root",
"git-hooks-nix": "git-hooks-nix",
+9
View File
@@ -85,6 +85,15 @@
url = "github:nix-community/preservation";
};
# Remote deployment via SSH. Pinned to the same v0.5.0 that nixpkgs ships
# so the `colmenaHive` output we expose matches the CLI's schema.
colmena = {
url = "github:nix-community/colmena/v0.5.0";
inputs.nixpkgs.follows = "nixpkgs";
# Reuse the flake's own stable nixpkgs instead of colmena's pinned copy.
inputs.stable.follows = "nixpkgs-stable";
};
# secrets management
# Pinned to a release tag (not a branch) so `just up` cannot move it
# silently; bump deliberately when a new release is needed.
+1 -1
View File
@@ -12,7 +12,7 @@ reduce code duplication and make it easier to add new machines.
[nix-darwin](https://github.com/LnL7/nix-darwin)
3. **`nixosSystem.nix`** - NixOS configuration generator
4. **`colmenaSystem.nix`** - Remote deployment configuration for
[colmena](https://github.com/zhaofengli/colmena)
[colmena](https://github.com/nix-community/colmena)
### Specialized Module Generators
-9
View File
@@ -47,15 +47,6 @@
# # 1. a hostname that can be resolved by DNS
# # 2. the ip address of the remote builder
# # 3. a host alias defined globally in /etc/ssh/ssh_config
# hostName = "aquamarine";
# # remote builder's max-job
# maxJobs = 3;
# # speedFactor's a signed integer
# # https://github.com/ryan4yin/nix-config/issues/70
# speedFactor = 1;
# }
# {
# inherit sshUser sshKey systems supportedFeatures;
# hostName = "ruby";
# maxJobs = 2;
# speedFactor = 1;
+4 -4
View File
@@ -48,10 +48,10 @@ suite passes when every `expr` equals its `expected`.
Some tests iterate over every configuration, so a new host is covered automatically and must satisfy
them. Others name specific hosts and only cover a new host if you add it.
| Kind | Tests |
| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Every configuration | `hostname`, `kernel`, `nix-system-features`, `security-apparmor`, `security-container-groups`, `security-firewall`, `security-k3s-kubeconfig`, `security-ssh-x11` |
| Named hosts only | `btrbk`, `home-manager`, `home-manager-xdg`, `computer-use-headless`, `k3s-master-home-manager`, `idols-ai-gpu`, `security-aquamarine-metrics`, `ups-metrics`, `shoukei-logind` |
| Kind | Tests |
| ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Every configuration | `hostname`, `kernel`, `nix-system-features`, `security-apparmor`, `security-container-groups`, `security-firewall`, `security-k3s-kubeconfig`, `security-ssh-x11` |
| Named hosts only | `btrbk`, `home-manager`, `home-manager-xdg`, `computer-use-headless`, `k3s-master-home-manager`, `idols-ai-gpu`, `youko-metrics`, `ups-metrics`, `shoukei-logind` |
`hostname` expects each configuration's `networking.hostName` to equal its name. Niri desktop
configurations are the exception (`ai-niri` → `ai`, `shoukei-niri` → `shoukei`) and are listed in
+27 -21
View File
@@ -91,27 +91,10 @@ let
darwinSystemValues = builtins.attrValues darwinSystems;
allSystemValues = nixosSystemValues ++ darwinSystemValues;
# Helper function to generate a set of attributes for each system
forAllSystems = func: (nixpkgs.lib.genAttrs allSystemNames func);
in
{
# Add attribute sets into outputs, for debugging
debugAttrs = {
inherit
nixosSystems
darwinSystems
allSystems
allSystemNames
;
};
# NixOS Hosts
nixosConfigurations = lib.attrsets.mergeAttrsList (
map (it: it.nixosConfigurations or { }) nixosSystemValues
);
# Colmena - remote deployment via SSH
colmena = {
# Raw Colmena hive (nodes + meta), evaluated below into the exposed
# `colmenaHive` output. The nix-community Colmena rewrite only reads
# `colmenaHive`, so the raw hive is not an output of its own.
rawColmenaHive = {
meta =
(
let
@@ -135,6 +118,29 @@ in
}
// lib.attrsets.mergeAttrsList (map (it: it.colmena or { }) nixosSystemValues);
# Helper function to generate a set of attributes for each system
forAllSystems = func: (nixpkgs.lib.genAttrs allSystemNames func);
in
{
# Add attribute sets into outputs, for debugging
debugAttrs = {
inherit
nixosSystems
darwinSystems
allSystems
allSystemNames
;
};
# NixOS Hosts
nixosConfigurations = lib.attrsets.mergeAttrsList (
map (it: it.nixosConfigurations or { }) nixosSystemValues
);
# Colmena - remote deployment via SSH. The nix-community evaluator reads the
# evaluated `colmenaHive` output built from the raw hive in the `let` block.
colmenaHive = inputs.colmena.lib.makeHive rawColmenaHive;
# macOS Hosts
darwinConfigurations = lib.attrsets.mergeAttrsList (
map (it: it.darwinConfigurations or { }) darwinSystemValues