nixos/calibre-server: Allow multiple libraries

Also add options for group and user.

Changed files
+36 -13
nixos
modules
services
+36 -13
nixos/modules/services/misc/calibre-server.nix
···
in
{
+
imports = [
+
(mkChangedOptionModule [ "services" "calibre-server" "libraryDir" ] [ "services" "calibre-server" "libraries" ]
+
(config:
+
let libraryDir = getAttrFromPath [ "services" "calibre-server" "libraryDir" ] config;
+
in [ libraryDir ]
+
)
+
)
+
];
###### interface
options = {
-
services.calibre-server = {
enable = mkEnableOption "calibre-server";
-
libraryDir = mkOption {
+
libraries = mkOption {
description = ''
-
The directory where the Calibre library to serve is.
-
'';
-
type = types.path;
+
The directories of the libraries to serve. They must be readable for the user under which the server runs.
+
'';
+
type = types.listOf types.path;
+
};
+
+
user = mkOption {
+
description = "The user under which calibre-server runs.";
+
type = types.str;
+
default = "calibre-server";
+
};
+
+
group = mkOption {
+
description = "The group under which calibre-server runs.";
+
type = types.str;
+
default = "calibre-server";
};
};
-
};
···
config = mkIf cfg.enable {
-
systemd.services.calibre-server =
-
{
+
systemd.services.calibre-server = {
description = "Calibre Server";
after = [ "network.target" ];
wantedBy = [ "multi-user.target" ];
serviceConfig = {
-
User = "calibre-server";
+
User = cfg.user;
Restart = "always";
-
ExecStart = "${pkgs.calibre}/bin/calibre-server ${cfg.libraryDir}";
+
ExecStart = "${pkgs.calibre}/bin/calibre-server ${lib.concatStringsSep " " cfg.libraries}";
};
};
environment.systemPackages = [ pkgs.calibre ];
-
users.users.calibre-server = {
+
users.users = optionalAttrs (cfg.user == "calibre-server") {
+
calibre-server = {
+
home = "/var/lib/calibre-server";
+
createHome = true;
uid = config.ids.uids.calibre-server;
-
group = "calibre-server";
+
group = cfg.group;
};
+
};
-
users.groups.calibre-server = {
+
users.groups = optionalAttrs (cfg.group == "calibre-server") {
+
calibre-server = {
gid = config.ids.gids.calibre-server;
};
+
};
};