From c050291fef34037b77b334b3dab4be5d5fdb0ed5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Av=C3=A9?= Date: Fri, 27 Mar 2026 00:32:19 +0700 Subject: [PATCH] Add proper terminal launching --- home/niri/default.nix | 56 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 53 insertions(+), 3 deletions(-) diff --git a/home/niri/default.nix b/home/niri/default.nix index 3635535..9ed6440 100644 --- a/home/niri/default.nix +++ b/home/niri/default.nix @@ -4,6 +4,52 @@ playerctl = "${pkgs.playerctl}/bin/playerctl"; wpctl = "${pkgs.wireplumber}/bin/wpctl"; brightnessctl = "${pkgs.brightnessctl}/bin/brightnessctl"; + terminal-name = "foot"; + launch_terminal = pkgs.writeShellScriptBin "launch_terminal" '' + function find_leaf_pid(){ + local PID + local RET + local NAME + PID=$1 + for CHILD_PID in $(pgrep -P "$PID"); do + RET=$(find_leaf_pid "$CHILD_PID") + if [ "$RET" != "" ]; then + PID="$RET" + fi + done + NAME=$(ps -p "$PID" -o comm=) + if [ "$NAME" == "zsh" ]; then + echo "$PID" + elif [ "$NAME" == "ssh" ]; then + echo "$PID" + fi + } + + LEAF_PID=$(find_leaf_pid "$1") + if [ "$(ps -p "$LEAF_PID" -o comm=)" == "ssh" ]; then + SSH_COMMAND=$(ps -p "$LEAF_PID" -o args --no-headers) + if [[ "$SSH_COMMAND" == *"waypipe"* ]]; then + CLIENT=$(echo "$SSH_COMMAND" | awk '{ print $5 }') + PREVIOUS_SESSION_ID=$(grep -z "SSH_SESSION_ID" "/proc/$LEAF_PID/environ" | xargs -0 -n 1 | grep -oP "[0-9]*") + SSH_SESSION_ID=$RANDOM + ${terminal} -e zsh -c "SSH_SESSION_ID=$SSH_SESSION_ID waypipe ssh -t \"$CLIENT\" env SSH_SESSION_ID=\"$SSH_SESSION_ID\" PREVIOUS_SESSION_ID=\"$PREVIOUS_SESSION_ID\" \"zsh --login\"" + else + ${terminal} -e zsh -c "ssh -t \"$(echo "$SSH_COMMAND" | awk '{ print $2 }')\"" + fi + + else # Not an ssh session + if [ "$(ps -p "$1" -o comm=)" == "${terminal-name}" ]; then + CWD=$(readlink -e /proc/"$LEAF_PID"/cwd) + if [ "$CWD" != "" ]; then + ${terminal} --working-directory "$CWD" + else + ${terminal} + fi + else + ${terminal} + fi + fi + ''; in { # Since native Home Manager doesn't have a programs.niri module yet, # we generate the KDL configuration file directly. @@ -57,6 +103,10 @@ in { spawn-at-startup "${pkgs.mate-polkit}/bin/polkit-mate" prefer-no-csd + hotkey-overlay { + skip-at-startup + } + gestures { hot-corners { off @@ -93,13 +143,13 @@ in { binds { // General Binds - Mod+Return { spawn "${terminal}"; } + Mod+Return { spawn "sh" "-c" "${launch_terminal}/bin/launch_terminal $(niri msg --json focused-window | ${pkgs.jq}/bin/jq .pid)"; } Mod+Shift+Return { spawn "${terminal}"; } Mod+Q { close-window; } Mod+A { spawn "${nautilus}"; } Mod+B { spawn "Helium"; } Mod+M { maximize-column; } - Mod+Shift+F { toggle-windowed-fullscreen; } + Mod+F {maximize-window-to-edges;} Mod+Tab { toggle-overview; } // Vicinae Binds @@ -154,7 +204,7 @@ in { Mod+Shift+8 { move-column-to-workspace 8; } Mod+Shift+9 { move-column-to-workspace 9; } - Mod+Mod+Sys_Req { screenshot; } + Print { screenshot; } Ctrl+Alt+L {spawn "${pkgs.hyprlock}/bin/hyprlock"; } XF86MonBrightnessUp { spawn "${brightnessctl}" "set" "+10%"; }