automate secrets per host, at least a little bit. Not a great way still but better than before

This commit is contained in:
RingOfStorms (Joshua Bell) 2025-08-22 00:23:54 -05:00
parent ce355885c6
commit 2dd9e1cd41
2 changed files with 44 additions and 102 deletions

View file

@ -4,7 +4,7 @@
lib, lib,
pkgs, pkgs,
... ...
}: }@args:
let let
ccfg = import ../config.nix; ccfg = import ../config.nix;
@ -14,9 +14,35 @@ let
]; ];
cfg = lib.attrsets.getAttrFromPath cfg_path config; cfg = lib.attrsets.getAttrFromPath cfg_path config;
users_cfg = config.${ccfg.custom_config_key}.users; users_cfg = config.${ccfg.custom_config_key}.users;
secretsRaw = import ./secrets/secrets.nix;
systemName = lib.attrsets.getAttrFromPath [
ccfg.custom_config_key
"systemName"
] config;
authorityMarker = "authority";
# Key matches this host if its trailing comment contains "@<host>"
matchesThisSystem = key: lib.strings.hasInfix "@${systemName}" key;
# Key is the authority key if its comment contains the marker string
matchesAuthority = key: lib.strings.hasInfix authorityMarker key;
keepSecret =
attrs:
let
keys = attrs.publicKeys or [ ];
in
lib.any (k: matchesThisSystem k) keys;
# Any secrets that should be world-readable even after auto-import
worldReadable = [
"zitadel_master_key"
"vaultwarden_env"
];
# Keep only secrets intended for this host (or that include the authority key)
filteredSecrets = lib.attrsets.filterAttrs (_name: attrs: keepSecret attrs) secretsRaw;
in in
# TODO auto import secret files here
# secretsFile = (settings.secretsDir + /secrets.nix);
{ {
options = options =
{ } { }
@ -30,105 +56,21 @@ in
]; ];
age = { age = {
secrets = secrets = lib.attrsets.mapAttrs' (
# builtins.mapAttrs name: _attrs:
# (name: _value: lib.nameValuePair (lib.removeSuffix ".age" name) { let
# file = (settings.secretsDir + "/${name}"); base = lib.removeSuffix ".age" name;
# owner = lib.mkDefault users_cfg.primary; in
# }) lib.nameValuePair base (
# (import secretsFile);
{ {
# nix2github = { file = ./. + "/secrets/${name}";
# file = ./secrets/nix2github.age;
# owner = users_cfg.primary;
# };
# nix2bitbucket = {
# file = ./secrets/nix2bitbucket.age;
# owner = users_cfg.primary;
# };
# nix2gitjosh = {
# file = ./secrets/nix2gitjosh.age;
# owner = users_cfg.primary;
# };
# nix2gitforgejo = {
# file = ./secrets/nix2gitforgejo.age;
# owner = users_cfg.primary;
# };
# nix2nix = {
# file = ./secrets/nix2nix.age;
# owner = users_cfg.primary;
# };
# nix2h001 = {
# file = ./secrets/nix2h001.age;
# owner = users_cfg.primary;
# };
# nix2h002 = {
# file = ./secrets/nix2h002.age;
# owner = users_cfg.primary;
# };
# nix2h003 = {
# file = ./secrets/nix2h003.age;
# owner = users_cfg.primary;
# };
# nix2joe = {
# file = ./secrets/nix2joe.age;
# owner = users_cfg.primary;
# };
# nix2gpdPocket3 = {
# file = ./secrets/nix2gpdPocket3.age;
# owner = users_cfg.primary;
# };
# nix2t = {
# file = ./secrets/nix2t.age;
# owner = users_cfg.primary;
# };
# nix2linode = {
# file = ./secrets/nix2linode.age;
# owner = users_cfg.primary;
# };
# nix2oracle = {
# file = ./secrets/nix2oracle.age;
# owner = users_cfg.primary;
# };
# nix2l002 = {
# file = ./secrets/nix2l002.age;
# owner = users_cfg.primary;
# };
# nix2lio = {
# file = ./secrets/nix2lio.age;
# owner = users_cfg.primary;
# };
# nix2oren = {
# file = ./secrets/nix2oren.age;
# owner = users_cfg.primary;
# };
# github_read_token = {
# file = ./secrets/github_read_token.age;
# owner = users_cfg.primary;
# };
# headscale_auth = {
# file = ./secrets/headscale_auth.age;
# owner = users_cfg.primary;
# };
# obsidian_sync_env = {
# file = ./secrets/obsidian_sync_env.age;
# owner = users_cfg.primary;
# };
# us_chi_wg = {
# file = ./secrets/us_chi_wg.age;
# owner = users_cfg.primary;
# };
# zitadel_master_key = {
# file = ./secrets/zitadel_master_key.age;
# owner = users_cfg.primary;
# mode = "444"; # World readable!
# };
vaultwarden_env = {
file = ./secrets/vaultwarden_env.age;
owner = users_cfg.primary; owner = users_cfg.primary;
mode = "444"; # World readable! }
}; // lib.optionalAttrs (lib.elem base worldReadable) {
}; mode = "444";
}
)
) filteredSecrets;
}; };
}; };
} }

View file

@ -8,7 +8,7 @@
let let
authorityKey = [ authorityKey = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBdG4tG18VeuEr/g4GM7HWUzHuUVcR9k6oS3TPBs4JRF ragenix authority key" "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBdG4tG18VeuEr/g4GM7HWUzHuUVcR9k6oS3TPBs4JRF authority"
]; ];
gpdPocket3 = [ gpdPocket3 = [