{ inputs, pkgs, lib, config, ... }: let enabled = config.mod.komga.enable; nginxEnabled = config.mod.nginx.enable; in { options = { mod.komga = { enable = lib.mkEnableOption "Enable komga module"; }; }; imports = [ inputs.komga-comictracker.nixosModules.default inputs.komga-bookmanager.nixosModules.default ]; config = lib.mkIf enabled { mod.homepage.services = [ { name = "Komga"; port = 8002; description = "Comic library"; } { name = "Komga Reader"; port = 8888; description = "Comic reader"; } { name = "Komga Book Manager"; port = 8686; description = "Book manager"; } ]; users.users.komga = { isSystemUser = true; group = "storage"; }; services.komga = { enable = true; user = "komga"; group = "storage"; settings = { server.port = 8002; komga."cors.allowed-origins" = [ "http://manatee:8888" "https://komga.ppp.pm" ]; }; openFirewall = true; }; services.nginx = lib.mkIf nginxEnabled { virtualHosts."komga-reader" = { listen = [ { addr = "0.0.0.0"; port = 8888; } ]; root = (pkgs.writeTextDir "komga-reader.html" (builtins.readFile ./komga-reader.html)); locations."/" = { index = "komga-reader.html"; tryFiles = "$uri $uri/ /komga-reader.html"; }; }; virtualHosts."komga.ppp.pm" = { forceSSL = true; useACMEHost = "komga.ppp.pm"; locations."/" = { proxyPass = "http://127.0.0.1:8002"; proxyWebsockets = true; }; }; }; networking.firewall.allowedTCPPorts = [ 8888 ]; programs.comictracker = { enable = true; komgaUrl = "http://127.0.0.1:8002"; komgaLibraryId = "0NVZH5AK3RPE1"; secretsFile = config.age.secrets.komga-comicbooktracker-credentials.path; }; services.komga-book-manager = { enable = true; port = 8686; group = "storage"; komgaUrl = "http://127.0.0.1:8002"; credentialsFile = config.age.secrets.komga-bookmanager-credentials.path; libraryRoot = "/mnt/media/public/books"; libraryId = "0PNE1NEPY6995"; }; age.secrets = { "komga-comicbooktracker-credentials" = { file = ../../../../secrets/manatee/komga-comicbooktracker-credentials.age; owner = "alex"; group = "users"; }; "komga-bookmanager-credentials" = { file = ../../../../secrets/manatee/komga-bookmanager-credentials.age; owner = "alex"; group = "users"; }; }; }; }