diff --git a/home/common/programs/hyprland/default.nix b/home/common/programs/hyprland/default.nix index dd9bcd9..ca34a52 100644 --- a/home/common/programs/hyprland/default.nix +++ b/home/common/programs/hyprland/default.nix @@ -110,6 +110,7 @@ in "hyprpanel" "nm-applet" "hyprsunset" + "nerd-dictation begin --simulate-input-tool WTYPE --suspend-on-start && touch ~/.cache/nerd-dictation-suspended" ]; workspace = [ # no gaps when only window @@ -169,6 +170,9 @@ in # rofi "$mod, space, exec, launcher_t2" + # nerd-dictation + "$mod, d, exec, nerd-dictation-toggle" + # printscreen ", Print, exec, hyprshot -m region --output-folder ~/downloads/screenshots" "SHIFT, Print, exec, hyprshot -m window --output-folder ~/screenshots" diff --git a/home/common/programs/nerd-dictation.nix b/home/common/programs/nerd-dictation.nix index 3b6f945..f1d4c63 100644 --- a/home/common/programs/nerd-dictation.nix +++ b/home/common/programs/nerd-dictation.nix @@ -78,10 +78,49 @@ let exec ${nerd-dictation-env}/bin/nerd-dictation-fhs -c "source $VENV/bin/activate && python3 ${nerd-dictation-src}/nerd-dictation $*" ''; + + # Toggle script for hyprland keybind + nerd-dictation-toggle = pkgs.writeShellScriptBin "nerd-dictation-toggle" '' + hyprctl() { + env -u LD_LIBRARY_PATH ${pkgs.hyprland}/bin/hyprctl "$@" + } + + set_border() { + local size=$1 + local color=$2 + # Unset existing rules for single-window workspaces + hyprctl keyword windowrulev2 "unset, floating:0, onworkspace:w[t1]" + hyprctl keyword windowrulev2 "unset, floating:0, onworkspace:w[tg1]" + hyprctl keyword windowrulev2 "unset, floating:0, onworkspace:f[1]" + hyprctl keyword windowrulev2 "unset, fullscreen:1" + # Re-add with specified border size + hyprctl keyword windowrulev2 "bordersize $size, floating:0, onworkspace:w[t1]" + hyprctl keyword windowrulev2 "rounding 0, floating:0, onworkspace:w[t1]" + hyprctl keyword windowrulev2 "bordersize $size, floating:0, onworkspace:w[tg1]" + hyprctl keyword windowrulev2 "rounding 0, floating:0, onworkspace:w[tg1]" + hyprctl keyword windowrulev2 "bordersize $size, floating:0, onworkspace:f[1]" + hyprctl keyword windowrulev2 "rounding 0, floating:0, onworkspace:f[1]" + hyprctl keyword windowrulev2 "bordersize $size, fullscreen:1" + # Set border color + hyprctl keyword general:col.active_border "$color" + } + + # Check if currently suspended (file exists when suspended) + if [ -f "$HOME/.cache/nerd-dictation-suspended" ]; then + nerd-dictation resume + rm -f "$HOME/.cache/nerd-dictation-suspended" + set_border 5 "rgb(ff0000)" + else + nerd-dictation suspend + touch "$HOME/.cache/nerd-dictation-suspended" + set_border 0 "0x99999999" + fi + ''; in { home.packages = [ nerd-dictation + nerd-dictation-toggle pkgs.ydotool ];