diff --git a/flake.lock b/flake.lock index baa63648..95a0c215 100644 --- a/flake.lock +++ b/flake.lock @@ -876,6 +876,26 @@ "type": "github" } }, + "hyprgrass": { + "inputs": { + "hyprland": [ + "hyprland" + ] + }, + "locked": { + "lastModified": 1718401180, + "narHash": "sha256-DfM2BqnFW48NlHkBfC7ErHgK7WHlOgiiE+aFetN/yJ4=", + "owner": "horriblename", + "repo": "hyprgrass", + "rev": "736119f828eecaed2deaae1d6ff1f50d6dabaaba", + "type": "github" + }, + "original": { + "owner": "horriblename", + "repo": "hyprgrass", + "type": "github" + } + }, "hyprland": { "inputs": { "hyprcursor": "hyprcursor", @@ -1991,6 +2011,7 @@ "headscale": "headscale", "home-manager": "home-manager", "hypr-official-plugins": "hypr-official-plugins", + "hyprgrass": "hyprgrass", "hyprland": "hyprland", "jellyfin-flake": "jellyfin-flake", "jellyfin-ultrachromic-src": "jellyfin-ultrachromic-src", diff --git a/flake.nix b/flake.nix index 8e06da20..07e1832f 100644 --- a/flake.nix +++ b/flake.nix @@ -116,6 +116,12 @@ repo = "hyprland-plugins"; type = "github"; }; + hyprgrass = { + inputs.hyprland.follows = "hyprland"; + owner = "horriblename"; + repo = "hyprgrass"; + type = "github"; + }; hyprland = { inputs.nixpkgs.follows = "nixpkgs"; submodules = true; diff --git a/inputs.nix b/inputs.nix index 12b3ed03..ed3a97e6 100644 --- a/inputs.nix +++ b/inputs.nix @@ -143,6 +143,11 @@ let repo = "Hyprspace"; }; + hyprgrass = mkHyprDep { + owner = "horriblename"; + repo = "hyprgrass"; + }; + grim-hyprland = mkDep { owner = "eriedaberrie"; repo = "grim-hyprland"; diff --git a/modules/hyprland/default.nix b/modules/hyprland/default.nix index 0ebb254c..f8e27403 100644 --- a/modules/hyprland/default.nix +++ b/modules/hyprland/default.nix @@ -65,6 +65,7 @@ in { # HOME-MANAGER CONFIG home-manager.users.${mainUser} = { imports = [ + ./hyprgrass.nix ./hyprexpo.nix # ./Hyprspace.nix ./inputs.nix diff --git a/modules/hyprland/hyprgrass.nix b/modules/hyprland/hyprgrass.nix new file mode 100644 index 00000000..78cf7e0f --- /dev/null +++ b/modules/hyprland/hyprgrass.nix @@ -0,0 +1,42 @@ +{ + osConfig, + hyprgrass, + lib, + pkgs, + ... +}: let + inherit (lib) optionalAttrs; + + isTouchscreen = osConfig.hardware.sensor.iio.enable; +in + optionalAttrs isTouchscreen { + wayland.windowManager.hyprland = { + plugins = [hyprgrass.packages.${pkgs.system}.default]; + + settings = { + plugin = { + touch_gestures = { + # The default sensitivity is probably too low on tablet screens, + # I recommend turning it up to 4.0 + sensitivity = 4.0; + + # must be >= 3 + workspace_swipe_fingers = 3; + + experimental = { + # send proper cancel events to windows instead of hacky touch_up events, + # NOT recommended as it crashed a few times, once it's stabilized I'll make it the default + send_cancel = 0; + }; + }; + }; + + gestures = { + workspace_swipe = true; + workspace_swipe_fingers = 3; + workspace_swipe_touch = false; + workspace_swipe_cancel_ratio = 0.15; + }; + }; + }; + } diff --git a/modules/hyprland/inputs.nix b/modules/hyprland/inputs.nix index f336d11e..a1f54720 100644 --- a/modules/hyprland/inputs.nix +++ b/modules/hyprland/inputs.nix @@ -44,13 +44,6 @@ in { }; }; - gestures = { - workspace_swipe = true; - workspace_swipe_fingers = 3; - workspace_swipe_touch = true; - workspace_swipe_cancel_ratio = 0.15; - }; - bind = [ ",XF86AudioPlay, exec, playerctl play-pause" ",XF86AudioStop, exec, playerctl stop"