python3Packages.orjson: Disable failing tests on 32 bit
[NixPkgs.git] / nixos / modules / services / misc / calibre-server.nix
blob77c60381a312a96029a5520319501c056f784279
1 { config, lib, pkgs, ... }:
3 with lib;
5 let
7   cfg = config.services.calibre-server;
9 in
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   ];
21   ###### interface
23   options = {
24     services.calibre-server = {
26       enable = mkEnableOption (lib.mdDoc "calibre-server");
28       libraries = mkOption {
29         description = lib.mdDoc ''
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       };
35       user = mkOption {
36         description = lib.mdDoc "The user under which calibre-server runs.";
37         type = types.str;
38         default = "calibre-server";
39       };
41       group = mkOption {
42         description = lib.mdDoc "The group under which calibre-server runs.";
43         type = types.str;
44         default = "calibre-server";
45       };
47     };
48   };
51   ###### implementation
53   config = mkIf cfg.enable {
55     systemd.services.calibre-server = {
56         description = "Calibre Server";
57         after = [ "network.target" ];
58         wantedBy = [ "multi-user.target" ];
59         serviceConfig = {
60           User = cfg.user;
61           Restart = "always";
62           ExecStart = "${pkgs.calibre}/bin/calibre-server ${lib.concatStringsSep " " cfg.libraries}";
63         };
65       };
67     environment.systemPackages = [ pkgs.calibre ];
69     users.users = optionalAttrs (cfg.user == "calibre-server") {
70       calibre-server = {
71         home = "/var/lib/calibre-server";
72         createHome = true;
73         uid = config.ids.uids.calibre-server;
74         group = cfg.group;
75       };
76     };
78     users.groups = optionalAttrs (cfg.group == "calibre-server") {
79       calibre-server = {
80         gid = config.ids.gids.calibre-server;
81       };
82     };
84   };