mirror of
https://github.com/LukeSmithxyz/voidrice.git
synced 2026-01-30 09:48:11 +01:00
Merge branch 'LukeSmithxyz:master' into master
This commit is contained in:
commit
d5265a63b3
47
.config/firefox/larbs.js
Normal file
47
.config/firefox/larbs.js
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
// These are changes made on top of the Arkenfox JS file to tweak it as
|
||||||
|
// desired. Any of these settings can be overridden by the user.
|
||||||
|
|
||||||
|
// Disable the Twitter/R*ddit/Faceberg ads in the URL bar:
|
||||||
|
user_pref("browser.urlbar.quicksuggest.enabled", false);
|
||||||
|
user_pref("browser.urlbar.suggest.topsites", false); // [FF78+]
|
||||||
|
|
||||||
|
// Do not suggest web history in the URL bar:
|
||||||
|
user_pref("browser.urlbar.suggest.history", false);
|
||||||
|
|
||||||
|
// Do not prefil forms:
|
||||||
|
user_pref("signon.prefillForms", false);
|
||||||
|
|
||||||
|
// Do not autocomplete in the URL bar:
|
||||||
|
user_pref("browser.urlbar.autoFill", false);
|
||||||
|
|
||||||
|
// Enable the addition of search keywords:
|
||||||
|
user_pref("keyword.enabled", true);
|
||||||
|
|
||||||
|
// Allow access to http (i.e. not https) sites:
|
||||||
|
user_pref("dom.security.https_only_mode", false);
|
||||||
|
|
||||||
|
// Keep cookies until expiration or user deletion:
|
||||||
|
user_pref("network.cookie.lifetimePolicy", 0);
|
||||||
|
|
||||||
|
user_pref("dom.webnotifications.serviceworker.enabled", false);
|
||||||
|
|
||||||
|
// Disable push notifications:
|
||||||
|
user_pref("dom.push.enabled", false);
|
||||||
|
|
||||||
|
// Disable the pocket antifeature:
|
||||||
|
user_pref("extensions.pocket.enabled", false);
|
||||||
|
|
||||||
|
// Don't autodelete cookies on shutdown:
|
||||||
|
user_pref("privacy.clearOnShutdown.cookies", false);
|
||||||
|
|
||||||
|
// Enable custom userChrome.js:
|
||||||
|
user_pref("toolkit.legacyUserProfileCustomizations.stylesheets", true);
|
||||||
|
|
||||||
|
// This could otherwise cause some issues on bank logins and other annoying sites:
|
||||||
|
user_pref("network.http.referer.XOriginPolicy", 0);
|
||||||
|
|
||||||
|
// Disable Firefox sync and its menu entries
|
||||||
|
user_pref("identity.fxaccounts.enabled", false);
|
||||||
|
|
||||||
|
// Fix the issue where right mouse button instantly clicks
|
||||||
|
user_pref("ui.context_menus.after_mouseup", true);
|
||||||
@ -9,6 +9,7 @@ ex 🎯
|
|||||||
*.mom ✍
|
*.mom ✍
|
||||||
*.me ✍
|
*.me ✍
|
||||||
*.ms ✍
|
*.ms ✍
|
||||||
|
*.avif 🖼
|
||||||
*.png 🖼
|
*.png 🖼
|
||||||
*.webp 🖼
|
*.webp 🖼
|
||||||
*.ico 🖼
|
*.ico 🖼
|
||||||
|
|||||||
@ -31,19 +31,19 @@ cmd open ${{
|
|||||||
case $(file --mime-type "$(readlink -f $f)" -b) in
|
case $(file --mime-type "$(readlink -f $f)" -b) in
|
||||||
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet) localc $fx ;;
|
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet) localc $fx ;;
|
||||||
image/vnd.djvu|application/pdf|application/octet-stream|application/postscript) setsid -f zathura $fx >/dev/null 2>&1 ;;
|
image/vnd.djvu|application/pdf|application/octet-stream|application/postscript) setsid -f zathura $fx >/dev/null 2>&1 ;;
|
||||||
text/*|application/json|inode/x-empty) $EDITOR $fx;;
|
text/*|application/json|inode/x-empty|application/x-subrip) $EDITOR $fx;;
|
||||||
image/x-xcf) setsid -f gimp $f >/dev/null 2>&1 ;;
|
image/x-xcf) setsid -f gimp $f >/dev/null 2>&1 ;;
|
||||||
image/svg+xml) display -- $f ;;
|
image/svg+xml) display -- $f ;;
|
||||||
image/*) rotdir $f | grep -i "\.\(png\|jpg\|jpeg\|gif\|webp\|tif\|ico\)\(_large\)*$" |
|
image/*) rotdir $f | grep -i "\.\(png\|jpg\|jpeg\|gif\|webp\|avif\|tif\|ico\)\(_large\)*$" |
|
||||||
setsid -f sxiv -aio 2>/dev/null | while read -r file; do
|
setsid -f sxiv -aio 2>/dev/null | while read -r file; do
|
||||||
[ -z "$file" ] && continue
|
[ -z "$file" ] && continue
|
||||||
lf -remote "send select \"$file\""
|
lf -remote "send select \"$file\""
|
||||||
lf -remote "send toggle"
|
lf -remote "send toggle"
|
||||||
done &
|
done &
|
||||||
;;
|
;;
|
||||||
audio/*) mpv --audio-display=no $f ;;
|
audio/*|video/x-ms-asf) mpv --audio-display=no $f ;;
|
||||||
video/*) setsid -f mpv $f -quiet >/dev/null 2>&1 ;;
|
video/*) setsid -f mpv $f -quiet >/dev/null 2>&1 ;;
|
||||||
application/pdf|application/vnd*|application/epub*) setsid -f zathura $fx >/dev/null 2>&1 ;;
|
application/pdf|application/vnd.djvu|application/epub*) setsid -f zathura $fx >/dev/null 2>&1 ;;
|
||||||
application/pgp-encrypted) $EDITOR $fx ;;
|
application/pgp-encrypted) $EDITOR $fx ;;
|
||||||
application/vnd.openxmlformats-officedocument.wordprocessingml.document|application/vnd.oasis.opendocument.text) setsid -f lowriter $fx >/dev/null 2>&1 ;;
|
application/vnd.openxmlformats-officedocument.wordprocessingml.document|application/vnd.oasis.opendocument.text) setsid -f lowriter $fx >/dev/null 2>&1 ;;
|
||||||
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet|application/octet-stream|application/vnd.oasis.opendocument.spreadsheet|application/vnd.oasis.opendocument.spreadsheet-template) setsid -f localc $fx >/dev/null 2>&1 ;;
|
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet|application/octet-stream|application/vnd.oasis.opendocument.spreadsheet|application/vnd.oasis.opendocument.spreadsheet-template) setsid -f localc $fx >/dev/null 2>&1 ;;
|
||||||
@ -115,8 +115,8 @@ map <c-s> set hidden!
|
|||||||
map <enter> shell
|
map <enter> shell
|
||||||
map x $$f
|
map x $$f
|
||||||
map X !$f
|
map X !$f
|
||||||
map o &mimeopen $f
|
map o &mimeopen "$f"
|
||||||
map O $mimeopen --ask $f
|
map O $mimeopen --ask "$f"
|
||||||
|
|
||||||
map A rename # at the very end
|
map A rename # at the very end
|
||||||
map c push A<c-u> # new rename
|
map c push A<c-u> # new rename
|
||||||
|
|||||||
@ -22,11 +22,13 @@ ifub() {
|
|||||||
# be regenerated once seen.
|
# be regenerated once seen.
|
||||||
|
|
||||||
case "$(file --dereference --brief --mime-type -- "$1")" in
|
case "$(file --dereference --brief --mime-type -- "$1")" in
|
||||||
|
image/avif) CACHE="${XDG_CACHE_HOME:-$HOME/.cache}/lf/thumb.$(stat --printf '%n\0%i\0%F\0%s\0%W\0%Y' -- "$(readlink -f "$1")" | sha256sum | cut -d' ' -f1)"
|
||||||
|
[ ! -f "$CACHE" ] && convert "$1" "$CACHE.jpg"
|
||||||
|
image "$CACHE.jpg" "$2" "$3" "$4" "$5" "$1" ;;
|
||||||
image/*) image "$1" "$2" "$3" "$4" "$5" "$1" ;;
|
image/*) image "$1" "$2" "$3" "$4" "$5" "$1" ;;
|
||||||
text/html) lynx -width="$4" -display_charset=utf-8 -dump "$1" ;;
|
text/html) lynx -width="$4" -display_charset=utf-8 -dump "$1" ;;
|
||||||
text/troff) man ./ "$1" | col -b ;;
|
text/troff) man ./ "$1" | col -b ;;
|
||||||
text/* | */xml | application/json) bat --terminal-width "$(($4-2))" -f "$1" ;;
|
text/* | */xml | application/json) bat --terminal-width "$(($4-2))" -f "$1" ;;
|
||||||
application/zip) atool --list -- "$1" ;;
|
|
||||||
audio/* | application/octet-stream) mediainfo "$1" || exit 1 ;;
|
audio/* | application/octet-stream) mediainfo "$1" || exit 1 ;;
|
||||||
video/* )
|
video/* )
|
||||||
CACHE="${XDG_CACHE_HOME:-$HOME/.cache}/lf/thumb.$(stat --printf '%n\0%i\0%F\0%s\0%W\0%Y' -- "$(readlink -f "$1")" | sha256sum | cut -d' ' -f1)"
|
CACHE="${XDG_CACHE_HOME:-$HOME/.cache}/lf/thumb.$(stat --printf '%n\0%i\0%F\0%s\0%W\0%Y' -- "$(readlink -f "$1")" | sha256sum | cut -d' ' -f1)"
|
||||||
@ -43,6 +45,7 @@ case "$(file --dereference --brief --mime-type -- "$1")" in
|
|||||||
[ ! -f "$CACHE.jpg" ] && gnome-epub-thumbnailer "$1" "$CACHE.jpg"
|
[ ! -f "$CACHE.jpg" ] && gnome-epub-thumbnailer "$1" "$CACHE.jpg"
|
||||||
image "$CACHE.jpg" "$2" "$3" "$4" "$5" "$1"
|
image "$CACHE.jpg" "$2" "$3" "$4" "$5" "$1"
|
||||||
;;
|
;;
|
||||||
|
application/*zip) atool --list -- "$1" ;;
|
||||||
*opendocument*) odt2txt "$1" ;;
|
*opendocument*) odt2txt "$1" ;;
|
||||||
application/pgp-encrypted) gpg -d -- "$1" ;;
|
application/pgp-encrypted) gpg -d -- "$1" ;;
|
||||||
esac
|
esac
|
||||||
|
|||||||
@ -117,7 +117,6 @@ set noshowcmd
|
|||||||
autocmd BufWritePre * let currPos = getpos(".")
|
autocmd BufWritePre * let currPos = getpos(".")
|
||||||
autocmd BufWritePre * %s/\s\+$//e
|
autocmd BufWritePre * %s/\s\+$//e
|
||||||
autocmd BufWritePre * %s/\n\+\%$//e
|
autocmd BufWritePre * %s/\n\+\%$//e
|
||||||
autocmd BufWritePre *.[ch] %s/\%$/\r/e
|
|
||||||
autocmd BufWritePre * cal cursor(currPos[1], currPos[2])
|
autocmd BufWritePre * cal cursor(currPos[1], currPos[2])
|
||||||
|
|
||||||
" When shortcut files are updated, renew bash and ranger configs with new material:
|
" When shortcut files are updated, renew bash and ranger configs with new material:
|
||||||
@ -155,4 +154,4 @@ nnoremap <leader>h :call ToggleHiddenAll()<CR>
|
|||||||
" Here leader is ";".
|
" Here leader is ";".
|
||||||
" So ":vs ;cfz" will expand into ":vs /home/<user>/.config/zsh/.zshrc"
|
" So ":vs ;cfz" will expand into ":vs /home/<user>/.config/zsh/.zshrc"
|
||||||
" if typed fast without the timeout.
|
" if typed fast without the timeout.
|
||||||
source ~/.config/nvim/shortcuts.vim
|
silent! source ~/.config/nvim/shortcuts.vim
|
||||||
|
|||||||
2
.config/python/pythonrc
Normal file
2
.config/python/pythonrc
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
import readline
|
||||||
|
readline.write_history_file = lambda *args: None
|
||||||
@ -13,6 +13,7 @@ unsetopt PROMPT_SP
|
|||||||
# Default programs:
|
# Default programs:
|
||||||
export EDITOR="nvim"
|
export EDITOR="nvim"
|
||||||
export TERMINAL="st"
|
export TERMINAL="st"
|
||||||
|
export TERMINAL_PROG="st"
|
||||||
export BROWSER="librewolf"
|
export BROWSER="librewolf"
|
||||||
|
|
||||||
# ~/ Clean-up:
|
# ~/ Clean-up:
|
||||||
@ -39,6 +40,7 @@ export UNISON="$XDG_DATA_HOME/unison"
|
|||||||
export HISTFILE="$XDG_DATA_HOME/history"
|
export HISTFILE="$XDG_DATA_HOME/history"
|
||||||
export MBSYNCRC="$XDG_CONFIG_HOME/mbsync/config"
|
export MBSYNCRC="$XDG_CONFIG_HOME/mbsync/config"
|
||||||
export ELECTRUMDIR="$XDG_DATA_HOME/electrum"
|
export ELECTRUMDIR="$XDG_DATA_HOME/electrum"
|
||||||
|
export PYTHONSTARTUP="$XDG_CONFIG_HOME/python/pythonrc"
|
||||||
|
|
||||||
# Other program settings:
|
# Other program settings:
|
||||||
export DICS="/usr/share/stardict/dic/"
|
export DICS="/usr/share/stardict/dic/"
|
||||||
|
|||||||
@ -28,6 +28,6 @@ do
|
|||||||
"d")
|
"d")
|
||||||
[ "$(printf "No\\nYes" | dmenu -i -p "Really delete $file?")" = "Yes" ] && rm "$file" && notify-send "$file deleted." ;;
|
[ "$(printf "No\\nYes" | dmenu -i -p "Really delete $file?")" = "Yes" ] && rm "$file" && notify-send "$file deleted." ;;
|
||||||
"g") ifinstalled gimp && setsid -f gimp "$file" ;;
|
"g") ifinstalled gimp && setsid -f gimp "$file" ;;
|
||||||
"i") notify-send "File information" "$(mediainfo "$file")" ;;
|
"i") notify-send "File information" "$(mediainfo "$file" | sed "s/[ ]\+:/:/g;s/: /: <b>/;s/$/<\/b>/" | grep "<b>")" ;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|||||||
@ -12,6 +12,7 @@ map K zoom in
|
|||||||
map J zoom out
|
map J zoom out
|
||||||
map i recolor
|
map i recolor
|
||||||
map p print
|
map p print
|
||||||
|
map g goto top
|
||||||
|
|
||||||
set default-bg "{background}"
|
set default-bg "{background}"
|
||||||
set default-fg "{foreground}"
|
set default-fg "{foreground}"
|
||||||
|
|||||||
@ -6,9 +6,8 @@
|
|||||||
xrandr --dpi 96 # Set DPI. User may want to use a larger number for larger screens.
|
xrandr --dpi 96 # Set DPI. User may want to use a larger number for larger screens.
|
||||||
setbg & # set the background with the `setbg` script
|
setbg & # set the background with the `setbg` script
|
||||||
#xrdb ${XDG_CONFIG_HOME:-$HOME/.config}/x11/xresources & xrdbpid=$! # Uncomment to use Xresources colors/settings on startup
|
#xrdb ${XDG_CONFIG_HOME:-$HOME/.config}/x11/xresources & xrdbpid=$! # Uncomment to use Xresources colors/settings on startup
|
||||||
remaps & # run the remaps script, switching caps/esc and more; check it for more info
|
|
||||||
|
|
||||||
autostart="mpd xcompmgr dunst unclutter pipewire"
|
autostart="mpd xcompmgr dunst unclutter pipewire remapd"
|
||||||
|
|
||||||
for program in $autostart; do
|
for program in $autostart; do
|
||||||
pidof -s "$program" || "$program" &
|
pidof -s "$program" || "$program" &
|
||||||
|
|||||||
@ -54,7 +54,7 @@ preexec() { echo -ne '\e[5 q' ;} # Use beam shape cursor for each new prompt.
|
|||||||
# Use lf to switch directories and bind it to ctrl-o
|
# Use lf to switch directories and bind it to ctrl-o
|
||||||
lfcd () {
|
lfcd () {
|
||||||
tmp="$(mktemp -uq)"
|
tmp="$(mktemp -uq)"
|
||||||
trap 'rm -f $tmp >/dev/null 2>&1' HUP INT QUIT TERM PWR EXIT
|
trap 'rm -f $tmp >/dev/null 2>&1 && trap - HUP INT QUIT TERM PWR EXIT' HUP INT QUIT TERM PWR EXIT
|
||||||
lf -last-dir-path="$tmp" "$@"
|
lf -last-dir-path="$tmp" "$@"
|
||||||
if [ -f "$tmp" ]; then
|
if [ -f "$tmp" ]; then
|
||||||
dir="$(cat "$tmp")"
|
dir="$(cat "$tmp")"
|
||||||
|
|||||||
20
.local/bin/arkenfox-auto-update
Executable file
20
.local/bin/arkenfox-auto-update
Executable file
@ -0,0 +1,20 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# A wrapper for the arkenfox-updater that runs it on all pre-existing Arkenfox
|
||||||
|
# user.js files on the machine.
|
||||||
|
|
||||||
|
# On installation of LARBS, this file is copied to /usr/local/lib/ where it is
|
||||||
|
# run by a pacman hook set up. The user should not have to run this manually.
|
||||||
|
|
||||||
|
# Search for all Firefox and Librewolf profiles using Arkenfox.
|
||||||
|
profiles="$(grep -sH "arkenfox user.js" \
|
||||||
|
/home/*/.librewolf/*.default-release/user.js \
|
||||||
|
/home/*/.mozilla/firefox/*.default-release/user.js)"
|
||||||
|
|
||||||
|
IFS='
|
||||||
|
'
|
||||||
|
|
||||||
|
# Update each found profile.
|
||||||
|
for profile in $profiles; do
|
||||||
|
arkenfox-updater -p "${profile%%/user.js*}" -s
|
||||||
|
done
|
||||||
@ -39,9 +39,9 @@ case "$ext" in
|
|||||||
java) javac -d classes "$file" && java -cp classes "${1%.*}" ;;
|
java) javac -d classes "$file" && java -cp classes "${1%.*}" ;;
|
||||||
m) octave "$file" ;;
|
m) octave "$file" ;;
|
||||||
md) if [ -x "$(command -v lowdown)" ]; then
|
md) if [ -x "$(command -v lowdown)" ]; then
|
||||||
lowdown --parse-no-intraemph "$file" -Tms | groff -mpdfmark -ms -kept > "$base".pdf
|
lowdown --parse-no-intraemph "$file" -Tms | groff -mpdfmark -ms -kept -T pdf > "$base".pdf
|
||||||
elif [ -x "$(command -v groffdown)" ]; then
|
elif [ -x "$(command -v groffdown)" ]; then
|
||||||
groffdown -i "$file" | groff > "$base.pdf"
|
groffdown -i "$file" | groff -T pdf > "$base".pdf
|
||||||
else
|
else
|
||||||
pandoc -t ms --highlight-style=kate -s -o "$base".pdf "$file"
|
pandoc -t ms --highlight-style=kate -s -o "$base".pdf "$file"
|
||||||
fi ; ;;
|
fi ; ;;
|
||||||
@ -51,7 +51,7 @@ case "$ext" in
|
|||||||
py) python "$file" ;;
|
py) python "$file" ;;
|
||||||
[rR]md) Rscript -e "rmarkdown::render('$file', quiet=TRUE)" ;;
|
[rR]md) Rscript -e "rmarkdown::render('$file', quiet=TRUE)" ;;
|
||||||
rs) cargo build ;;
|
rs) cargo build ;;
|
||||||
sass) sassc -a "$file" "$base.css" ;;
|
sass) sassc -a "$file" "$base".css ;;
|
||||||
scad) openscad -o "$base".stl "$file" ;;
|
scad) openscad -o "$base".stl "$file" ;;
|
||||||
sent) setsid -f sent "$file" 2>/dev/null ;;
|
sent) setsid -f sent "$file" 2>/dev/null ;;
|
||||||
tex) textype "$file" ;;
|
tex) textype "$file" ;;
|
||||||
|
|||||||
@ -58,7 +58,6 @@ onescreen() { # If only one output available or chosen.
|
|||||||
|
|
||||||
postrun() { # Stuff to run to clean up.
|
postrun() { # Stuff to run to clean up.
|
||||||
setbg # Fix background if screen size/arangement has changed.
|
setbg # Fix background if screen size/arangement has changed.
|
||||||
remaps # Re-remap keys if keyboard added (for laptop bases)
|
|
||||||
{ killall dunst ; setsid -f dunst ;} >/dev/null 2>&1 # Restart dunst to ensure proper location on screen
|
{ killall dunst ; setsid -f dunst ;} >/dev/null 2>&1 # Restart dunst to ensure proper location on screen
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -27,18 +27,18 @@ mountusb() { \
|
|||||||
"vfat") sudo -A mount -t vfat "$chosen" "$mp" -o rw,umask=0000;;
|
"vfat") sudo -A mount -t vfat "$chosen" "$mp" -o rw,umask=0000;;
|
||||||
"exfat") sudo -A mount "$chosen" "$mp" -o uid="$(id -u)",gid="$(id -g)";;
|
"exfat") sudo -A mount "$chosen" "$mp" -o uid="$(id -u)",gid="$(id -g)";;
|
||||||
*) sudo -A mount "$chosen" "$mp"; user="$(whoami)"; ug="$(groups | awk '{print $1}')"; sudo -A chown "$user":"$ug" "$mp";;
|
*) sudo -A mount "$chosen" "$mp"; user="$(whoami)"; ug="$(groups | awk '{print $1}')"; sudo -A chown "$user":"$ug" "$mp";;
|
||||||
esac
|
esac && notify-send "💻 USB mounting" "$chosen mounted to $mp." ||
|
||||||
notify-send "💻 USB mounting" "$chosen mounted to $mp."
|
notify-send "💻 Drive failed to mount." "Probably a permissions issue or drive is already mounted."
|
||||||
}
|
}
|
||||||
|
|
||||||
mountandroid() { \
|
mountandroid() { \
|
||||||
chosen="$(echo "$anddrives" | dmenu -i -p "Which Android device?")" || exit 1
|
chosen="$(echo "$anddrives" | dmenu -i -p "Which Android device?")" || exit 1
|
||||||
chosen="$(echo "$chosen" | cut -d : -f 1)"
|
chosen="$(echo "$chosen" | cut -d : -f 1)"
|
||||||
getmount "$HOME -maxdepth 3 -type d"
|
getmount "$HOME -maxdepth 3 -type d"
|
||||||
simple-mtpfs --device "$chosen" "$mp"
|
|
||||||
echo "OK" | dmenu -i -p "Tap Allow on your phone if it asks for permission and then press enter" || exit 1
|
echo "OK" | dmenu -i -p "Tap Allow on your phone if it asks for permission and then press enter" || exit 1
|
||||||
simple-mtpfs --device "$chosen" "$mp"
|
simple-mtpfs --device "$chosen" "$mp" &&
|
||||||
notify-send "🤖 Android Mounting" "Android device mounted to $mp."
|
notify-send "🤖 Android Mounting" "Android device mounted to $mp." ||
|
||||||
|
notify-send "🤖 Android failed mounting." "Probably a permissions issue or phone is already mounted."
|
||||||
}
|
}
|
||||||
|
|
||||||
asktype() { \
|
asktype() { \
|
||||||
|
|||||||
@ -9,6 +9,8 @@
|
|||||||
#
|
#
|
||||||
# If there is already a running instance, user will be prompted to end it.
|
# If there is already a running instance, user will be prompted to end it.
|
||||||
|
|
||||||
|
getdim() { xrandr | sed -n "s/\s*\([0-9]\+x[0-9]\+\).*\*.*/\1/p" ;}
|
||||||
|
|
||||||
updateicon() { \
|
updateicon() { \
|
||||||
echo "$1" > /tmp/recordingicon
|
echo "$1" > /tmp/recordingicon
|
||||||
pkill -RTMIN+9 "${STATUSBAR:-dwmblocks}"
|
pkill -RTMIN+9 "${STATUSBAR:-dwmblocks}"
|
||||||
@ -16,26 +18,23 @@ updateicon() { \
|
|||||||
|
|
||||||
killrecording() {
|
killrecording() {
|
||||||
recpid="$(cat /tmp/recordingpid)"
|
recpid="$(cat /tmp/recordingpid)"
|
||||||
# kill with SIGTERM, allowing finishing touches.
|
|
||||||
kill -15 "$recpid"
|
kill -15 "$recpid"
|
||||||
rm -f /tmp/recordingpid
|
rm -f /tmp/recordingpid
|
||||||
updateicon ""
|
updateicon ""
|
||||||
pkill -RTMIN+9 "${STATUSBAR:-dwmblocks}"
|
pkill -RTMIN+9 "${STATUSBAR:-dwmblocks}"
|
||||||
# even after SIGTERM, ffmpeg may still run, so SIGKILL it.
|
|
||||||
sleep 3
|
|
||||||
kill -9 "$recpid"
|
|
||||||
exit
|
|
||||||
}
|
}
|
||||||
|
|
||||||
screencast() { \
|
screencast() { \
|
||||||
ffmpeg -y \
|
ffmpeg -y \
|
||||||
-f x11grab \
|
-f x11grab \
|
||||||
-framerate 60 \
|
-framerate 30 \
|
||||||
-s "$(xdpyinfo | awk '/dimensions/ {print $2;}')" \
|
-s "$(getdim)" \
|
||||||
-i "$DISPLAY" \
|
-i "$DISPLAY" \
|
||||||
-f alsa -i default \
|
-r 24 \
|
||||||
-r 30 \
|
-use_wallclock_as_timestamps 1 \
|
||||||
-c:v h264 -crf 0 -preset ultrafast -c:a aac \
|
-f alsa -thread_queue_size 1024 -i default \
|
||||||
|
-c:v h264 \
|
||||||
|
-crf 0 -preset ultrafast -c:a aac \
|
||||||
"$HOME/screencast-$(date '+%y%m%d-%H%M-%S').mp4" &
|
"$HOME/screencast-$(date '+%y%m%d-%H%M-%S').mp4" &
|
||||||
echo $! > /tmp/recordingpid
|
echo $! > /tmp/recordingpid
|
||||||
updateicon "⏺️🎙️"
|
updateicon "⏺️🎙️"
|
||||||
@ -43,7 +42,8 @@ screencast() { \
|
|||||||
|
|
||||||
video() { ffmpeg \
|
video() { ffmpeg \
|
||||||
-f x11grab \
|
-f x11grab \
|
||||||
-s "$(xdpyinfo | awk '/dimensions/ {print $2;}')" \
|
-framerate 30 \
|
||||||
|
-s "$(getdim)" \
|
||||||
-i "$DISPLAY" \
|
-i "$DISPLAY" \
|
||||||
-c:v libx264 -qp 0 -r 30 \
|
-c:v libx264 -qp 0 -r 30 \
|
||||||
"$HOME/video-$(date '+%y%m%d-%H%M-%S').mkv" &
|
"$HOME/video-$(date '+%y%m%d-%H%M-%S').mkv" &
|
||||||
@ -104,7 +104,7 @@ videoselected()
|
|||||||
|
|
||||||
ffmpeg \
|
ffmpeg \
|
||||||
-f x11grab \
|
-f x11grab \
|
||||||
-framerate 60 \
|
-framerate 30 \
|
||||||
-video_size "$W"x"$H" \
|
-video_size "$W"x"$H" \
|
||||||
-i :0.0+"$X,$Y" \
|
-i :0.0+"$X,$Y" \
|
||||||
-c:v libx264 -qp 0 -r 30 \
|
-c:v libx264 -qp 0 -r 30 \
|
||||||
|
|||||||
@ -4,41 +4,18 @@
|
|||||||
# Provides you with mounted partitions, select one to unmount.
|
# Provides you with mounted partitions, select one to unmount.
|
||||||
# Drives mounted at /, /boot and /home will not be options to unmount.
|
# Drives mounted at /, /boot and /home will not be options to unmount.
|
||||||
|
|
||||||
unmountusb() {
|
drives="$(lsblk -nrpo "name,type,size,mountpoint,label" | awk -F':' '{gsub(/ /,":")}$4!~/\/boot|\/efi|\/home$|SWAP/&&length($4)>1{printf "%s (%s) %s\n",$4,$3,$5}'; awk '/simple-mtpfs/ { print "📱", $2; }' /etc/mtab)"
|
||||||
[ -z "$drives" ] && exit
|
|
||||||
chosen="$(echo "$drives" | dmenu -i -p "Unmount which drive?")" || exit 1
|
|
||||||
chosen="$(echo "$chosen" | awk '{print $1}')"
|
|
||||||
[ -z "$chosen" ] && exit
|
|
||||||
sudo -A umount "$chosen" && notify-send "💻 USB unmounting" "$chosen unmounted."
|
|
||||||
}
|
|
||||||
|
|
||||||
unmountandroid() { \
|
chosen="$(echo "$drives" | dmenu -i -p "Unmount which drive?")" || exit 1
|
||||||
chosen="$(awk '/simple-mtpfs/ {print $2}' /etc/mtab | dmenu -i -p "Unmount which device?")" || exit 1
|
|
||||||
[ -z "$chosen" ] && exit
|
|
||||||
sudo -A umount -l "$chosen" && notify-send "🤖 Android unmounting" "$chosen unmounted."
|
|
||||||
}
|
|
||||||
|
|
||||||
asktype() { \
|
case "$chosen" in
|
||||||
choice="$(printf "USB\\nAndroid" | dmenu -i -p "Unmount a USB drive or Android device?")" || exit 1
|
📱*)
|
||||||
case "$choice" in
|
chosen="${chosen#📱 }"
|
||||||
USB) unmountusb ;;
|
sudo -A umount -l "$chosen"
|
||||||
Android) unmountandroid ;;
|
;;
|
||||||
esac
|
*)
|
||||||
}
|
chosen="${chosen% (*}"
|
||||||
|
sudo -A umount -l "$chosen"
|
||||||
drives=$(lsblk -nrpo "name,type,size,mountpoint,label" | awk -F':' '{gsub(/ /,":")}$4!~/\/boot|\/efi|\/home$|SWAP/&&length($4)>1{printf "%s (%s) %s\n",$4,$3,$5}')
|
;;
|
||||||
|
esac && notify-send "🖥️ Drive unmounted." "$chosen successfully unmounted." ||
|
||||||
if ! grep simple-mtpfs /etc/mtab; then
|
notify-send "🖥️ Drive failed to unmount." "Possibly a permissions or I/O issue."
|
||||||
[ -z "$drives" ] && echo "No drives to unmount." && exit
|
|
||||||
echo "Unmountable USB drive detected."
|
|
||||||
unmountusb
|
|
||||||
else
|
|
||||||
if [ -z "$drives" ]
|
|
||||||
then
|
|
||||||
echo "Unmountable Android device detected."
|
|
||||||
unmountandroid
|
|
||||||
else
|
|
||||||
echo "Unmountable USB drive(s) and Android device(s) detected."
|
|
||||||
asktype
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|||||||
@ -13,7 +13,7 @@ else
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
case "$url" in
|
case "$url" in
|
||||||
*mkv|*webm|*mp4|*youtube.com/watch*|*youtube.com/playlist*|*youtu.be*|*hooktube.com*|*bitchute.com*|*videos.lukesmith.xyz*|*odysee.com*)
|
*mkv|*webm|*mp4|*youtube.com/watch*|*youtube.com/playlist*|*youtube.com/shorts*|*youtu.be*|*hooktube.com*|*bitchute.com*|*videos.lukesmith.xyz*|*odysee.com*)
|
||||||
setsid -f mpv -quiet "$url" >/dev/null 2>&1 ;;
|
setsid -f mpv -quiet "$url" >/dev/null 2>&1 ;;
|
||||||
*png|*jpg|*jpe|*jpeg|*gif)
|
*png|*jpg|*jpe|*jpeg|*gif)
|
||||||
curl -sL "$url" > "/tmp/$(echo "$url" | sed "s/.*\///;s/%20/ /g")" && sxiv -a "/tmp/$(echo "$url" | sed "s/.*\///;s/%20/ /g")" >/dev/null 2>&1 & ;;
|
curl -sL "$url" > "/tmp/$(echo "$url" | sed "s/.*\///;s/%20/ /g")" && sxiv -a "/tmp/$(echo "$url" | sed "s/.*\///;s/%20/ /g")" >/dev/null 2>&1 & ;;
|
||||||
|
|||||||
93
.local/bin/mounter
Executable file
93
.local/bin/mounter
Executable file
@ -0,0 +1,93 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Mounts Android Phones and USB drives (encrypted or not). This script will
|
||||||
|
# replace the older `dmenumount` which had extra steps and couldn't handle
|
||||||
|
# encrypted drives.
|
||||||
|
# TODO: Remove already mounted Android phones from prompt.
|
||||||
|
# TODO: Try mount first for drives if in fstab to avoid directory prompt?
|
||||||
|
# TODO: Add some support for connecting iPhones (although they are annoying).
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Check for phones.
|
||||||
|
phones="$(simple-mtpfs -l 2>/dev/null | sed "s/^/📱/")"
|
||||||
|
# Check for drives.
|
||||||
|
lsblkoutput="$(lsblk -rpo "uuid,name,type,size,label,mountpoint,fstype")"
|
||||||
|
# Get all LUKS drives
|
||||||
|
allluks="$(echo "$lsblkoutput" | grep crypto_LUKS)" || true
|
||||||
|
# Get a list of the LUKS drive UUIDs already decrypted.
|
||||||
|
decrypted="$(find /dev/disk/by-id/dm-uuid-CRYPT-LUKS2-* | sed "s|.*LUKS2-||;s|-.*||")" || true
|
||||||
|
# Functioning for formatting drives correctly for dmenu:
|
||||||
|
filter() { sed "s/ /:/g" | awk -F':' '$7==""{printf "%s%s (%s) %s\n",$1,$3,$5,$6}' ; }
|
||||||
|
|
||||||
|
# Get only LUKS drives that are not decrypted.
|
||||||
|
IFS='
|
||||||
|
'
|
||||||
|
unopenedluks="$(for drive in $allluks; do
|
||||||
|
uuid="${drive%% *}"
|
||||||
|
uuid="${uuid//-}" # This is a bashism.
|
||||||
|
for open in $decrypted; do
|
||||||
|
[ "$uuid" = "$open" ] && break 1
|
||||||
|
done && continue 1
|
||||||
|
echo "🔒 $drive"
|
||||||
|
done | filter)"
|
||||||
|
|
||||||
|
# Get all normal, non-encrypted or decrypted partitions that are not mounted.
|
||||||
|
normalparts="$(echo "$lsblkoutput"| grep -v crypto_LUKS | grep 'part\|rom\|crypt' | sed "s/^/💾 /" | filter )"
|
||||||
|
|
||||||
|
# Add all to one variable. If no mountable drives found, exit.
|
||||||
|
alldrives="$(echo "$phones
|
||||||
|
$unopenedluks
|
||||||
|
$normalparts" | sed "/^$/d;s/ *$//")"
|
||||||
|
test -n "$alldrives"
|
||||||
|
|
||||||
|
# Feed all found drives to dmenu and get user choice.
|
||||||
|
chosen="$(echo "$alldrives" | dmenu -p "Mount which drive?" -i)"
|
||||||
|
|
||||||
|
# Function for prompting user for a mountpoint.
|
||||||
|
getmount(){
|
||||||
|
mp="$(find /mnt /media /mount /home -maxdepth 1 -type d 2>/dev/null | dmenu -i -p "Mount this drive where?")"
|
||||||
|
test -n "$mp"
|
||||||
|
if [ ! -d "$mp" ]; then
|
||||||
|
mkdiryn=$(printf "No\\nYes" | dmenu -i -p "$mp does not exist. Create it?")
|
||||||
|
[ "$mkdiryn" = "Yes" ] && (mkdir -p "$mp" || sudo -A mkdir -p "$mp")
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
case "$chosen" in
|
||||||
|
💾*)
|
||||||
|
chosen="${chosen%% *}"
|
||||||
|
chosen="${chosen:1}" # This is a bashism.
|
||||||
|
getmount
|
||||||
|
sudo -A mount "$chosen" "$mp"
|
||||||
|
notify-send "💾Drive Mounted." "$chosen mounted to $mp."
|
||||||
|
;;
|
||||||
|
|
||||||
|
🔒*)
|
||||||
|
chosen="${chosen%% *}"
|
||||||
|
chosen="${chosen:1}" # This is a bashism.
|
||||||
|
# Number the drive.
|
||||||
|
while true; do
|
||||||
|
[ -f "/dev/mapper/usb$num" ] || break
|
||||||
|
num="$(printf "%02d" "$((num +1))")"
|
||||||
|
done
|
||||||
|
|
||||||
|
# Decrypt in a terminal window
|
||||||
|
${TERMINAL:-st} -n floatterm -g 60x1 -e sudo cryptsetup open "$chosen" "usb$num"
|
||||||
|
# Check if now decrypted.
|
||||||
|
test -b "/dev/mapper/usb$num"
|
||||||
|
|
||||||
|
getmount
|
||||||
|
sudo -A mount "/dev/mapper/usb$num" "$mp"
|
||||||
|
notify-send "🔓Decrypted drive Mounted." "$chosen decrypted and mounted to $mp."
|
||||||
|
;;
|
||||||
|
|
||||||
|
📱*)
|
||||||
|
getmount
|
||||||
|
echo "OK" | dmenu -i -p "Tap Allow on your phone if it asks for permission and then press enter"
|
||||||
|
chosen="${chosen%%:*}"
|
||||||
|
chosen="${chosen:1}" # This is a bashism.
|
||||||
|
simple-mtpfs --device "$chosen" "$mp"
|
||||||
|
notify-send "🤖 Android Mounted." "Android device mounted to $mp."
|
||||||
|
;;
|
||||||
|
esac
|
||||||
8
.local/bin/remapd
Executable file
8
.local/bin/remapd
Executable file
@ -0,0 +1,8 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Rerun the remaps script whenever a new input device is added.
|
||||||
|
|
||||||
|
while :; do
|
||||||
|
remaps
|
||||||
|
grep -qP -m1 '[^un]bind.+\/[^:]+\(usb\)' <(udevadm monitor -u -t seat -s input -s usb)
|
||||||
|
done
|
||||||
@ -8,4 +8,4 @@ setxkbmap -option caps:super,altwin:menu_win
|
|||||||
# When caps lock is pressed only once, treat it as escape.
|
# When caps lock is pressed only once, treat it as escape.
|
||||||
killall xcape 2>/dev/null ; xcape -e 'Super_L=Escape'
|
killall xcape 2>/dev/null ; xcape -e 'Super_L=Escape'
|
||||||
# Turn off caps lock if on since there is no longer a key for it.
|
# Turn off caps lock if on since there is no longer a key for it.
|
||||||
xset -q | grep "Caps Lock:\s*on" && xdotool key Caps_Lock
|
xset -q | grep -q "Caps Lock:\s*on" && xdotool key Caps_Lock
|
||||||
|
|||||||
@ -2,10 +2,21 @@
|
|||||||
|
|
||||||
# Open a terminal window in the same directory as the currently active window.
|
# Open a terminal window in the same directory as the currently active window.
|
||||||
|
|
||||||
PID=$(xprop -id "$(xprop -root | xprop -root | sed -n "/_NET_ACTIVE_WINDOW/ s/^.*# // p")" | sed -n "/PID/ s/^.*= // p")
|
windowPID=$(xprop -id "$(xprop -root | sed -n "/_NET_ACTIVE_WINDOW/ s/^.*# // p")" | sed -n "/PID/ s/^.*= // p")
|
||||||
PID="$(pstree -lpA "$PID")"
|
PIDlist=$(pstree -lpATna "$windowPID" | sed -En 's/.*,([0-9]+).*/\1/p' | tac)
|
||||||
PID="${PID##*"${SHELL##*/}"(}"
|
for PID in $PIDlist; do
|
||||||
PID="${PID#*lf(}"
|
cmdline=$(ps -o args= -p "$PID")
|
||||||
PID="${PID%%)*}"
|
process_group_leader=$(ps -o comm= -p "$(ps -o pgid= -p "$PID" | tr -d ' ')")
|
||||||
cd "$(readlink /proc/"$PID"/cwd)" || return 1
|
cwd=$(readlink /proc/"$PID"/cwd)
|
||||||
|
# zsh and lf won't be ignored even if it shows ~ or /
|
||||||
|
case "$cmdline" in
|
||||||
|
'lf -server') continue ;;
|
||||||
|
"${SHELL##*/}"|'lf'|'lf '*) break ;;
|
||||||
|
esac
|
||||||
|
# git (and its sub-processes) will show the root of a repository instead of the actual cwd, so they're ignored
|
||||||
|
[ "$process_group_leader" = 'git' ] || [ ! -d "$cwd" ] && continue
|
||||||
|
# This is to ignore programs that show ~ or / instead of the actual working directory
|
||||||
|
[ "$cwd" != "$HOME" ] && [ "$cwd" != '/' ] && break
|
||||||
|
done
|
||||||
|
[ "$PWD" != "$cwd" ] && [ -d "$cwd" ] && { cd "$cwd" || exit 1; }
|
||||||
"$TERMINAL"
|
"$TERMINAL"
|
||||||
|
|||||||
@ -22,9 +22,9 @@ printf "\" vim: filetype=vim\\n" > "$vifm_shortcuts"
|
|||||||
# Format the `directories` file in the correct syntax and sent it to all three configs.
|
# Format the `directories` file in the correct syntax and sent it to all three configs.
|
||||||
eval "echo \"$(cat "$bmdirs")\"" | \
|
eval "echo \"$(cat "$bmdirs")\"" | \
|
||||||
awk "!/^\s*#/ && !/^\s*\$/ {gsub(\"\\\s*#.*$\",\"\");
|
awk "!/^\s*#/ && !/^\s*\$/ {gsub(\"\\\s*#.*$\",\"\");
|
||||||
printf(\"%s=\42cd %s && ls -a\42 \\\\\n\",\$1,\$2) >> \"$shell_shortcuts\" ;
|
printf(\"%s=\42cd %s && ls -A\42 \\\\\n\",\$1,\$2) >> \"$shell_shortcuts\" ;
|
||||||
printf(\"hash -d %s=%s \n\",\$1,\$2) >> \"$zsh_named_dirs\" ;
|
printf(\"hash -d %s=%s \n\",\$1,\$2) >> \"$zsh_named_dirs\" ;
|
||||||
printf(\"abbr %s \42cd %s; and ls -a\42\n\",\$1,\$2) >> \"$fish_shortcuts\" ;
|
printf(\"abbr %s \42cd %s; and ls -A\42\n\",\$1,\$2) >> \"$fish_shortcuts\" ;
|
||||||
printf(\"map g%s :cd %s<CR>\nmap t%s <tab>:cd %s<CR><tab>\nmap M%s <tab>:cd %s<CR><tab>:mo<CR>\nmap Y%s <tab>:cd %s<CR><tab>:co<CR> \n\",\$1,\$2, \$1, \$2, \$1, \$2, \$1, \$2) >> \"$vifm_shortcuts\" ;
|
printf(\"map g%s :cd %s<CR>\nmap t%s <tab>:cd %s<CR><tab>\nmap M%s <tab>:cd %s<CR><tab>:mo<CR>\nmap Y%s <tab>:cd %s<CR><tab>:co<CR> \n\",\$1,\$2, \$1, \$2, \$1, \$2, \$1, \$2) >> \"$vifm_shortcuts\" ;
|
||||||
printf(\"config.bind(';%s', \42set downloads.location.directory %s ;; hint links download\42) \n\",\$1,\$2) >> \"$qute_shortcuts\" ;
|
printf(\"config.bind(';%s', \42set downloads.location.directory %s ;; hint links download\42) \n\",\$1,\$2) >> \"$qute_shortcuts\" ;
|
||||||
printf(\"map g%s cd %s\nmap t%s tab_new %s\nmap m%s shell mv -v %%s %s\nmap Y%s shell cp -rv %%s %s \n\",\$1,\$2,\$1,\$2, \$1, \$2, \$1, \$2) >> \"$ranger_shortcuts\" ;
|
printf(\"map g%s cd %s\nmap t%s tab_new %s\nmap m%s shell mv -v %%s %s\nmap Y%s shell cp -rv %%s %s \n\",\$1,\$2,\$1,\$2, \$1, \$2, \$1, \$2) >> \"$ranger_shortcuts\" ;
|
||||||
|
|||||||
@ -184,7 +184,7 @@ US: KVNX: Norman, OK
|
|||||||
US: KVBX: Vandenberg Afb: Orcutt, CA
|
US: KVBX: Vandenberg Afb: Orcutt, CA
|
||||||
EU: Europe
|
EU: Europe
|
||||||
EU: GB: Great Brittain
|
EU: GB: Great Brittain
|
||||||
EU: SCAN: Scandinavia
|
EU: SCAN: Scandinavia. Norway, Sweden And Denmark
|
||||||
EU: ALPS: The Alps
|
EU: ALPS: The Alps
|
||||||
EU: NL: The Netherlands
|
EU: NL: The Netherlands
|
||||||
EU: DE: Germany
|
EU: DE: Germany
|
||||||
|
|||||||
@ -1,20 +1,40 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
# Displays todays precipication chance (☔) and daily low (🥶) and high (🌞).
|
# Displays today's precipication chance (☔), and daily low (🥶) and high (🌞).
|
||||||
# Usually intended for the statusbar.
|
# Usually intended for the statusbar.
|
||||||
|
|
||||||
# If we have internet, get a weather report from wttr.in and store it locally.
|
|
||||||
# You could set up a shell alias to view the full file in a pager in the
|
|
||||||
# terminal if desired. This function will only be run once a day when needed.
|
|
||||||
weatherreport="${XDG_CACHE_HOME:-$HOME/.cache}/weatherreport"
|
weatherreport="${XDG_CACHE_HOME:-$HOME/.cache}/weatherreport"
|
||||||
getforecast() { curl -sf "wttr.in/$LOCATION" > "$weatherreport" || exit 1 ;}
|
|
||||||
|
|
||||||
# Some very particular and terse stream manipulation. We get the maximum
|
# Get a weather report from 'wttr.in' and save it locally.
|
||||||
# precipitation chance and the daily high and low from the downloaded file and
|
getforecast() { curl -sf "wttr.in/$LOCATION" > "$weatherreport" || exit 1; }
|
||||||
# display them with coresponding emojis.
|
|
||||||
showweather() { printf "%s" "$(sed '16q;d' "$weatherreport" |
|
# Forecast should be updated only once a day.
|
||||||
grep -wo "[0-9]*%" | sort -rn | sed "s/^/☔/g;1q" | tr -d '\n')"
|
checkforecast() {
|
||||||
sed '13q;d' "$weatherreport" | grep -o "m\\([-+]\\)*[0-9]\\+" | sed 's/+//g' | sort -n -t 'm' -k 2n | sed -e 1b -e '$!d' | tr '\n|m' ' ' | awk '{print " 🥶" $1 "°","🌞" $2 "°"}' ;}
|
[ -s "$weatherreport" ] && [ "$(stat -c %y "$weatherreport" 2>/dev/null |
|
||||||
|
cut -d' ' -f1)" = "$(date '+%Y-%m-%d')" ]
|
||||||
|
}
|
||||||
|
|
||||||
|
getprecipchance() {
|
||||||
|
echo "$weatherdata" | sed '16q;d' | # Extract line 16 from file
|
||||||
|
grep -wo "[0-9]*%" | # Find a sequence of digits followed by '%'
|
||||||
|
sort -rn | # Sort in descending order
|
||||||
|
head -1q # Extract first line
|
||||||
|
}
|
||||||
|
|
||||||
|
getdailyhighlow() {
|
||||||
|
echo "$weatherdata" | sed '13q;d' | # Extract line 13 from file
|
||||||
|
grep -o "m\\([-+]\\)*[0-9]\\+" | # Find temperatures in the format "m<signed number>"
|
||||||
|
sed 's/[+m]//g' | # Remove '+' and 'm'
|
||||||
|
sort -n -k 2n | # Sort in ascending order
|
||||||
|
sed -e 1b -e '$!d' # Extract the first and last lines
|
||||||
|
}
|
||||||
|
|
||||||
|
readfile() { weatherdata="$(cat "$weatherreport")" ;}
|
||||||
|
|
||||||
|
showweather() {
|
||||||
|
readfile
|
||||||
|
printf "☔%s 🥶%s° 🌞%s°\n" "$(getprecipchance)" $(getdailyhighlow)
|
||||||
|
}
|
||||||
|
|
||||||
case $BLOCK_BUTTON in
|
case $BLOCK_BUTTON in
|
||||||
1) setsid -f "$TERMINAL" -e less -Srf "$weatherreport" ;;
|
1) setsid -f "$TERMINAL" -e less -Srf "$weatherreport" ;;
|
||||||
@ -27,9 +47,6 @@ case $BLOCK_BUTTON in
|
|||||||
6) "$TERMINAL" -e "$EDITOR" "$0" ;;
|
6) "$TERMINAL" -e "$EDITOR" "$0" ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# The test if our forcecast is updated to the day. If it isn't download a new
|
checkforecast || getforecast
|
||||||
# weather report from wttr.in with the above function.
|
|
||||||
[ -s "$weatherreport" ] && [ "$(stat -c %y "$weatherreport" 2>/dev/null | cut -d' ' -f1)" = "$(date '+%Y-%m-%d')" ] ||
|
|
||||||
getforecast
|
|
||||||
|
|
||||||
showweather
|
showweather
|
||||||
|
|||||||
@ -5,6 +5,7 @@ kb="$(setxkbmap -query | grep -oP 'layout:\s*\K\w+')" || exit 1
|
|||||||
|
|
||||||
case $BLOCK_BUTTON in
|
case $BLOCK_BUTTON in
|
||||||
1) kb_choice="$(awk '/! layout/{flag=1; next} /! variant/{flag=0} flag {print $2, "- " $1}' /usr/share/X11/xkb/rules/base.lst | dmenu -l 15)"
|
1) kb_choice="$(awk '/! layout/{flag=1; next} /! variant/{flag=0} flag {print $2, "- " $1}' /usr/share/X11/xkb/rules/base.lst | dmenu -l 15)"
|
||||||
|
[ -z "$kb_choice" ] && exit 0
|
||||||
kb="$(echo "$kb_choice" | awk '{print $3}')"
|
kb="$(echo "$kb_choice" | awk '{print $3}')"
|
||||||
setxkbmap "$kb"
|
setxkbmap "$kb"
|
||||||
pkill -RTMIN+30 "${STATUSBAR:-dwmblocks}";;
|
pkill -RTMIN+30 "${STATUSBAR:-dwmblocks}";;
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
filter() { mpc | sed "/^volume:/d;s/\\&/&/g;s/\\[paused\\].*/⏸/g;/\\[playing\\].*/d;/^ERROR/Q" | paste -sd ' ' -;}
|
filter() { sed "/^volume:/d;s/\\&/&/g;s/\\[paused\\].*/⏸/g;/\\[playing\\].*/d;/^ERROR/Q" | paste -sd ' ' -;}
|
||||||
|
|
||||||
pidof -x sb-mpdup >/dev/null 2>&1 || sb-mpdup >/dev/null 2>&1 &
|
pidof -x sb-mpdup >/dev/null 2>&1 || sb-mpdup >/dev/null 2>&1 &
|
||||||
|
|
||||||
|
|||||||
@ -4,9 +4,9 @@
|
|||||||
|
|
||||||
case $BLOCK_BUTTON in
|
case $BLOCK_BUTTON in
|
||||||
1) setsid -f "$TERMINAL" -e pulsemixer ;;
|
1) setsid -f "$TERMINAL" -e pulsemixer ;;
|
||||||
2) pamixer -t ;;
|
2) wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle ;;
|
||||||
4) pamixer --allow-boost -i 1 ;;
|
4) wpctl set-volume @DEFAULT_AUDIO_SINK@ 1%+ ;;
|
||||||
5) pamixer --allow-boost -d 1 ;;
|
5) wpctl set-volume @DEFAULT_AUDIO_SINK@ 1%- ;;
|
||||||
3) notify-send "📢 Volume module" "\- Shows volume 🔊, 🔇 if muted.
|
3) notify-send "📢 Volume module" "\- Shows volume 🔊, 🔇 if muted.
|
||||||
- Middle click to mute.
|
- Middle click to mute.
|
||||||
- Scroll to change." ;;
|
- Scroll to change." ;;
|
||||||
@ -19,14 +19,15 @@ vol="$(wpctl get-volume @DEFAULT_AUDIO_SINK@)"
|
|||||||
[ "$vol" != "${vol%\[MUTED\]}" ] && echo 🔇 && exit
|
[ "$vol" != "${vol%\[MUTED\]}" ] && echo 🔇 && exit
|
||||||
|
|
||||||
vol="${vol#Volume: }"
|
vol="${vol#Volume: }"
|
||||||
|
|
||||||
split() {
|
split() {
|
||||||
# For ommiting the . without calling and external program.
|
# For ommiting the . without calling and external program.
|
||||||
IFS=$2
|
IFS=$2
|
||||||
set -- $1
|
set -- $1
|
||||||
printf '%s' "$@"
|
printf '%s' "$@"
|
||||||
}
|
}
|
||||||
vol="$(split "$vol" ".")"
|
|
||||||
vol="${vol##0}"
|
vol="$(printf "%.0f" "$(split "$vol" ".")")"
|
||||||
|
|
||||||
case 1 in
|
case 1 in
|
||||||
$((vol >= 70)) ) icon="🔊" ;;
|
$((vol >= 70)) ) icon="🔊" ;;
|
||||||
|
|||||||
28
.local/bin/unmounter
Executable file
28
.local/bin/unmounter
Executable file
@ -0,0 +1,28 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Unmount USB drives or Android phones. Replaces the older `dmenuumount`. Fewer
|
||||||
|
# prompt and also de-decrypts LUKS drives that are unmounted.
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
mounteddroids="$(grep simple-mtpfs /etc/mtab | awk '{print "📱" $2}')"
|
||||||
|
lsblkoutput="$(lsblk -nrpo "name,type,size,mountpoint")"
|
||||||
|
mounteddrives="$(echo "$lsblkoutput" | awk '($2=="part"||$2="crypt")&&$4!~/\/boot|\/home$|SWAP/&&length($4)>1{printf "💾%s (%s)\n",$4,$3}')"
|
||||||
|
|
||||||
|
allunmountable="$(echo "$mounteddroids
|
||||||
|
$mounteddrives" | sed "/^$/d;s/ *$//")"
|
||||||
|
test -n "$allunmountable"
|
||||||
|
|
||||||
|
chosen="$(echo "$allunmountable" | dmenu -i -p "Unmount which drive?")"
|
||||||
|
chosen="${chosen%% *}"
|
||||||
|
test -n "$chosen"
|
||||||
|
|
||||||
|
sudo -A umount -l "/${chosen#*/}"
|
||||||
|
notify-send "Device unmounted." "$chosen has been unmounted."
|
||||||
|
|
||||||
|
# Close the chosen drive if decrypted.
|
||||||
|
cryptid="$(echo "$lsblkoutput" | grep "/${chosen#*/}$")"
|
||||||
|
cryptid="${cryptid%% *}"
|
||||||
|
test -b /dev/mapper/"${cryptid##*/}"
|
||||||
|
sudo -A cryptsetup close "$cryptid"
|
||||||
|
notify-send "🔒Device dencryption closed." "Drive is now securely locked again."
|
||||||
@ -42,7 +42,7 @@ curl -LO larbs.xyz/larbs.sh
|
|||||||
```
|
```
|
||||||
|
|
||||||
or clone the repo files directly to your home directory and install the
|
or clone the repo files directly to your home directory and install the
|
||||||
[dependencies](https://github.com/LukeSmithxyz/LARBS/blob/master/progs.csv).
|
[dependencies](https://github.com/LukeSmithxyz/LARBS/blob/master/static/progs.csv).
|
||||||
|
|
||||||
## Default Desktop Artwork
|
## Default Desktop Artwork
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user