From 510d2360dfe904bea47a8f1a164d509ff08f0f47 Mon Sep 17 00:00:00 2001
From: Zynh Ludwig <zynh0722@gmail.com>
Date: Mon, 3 Feb 2025 20:10:02 -0800
Subject: [PATCH] uhk-agent: custom package

---
 builders.nix               | 13 +++++++
 pkgs/default.nix           |  1 +
 pkgs/uhk-agent/default.nix | 79 ++++++++++++++++++++++++++++++++++++++
 3 files changed, 93 insertions(+)
 create mode 100644 pkgs/uhk-agent/default.nix

diff --git a/builders.nix b/builders.nix
index 52bdc14..23186ff 100644
--- a/builders.nix
+++ b/builders.nix
@@ -39,6 +39,19 @@ let
           };
         });
       })
+
+      (final: prev: {
+        uhk-agent = prev.uhk-agent.overrideAttrs (old: rec {
+          pname = "uhk-agent";
+          version = "5.0.2";
+
+          src = prev.fetchurl {
+            url = "https://github.com/UltimateHackingKeyboard/agent/releases/download/v${version}/UHK.Agent-${version}-linux-x86_64.AppImage";
+            name = "${pname}-${version}.AppImage";
+            sha256 = "sha256-A0ALw5noXeeCGvWEFJMyYeNb9mMHyr3DC3T0yK1MQoM=";
+          };
+        });
+      })
     ];
   });
 
diff --git a/pkgs/default.nix b/pkgs/default.nix
index f34c8fe..5bc1938 100644
--- a/pkgs/default.nix
+++ b/pkgs/default.nix
@@ -11,4 +11,5 @@ in
   zenBrowser = callDefaultPackage ./zenBrowser;
   rose-pine-grub = callDefaultPackage ./rosePineGrub;
   dwm-msg = callDefaultPackage ./dwm-msg;
+  uhk-agent = callDefaultPackage ./uhk-agent;
 }
diff --git a/pkgs/uhk-agent/default.nix b/pkgs/uhk-agent/default.nix
new file mode 100644
index 0000000..d708551
--- /dev/null
+++ b/pkgs/uhk-agent/default.nix
@@ -0,0 +1,79 @@
+{ lib
+, stdenv
+, stdenvNoCC
+, fetchurl
+, appimageTools
+, electron
+, makeWrapper
+, asar
+, autoPatchelfHook
+, libusb1
+}:
+
+let
+  pname = "uhk-agent";
+  version = "5.0.2";
+
+  src = fetchurl {
+    url = "https://github.com/UltimateHackingKeyboard/agent/releases/download/v${version}/UHK.Agent-${version}-linux-x86_64.AppImage";
+    name = "${pname}-${version}.AppImage";
+    sha256 = "sha256-A0ALw5noXeeCGvWEFJMyYeNb9mMHyr3DC3T0yK1MQoM=";
+  };
+
+  appimageContents = appimageTools.extract {
+    inherit pname version src;
+  };
+in
+stdenvNoCC.mkDerivation {
+  inherit pname version src;
+
+  dontUnpack = true;
+
+  nativeBuildInputs = [
+    asar
+    makeWrapper
+    autoPatchelfHook
+  ];
+
+  buildInputs = [
+    (lib.getLib stdenv.cc.cc)
+    libusb1
+  ];
+
+  autoPatchelfIgnoreMissingDeps = [
+    "libc.musl-x86_64.so.1"
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p "$out"/{opt,share/applications}
+
+    cp -r --no-preserve=mode "${appimageContents}/resources"        "$out/opt/${pname}"
+    cp -r --no-preserve=mode "${appimageContents}/usr/share/icons"  "$out/share/icons"
+    cp -r --no-preserve=mode "${appimageContents}/${pname}.desktop" "$out/share/applications/${pname}.desktop"
+
+    substituteInPlace "$out/share/applications/${pname}.desktop" \
+      --replace "Exec=AppRun" "Exec=${pname}"
+
+    asar extract "$out/opt/${pname}/app.asar" "$out/opt/${pname}/app.asar.unpacked"
+    rm           "$out/opt/${pname}/app.asar"
+
+    makeWrapper "${electron}/bin/electron" "$out/bin/${pname}" \
+      --add-flags "$out/opt/${pname}/app.asar.unpacked" \
+      --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations --enable-wayland-ime=true}}" \
+      --set-default ELECTRON_IS_DEV 0 \
+      --inherit-argv0
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Agent is the configuration application of the Ultimate Hacking Keyboard";
+    homepage = "https://github.com/UltimateHackingKeyboard/agent";
+    license = licenses.unfreeRedistributable;
+    maintainers = with maintainers; [ ngiger nickcao ];
+    platforms = [ "x86_64-linux" ];
+    sourceProvenance = [ lib.sourceTypes.binaryNativeCode ];
+  };
+}