Git Product home page Git Product logo

hy3's People

Contributors

andresilva avatar arjun31415 avatar eriedaberrie avatar globin avatar its-darsh avatar jbeich avatar olekoop avatar outfoxxed avatar q234rty avatar rehanzo avatar sant0s12 avatar sekhat avatar talpadk avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

hy3's Issues

Wayland `activate` calls to focus non-visible grouped windows doesn't work

Appreciate that's a long title.

Current behaviour
In effect, trying to activate (focus) a window that is part of a tabbed group, but not the currently active group tab, currently does nothing.

Expected behaviour
Focusing a window should cause it to become the active group tab, and bring it to focus.

Repro steps

  • Place two or more windows in a hy3 tabbed group
  • Attempt to focus a non-active window in the group (ie via a bar's launcher module)
  • Observe nothing happening

Thanks for the plugin btw, this is the only real problem I've noticed and it's so far been a great experience.

Wezterm extremely slow to open with hy3 layout active

Hey team, great plugin here! Finally have some of the group features back that I loved from i3!

My only complaint so far is that my terminal of choice, wezterm, takes extremely long to open on a new workspace. So oddly, once I have wezterm open once on a workspace, it'll open almost immediately just like any other window. However, if there are no other wezterm windows open yet on the particular workspace, then it takes up to 1 minute for the window to open.

Anything I can do to help debug here? I do not see this behaviour with other terminal emulators like Alacritty.

I'm running hyprland-git and hy3-git from the AUR with the latest builds as of today (07.12.23 ~19:19 UTC).

i3 resize mode

Would it be possible to implement i3 like resizing? In i3 it works like, enable resizing mode, resize the focussed window with arrow keys, hit escape to exit resizing mode. Not sure if that's in the scope of this project.

corrupted tab decorations after shutting down monitor

After shutting down the monitor and then turning it back on, all workspaces will include tab decorations (assuming there was any tabbed group before shutting down the monitor). The decorations go away after switching to the workspace that does include a tabbed group.

How to reproduce:

  1. Create a tabbed group on workspace 1
  2. Open a window on workspace 2
  3. Turn off/on monitor (assuming there is only monitor)
  4. Workspace 2 with a single window should now have the same tab decorations as workspace 1

Corrupted tab decorations related to Firefox

hyprland-nvidia-git v0.30.0-40-g9ec656a3
hy3 0.30 downloaded from the releases page and built from source
default hy3 config copied from the readme

Tab decorations in tab bars become corrupted when 1) the last opened (or focused?) window in a group is Firefox AND 2) the focus is on/inside the group.

to reproduce:

  • open a ff window, make it a tabs group
  • open a new ff window, see defects
  • focus on a window outside of the tabs group, defects gone
  • focus back in, defects are back
  • open anything other than ff in a new tab, defects are gone
  • open yet another tab, again with ff, defects are back

edit: I noticed it only takes place if window titles' display is enabled. when it's turned off it's all good.

`resizeactive` does not always work

So, in my config i have the following:

bind = $mainMod SHIFT, s, resizeactive, -80 0
bind = $mainMod SHIFT, w, resizeactive, 80 0

If i press the bind with s it works, but not with w.
I have to switch to the other window for it to work.

hy3 on AUR compatibility with hyprland-nvidia

Installing hy3 with AUR when hyprland-nvidia is installed shows hyprland and hyprland-nvidia being in conflict. It is possible to remedy this without uninstalling hyprland-nvidia, or am I forced to reconfigure my setup?

Hyprland crash after waking up out of suspend

Sometimes after suspend when I want to unlock swaylock hyprland crashes and in the crash report it seems its related to hy3. Here is the backtrace:

Backtrace:
	#0 | Hyprland(_Z12getBacktracev+0x62) [0x55f711427412]
		??
		??:0
	#1 | Hyprland(_ZN13CrashReporter18createAndSaveCrashEi+0x5c5) [0x55f7113f48a5]
		??
		??:0
	#2 | Hyprland(_Z25handleUnrecoverableSignali+0x4c) [0x55f71136e5ec]
		??
		??:0
	#3 | /usr/lib/libc.so.6(+0x3e710) [0x79335405c710]
		??
		??:0
	#4 | /usr/lib/libc.so.6(+0x158200) [0x793354176200]
		??
		??:0
	#5 | /usr/lib/libstdc++.so.6(_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_assignERKS4_+0xba) [0x79335435969a]
		??
		??:0
	#6 | /home/zoli/.local/share/hyprpm/hy3/hy3.so(_ZN9Hy3Layout24updateAutotileWorkspacesEv+0x5f) [0x79334127e62f]
		??
		??:0
	#7 | /home/zoli/.local/share/hyprpm/hy3/hy3.so(_ZN9Hy3Layout10insertNodeER7Hy3Node+0x2f7) [0x7933412810d7]
		??
		??:0
	#8 | /home/zoli/.local/share/hyprpm/hy3/hy3.so(_ZN9Hy3Layout8onEnableEv+0x79) [0x79334127bbb9]
		??
		??:0
	#9 | Hyprland(_ZN14CConfigManager18loadConfigLoadVarsEv+0x1143) [0x55f7113d37c3]
		??
		??:0
	#10 | Hyprland(_ZN14CConfigManager4tickEv+0x19f) [0x55f7113d461f]
		??
		??:0
	#11 | Hyprland(_ZN14CConfigManager17handlePluginLoadsEv+0x509) [0x55f7113df569]
		??
		??:0
	#12 | Hyprland(_ZN14CConfigManager18loadConfigLoadVarsEv+0x1261) [0x55f7113d38e1]
		??
		??:0
	#13 | Hyprland(_ZN14CConfigManager4tickEv+0x19f) [0x55f7113d461f]
		??
		??:0
	#14 | Hyprland(_Z11handleTimerPv+0x49) [0x55f711463bd9]
		??
		??:0
	#15 | /usr/lib/libwayland-server.so.0(wl_event_loop_dispatch+0x2e7) [0x793354967d27]
		??
		??:0
	#16 | /usr/lib/libwayland-server.so.0(wl_display_run+0x27) [0x7933549682d7]
		??
		??:0
	#17 | Hyprland(_ZN11CCompositor15startCompositorEv+0xc65) [0x55f71136fef5]
		??
		??:0
	#18 | Hyprland(main+0x727) [0x55f7113561f7]
		??
		??:0
	#19 | /usr/lib/libc.so.6(+0x27cd0) [0x793354045cd0]
		??
		??:0
	#20 | /usr/lib/libc.so.6(__libc_start_main+0x8a) [0x793354045d8a]
		??
		??:0
	#21 | Hyprland(_start+0x25) [0x55f71136b815]
		??
		??:0

Issue building with latest Hyprland

Hey!

I noticed today that an update was pushed for Hyprland which breaks building

[v] version returned: Hyprland, built from branch main at commit ded174d6e5d14bc376919194cbc52c238a07f640 dirty (misc: remove unused var).
Date: Tue Feb 6 01:39:19 2024
Tag: v0.35.0-5-gded174d6

flags: (if any)


[v] parsed commit ded174d6e5d14bc376919194cbc52c238a07f640 at branch main
✔ adding a new plugin repository from https://github.com/outfoxxed/hy3
  MAKE SURE that you trust the authors. DO NOT install random plugins without verifying the code and author.
  Are you sure? [Y/n]

! old plugin repo build files found in temp directory, removing.
 → Cloning https://github.com/outfoxxed/hy3
✔ cloned
✔ found hyprpm manifest
✔ parsed manifest, found 1 plugins:
 → hy3 by outfoxxed version
 → Manifest has 1 pins, checking
✔ Hyprland headers OK
 → Building hy3
✖ Plugin hy3 failed to build.

 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╍━━━━━━━━━━━━━━━━━━━  3 / 5  Building plugin(s)[v] shell returned:  -> cd /tmp/hyprpm/new && PKG_CONFIG_PATH="/home/smitropoulos/.local/share/hyprpm/headersRoot/share/pkgconfig" cmake -DCMAKE_BUILD_TYPE=Release -B build
-- The C compiler identification is GNU 13.2.1
-- The CXX compiler identification is GNU 13.2.1
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found PkgConfig: /usr/bin/pkg-config (found version "2.1.0")
-- Checking for modules 'hyprland;pixman-1;libdrm;pango;pangocairo'
--   Found hyprland, version 0.35.0
--   Found pixman-1, version 0.43.2
--   Found libdrm, version 2.4.120
--   Found pango, version 1.51.0
--   Found pangocairo, version 1.51.0
-- Configuring done (0.3s)
-- Generating done (0.0s)
-- Build files have been written to: /tmp/hyprpm/new/build

 -> cd /tmp/hyprpm/new && PKG_CONFIG_PATH="/home/smitropoulos/.local/share/hyprpm/headersRoot/share/pkgconfig" cmake --build build
[ 14%] Building CXX object CMakeFiles/hy3.dir/src/main.cpp.o
[ 28%] Building CXX object CMakeFiles/hy3.dir/src/dispatchers.cpp.o
[ 42%] Building CXX object CMakeFiles/hy3.dir/src/Hy3Layout.cpp.o
/tmp/hyprpm/new/src/Hy3Layout.cpp: In member function ‘void Hy3Layout::insertNode(Hy3Node&)’:
/tmp/hyprpm/new/src/Hy3Layout.cpp:160:44: error: ‘class CCompositor’ has no member named ‘vectorToWindowTiled’; did you mean ‘vectorToWindowUnified’?
  160 |                             g_pCompositor->vectorToWindowTiled(g_pInputManager->getMouseCoordsInternal());
      |                                            ^~~~~~~~~~~~~~~~~~~
      |                                            vectorToWindowUnified
/tmp/hyprpm/new/src/Hy3Layout.cpp: In member function ‘void Hy3Layout::moveNodeToWorkspace(int, std::string, bool)’:
/tmp/hyprpm/new/src/Hy3Layout.cpp:1075:23: warning: unused variable ‘parent’ [-Wunused-variable]
 1075 |                 auto* parent = node->removeFromParentRecursive(&expand_actor);
      |                       ^~~~~~
/tmp/hyprpm/new/src/Hy3Layout.cpp: In member function ‘void Hy3Layout::focusTab(int, TabFocus, TabFocusMousePriority, bool, int)’:
/tmp/hyprpm/new/src/Hy3Layout.cpp:1230:36: error: ‘class CCompositor’ has no member named ‘windowFloatingFromCursor’
 1230 |                 if (g_pCompositor->windowFloatingFromCursor() == nullptr) {
      |                                    ^~~~~~~~~~~~~~~~~~~~~~~~
/tmp/hyprpm/new/src/Hy3Layout.cpp: In member function ‘void Hy3Layout::expand(int, ExpandOption, ExpandFullscreenOption)’:
/tmp/hyprpm/new/src/Hy3Layout.cpp:1405:1: warning: label ‘unfullscreen’ defined but not used [-Wunused-label]
 1405 | unfullscreen:
      | ^~~~~~~~~~~~
/tmp/hyprpm/new/src/Hy3Layout.cpp: In member function ‘virtual CWindow* Hy3Layout::getNextWindowCandidate(CWindow*)’:
/tmp/hyprpm/new/src/Hy3Layout.cpp:756:1: warning: control reaches end of non-void function [-Wreturn-type]
  756 | }
      | ^
/tmp/hyprpm/new/src/Hy3Layout.cpp: In member function ‘bool Hy3Layout::shouldRenderSelected(CWindow*)’:
/tmp/hyprpm/new/src/Hy3Layout.cpp:1435:1: warning: control reaches end of non-void function [-Wreturn-type]
 1435 | }
      | ^
make[2]: *** [CMakeFiles/hy3.dir/build.make:104: CMakeFiles/hy3.dir/src/Hy3Layout.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:83: CMakeFiles/hy3.dir/all] Error 2
make: *** [Makefile:136: all] Error 2


✔ all plugins built
 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╍━━━━━━━━━  4 / 5  Installing repositoryterminate called after throwing an instance of 'std::filesystem::__cxx11::filesystem_error'
  what():  filesystem error: cannot copy file: No such file or directory [/tmp/hyprpm/new/build/libhy3.so] [/home/smitropoulos/.local/share/hyprpm/hy3/hy3.so]
[1]    15293 IOT instruction (core dumped)  hyprpm -v add https://github.com/outfoxxed/hy3

if a tab group is the only window in a workspace, movefocus should (optionally?) wrap

if a tab group is the only window in a workspace, i'd like if the binds in the following config sample had wrapping.

bind = $mainMod, left, hy3:movefocus, l
bind = $mainMod, right, hy3:movefocus, r

this can already be done, i believe, with hy3:focustab along with the wrap option, but i'd like to be able to use the same keybind for moving focus with normal windows and with tab groups. that functionality could be emulated with a script, but i think this feature being built-in would be a nice convenience feature!

focusing tabbed window doesn't work

If I try with hyprctl dispatch focuswindow pid:1337 to focus a tabbed window it doesn't work. My main use case is to use this with focusurgentorlast (which also doesn't work for tabbed windows), not sure if this needs to be handled explicitly here.

Dispatchers don't work with NixOS + Home Manager

I'm very new to the Nix ecosystem so I guess it's most likely I'm doing something wrong.
But since I can load the plugin successfully I figured the appropriate place to ask is here.

So the issue is, as I mentioned, the plugin is loaded, the dispatchers are recognized by Hyprland, but they simply have no effect, i.e. hyprctl dispatch hy3:killactive and others do nothing. This is also the case when I'm invoking them via keybindings.

This happens on master builds as well as 0.34.0 builds.

Here is my setup:

flake.nix
{ description = "my nix flake";

  inputs = {
    nixpkgs.url = "github:nixos/nixpkgs/master";
    home-manager.url = "github:nix-community/home-manager";
    home-manager.inputs.nixpkgs.follows = "nixpkgs";
    hyprland.url = "github:hyprwm/Hyprland";
    hy3 = {
      url = "github:outfoxxed/hy3";
      inputs.hyprland.follows = "hyprland";
    };
  };

  outputs =
    inputs @ { self, nixpkgs, home-manager, hyprland, hy3, ... }:
      let inherit (self) outputs; in
      { nixosConfigurations = {
          primary = nixpkgs.lib.nixosSystem {
            specialArgs = { inherit inputs outputs; };
            modules =
              [ ./nixos/configuration.nix

                home-manager.nixosModules.home-manager
                {
                  home-manager.useGlobalPkgs = true;
                  home-manager.useUserPackages = true;
                  home-manager.extraSpecialArgs = { inherit inputs outputs; };
                  home-manager.users.me = import ./home-manager/home.nix;
                }
              ];
          };
        };
      };
}
home-manager/home.nix
{ inputs, config, pkgs, lib, hy3, ... }:

{
  programs.home-manager.enable = true;

  home = {
    username = "me";
    homeDirectory = "/home/me";
    stateVersion = "23.11";
  };
  home.packages = with pkgs; [];

  wayland.windowManager.hyprland = {
    enable = true;
    systemd.enable = false;
    package = inputs.hyprland.packages.${pkgs.system}.hyprland;
    plugins = [ inputs.hy3.packages.x86_64-linux.hy3 ];    
  };

}

It produces this flake.lock:

flake.lock
{
  "nodes": {
    "home-manager": {
      "inputs": {
        "nixpkgs": [
          "nixpkgs"
        ]
      },
      "locked": {
        "lastModified": 1704309533,
        "narHash": "sha256-n/krnzgnmYWdVoMv0MJfEMTOYCkoY13rCwKhQ4RVd2U=",
        "owner": "nix-community",
        "repo": "home-manager",
        "rev": "992b38f29cd7e50d88a2ae069133750beda010a4",
        "type": "github"
      },
      "original": {
        "owner": "nix-community",
        "repo": "home-manager",
        "type": "github"
      }
    },
    "hy3": {
      "inputs": {
        "hyprland": [
          "hyprland"
        ]
      },
      "locked": {
        "lastModified": 1704173467,
        "narHash": "sha256-VXR/Kfda8P2PSOGSQ20czrXDn4ELRwyIYtJ9MFaMRBA=",
        "owner": "outfoxxed",
        "repo": "hy3",
        "rev": "9a1111efbab842a26477b651ae02deaa39fe1ef4",
        "type": "github"
      },
      "original": {
        "owner": "outfoxxed",
        "repo": "hy3",
        "type": "github"
      }
    },
    "hyprland": {
      "inputs": {
        "hyprland-protocols": "hyprland-protocols",
        "nixpkgs": "nixpkgs",
        "systems": "systems",
        "wlroots": "wlroots",
        "xdph": "xdph"
      },
      "locked": {
        "lastModified": 1704360017,
        "narHash": "sha256-g0fqfWYlFYdyYcAusGguWObS0ylOJPiQQwaZo4KXQUM=",
        "owner": "hyprwm",
        "repo": "Hyprland",
        "rev": "4d6d662c67786c86647cf41b5b20d9c0b418dbb3",
        "type": "github"
      },
      "original": {
        "owner": "hyprwm",
        "repo": "Hyprland",
        "type": "github"
      }
    },
    "hyprland-protocols": {
      "inputs": {
        "nixpkgs": [
          "hyprland",
          "nixpkgs"
        ],
        "systems": [
          "hyprland",
          "systems"
        ]
      },
      "locked": {
        "lastModified": 1691753796,
        "narHash": "sha256-zOEwiWoXk3j3+EoF3ySUJmberFewWlagvewDRuWYAso=",
        "owner": "hyprwm",
        "repo": "hyprland-protocols",
        "rev": "0c2ce70625cb30aef199cb388f99e19a61a6ce03",
        "type": "github"
      },
      "original": {
        "owner": "hyprwm",
        "repo": "hyprland-protocols",
        "type": "github"
      }
    },
    "nixpkgs": {
      "locked": {
        "lastModified": 1703438236,
        "narHash": "sha256-aqVBq1u09yFhL7bj1/xyUeJjzr92fXVvQSSEx6AdB1M=",
        "owner": "NixOS",
        "repo": "nixpkgs",
        "rev": "5f64a12a728902226210bf01d25ec6cbb9d9265b",
        "type": "github"
      },
      "original": {
        "owner": "NixOS",
        "ref": "nixos-unstable",
        "repo": "nixpkgs",
        "type": "github"
      }
    },
    "nixpkgs_2": {
      "locked": {
        "lastModified": 1704326729,
        "narHash": "sha256-I8CrqJRtPslVQBTpVTsAY3Als/HwRdoOTyupsK7YI2E=",
        "owner": "nixos",
        "repo": "nixpkgs",
        "rev": "6ce10ae92e8b3453055c521a17349ee35606b714",
        "type": "github"
      },
      "original": {
        "owner": "nixos",
        "ref": "master",
        "repo": "nixpkgs",
        "type": "github"
      }
    },
    "root": {
      "inputs": {
        "home-manager": "home-manager",
        "hy3": "hy3",
        "hyprland": "hyprland",
        "nixpkgs": "nixpkgs_2"
      }
    },
    "systems": {
      "locked": {
        "lastModified": 1689347949,
        "narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=",
        "owner": "nix-systems",
        "repo": "default-linux",
        "rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68",
        "type": "github"
      },
      "original": {
        "owner": "nix-systems",
        "repo": "default-linux",
        "type": "github"
      }
    },
    "wlroots": {
      "flake": false,
      "locked": {
        "host": "gitlab.freedesktop.org",
        "lastModified": 1703963193,
        "narHash": "sha256-ke8drv6PTrdQDruWbajrRJffP9A9PU6FRyjJGNZRTs4=",
        "owner": "wlroots",
        "repo": "wlroots",
        "rev": "f81c3d93cd6f61b20ae784297679283438def8df",
        "type": "gitlab"
      },
      "original": {
        "host": "gitlab.freedesktop.org",
        "owner": "wlroots",
        "repo": "wlroots",
        "rev": "f81c3d93cd6f61b20ae784297679283438def8df",
        "type": "gitlab"
      }
    },
    "xdph": {
      "inputs": {
        "hyprland-protocols": [
          "hyprland",
          "hyprland-protocols"
        ],
        "nixpkgs": [
          "hyprland",
          "nixpkgs"
        ],
        "systems": [
          "hyprland",
          "systems"
        ]
      },
      "locked": {
        "lastModified": 1703514399,
        "narHash": "sha256-VRr5Xc4S/VPr/gU3fiOD3vSIL2+GJ+LUrmFTWTwnTz4=",
        "owner": "hyprwm",
        "repo": "xdg-desktop-portal-hyprland",
        "rev": "0a318a7a217a6402b0b705837cd5b50b0e94b31b",
        "type": "github"
      },
      "original": {
        "owner": "hyprwm",
        "repo": "xdg-desktop-portal-hyprland",
        "type": "github"
      }
    }
  },
  "root": "root",
  "version": 7
}

And the version currently reported by Hyprland is:

$ hyprctl version -j
{
    "branch": "",
    "commit": "4d6d662c67786c86647cf41b5b20d9c0b418dbb3",
    "dirty": false,
    "commit_message": "",
    "commit_date": "2024-01-04",
    "tag": "",
    "flags": []
}

[interest check] Stacked windows

I have implemented a feature to have SplitV groups where the non-focused windows get "minimized" to about 2 lines of text. I have had this setup in bspwm for years and love it. A video is probably easier to user for showing what I mean

2023-06-06.12-08-47.mp4

Would you be interested in me adding this feature, probably as a new group mode like StackedV? Otherwise I'll just keep this feature in my own fork

Fullscreen would get unfullscreened visually when switching monitor focus

For anyone, this is a workaround using expand(cursed)

#!/bin/bash
ActiveWorkspace="$(hyprctl activeworkspace -j | jaq .id)"
ActiveWorkspaceClients="$(hyprctl clients -j | jaq ".[]| select(.workspace.id == $ActiveWorkspace) ")"
ActiveWorkspaceClientsCount="$(jaq -s "length" <<< $ActiveWorkspaceClients)"
ActiveWorkspaceHiddenCount="$(jaq "select(.hidden == true) | length" <<< $ActiveWorkspaceClients | wc -l)"
ActiveWorkspaceVisbleCount="$(jaq "select(.hidden == false) | length" <<< $ActiveWorkspaceClients | wc -l)"
TabbedCount="$(jaq "[.at, .size] " <<< $ActiveWorkspaceClients | jq -s 'group_by(.) | map(select(length > 1)) | map(length) | add')"

if [ "$ActiveWorkspaceHiddenCount" -gt 0 ] ; then
  if [ "$TabbedCount" = null ]; then
    hyprctl dispatch hy3:expand base
  elif [ "$ActiveWorkspaceHiddenCount" -lt "$TabbedCount" ]; then
    for (( c=1; c<=ActiveWorkspaceVisbleCount; c++ ))
    do
      hyprctl dispatch hy3:expand expand
    done
  else
    hyprctl dispatch hy3:expand base
  fi
elif [ "$ActiveWorkspaceClientsCount" -gt 0 ]; then
  for (( c=1; c<=ActiveWorkspaceClientsCount; c++ ))
  do
    hyprctl dispatch hy3:expand expand
  done
fi

(Further Information for readers)
image

Remove window from tabbed group

In case the last group on a workspace is tabbed, each future window will also be sucked into that tabbed group. Is there a way to remove one window from the tab group in order to create a new group with that window or prevent new windows from getting sucked into the tab group?

`hy3:movefocus` doesn't change monitor

When using multiple monitors, moving the focus or a window towards the other monitor doesn't change the monitor/workspace.

Expected behavior:

Using hy3:movefocus or hy3:movewindow against the edge of the monitor moves to the workspace on the next monitor like movefocus and i3/sway.

Actual behavior:

hy3:movefocus stops at the edge of the monitor.

Building from AUR fails

Building from AUR fails with the following error on TabGroup.cpp.o ( also adding as a screenshot because log pastes with incorrect padding):

[ 71%] Building CXX object CMakeFiles/hy3.dir/src/TabGroup.cpp.o /home/alpha/.cache/paru/clone/hy3-git/src/hy3/src/TabGroup.cpp: In member function ‘void Hy3TabGroup::renderTabBar()’: /home/alpha/.cache/paru/clone/hy3-git/src/hy3/src/TabGroup.cpp:559:49: error: ‘struct SCurrentRenderData’ has no member named ‘damage’; did you mean ‘pDamage’? 559 | g_pHyprOpenGL->m_RenderData.damage.pixman(), | ^~~~~~ | pDamage make[2]: *** [CMakeFiles/hy3.dir/build.make:132: CMakeFiles/hy3.dir/src/TabGroup.cpp.o] Error 1 make[1]: *** [CMakeFiles/Makefile2:83: CMakeFiles/hy3.dir/all] Error 2 make: *** [Makefile:136: all] Error 2

изображение

[Feature Request] Support scroll wheel for `hy3:focustab`

bindn = , mouse_down, hy3:focustab, left
bindn = , mouse_up, hy3:focustab, right

this... "works", but it will move the tab's focus wherever my cursor are.
Ideally I hope this only happens when my mouse is right above the "tab bar"(just like the mouse mode)
maybe add a mode called scroll_wheel?

Changing the color of the focused tab of an inactive container ?

In i3 in addition to client.focused and client.unfocused there is also client.focused_inactive which is as per the docs : A client which is the focused one of its container, but it does not have the focus at the moment.

Is it possible to target those with hy3 ? My goal would be to have the focused tab of the inactive container be the same color as unfocused tabs.

All I see in hy3's docs is : col.active and col.inactive

Not a deal breaker tho since one can still rely on windows (and not tabs) colors and having active = focused_inactive is essential if one wants to use hy3:movefocus, {direction}, visible, just a nice option to have imo.

Thanks in advance.

Screensharing issue

Hi,

I am not 100% sure yet, but I think that hy3 causes a problem with screensharing of tabbed windows and hyprland portal.

If I try to share a non-focused tabbed window using https://mozilla.github.io/webrtc-landing/gum_test.html, I end up with a blank screen. This does not happen if the window is visible when I start sharing, but it freezes if I tab the window that is currently shared.

I am using hyprland, hy3 0.34 and xdg-desktop-portal-hyprland 1.3.1 on NixOS.

Anyone can reproduce?

Windows resizing on focus change

When changing focus, the windows are resizing ever so slightly. This causes layout shifts that are especially apparent in terminal windows. In the screen recording below, note the window size in kitty flashing while focus is changing, as well as the layout shift taking place on the text in each terminal window.

recording.mp4

hy3 disables cursor warping when focusing a window on the same workspace

On default Hyprland, when focusing a window, whether it is on the same workspace as the previously focused one or on another, the cursor is warped to the center of the destination window. i3/Sway only warps the cursor to the center of a window if the destination window is on another workspace. hy3 seems to emulate this i3/Sway behaviour, but Hyprland already supports it via the configurtion variable general:no_cursor_warp, so I think hy3 should not override it.

EDIT: replaced "wrap" with "warp" everywhere 🤦

Plugin hy3 failed to build

Hi, I'm trying to install the plugin using hyprpm. But I keep getting the following error.

 → Cloning https://github.com/outfoxxed/hy3                                                                         
✔ cloned                                                                                                            
✔ found hyprpm manifest                                                                                             
✔ parsed manifest, found 1 plugins:                                                                                 
 → hy3 by outfoxxed version                                                                                         
✔ Hyprland headers OK                                                                                               
 → Building hy3                                                                                                     
 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╍━━━━━━━━━━━━━━━━━━━  3 / 5  Building plugin(s)                                      
✖ Plugin hy3 failed to build.
 ✘ elvin@EndeavourOS  ~  

I'm using Hyprland v0.34.0 on Endeavour OS.

Feature: Recalculate the geometry of the scratchpad when moving across monitors

Heya!

I have three monitors, one vertical and two horizontal (or landscape). When I launch my special workspace, I do it like this:

# ─[ Kitty on the scratchpad ]────────────────────────────────────────────
windowrulev2 = float, class:(kitty), title:(kitty_scratchpad)
windowrulev2 = workspace special silent,class:(kitty), title:(kitty_scratchpad)
windowrulev2 = center 1, class:(kitty), title:(kitty_scratchpad)
windowrulev2 = size 80% 80%, class:(kitty), title:(kitty_scratchpad)

This works for the two landscape monitors, but will not work for my horizontal one. When I try to bring the special workspace on in one of the two landscape monitors, it appears centered and 80% of both width and height. On the horizontal one, it bleeds to the monitor next to it.

Is there a way to recalculate the placement and size of the floating window?

firefox tab title is not updated when tab isnt in focus

steps to reproduce
1)open firefox and say a terminal in two tabs side by side
2)navigate to some page (preferably some slow webpage) in firefox and immediately change to terminal
3)navigate back to firefox (after a reasonable time for the webpage to load)

the title will still be the title will not have changed to the new webpage

it seems the title updates only when firefox is the focused tab.

Build error

hyprland version 0.27.2

yay -S hy3-git
AUR Explicit (1): hy3-git-r124.7c29490-2
:: (1/1) Downloaded PKGBUILD: hy3-git
1 hy3-git (Build Files Exist)
==> Packages to cleanBuild?
==> [N]one [A]ll [Ab]ort [I]nstalled [No]tInstalled or (1 2 3, 1-3, ^4)
==> All
:: Deleting (1/1): /home/d/.cache/yay/hy3-git
HEAD is now at 6ecf820 Fix missing build dependencies
1 hy3-git (Build Files Exist)
==> Diffs to show?
==> [N]one [A]ll [Ab]ort [I]nstalled [No]tInstalled or (1 2 3, 1-3, ^4)
==> None
==> Making package: hy3-git r124.7c29490-2 (Вт 25 июл 2023 00:30:29)
==> Retrieving sources...
-> Cloning hy3 git repo...
Cloning into bare repository '/home/d/.cache/yay/hy3-git/hy3'...
remote: Enumerating objects: 779, done.
remote: Counting objects: 100% (74/74), done.
remote: Compressing objects: 100% (36/36), done.
remote: Total 779 (delta 50), reused 54 (delta 37), pack-reused 705
Receiving objects: 100% (779/779), 204.33 KiB | 1.36 MiB/s, done.
Resolving deltas: 100% (554/554), done.
==> Validating source files with sha256sums...
hy3 ... Skipped
:: (1/1) Parsing SRCINFO: hy3-git
==> Making package: hy3-git r124.7c29490-2 (Вт 25 июл 2023 00:30:31)
==> Checking runtime dependencies...
==> Checking buildtime dependencies...
==> Retrieving sources...
-> Updating hy3 git repo...
==> Validating source files with sha256sums...
hy3 ... Skipped
==> Removing existing $srcdir/ directory...
==> Extracting sources...
-> Creating working copy of hy3 git repo...
Cloning into 'hy3'...
done.
==> Starting pkgver()...
==> Updated version: hy3-git r156.3fbaa4a-1
==> Sources are ready.
==> Making package: hy3-git r156.3fbaa4a-1 (Вт 25 июл 2023 00:30:33)
==> Checking runtime dependencies...
==> Checking buildtime dependencies...
==> WARNING: Using existing $srcdir/ tree
==> Starting pkgver()...
==> Starting build()...
-- The C compiler identification is GNU 13.1.1
-- The CXX compiler identification is GNU 13.1.1
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found PkgConfig: /usr/bin/pkg-config (found version "1.8.1")
-- Checking for modules 'hyprland;pixman-1;libdrm;pango;pangocairo'
-- Found hyprland, version 0.27.2
-- Found pixman-1, version 0.42.2
-- Found libdrm, version 2.4.115
-- Found pango, version 1.50.14
-- Found pangocairo, version 1.50.14
-- Configuring done (1.5s)
-- Generating done (0.0s)
-- Build files have been written to: /home/d/.cache/yay/hy3-git/src/build
[ 28%] Building CXX object CMakeFiles/hy3.dir/src/main.cpp.o
[ 28%] Building CXX object CMakeFiles/hy3.dir/src/dispatchers.cpp.o
[ 42%] Building CXX object CMakeFiles/hy3.dir/src/Hy3Layout.cpp.o
[ 57%] Building CXX object CMakeFiles/hy3.dir/src/Hy3Node.cpp.o
/home/d/.cache/yay/hy3-git/src/hy3/src/Hy3Layout.cpp: In member function 'virtual CWindow* Hy3Layout::getNextWindowCandidate(CWindow*)':
/home/d/.cache/yay/hy3-git/src/hy3/src/Hy3Layout.cpp:651:1: warning: control reaches end of non-void function [-Wreturn-type]
651 | }
| ^
/home/d/.cache/yay/hy3-git/src/hy3/src/Hy3Layout.cpp: In member function 'void Hy3Layout::setNodeSwallow(int, SetSwallowOption)':
/home/d/.cache/yay/hy3-git/src/hy3/src/Hy3Layout.cpp:1000:56: warning: this statement may fall through [-Wimplicit-fallthrough=]
1000 | case SetSwallowOption::NoSwallow: *containment = false;
| ~~~~~~~~~~~~~^~~~~~~
/home/d/.cache/yay/hy3-git/src/hy3/src/Hy3Layout.cpp:1001:9: note: here
1001 | case SetSwallowOption::Swallow: *containment = true;
| ^~~~
/home/d/.cache/yay/hy3-git/src/hy3/src/Hy3Layout.cpp:1001:54: warning: this statement may fall through [-Wimplicit-fallthrough=]
1001 | case SetSwallowOption::Swallow: *containment = true;
| ~~~~~~~~~~~~~^~~~~~
/home/d/.cache/yay/hy3-git/src/hy3/src/Hy3Layout.cpp:1002:9: note: here
1002 | case SetSwallowOption::Toggle: containment = !containment;
| ^~~~
/home/d/.cache/yay/hy3-git/src/hy3/src/Hy3Layout.cpp: In member function 'bool Hy3Layout::shouldRenderSelected(CWindow
)':
/home/d/.cache/yay/hy3-git/src/hy3/src/Hy3Layout.cpp:1040:1: warning: control reaches end of non-void function [-Wreturn-type]
1040 | }
| ^
/home/d/.cache/yay/hy3-git/src/hy3/src/Hy3Node.cpp: In member function 'bool Hy3Node::focusWindow()':
/home/d/.cache/yay/hy3-git/src/hy3/src/Hy3Node.cpp:152:1: warning: control reaches end of non-void function [-Wreturn-type]
152 | }
| ^
/home/d/.cache/yay/hy3-git/src/hy3/src/Hy3Node.cpp: In member function 'Hy3Node
Hy3Node::getFocusedNode()':
/home/d/.cache/yay/hy3-git/src/hy3/src/Hy3Node.cpp:204:1: warning: control reaches end of non-void function [-Wreturn-type]
204 | }
| ^
/home/d/.cache/yay/hy3-git/src/hy3/src/Hy3Node.cpp: In member function 'bool Hy3Node::isUrgent()':
/home/d/.cache/yay/hy3-git/src/hy3/src/Hy3Node.cpp:461:1: warning: control reaches end of non-void function [-Wreturn-type]
461 | }
| ^
[ 71%] Building CXX object CMakeFiles/hy3.dir/src/TabGroup.cpp.o
[ 85%] Building CXX object CMakeFiles/hy3.dir/src/SelectionHook.cpp.o
/home/d/.cache/yay/hy3-git/src/hy3/src/TabGroup.cpp: In member function 'void Hy3TabGroup::renderTabBar()':
/home/d/.cache/yay/hy3-git/src/hy3/src/TabGroup.cpp:559:49: error: 'struct SCurrentRenderData' has no member named 'damage'; did you mean 'pDamage'?
559 | g_pHyprOpenGL->m_RenderData.damage.pixman(),
| ^~~~~~
| pDamage
make[2]: *** [CMakeFiles/hy3.dir/build.make:132: CMakeFiles/hy3.dir/src/TabGroup.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [CMakeFiles/Makefile2:83: CMakeFiles/hy3.dir/all] Error 2
make: *** [Makefile:136: all] Error 2
==> ERROR: A failure occurred in build().
Aborting...
-> error making: hy3-git-exit status 4
removing untracked AUR files from cache...
:: Cleaning (1/1): /home/d/.cache/yay/hy3-git
-> Failed to install the following packages. Manual intervention is required:
hy3-git - exit status 4

[feat] "Smart borders" or no_gaps_when_only

Hyprland's master layout has a no_gaps_when_only which turns off a windows borders when it's the only non-layer window tiled in a workspace, identical to sway's smart_borders

hy3 does not currently seem to support this?

Cannot load plugin using home manager

Here's a minimal nix flake

{
  inputs = {
    nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
    home-manager.url = "github:nix-community/home-manager";
    home-manager.inputs.nixpkgs.follows = "nixpkgs";
    hyprland.url = "github:hyprwm/Hyprland?ref=v0.30.0";
    hy3.url = "github:outfoxxed/hy3?ref=hl0.30.0";
    hy3.inputs.hyprland.follows = "hyprland";
  };
  outputs = { self, nixpkgs, home-manager, hyprland, hy3 }: {
    homeConfigurations."ah@framework" =
      home-manager.lib.homeManagerConfiguration {
        pkgs = import nixpkgs { system = "x86_64-linux"; };
        modules = [
          hyprland.homeManagerModules.default
          {
            home.stateVersion = "23.05";
            home.username = "ah";
            home.homeDirectory = "/home/ah";
            wayland.windowManager.hyprland.enable = true;
            wayland.windowManager.hyprland.plugins =
              [ hy3.packages.x86_64-linux.hy3 ];
          }
        ];
      };
  };
}

Upon rebuilding my system with home-manager switch I get the following error

Failed to load the following plugins: /nix/store/<etc...>/lib/libhy3.so

1696824349-wayshot

AutoTiling Support

Conversation stripped from Discord.

Not changing move logic makes it a lot faster, and an autotiled flag isnt hard to add
Move logic is somewhat complex
But splitting on creation isnt hard

So like an option hy3:split_on_creation # automatic splitting the created window based on height and width?
As for the other

Unable to have a bold font in title

Hello,

I am currently evaluating hyprland and hy3 (version 0.31.0) to switch from Sway on NixOS.
I installed the nerdfonts package.
The plugin is working pretty well but I noticed something I am unable to do.
I would like to use a bold font in the tabs title. Changed the "text_font" to "NotoSansNF Bold" as described in the Pango Documentation (https://docs.gtk.org/Pango/type_func.FontDescription.from_string.html).
However, it does not work. I also tried "Sans Bold" to rule out a problem on the Family but to no extend.

What am I missing here?

Got some notification error when moving window to special workspace

So when I moved my window to special workspace, I got an notification error saying "Something has gone very wrong. Check the log for details".

How to reproduce:

  1. Use Hyprland + hy3 plugin.
  2. Make a keybind for togglespecialworkspace
  3. Open a terminal
  4. Press the togglespecialworkspace keybind.
  5. You'll get an error.

logs
config

1691900618.mp4

Can't install using hyprpm

I have installed Hyprland yesterday on my Arch Linux machine after using Swaywm for last two years. And I'm missing tabbed layout from it in Hyprland. I tried to install hy3 using hyprpm as was explained in README.

System: Arch Linux
Hyprland: 0.34.0-1

$ hyprpm add https://github.com/outfoxxed/hy3
✔ adding a new plugin repository from https://github.com/outfoxxed/hy3
  MAKE SURE that you trust the authors. DO NOT install random plugins without verifying the code and author.
  Are you sure? [Y/n] y

 → Cloning https://github.com/outfoxxed/hy3
✔ cloned
✔ found hyprpm manifest
✔ parsed manifest, found 1 plugins:
 → hy3 by outfoxxed version
✔ Hyprland headers OK
 → Building hy3
 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╍━━━━━━━━━━━━━━━━━━━  3 / 5  Building plugin(s)
✖ Plugin hy3 failed to build.

resize dispatcher "shrink" and "grow" options

currently, the resize dispatcher always grows in the direction you request. This is inconvenient- it means to shrink a window you have to focus the window next to it and perform the action there. For floating windows, with this functionality there's no possible way to shrink them through the dispatcher (and, although this is probably an unrelated issue, resizing floating windows through the dispatcher seems to currently do nothing at all?)

i3 resolves this issue by having the "shrink" and "grow" options for the resize command. You can, for example, make pressing left always shrink the window, but right always grow it. This can, for windows on the right side of the screen, be the opposite of the way people expect it to work, but it's at least better to have this as an option than to be completely unable to shrink windows without the mouse.

Installation help.

Hi, I've installed this package through AUR for archlinux. I'm using hyprland-git. (AMD video card).
The installation process went fine with no issue.
When i set the layout and the plugin configuration as for the docs I got an error about invalid dispatch requested: 'hy3:movefocus' does not exists hyprland might not work correctly.
Is there something I'm missing from the documentation.
Any help would be appreciate.

Thanks

hy3-git on the AUR does not build anymore

The compilation error is error: ‘fmt’ is not a constant expression

Full makepkg log:

==> Making package: hy3-git r124.7c29490-2 (Wed 20 Sep 2023 02:57:03 PM EEST)
==> Checking runtime dependencies...
==> Checking buildtime dependencies...
==> Retrieving sources...
  -> Cloning hy3 git repo...
Cloning into bare repository '/home/andy3153h/hy3-git/hy3'...
remote: Enumerating objects: 1031, done.
remote: Counting objects: 100% (118/118), done.
remote: Compressing objects: 100% (63/63), done.
remote: Total 1031 (delta 82), reused 70 (delta 55), pack-reused 913
Receiving objects: 100% (1031/1031), 251.81 KiB | 3.19 MiB/s, done.
Resolving deltas: 100% (754/754), done.
==> Validating source files with sha256sums...
    hy3 ... Skipped
==> Extracting sources...
  -> Creating working copy of hy3 git repo...
Cloning into 'hy3'...
done.
==> Starting pkgver()...
==> Updated version: hy3-git r192.b935aaf-1
==> Starting build()...
-- The C compiler identification is GNU 13.2.1
-- The CXX compiler identification is GNU 13.2.1
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found PkgConfig: /usr/bin/pkg-config (found version "1.8.1")
-- Checking for modules 'hyprland;pixman-1;libdrm;pango;pangocairo'
--   Found hyprland, version 0.29.1
--   Found pixman-1, version 0.42.2
--   Found libdrm, version 2.4.116
--   Found pango, version 1.50.14
--   Found pangocairo, version 1.50.14
-- Configuring done (0.3s)
-- Generating done (0.0s)
-- Build files have been written to: /home/andy3153h/hy3-git/src/build
[ 14%] Building CXX object CMakeFiles/hy3.dir/src/main.cpp.o
[ 28%] Building CXX object CMakeFiles/hy3.dir/src/dispatchers.cpp.o
[ 42%] Building CXX object CMakeFiles/hy3.dir/src/Hy3Layout.cpp.o
[ 57%] Building CXX object CMakeFiles/hy3.dir/src/Hy3Node.cpp.o
[ 71%] Building CXX object CMakeFiles/hy3.dir/src/TabGroup.cpp.o
[ 85%] Building CXX object CMakeFiles/hy3.dir/src/SelectionHook.cpp.o
/home/andy3153h/hy3-git/src/hy3/src/Hy3Layout.cpp: In member function ‘void Hy3Layout::expand(int, ExpandOption, ExpandFullscreenOption)’:
/home/andy3153h/hy3-git/src/hy3/src/Hy3Layout.cpp:1240:1: warning: label ‘unfullscreen’ defined but not used [-Wunused-label]
 1240 | unfullscreen:
      | ^~~~~~~~~~~~
In file included from /home/andy3153h/hy3-git/src/hy3/src/globals.hpp:4,
                 from /home/andy3153h/hy3-git/src/hy3/src/Hy3Node.cpp:6:
/home/andy3153h/hy3-git/src/hy3/src/log.hpp: In instantiation of ‘void hy3_log(LogLevel, const std::string&, Args&& ...) [with Args = {long unsigned int}; std::string = std::__cxx11::basic_string<char>]’:
/home/andy3153h/hy3-git/src/hy3/src/Hy3Node.cpp:344:11:   required from here
/home/andy3153h/hy3-git/src/hy3/src/log.hpp:7:19: error: ‘fmt’ is not a constant expression
    7 |         Debug::log(level, "[hy3] " + fmt, args...);
      |         ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/andy3153h/hy3-git/src/hy3/src/log.hpp: In instantiation of ‘void hy3_log(LogLevel, const std::string&, Args&& ...) [with Args = {long unsigned int, long unsigned int}; std::string = std::__cxx11::basic_string<char>]’:
/home/andy3153h/hy3-git/src/hy3/src/Hy3Node.cpp:694:11:   required from here
/home/andy3153h/hy3-git/src/hy3/src/log.hpp:7:19: error: ‘fmt’ is not a constant expression
In file included from /home/andy3153h/hy3-git/src/hy3/src/globals.hpp:4,
                 from /home/andy3153h/hy3-git/src/hy3/src/SelectionHook.cpp:4:
/home/andy3153h/hy3-git/src/hy3/src/log.hpp: In instantiation of ‘void hy3_log(LogLevel, const std::string&, Args&& ...) [with Args = {long unsigned int}; std::string = std::__cxx11::basic_string<char>]’:
/home/andy3153h/hy3-git/src/hy3/src/SelectionHook.cpp:31:10:   required from here
/home/andy3153h/hy3-git/src/hy3/src/log.hpp:7:19: error: ‘fmt’ is not a constant expression
    7 |         Debug::log(level, "[hy3] " + fmt, args...);
      |         ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /home/andy3153h/hy3-git/src/hy3/src/globals.hpp:4,
                 from /home/andy3153h/hy3-git/src/hy3/src/Hy3Layout.cpp:4:
/home/andy3153h/hy3-git/src/hy3/src/log.hpp: In instantiation of ‘void hy3_log(LogLevel, const std::string&, Args&& ...) [with Args = {long unsigned int, bool&}; std::string = std::__cxx11::basic_string<char>]’:
/home/andy3153h/hy3-git/src/hy3/src/Hy3Layout.cpp:71:9:   required from here
/home/andy3153h/hy3-git/src/hy3/src/log.hpp:7:19: error: ‘fmt’ is not a constant expression
    7 |         Debug::log(level, "[hy3] " + fmt, args...);
      |         ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/andy3153h/hy3-git/src/hy3/src/log.hpp: In instantiation of ‘void hy3_log(LogLevel, const std::string&, Args&& ...) [with Args = {long unsigned int, long unsigned int}; std::string = std::__cxx11::basic_string<char>]’:
/home/andy3153h/hy3-git/src/hy3/src/Hy3Layout.cpp:81:10:   required from here
/home/andy3153h/hy3-git/src/hy3/src/log.hpp:7:19: error: ‘fmt’ is not a constant expression
/home/andy3153h/hy3-git/src/hy3/src/log.hpp: In instantiation of ‘void hy3_log(LogLevel, const std::string&, Args&& ...) [with Args = {long unsigned int}; std::string = std::__cxx11::basic_string<char>]’:
/home/andy3153h/hy3-git/src/hy3/src/Hy3Layout.cpp:144:10:   required from here
/home/andy3153h/hy3-git/src/hy3/src/log.hpp:7:19: error: ‘fmt’ is not a constant expression
/home/andy3153h/hy3-git/src/hy3/src/log.hpp: In instantiation of ‘void hy3_log(LogLevel, const std::string&, Args&& ...) [with Args = {long unsigned int, int&, int&}; std::string = std::__cxx11::basic_string<char>]’:
/home/andy3153h/hy3-git/src/hy3/src/Hy3Layout.cpp:150:10:   required from here
/home/andy3153h/hy3-git/src/hy3/src/log.hpp:7:19: error: ‘fmt’ is not a constant expression
/home/andy3153h/hy3-git/src/hy3/src/log.hpp: In instantiation of ‘void hy3_log(LogLevel, const std::string&, Args&& ...) [with Args = {long unsigned int, long unsigned int, long unsigned int, long unsigned int}; std::string = std::__cxx11::basic_string<char>]’:
/home/andy3153h/hy3-git/src/hy3/src/Hy3Layout.cpp:206:9:   required from here
/home/andy3153h/hy3-git/src/hy3/src/log.hpp:7:19: error: ‘fmt’ is not a constant expression
/home/andy3153h/hy3-git/src/hy3/src/log.hpp: In instantiation of ‘void hy3_log(LogLevel, const std::string&, Args&& ...) [with Args = {long unsigned int, long unsigned int, long unsigned int}; std::string = std::__cxx11::basic_string<char>]’:
/home/andy3153h/hy3-git/src/hy3/src/Hy3Layout.cpp:227:9:   required from here
/home/andy3153h/hy3-git/src/hy3/src/log.hpp:7:19: error: ‘fmt’ is not a constant expression
/home/andy3153h/hy3-git/src/hy3/src/log.hpp: In instantiation of ‘void hy3_log(LogLevel, const std::string&, Args&& ...) [with Args = {const int&}; std::string = std::__cxx11::basic_string<char>]’:
/home/andy3153h/hy3-git/src/hy3/src/Hy3Layout.cpp:296:9:   required from here
/home/andy3153h/hy3-git/src/hy3/src/log.hpp:7:19: error: ‘fmt’ is not a constant expression
/home/andy3153h/hy3-git/src/hy3/src/Hy3Node.cpp: In member function ‘CWindow* Hy3Node::bringToTop()’:
/home/andy3153h/hy3-git/src/hy3/src/Hy3Node.cpp:177:1: warning: control reaches end of non-void function [-Wreturn-type]
  177 | }
      | ^
/home/andy3153h/hy3-git/src/hy3/src/Hy3Node.cpp: In member function ‘Hy3Node* Hy3Node::getFocusedNode(bool, bool)’:
/home/andy3153h/hy3-git/src/hy3/src/Hy3Node.cpp:240:1: warning: control reaches end of non-void function [-Wreturn-type]
  240 | }
      | ^
/home/andy3153h/hy3-git/src/hy3/src/Hy3Node.cpp: In member function ‘bool Hy3Node::isUrgent()’:
/home/andy3153h/hy3-git/src/hy3/src/Hy3Node.cpp:560:1: warning: control reaches end of non-void function [-Wreturn-type]
  560 | }
      | ^
make[2]: *** [CMakeFiles/hy3.dir/build.make:146: CMakeFiles/hy3.dir/src/SelectionHook.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[2]: *** [CMakeFiles/hy3.dir/build.make:118: CMakeFiles/hy3.dir/src/Hy3Node.cpp.o] Error 1
/home/andy3153h/hy3-git/src/hy3/src/Hy3Layout.cpp: In member function ‘virtual CWindow* Hy3Layout::getNextWindowCandidate(CWindow*)’:
/home/andy3153h/hy3-git/src/hy3/src/Hy3Layout.cpp:708:1: warning: control reaches end of non-void function [-Wreturn-type]
  708 | }
      | ^
/home/andy3153h/hy3-git/src/hy3/src/Hy3Layout.cpp: In member function ‘void Hy3Layout::setNodeSwallow(int, SetSwallowOption)’:
/home/andy3153h/hy3-git/src/hy3/src/Hy3Layout.cpp:1145:56: warning: this statement may fall through [-Wimplicit-fallthrough=]
 1145 |         case SetSwallowOption::NoSwallow: *containment = false;
      |                                           ~~~~~~~~~~~~~^~~~~~~
/home/andy3153h/hy3-git/src/hy3/src/Hy3Layout.cpp:1146:9: note: here
 1146 |         case SetSwallowOption::Swallow: *containment = true;
      |         ^~~~
/home/andy3153h/hy3-git/src/hy3/src/Hy3Layout.cpp:1146:54: warning: this statement may fall through [-Wimplicit-fallthrough=]
 1146 |         case SetSwallowOption::Swallow: *containment = true;
      |                                         ~~~~~~~~~~~~~^~~~~~
/home/andy3153h/hy3-git/src/hy3/src/Hy3Layout.cpp:1147:9: note: here
 1147 |         case SetSwallowOption::Toggle: *containment = !*containment;
      |         ^~~~
/home/andy3153h/hy3-git/src/hy3/src/Hy3Layout.cpp: In member function ‘bool Hy3Layout::shouldRenderSelected(CWindow*)’:
/home/andy3153h/hy3-git/src/hy3/src/Hy3Layout.cpp:1270:1: warning: control reaches end of non-void function [-Wreturn-type]
 1270 | }
      | ^
make[2]: *** [CMakeFiles/hy3.dir/build.make:104: CMakeFiles/hy3.dir/src/Hy3Layout.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:83: CMakeFiles/hy3.dir/all] Error 2
make: *** [Makefile:136: all] Error 2
==> ERROR: A failure occurred in build().
    Aborting...

Not working on newer versions

The plugin is not working in the new Git version. Errors pop up when I try to open something in a special workspace, and the layout is broken. When I attempt to create a tab, it doesn't do anything.
image

hyprland-0.29.1-1 compile errors

Getting compile errors on the latest hyprland release (0.29.1).

Tried with the arch AUR hyprland and hyprland-git packages, both fail.

AUR Hyprland:

[ 14%] Building CXX object CMakeFiles/hy3.dir/src/main.cpp.o
[ 28%] Building CXX object CMakeFiles/hy3.dir/src/dispatchers.cpp.o
[ 42%] Building CXX object CMakeFiles/hy3.dir/src/Hy3Layout.cpp.o
/home/tuxx/.cache/yay/hy3-git/src/hy3/src/Hy3Layout.cpp: In member function ‘virtual bool Hy3Layout::isWindowReachable(CWindow*)’:
/home/tuxx/.cache/yay/hy3-git/src/hy3/src/Hy3Layout.cpp:719:75: error: ‘isWindowReachable’ is not a member of ‘IHyprLayout’
  719 | turn this->getNodeFromWindow(window) != nullptr || IHyprLayout::isWindowReachable(window);
      |                                                                 ^~~~~~~~~~~~~~~~~

/home/tuxx/.cache/yay/hy3-git/src/hy3/src/Hy3Layout.cpp: In member function ‘void Hy3Layout::expand(int, ExpandOption, ExpandFullscreenOption)’:
/home/tuxx/.cache/yay/hy3-git/src/hy3/src/Hy3Layout.cpp:1240:1: warning: label ‘unfullscreen’ defined but not used [-Wunused-label]
 1240 | unfullscreen:
      | ^~~~~~~~~~~~
In file included from /home/tuxx/.cache/yay/hy3-git/src/hy3/src/globals.hpp:4,
                 from /home/tuxx/.cache/yay/hy3-git/src/hy3/src/Hy3Layout.cpp:4:
/home/tuxx/.cache/yay/hy3-git/src/hy3/src/log.hpp: In instantiation of ‘void hy3_log(LogLevel, const std::string&, Args&& ...) [with Args = {long unsigned int, bool&}; std::string = std::__cxx11::basic_string<char>]’:
/home/tuxx/.cache/yay/hy3-git/src/hy3/src/Hy3Layout.cpp:71:9:   required from here
/home/tuxx/.cache/yay/hy3-git/src/hy3/src/log.hpp:7:19: error: cannot convert ‘std::__cxx11::basic_string<char>’ to ‘const char*’
    7 |         Debug::log(level, "[hy3] " + fmt, args...);
      |         ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                   |
      |                   std::__cxx11::basic_string<char>
In file included from /usr/include/hyprland/src/defines.hpp:2,
                 from /usr/include/hyprland/src/Compositor.hpp:7,
                 from /home/tuxx/.cache/yay/hy3-git/src/hy3/src/Hy3Layout.cpp:1:
/usr/include/hyprland/src/debug/Log.hpp:19:56: note:   initializing argument 2 of ‘void Debug::log(LogLevel, const char*, ...)’
   19 |     void               log(LogLevel level, const char* fmt, ...);
      |                                            ~~~~~~~~~~~~^~~
/home/tuxx/.cache/yay/hy3-git/src/hy3/src/log.hpp: In instantiation of ‘void hy3_log(LogLevel, const std::string&, Args&& ...) [with Args = {long unsigned int, long unsigned int}; std::string = std::__cxx11::basic_string<char>]’:
/home/tuxx/.cache/yay/hy3-git/src/hy3/src/Hy3Layout.cpp:81:10:   required from here
/home/tuxx/.cache/yay/hy3-git/src/hy3/src/log.hpp:7:19: error: cannot convert ‘std::__cxx11::basic_string<char>’ to ‘const char*’
    7 |         Debug::log(level, "[hy3] " + fmt, args...);
      |         ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                   |
      |                   std::__cxx11::basic_string<char>
/usr/include/hyprland/src/debug/Log.hpp:19:56: note:   initializing argument 2 of ‘void Debug::log(LogLevel, const char*, ...)’
   19 |     void               log(LogLevel level, const char* fmt, ...);
      |                                            ~~~~~~~~~~~~^~~
/home/tuxx/.cache/yay/hy3-git/src/hy3/src/log.hpp: In instantiation of ‘void hy3_log(LogLevel, const std::string&, Args&& ...) [with Args = {long unsigned int}; std::string = std::__cxx11::basic_string<char>]’:
/home/tuxx/.cache/yay/hy3-git/src/hy3/src/Hy3Layout.cpp:144:10:   required from here
/home/tuxx/.cache/yay/hy3-git/src/hy3/src/log.hpp:7:19: error: cannot convert ‘std::__cxx11::basic_string<char>’ to ‘const char*’
    7 |         Debug::log(level, "[hy3] " + fmt, args...);
      |         ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                   |
      |                   std::__cxx11::basic_string<char>
/usr/include/hyprland/src/debug/Log.hpp:19:56: note:   initializing argument 2 of ‘void Debug::log(LogLevel, const char*, ...)’
   19 |     void               log(LogLevel level, const char* fmt, ...);
      |                                            ~~~~~~~~~~~~^~~
/home/tuxx/.cache/yay/hy3-git/src/hy3/src/log.hpp: In instantiation of ‘void hy3_log(LogLevel, const std::string&, Args&& ...) [with Args = {long unsigned int, int&, int&}; std::string = std::__cxx11::basic_string<char>]’:
/home/tuxx/.cache/yay/hy3-git/src/hy3/src/Hy3Layout.cpp:150:10:   required from here
/home/tuxx/.cache/yay/hy3-git/src/hy3/src/log.hpp:7:19: error: cannot convert ‘std::__cxx11::basic_string<char>’ to ‘const char*’
    7 |         Debug::log(level, "[hy3] " + fmt, args...);
      |         ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                   |
      |                   std::__cxx11::basic_string<char>
/usr/include/hyprland/src/debug/Log.hpp:19:56: note:   initializing argument 2 of ‘void Debug::log(LogLevel, const char*, ...)’
   19 |     void               log(LogLevel level, const char* fmt, ...);
      |                                            ~~~~~~~~~~~~^~~
/home/tuxx/.cache/yay/hy3-git/src/hy3/src/log.hpp: In instantiation of ‘void hy3_log(LogLevel, const std::string&, Args&& ...) [with Args = {long unsigned int, long unsigned int, long unsigned int, long unsigned int}; std::string = std::__cxx11::basic_string<char>]’:
/home/tuxx/.cache/yay/hy3-git/src/hy3/src/Hy3Layout.cpp:206:9:   required from here
/home/tuxx/.cache/yay/hy3-git/src/hy3/src/log.hpp:7:19: error: cannot convert ‘std::__cxx11::basic_string<char>’ to ‘const char*’
    7 |         Debug::log(level, "[hy3] " + fmt, args...);
      |         ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                   |
      |                   std::__cxx11::basic_string<char>
/usr/include/hyprland/src/debug/Log.hpp:19:56: note:   initializing argument 2 of ‘void Debug::log(LogLevel, const char*, ...)’
   19 |     void               log(LogLevel level, const char* fmt, ...);
      |                                            ~~~~~~~~~~~~^~~
/home/tuxx/.cache/yay/hy3-git/src/hy3/src/log.hpp: In instantiation of ‘void hy3_log(LogLevel, const std::string&, Args&& ...) [with Args = {long unsigned int, long unsigned int, long unsigned int}; std::string = std::__cxx11::basic_string<char>]’:
/home/tuxx/.cache/yay/hy3-git/src/hy3/src/Hy3Layout.cpp:227:9:   required from here
/home/tuxx/.cache/yay/hy3-git/src/hy3/src/log.hpp:7:19: error: cannot convert ‘std::__cxx11::basic_string<char>’ to ‘const char*’
    7 |         Debug::log(level, "[hy3] " + fmt, args...);
      |         ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                   |
      |                   std::__cxx11::basic_string<char>
/usr/include/hyprland/src/debug/Log.hpp:19:56: note:   initializing argument 2 of ‘void Debug::log(LogLevel, const char*, ...)’
   19 |     void               log(LogLevel level, const char* fmt, ...);
      |                                            ~~~~~~~~~~~~^~~
/home/tuxx/.cache/yay/hy3-git/src/hy3/src/log.hpp: In instantiation of ‘void hy3_log(LogLevel, const std::string&, Args&& ...) [with Args = {const int&}; std::string = std::__cxx11::basic_string<char>]’:
/home/tuxx/.cache/yay/hy3-git/src/hy3/src/Hy3Layout.cpp:296:9:   required from here
/home/tuxx/.cache/yay/hy3-git/src/hy3/src/log.hpp:7:19: error: cannot convert ‘std::__cxx11::basic_string<char>’ to ‘const char*’
    7 |         Debug::log(level, "[hy3] " + fmt, args...);
      |         ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                   |
      |                   std::__cxx11::basic_string<char>
/usr/include/hyprland/src/debug/Log.hpp:19:56: note:   initializing argument 2 of ‘void Debug::log(LogLevel, const char*, ...)’
   19 |     void               log(LogLevel level, const char* fmt, ...);
      |                                            ~~~~~~~~~~~~^~~
/home/tuxx/.cache/yay/hy3-git/src/hy3/src/Hy3Layout.cpp: In member function ‘virtual CWindow* Hy3Layout::getNextWindowCandidate(CWindow*)’:
/home/tuxx/.cache/yay/hy3-git/src/hy3/src/Hy3Layout.cpp:708:1: warning: control reaches end of non-void function [-Wreturn-type]
  708 | }
      | ^
/home/tuxx/.cache/yay/hy3-git/src/hy3/src/Hy3Layout.cpp: In member function ‘void Hy3Layout::setNodeSwallow(int, SetSwallowOption)’:
/home/tuxx/.cache/yay/hy3-git/src/hy3/src/Hy3Layout.cpp:1145:56: warning: this statement may fall through [-Wimplicit-fallthrough=]
 1145 |         case SetSwallowOption::NoSwallow: *containment = false;
      |                                           ~~~~~~~~~~~~~^~~~~~~
/home/tuxx/.cache/yay/hy3-git/src/hy3/src/Hy3Layout.cpp:1146:9: note: here
 1146 |         case SetSwallowOption::Swallow: *containment = true;
      |         ^~~~
/home/tuxx/.cache/yay/hy3-git/src/hy3/src/Hy3Layout.cpp:1146:54: warning: this statement may fall through [-Wimplicit-fallthrough=]
 1146 |         case SetSwallowOption::Swallow: *containment = true;
      |                                         ~~~~~~~~~~~~~^~~~~~
/home/tuxx/.cache/yay/hy3-git/src/hy3/src/Hy3Layout.cpp:1147:9: note: here
 1147 |         case SetSwallowOption::Toggle: *containment = !*containment;
      |         ^~~~
/home/tuxx/.cache/yay/hy3-git/src/hy3/src/Hy3Layout.cpp: In member function ‘bool Hy3Layout::shouldRenderSelected(CWindow*)’:
/home/tuxx/.cache/yay/hy3-git/src/hy3/src/Hy3Layout.cpp:1270:1: warning: control reaches end of non-void function [-Wreturn-type]
 1270 | }
      | ^
make[2]: *** [CMakeFiles/hy3.dir/build.make:104: CMakeFiles/hy3.dir/src/Hy3Layout.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:83: CMakeFiles/hy3.dir/all] Error 2
make: *** [Makefile:136: all] Error 2
==> ERROR: A failure occurred in build().
    Aborting...
 -> error making: hy3-git-exit status 4
 -> Failed to install the following packages. Manual intervention is required:
hy3-git - exit status 4

Aur hyprland-git:

[ 14%] Building CXX object CMakeFiles/hy3.dir/src/main.cpp.o
In file included from /usr/include/c++/13.2.1/memory:78,
                 from /usr/include/hyprland/src/Compositor.hpp:3,
                 from /home/tuxx/.cache/yay/hy3-git/src/hy3/src/main.cpp:3:
/usr/include/c++/13.2.1/bits/unique_ptr.h: In instantiation of ‘constexpr std::__detail::__unique_ptr_t<_Tp> std::make_unique(_Args&& ...) [with _Tp = Hy3Layout; _Args = {}; __detail::__unique_ptr_t<_Tp> = __detail::__unique_ptr_t<Hy3Layout>]’:
/home/tuxx/.cache/yay/hy3-git/src/hy3/src/main.cpp:55:1:   required from here
/usr/include/c++/13.2.1/bits/unique_ptr.h:1070:30: error: invalid new-expression of abstract class type ‘Hy3Layout’
 1070 |     { return unique_ptr<_Tp>(new _Tp(std::forward<_Args>(__args)...)); }
      |                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /home/tuxx/.cache/yay/hy3-git/src/hy3/src/globals.hpp:3,
                 from /home/tuxx/.cache/yay/hy3-git/src/hy3/src/main.cpp:7:
/home/tuxx/.cache/yay/hy3-git/src/hy3/src/Hy3Layout.hpp:67:7: note:   because the following virtual functions are pure within ‘Hy3Layout’:
   67 | class Hy3Layout: public IHyprLayout {
      |       ^~~~~~~~~
In file included from /usr/include/hyprland/src/layout/DwindleLayout.hpp:3,
                 from /usr/include/hyprland/src/managers/LayoutManager.hpp:3,
                 from /usr/include/hyprland/src/Compositor.hpp:14:
/usr/include/hyprland/src/layout/IHyprLayout.hpp:46:18: note:     ‘virtual void IHyprLayout::onWindowCreatedTiling(CWindow*, eDirection)’
   46 |     virtual void onWindowCreatedTiling(CWindow*, eDirection direction = DIRECTION_DEFAULT) = 0;
      |                  ^~~~~~~~~~~~~~~~~~~~~
make[2]: *** [CMakeFiles/hy3.dir/build.make:76: CMakeFiles/hy3.dir/src/main.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:83: CMakeFiles/hy3.dir/all] Error 2
make: *** [Makefile:136: all] Error 2
==> ERROR: A failure occurred in build().
    Aborting...
 -> error making: hy3-git-exit status 4
 -> Failed to install the following packages. Manual intervention is required:
hy3-git - exit status 4

Hy3 is causing hyprland not to start

I am on NixOS unstable with SDDM as display manager. Today whenever I tried logging in it would just bring me back to SDDM without even starting. There was nothing in the logs of Hyprland or SDDM. When I removed the plugin from the config, Hyprland worked.

hy3:changegroup tab/untab toggle

Hello,
I'm loving the new hy3:changegroup dispatcher to quickly switch between layouts.
Would it be possible to add a "toggle_tabbed" option to this dispatcher, in order to switch between tabbed and not tabbed layouts with a single keybind ? Similar to "opposite" which toggles between horizontal and vertical splits. I'd love to have such an option for my workflow.

Anyway, thx for the massive work on this plugin, hy3 is the goat.

Move group to workspace

I'd really like a way to move a whole group to another workspace, the moveworkspaceclient dispatcher only works on single windows

No auto-rerendering on changing Hyprland settings

This happened somewhere between 0.30 release and the current master 2b53cca. It works fine on bare Hyprland but not with hy3. The gist is that whenever I do something to my Hyprland (or Hy3) config I'd need to e.g. switch the focused window in order for the change to be applied, and it's like this for both editing config values manually and using hyprctl.

"undefined variable 'hy3'" when following Manual (Nix) instructions without home-manager

I'm on NixOS unstable (24.05), running Hyprland v0.34.0, but not using either home-manager nor flakes. If I add the following to my configuration.nix it throws error: undefined variable 'hy3' when I rebuild:

wayland.windowManager.hyprland = {
  # ...
  extraConfig = ''
    plugin = ${hy3.packages.x86_64-linux.hy3}/lib/libhy3.so
  '';
};

I have hyprlandPlugins.hy3 in my environment.systemPackages = with pkgs; []. I also tried just hy3 for the package name and get the same error.

It's entirely possible I'm doing something wrong or missing some step. But I'm really trying to avoid flakes and home-manager at the moment.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.