Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions checks/darwin.nix
Original file line number Diff line number Diff line change
Expand Up @@ -27,5 +27,6 @@
};
sops.defaultSopsFile = ../pkgs/sops-install-secrets/test-assets/secrets.yaml;
sops.age.generateKey = true;
sops.age.extraGenerateKeyArgs = [ "-pq" ];
system.stateVersion = 5;
}
1 change: 1 addition & 0 deletions checks/home-manager.nix
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
home.enableNixpkgsReleaseCheck = false;

sops.age.generateKey = true;
sops.age.extraGenerateKeyArgs = [ "-pq" ];
sops.age.keyFile = "${config.home.homeDirectory}/.age-key.txt";
sops.secrets.test_key = { };
sops.templates."template.toml".content = ''
Expand Down
24 changes: 24 additions & 0 deletions checks/nixos-test.nix
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,30 @@ in
'';
};

# This test should be altered or removed if `age-keygen` switches its default to match the post-quantum `-pq` behavior.
age-extra-generate-key-args = testers.runNixOSTest {
name = "age-generate-key-args";
nodes.machine =
{ ... }:
{
imports = [ ../modules/sops ];
sops = {
age = {
keyFile = "/run/age-keys-args.txt";
generateKey = true;
extraGenerateKeyArgs = [ "-pq" ];
};
defaultSopsFile = testAssets + "/secrets.yaml";
secrets.test_key = { };
};
};

testScript = ''
start_all()
machine.succeed("cat /run/age-keys-args.txt | grep -q AGE-SECRET-KEY-PQ-")
'';
};

age-ssh-keys = testers.runNixOSTest {
name = "sops-age-ssh-keys";
nodes.machine = {
Expand Down
21 changes: 19 additions & 2 deletions modules/home-manager/sops.nix
Original file line number Diff line number Diff line change
Expand Up @@ -121,10 +121,10 @@ let
pkgs.writeShellScript "sops-nix-user" (
lib.optionalString cfg.age.generateKey ''
if [[ ! -f ${escapedAgeKeyFile} ]]; then
echo generating machine-specific age key...
echo generating user-specific age key...
${pkgs.coreutils}/bin/mkdir -p $(${pkgs.coreutils}/bin/dirname ${escapedAgeKeyFile})
# age-keygen sets 0600 by default, no need to chmod.
${pkgs.age}/bin/age-keygen -o ${escapedAgeKeyFile}
${pkgs.age}/bin/age-keygen -o ${escapedAgeKeyFile} ${lib.escapeShellArgs cfg.age.extraGenerateKeyArgs}
fi
''
+ ''
Expand Down Expand Up @@ -267,6 +267,15 @@ in
'';
};

extraGenerateKeyArgs = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [ ];
example = [ "-pq" ];
description = ''
List of arguments to use when generating the age key.
'';
};

sshKeyPaths = lib.mkOption {
type = lib.types.listOf lib.types.path;
default = [ ];
Expand Down Expand Up @@ -347,6 +356,14 @@ in
);
message = "sops.gnupg.qubes-split-gpg.domain is required when sops.gnupg.qubes-split-gpg.enable is set to true";
}
{
assertion =
!(
builtins.elem "-o" cfg.age.extraGenerateKeyArgs
|| builtins.elem "--output" cfg.age.extraGenerateKeyArgs
);
message = "Cannot use '-o' or '--output' in sops.age.extraGenerateKeyArgs. The output path is managed by sops.age.keyFile.";
}
];

home.sessionVariables = lib.mkIf cfg.gnupg.qubes-split-gpg.enable {
Expand Down
19 changes: 18 additions & 1 deletion modules/nix-darwin/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,7 @@ let
echo generating machine-specific age key...
mkdir -p "$(dirname ${escapedKeyFile})"
# age-keygen sets 0600 by default, no need to chmod.
${pkgs.age}/bin/age-keygen -o ${escapedKeyFile}
${pkgs.age}/bin/age-keygen -o ${escapedKeyFile} ${lib.escapeShellArgs cfg.age.extraGenerateKeyArgs}
fi
''
else
Expand Down Expand Up @@ -300,6 +300,15 @@ in
'';
};

extraGenerateKeyArgs = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [ ];
example = [ "-pq" ];
description = ''
List of arguments to use when generating the age key.
'';
};

sshKeyPaths = lib.mkOption {
type = lib.types.listOf lib.types.path;
default = defaultImportKeys "ed25519";
Expand Down Expand Up @@ -369,6 +378,14 @@ in
assertion = !(cfg.gnupg.home != null && cfg.gnupg.sshKeyPaths != [ ]);
message = "Exactly one of sops.gnupg.home and sops.gnupg.sshKeyPaths must be set";
}
{
assertion =
!(
builtins.elem "-o" cfg.age.extraGenerateKeyArgs
|| builtins.elem "--output" cfg.age.extraGenerateKeyArgs
);
message = "Cannot use '-o' or '--output' in sops.age.extraGenerateKeyArgs. The output path is managed by sops.age.keyFile.";
}
]
++ lib.optionals cfg.validateSopsFiles (
lib.concatLists (
Expand Down
19 changes: 18 additions & 1 deletion modules/sops/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -361,6 +361,15 @@ in
'';
};

extraGenerateKeyArgs = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [ ];
example = [ "-pq" ];
description = ''
List of arguments to use when generating the age key.
'';
};

sshKeyPaths = lib.mkOption {
type = lib.types.listOf lib.types.path;
default = defaultImportKeys "ed25519";
Expand Down Expand Up @@ -443,6 +452,14 @@ in
assertion = !(cfg.gnupg.home != null && cfg.gnupg.sshKeyPaths != [ ]);
message = "Exactly one of sops.gnupg.home and sops.gnupg.sshKeyPaths must be set";
}
{
assertion =
!(
builtins.elem "-o" cfg.age.extraGenerateKeyArgs
|| builtins.elem "--output" cfg.age.extraGenerateKeyArgs
);
message = "Cannot use '-o' or '--output' in sops.age.extraGenerateKeyArgs. The output path is managed by sops.age.keyFile.";
}
]
++ lib.optionals cfg.validateSopsFiles (
lib.concatLists (
Expand Down Expand Up @@ -522,7 +539,7 @@ in
echo generating machine-specific age key...
mkdir -p $(dirname ${escapedKeyFile})
# age-keygen sets 0600 by default, no need to chmod.
${pkgs.age}/bin/age-keygen -o ${escapedKeyFile}
${pkgs.age}/bin/age-keygen -o ${escapedKeyFile} ${lib.escapeShellArgs cfg.age.extraGenerateKeyArgs}
fi
''
);
Expand Down
Loading