Find a file
Ralph Zhou c8b2be3502
Hyprscrolling: feat: Add column movement commands (swapcol, movecoltoworkspace) (#481)
* hyprscrolling: feat(layout) Add `swapcol` command for cyclic column swapping

This commit introduces a new layout message, `swapcol`, to allow users
to efficiently reorder entire columns within the scrolling layout like
niri.

The `swapcol` command accepts two arguments:
- `l`: Swaps the current column with the one to its left.
- `r`: Swaps the current column with the one to its right.

A key feature of this implementation is its cyclic (wrap-around)
behavior. When the leftmost column is swapped left, it moves to the end
of the list. Similarly, swapping the rightmost column right moves it to
the beginning. This provides a fluid and powerful way to rearrange the
workspace without getting stuck at the edges.

The README has also been updated to document this new functionality.

Example usage in `hyprland.conf`:
# Swap current column with the one to the left
bind = $mainMod, H, layoutmsg, swapcol l
# Swap current column with the one to the right
bind = $mainMod, L, layoutmsg, swapcol r

* Hyprscrolling: feat(layout) feat(layout): Add `movecoltoworkspace` command

This commit introduces the `movecoltoworkspace` layout message, enabling
users to move an entire column of windows to another workspace with a
single command.

This feature preserves the internal layout, window arrangement, and
relative sizes within the column upon moving. It robustly handles moving
to any workspace, including empty ones, by ensuring the target workspace
is set to the 'scrolling' layout before the move.

This addresses a key aspect of the feature request in issue #431,
specifically the need for commands to move columns between workspaces.

The README has been updated to document this new command.

Example usage:
# Move current column to workspace 2
bind = $mainMod, SHIFT, 2, layoutmsg, movecoltoworkspace 2
# Move current column to the next workspace
bind = $mainMod, SHIFT, L, layoutmsg, movecoltoworkspace +1

* Hyprscrolling: fix: remove `{}` from short `if, for`s

* Hyprscrolling: style: remove `{}` for short `if`. Add it back from `for`.

* Hyprscrolling: clang-format
2025-09-20 17:33:04 +02:00
.github/workflows CI/Nix: add cache-nix-action 2025-06-20 01:28:32 +03:00
borders-plus-plus all: chase hyprland opengl render fn changes (#437) 2025-08-01 13:53:41 +02:00
csgo-vulkan-fix csgo-vk-fix: allow more configs 2025-07-30 18:51:27 +02:00
hyprbars all: chase hyprland (#462) 2025-08-29 11:58:09 +02:00
hyprexpo expo: improve closing gesture 2025-09-13 00:59:41 +01:00
hyprfocus all: chase hyprland (#462) 2025-08-29 11:58:09 +02:00
hyprscrolling Hyprscrolling: feat: Add column movement commands (swapcol, movecoltoworkspace) (#481) 2025-09-20 17:33:04 +02:00
hyprtrails all: chase hyprland opengl render fn changes (#437) 2025-08-01 13:53:41 +02:00
hyprwinwrap enhance: official plugins links 2025-07-20 19:17:44 +03:00
xtra-dispatchers enhance: official plugins links 2025-07-20 19:17:44 +03:00
.clang-format Add clang-format 2023-02-28 12:22:29 +00:00
.gitignore flake: overlay: move packages to hyprlandPlugins namespace (#180) 2024-06-11 16:05:05 +03:00
flake.lock all: chase hyprland (#462) 2025-08-29 11:58:09 +02:00
flake.nix hyprfocus: fix nix 2025-06-20 11:41:32 +03:00
hyprload.toml hyprload: add hyprwinwrap manifest 2023-11-25 01:48:36 +00:00
hyprpm.toml hyprpm: add pins for 0.50.x 2025-08-01 19:16:34 +02:00
LICENSE Initial commit 2023-02-27 14:01:11 +00:00
README.md README: Explain hyprpm version pinning (#468) 2025-09-01 21:52:15 +02:00

hyprland-plugins

This repo houses official plugins for Hyprland.

Plugin list

  • borders-plus-plus -> adds one or two additional borders to windows
  • csgo-vulkan-fix -> fixes custom resolutions on CS:GO with -vulkan
  • hyprbars -> adds title bars to windows
  • hyprexpo -> adds an expo-like workspace overview
  • hyprfocus -> flashfocus for hyprland
  • hyprscrolling -> adds a scrolling layout to hyprland
  • hyprtrails -> adds smooth trails behind moving windows
  • hyprwinwrap -> clone of xwinwrap, allows you to put any app as a wallpaper
  • xtra-dispatchers -> adds some new dispatchers

Install

Important

hyprland-plugins only officially supports installation via hyprpm. hyprpm automatically detects your hyprland version & installs only the corresponding "pinned" release of hyprland-plugins. If you want the latest commits to hyprland-plugins, you need to use hyprland-git.

Install with hyprpm

To install these plugins, from the command line run:

hyprpm update

Then add this repository:

hyprpm add https://github.com/hyprwm/hyprland-plugins

then enable the desired plugin with

hyprpm enable <plugin-name>

See the respective README's in the subdirectories for configuration options.

See the plugins wiki and hyprpm -h for more details.

Install on Nix

To use these plugins, it's recommended that you are already using the Hyprland flake. First, add this flake to your inputs:

inputs = {
  # ...
  hyprland.url = "github:hyprwm/Hyprland";
  hyprland-plugins = {
    url = "github:hyprwm/hyprland-plugins";
    inputs.hyprland.follows = "hyprland";
  };

  # ...
};

The inputs.hyprland.follows guarantees the plugins will always be built using your locked Hyprland version, thus you will never get version mismatches that lead to errors.

After that's done, you can use the plugins with the Home Manager module like this:

{inputs, pkgs, ...}: {
  wayland.windowManager.hyprland = {
    enable = true;
    # ...
    plugins = [
      inputs.hyprland-plugins.packages.${pkgs.system}.hyprbars
      # ...
    ];
  };
}

If you don't use Home Manager:

{ lib, pkgs, inputs, ... }:
with lib; let
  hyprPluginPkgs = inputs.hyprland-plugins.packages.${pkgs.system};
  hypr-plugin-dir = pkgs.symlinkJoin {
    name = "hyrpland-plugins";
    paths = with hyprPluginPkgs; [
      hyprexpo
      #...plugins
    ];
  };
in
{
  environment.sessionVariables = { HYPR_PLUGIN_DIR = hypr-plugin-dir; };
}

And in hyprland.conf

# load all the plugins you installed
exec-once = hyprctl plugin load "$HYPR_PLUGIN_DIR/lib/libhyprexpo.so"

Contributing

Feel free to open issues and MRs with fixes.

If you want your plugin added here, contact vaxry beforehand.