Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)

nixos/calibre-server: Allow multiple libraries

Also add options for group and user.

+36 -13
+36 -13
nixos/modules/services/misc/calibre-server.nix
··· 9 9 in 10 10 11 11 { 12 + imports = [ 13 + (mkChangedOptionModule [ "services" "calibre-server" "libraryDir" ] [ "services" "calibre-server" "libraries" ] 14 + (config: 15 + let libraryDir = getAttrFromPath [ "services" "calibre-server" "libraryDir" ] config; 16 + in [ libraryDir ] 17 + ) 18 + ) 19 + ]; 12 20 13 21 ###### interface 14 22 15 23 options = { 16 - 17 24 services.calibre-server = { 18 25 19 26 enable = mkEnableOption "calibre-server"; 20 27 21 - libraryDir = mkOption { 28 + libraries = mkOption { 22 29 description = '' 23 - The directory where the Calibre library to serve is. 24 - ''; 25 - type = types.path; 30 + The directories of the libraries to serve. They must be readable for the user under which the server runs. 31 + ''; 32 + type = types.listOf types.path; 33 + }; 34 + 35 + user = mkOption { 36 + description = "The user under which calibre-server runs."; 37 + type = types.str; 38 + default = "calibre-server"; 39 + }; 40 + 41 + group = mkOption { 42 + description = "The group under which calibre-server runs."; 43 + type = types.str; 44 + default = "calibre-server"; 26 45 }; 27 46 28 47 }; 29 - 30 48 }; 31 49 32 50 ··· 34 52 35 53 config = mkIf cfg.enable { 36 54 37 - systemd.services.calibre-server = 38 - { 55 + systemd.services.calibre-server = { 39 56 description = "Calibre Server"; 40 57 after = [ "network.target" ]; 41 58 wantedBy = [ "multi-user.target" ]; 42 59 serviceConfig = { 43 - User = "calibre-server"; 60 + User = cfg.user; 44 61 Restart = "always"; 45 - ExecStart = "${pkgs.calibre}/bin/calibre-server ${cfg.libraryDir}"; 62 + ExecStart = "${pkgs.calibre}/bin/calibre-server ${lib.concatStringsSep " " cfg.libraries}"; 46 63 }; 47 64 48 65 }; 49 66 50 67 environment.systemPackages = [ pkgs.calibre ]; 51 68 52 - users.users.calibre-server = { 69 + users.users = optionalAttrs (cfg.user == "calibre-server") { 70 + calibre-server = { 71 + home = "/var/lib/calibre-server"; 72 + createHome = true; 53 73 uid = config.ids.uids.calibre-server; 54 - group = "calibre-server"; 74 + group = cfg.group; 55 75 }; 76 + }; 56 77 57 - users.groups.calibre-server = { 78 + users.groups = optionalAttrs (cfg.group == "calibre-server") { 79 + calibre-server = { 58 80 gid = config.ids.gids.calibre-server; 59 81 }; 82 + }; 60 83 61 84 }; 62 85