hyprland plugin for touch screen gestures
  • C++ 91.4%
  • Nix 3.6%
  • Shell 3%
  • Meson 2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Ching Pei Yang b1d05b8a6a
Merge pull request #356 from horriblename/wtf
attempt to make sense of crash
2026-03-25 01:46:12 +01:00
.github meta: add debugging instructions in issue template 2026-03-24 15:36:13 +01:00
docs doc: remove gdb instructions 2026-03-24 15:30:54 +01:00
examples reword broken messages 2026-03-01 20:36:38 +01:00
nix chore(nix): remove unused hyprland dep 2025-12-31 22:16:21 -05:00
scripts script/hotreload: add flag to keep lib after unload 2026-03-24 14:52:27 +01:00
src attempt to make sense of crash 2026-03-25 01:43:15 +01:00
subprojects built something i guess 2023-03-08 06:10:56 +01:00
.clang-format treewide: change format rules 2025-10-18 00:00:52 +02:00
.editorconfig editorconfig: add *.toml 2024-05-11 23:32:31 +02:00
.envrc chore: remove clangd workaround 2026-01-10 18:18:13 -05:00
.gitignore chore: add result symlinks to gitignore 2024-11-19 18:23:39 -05:00
.gitmodules built something i guess 2023-03-08 06:10:56 +01:00
CONTRIBUTING.md add CONTRIBUTING.md 2024-02-06 18:37:40 +00:00
flake.lock chore: update flake.lock 2026-02-28 14:24:30 -05:00
flake.nix chore: remove clangd workaround 2026-01-10 18:18:13 -05:00
hyprpm.toml ci: automated update of hyprpm.toml 2026-03-11 02:25:57 +00:00
LICENSE Create LICENSE 2023-05-22 01:45:45 +02:00
LICENSE.aosp add LICENSE of aosp 2025-11-15 02:41:07 +01:00
meson.build meson: fix build failures outside nix 2025-01-09 14:46:25 +01:00
meson_options.txt removed login-proxy option 2025-10-24 21:41:41 +02:00
README.md doc: fix plugin load command to use absolute path 2026-03-25 00:26:43 +01:00
VERSION bump v0.8.2 2024-10-09 16:02:39 +02:00

Hyprgrass

Gestures for your touch screen

Warning

Even though hyprgrass is mostly stable now, there used to be some bugs that render your touch device unusable until you unload the plugin/close Hyprland see issue #27, keep a keyboard in hand the first time you try this. This plugin is still in alpha, expect breaking changes!

Please open an issue if you find any bugs. Feel free to make a feature request if you have a suggestion.

Features/Roadmap

  • Workspace Swipe
  • Custom commands
  • Swipe From Edge
  • Multi-finger swipe

Installation

Dependencies

Besides Hyprland (duh), this plugin has the following dependencies:

glm

# build dependencies
meson
ninja

# extra dependencies for hyprgrass-pulse
libpulseaudio

Install via hyprpm

First, install all dependencies. Then, run these commands:

hyprpm add https://github.com/horriblename/hyprgrass
hyprpm enable hyprgrass

# optional integration with pulse-audio, see examples/hyprgrass-pulse/README.md
hyprpm enable hyprgrass-pulse

You can add exec-once = hyprpm reload -n to your hyprland config to have plugins loaded at startup. -n will make hyprpm send a notification if anything goes wrong (e.g. update needed)

see hyprland wiki for more info

Debug builds

Debug builds provide a more detailed stack trace during crashes, which can help me identify issues when reporting crashes.

git clone https://github.com/horriblename/hyprgrass
cd hyprgrass

meson setup build -Dbuildtype=debug
meson compile -Cbuild

# note that relative paths won't work
hyprctl plugin load "$PWD/build/src/libhyprgrass.so"

Attach your crash logs (in ~/.cache/hypr/hyprlandCrashReport{pid}.txt) when you report a crash.

Manual compilation

meson setup build
ninja -C build

On the meson setup step you can pass these options:

  • -Dbuildtype=debug for debug builds
  • -Dhyprgrass-pulse=true to enable building hyprgrass-pulse

Install via nix

Flakes are highly recommended (because I don't know how to do anything without them)

Put this in your flake.nix file:

{
   inputs = {
      # ...
      hyprland.url = "github:hyprwm/Hyprland";
      hyprgrass = {
         url = "github:horriblename/hyprgrass";
         inputs.hyprland.follows = "hyprland"; # IMPORTANT
      };
   };
}

and in your home-manager module:

wayland.windowManager.hyprland = {
   plugins = [
      inputs.hyprgrass.packages.${pkgs.system}.default

      # optional integration with pulse-audio, see examples/hyprgrass-pulse/README.md
      inputs.hyprgrass.packages.${pkgs.system}.hyprgrass-pulse
   ];
};

Configuration

See docs

Other touch screen goodies

Touch screen related tools I liked.

On-screen keyboards:

  • squeekboard: has auto show/hide but doesn't work well with IME (fcitx/IBus etc.)
  • wvkbd: relatively simple keyboard but still has most important features.
  • fcitx-virtual-keyboard-adapter: NOT a keyboard but an fcitx addon that auto show/hides any on-screen keyboard.

Miscellanaeious:

Acknowledgements

  • Special thanks to wayfire for the awesome wf-touch library!
  • Some parts are based on AOSP, licensed under Apache License 2.0
  • Example plugins are heavily based on Waybar, licensed under MIT License