--- /dev/null
+{ lib, config, myconfig, ... }:
+let
+ cfg = config.myServices.databases.redis;
+in {
+ options.myServices.databases.redis = {
+ enable = lib.mkOption {
+ default = cfg.enable;
+ example = true;
+ description = "Whether to enable redis database";
+ type = lib.types.bool;
+ };
+ socketsDir = lib.mkOption {
+ type = lib.types.path;
+ default = "/run/redis";
+ description = ''
+ The directory where Redis puts sockets.
+ '';
+ };
+ # Output variables
+ systemdRuntimeDirectory = lib.mkOption {
+ type = lib.types.str;
+ # Use ReadWritePaths= instead if socketsDir is outside of /run
+ default = assert lib.strings.hasPrefix "/run/" cfg.socketsDir;
+ lib.strings.removePrefix "/run/" cfg.socketsDir;
+ description = ''
+ Adjusted redis sockets directory for systemd
+ '';
+ readOnly = true;
+ };
+ sockets = lib.mkOption {
+ type = lib.types.attrsOf lib.types.path;
+ default = {
+ redis = "${cfg.socketsDir}/redis.sock";
+ };
+ readOnly = true;
+ description = ''
+ Redis sockets
+ '';
+ };
+ };
+
+ config = lib.mkIf cfg.enable {
+ users.users.redis.uid = config.ids.uids.redis;
+ users.groups.redis.gid = config.ids.gids.redis;
+ services.redis = rec {
+ enable = true;
+ bind = "127.0.0.1";
+ unixSocket = cfg.sockets.redis;
+ extraConfig = ''
+ unixsocketperm 777
+ maxclients 1024
+ '';
+ };
+ systemd.services.redis.serviceConfig.RuntimeDirectory = cfg.systemdRuntimeDirectory;
+ };
+}
+