Files
nix/modules/secrets/default.nix

81 lines
1.7 KiB
Nix

{
lib,
inputs,
pkgs,
config,
myUtils,
...
}:
let
cfg = config.secrets;
inherit (cfg) sopsDir;
owner = config.users.users.${cfg.username}.name;
in
{
imports = [ inputs.sops-nix.nixosModules.sops ];
options.secrets = {
username = lib.mkOption {
type = lib.types.str;
};
sopsDir = lib.mkOption {
type = lib.types.str;
default = "${toString inputs.nix-secrets}/secrets";
};
groups = lib.mkOption {
type = lib.types.attrsOf (lib.types.listOf lib.types.str);
default = { };
description = "Declarative secret groups: { group = [ key names ]; }";
};
owner = lib.mkOption {
type = lib.types.unspecified;
};
nixSigningKey = {
enable = lib.mkEnableOption "nix signing key configuration";
};
yubikey = {
enable = lib.mkEnableOption "set up Yubikey";
};
};
config = {
secrets = {
inherit owner;
groups = {
email = [
"personal"
"work"
];
nix = lib.optional cfg.nixSigningKey.enable "signing-key";
};
};
sops = {
# for yubikey, generate as follows:
# ```
# age-plugin-yubikey --identity > <keyfile-path>
# ```
age.keyFile = "/home/${cfg.username}/.config/sops/age/keys.txt";
secrets = myUtils.mkSopsSecrets sopsDir owner cfg.groups;
};
nix.settings.secret-key-files = lib.mkIf cfg.nixSigningKey.enable [
config.sops.secrets.nix-signing-key.path
];
services = {
pcscd.enable = true; # needed for age-plugin-yubikey?
udev.packages = lib.mkIf cfg.yubikey.enable [
pkgs.yubikey-personalization
pkgs.libfido2
];
};
};
}