diff --git a/configurations/binto/modules/gpu-replay/default.nix b/configurations/binto/modules/gpu-replay/default.nix
index 352a3ec3..51f8607f 100644
--- a/configurations/binto/modules/gpu-replay/default.nix
+++ b/configurations/binto/modules/gpu-replay/default.nix
@@ -6,7 +6,7 @@
   ...
 }: let
   inherit (lib) concatStringsSep getExe removePrefix;
-  inherit (pkgs.selfPackages) gpu-screen-recorder gsr-kms-server;
+  inherit (pkgs.selfPackages) gpu-screen-recorder gsr-kms-server gsr-dbus-server;
 
   hyprPkgs = config.home-manager.users.${mainUser}.wayland.windowManager.hyprland.finalPackage;
 
@@ -47,6 +47,7 @@ in {
           pkgs.pulseaudio
           pkgs.xorg.xrandr
 
+          gsr-dbus-server
           hyprPkgs
         ];
 
diff --git a/packages/default.nix b/packages/default.nix
index 0f8883c1..861a721d 100644
--- a/packages/default.nix
+++ b/packages/default.nix
@@ -12,6 +12,9 @@
     gsr-kms-server = final.callPackage ./gpu-screen-recorder/gsr-kms-server.nix {
       inherit (inputs) gpu-screen-recorder-src;
     };
+    gsr-dbus-server = final.callPackage ./gpu-screen-recorder/gsr-dbus-server.nix {
+      inherit (inputs) gpu-screen-recorder-src;
+    };
 
     homepage = final.callPackage ./homepage {};
 
diff --git a/packages/gpu-screen-recorder/generic.nix b/packages/gpu-screen-recorder/generic.nix
index 745cefb7..8a82ec0a 100644
--- a/packages/gpu-screen-recorder/generic.nix
+++ b/packages/gpu-screen-recorder/generic.nix
@@ -2,7 +2,6 @@
   # params
   pname,
   description,
-  isKmsServer ? false,
   # nix build inputs
   lib,
   stdenv,
@@ -75,7 +74,7 @@ in
     ];
 
     fixupPhase =
-      optionalString (!isKmsServer)
+      optionalString (pname == "gsr-kms-server")
       # bash
       ''
         runHook preFixup
@@ -94,16 +93,20 @@ in
     # This is needed to force gsr to lookup kms in PATH
     # to get the security wrapper
     postFixup =
-      if isKmsServer
-      then
+      optionalString (pname == "gsr-kms-server")
         # bash
         ''
-          rm $out/bin/gpu-screen-recorder
-        ''
-      else
+          rm $out/bin/{gpu-screen-recorder,gsr-dbus-server}
+        '' +
+      optionalString (pname == "gpu-screen-recorder")
         # bash
         ''
-          rm $out/bin/gsr-kms-server
+          rm $out/bin/{gsr-kms-server,gsr-dbus-server}
+        '' +
+      optionalString (pname == "gsr-dbus-server")
+        # bash
+        ''
+          rm $out/bin/{gpu-screen-recorder,gsr-kms-server}
         '';
 
     meta = {
diff --git a/packages/gpu-screen-recorder/gsr-dbus-server.nix b/packages/gpu-screen-recorder/gsr-dbus-server.nix
new file mode 100644
index 00000000..006ad8a4
--- /dev/null
+++ b/packages/gpu-screen-recorder/gsr-dbus-server.nix
@@ -0,0 +1,14 @@
+{
+  callPackage,
+  gpu-screen-recorder-src,
+  ...
+}:
+callPackage ./generic.nix {
+  pname = "gsr-dbus-server";
+  inherit gpu-screen-recorder-src;
+
+  description = ''
+    Small program to move dbus code to a separate process to allow gpu-screen-recorder to
+    use cap_sys_nice for better recording performance on AMD.
+  '';
+}
diff --git a/packages/gpu-screen-recorder/gsr-kms-server.nix b/packages/gpu-screen-recorder/gsr-kms-server.nix
index 9496cda7..1e2d3672 100644
--- a/packages/gpu-screen-recorder/gsr-kms-server.nix
+++ b/packages/gpu-screen-recorder/gsr-kms-server.nix
@@ -5,7 +5,6 @@
 }:
 callPackage ./generic.nix {
   pname = "gsr-kms-server";
-  isKmsServer = true;
   inherit gpu-screen-recorder-src;
 
   description = ''