nixos/modules/services/redis.nix

46 lines
1.5 KiB
Nix
Raw Permalink Normal View History

2023-08-23 13:34:58 +08:00
inputs:
{
2023-09-01 21:05:26 +08:00
options.nixos.services.redis = let inherit (inputs.lib) mkOption types; in
{
instances = mkOption
{
type = types.attrsOf (types.submodule (submoduleInputs: { options =
{
user = mkOption { type = types.nonEmptyStr; default = submoduleInputs.config._module.args.name; };
passwordFile = mkOption { type = types.nullOr types.nonEmptyStr; default = null; };
port = mkOption { type = types.ints.unsigned; };
};}));
default = {};
};
};
config =
let
inherit (inputs.config.nixos.services) redis;
inherit (inputs.localLib) attrsToList;
inherit (builtins) map listToAttrs filter;
in
{
services.redis.servers = listToAttrs (map
(server:
{
inherit (server) name;
value =
{
enable = true;
bind = null;
port = server.value.port;
user = server.value.user;
# unixSocket = null; # bug
unixSocketPerm = 600;
requirePassFile =
if server.value.passwordFile == null then inputs.config.sops.secrets."redis/${server.name}".path
else server.value.passwordFile;
};
})
(attrsToList redis.instances));
sops.secrets = listToAttrs (map
(server: { name = "redis/${server.name}"; value.owner = inputs.config.users.users.${server.name}.name; })
(filter (server: server.value.passwordFile == null) (attrsToList redis.instances)));
};
2023-08-23 13:34:58 +08:00
}