Skip to content

Commit 583aba5

Browse files
committed
feat(packages): Add secret package
1 parent 1dd64f5 commit 583aba5

File tree

3 files changed

+114
-13
lines changed

3 files changed

+114
-13
lines changed

modules/secrets.nix

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -82,19 +82,17 @@
8282
};
8383
nix-file = mkOption {
8484
default =
85-
if (pathIsRegularFile (config.encryptedSecretDir + "/${serviceName}/secrets.nix")) then
86-
config.encryptedSecretDir + "/${serviceName}/secrets.nix"
87-
else
88-
builtins.toFile "${serviceName}-secrets.nix" ''
89-
let
90-
hostKey = ["${sshKey}"];
91-
extraKeys = ["${concatStringsSep "\"\"" config.extraKeys}"];
92-
in {
93-
${concatMapStringsSep "\n" (n: "\"${n}.age\".publicKeys = hostKey ++ extraKeys;") (
94-
builtins.attrNames config.secrets
95-
)}
96-
}
97-
'';
85+
86+
builtins.toFile "${serviceName}-secrets.nix" ''
87+
let
88+
hostKey = ["${sshKey}"];
89+
extraKeys = ["${concatStringsSep "\"\"" config.extraKeys}"];
90+
in {
91+
${concatMapStringsSep "\n" (n: "\"${n}.age\".publicKeys = hostKey ++ extraKeys;") (
92+
builtins.attrNames config.secrets
93+
)}
94+
}
95+
'';
9896
type = types.path;
9997
};
10098
};

packages/default.nix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
}
6161
// optionalAttrs (system == "x86_64-linux" || system == "aarch64-darwin") {
6262
grafana-agent = import ./grafana-agent { inherit inputs'; };
63+
secret = import ./secret { inherit inputs' pkgs; };
6364
}
6465
// optionalAttrs isLinux {
6566
folder-size-metrics = pkgs.callPackage ./folder-size-metrics { };

packages/secret/default.nix

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
{
2+
inputs',
3+
pkgs,
4+
...
5+
}:
6+
let
7+
agenix = inputs'.agenix.packages.agenix.override { ageBin = "${pkgs.rage}/bin/rage"; };
8+
in
9+
pkgs.writeShellApplication {
10+
name = "secret";
11+
text = ''
12+
#!/usr/bin/env bash
13+
set -euo pipefail
14+
15+
machine=""
16+
service=""
17+
secret=""
18+
vm="false"
19+
reEncrypt="false"
20+
export RULES=""
21+
secretsFolder=""
22+
23+
while [[ $# -gt 0 ]]; do
24+
case "$1" in
25+
--machine=*)
26+
machine="''${1#*=}"
27+
;;
28+
--secrets-folder=*)
29+
secretsFolder="''${1#*=}"
30+
;;
31+
--service=*)
32+
service="''${1#*=}"
33+
;;
34+
--secret=*)
35+
secret="''${1#*=}"
36+
;;
37+
--vm)
38+
vm="true"
39+
;;
40+
-r)
41+
reEncrypt="true";
42+
;;
43+
--help)
44+
echo -e "NAME\n\
45+
secret\n\n\
46+
SYNOPSIS\n\
47+
secret [OPTION]\n\n\
48+
EXAMPLE\n\
49+
secret --machine=mymachine --service=myservice --secret=mysecret\n\n\
50+
DESCRIPTION\n\
51+
Secret is the command made for nix repos to get rid of the secret.nix when\n\
52+
you are using agenix. Secret must be used with mcl-secrets and mcl-host-info\n\
53+
modules from nixos-modules repository to work properly.\n\n\
54+
OPTIONS\n\
55+
--secrets-folder - pecifies the location where secrets are saved.\n\
56+
By default, secrets are stored in /(folder of the machine)/secrets/service/\n\
57+
if this directory exists, unless otherwise specified.
58+
--machine - Machine for which you want to create a secret.\n\
59+
--service - Service for which you want to create a secret.\n\
60+
--secret - Secret you want to encrypt.\n\
61+
--vm - Make secret for the vmVariant.\n\
62+
-r - Re-encrypt the secret."
63+
exit 0
64+
;;
65+
*)
66+
echo "Unknown option: $1"
67+
exit 1
68+
;;
69+
esac
70+
shift
71+
done
72+
73+
if [[ -z "$machine" || -z "$service" && "$reEncrypt" = "true" ]]; then
74+
echo "You must specify machine and service"
75+
exit 1
76+
elif [[ -z "$machine" || -z "$service" || -z "$secret" && "$reEncrypt" = "false" ]]; then
77+
echo "You must specify machine, service, and secret"
78+
exit 1
79+
fi
80+
81+
machineFolder="$(nix eval ".#nixosConfigurations.$machine.config.mcl.host-info.configPath" | sed 's|^\([^/]*/\)\{4\}||; s|"||g')"
82+
83+
if [ "$secretsFolder" == "" ]; then
84+
secretsFolder="$machineFolder/secrets/$service"
85+
fi
86+
87+
if [ "$vm" = "true" ]; then
88+
RULES="$(nix eval --raw ".#nixosConfigurations.$machine.config.virtualisation.vmVariant.mcl.secrets.services.$service.nix-file")"
89+
else
90+
RULES="$(nix eval --raw ".#nixosConfigurations.$machine.config.mcl.secrets.services.$service.nix-file")"
91+
fi
92+
93+
(
94+
cd "$secretsFolder"
95+
if [ "$reEncrypt" = "true" ]; then
96+
"${agenix}/bin/agenix" -r
97+
else
98+
"${agenix}/bin/agenix" -e "$secret.age"
99+
fi
100+
)
101+
'';
102+
}

0 commit comments

Comments
 (0)