{"id":13532530,"url":"https://github.com/Duckonaut/split-monitor-workspaces","last_synced_at":"2025-04-01T21:30:40.308Z","repository":{"id":118000231,"uuid":"607422122","full_name":"Duckonaut/split-monitor-workspaces","owner":"Duckonaut","description":"A small Hyprland plugin to provide awesome-like workspace behavior","archived":false,"fork":false,"pushed_at":"2025-03-29T11:32:07.000Z","size":100,"stargazers_count":411,"open_issues_count":6,"forks_count":51,"subscribers_count":6,"default_branch":"main","last_synced_at":"2025-04-01T07:40:26.819Z","etag":null,"topics":["awesomewm","hyprland","hyprland-plugin","workspace-management"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Duckonaut.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-02-27T23:58:46.000Z","updated_at":"2025-03-30T20:42:27.000Z","dependencies_parsed_at":null,"dependency_job_id":"e2ef25fb-9a06-4d60-8371-63407d80ce09","html_url":"https://github.com/Duckonaut/split-monitor-workspaces","commit_stats":{"total_commits":89,"total_committers":10,"mean_commits":8.9,"dds":0.449438202247191,"last_synced_commit":"212b2e0a4d94bb05ebf32dadca8e9e5ce528735e"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Duckonaut%2Fsplit-monitor-workspaces","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Duckonaut%2Fsplit-monitor-workspaces/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Duckonaut%2Fsplit-monitor-workspaces/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Duckonaut%2Fsplit-monitor-workspaces/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Duckonaut","download_url":"https://codeload.github.com/Duckonaut/split-monitor-workspaces/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246712914,"owners_count":20821817,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["awesomewm","hyprland","hyprland-plugin","workspace-management"],"created_at":"2024-08-01T07:01:11.660Z","updated_at":"2025-04-01T21:30:40.299Z","avatar_url":"https://github.com/Duckonaut.png","language":"C++","funding_links":[],"categories":["Plugins","C++"],"sub_categories":[],"readme":"# split-monitor-workspaces\n[![Build](https://github.com/Duckonaut/split-monitor-workspaces/actions/workflows/main.yml/badge.svg?branch=main)](https://github.com/Duckonaut/split-monitor-workspaces/actions/workflows/main.yml)\n[![Build on latest Hyprland release](https://github.com/Duckonaut/split-monitor-workspaces/actions/workflows/release.yml/badge.svg)](https://github.com/Duckonaut/split-monitor-workspaces/actions/workflows/release.yml)\n\n\nA small plugin to provide `awesome`/`dwm`-like behavior with workspaces: split them between monitors and provide independent numbering\n\n# Requirements\n- Hyprland \u003e= v0.38.1\n\n# Installing\nSince Hyprland plugins don't have ABI guarantees, you *should* download the Hyprland source and compile it if you plan to use plugins.\nThis ensures the compiler version is the same between the Hyprland build you're running, and the plugins you are using.\n\nThe guide on compiling and installing Hyprland manually is on the [wiki](http://wiki.hyprland.org/Getting-Started/Installation/#manual-manual-build)\n\n## Using [hyprpm](https://wiki.hyprland.org/Plugins/Using-Plugins/#hyprpm)\nHyprpm is a tool integrated with the latest Hyprland version, to use it first you'll need to add the repository and then enable the plugin\n```BASH\nhyprpm add https://github.com/Duckonaut/split-monitor-workspaces # Add the plugin repository\nhyprpm enable split-monitor-workspaces # Enable the plugin\nhyprpm reload # Reload the plugins\n```\nAdd the following in your `hyprland.conf` file to automatically load the plugin at startup:\n\n    exec-once = hyprpm reload -n\n\n## Manual installation\n\n1. Export the `HYPRLAND_HEADERS` variable to point to the root directory of the Hyprland repo\n    - `export HYPRLAND_HEADERS=\"$HOME/repos/Hyprland\"`\n2. Compile\n    - `make all`\n3. Add this line to the bottom of your hyprland config\n    - `exec-once=hyprctl plugin load \u003cABSOLUTE PATH TO split-monitor-workspaces.so\u003e`\n\n## NixOS installation\n\nWith flakes enabled, a sample installation will look like this:\n\n```nix\n# flake.nix\n{\n  inputs = {\n    nixpkgs.url = \"github:NixOS/nixpkgs/nixos-unstable\";\n    home-manager = {\n      url = \"github:nix-community/home-manager\";\n      inputs.nixpkgs.follows = \"nixpkgs\";\n    };\n\n    hyprland.url = \"github:hyprwm/Hyprland\";\n    split-monitor-workspaces = {\n      url = \"github:Duckonaut/split-monitor-workspaces\";\n      inputs.hyprland.follows = \"hyprland\"; # \u003c- make sure this line is present for the plugin to work as intended\n    };\n  };\n\n  outputs = {\n    self,\n    nixpkgs,\n    home-manager,\n    split-monitor-workspaces,\n    ...\n  }: let\n    system = \"x86_64-linux\";\n    #        ↑ Swap it for your system if needed\n    pkgs = nixpkgs.legacyPackages.${system};\n  in {\n    nixosConfigurations = {\n      yourHostname = nixpkgs.lib.nixosSystem {\n        system = \"x86_64-linux\";\n        modules = [\n          # ...\n          home-manager.nixosModules.home-manager\n          {\n            home-manager = {\n              useGlobalPkgs = true;\n              useUserPackages = true;\n              users.yourUsername = {\n                wayland.windowManager.hyprland = {\n                  # ...\n                  plugins = [\n                    split-monitor-workspaces.packages.${pkgs.system}.split-monitor-workspaces\n                  ];\n                  # ...\n                };\n              };\n            };\n          }\n        ];\n        # ...\n      };\n    };\n  };\n}\n```\n\nYou will need to have home-manager installed and configured. You use `wayland.windowManager.hyprland.plugins = [];` to add the plugin. The home-manager\nmodule will handle the rest.\n\n# Usage\n\nThe plugin provides drop-in replacements for workspace-related commands\n\n| Normal                | Replacement                   |\n|-----------------------|-------------------------------|\n| workspace             | split-workspace               |\n| movetoworkspace       | split-movetoworkspace         |\n| movetoworkspacesilent | split-movetoworkspacesilent   |\n\nAnd two new ones, to move windows between monitors\n\n| Normal                    | Arguments         |\n|---------------------------|-------------------|\n| split-cycleworkspaces     | next/prev/+1/-1    |\n| split-changemonitor       | next/prev/+1/-1    |\n| split-changemonitorsilent | next/prev/+1/-1    |\n\nIt also provides the following config values\n| Name                                                            | Type      | Default   | Description                                           |\n|-----------------------------------------------------------------|-----------|-----------|-------------------------------------------------------|\n| `plugin:split-monitor-workspaces:count`                         | int       | 10        | How many workspaces to bind to the monitor            |\n| `plugin:split-monitor-workspaces:keep_focused`                  | boolean   | 0         | Keep current workspaces focused on plugin init/reload |\n| `plugin:split-monitor-workspaces:enable_notifications`          | boolean   | 0         | Enable notifications                                  |\n| `plugin:split-monitor-workspaces:enable_persistent_workspaces`  | boolean   | 1         | Enable management of persistent workspaces. This means the plugin will at initialization create `$count` workspaces on each monitor and make them persistent. |\n\nThis plugin supports [waybar's](https://github.com/Alexays/Waybar) `hyprland/workspaces` module. You can configure it like this:\n\n```\n\"hyprland/workspaces\": {\n    \"format\": \"{icon}\",\n    \"format-icons\": {\n      \"urgent\": \"\",\n      \"active\": \"\", // focused workspace on current monitor \n      \"visible\": \"\", // focused workspace on other monitors\n      \"default\": \"\",\n      \"empty\": \"\" // persistent (created by this plugin)\n    },\n    \"all-outputs\": false // recommended\n  },\n```\n\nIf 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.\n\n### Example\n\n```\n# in your hyprland config file:\n\nplugin {\n    split-monitor-workspaces {\n        count = 5\n        keep_focused = 0\n        enable_notifications = 0\n        enable_persistent_workspaces = 1\n    }\n}\n\n$mainMod = SUPER\n# Switch workspaces with mainMod + [0-5]\nbind = $mainMod, 1, split-workspace, 1\nbind = $mainMod, 2, split-workspace, 2\nbind = $mainMod, 3, split-workspace, 3\nbind = $mainMod, 4, split-workspace, 4\nbind = $mainMod, 5, split-workspace, 5\n\n# Move active window to a workspace with mainMod + SHIFT + [0-5]\nbind = $mainMod SHIFT, 1, split-movetoworkspacesilent, 1\nbind = $mainMod SHIFT, 2, split-movetoworkspacesilent, 2\nbind = $mainMod SHIFT, 3, split-movetoworkspacesilent, 3\nbind = $mainMod SHIFT, 4, split-movetoworkspacesilent, 4\nbind = $mainMod SHIFT, 5, split-movetoworkspacesilent, 5\n```\n\n# Special thanks\n- [hyprsome](https://github.com/sopa0/hyprsome): An earlier project of similar nature\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FDuckonaut%2Fsplit-monitor-workspaces","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FDuckonaut%2Fsplit-monitor-workspaces","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FDuckonaut%2Fsplit-monitor-workspaces/lists"}