diff --git a/services/calibre-web.nix b/services/calibre-web.nix new file mode 100644 index 0000000..97b90c8 --- /dev/null +++ b/services/calibre-web.nix @@ -0,0 +1,52 @@ +{ config, lib, ... }: +let + cfg = config.my.services.calibre-web; + domain = config.networking.domain; + calibreDomain = "library.${domain}"; +in +{ + options.my.services.calibre-web = with lib; { + enable = mkEnableOption "Calibre-web server"; + + port = mkOption { + type = types.port; + default = 8083; + example = 8080; + description = "Internal port for webui"; + }; + + libraryPath = mkOption { + type = with types; either path str; + example = /data/media/library; + description = "Path to the Calibre library to use"; + }; + }; + + config = lib.mkIf cfg.enable { + virtualisation.oci-containers.containers = { + calibre-web = { + image = "technosoft2000/calibre-web"; + volumes = [ + "${cfg.libraryPath}:/books" + ]; + ports = [ + "127.0.0.1:${toString cfg.port}:8083" + ]; + environment = { + # NOTE: should be configurable + SET_CONTAINER_TIMEZONE = "true"; + CONTAINER_TIMEZONE = "Europe/Paris"; + # Use 'media' group id + PDGID = toString config.users.groups.media.gid; + }; + }; + }; + + services.nginx.virtualHosts."${calibreDomain}" = { + forceSSL = true; + useACMEHost = "${domain}"; + + locations."/".proxyPass = "http://localhost:${toString cfg.port}/"; + }; + }; +} diff --git a/services/default.nix b/services/default.nix index d618a33..7c8a971 100644 --- a/services/default.nix +++ b/services/default.nix @@ -4,6 +4,7 @@ imports = [ ./backup.nix ./blog.nix + ./calibre-web.nix ./drone.nix ./gitea.nix ./indexers.nix diff --git a/services/media.nix b/services/media.nix index e55ac89..4ad2fee 100644 --- a/services/media.nix +++ b/services/media.nix @@ -3,6 +3,7 @@ { config, lib, ... }: let mediaServices = with config.my.services; [ + calibre-web jellyfin pirate sabnzbd