personal daily use scripts
This commit is contained in:
Executable
+3
@@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# Nothing to clean for the previewer above, but lf requires this script.
|
||||||
|
exit 0
|
||||||
Executable
+17
@@ -0,0 +1,17 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
for file in "$@"; do
|
||||||
|
case "$file" in
|
||||||
|
*.tar) tar xvf "$file" ;;
|
||||||
|
*.tar.gz|*.tgz) tar xzvf "$file" ;;
|
||||||
|
*.tar.bz2|*.tbz2) tar xjvf "$file" ;;
|
||||||
|
*.tar.xz|*.txz) tar xJvf "$file" ;;
|
||||||
|
*.zip) unzip "$file" ;;
|
||||||
|
*.rar) unrar x "$file" ;;
|
||||||
|
*.7z) 7z x "$file" ;;
|
||||||
|
*.gz) gunzip "$file" ;;
|
||||||
|
*.bz2) bunzip2 "$file" ;;
|
||||||
|
*.xz) unxz "$file" ;;
|
||||||
|
*) echo "Unknown archive type: $file" ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
Executable
+30
@@ -0,0 +1,30 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
file="$1"
|
||||||
|
w="$2"
|
||||||
|
h="$3"
|
||||||
|
|
||||||
|
case "$(file -Lb --mime-type "$file")" in
|
||||||
|
text/*|application/json|application/x-empty|inode/x-empty)
|
||||||
|
bat --theme="ansi" --color=always --style=numbers --line-range=:500 --terminal-width="$w" "$file"
|
||||||
|
;;
|
||||||
|
image/*)
|
||||||
|
echo "Image: $file"
|
||||||
|
;;
|
||||||
|
application/pdf)
|
||||||
|
pdftotext -l 10 -nopgbrk -q "$file" - | fold -s -w "$w"
|
||||||
|
;;
|
||||||
|
application/zip|application/x-tar|application/x-rar|application/x-7z-compressed|application/gzip|application/x-bzip2|application/x-xz)
|
||||||
|
echo "Archive: $file"
|
||||||
|
echo
|
||||||
|
case "$file" in
|
||||||
|
*.zip) unzip -l "$file" ;;
|
||||||
|
*.tar|*.tar.*|*.tgz) tar tf "$file" ;;
|
||||||
|
*.rar) unrar l "$file" ;;
|
||||||
|
*.7z) 7z l "$file" ;;
|
||||||
|
*) echo "Archive listing not supported" ;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
file -Lb "$file"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
Executable
+6
@@ -0,0 +1,6 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
/usr/bin/alacritty &
|
||||||
|
sleep 0.1
|
||||||
|
# xdotool windowactivate
|
||||||
|
/home/jason/.local/bin/tile
|
||||||
Executable
+6
@@ -0,0 +1,6 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
/usr/bin/chromium --password-store=basic &
|
||||||
|
sleep 0.4
|
||||||
|
# xdotool windowactivate
|
||||||
|
/home/jason/.local/bin/tile
|
||||||
Executable
+200
@@ -0,0 +1,200 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
# --- CONFIG ---
|
||||||
|
TOP_BAR=36
|
||||||
|
DECOR_H=30
|
||||||
|
DECOR_W=5
|
||||||
|
|
||||||
|
MASTER_RATIO_NUM=1
|
||||||
|
MASTER_RATIO_DEN=2
|
||||||
|
|
||||||
|
OUTER_GAP=8
|
||||||
|
INNER_GAP=8
|
||||||
|
|
||||||
|
# Master selection:
|
||||||
|
# focused = currently focused window
|
||||||
|
# first = first window on desktop
|
||||||
|
# last = last window on desktop
|
||||||
|
MASTER_MODE="focused"
|
||||||
|
|
||||||
|
# ----------------
|
||||||
|
|
||||||
|
# Get current screen resolution
|
||||||
|
read SCREEN_W SCREEN_H <<< $(xrandr | awk '
|
||||||
|
/\*/ {
|
||||||
|
split($1,a,"x")
|
||||||
|
print a[1], a[2]
|
||||||
|
exit
|
||||||
|
}')
|
||||||
|
|
||||||
|
USABLE_H=$((SCREEN_H - TOP_BAR))
|
||||||
|
|
||||||
|
# Work area after outer gaps
|
||||||
|
WORK_X=$OUTER_GAP
|
||||||
|
WORK_Y=$((TOP_BAR + OUTER_GAP))
|
||||||
|
WORK_W=$((SCREEN_W - 2 * OUTER_GAP))
|
||||||
|
WORK_H=$((USABLE_H - 2 * OUTER_GAP))
|
||||||
|
|
||||||
|
# --- focused window ---
|
||||||
|
FOCUSED=$(printf "0x%08x" "$(xdotool getactivewindow)")
|
||||||
|
|
||||||
|
# --- current desktop ---
|
||||||
|
CUR_DESKTOP=$(xdotool get_desktop)
|
||||||
|
|
||||||
|
# --- collect windows on current desktop ---
|
||||||
|
ALL_WINDOWS=$(wmctrl -l -x | awk '$2!="-1" {print $1}')
|
||||||
|
|
||||||
|
WINDOWS=()
|
||||||
|
|
||||||
|
for w in $ALL_WINDOWS; do
|
||||||
|
win_desktop=$(xdotool get_desktop_for_window "$(printf "%d" "$w")" 2>/dev/null) || continue
|
||||||
|
|
||||||
|
if [ "$win_desktop" = "$CUR_DESKTOP" ]; then
|
||||||
|
WINDOWS+=("$w")
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ ${#WINDOWS[@]} -eq 0 ]; then
|
||||||
|
echo "No windows found on current desktop."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ----------------------------------------------------
|
||||||
|
# Determine master window
|
||||||
|
# ----------------------------------------------------
|
||||||
|
|
||||||
|
case "$MASTER_MODE" in
|
||||||
|
focused)
|
||||||
|
MASTER="$FOCUSED"
|
||||||
|
;;
|
||||||
|
first)
|
||||||
|
MASTER="${WINDOWS[0]}"
|
||||||
|
;;
|
||||||
|
last)
|
||||||
|
MASTER="${WINDOWS[$((${#WINDOWS[@]} - 1))]}"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Invalid MASTER_MODE: $MASTER_MODE"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# --- separate master from stack ---
|
||||||
|
STACK=()
|
||||||
|
|
||||||
|
for w in "${WINDOWS[@]}"; do
|
||||||
|
if [ "$w" != "$MASTER" ]; then
|
||||||
|
STACK+=("$w")
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
place() {
|
||||||
|
local id=$1
|
||||||
|
local x=$2
|
||||||
|
local y=$3
|
||||||
|
local raw_w=$4
|
||||||
|
local raw_h=$5
|
||||||
|
local class decor_h decor_w x_offset y_offset
|
||||||
|
x_offset=0
|
||||||
|
y_offset=0
|
||||||
|
|
||||||
|
class=$(xprop -id "$id" WM_CLASS 2>/dev/null | sed -r 's/.*"(.*)"$/\1/')
|
||||||
|
case "$class" in
|
||||||
|
Alacritty)
|
||||||
|
decor_h=42
|
||||||
|
decor_w=8
|
||||||
|
;;
|
||||||
|
Chromium)
|
||||||
|
decor_h=42
|
||||||
|
decor_w=5
|
||||||
|
;;
|
||||||
|
obsidian)
|
||||||
|
decor_h=5
|
||||||
|
decor_w=0
|
||||||
|
x_offset=-0
|
||||||
|
y_offset=-0
|
||||||
|
;;
|
||||||
|
dev.zed.Zed)
|
||||||
|
decor_h=-19
|
||||||
|
decor_w=-23
|
||||||
|
x_offset=-13
|
||||||
|
y_offset=-13
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
decor_h=$DECOR_H
|
||||||
|
decor_w=$DECOR_W
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
local w=$((raw_w - decor_w))
|
||||||
|
local h=$((raw_h - decor_h))
|
||||||
|
local fx=$((x + x_offset))
|
||||||
|
local fy=$((y + y_offset))
|
||||||
|
wmctrl -i -r "$id" -b remove,maximized_vert,maximized_horz
|
||||||
|
wmctrl -i -r "$id" -e 1,"$fx","$fy","$w","$h"
|
||||||
|
}
|
||||||
|
|
||||||
|
# ----------------------------------------------------
|
||||||
|
# Single window
|
||||||
|
# ----------------------------------------------------
|
||||||
|
|
||||||
|
if [ ${#WINDOWS[@]} -eq 1 ]; then
|
||||||
|
place \
|
||||||
|
"$MASTER" \
|
||||||
|
"$WORK_X" \
|
||||||
|
"$WORK_Y" \
|
||||||
|
"$WORK_W" \
|
||||||
|
"$WORK_H"
|
||||||
|
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ----------------------------------------------------
|
||||||
|
# Master / Stack layout
|
||||||
|
# ----------------------------------------------------
|
||||||
|
|
||||||
|
MID=$((WORK_W * MASTER_RATIO_NUM / MASTER_RATIO_DEN))
|
||||||
|
|
||||||
|
MASTER_X=$WORK_X
|
||||||
|
MASTER_Y=$WORK_Y
|
||||||
|
|
||||||
|
MASTER_W=$((MID - INNER_GAP / 2))
|
||||||
|
MASTER_H=$WORK_H
|
||||||
|
|
||||||
|
STACK_X=$((WORK_X + MID + INNER_GAP / 2))
|
||||||
|
STACK_Y=$WORK_Y
|
||||||
|
|
||||||
|
STACK_W=$((WORK_W - MID - INNER_GAP / 2))
|
||||||
|
STACK_H=$WORK_H
|
||||||
|
|
||||||
|
# --- place master ---
|
||||||
|
place \
|
||||||
|
"$MASTER" \
|
||||||
|
"$MASTER_X" \
|
||||||
|
"$MASTER_Y" \
|
||||||
|
"$MASTER_W" \
|
||||||
|
"$MASTER_H"
|
||||||
|
|
||||||
|
# --- place stack ---
|
||||||
|
COUNT=${#STACK[@]}
|
||||||
|
|
||||||
|
if [ "$COUNT" -gt 0 ]; then
|
||||||
|
|
||||||
|
SLOT_H=$(((STACK_H - INNER_GAP * (COUNT - 1)) / COUNT))
|
||||||
|
|
||||||
|
i=0
|
||||||
|
|
||||||
|
for w in "${STACK[@]}"; do
|
||||||
|
|
||||||
|
SLOT_Y=$((STACK_Y + i * (SLOT_H + INNER_GAP)))
|
||||||
|
|
||||||
|
place \
|
||||||
|
"$w" \
|
||||||
|
"$STACK_X" \
|
||||||
|
"$SLOT_Y" \
|
||||||
|
"$STACK_W" \
|
||||||
|
"$SLOT_H"
|
||||||
|
|
||||||
|
i=$((i + 1))
|
||||||
|
done
|
||||||
|
fi
|
||||||
Executable
+78
@@ -0,0 +1,78 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# focus-dir.sh - focus the nearest window in a given direction (h/j/k/l)
|
||||||
|
# Usage: focus-dir.sh h|j|k|l (or left/down/up/right)
|
||||||
|
|
||||||
|
DIR=$1
|
||||||
|
|
||||||
|
if [ -z "$DIR" ]; then
|
||||||
|
echo "Usage: $0 h|j|k|l"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# --- get current desktop ---
|
||||||
|
CUR_DESKTOP=$(xdotool get_desktop)
|
||||||
|
|
||||||
|
# --- get focused window geometry ---
|
||||||
|
FOCUSED=$(xdotool getactivewindow)
|
||||||
|
read -r FX FY FW FH < <(xdotool getwindowgeometry --shell "$FOCUSED" | awk -F= '
|
||||||
|
/^X=/ {x=$2} /^Y=/ {y=$2} /^WIDTH=/ {w=$2} /^HEIGHT=/ {h=$2}
|
||||||
|
END {print x, y, w, h}
|
||||||
|
')
|
||||||
|
FCX=$((FX + FW / 2))
|
||||||
|
FCY=$((FY + FH / 2))
|
||||||
|
|
||||||
|
# --- get list of normal windows on current desktop ---
|
||||||
|
ALL_WINDOWS=$(wmctrl -l -x | awk '$2!="-1" {print $1}')
|
||||||
|
|
||||||
|
BEST=""
|
||||||
|
BEST_DIST=""
|
||||||
|
|
||||||
|
for w in $ALL_WINDOWS; do
|
||||||
|
wid=$(printf "%d" "$w")
|
||||||
|
|
||||||
|
[ "$wid" = "$FOCUSED" ] && continue
|
||||||
|
|
||||||
|
win_desktop=$(xdotool get_desktop_for_window "$wid" 2>/dev/null) || continue
|
||||||
|
[ "$win_desktop" = "$CUR_DESKTOP" ] || continue
|
||||||
|
|
||||||
|
read -r WX WY WW WH < <(xdotool getwindowgeometry --shell "$wid" | awk -F= '
|
||||||
|
/^X=/ {x=$2} /^Y=/ {y=$2} /^WIDTH=/ {w=$2} /^HEIGHT=/ {h=$2}
|
||||||
|
END {print x, y, w, h}
|
||||||
|
')
|
||||||
|
WCX=$((WX + WW / 2))
|
||||||
|
WCY=$((WY + WH / 2))
|
||||||
|
|
||||||
|
DX=$((WCX - FCX))
|
||||||
|
DY=$((WCY - FCY))
|
||||||
|
|
||||||
|
case "$DIR" in
|
||||||
|
h|left)
|
||||||
|
[ "$DX" -ge 0 ] && continue
|
||||||
|
;;
|
||||||
|
l|right)
|
||||||
|
[ "$DX" -le 0 ] && continue
|
||||||
|
;;
|
||||||
|
k|up)
|
||||||
|
[ "$DY" -ge 0 ] && continue
|
||||||
|
;;
|
||||||
|
j|down)
|
||||||
|
[ "$DY" -le 0 ] && continue
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Invalid direction: $DIR"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Manhattan distance, weighted to prefer windows roughly in line
|
||||||
|
DIST=$(( (DX<0?-DX:DX) + (DY<0?-DY:DY) ))
|
||||||
|
|
||||||
|
if [ -z "$BEST_DIST" ] || [ "$DIST" -lt "$BEST_DIST" ]; then
|
||||||
|
BEST_DIST=$DIST
|
||||||
|
BEST=$wid
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ -n "$BEST" ]; then
|
||||||
|
xdotool windowactivate "$BEST"
|
||||||
|
fi
|
||||||
Reference in New Issue
Block a user