anchor.diff:          description = "Maximum number of items to keep in slow log.";
         };
   
  -      extraConfig = mkOption {
  -        type = types.lines;
  -        default = "";
  -        description = "Extra configuration options for redis.conf.";
  +      settings = mkOption {
  +        type = with types; attrsOf (oneOf [ bool int str (listOf str) ]);
  +        default = {};
  +        description = ''
  +          Redis configuration. Refer to
  +          <link xlink:href="https://redis.io/topics/config"/>
  +          for details on supported values.
  +        '';
  +        example = literalExample ''
  +          {
  +            unixsocketperm = "700";
  +            loadmodule = [ "/path/to/my_module.so" "/path/to/other_module.so" ];
  +          }
  +        '';
         };
       };
   
  
positive.code: 
  let
    cfg = config.services.redis;
    redisBool = b: if b then "yes" else "no";
    condOption = name: value: if value != null then "${name} ${toString value}" else "";
  
    redisConfig = pkgs.writeText "redis.conf" ''
      port ${toString cfg.port}
      ${condOption "bind" cfg.bind}
      ${condOption "unixsocket" cfg.unixSocket}
      daemonize no
      supervised systemd
      loglevel ${cfg.logLevel}
      logfile ${cfg.logfile}
      syslog-enabled ${redisBool cfg.syslog}
      databases ${toString cfg.databases}
      ${concatMapStrings (d: "save ${toString (builtins.elemAt d 0)} ${toString (builtins.elemAt d 1)}\n") cfg.save}
      dbfilename dump.rdb
      dir /var/lib/redis
      ${if cfg.slaveOf != null then "slaveof ${cfg.slaveOf.ip} ${toString cfg.slaveOf.port}" else ""}
      ${condOption "masterauth" cfg.masterAuth}
      ${condOption "requirepass" cfg.requirePass}
      appendOnly ${redisBool cfg.appendOnly}
      appendfsync ${cfg.appendFsync}
      slowlog-log-slower-than ${toString cfg.slowLogLogSlowerThan}
      slowlog-max-len ${toString cfg.slowLogMaxLen}
      ${cfg.extraConfig}
    '';
  in
  {
    imports = [
  
negative.code: 
      environment.systemPackages = [ cfg.package ];
  
      services.redis.settings = mkMerge [
        {
          port = cfg.port;
          daemonize = false;
          supervised = "systemd";
          loglevel = cfg.logLevel;
          logfile = cfg.logfile;
          syslog-enabled = cfg.syslog;
          databases = cfg.databases;
          save = map (d: "${toString (builtins.elemAt d 0)} ${toString (builtins.elemAt d 1)}") cfg.save;
          dbfilename = "dump.rdb";
          dir = "/var/lib/redis";
          appendOnly = cfg.appendOnly;
          appendfsync = cfg.appendFsync;
          slowlog-log-slower-than = cfg.slowLogLogSlowerThan;
          slowlog-max-len = cfg.slowLogMaxLen;
        }
        (mkIf (cfg.bind != null) { bind = cfg.bind; })
        (mkIf (cfg.unixSocket != null) { unixsocket = cfg.unixSocket; })
        (mkIf (cfg.slaveOf != null) { slaveof = "${cfg.slaveOf.ip} ${cfg.slaveOf.port}"; })
        (mkIf (cfg.masterAuth != null) { masterauth = cfg.masterAuth; })
        (mkIf (cfg.requirePass != null) { requirepass = cfg.requirePass; })
      ];
  
      systemd.services.redis = {
        description = "Redis Server";
  
  