76 lines
2.9 KiB
Nix
76 lines
2.9 KiB
Nix
{ config, pkgs, lib, ... }:
|
|
let
|
|
cfg = config.wayland.windowManager.hyprland;
|
|
in
|
|
{
|
|
config = lib.mkIf cfg.enable {
|
|
wayland.windowManager.hyprland.settings = let
|
|
exe = lib.getExe;
|
|
scratchpads = [
|
|
(rec {
|
|
title = "Floating terminal";
|
|
class = "floatingTerminal";
|
|
command = "uwsm app -- ${exe pkgs.alacritty} --class ${class} -e ${exe pkgs.tmux} new-session -A -s f";
|
|
size = { h = 90; w = 95; };
|
|
keys = [
|
|
"$mod, RETURN"
|
|
"$mod, SPACE"
|
|
];
|
|
})
|
|
(rec {
|
|
title = "Ncmpcpp";
|
|
class = "floatingNcmpcpp";
|
|
command = "uwsm app -- ${exe pkgs.alacritty} --class ${class} -e ${exe pkgs.ncmpcpp}";
|
|
size = { h = 95; w = 95; };
|
|
keys = [ "$mod, Q" ];
|
|
})
|
|
# "$mod, W, emacs"
|
|
# "$mod, E, filebrowser"
|
|
# "$mod, X, taskwarriortui"
|
|
];
|
|
in {
|
|
bind = lib.pipe scratchpads [
|
|
(map ({ keys, command, class, ... }:
|
|
(map (key: let
|
|
# TODO: rewrite this to take arguments instead of creating n copies
|
|
invokeIfNotRunningAndToggleWorkspace = pkgs.writeShellApplication {
|
|
name = "hyprland-toggle-scratchpad-${class}";
|
|
runtimeInputs = [ cfg.finalPackage pkgs.jq ];
|
|
text = ''
|
|
SCRATCHPAD_PROGRAM_EXISTS=$(hyprctl clients -j | jq -r '[.[].class]|any(. == "${class}")')
|
|
CURRENT_WORKSPACE_ID=$(hyprctl activeworkspace -j | jq -r '.id')
|
|
|
|
if [ "$SCRATCHPAD_PROGRAM_EXISTS" != "true" ]; then
|
|
${command} &
|
|
hyprctl dispatch movetoworkspacesilent "''${CURRENT_WORKSPACE_ID},class:${class}"
|
|
hyprctl dispatch focuswindow "class:${class}"
|
|
else
|
|
SCRATCHPAD_PROGRAM_WORKSPACE_ID=$(hyprctl clients -j | jq '.[] | select( .class == "${class}") | .workspace.id')
|
|
if [ "$SCRATCHPAD_PROGRAM_WORKSPACE_ID" != "$CURRENT_WORKSPACE_ID" ]; then
|
|
hyprctl dispatch movetoworkspacesilent "''${CURRENT_WORKSPACE_ID},class:${class}"
|
|
hyprctl dispatch focuswindow "class:${class}"
|
|
else
|
|
hyprctl dispatch movetoworkspacesilent "special:${class}Ws,class:${class}"
|
|
fi
|
|
fi
|
|
'';
|
|
};
|
|
in "${key}, exec, ${lib.getExe invokeIfNotRunningAndToggleWorkspace}"
|
|
) keys)
|
|
))
|
|
lib.flatten
|
|
];
|
|
|
|
windowrulev2 = lib.pipe scratchpads [
|
|
(map ({ class, size, ... }: [
|
|
"workspace special:${class}Ws, class:^(${class})$"
|
|
"float, class:^${class}$"
|
|
"size ${toString size.w}% ${toString size.h}%, class:^(${class})$"
|
|
"move ${toString ((100 - size.w) / 2)}% ${toString ((100 - size.h) / 2)}%, class:^(${class})$"
|
|
]))
|
|
lib.flatten
|
|
];
|
|
};
|
|
};
|
|
}
|