new install push

This commit is contained in:
frosty 2024-09-05 22:35:28 -04:00
parent c3ed78ecb9
commit 5662f5c172
14 changed files with 172 additions and 233 deletions

View file

@ -15,7 +15,7 @@ export BROWSER="${BROWSER:-firefox}"
# $HOME cleanup
export XAUTHORITY="$XDG_RUNTIME_DIR/Xauthority"
export XINITRC="$XDG_CONFIG_HOME/X11/xinitrc"
export GTK2_RC_FILES="$XDG_CONFIG_HOME/gtk-2.0/gtkrc"
export XCURSOR_PATH="/usr/share/icons:$XDG_DATA_HOME/icons"
export GNUPGHOME="$XDG_DATA_HOME/gnupg"
export GOPATH="$XDG_DATA_HOME/go"
@ -26,18 +26,14 @@ export NODE_REPL_HISTORY="$XDG_DATA_HOME/node_repl_history"
export CUDA_CACHE_PATH="$XDG_CACHE_HOME/nv"
# Other program settings
export SVDIR="$XDG_CONFIG_HOME/service"
export _JAVA_OPTIONS="-Djava.util.prefs.userRoot=$XDG_CONFIG_HOME/java"
export XIDLEHOOK_SOCK="$XDG_STATE_HOME/xidlehook.sock"
# $PATH additions
export PATH="$PATH:$HOME/.local/bin"
export PATH="$PATH:$HOME/.local/bin/screenlayouts"
export PATH="$PATH:$HOME/.ghcup/bin"
export PATH="$PATH:$HOME/.cabal/bin"
export PATH="$PATH:$GOPATH/bin"
export PATH="$PATH:$CARGO_HOME/bin"
export PATH="$PATH:$XDG_DATA_HOME/npm/bin"
# Automatic graphical start on tty1
[ "$(tty)" = "/dev/tty2" ] && ! pidof -s Xorg >/dev/null 2>&1 && exec startx >/dev/null 2>&1
# Automatic graphical start
[ "$(tty)" = "/dev/tty2" ] && exec startx

29
.bashrc
View file

@ -1,14 +1,12 @@
# shellcheck shell=sh
case "$-" in
case $- in
*i*) ;;
*) return ;;
esac
export HISTFILE="$XDG_STATE_HOME/bash/history"
lfcd() {
cd "$(command lf -print-last-dir "$@")" || return
cd "$(command lf -print-last-dir "$@")" || return
}
# Default options
@ -16,18 +14,29 @@ alias cp='cp -iv'
alias mv='mv -iv'
alias rm='rm -vI'
alias mkdir='mkdir -pv'
alias lf='lfub'
alias ls='ls --color=auto -AF'
cd() {
builtin cd "$@" && ls
builtin cd "$@" && ls
}
alias grep='grep --color=auto'
# alias wget='wget --no-hsts-file'
alias wget='wget --no-hsts'
alias vim='nvim'
# Utilities
alias ipp='curl https://ipinfo.io/ip && echo'
alias ipl='monitors local_ip'
ipl() {
if address="$(ip route get 1 2>/dev/null)"; then
address="${address#* via * dev * src }"
address="${address% uid *}"
fi
if [ -n "$address" ]; then
printf '%s' "$address"
else
printf 'Offline'
fi
printf '\n'
}
# Shorthands
alias l='ls'
@ -48,6 +57,6 @@ alias gp='git push'
alias gl='git pull'
if [ -d "$XDG_DATA_HOME/bash/iceline" ]; then
. "$XDG_DATA_HOME/bash/iceline/iceline.sh"
PROMPT_COMMAND='_prompt_command'
. "$XDG_DATA_HOME/bash/iceline/iceline.sh"
PROMPT_COMMAND='_prompt_command'
fi

View file

@ -1,35 +0,0 @@
#!/bin/sh
XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"
EDITOR="${EDITOR:-vim}"
BM_DIRS="$XDG_CONFIG_HOME/bookmarks/directories"
BM_FILES="$XDG_CONFIG_HOME/bookmarks/files"
OUTPUT_FILE="$XDG_CONFIG_HOME/shell/10-bookmarks.sh"
cleanup_file() {
while IFS= read -r line; do
[ -z "$line" ] && continue
while IFS='#' read -r content _; do
[ -n "$content" ] && printf '%s\n' "$content"
done <<EOF
$line
EOF
done <"$1"
}
{
while IFS=' ' read -r name value; do
printf "alias %s='cd %s'\n" "$name" "$value"
done <<EOF
$(cleanup_file "$BM_DIRS")
EOF
# TODO(frosty): Support other applications per line, instead of only using $EDITOR.
while IFS=' ' read -r name value; do
printf "alias %s='%s %s'\n" "$name" "$EDITOR" "$value"
done <<EOF
$(cleanup_file "$BM_FILES")
EOF
} >"$OUTPUT_FILE"

View file

@ -1,40 +0,0 @@
#!/bin/sh
languages="go
rust"
coreutils="awk
sed"
while IFS= read -r line; do
case "$languages" in
*$line*)
tool="language"
selected="$line"
break
;;
esac
case "$coreutils" in
*$line*)
tool="coreutil"
selected="$line"
break
;;
esac
done <<EOF
$(printf '%s\n%s' "$languages" "$coreutils" | shuf | fzf)
EOF
[ -z "$selected" ] && exit 1
printf "enter a query: " >&2
read -r query
if [ -n "$query" ]; then
case "$tool" in
language) url="$selected/$query" ;;
coreutil) url="$selected~$query" ;;
esac
else
url="$selected"
fi
curl -s "https://cht.sh/$url"

View file

@ -1,29 +0,0 @@
#!/bin/sh
XDG_CACHE_HOME="${XDG_CACHE_HOME:-$HOME/.cache}"
UEBERZUG_TMP_DIR="${UEBERZUG_TMP_DIR:-/tmp}"
UB_PID=
UB_SOCKET=
cleanup() {
exec 3>&-
ueberzugpp cmd -s "$UB_SOCKET" -a exit
}
if [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ]; then
lf "$@"
else
[ -d "$XDG_CACHE_HOME/lf" ] || mkdir -p "$XDG_CACHE_HOME/lf"
UB_PID_FILE="$UEBERZUG_TMP_DIR/.$(uuidgen)"
ueberzugpp layer --silent --no-stdin --use-escape-codes --pid-file "$UB_PID_FILE"
read -r UB_PID <"$UB_PID_FILE"
rm "$UB_PID_FILE"
UB_SOCKET="$UEBERZUG_TMP_DIR/ueberzugpp-$UB_PID.socket"
export UB_PID UB_SOCKET
trap cleanup HUP INT QUIT TERM EXIT
lf "$@" 3>&-
fi

25
.local/bin/mod-battery Executable file
View file

@ -0,0 +1,25 @@
#!/bin/sh
set -eu
FULL_THRESHOLD=90
for battery in /sys/class/power_supply/BAT*; do
if [ ! -f "$battery/capacity" ] || [ ! -f "$battery/status" ]; then
continue
fi
read -r capacity <"$battery/capacity"
read -r status <"$battery/status"
if [ "$status" = "Charging" ] || ([ "$capacity" -ge "$FULL_THRESHOLD" ] && [ "$status" = "Not charging" ]); then
prefix="AC"
else
prefix="BAT"
fi
printf '%s %s%%' "$prefix" "$capacity"
exit 0
done
exit 1

53
.local/bin/mod-memory Executable file
View file

@ -0,0 +1,53 @@
#!/bin/sh
set -eu
DISPLAY_DECIMAL_PLACES=2
MEBI=1024
GIBI=$((MEBI * MEBI))
TEBI=$((GIBI * MEBI))
display_kib_unit() {
size_kib=$1
decimal_places=$2
if [ "$size_kib" -lt "$MEBI" ]; then
size=$size_kib
unit="K"
elif [ "$size_kib" -lt "$GIBI" ]; then
size=$(printf 'scale=%s; %s / %s\n' "$decimal_places" "$size_kib" "$MEBI" | bc)
unit="M"
elif [ "$size_kib" -lt "$TEBI" ]; then
size=$(printf 'scale=%s; %s / %s\n' "$decimal_places" "$size_kib" "$GIBI" | bc)
unit="G"
else
size=$(printf 'scale=%s; %s / %s\n' "$decimal_places" "$size_kib" "$TEBI" | bc)
unit="T"
fi
printf '%.*f%s' "$decimal_places" "$size" "$unit"
}
mem_total=
mem_free=
mem_buffers=
mem_cached=
mem_sreclaimable=
mem_shmem=
while read -r type value _; do
case $type in
MemTotal:) mem_total=$value ;;
MemFree:) mem_free=$value ;;
Buffers:) mem_buffers=$value ;;
Cached:) mem_cached=$value ;;
SReclaimable:) mem_sreclaimable=$value ;;
Shmem:) mem_shmem=$value ;;
esac
done </proc/meminfo
mem_used=$((mem_total - mem_free))
mem_non_cache_buffer=$((mem_used - (mem_buffers + (mem_cached + mem_sreclaimable - mem_shmem))))
printf 'MEM %s' $(display_kib_unit "$mem_non_cache_buffer" "$DISPLAY_DECIMAL_PLACES")

14
.local/bin/mod-network Executable file
View file

@ -0,0 +1,14 @@
#!/bin/sh
set -eu
if address="$(ip route get 1 2>/dev/null)"; then
address="${address#* via * dev * src }"
address="${address% uid *}"
fi
if [ -n "$address" ]; then
printf '%s' "$address"
else
printf 'Offline'
fi

24
.local/bin/mod-volume Executable file
View file

@ -0,0 +1,24 @@
#!/bin/sh
set -eu
SINK="@DEFAULT_AUDIO_SINK@"
muted=
volume=$(wpctl get-volume "$SINK")
case $volume in
*\[MUTED\]) muted=1 ;;
esac
volume=${volume#Volume: }
volume=${volume%.*}${volume#*.}
volume=${volume#0}
volume=${volume#0}
volume=${volume% \[MUTED\]}
if [ -n "$muted" ]; then
prefix="MUTE"
else
prefix="VOL"
fi
printf '%s %s%%' "$prefix" "$volume"

View file

@ -1,19 +0,0 @@
#!/bin/sh
notify() {
notify-send -r 9991 "$@"
}
i=0
while IFS= read -r line; do
case "$i" in
0) track_artist="$line" ;;
1) track_title="$line" ;;
*) break ;;
esac
i=$((i + 1))
done <<EOF
$(MPC_FORMAT="%artist%\n%title%" mpc)
EOF
notify "$track_title" "by $track_artist"

View file

@ -4,58 +4,28 @@ set -eu
# shellcheck disable=SC1091
[ -f "${XDG_CONFIG_HOME:-$HOME/.config}/user-dirs.dirs" ] && . "${XDG_CONFIG_HOME:-$HOME/.config}/user-dirs.dirs"
OUTPUT_DIRECTORY="${XDG_SCREENSHOTS_DIR:-${XDG_PICTURES_DIR:-$HOME}}"
OUTPUT_DIRECTORY=${XDG_SCREENSHOTS_DIR:-${XDG_PICTURES_DIR:-$HOME}}
FILENAME_BASE=
FILENAME_DATE_FORMAT="%Y-%m-%d_%H-%M-%S"
QUIET=
COPY=
SAVE=
NOTIFY=1
COPY=1
SAVE=1
die() {
printf '%s: %s\n' "${0##*/}" "$1"
exit 1
}
screenshot_type=$1
notify() {
notify-send "${0##*/}" "$@"
}
if [ "$SAVE" ]; then
FILE_PATH=${FILE_PATH:-$OUTPUT_DIRECTORY/$FILENAME_BASE$(date "+$FILENAME_DATE_FORMAT").png}
else
FILE_PATH="/tmp/${0##*/}-$!.png"
fi
screenshot_select() {
maim -qsu "$@"
}
screenshot_full() {
maim -qu "$@"
}
while getopts :hVqcos opt; do
case "$opt" in
q) QUIET=1 ;;
c) COPY=1 ;;
s) SAVE=1 ;;
*) die "invalid option: -$OPTARG" ;;
esac
done
shift "$((OPTIND - 1))"
SCREENSHOT_TYPE="${1:-full}"
FILE_PATH="${2:-}"
case "$SCREENSHOT_TYPE" in
select | full) ;;
case $screenshot_type in
select) maim -qug "$(slop || exit 0)" "$FILE_PATH" ;;
full) maim -qu "$FILE_PATH" ;;
*) exit 1 ;;
esac
if [ -n "$SAVE" ]; then
FILE_PATH="${FILE_PATH:-$OUTPUT_DIRECTORY/$FILENAME_BASE$(date "+$FILENAME_DATE_FORMAT").png}"
else
FILE_PATH="/tmp/${0##*/}-$(date '+%s').png"
fi
screenshot_"$SCREENSHOT_TYPE" "$FILE_PATH" || exit 0
[ -z "$QUIET" ] && notify -i "$FILE_PATH" "Screenshot saved to <b>${FILE_PATH##*/}</b>."
[ -n "$COPY" ] && xclip -sel clip -t image/png "$FILE_PATH"
[ -z "$SAVE" ] && rm "$FILE_PATH"
[ "$NOTIFY" ] && notify-send "${0##*/}" "Screenshot taken"
[ "$COPY" ] && xclip -sel clip -t image/png "$FILE_PATH"
[ "$SAVE" ] || rm "$FILE_PATH"

18
.local/bin/sys-volume Executable file
View file

@ -0,0 +1,18 @@
#!/bin/sh
set -eu
SINK="@DEFAULT_AUDIO_SINK@"
STATUSBAR="modbot"
STATUSBAR_SIGNAL=1
action=$1
if [ "$action" = "toggle" ]; then
wpctl set-mute "$SINK" toggle
else
wpctl set-mute "$SINK" 0
wpctl set-volume "$SINK" "$action"
fi
pkill -RTMIN+"$STATUSBAR_SIGNAL" "$STATUSBAR"

View file

@ -1,8 +0,0 @@
#!/bin/sh
pipe="$1"
update="$2"
PIPE_FILE="/tmp/pipe-$pipe"
[ -p "$PIPE_FILE" ] || mkfifo "$PIPE_FILE"
$update >"$PIPE_FILE"

View file

@ -1,39 +0,0 @@
#!/bin/sh
SINK="@DEFAULT_AUDIO_SINK@"
NOTIFY_ID=9990
NOTIFY_URGENCY="low"
action="${1:-}"
[ -z "$action" ] && exit 1
if [ "$action" = "toggle" ]; then
wpctl set-mute "$SINK" "$action" || exit 1
else
wpctl set-volume "$SINK" "$action" || exit 1
fi
volume="$(wpctl get-volume "$SINK")"
case "$volume" in
*\[MUTED\]*) muted=1 ;;
*) muted=0 ;;
esac
volume="${volume% \[MUTED\]}"
volume="${volume#Volume: }"
volume="${volume%.*}${volume#*.}"
volume="${volume#0}"
if [ "$muted" -eq 1 ]; then
icon="audio-volume-muted-symbolic"
title="Volume Muted"
else
case "$volume" in
[0-9] | [1-2][0-9] | 3[0-3]) icon="audio-volume-low-symbolic" ;;
3[4-9] | [4-5][0-9] | 6[0-6]) icon="audio-volume-medium-symbolic" ;;
6[7-9] | [7-9][0-9] | 100) icon="audio-volume-high-symbolic" ;;
esac
title="Volume"
fi
notify-send -r "$NOTIFY_ID" -u "$NOTIFY_URGENCY" -h int:value:"$volume" -i "$icon" "$title"
update-pipe volume 'monitors volume'