diff --git a/configurations/nos/modules/comics/kapowarr/default.nix b/configurations/nos/modules/comics/kapowarr/default.nix
index 4792821a..64bff20a 100644
--- a/configurations/nos/modules/comics/kapowarr/default.nix
+++ b/configurations/nos/modules/comics/kapowarr/default.nix
@@ -4,6 +4,7 @@
   services.kapowarr = {
     enable = true;
     port = 5676;
+    urlBase = "/kapowarr";
 
     user = mainUser;
     group = "users";
diff --git a/configurations/nos/modules/comics/kapowarr/module.nix b/configurations/nos/modules/comics/kapowarr/module.nix
index a2edfe93..9fc2a952 100644
--- a/configurations/nos/modules/comics/kapowarr/module.nix
+++ b/configurations/nos/modules/comics/kapowarr/module.nix
@@ -11,6 +11,7 @@
     mkIf
     mkOption
     mkPackageOption
+    optionalString
     types
     ;
 
@@ -38,6 +39,12 @@ in {
       description = "Port where kapowarr should listen for incoming requests.";
     };
 
+    urlBase = mkOption {
+      type = with types; nullOr str;
+      default = null;
+      description = "URL base where kapowarr should listen for incoming requests.";
+    };
+
     dataDir = mkOption {
       type = types.path;
       default = "/var/lib/kapowarr/";
@@ -68,10 +75,7 @@ in {
       wantedBy = ["multi-user.target"];
 
       environment = {
-        KAPOWARR_DEFAULT_PORT = toString cfg.port;
         KAPOWARR_LOG_DIR = cfg.logDir;
-        KAPOWARR_STATE_DIR = cfg.dataDir;
-        KAPOWARR_DOWNLOAD_DIR = cfg.downloadDir;
       };
 
       serviceConfig = {
@@ -79,7 +83,14 @@ in {
         User = cfg.user;
         Group = cfg.group;
         StateDirectory = mkIf (cfg.dataDir == "/var/lib/kapowar") "kapowarr";
-        ExecStart = "${getExe cfg.package} -d ${cfg.dataDir}";
+        ExecStart = toString [
+          (getExe cfg.package)
+          "-d ${cfg.dataDir}"
+          "-D ${cfg.downloadDir}"
+          "-l ${cfg.logDir}"
+          "-p ${toString cfg.port}"
+          (optionalString (cfg.urlBase != null) "-u ${cfg.urlBase}")
+        ];
 
         # Hardening from komga service
         RemoveIPC = true;
diff --git a/flake.lock b/flake.lock
index d486e17f..f6cd8e81 100644
--- a/flake.lock
+++ b/flake.lock
@@ -3,11 +3,11 @@
     "Kapowarr-src": {
       "flake": false,
       "locked": {
-        "lastModified": 1743790432,
-        "narHash": "sha256-pY7P6Po3GADi4SLTNb6lXtkqgE7OfNe59ZuiFZFuasc=",
+        "lastModified": 1743968884,
+        "narHash": "sha256-cfD9cHSYLW4LvnyhjrEsw4PTu9/HjAQIeflRDmNs6dA=",
         "owner": "matt1432",
         "repo": "Kapowarr",
-        "rev": "df8e6ad90654afa2eabb80c4c941cc310044e8c7",
+        "rev": "8e428559a94f9fb4c3e1c4c13ee07bdf6708985d",
         "type": "github"
       },
       "original": {
diff --git a/packages/kapowarr/kapowarr/default.nix b/packages/kapowarr/kapowarr/default.nix
index 49bc0685..158eee84 100644
--- a/packages/kapowarr/kapowarr/default.nix
+++ b/packages/kapowarr/kapowarr/default.nix
@@ -3,7 +3,6 @@
   lib,
   buildPythonApplication,
   Kapowarr-src,
-  python,
   # deps
   rar,
   # python deps
@@ -40,24 +39,6 @@ in
           --replace-fail \
               "exe = folder_path('backend', 'lib', Constants.RAR_EXECUTABLES[platform])" \
               "exe = '${getExe rar}'"
-
-      # Insert import for following substituteInPlace
-      sed -i '/# -\*- coding: utf-8 -\*-/a from os import environ' ./src/backend/base/logging.py
-
-      substituteInPlace ./src/backend/base/logging.py --replace-fail \
-          "return folder_path(Constants.LOGGER_FILENAME)" \
-          "return f\"{environ.get('KAPOWARR_LOG_DIR') or folder_path(*Constants.DB_FOLDER)}/{Constants.LOGGER_FILENAME}\""
-
-      sed -i '/from __future__ import annotations/a from os import environ' ./src/backend/internals/db.py
-
-      substituteInPlace ./src/backend/internals/db.py --replace-fail \
-          "db_folder or folder_path(*Constants.DB_FOLDER)" \
-          "environ.get('KAPOWARR_STATE_DIR') or folder_path(*Constants.DB_FOLDER)"
-
-      substituteInPlace ./src/backend/internals/settings.py \
-          --replace-fail \
-              "download_folder: str = folder_path('temp_downloads')" \
-              "download_folder: str = environ.get('KAPOWARR_DOWNLOAD_DIR') or folder_path('temp_downloads')"
     '';
 
     build-system = [setuptools];
@@ -75,29 +56,6 @@ in
       websocket-client
     ];
 
-    # Use XDG-ish dirs for configuration. These would otherwise be in the kapowarr package.
-    #
-    # Using --run as `makeWrapper` evaluates variables for --set and --set-default at build
-    # time and then single quotes the vars in the wrapper, thus they wouldn't get expanded.
-    # But using --run allows setting default vars that are  evaluated on run and not during
-    # build time.
-    makeWrapperArgs = [
-      ''
-        --run "OUTDIR=\"$out\""
-        --run '
-        configDir="''${XDG_CONFIG_HOME:-$HOME/.config}/kapowarr"
-        export KAPOWARR_STATE_DIR="''${KAPOWARR_STATE_DIR-$configDir}"
-        export KAPOWARR_LOG_DIR="''${KAPOWARR_LOG_DIR-$configDir}"
-        export KAPOWARR_DOWNLOAD_DIR="''${KAPOWARR_DOWNLOAD_DIR-$configDir/temp_downloads}"
-        mkdir -p "$KAPOWARR_STATE_DIR" "$KAPOWARR_LOG_DIR"
-
-        if [ ! -f "$KAPOWARR_STATE_DIR/pwa_manifest.json" ]; then
-          cat "$OUTDIR/${python.sitePackages}/frontend/static/json/pwa_manifest.json" > "$KAPOWARR_STATE_DIR/pwa_manifest.json"
-        fi
-        '
-      ''
-    ];
-
     meta = {
       inherit (rar.meta) platforms;
       mainProgram = pname;