diff --git a/configurations/nos/modules/comics/kapowarr/module.nix b/configurations/nos/modules/comics/kapowarr/module.nix
index ba4891b5..a2edfe93 100644
--- a/configurations/nos/modules/comics/kapowarr/module.nix
+++ b/configurations/nos/modules/comics/kapowarr/module.nix
@@ -68,7 +68,7 @@ in {
       wantedBy = ["multi-user.target"];
 
       environment = {
-        KAPOWARR_PORT = toString cfg.port;
+        KAPOWARR_DEFAULT_PORT = toString cfg.port;
         KAPOWARR_LOG_DIR = cfg.logDir;
         KAPOWARR_STATE_DIR = cfg.dataDir;
         KAPOWARR_DOWNLOAD_DIR = cfg.downloadDir;
diff --git a/flake.lock b/flake.lock
index 2457575b..06092d0e 100644
--- a/flake.lock
+++ b/flake.lock
@@ -1,5 +1,22 @@
 {
   "nodes": {
+    "Kapowarr-src": {
+      "flake": false,
+      "locked": {
+        "lastModified": 1743470007,
+        "narHash": "sha256-BSf3wx789Gg/OwGM9sIrxIsphh06s1x18VRmJ5S5P9w=",
+        "owner": "matt1432",
+        "repo": "Kapowarr",
+        "rev": "08e7eacf410c3141513680688d09b4e51600caf5",
+        "type": "github"
+      },
+      "original": {
+        "owner": "matt1432",
+        "ref": "build-system",
+        "repo": "Kapowarr",
+        "type": "github"
+      }
+    },
     "ags": {
       "inputs": {
         "astal": [
@@ -1567,6 +1584,7 @@
     },
     "root": {
       "inputs": {
+        "Kapowarr-src": "Kapowarr-src",
         "ags": "ags",
         "astal": "astal",
         "bat-theme-src": "bat-theme-src",
diff --git a/flake.nix b/flake.nix
index 2ea69d4a..fa9c1ba6 100644
--- a/flake.nix
+++ b/flake.nix
@@ -1,6 +1,13 @@
 # Do not modify! This file is generated.
 {
   inputs = {
+    Kapowarr-src = {
+      flake = false;
+      owner = "matt1432";
+      ref = "build-system";
+      repo = "Kapowarr";
+      type = "github";
+    };
     ags = {
       inputs = {
         astal.follows = "astal";
diff --git a/inputs/default.nix b/inputs/default.nix
index 3ff58904..5613aa24 100644
--- a/inputs/default.nix
+++ b/inputs/default.nix
@@ -321,6 +321,14 @@ let
     }
 
     # Overlays & packages
+    {
+      name = "Kapowarr-src";
+      owner = "matt1432";
+      repo = "Kapowarr";
+      ref = "build-system";
+      # type = "path";
+      # path = "/home/matt/git/Kapowarr";
+    }
     {
       type = "gitlab";
       owner = "rogs";
diff --git a/packages/default.nix b/packages/default.nix
index 9859f356..25f78151 100644
--- a/packages/default.nix
+++ b/packages/default.nix
@@ -19,7 +19,7 @@
 
     jmusicbot = final.callPackage ./jmusicbot {};
 
-    kapowarr = import ./kapowarr final;
+    kapowarr = import ./kapowarr (final // inputs);
 
     komf = final.callPackage ./komf {};
 
diff --git a/packages/kapowarr/default.nix b/packages/kapowarr/default.nix
index ac60a161..7a698db9 100644
--- a/packages/kapowarr/default.nix
+++ b/packages/kapowarr/default.nix
@@ -1,6 +1,7 @@
 {
   # nix build inputs
   python3Packages,
+  Kapowarr-src,
   ...
 }: let
   pyPkgs = python3Packages.override {
@@ -10,4 +11,4 @@
     };
   };
 in
-  pyPkgs.callPackage ./kapowarr {}
+  pyPkgs.callPackage ./kapowarr {inherit Kapowarr-src;}
diff --git a/packages/kapowarr/kapowarr/default.nix b/packages/kapowarr/kapowarr/default.nix
index e59701cb..e04ef61b 100644
--- a/packages/kapowarr/kapowarr/default.nix
+++ b/packages/kapowarr/kapowarr/default.nix
@@ -2,7 +2,7 @@
   # nix build inputs
   lib,
   buildPythonApplication,
-  fetchFromGitHub,
+  Kapowarr-src,
   python,
   # deps
   rar,
@@ -21,51 +21,43 @@
   ...
 }: let
   inherit (lib) getExe;
+  inherit (builtins) fromTOML readFile;
+
+  pyproject = fromTOML (readFile "${Kapowarr-src}/pyproject.toml");
 
   pname = "kapowarr";
-  version = "1.1.1+pkG4o8O";
+  version = "${pyproject.project.version}+${Kapowarr-src.shortRev or "dirty"}";
 in
   buildPythonApplication {
     inherit pname version;
     format = "pyproject";
 
-    src = fetchFromGitHub {
-      owner = "Casvt";
-      repo = "Kapowarr";
-      rev = "a97f907555bf02d5e737812bfa5c189d8cc639ba";
-      hash = "sha256-pkG4o8OfLu02M50JSnbrBDNiwnbYEJNutoutwBcLFwU=";
-    };
+    src = Kapowarr-src;
 
     postPatch = ''
       # TODO: makes sure this works
-      substituteInPlace ./backend/implementations/converters.py \
+      substituteInPlace ./src/backend/implementations/converters.py \
           --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' ./backend/base/logging.py
+      sed -i '/# -\*- coding: utf-8 -\*-/a from os import environ' ./src/backend/base/logging.py
 
-      substituteInPlace ./backend/base/logging.py --replace-fail \
+      substituteInPlace ./src/backend/base/logging.py --replace-fail \
           "return folder_path(Constants.LOGGER_FILENAME)" \
-          "return f\"{environ.get('KAPOWARR_LOG_DIR')}/{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' ./backend/internals/db.py
+      sed -i '/from __future__ import annotations/a from os import environ' ./src/backend/internals/db.py
 
-      substituteInPlace ./backend/internals/db.py --replace-fail \
+      substituteInPlace ./src/backend/internals/db.py --replace-fail \
           "db_folder or folder_path(*Constants.DB_FOLDER)" \
-          "environ.get('KAPOWARR_STATE_DIR')"
+          "environ.get('KAPOWARR_STATE_DIR') or folder_path(*Constants.DB_FOLDER)"
 
-      substituteInPlace ./backend/internals/settings.py \
-          --replace-fail \
-              "from os import urandom" \
-              "from os import urandom, environ" \
-          --replace-fail \
-              "port: int = 5656" \
-              "port: int = int(environ.get('KAPOWARR_PORT'))" \
+      substituteInPlace ./src/backend/internals/settings.py \
           --replace-fail \
               "download_folder: str = folder_path('temp_downloads')" \
-              "download_folder: str = environ.get('KAPOWARR_DOWNLOAD_DIR')"
+              "download_folder: str = environ.get('KAPOWARR_DOWNLOAD_DIR') or folder_path('temp_downloads')"
     '';
 
     build-system = [setuptools];
@@ -83,48 +75,6 @@ in
       websocket-client
     ];
 
-    preBuild = ''
-      sed -i "s/bs4.*/beautifulsoup4 ~= 4.12.3/" requirements.txt
-
-      cat >> pyproject.toml << EOF
-
-      [build-system]
-      build-backend = "setuptools.build_meta"
-      requires = ["setuptools"]
-
-      [project]
-      name = "${pname}"
-      version = "${version}"
-      dynamic = [ "dependencies", "optional-dependencies" ]
-
-      [tool.setuptools]
-      script-files = ["Kapowarr.py"]
-
-      py-modules = [
-          "Kapowarr",
-      ]
-
-      packages = [
-          "frontend",
-          "frontend.static",
-          "backend",
-          "backend.base",
-          "backend.features",
-          "backend.implementations",
-          "backend.implementations.direct_clients",
-          "backend.implementations.torrent_clients",
-          "backend.internals",
-          "backend.lib",
-      ]
-
-      package-data."frontend" = [ "templates/*" ]
-      package-data."frontend.static" = [ "css/*", "img/*", "js/*", "json/*" ]
-
-      dynamic."dependencies".file = "requirements.txt"
-      dynamic."optional-dependencies".dev.file = "requirements-dev.txt"
-      EOF
-    '';
-
     # 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
@@ -132,7 +82,6 @@ in
     # But using --run allows setting default vars that are  evaluated on run and not during
     # build time.
     makeWrapperArgs = [
-      "--set-default KAPOWARR_PORT 5656"
       ''
         --run "OUTDIR=\"$out\""
         --run '
@@ -149,11 +98,6 @@ in
       ''
     ];
 
-    postFixup = ''
-      # I prefer a clean name for the executable
-      mv $out/bin/Kapowarr.py $out/bin/${pname}
-    '';
-
     meta = {
       inherit (rar.meta) platforms;
       mainProgram = pname;