diff --git a/config/niri/.config/niri/config/misc.kdl b/config/niri/.config/niri/config/misc.kdl index db5af45..8c18b91 100644 --- a/config/niri/.config/niri/config/misc.kdl +++ b/config/niri/.config/niri/config/misc.kdl @@ -1,7 +1,7 @@ screenshot-path "~/Pictures/Screenshots/niri_screenshot_%Y-%m-%d_%H-%M-%S.png" debug { - render-drm-device "/dev/dri/renderD128" + render-drm-device "/dev/dri/renderD129" } // gestures { diff --git a/config/scripts/.local/scripts/kgp-query b/config/scripts/.local/scripts/kgp-query new file mode 100755 index 0000000..8d2191f --- /dev/null +++ b/config/scripts/.local/scripts/kgp-query @@ -0,0 +1,52 @@ +#!/usr/bin/env bash + +# Ref: https://sw.kovidgoyal.net/kitty/graphics-protocol/#querying-support-and-available-transmission-mediums + +set -euo pipefail + +# Ensure in a interactive terminal +[ ! -t 0 ] && exit 1 + +# Construct query +QUERY_ID=$RANDOM +QUERY_CODE=$(printf "\033_Gi=%d,s=1,v=1,a=q,t=d,f=24;AAAA\033\\" "$QUERY_ID") +EXPECTED_RESPONSE=$(printf "\033_Gi=%d;OK\033\\" "$QUERY_ID") +# Construct fence code that most terminals will respond to +# to ensure that at least something will be sent back and +# to detect the end of the response +FENCE_CODE=$(printf "\033[c") + +# Set terminal to raw mode with timeout as 0.5s +stty_orig=$(stty -g) +trap 'stty "$stty_orig"' EXIT +stty -echo -icanon min 0 time 5 + +printf "%s%s" "$QUERY_CODE" "$FENCE_CODE" > /dev/tty + +response="" +ret=1 +while true; do + char=$(dd bs=1 count=1 2>/dev/null) || break + + if [ -z "$char" ]; then + break + fi + + response+="$char" + + if [[ "$response" == *"$EXPECTED_RESPONSE"* ]]; then + ret=0 + # Keep reading until response is complete to + # avoid leaving unread data in the terminal + fi + + if [[ "$response" == *$'\033['*'c' ]]; then + break + fi + + if [ ${#response} -gt 1024 ]; then + break + fi +done + +exit $ret diff --git a/config/scripts/.local/scripts/kitty-tgp-query b/config/scripts/.local/scripts/kitty-tgp-query deleted file mode 100755 index 5650bad..0000000 --- a/config/scripts/.local/scripts/kitty-tgp-query +++ /dev/null @@ -1,88 +0,0 @@ -#!/usr/bin/env python3 - -import re -import sys -import os -import termios -from select import select -from time import time_ns - -QUERY_ID = time_ns() & 0xFFFFFF -QUERY_CODE = f"\033_Gi={QUERY_ID},s=1,v=1,a=q,t=d,f=24;AAAA\033\\" -EXPECTED_RESPONSE = f"\033_Gi={QUERY_ID};OK\033\\" -# Device Attributes request that most terminals respond to -FENCE_CODE = "\033[c" -FENCE_PATTERN = re.compile(r"\033\[\?.*?c") -TIMEOUT = 0.05 # seconds - -# Terminals that are known to support -SUPPORTED_TERMINALS = { - "xterm-kitty", - "xterm-ghostty" -} -# and those who don't -UNSUPPORTED_TERMINALS = { - "alacritty", - "linux", - "kmscon" -} -# the rest will be tested dynamically - - -def check_terminal_graphics(): - if os.environ.get("TERM") in UNSUPPORTED_TERMINALS: - return False - if os.environ.get("TERM") in SUPPORTED_TERMINALS: - return True - - code = QUERY_CODE + FENCE_CODE - - fd = sys.stdin.fileno() - if not os.isatty(fd): - return False - - old_settings = termios.tcgetattr(fd) - response = "" - - try: - new_settings = termios.tcgetattr(fd) - # Disable canonical mode and echo - new_settings[3] = new_settings[3] & ~termios.ICANON & ~termios.ECHO - termios.tcsetattr(fd, termios.TCSANOW, new_settings) - - sys.stdout.write(code) - sys.stdout.flush() - - while True: - # Set a timeout to prevent blocking indefinitely - r, w, e = select([fd], [], [], TIMEOUT) - if not r: - break - - char = os.read(fd, 1) - if not char: - break - - response += char.decode('utf-8', errors='ignore') - - # If received expected response, return True - if EXPECTED_RESPONSE in response: - return True - - # If received fence response before any expected response, return False - if FENCE_PATTERN.search(response): - return False - - except Exception: - pass - finally: - termios.tcsetattr(fd, termios.TCSANOW, old_settings) - - return False - - -if __name__ == "__main__": - if check_terminal_graphics(): - sys.exit(0) - else: - sys.exit(1) diff --git a/config/shell/.config/fish/conf.d/60-fetch.fish b/config/shell/.config/fish/conf.d/60-fetch.fish index df2df34..ba3a2b3 100644 --- a/config/shell/.config/fish/conf.d/60-fetch.fish +++ b/config/shell/.config/fish/conf.d/60-fetch.fish @@ -1,7 +1,7 @@ if not set -q fetch_logo_type - if type -q kitty-tgp-query; and kitty-tgp-query + if type -q kgp-query; and kgp-query set -g fetch_logo_type kitty - else if type -q kitty-tgp-query + else if type -q kgp-query set -g fetch_logo_type logo else set -g fetch_logo_type auto