nixos-config/home-manager/modules/eww/config/scripts/workspaces.nu

56 lines
1.3 KiB
Text
Executable file

#!/usr/bin/env nu
module ipc {
def ipcCmd [] {
if (is-sway) {
"swaymsg"
} else if (is-i3) {
"i3-msg"
} else {
error make { msg: "This script only supports sway or i3" }
}
}
def is-sway [] {
("SWAYSOCK" in $env)
}
def is-i3 [] {
("I3SOCK" in $env)
}
export def ipc-cmd [--raw, ...parameters: string] {
let result = (run-external --redirect-stdout (ipcCmd) ...$parameters)
if $raw {
$result
} else {
$result | from json
}
}
}
use ipc ipc-cmd
def workspaces [] {
let workspaces = (ipc-cmd "-t" "get_workspaces" | select id name focused urgent visible)
let mode = (ipc-cmd "-t" "get_binding_state")
let focused_title_full = ((ipc-cmd --raw "-t" "get_tree") | jaq -r '.. | (.nodes? // empty)[] | select(.focused) | {name}' | from json).name
mut focused_title = ($focused_title_full | str substring -g 0..150)
if ($focused_title_full | str length) > 150 {
$focused_title = ($focused_title | append "..." | str join "")
}
{ workspaces: $workspaces, mode: $mode.name, title: $focused_title }
}
def main [] {
print (workspaces | to json -r)
loop {
ipc-cmd --raw '-t' 'subscribe' '["workspace","window","mode"]' out+err> /dev/null
try {
print (workspaces | to json -r)
}
}
}