Compare commits

...

8 commits

Author SHA1 Message Date
frosty 7ebe7d335c make some cross-system fixes 2024-09-06 03:04:40 +00:00
frosty a0f6d24712 update cava to use pipewire 2024-09-05 23:03:55 -04:00
frosty a002585eb1 add ezrun 2024-09-05 22:51:49 -04:00
frosty b3f158db1a move X files back to root 2024-09-05 22:51:20 -04:00
frosty d80d645292 rename user dirs 2024-09-05 22:41:44 -04:00
frosty 9c3ba6025e remove lf 2024-09-05 22:39:07 -04:00
frosty 4fdfeb1a29 remove iceline submodule 2024-09-05 22:38:44 -04:00
frosty 5662f5c172 new install push 2024-09-05 22:35:28 -04:00
26 changed files with 315 additions and 410 deletions

28
.Xresources Normal file
View file

@ -0,0 +1,28 @@
dwm.font: Terminus:size=12
dwm.normbgcolor: #121212
dmenu.font: Terminus:size=12
dmenu.normbgcolor: #121212
!! st
st.background: #121212
st.foreground: #ebdbb2
st.cursorColor: #ebdbb2
st.color0: #282828
st.color1: #cc241d
st.color2: #98971a
st.color3: #d79921
st.color4: #458588
st.color5: #b16286
st.color6: #689d6a
st.color7: #a89984
st.color8: #928374
st.color9: #fb4934
st.color10: #b8bb26
st.color11: #fabd2f
st.color12: #83a598
st.color13: #d3869b
st.color14: #8ec07c
st.color15: #ebdbb2
st.alpha: 0.93
st.borderpx: 4

View file

@ -1,13 +1,13 @@
# shellcheck shell=sh disable=SC1091
[ -f "$HOME/.bashrc" ] && . "$HOME/.bashrc"
# XDG base directories
export XDG_DATA_HOME="${XDG_DATA_HOME:-$HOME/.local/share}"
export XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"
export XDG_STATE_HOME="${XDG_STATE_HOME:-$HOME/.local/state}"
export XDG_CACHE_HOME="${XDG_CACHE_HOME:-$HOME/.cache}"
[ -f "$HOME/.bashrc" ] && . "$HOME/.bashrc"
# Default programs
export TERMINAL="${TERMINAL:-st}"
export EDITOR="${EDITOR:-nvim}"
@ -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 || :

31
.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,27 @@ 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
}
cd() { 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 +55,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,20 +0,0 @@
#!/bin/sh
# shellcheck disable=SC1091
[ -f "$XDG_DATA_HOME/screenlayout" ] && . "$XDG_DATA_HOME/screenlayout"
[ -f "$XDG_DATA_HOME/wallpaper" ] && xwallpaper --zoom "$XDG_DATA_HOME/wallpaper"
xrdb "$XDG_CONFIG_HOME/X11/xinitrc"
runsvdir "$SVDIR" &
xinput set-prop "SOAI USB Gaming Mouse" "libinput Accel Profile Enabled" 0 1 0
xinput set-prop "SOAI USB Gaming Mouse" "libinput Accel Speed" 0.1
setxkbmap -option caps:escape
xsetroot -cursor_name left_ptr
modbot -x &
while :; do
dbus-launch --exit-with-session dwm || exit 1
done
# exec dbus-launch --exit-with-session startxfce4

View file

@ -1,51 +0,0 @@
!! st
st.font: Fira Mono:size=9
st.background: #121212
st.foreground: #ebdbb2
st.cursorColor: #ebdbb2
st.color0: #282828
st.color1: #cc241d
st.color2: #98971a
st.color3: #d79921
st.color4: #458588
st.color5: #b16286
st.color6: #689d6a
st.color7: #a89984
st.color8: #928374
st.color9: #fb4934
st.color10: #b8bb26
st.color11: #fabd2f
st.color12: #83a598
st.color13: #d3869b
st.color14: #8ec07c
st.color15: #ebdbb2
st.alpha: 0.95
st.borderpx: 4
!! dwm
dwm.font: Terminus:size=10
dwm.normbgcolor: #121212
dwm.normbordercolor: #282828
dwm.normfgcolor: #a89984
dwm.selbgcolor: #458588
dwm.selbordercolor: #83a598
dwm.selfgcolor: #ebdbb2
!! dmenu
dmenu.font: Terminus:size=10
dmenu.normbgcolor: #121212
dmenu.normfgcolor: #a89984
dmenu.selbgcolor: #458588
dmenu.selfgcolor: #ebdbb2
dmenu.normhifgcolor: #cc241d
dmenu.normhibgcolor: #121212
dmenu.selhifgcolor: #ebdbb2
dmenu.selhibgcolor: #cc241d
!! nsxiv
Nsxiv.bar.font: Terminus:size=8
Nsxiv.window.background: #121212
Nsxiv.window.foreground: #a89984
Nsxiv.mark.foreground: #a89984
Nsxiv.bar.background: #a89984
Nsxiv.bar.foreground: #1d2021

View file

@ -1,9 +1,8 @@
[general]
sensitivity = 60
sensitivity = 40
[input]
method = fifo
source = /tmp/mpd_visualizer.fifo
method = pipewire
[output]
channels = mono

73
.config/ezrun/ezrunrc Executable file
View file

@ -0,0 +1,73 @@
#!/bin/sh
# shellcheck disable=SC2034
CHOICE_COMMAND="dmenu -l 4 -g 8"
REPLACEMENTS="_plus:+
_:-
0: "
_st() {
command st -e "$@"
}
# General system utilities
st() { command st; }
xterm() { command xterm; }
thunar() { command thunar; }
nnn() { _st nnn; }
lf() { _st lf; }
xarchiver() { command xarchiver; }
stalonetray() { command stalonetray; }
flatseal() { flatpak run com.github.tchx84.Flatseal; }
xkill() { command xkill; }
xev() { _st sh -c "xev | grep XLookupString"; }
lock() { i3lock; }
# Settings
pulsemixer() { _st pulsemixer; }
pavucontrol() { command pavucontrol; }
arandr() { command arandr; }
iwctl() { _st iwctl; }
lxappearance() { command lxappearance; }
# Development
nvim() { _st nvim; }
emacs() { command emacs; }
tmux_new() { _st tmux; }
tmux_attach() { _st tmux attach; }
# Internet
firefox() { command firefox; }
qutebrowser() { command qutebrowser; }
signal() { signal-desktop; }
gajim() { command gajim; }
vesktop() { vesktop-bin; }
deluge() { deluge-gtk; }
nicotine_plus() { nicotine; }
# Media
ncmpcpp() { _st ncmpcpp; }
ncspot() { _st ncspot; }
newsraft() { _st newsraft; }
# Etc.
gimp() { command gimp; }
obs_studio() { obs-studio; }
darktable() { command darktable; }
# Showcases/toys
cowsay() {
text=$(printf '' | dmenu -p 'cowsay')
[ "$text" ] || return 1
_st "$SHELL" -c "cowsay $text && read -srn1"
}
fastfetch() { _st "$SHELL" -c "fastfetch && read -srn1"; }
# Games
steam() { flatpak run com.valvesoftware.Steam; }
lutris() { flatpak run net.lutris.Lutris; }
prism_launcher() { flatpak run org.prismlauncher.PrismLauncher; }
flycast() { flatpak run org.flycast.Flycast; }
dolphin_emu() { flatpak run org.DolphinEmu.dolphin-emu; }
openrct2() { command openrct2; }

View file

@ -1,3 +0,0 @@
#!/bin/sh
ueberzugpp cmd -s "$UB_SOCKET" -a remove -i PREVIEW

View file

@ -1,2 +0,0 @@
set previewer ~/.config/lf/previewer
set cleaner ~/.config/lf/cleaner

View file

@ -1,85 +0,0 @@
#!/bin/sh
XDG_CACHE_HOME="${XDG_CACHE_HOME:-$HOME/.cache}"
true_input_path="$(readlink -f "$1")"
image() {
file_path="$1"
mw="$(($2 - 1))"
mh="$3"
x="$4"
y="$5"
ueberzugpp cmd -s "$UB_SOCKET" -a add -i PREVIEW -x "$x" -y "$y" --max-width "$mw" --max-height "$mh" -f "$file_path"
exit 1
}
plaintext() {
if command -v bat >/dev/null 2>&1; then
bat --color=never --style=numbers --pager=never "$@"
else
cat "$@"
fi
}
generate_cache_path() {
while IFS=' ' read -r thumbnail _; do
printf '%s' "$thumbnail"
done <<EOF
$XDG_CACHE_HOME/lf/thumbnail.$(stat --printf '%n\0%i\0%F\0%s\0%W\0%Y' "$true_input_path" | sha256sum).jpg
EOF
}
case "$(printf '%s' "$true_input_path" | tr '[:upper:]' '[:lower:]')" in
*.tgz | *.tar.gz)
tar tzf "$1"
;;
*.tar.bz2 | *.tbz2)
tar tjf "$1"
;;
*.tar.txz | *.txz)
xz -l "$1"
;;
*.tar)
tar tf "$1"
;;
*.zip | *.jar)
unzip -l "$1"
;;
*.rar)
unrar l "$1"
;;
*.7z)
7z l "$1"
;;
*.iso)
iso-info --no-header -l "$1"
;;
*.wav | *.mp3 | *.flac | *.m4a | *.ogg | *.opus)
exiftool "$1"
;;
*.avi | *.mp4 | *.mkv | *.mov | *.webm | *.m4v)
shift
thumbnail="$(generate_cache_path)"
[ -f "$thumbnail" ] || ffmpegthumbnailer -i "$true_input_path" -o "$thumbnail" -s 0 -q 5
image "$thumbnail" "$@"
;;
*.bmp | *.jpg | *.jpeg | *.png | *.xpm | *.webp | *.gif)
shift
image "$true_input_path" "$@"
;;
*.svg)
shift
thumbnail="$(generate_cache_path)"
[ -f "$thumbnail" ] || convert "$true_input_path" "$thumbnail"
image "$thumbnail" "$@"
;;
*.[1-8])
man "$1" | col -b
;;
*)
plaintext "$@"
;;
esac

View file

@ -1,7 +1,7 @@
XDG_DESKTOP_DIR="$HOME"
XDG_DOCUMENTS_DIR="$HOME/docs"
XDG_DOWNLOAD_DIR="$HOME/dl"
XDG_DOCUMENTS_DIR="$HOME/documents"
XDG_DOWNLOAD_DIR="$HOME/downloads"
XDG_MUSIC_DIR="$HOME/music"
XDG_PICTURES_DIR="$HOME/pics"
XDG_VIDEOS_DIR="$HOME/vids"
XDG_SCREENSHOTS_DIR="$HOME/pics/screenshots"
XDG_PICTURES_DIR="$HOME/pictures"
XDG_VIDEOS_DIR="$HOME/videos"
XDG_SCREENSHOTS_DIR="$HOME/pictures/screenshots"

3
.gitmodules vendored
View file

@ -1,3 +0,0 @@
[submodule ".local/share/bash/iceline"]
path = .local/share/bash/iceline
url = git@codeberg.org:frosty/iceline.git

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'

@ -1 +0,0 @@
Subproject commit 26a39ab5f3a3a43fc2c443cd163c512d0ebdcf8d

33
.xinitrc Executable file
View file

@ -0,0 +1,33 @@
#!/bin/sh
xrandr --setprovideroutputsource modesetting NVIDIA-0
xrandr --auto
xrandr --dpi 96
xrandr \
--output eDP-1 --off \
--output HDMI-2 --primary --mode 1280x1024 --pos 0x0 --rate 75
export __NV_PRIME_RENDER_OFFLOAD=1
export __GLX_VENDOR_LIBRARY_NAME="nvidia"
[ -f "$XDG_DATA_HOME/wallpaper" ] && xwallpaper --zoom "$XDG_DATA_HOME/wallpaper" &
xrdb -merge "$HOME/.Xresources"
pipewire &
pipewire-pulse &
wireplumber &
dunst &
picom &
udiskie &
mpd --no-daemon &
modbot -x &
while :; do
if command -v dbus-launch >/dev/null; then
dbus-launch --sh-syntax --exit-with-session dwm
elif command -v dbus-run-session >/dev/null; then
dbus-run-session dwm
fi
done