Files
arch/dms-dotfiles/.local/bin/niri-binds

59 lines
2.0 KiB
Plaintext
Raw Normal View History

2026-03-31 20:13:15 +08:00
#!/usr/bin/env bash
NIRI_DIR="$HOME/.config/niri"
# === 界面尺寸设置 (在这里微调,下方的所有终端会自动应用) ===
MENU_WIDTH=90
MENU_HEIGHT=20
# 检查目录
if [[ ! -d "$NIRI_DIR" ]]; then
echo "Error: 找不到配置目录 $NIRI_DIR"
exit 1
fi
# 提取并使用 column 对齐
MENU_ITEMS=$(grep -Rh 'hotkey-overlay-title=' "$NIRI_DIR" --include="*.kdl" | \
grep -v '^[ \t]*//' | \
sed -n -E 's/^[ \t]*(.*)[ \t]+hotkey-overlay-title="([^"]+)".*/\1|\2/p' | \
sed -E 's/[ \t]*\|/\|/' | \
column -t -s '|')
if [[ -z "$MENU_ITEMS" ]]; then
echo "没有找到有效的快捷键配置。"
exit 1
fi
# Fzf 核心命令
FZF_CMD="echo \"$MENU_ITEMS\" | fzf --reverse --prompt='󰌌 快捷键: ' --info=hidden --border=none > /dev/null"
# 动态检测终端并使用对应的参数启动
if command -v kitty >/dev/null 2>&1; then
kitty --class "niri-hotkey-menu" --title "快捷键菜单" \
-o remember_window_size=no -o initial_window_width=${MENU_WIDTH}c -o initial_window_height=${MENU_HEIGHT}c \
bash -c "$FZF_CMD"
elif command -v foot >/dev/null 2>&1; then
foot --app-id "niri-hotkey-menu" --title "快捷键菜单" \
--window-size-chars=${MENU_WIDTH}x${MENU_HEIGHT} \
bash -c "$FZF_CMD"
elif command -v alacritty >/dev/null 2>&1; then
alacritty --class "niri-hotkey-menu" --title "快捷键菜单" \
-o window.dimensions.columns=${MENU_WIDTH} -o window.dimensions.lines=${MENU_HEIGHT} \
-e bash -c "$FZF_CMD"
elif command -v wezterm >/dev/null 2>&1; then
wezterm start --class "niri-hotkey-menu" -- bash -c "$FZF_CMD"
elif [[ -n "$TERMINAL" ]]; then
$TERMINAL -e bash -c "$FZF_CMD"
else
echo "Error: 未检测到支持的终端模拟器。"
if command -v fuzzel >/dev/null 2>&1; then
# Fuzzel 降级方案也会自动读取顶层变量
echo "$MENU_ITEMS" | fuzzel --dmenu -i -p "󰌌 快捷键: " -w ${MENU_WIDTH} > /dev/null
fi
fi