feat: USDA-dash now uses encrypted .env files
All checks were successful
CI / Format Check (push) Successful in 2s
CI / Flake Check (push) Successful in 1m42s
CI / Evaluate Key Configurations (nix-builder) (push) Successful in 14s
CI / Evaluate Key Configurations (nix-desktop1) (push) Successful in 8s
CI / Evaluate Key Configurations (nix-laptop1) (push) Successful in 9s
CI / Evaluate Artifacts (installer-iso-nix-laptop1) (push) Successful in 20s
CI / Evaluate Artifacts (lxc-nix-builder) (push) Successful in 13s
CI / Build and Publish Documentation (push) Successful in 10s
All checks were successful
CI / Format Check (push) Successful in 2s
CI / Flake Check (push) Successful in 1m42s
CI / Evaluate Key Configurations (nix-builder) (push) Successful in 14s
CI / Evaluate Key Configurations (nix-desktop1) (push) Successful in 8s
CI / Evaluate Key Configurations (nix-laptop1) (push) Successful in 9s
CI / Evaluate Artifacts (installer-iso-nix-laptop1) (push) Successful in 20s
CI / Evaluate Artifacts (lxc-nix-builder) (push) Successful in 13s
CI / Build and Publish Documentation (push) Successful in 10s
This commit is contained in:
@@ -62,7 +62,9 @@ in
|
|||||||
'';
|
'';
|
||||||
example = "32G";
|
example = "32G";
|
||||||
};
|
};
|
||||||
}; }; };
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
config = lib.mkMerge [
|
config = lib.mkMerge [
|
||||||
{
|
{
|
||||||
|
|||||||
36
secrets.nix
36
secrets.nix
@@ -54,27 +54,10 @@ let
|
|||||||
in
|
in
|
||||||
lenStr >= lenSuffix && lib.substring (lenStr - lenSuffix) lenSuffix str == suffix;
|
lenStr >= lenSuffix && lib.substring (lenStr - lenSuffix) lenSuffix str == suffix;
|
||||||
|
|
||||||
hasPrefix =
|
|
||||||
prefix: str:
|
|
||||||
let
|
|
||||||
lenPrefix = lib.stringLength prefix;
|
|
||||||
in
|
|
||||||
lib.stringLength str >= lenPrefix && lib.substring 0 lenPrefix str == prefix;
|
|
||||||
|
|
||||||
nameValuePair = name: value: { inherit name value; };
|
nameValuePair = name: value: { inherit name value; };
|
||||||
|
|
||||||
secretsPath = ./secrets;
|
secretsPath = ./secrets;
|
||||||
|
|
||||||
# Helper to convert SSH public key content to age public key
|
|
||||||
sshToAge =
|
|
||||||
sshPubKey:
|
|
||||||
let
|
|
||||||
# This is a simple check - in practice, use ssh-to-age tool
|
|
||||||
# For now, we'll just use the keys as-is if they look like age keys
|
|
||||||
trimmed = lib.replaceStrings [ "\n" ] [ "" ] sshPubKey;
|
|
||||||
in
|
|
||||||
if lib.substring 0 4 trimmed == "age1" then trimmed else null; # Will need manual conversion with ssh-to-age
|
|
||||||
|
|
||||||
# Read all directories in secrets/
|
# Read all directories in secrets/
|
||||||
secretDirs = if lib.pathExists secretsPath then lib.readDir secretsPath else { };
|
secretDirs = if lib.pathExists secretsPath then lib.readDir secretsPath else { };
|
||||||
|
|
||||||
@@ -181,22 +164,23 @@ let
|
|||||||
|
|
||||||
# Generate wildcard rules for each directory to allow creating new secrets
|
# Generate wildcard rules for each directory to allow creating new secrets
|
||||||
wildcardRules = lib.listToAttrs (
|
wildcardRules = lib.listToAttrs (
|
||||||
lib.concatMap (
|
lib.concatMap (dir: [
|
||||||
dir:
|
|
||||||
[
|
|
||||||
# Match with and without .age extension for ragenix compatibility
|
# Match with and without .age extension for ragenix compatibility
|
||||||
(nameValuePair "secrets/${dir}/*" {
|
(nameValuePair "secrets/${dir}/*" {
|
||||||
publicKeys = let
|
publicKeys =
|
||||||
|
let
|
||||||
recipients = getRecipients "secrets/${dir}/dummy.age";
|
recipients = getRecipients "secrets/${dir}/dummy.age";
|
||||||
in unique (lib.filter (k: k != null && k != "") recipients);
|
in
|
||||||
|
unique (lib.filter (k: k != null && k != "") recipients);
|
||||||
})
|
})
|
||||||
(nameValuePair "secrets/${dir}/*.age" {
|
(nameValuePair "secrets/${dir}/*.age" {
|
||||||
publicKeys = let
|
publicKeys =
|
||||||
|
let
|
||||||
recipients = getRecipients "secrets/${dir}/dummy.age";
|
recipients = getRecipients "secrets/${dir}/dummy.age";
|
||||||
in unique (lib.filter (k: k != null && k != "") recipients);
|
in
|
||||||
|
unique (lib.filter (k: k != null && k != "") recipients);
|
||||||
})
|
})
|
||||||
]
|
]) (lib.filter (d: d != "admins") directories)
|
||||||
) (lib.filter (d: d != "admins") directories)
|
|
||||||
);
|
);
|
||||||
|
|
||||||
in
|
in
|
||||||
|
|||||||
@@ -54,27 +54,10 @@ let
|
|||||||
in
|
in
|
||||||
lenStr >= lenSuffix && lib.substring (lenStr - lenSuffix) lenSuffix str == suffix;
|
lenStr >= lenSuffix && lib.substring (lenStr - lenSuffix) lenSuffix str == suffix;
|
||||||
|
|
||||||
hasPrefix =
|
|
||||||
prefix: str:
|
|
||||||
let
|
|
||||||
lenPrefix = lib.stringLength prefix;
|
|
||||||
in
|
|
||||||
lib.stringLength str >= lenPrefix && lib.substring 0 lenPrefix str == prefix;
|
|
||||||
|
|
||||||
nameValuePair = name: value: { inherit name value; };
|
nameValuePair = name: value: { inherit name value; };
|
||||||
|
|
||||||
secretsPath = ./secrets;
|
secretsPath = ./secrets;
|
||||||
|
|
||||||
# Helper to convert SSH public key content to age public key
|
|
||||||
sshToAge =
|
|
||||||
sshPubKey:
|
|
||||||
let
|
|
||||||
# This is a simple check - in practice, use ssh-to-age tool
|
|
||||||
# For now, we'll just use the keys as-is if they look like age keys
|
|
||||||
trimmed = lib.replaceStrings [ "\n" ] [ "" ] sshPubKey;
|
|
||||||
in
|
|
||||||
if lib.substring 0 4 trimmed == "age1" then trimmed else null; # Will need manual conversion with ssh-to-age
|
|
||||||
|
|
||||||
# Read all directories in secrets/
|
# Read all directories in secrets/
|
||||||
secretDirs = if lib.pathExists secretsPath then lib.readDir secretsPath else { };
|
secretDirs = if lib.pathExists secretsPath then lib.readDir secretsPath else { };
|
||||||
|
|
||||||
|
|||||||
@@ -195,7 +195,10 @@ in
|
|||||||
# This is needed because age can't reliably use OpenSSH private keys directly
|
# This is needed because age can't reliably use OpenSSH private keys directly
|
||||||
# Must run before agenix tries to decrypt secrets
|
# Must run before agenix tries to decrypt secrets
|
||||||
system.activationScripts.convertSshToAge = {
|
system.activationScripts.convertSshToAge = {
|
||||||
deps = [ "users" "groups" ];
|
deps = [
|
||||||
|
"users"
|
||||||
|
"groups"
|
||||||
|
];
|
||||||
text = ''
|
text = ''
|
||||||
mkdir -p /etc/age
|
mkdir -p /etc/age
|
||||||
if [ -f /etc/ssh/ssh_host_ed25519_key ]; then
|
if [ -f /etc/ssh/ssh_host_ed25519_key ]; then
|
||||||
|
|||||||
Reference in New Issue
Block a user