diff options
Diffstat (limited to 'accounts/gkleen@sif')
| -rw-r--r-- | accounts/gkleen@sif/hyprland.nix | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/accounts/gkleen@sif/hyprland.nix b/accounts/gkleen@sif/hyprland.nix index 052f35b0..d4105952 100644 --- a/accounts/gkleen@sif/hyprland.nix +++ b/accounts/gkleen@sif/hyprland.nix | |||
| @@ -256,6 +256,72 @@ in { | |||
| 256 | [[ -n "$FUZZEL_RES" ]] || exit 1 | 256 | [[ -n "$FUZZEL_RES" ]] || exit 1 |
| 257 | wl-copy "$(cut -d ':' -f 1 <<<"$FUZZEL_RES" | tr -d '\n')" && wtype -k XF86Paste | 257 | wl-copy "$(cut -d ':' -f 1 <<<"$FUZZEL_RES" | tr -d '\n')" && wtype -k XF86Paste |
| 258 | ''}" | 258 | ''}" |
| 259 | "$mainMod, B, exec, ${pkgs.writeShellScript "bring" '' | ||
| 260 | export PATH="${lib.makeBinPath (with pkgs; [ cfg.programs.fuzzel.package gawk gojq cfg.wayland.windowManager.hyprland.package ])}:$PATH" | ||
| 261 | |||
| 262 | state="$(hyprctl -j clients)" | ||
| 263 | active_window="$(hyprctl -j activewindow)" | ||
| 264 | active_workspace="$(hyprctl -j activeworkspace | gojq -r '.id')" | ||
| 265 | |||
| 266 | current_addr="$(echo "$active_window" | gojq -r '.address')" | ||
| 267 | |||
| 268 | window="$(echo "$state" | | ||
| 269 | gojq -r '.[] | select(.workspace.id == '"$active_workspace"') | select(.monitor != -1 ) | "\(.title)\t\(.address)"' | | ||
| 270 | fuzzel --log-level=warning --dmenu)" | ||
| 271 | |||
| 272 | addr="$(echo "$window" | awk -F $'\t' '{print $2}')" | ||
| 273 | |||
| 274 | if [[ "$addr" = "$current_addr" ]]; then | ||
| 275 | exit 0 | ||
| 276 | fi | ||
| 277 | |||
| 278 | fullscreen_on_same_ws="$(echo "$state" | gojq -r '.[] | select(.fullscreen == true) | select(.workspace.id == '"$active_workspace"') | .address')" | ||
| 279 | |||
| 280 | if [[ "$window" != "" ]]; then | ||
| 281 | if [[ "$fullscreen_on_same_ws" == "" ]]; then | ||
| 282 | hyprctl dispatch focuswindow address:"''${addr}" | ||
| 283 | else | ||
| 284 | # If we want to focus app_A and app_B is fullscreen on the same workspace, | ||
| 285 | # app_A will get focus, but app_B will remain on top. | ||
| 286 | # This monstrosity is to make sure app_A will end up on top instead. | ||
| 287 | # XXX: doesn't handle fullscreen 0, but I don't care. | ||
| 288 | hyprctl --batch "dispatch focuswindow address:''${fullscreen_on_same_ws}; dispatch fullscreen 1; dispatch focuswindow address:''${addr}; dispatch fullscreen 1" | ||
| 289 | fi | ||
| 290 | fi | ||
| 291 | ''}" | ||
| 292 | "$mainMod SHIFT, B, exec, ${pkgs.writeShellScript "bring" '' | ||
| 293 | export PATH="${lib.makeBinPath (with pkgs; [ cfg.programs.fuzzel.package gawk gojq cfg.wayland.windowManager.hyprland.package ])}:$PATH" | ||
| 294 | |||
| 295 | state="$(hyprctl -j clients)" | ||
| 296 | active_window="$(hyprctl -j activewindow)" | ||
| 297 | |||
| 298 | current_addr="$(echo "$active_window" | gojq -r '.address')" | ||
| 299 | |||
| 300 | window="$(echo "$state" | | ||
| 301 | gojq -r '.[] | select(.monitor != -1 ) | "\(.title)\t\(.workspace.name)\t\(.address)"' | | ||
| 302 | fuzzel --log-level=warning --dmenu)" | ||
| 303 | |||
| 304 | addr="$(echo "$window" | awk -F $'\t' '{print $3}')" | ||
| 305 | ws="$(echo "$window" | awk -F $'\t' '{print $2}')" | ||
| 306 | |||
| 307 | if [[ "$addr" = "$current_addr" ]]; then | ||
| 308 | exit 0 | ||
| 309 | fi | ||
| 310 | |||
| 311 | fullscreen_on_same_ws="$(echo "$state" | gojq -r ".[] | select(.fullscreen == true) | select(.workspace.name == \"$ws\") | .address")" | ||
| 312 | |||
| 313 | if [[ "$window" != "" ]]; then | ||
| 314 | if [[ "$fullscreen_on_same_ws" == "" ]]; then | ||
| 315 | hyprctl dispatch focuswindow address:"''${addr}" | ||
| 316 | else | ||
| 317 | # If we want to focus app_A and app_B is fullscreen on the same workspace, | ||
| 318 | # app_A will get focus, but app_B will remain on top. | ||
| 319 | # This monstrosity is to make sure app_A will end up on top instead. | ||
| 320 | # XXX: doesn't handle fullscreen 0, but I don't care. | ||
| 321 | hyprctl --batch "dispatch focuswindow address:''${fullscreen_on_same_ws}; dispatch fullscreen 1; dispatch focuswindow address:''${addr}; dispatch fullscreen 1" | ||
| 322 | fi | ||
| 323 | fi | ||
| 324 | ''}" | ||
| 259 | 325 | ||
| 260 | "$mainMod CTRL, return, togglespecialworkspace, term" | 326 | "$mainMod CTRL, return, togglespecialworkspace, term" |
| 261 | "$mainMod CTRL, e, togglespecialworkspace, edit" | 327 | "$mainMod CTRL, e, togglespecialworkspace, edit" |
