Skip to content

Commit bf65b5f

Browse files
MartinNikovPetarKirov
authored andcommitted
feat(packages): Add secret package
1 parent 63c3765 commit bf65b5f

File tree

2 files changed

+114
-0
lines changed

2 files changed

+114
-0
lines changed

packages/default.nix

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

packages/secret/default.nix

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
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+
reEncryptAll=false
21+
export RULES=""
22+
secretsFolder=""
23+
24+
while [[ $# -gt 0 ]]; do
25+
case "$1" in
26+
--machine=*) machine="''${1#*=}";;
27+
--secrets-folder=*) secretsFolder="''${1#*=}";;
28+
--service=*) service="''${1#*=}";;
29+
--secret=*) secret="''${1#*=}";;
30+
--vm) vm=true;;
31+
-r) reEncrypt=true;;
32+
--re-encrypt-all) reEncryptAll=true;;
33+
--help)
34+
echo -e "NAME\n\
35+
secret\n\n\
36+
SYNOPSIS\n\
37+
secret [OPTION]\n\n\
38+
EXAMPLE\n\
39+
secret --machine=mymachine --service=myservice --secret=mysecret\n\n\
40+
DESCRIPTION\n\
41+
Secret is the command made for nix repos to get rid of the secret.nix when\n\
42+
you are using agenix. Secret must be used with mcl-secrets and mcl-host-info\n\
43+
modules from nixos-modules repository to work properly.\n\n\
44+
OPTIONS\n\
45+
--secrets-folder - pecifies the location where secrets are saved.\n\
46+
By default, secrets are stored in /(folder of the machine)/secrets/service/\n\
47+
if this directory exists, unless otherwise specified.
48+
--machine - Machine for which you want to create a secret.\n\
49+
--service - Service for which you want to create a secret.\n\
50+
--secret - Secret you want to encrypt.\n\
51+
--vm - Make secret for the vmVariant.\n\
52+
-r - Re-encrypt the secret."
53+
exit 0
54+
;;
55+
*)
56+
echo "Unknown option: $1"
57+
exit 1
58+
;;
59+
esac
60+
shift
61+
done
62+
63+
if [[ "$reEncryptAll" == true && -z "$machine" ]]; then
64+
echo "You must specify machine"
65+
exit 1
66+
elif [[ "$reEncrypt" == true && (-z "$machine" || -z "$service") ]]; then
67+
echo "You must specify machine and service"
68+
exit 1
69+
elif [[ "$reEncrypt" == false && "$reEncryptAll" == false && (-z "$machine" || -z "$service" || -z "$secret") ]]; then
70+
echo "You must specify machine, service, and secret"
71+
exit 1
72+
fi
73+
74+
machineFolder="$(nix eval ".#nixosConfigurations.$machine.config.mcl.host-info.configPath" | sed 's|^\([^/]*/\)\{4\}||; s|"||g')"
75+
76+
if [ "$secretsFolder" == "" ]; then
77+
secretsFolder="$machineFolder/secrets/$service"
78+
fi
79+
80+
if [[ "$vm" == true && "$reEncryptAll" == false ]]; then
81+
RULES="$(nix eval --raw ".#nixosConfigurations.$machine.config.virtualisation.vmVariant.mcl.secrets.services.$service.nix-file")"
82+
secretsFolder="./modules/default-vm-config/secrets/$service"
83+
elif [ "$reEncryptAll" == false ]; then
84+
RULES="$(nix eval --raw ".#nixosConfigurations.$machine.config.mcl.secrets.services.$service.nix-file")"
85+
fi
86+
87+
if [ "$reEncryptAll" == true ]; then
88+
for s in $(nix eval ".#nixosConfigurations.$machine.config.mcl.secrets.services" --apply builtins.attrNames | tr -d '[]"'); do
89+
service=$s
90+
secretsFolder="$machineFolder/secrets/$service"
91+
echo "Re-encripting secrets for service $s"
92+
if [ "$vm" == true ]; then
93+
RULES="$(nix eval --raw ".#nixosConfigurations.$machine.config.virtualisation.vmVariant.mcl.secrets.services.$service.nix-file")"
94+
else
95+
RULES="$(nix eval --raw ".#nixosConfigurations.$machine.config.mcl.secrets.services.$service.nix-file")"
96+
fi
97+
(
98+
cd "$secretsFolder"
99+
"${agenix}/bin/agenix -r"
100+
)
101+
done
102+
else
103+
(
104+
cd "$secretsFolder"
105+
if [ "$reEncrypt" == true ]; then
106+
"${agenix}/bin/agenix" -r
107+
else
108+
"${agenix}/bin/agenix" -e "$secret.age"
109+
fi
110+
)
111+
fi
112+
'';
113+
}

0 commit comments

Comments
 (0)