dotfiles/packages/scripts/spawn-term/default.nix
2025-12-15 12:02:08 +01:00

48 lines
1.3 KiB
Nix

{
lib,
pkgs,
...
}:
lib._elements.writeNushellApplication pkgs {
name = "spawn-term";
runtimeInputs = with pkgs; [kdotool];
text = ''
let compositor = $env.XDG_CURRENT_DESKTOP? | default ""
let window_info = if ($compositor | str contains "niri") {
let focused_window = (niri msg --json focused-window | from json | get id?)
if ($focused_window | is-empty) {
{ is_kitty: false, pid: null }
} else {
let info = (niri msg --json windows | from json | where id == $focused_window | first)
{ is_kitty: ($info.app_id? == "kitty"), pid: $info.pid? }
}
} else {
let focused_window = (kdotool getactivewindow)
{
is_kitty: ((kdotool getwindowclassname $focused_window) == "kitty"),
pid: (kdotool getwindowpid $focused_window | into int)
}
}
if $window_info.is_kitty {
let kitty_pid = $window_info.pid
if ($kitty_pid | is-empty) {
kitty
exit 0
}
let shell_pid = (ps | where ppid == $kitty_pid | where name != "kitten" | get pid | first)
if ($shell_pid | is-empty) {
kitty
exit 0
}
let path = ($"/proc/($shell_pid)/cwd" | path expand)
kitty --directory $path
} else {
kitty
}
'';
}