# hy3 i3 / sway like layout for [hyprland](https://github.com/hyprwm/hyprland). ### Features - [x] i3 like tiling - [x] Window splits - [x] Window movement - [x] Window resizing - [x] Selecting a group of windows at once (and related movement) - [ ] Tabbed groups - [x] Usable - [x] Tab bar - [x] Animations - [x] Colors - [x] Window Titles - [ ] No window shifitng bugs - [ ] Some convenience dispatchers not found in i3 or sway ### Stability As of now hy3 is stable enough to use normally. If you encounter any crashes or bugs please report them in the issue tracker. When reporting bugs, please include: - Commit hash of the version you are running. - Steps to reproduce (if you can figure them out) - backtrace of the crash If you don't know how to reproduce it or can't, or you can't take a backtrace please still report the issue. ## Configuration Set your `general:layout` to `hy3` in hyprland.conf. hy3 requires using a few custom dispatchers for normal operation. In your hyprland config replace the following dispatchers: - `movefocus` -> `hy3:movefocus` - `movewindow` -> `hy3:movewindow` You can use `hy3:makegroup` to create a new split. ### Config fields ```conf plugin { hy3 { # disable gaps when only one window is onscreen no_gaps_when_only = # tab group settings tabs { # height of the tab bar height = # padding between the tab bar and its focused node padding = # the tab bar should animate in/out from the top instead of below the window from_top = # render the window title on the bar render_text = # rounding of tab bar corners rounding = # font to render the window title with text_font = # height of the window title text_height = # left padding of the window title text_padding = # active tab bar segment color col.active = # urgent tab bar segment color col.urgent = # inactive tab bar segment color col.inactive = # active tab bar text color col.text.active = # urgent tab bar text color col.text.urgent = # inactive tab bar text color col.text.inactive = } } } ``` ### Dispatcher list - `hy3:makegroup, ` - make a vertical / horizontal split or tab group - `hy3:movefocus, ` - move the focus left, up, down, or right - `hy3:movewindow, [, once]` - move a window left, up, down, or right - `once` - only move directly to the neighboring group, without moving into any of its subgroups - `hy3:raisefocus` - raise the active focus one level - `hy3:focustab` - focus a tab under the mouse (bind to `mouse:272` for left click) - `hy3:debugnodes` - print the node tree into the hyprland log ## Installing ### Nix #### Using the home-manager module Assuming you use hyprland's home manager module, you can easily integrate hy3 by adding it to the plugins array. ```nix # flake.nix { inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; home-manager = { url = "github:nix-community/home-manager"; inputs.nixpkgs.follows = "nixpkgs"; }; hyprland.url = "github:hyprwm/Hyprland"; hy3 = { url = "github:outfoxxed/hy3"; inputs.hyprland.follows = "hyprland"; }; }; outputs = { nixpkgs, home-manager, hyprland, hy3, ... }: { homeConfigurations."user@hostname" = home-manager.lib.homeManagerConfiguration { pkgs = nixpkgs.legacyPackages.x86_64-linux; modules = [ hyprland.homeManagerModules.default { wayland.windowManager.hyprland = { enable = true; plugins = [ hy3.packages.x86_64-linux.hy3 ]; }; } ]; }; }; } ``` #### Manually (Nix) hy3's binary is availible as `${hy3.packages..hy3}/lib/libhy3.so`, so you can also directly use it in your hyprland config like so: ```nix # ... wayland.windowManager.hyprland = { # ... extraConfig = '' plugin = ${hy3.packages.x86_64-linux.hy3}/lib/libhy3.so ''; }; ``` ### [Hyprload](https://github.com/Duckonaut/hyprload) Add an entry to your hyprload.toml like so: ```toml plugins = [ # ... "outfoxxed/hy3", # ... ] ``` ### Manual Install hyprland, then run the following commands: ```sh cmake -DCMAKE_BUILD_TYPE=Debug -B build cmake --build build ``` The plugin will be located at `build/libhy3.so`, and you can load it normally (See [the hyprland wiki](https://wiki.hyprland.org/Plugins/Using-Plugins/#installing--using-plugins) for details.)