diff --git a/home/sessions/hyprland/default.nix b/home/sessions/hyprland/default.nix index a390317..c82b045 100644 --- a/home/sessions/hyprland/default.nix +++ b/home/sessions/hyprland/default.nix @@ -2,6 +2,8 @@ let cfg = config.nixfiles.sessions.hyprland; mkd = lib.mkDefault; + hyprland-pkg = config.wayland.windowManager.hyprland.finalPackage; + terminal = "${pkgs.kitty}/bin/kitty"; files = "${pkgs.dolphin}/bin/dolphin"; rofi = "${pkgs.rofi-wayland}/bin/rofi"; @@ -10,6 +12,8 @@ let polkit-agent = "${pkgs.polkit-kde-agent}/libexec/polkit-kde-authentication-agent-1"; grimblast = "${inputs.hyprwm-contrib.packages.${pkgs.system}.grimblast}/bin/grimblast"; + hypr-dispatcher = "${pkgs.callPackage ./dispatcher { hyprland = hyprland-pkg; }}/bin/hypr-dispatcher"; + # https://github.com/flatpak/xdg-desktop-portal-gtk/issues/440#issuecomment-1900520919 xdpg-workaround = pkgs.writeShellScript "xdg-desktop-portal-gtk-workaround" '' @@ -56,6 +60,7 @@ in wev dunst pkgs.brightnessctl + hypr-dispatcher ]; wayland.windowManager.hyprland = { diff --git a/home/sessions/hyprland/dispatcher/default.nix b/home/sessions/hyprland/dispatcher/default.nix new file mode 100644 index 0000000..f3e23c3 --- /dev/null +++ b/home/sessions/hyprland/dispatcher/default.nix @@ -0,0 +1,19 @@ +{ lib, + stdenvNoCC, + socat, + coreutils, + hyprland, + makeShellWrapper }: +let + wrappedPath = lib.makeBinPath [ coreutils socat hyprland ]; +in +stdenvNoCC.mkDerivation { + name = "hyprland-dispatcher"; + phases = [ "installPhase" ]; + nativeBuildInputs = [ makeShellWrapper ]; + src = ./.; + installPhase = '' + install -Dm555 $src/dispatcher.sh $out/bin/hypr-dispatcher + wrapProgramShell $out/bin/hypr-dispatcher --prefix PATH : "${wrappedPath}" + ''; +} diff --git a/home/sessions/hyprland/dispatcher/dispatcher.sh b/home/sessions/hyprland/dispatcher/dispatcher.sh new file mode 100755 index 0000000..94eab15 --- /dev/null +++ b/home/sessions/hyprland/dispatcher/dispatcher.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash + +state_gd_rebind=0 + +log() { + echo "$@" >&2 +} + +handle_active_window() { + case "$1" in + # geometry dash + *'>>'steam_app_322170,*) log matched Geometry Dash ;; + esac +} + +handle() { + case "$1" in + activewindow*) handle_active_window "$1" ;; + esac +}; + +socat - "UNIX-CONNECT:/tmp/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock" | \ + while read -r line ; do handle "$line"; done