split-monitor-workspaces/README.md

151 lines
5.3 KiB
Markdown
Raw Normal View History

2023-02-28 00:58:50 +01:00
# split-monitor-workspaces
A small plugin to provide `awesome`/`dwm`-like behavior with workspaces: split them between monitors and provide independent numbering
# Requirements
- Hyprland >= v0.31.0
2023-02-28 00:58:50 +01:00
# Installing
Since Hyprland plugins don't have ABI guarantees, you *should* download the Hyprland source and compile it if you plan to use plugins.
This ensures the compiler version is the same between the Hyprland build you're running, and the plugins you are using.
The guide on compiling and installing Hyprland manually is on the [wiki](http://wiki.hyprland.org/Getting-Started/Installation/#manual-manual-build)
## Using [hyprload](https://github.com/Duckonaut/hyprload)
2023-04-03 12:12:43 +02:00
Add the line `"Duckonaut/split-monitor-workspaces",` to your `hyprload.toml` config, like this
```toml
plugins = [
"Duckonaut/split-monitor-workspaces",
]
```
Then update via the `hyprload,update` dispatcher
2023-02-28 00:58:50 +01:00
## Manual installation
2023-02-28 00:58:50 +01:00
1. Export the `HYPRLAND_HEADERS` variable to point to the root directory of the Hyprland repo
- `export HYPRLAND_HEADERS="$HOME/repos/Hyprland"`
2. Compile
- `make all`
3. Add this line to the bottom of your hyprland config
- `exec-once=hyprctl plugin load <ABSOLUTE PATH TO split-monitor-workspaces.so>`
## NixOS installation
With flakes enabled, a sample installation will look like this:
```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";
split-monitor-workspaces = {
url = "github:Duckonaut/split-monitor-workspaces";
inputs.hyprland.follows = "hyprland"; # <- make sure this line is present for the plugin to work as intended
};
};
outputs = {
self,
nixpkgs,
home-manager,
split-monitor-workspaces,
...
}: let
system = "x86_64-linux";
# ↑ Swap it for your system if needed
pkgs = nixpkgs.legacyPackages.${system};
in {
nixosConfigurations = {
yourHostname = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [
# ...
home-manager.nixosModules.home-manager
{
home-manager = {
useGlobalPkgs = true;
useUserPackages = true;
users.yourUsername = {
wayland.windowManager.hyprland = {
# ...
plugins = [
split-monitor-workspaces.packages.${pkgs.system}.split-monitor-workspaces
];
# ...
};
};
};
}
];
# ...
};
};
};
}
```
You will need to have home-manager installed and configured. You use `wayland.windowManager.hyprland.plugins = [];` to add the plugin. The home-manager
module will handle the rest.
2023-02-28 00:58:50 +01:00
# Usage
2023-02-28 00:58:50 +01:00
The plugin provides drop-in replacements for workspace-related commands
2023-02-28 00:58:50 +01:00
| Normal | Replacement |
|-----------------------|-------------------------------|
| workspace | split-workspace |
| movetoworkspace | split-movetoworkspace |
| movetoworkspacesilent | split-movetoworkspacesilent |
2023-09-13 17:51:22 +02:00
And two new ones, to move windows between monitors
| Normal | Arguments |
|---------------------------|-------------------|
| split-changemonitor | next/prev/+1/1 |
| split-changemonitorsilent | next/prev/+1/1 |
2023-02-28 00:58:50 +01:00
It also provides the following config values
2023-09-12 21:21:55 +02:00
| Name | Type | Default | Description |
|--------------------------------------------------|-----------|-----------|-------------------------------------------------------|
| `plugin:split-monitor-workspaces:count` | int | 10 | How many workspaces to bind to the monitor |
| `plugin:split-monitor-workspaces:keep_focused` | boolean | 0 | Keep current workspaces focused on plugin init/reload |
2023-02-28 00:58:50 +01:00
Keep in mind that if you're using, for example, the `wlr/workspaces` widgets in [waybar](https://github.com/Alexays/Waybar), this will require a change to your config. You should set `all-outputs` to `false`, and adjust the icon mapping.
If your workspace-per-monitor count is 10, the first monitor will have workspaces 1-10, the second 11-20 and so on. They will be accessed via numbers 1-10 while your mouse is on a given monitor.
2023-06-17 12:13:54 +02:00
### Example
```
# in your hyprland config file:
plugin {
split-monitor-workspaces {
count = 5
}
}
$mainMod = SUPER
# Switch workspaces with mainMod + [0-5]
bind = $mainMod, 1, split-workspace, 1
bind = $mainMod, 2, split-workspace, 2
bind = $mainMod, 3, split-workspace, 3
bind = $mainMod, 4, split-workspace, 4
bind = $mainMod, 5, split-workspace, 5
# Move active window to a workspace with mainMod + SHIFT + [0-5]
bind = $mainMod SHIFT, 1, split-movetoworkspacesilent, 1
bind = $mainMod SHIFT, 2, split-movetoworkspacesilent, 2
bind = $mainMod SHIFT, 3, split-movetoworkspacesilent, 3
bind = $mainMod SHIFT, 4, split-movetoworkspacesilent, 4
bind = $mainMod SHIFT, 5, split-movetoworkspacesilent, 5
```
2023-02-28 00:58:50 +01:00
# Special thanks
- [hyprsome](https://github.com/sopa0/hyprsome): An earlier project of similar nature