-
-
Notifications
You must be signed in to change notification settings - Fork 18
/
Copy pathhm-module.nix
91 lines (76 loc) · 2.31 KB
/
hm-module.nix
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
{ config, pkgs, lib, ... }:
with lib;
let
cfg = config.lollypops;
secret-file = types.submodule ({ config, ... }: {
options = {
name = mkOption {
type = types.str;
default = config._module.args.name;
description = "Name of the secret";
defaultText = "<name>";
};
cmd = mkOption {
type = types.str;
default = "${cfg.secrets.default-cmd} ${cfg.secrets.cmd-name-prefix}${config.name}";
description = "Command to print the secret. E.g. `cat mysecretfile`";
defaultText = "<default-cmd> <cmd-name-prefix><name>";
};
path = mkOption {
type = types.str;
default = "${cfg.secrets.default-dir}/${config.name}";
description = "Path to place the secret file";
defaultText = "<default-dir>/<name>";
};
mode = mkOption {
type = types.str;
default = "0400";
description = "Unix permission";
};
owner = mkOption {
type = types.str;
default = "${cfg.secrets.default-user}";
description = "Owner of the secret file";
};
group-name = mkOption {
type = types.str;
default = "users";
description = "Group of the secret file";
};
};
});
in
{
options.lollypops = {
secrets = {
default-cmd = mkOption {
type = types.str;
default = "${pkgs.pass}/bin/pass";
description = "Default command to retrieve passwords. Will be passed the name as parameter";
defaultText = "\${pkgs.pass}/bin/pass";
};
cmd-name-prefix = mkOption {
type = types.str;
default = "";
description = "Prefix to prepend to all name when passing to the cmd";
};
default-dir = mkOption {
type = types.str;
default = "${config.home.homeDirectory}/lollypops-secrets";
description = "Path to place the secrets on the remote host if no alternative is specified";
};
default-user = mkOption {
type = types.str;
default = config.home.username;
visible = false;
readOnly = true;
};
files = mkOption {
type = with types; attrsOf secret-file;
default = { };
description = "Attribute set specifying secrets to be deployed";
};
};
};
# config = { };
}