automate secrets per host, at least a little bit. Not a great way still but better than before
This commit is contained in:
parent
ce355885c6
commit
2dd9e1cd41
2 changed files with 44 additions and 102 deletions
|
|
@ -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);
|
{
|
||||||
{
|
file = ./. + "/secrets/${name}";
|
||||||
# nix2github = {
|
|
||||||
# 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;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
let
|
let
|
||||||
authorityKey = [
|
authorityKey = [
|
||||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBdG4tG18VeuEr/g4GM7HWUzHuUVcR9k6oS3TPBs4JRF ragenix authority key"
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBdG4tG18VeuEr/g4GM7HWUzHuUVcR9k6oS3TPBs4JRF authority"
|
||||||
];
|
];
|
||||||
|
|
||||||
gpdPocket3 = [
|
gpdPocket3 = [
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue