158 lines
3.7 KiB
Nix
158 lines
3.7 KiB
Nix
{
|
|
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
|
|
inputs.komga-reading-stats.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";
|
|
}
|
|
{
|
|
name = "Komga Reading Stats";
|
|
port = 8787;
|
|
description = "Reading stats";
|
|
}
|
|
];
|
|
|
|
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";
|
|
};
|
|
|
|
services.komga-reading-stats = {
|
|
enable = true;
|
|
host = "0.0.0.0";
|
|
port = 8787;
|
|
origin = "http://manatee:8787";
|
|
|
|
anthropicApiKeyFile = config.age.secrets.komga-reading-stats-claude-api-key.path;
|
|
claudeModel = "claude-sonnet-4-6";
|
|
komga = {
|
|
url = "http://127.0.0.1:8002";
|
|
apiKeyFile = config.age.secrets.komga-reading-stats-komga-api-key.path;
|
|
};
|
|
};
|
|
|
|
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";
|
|
};
|
|
|
|
"komga-reading-stats-claude-api-key" = {
|
|
file = ../../../../secrets/manatee/komga-reading-stats-claude-api-key.age;
|
|
owner = "komga-reading-stats";
|
|
group = "komga-reading-stats";
|
|
};
|
|
|
|
"komga-reading-stats-komga-api-key" = {
|
|
file = ../../../../secrets/manatee/komga-reading-stats-komga-api-key.age;
|
|
owner = "komga-reading-stats";
|
|
group = "komga-reading-stats";
|
|
};
|
|
};
|
|
};
|
|
}
|