diff --git a/README.md b/README.md
index ef2dda8..3c78f0f 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,4 @@
-
-
# hy3
-
i3 / sway like layout for [hyprland](https://github.com/hyprwm/hyprland).
@@ -20,27 +17,6 @@ Additional features may be suggested in the repo issues or the [matrix room](htt
### Demo
-### Stability
-hy3 has a tagged release for each hyprland update, and master tracks hyprland's main branch.
-If you are running a release version of hyprland then use the matching tagged hy3 version.
-If you are running an untagged hyprland release then use the `master` branch of hy3.
-
-Commits are tested before pushing and will build against the hyprland release **in the flake.lock file**.
-There may be a mismatch with hyprland's main branch. If hy3 fails to build against hyprland's main branch
-please make an issue or ping me in the [hy3 matrix room](https://matrix.to/#/#hy3-support:outfoxxed.me).
-
-Tagged hy3 versions are always checked against the corresponding hyprland tag.
-
-If you encounter any bugs, please report them in the issue tracker.
-
-When reporting bugs, please include:
-- Commit hash of the version you are running.
-- Steps to reproduce the bug (if you can figure them out)
-- backtrace of the crash (if applicable)
-
-If you are too lazy to use the issue tracker, please at least ping `@outfoxxed:outfoxxed.me`
-in the [matrix room](https://matrix.to/#/#hy3-support:outfoxxed.me) with your bug information.
-
## Installation
> [!IMPORTANT]
@@ -51,6 +27,42 @@ in the [matrix room](https://matrix.to/#/#hy3-support:outfoxxed.me) with your bu
> check out the matching hy3 tag for the hyprland version.
> hy3 tags are formatted as `hl{version}` where `{version}` matches the release version of hyprland.
+### hyprpm
+Hyprland now has a dedicated plugin manager, which should be used when your package manager
+isn't capable of locking hy3 builds to the correct hyprland version.
+
+> [!IMPORTANT]
+> Make sure hyprpm is activated by putting
+>
+> ```conf
+> exec-once = hyprpm reload -n
+> ```
+>
+> in your hyprland.conf. (See [the wiki](https://wiki.hyprland.org/Plugins/Using-Plugins/) for details.)
+
+To install hy3 via hyprpm run
+
+```sh
+hyprpm add https://github.com/outfoxxed/hy3
+```
+
+To update hy3 (and all other plugins), run
+
+```sh
+hyprpm update
+```
+
+(See [the wiki](https://wiki.hyprland.org/Plugins/Using-Plugins/) for details.)
+
+> [!WARNING]
+> When you are running a tagged hyprland version hyprpm (0.34.0+) will build against hy3's
+> corrosponding release. However if you are running an untagged build (aka `-git`) hyprpm
+> will build against hy3's *latest* commit. This means **if you are running an out of date
+> untagged build of hyprland, hyprpm may pick an incompatible revision of hy3**.
+>
+> To fix this problem you will either need to update hyprland or manually build the correct
+> version of hy3.
+
### Nix
#### Hyprland home manager module
Assuming you use hyprland's home manager module, you can easily integrate hy3 by adding it to the plugins array.
@@ -111,41 +123,6 @@ wayland.windowManager.hyprland = {
};
```
-### hyprpm
-Hyprland now has a dedicated plugin manager, which should be used when your package manager
-isn't capable of locking hy3 builds to the correct hyprland version.
-
-> [!IMPORTANT]
-> Make sure hyprpm is activated by putting
->
-> ```conf
-> exec-once = hyprpm reload -n
-> ```
->
-> in your hyprland.conf. (See [the wiki](https://wiki.hyprland.org/Plugins/Using-Plugins/) for details.)
-
-To install hy3 via hyprpm run
-
-```sh
-hyprpm add https://github.com/outfoxxed/hy3
-```
-
-To update hy3 (and all other plugins), run
-
-```sh
-hyprpm update
-```
-
-(See [the wiki](https://wiki.hyprland.org/Plugins/Using-Plugins/) for details.)
-
-> [!WARNING]
-> When you are running a tagged hyprland version hyprpm (0.34.0+) will build against hy3's
-> corrosponding release. However if you are running an untagged build (aka `-git`) hyprpm
-> will build against hy3's *latest* commit. This means **if you are running an out of date
-> untagged build of hyprland, hyprpm may pick an incompatible revision of hy3**.
->
-> To fix this problem you will either need to update hyprland or manually build the correct
-> version of hy3.
### Manual
Install hyprland, including its headers and pkg-config file, then run the following commands:
@@ -160,33 +137,6 @@ The plugin will be located at `build/libhy3.so`, and you can load it normally
Note that the hyprland headers and pkg-config file **MUST be installed correctly, for the target version of hyprland**.
-### Arch (AUR)
-
-> [!NOTE]
-> This method of installation is deprecated and you should use *hyprpm* instead,
-> as it is simpler and less error prone.
-
-> [!CAUTION]
-> Pacman is not very reliable when it comes to building packages in the correct order.
-> If you get a notification saying *hy3 was compiled for a different version of hyprland*
-> then your packages likely updated in the wrong order, or you have hyprland headers in `/usr/local`.
->
-> To fix this, remove `/usr/include/hyprland`, `/usr/local/include/hyprland`, `/usr/share/pkgconfig/hyprland.pc` and `/usr/local/share/pkgconfig/hyprland.pc`,
-> then reinstall hyprland and hy3.
->
-> If you know how to fix this please open an issue or pr, or message `@outfoxxed:outfoxxed.me` in the [matrix room](https://matrix.to/#/#hy3-support:outfoxxed.me).
-
-hy3 stable (for arch's `hyprland` package) is availible on the AUR as [hy3](https://aur.archlinux.org/packages/hy3).
-
-hy3-git (for `hyprland-git` on the AUR, unofficial package) is availible on the AUR as [hy3-git](https://aur.archlinux.org/packages/hy3-git).
-
-Both packages install hy3 as `/usr/lib/libhy3.so`.
-You can enable it in your hyprland configuration by adding the following line anywhere in your `hyprland.conf`
-
-```conf
-plugin = /usr/lib/libhy3.so
-```
-
## Configuration
> [!IMPORTANT]
@@ -224,9 +174,26 @@ plugin {
# 2 = keep the nested group only if its parent is a tab group
node_collapse_policy = # default: 2
+ # policy controlling what windows will be focused using `hy3:movefocused`
+ # 0 = focus strictly by layout, don't attempt to skip windows that are obscured by another one
+ # 1 = do not focus windows which are entirely obscured by a floating window
+ # 2 = when `hy3:movefocus` layer is `samelayer` then use focus policy 0 (focus strictly by layout)
+ # when `hy3:movefocus` layer is `all` then use focus policy 1 (don't focus obscured windows)
+ focus_obscured_windows_policy = # default: 2
+
+ # which layers should be considered when changing focus with `hy3:movefocus`?
+ # samelayer = only focus windows on same layer as the source window (floating or tiled)
+ # all = choose the closest window irrespective of the layout
+ # tiled = only choose tiled windows, not especially useful but permitted by parser
+ # floating = only choose floating windows, not especially useful but permitted by parser
+ default_movefocus_layer = # default: `samelayer`
+
# offset from group split direction when only one window is in a group
group_inset = # default: 10
+ # scale factor of windows on the special workspace
+ special_scale_factor = # default: 0.8
+
# if a tab group will automatically be created for the first window spawned in a workspace
tab_first_window =
@@ -344,8 +311,11 @@ plugin {
- `require_hovered` - affect the tab group under the mouse. do nothing if none are hovered.
- `wrap` - wrap to the opposite size of the tab bar if moving off the end
- `hy3:debugnodes` - print the node tree into the hyprland log
+ - `hy3:resizenode, ` - like Hyprland `resizeactive`, but applied to the whole focused group instead of just a window
- :warning: **ALPHA QUALITY** `hy3:setswallow, ` - set the containing node's window swallow state
- :warning: **ALPHA QUALITY** `hy3:expand, ` - expand the current node to cover other nodes
- `expand` - expand by one node
- `shrink` - shrink by one node
- `base` - undo all expansions
+
+
diff --git a/hyprpm.toml b/hyprpm.toml
index 09b5f96..d5b8bc7 100644
--- a/hyprpm.toml
+++ b/hyprpm.toml
@@ -1,6 +1,6 @@
[repository]
name = "hy3"
-authors = ["outfoxxed"]
+authors = ["outfoxxed", "DRAGONTOS"]
commit_pins = [
["03ebbe18ed8517ee22591eac82cd54322f42cb7d", "2f28dc810c0e1f42763a1f14fb011c4fce6db8be"],
["84ab8d11e8951a6551d1e1bf87796a8589da6d47", "d3e20856a9896f28b506195b31407eddc6df2e20"],
@@ -10,7 +10,7 @@ commit_pins = [
[hy3]
description = "i3 like tiling for hyprland"
-authors = ["outfoxxed"]
+authors = ["outfoxxed", "DRAGONTOS"]
output = "build/libhy3.so"
build = [
"cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -B build",
diff --git a/src/Hy3Layout.cpp b/src/Hy3Layout.cpp
index b1f1773..e73087a 100644
--- a/src/Hy3Layout.cpp
+++ b/src/Hy3Layout.cpp
@@ -1541,6 +1541,13 @@ void Hy3Layout::applyNodeDataToWindow(Hy3Node* node, bool no_animation) {
calcPos = calcPos + reserved_area.topLeft;
calcSize = calcSize - (reserved_area.topLeft + reserved_area.bottomRight);
+ if (g_pCompositor->isWorkspaceSpecial(window->m_iWorkspaceID)) {
+ // adjust for special workspaces
+ static const auto scalefactor = ConfigValue("plugin:hy3:special_scale_factor");
+ calcPos = calcPos + (calcSize - calcSize * *scalefactor) / 2.f;
+ calcSize = calcSize * *scalefactor;
+ }
+
CBox wb = {calcPos, calcSize};
wb.round();
diff --git a/src/main.cpp b/src/main.cpp
index 7b06f1b..ec90526 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -37,6 +37,7 @@ APICALL EXPORT PLUGIN_DESCRIPTION_INFO PLUGIN_INIT(HANDLE handle) {
CONF("no_gaps_when_only", INT, 0);
CONF("node_collapse_policy", INT, 2);
CONF("group_inset", INT, 10);
+ CONF("special_scale_factor", FLOAT, 0.8);
CONF("tab_first_window", INT, 0);
// tabs