fetch: add sixel-query & update sixel files; update kgp-query with better timeout handling
This commit is contained in:
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -36,7 +36,7 @@ binds {
|
||||
Alt+Space { spawn-sh "pkill -x rofi || rofi -show drun"; }
|
||||
|
||||
// Actions
|
||||
Mod+V { spawn-sh "pkill -x rofi || rofi-cliphist"; }
|
||||
Mod+V { spawn "shorinclip-wrap"; }
|
||||
Mod+Period { spawn-sh "pkill -x rofi || rofi-emoji"; }
|
||||
Ctrl+Alt+Delete { spawn-sh "pkill -x wlogout || wlogout -p layer-shell"; }
|
||||
Print { spawn "niri" "msg" "action" "screenshot-screen"; }
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
screenshot-path "~/Pictures/Screenshots/niri_screenshot_%Y-%m-%d_%H-%M-%S.png"
|
||||
|
||||
debug {
|
||||
render-drm-device "/dev/dri/renderD129"
|
||||
render-drm-device "/dev/dri/renderD128"
|
||||
}
|
||||
|
||||
// gestures {
|
||||
|
||||
@@ -19,18 +19,16 @@ 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
|
||||
stty -echo -icanon min 1 time 0
|
||||
|
||||
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
|
||||
IFS= read -r -N 1 -t 0.3 char || {
|
||||
[ -z "$char" ] && break
|
||||
}
|
||||
|
||||
response+="$char"
|
||||
|
||||
|
||||
@@ -16,31 +16,31 @@
|
||||
set -euo pipefail
|
||||
|
||||
[ "$(id -u)" -eq 0 ] && {
|
||||
echo "[ERROR] Do not run this script in sudo mode." >&2
|
||||
exit 1
|
||||
echo "[ERROR] Do not run this script in sudo mode." >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
find_luks_device() {
|
||||
# Set $devices array to all LUKS devices
|
||||
# lsblk command explained - n: no headings, p: full path, o: output format, l: list format
|
||||
mapfile -t devices < <(lsblk -nplo NAME,FSTYPE | awk '$2 == "crypto_LUKS" {print $1}')
|
||||
# Set $devices array to all LUKS devices
|
||||
# lsblk command explained - n: no headings, p: full path, o: output format, l: list format
|
||||
mapfile -t devices < <(lsblk -nplo NAME,FSTYPE | awk '$2 == "crypto_LUKS" {print $1}')
|
||||
|
||||
if [ ${#devices[@]} -eq 0 ]; then
|
||||
echo "[ERROR] No LUKS devices found." >&2
|
||||
return 1
|
||||
elif [ ${#devices[@]} -eq 1 ]; then
|
||||
echo "${devices[0]}"
|
||||
else
|
||||
# Multiple devices found
|
||||
# Select one using fzf if available
|
||||
if command -v fzf >/dev/null; then
|
||||
printf "%s\n" "${devices[@]}" | fzf --prompt="Select LUKS device: "
|
||||
else
|
||||
echo "[ERROR] Multiple LUKS devices found. Please set LUKS_PARTITION env var." >&2
|
||||
printf "%s\n" "${devices[@]}" >&2
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
if [ ${#devices[@]} -eq 0 ]; then
|
||||
echo "[ERROR] No LUKS devices found." >&2
|
||||
return 1
|
||||
elif [ ${#devices[@]} -eq 1 ]; then
|
||||
echo "${devices[0]}"
|
||||
else
|
||||
# Multiple devices found
|
||||
# Select one using fzf if available
|
||||
if command -v fzf >/dev/null; then
|
||||
printf "%s\n" "${devices[@]}" | fzf --prompt="Select LUKS device: "
|
||||
else
|
||||
echo "[ERROR] Multiple LUKS devices found. Please set LUKS_PARTITION env var." >&2
|
||||
printf "%s\n" "${devices[@]}" >&2
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
LUKS_PARTITION="${LUKS_PARTITION:-$(find_luks_device)}"
|
||||
@@ -57,43 +57,44 @@ echo "[INFO] Mount: $LUKS_MOUNT_POINT" >&2
|
||||
|
||||
mount_point_created=0
|
||||
if [ ! -d "$LUKS_MOUNT_POINT" ]; then
|
||||
sudo mkdir -p "$LUKS_MOUNT_POINT"
|
||||
mount_point_created=1
|
||||
sudo mkdir -p "$LUKS_MOUNT_POINT"
|
||||
mount_point_created=1
|
||||
fi
|
||||
|
||||
if ! sudo cryptsetup open "$LUKS_PARTITION" "$LUKS_MAPPER_NAME"; then
|
||||
echo "[ERROR] Failed to open device." >&2
|
||||
exit 1
|
||||
echo "[ERROR] Failed to open device." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cleanup() {
|
||||
echo "[INFO] Cleaning up..." >&2
|
||||
# Make sure we are not in the mount point when unmounting
|
||||
cd "$HOME" || true
|
||||
if mountpoint -q "$LUKS_MOUNT_POINT"; then
|
||||
sudo umount "$LUKS_MOUNT_POINT" || echo "[WARNING] Failed to unmount." >&2
|
||||
fi
|
||||
if [ -e "/dev/mapper/$LUKS_MAPPER_NAME" ]; then
|
||||
sudo cryptsetup close "$LUKS_MAPPER_NAME" || echo "[WARNING] Failed to close LUKS mapper." >&2
|
||||
fi
|
||||
if [ $mount_point_created -eq 1 ] && [ -d "$LUKS_MOUNT_POINT" ]; then
|
||||
sudo rmdir "$LUKS_MOUNT_POINT" || echo "[WARNING] Failed to remove mount point." >&2
|
||||
fi
|
||||
echo "[INFO] Done." >&2
|
||||
echo "[INFO] Cleaning up..." >&2
|
||||
# Make sure we are not in the mount point when unmounting
|
||||
cd "$HOME" || true
|
||||
if mountpoint -q "$LUKS_MOUNT_POINT"; then
|
||||
sudo umount "$LUKS_MOUNT_POINT" || echo "[WARNING] Failed to unmount." >&2
|
||||
fi
|
||||
if [ -e "/dev/mapper/$LUKS_MAPPER_NAME" ]; then
|
||||
sudo cryptsetup close "$LUKS_MAPPER_NAME" || echo "[WARNING] Failed to close LUKS mapper." >&2
|
||||
fi
|
||||
if [ $mount_point_created -eq 1 ] && [ -d "$LUKS_MOUNT_POINT" ]; then
|
||||
sudo rmdir "$LUKS_MOUNT_POINT" || echo "[WARNING] Failed to remove mount point." >&2
|
||||
fi
|
||||
echo "[INFO] Done." >&2
|
||||
}
|
||||
trap cleanup EXIT INT TERM
|
||||
|
||||
sudo mount "/dev/mapper/$LUKS_MAPPER_NAME" "$LUKS_MOUNT_POINT"
|
||||
|
||||
sudo chown "$(whoami):$(whoami)" "$LUKS_MOUNT_POINT"
|
||||
|
||||
echo "[INFO] Successfully mounted at $LUKS_MOUNT_POINT." >&2
|
||||
echo "[INFO] Exit this shell to unmount and close the LUKS volume." >&2
|
||||
|
||||
cd "$LUKS_MOUNT_POINT"
|
||||
USER_SHELL="${SHELL:-/bin/bash}"
|
||||
if [[ "$USER_SHELL" == *"/bash" ]]; then
|
||||
"$USER_SHELL" --rcfile <(cat ~/.bashrc 2>/dev/null; printf '%s\n' 'PS1="\[\e[1;31m\][LUKS]\[\e[0m\][\u@\h \W]\$ "') -i
|
||||
"$USER_SHELL" --rcfile <(
|
||||
cat ~/.bashrc 2>/dev/null
|
||||
printf '%s\n' 'PS1="\[\e[1;31m\][LUKS]\[\e[0m\][\u@\h \W]\$ "'
|
||||
) -i
|
||||
else
|
||||
"$USER_SHELL"
|
||||
"$USER_SHELL"
|
||||
fi
|
||||
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
#!/bin/sh
|
||||
|
||||
pkill -f "ghostty -e shorinclip" || ghostty -e shorinclip
|
||||
Executable
+47
@@ -0,0 +1,47 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
# Ensure in a interactive terminal
|
||||
[ ! -t 0 ] && exit 1
|
||||
|
||||
# Construct query
|
||||
QUERY_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 1 time 0
|
||||
|
||||
printf "%s" "$QUERY_CODE" >/dev/tty
|
||||
|
||||
response=""
|
||||
while true; do
|
||||
IFS= read -r -N 1 -t 0.3 char || {
|
||||
[ -z "$char" ] && break
|
||||
}
|
||||
|
||||
response+="$char"
|
||||
|
||||
if [[ "$char" = "c" ]]; then
|
||||
break
|
||||
fi
|
||||
|
||||
if [ ${#response} -gt 1024 ]; then
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if [[ "$response" =~ $'\x1b'\[\?([0-9;]*)c ]]; then
|
||||
params="${BASH_REMATCH[1]}"
|
||||
|
||||
IFS=';' read -ra codes <<< "$params"
|
||||
|
||||
for code in "${codes[@]}"; do
|
||||
if [[ "$code" == "4" ]]; then
|
||||
exit 0
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
exit 1
|
||||
@@ -1,7 +1,9 @@
|
||||
if not set -q fetch_logo_type
|
||||
if type -q kgp-query; and kgp-query
|
||||
set -g fetch_logo_type kitty
|
||||
else if type -q kgp-query
|
||||
else if type -q sixel-query; and sixel-query
|
||||
set -g fetch_logo_type sixel
|
||||
else if type -q kgp-query; or type -q sixel-query
|
||||
set -g fetch_logo_type logo
|
||||
else
|
||||
set -g fetch_logo_type auto
|
||||
|
||||
Reference in New Issue
Block a user