diff --git a/modules/nixos/bundles/server.nix b/modules/nixos/bundles/server.nix index 210735e..a084543 100644 --- a/modules/nixos/bundles/server.nix +++ b/modules/nixos/bundles/server.nix @@ -12,6 +12,7 @@ "immich" "jellyfin" "karakeep" + "kavita" "lidarr" "miniflux" "nginx" diff --git a/modules/nixos/features/homepage-dashboard.nix b/modules/nixos/features/homepage-dashboard.nix index 42a4f2a..8d0a871 100644 --- a/modules/nixos/features/homepage-dashboard.nix +++ b/modules/nixos/features/homepage-dashboard.nix @@ -25,6 +25,7 @@ let # keep-sorted start "immich" "jellyfin" + "kavita-api" "lidarr" "miniflux" "paperless" @@ -155,6 +156,18 @@ in }; }; } + { + "Kavita" = { + "description" = "Book reader"; + "icon" = "kavita.svg"; + "href" = "https://kavita.fi33.buzz/"; + "widget" = { + "type" = "kavita"; + "url" = "https://kavita.fi33.buzz/"; + "key" = "@kavita-api@"; + }; + }; + } { "Miniflux" = { "description" = "RSS aggregator"; diff --git a/modules/nixos/features/kavita.nix b/modules/nixos/features/kavita.nix new file mode 100644 index 0000000..c62259e --- /dev/null +++ b/modules/nixos/features/kavita.nix @@ -0,0 +1,25 @@ +{ + config, + ... +}: +let + port = 5015; +in +{ + services = { + kavita = { + enable = true; + dataDir = "/srv/kavita"; + settings.Port = port; + tokenKeyFile = config.age.secrets.kavita.path; + }; + + nginx.virtualHosts."kavita.fi33.buzz" = { + forceSSL = true; + useACMEHost = "fi33.buzz"; + locations."/".proxyPass = "http://localhost:${toString port}"; + }; + }; + + age.secrets.kavita.file = ../../../secrets/kavita.age; +} diff --git a/secrets/kavita-api.age b/secrets/kavita-api.age new file mode 100644 index 0000000..0422408 Binary files /dev/null and b/secrets/kavita-api.age differ diff --git a/secrets/kavita.age b/secrets/kavita.age new file mode 100644 index 0000000..97f3de8 Binary files /dev/null and b/secrets/kavita.age differ diff --git a/secrets/secrets.nix b/secrets/secrets.nix index 74ef3d4..ca9dd01 100644 --- a/secrets/secrets.nix +++ b/secrets/secrets.nix @@ -20,6 +20,8 @@ in "copyparty-will.age".publicKeys = users; "immich.age".publicKeys = users; "jellyfin.age".publicKeys = users; + "kavita-api.age".publicKeys = users; + "kavita.age".publicKeys = users; "lidarr.age".publicKeys = users; "miniflux-creds.age".publicKeys = users; "paperless.age".publicKeys = users;