diff options
74 files changed, 177 insertions, 1872 deletions
@@ -6,19 +6,42 @@ Arch Linux installation and configuration scripts with dotfiles managed via GNU ## Project Structure - `archsetup` - Main installation script with functions for packages, configs, services - `dotfiles/common/` - Shared dotfiles for all desktop environments (stowed to ~) -- `dotfiles/dwm/` - DWM/X11-specific dotfiles including dmenu scripts and dwmblocks statusbar -- `dotfiles/hyprland/` - Hyprland-specific dotfiles +- `dotfiles/dwm/` - DWM/X11-specific dotfiles (8 scripts) +- `dotfiles/hyprland/` - Hyprland-specific dotfiles (7 scripts) - `docs/` - Documentation and package lists - `reference-repos/` - External dotfile references +- `Makefile` - GNU Stow operations for dotfile management -## Script Organization (Jan 2026 Refactor) +## Makefile Targets ``` -dotfiles/common/.local/bin/ → Universal scripts (46) - work on X11 & Wayland -dotfiles/dwm/.local/bin/ → X11/DWM-only scripts (26 + 24 statusbar) -dotfiles/hyprland/.local/bin/ → Hyprland-only scripts (8) +make stow dwm # Fresh install (common + dwm) +make stow hyprland # Fresh install (common + hyprland) +make restow dwm # Refresh links after git pull +make reset hyprland # Fix conflicts, keep repo version +make unstow dwm # Remove all symlinks +make import common # fzf select → import to common/ +make import dwm # fzf select → import to dwm/ +make import hyprland # fzf select → import to hyprland/ ``` -## Shell Configuration (Jan 2026 Refactor) +## Script Counts +``` +dotfiles/common/.local/bin/ → 33 universal scripts +dotfiles/dwm/.local/bin/ → 8 X11/DWM scripts +dotfiles/hyprland/.local/bin/ → 7 Hyprland scripts +``` + +### DWM Scripts (8) +Scripts bound in ~/code/dwm/config.def.h (on velox): +- brightness (XF86 keys), toggle-touchpad (Mod+F9), dmenuexitmenu (Mod+Shift+Q) +- Plus: airplanemodetoggle, colorpick, dmenuunicode, screenshotmenu, wallsearch + +### Hyprland Scripts (7) +All actively used in configs: +- cycle-layout, layout-navigate, pinentry-fuzzel, set-theme +- toggle-scratchpad, waybar-layout, waybar-netspeed + +## Shell Configuration ``` ~/.profile → Environment variables only (POSIX compatible) ~/.bash_profile → Sources .profile + .bashrc for login shells @@ -42,32 +65,25 @@ dotfiles/hyprland/.local/bin/ → Hyprland-only scripts (8) - `dotfiles/common/.profile.d/` - Shell environment scripts - `dotfiles/common/.config/qt5ct/qt5ct.conf` - Qt5 theming - `dotfiles/common/.config/qt6ct/qt6ct.conf` - Qt6 theming -- `dotfiles/common/.local/bin/resetmimetypes` - MIME associations script - -## Stowing Dotfiles -- DWM installs: `stow --target=$HOME common && stow --target=$HOME dwm` -- Hyprland installs: `stow --target=$HOME common && stow --target=$HOME hyprland` ## Pending Work -- Review remaining scripts in common/.local/bin/ for unused apps (mpd, msmtp) -- Add Makefile targets for foolproof stowing - Task #4: Evaluate Euphonica MPD client (May 2026) ## Recent Changes (Jan 2026) +- Added Makefile for GNU Stow operations (stow, restow, reset, unstow, import) - Renamed dotfiles/system/ to dotfiles/common/ for clarity -- Deleted unused configs: ghostty, lf, mopidy, nitrogen, pychess, JetBrains, youtube-dl -- Reorganized scripts: X11-only moved to dotfiles/dwm/, universal stays in common/ -- Deleted 8 obsolete scripts (debugemacs, gruv, calibre-install, etc.) +- Cleaned up scripts: common 44→33, dwm 50→8, hyprland 8→7 +- Deleted unused configs: ghostty, lf, mopidy, nitrogen, pychess, JetBrains, youtube-dl, sublime-merge +- Added yt-dlp config and org-protocol-setup script +- Fixed yt-dlp aliases: --add-metadata → --embed-metadata - Refactored shell configs: proper .profile/.bashrc/.zshrc separation - Created .bashrc.d/ and .zshrc.d/ for modular configs - Added Qt theming with adwaita-qt5/qt6 -- Added font packages: cantarell-fonts, ttf-caladea, ttf-carlito, ttf-croscore - Pruned ~90 desktop files from app menu with NoDisplay=true overrides -- Switched file manager from Thunar to Nautilus -- Cleaned up resetmimetypes script ## Notes - Desktop file overrides go in `dotfiles/hyprland/.local/share/applications/` -- Stow conflicts require manual symlinks: `ln -sf source target` - MPD is configured but mpv handles audio file associations - BerkeleyMono Nerd Font is the primary monospace font +- DWM keybindings defined in ~/code/dwm/config.def.h on velox +- audacious config kept in common/ for potential future use diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..3679c86 --- /dev/null +++ b/Makefile @@ -0,0 +1,123 @@ +# Makefile for archsetup dotfiles +# GNU Stow operations for managing dotfiles + +STOW := stow --target=$(HOME) --no-folding +DOTFILES := $(shell pwd)/dotfiles + +# Extract DE from command line (e.g., 'make stow dwm' -> DE=dwm) +DE := $(filter dwm hyprland,$(MAKECMDGOALS)) + +# Extract DEST from command line for import (e.g., 'make import common' -> DEST=common) +DEST := $(filter common dwm hyprland,$(MAKECMDGOALS)) + +.PHONY: help stow restow reset unstow import common dwm hyprland + +# Default target - show help +help: + @echo "Dotfiles Management (GNU Stow)" + @echo "" + @echo "Usage: make <target> <de|dest>" + @echo "" + @echo "Desktop Environments / Destinations:" + @echo " common Shared configs (all setups)" + @echo " dwm X11/DWM specific" + @echo " hyprland Wayland/Hyprland specific" + @echo "" + @echo "Targets:" + @echo " stow Create symlinks (fresh install) - requires DE" + @echo " restow Refresh symlinks (unlink + relink) - requires DE" + @echo " reset Resolve conflicts, keep repo version - requires DE" + @echo " unstow Remove all symlinks - requires DE" + @echo " import Import new app configs into repo (fzf) - requires dest" + @echo "" + @echo "Examples:" + @echo " make stow dwm # Fresh DWM install (common + dwm)" + @echo " make stow hyprland # Fresh Hyprland install (common + hyprland)" + @echo " make restow dwm # Refresh DWM links after git pull" + @echo " make reset hyprland # Resolve conflicts, keep repo version" + @echo " make import common # Import configs to common/" + @echo " make import hyprland # Import configs to hyprland/" + @echo "" + +# Prevent 'common', 'dwm' and 'hyprland' from being treated as file targets +common dwm hyprland: + @: + +# Validate DE was provided (for stow/restow/reset/unstow) +check-de: +ifeq ($(DE),) + @echo "Error: Desktop environment required (dwm or hyprland)." + @echo "" + @$(MAKE) --no-print-directory help + @exit 1 +endif + +# Validate DEST was provided (for import) +check-dest: +ifeq ($(DEST),) + @echo "Error: Destination required (common, dwm, or hyprland)." + @echo "" + @$(MAKE) --no-print-directory help + @exit 1 +endif + +# Stow - create symlinks +stow: check-de + @echo "Stowing common + $(DE)..." + @cd $(DOTFILES) && $(STOW) common + @cd $(DOTFILES) && $(STOW) $(DE) + @echo "Done." + +# Restow - refresh symlinks (unlink + relink) +restow: check-de + @echo "Restowing common + $(DE)..." + @cd $(DOTFILES) && $(STOW) --restow common + @cd $(DOTFILES) && $(STOW) --restow $(DE) + @echo "Done." + +# Reset - resolve conflicts by adopting then reverting to repo version +reset: check-de + @echo "Resetting common + $(DE)..." + @cd $(DOTFILES) && $(STOW) --adopt common + @cd $(DOTFILES) && $(STOW) --adopt $(DE) + @echo "Reverting adopted files to repo version..." + @git checkout -- dotfiles/ + @echo "Done. Symlinks created, repo unchanged." + +# Unstow - remove symlinks +unstow: check-de + @echo "Unstowing common + $(DE)..." + @cd $(DOTFILES) && $(STOW) --delete common + @cd $(DOTFILES) && $(STOW) --delete $(DE) + @echo "Done." + +# Import - select and import new app configs into repo +import: check-dest + @echo "Select directories to import (Tab to multi-select, Enter to confirm):" + @echo "" + @selections=$$({ \ + find $(HOME) -maxdepth 1 -mindepth 1 -name '.*' -type d 2>/dev/null | grep -v '\.cache\|\.local\|\.config' | sed 's|$(HOME)/||'; \ + find $(HOME)/.config -maxdepth 1 -mindepth 1 -type d 2>/dev/null | sed 's|$(HOME)/||'; \ + find $(HOME)/.local -maxdepth 2 -mindepth 1 -type d 2>/dev/null | sed 's|$(HOME)/||'; \ + } | sort -u | fzf --multi --prompt="Import to $(DEST)> " --header="Select configs to import into dotfiles/$(DEST)/"); \ + if [ -z "$$selections" ]; then \ + echo "No selections made."; \ + exit 0; \ + fi; \ + echo ""; \ + for dir in $$selections; do \ + src="$(HOME)/$$dir"; \ + dest="$(DOTFILES)/$(DEST)/$$dir"; \ + if [ -d "$$dest" ]; then \ + echo "Skipping $$dir (already exists in dotfiles/$(DEST))"; \ + else \ + echo "Importing $$dir to $(DEST)..."; \ + mkdir -p "$$(dirname $$dest)"; \ + mv "$$src" "$$dest"; \ + fi; \ + done; \ + echo ""; \ + echo "Restowing $(DEST)..."; \ + cd $(DOTFILES) && $(STOW) --restow $(DEST); \ + echo ""; \ + echo "Done. Don't forget to: git add -A && git commit" diff --git a/dotfiles/common/.bashrc.d/media.sh b/dotfiles/common/.bashrc.d/media.sh index 92fe2ce..a5d54f1 100644 --- a/dotfiles/common/.bashrc.d/media.sh +++ b/dotfiles/common/.bashrc.d/media.sh @@ -18,12 +18,12 @@ alias ttdl="tsp tidal-dl -l" # YouTube (yt-dlp) # ============================================================================= # Video - single -alias yt="yt-dlp --ignore-config --no-playlist --add-metadata -i -o '%(channel)s-%(title)s.%(ext)s'" -alias tyt="tsp yt-dlp --ignore-config --no-playlist --add-metadata -i -o '%(channel)s-%(title)s.%(ext)s'" +alias yt="yt-dlp --ignore-config --no-playlist --embed-metadata -i -o '%(channel)s-%(title)s.%(ext)s'" +alias tyt="tsp yt-dlp --ignore-config --no-playlist --embed-metadata -i -o '%(channel)s-%(title)s.%(ext)s'" # Video - playlist -alias ytp="yt-dlp --ignore-config --yes-playlist --add-metadata -i -o '%(channel)s-%(playlist_title)s-%(playlist_index)s-%(title)s.%(ext)s'" -alias tytp="tsp yt-dlp --ignore-config --yes-playlist --add-metadata -i -o '%(channel)s-%(playlist_title)s-%(playlist_index)s-%(title)s.%(ext)s'" +alias ytp="yt-dlp --ignore-config --yes-playlist --embed-metadata -i -o '%(channel)s-%(playlist_title)s-%(playlist_index)s-%(title)s.%(ext)s'" +alias tytp="tsp yt-dlp --ignore-config --yes-playlist --embed-metadata -i -o '%(channel)s-%(playlist_title)s-%(playlist_index)s-%(title)s.%(ext)s'" # Audio - single alias yta="yt-dlp --ignore-config --no-playlist -x -f bestaudio/best -o '%(artist)s-%(title)s.%(ext)s'" diff --git a/dotfiles/common/.config/sublime-merge/Local/License.sublime_license b/dotfiles/common/.config/sublime-merge/Local/License.sublime_license Binary files differdeleted file mode 100644 index 69d2755..0000000 --- a/dotfiles/common/.config/sublime-merge/Local/License.sublime_license +++ /dev/null diff --git a/dotfiles/common/.local/bin/dotfiles_pushall b/dotfiles/common/.local/bin/dotfiles_pushall deleted file mode 100755 index 3eef2c6..0000000 --- a/dotfiles/common/.local/bin/dotfiles_pushall +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash -# Craig Jennings <craigmartinjennings@gmail.com> -# tired of pushing to multiple locations with multiple commands -/usr/bin/git --git-dir="$HOME"/.dotfiles/ --work-tree="$HOME" push origin main && \ -/usr/bin/git --git-dir="$HOME"/.dotfiles/ --work-tree="$HOME" push source main && \ -/usr/bin/git --git-dir="$HOME"/.dotfiles/ --work-tree="$HOME" push github main diff --git a/dotfiles/common/.local/bin/lsbak b/dotfiles/common/.local/bin/lsbak deleted file mode 100755 index 7803135..0000000 --- a/dotfiles/common/.local/bin/lsbak +++ /dev/null @@ -1 +0,0 @@ -ls -laF /media/backup/renovo diff --git a/dotfiles/common/.local/bin/org-protocol-setup b/dotfiles/common/.local/bin/org-protocol-setup new file mode 100755 index 0000000..5ed86a7 --- /dev/null +++ b/dotfiles/common/.local/bin/org-protocol-setup @@ -0,0 +1,9 @@ +#!/bin/sh +# org-protocol-setup +# Craig Jennings <c@cjennings.net> +# Register org-protocol scheme handler for Emacs capture + +xdg-mime default org-protocol.desktop x-scheme-handler/org-protocol +update-desktop-database ~/.local/share/applications/ + +echo "org-protocol handler registered for Emacs" diff --git a/dotfiles/common/.local/bin/project b/dotfiles/common/.local/bin/project deleted file mode 100755 index cf5918d..0000000 --- a/dotfiles/common/.local/bin/project +++ /dev/null @@ -1,100 +0,0 @@ -#!/usr/bin/env bash - -echo "" - -# Check parameter -if [ "$#" -ne 1 ] || [ "$1" != "start" ] && [ "$1" != "end" ]; then - echo "This script must be called with either 'start' or 'end' as a parameter." - exit 1 -fi - -CHECK_MARK="\033[0;32m\xE2\x9C\x94\033[0m" -CLEAR_LINE="\033[1K" - -# Define directories to process -project_dirs="$HOME/projects" -code_dirs="$HOME/code" -sync_dirs="$HOME/sync" - - -# Git pull quietly unless there's an error -git_maybe_pull() { - git fetch --quiet - if ! git diff --quiet HEAD FETCH_HEAD; then - git pull --quiet - - # clear line and message - echo -ne "\033[1K" - echo -e "\\rpulled remote changes into $1" - fi -} - -# Git stash quietly unless there's an error -git_stash () { - git stash > /dev/null 2>&1 || \ - echo "git stash error in $1: $? " -} - -# Git stash pop quietly unless there's an error -git_stash_pop () { - git stash pop > /dev/null 2>&1 || \ - echo "git stash error in $1: $? " -} - -# Function to process a directory -process_directory() { - if [ -d "$1/.git" ]; then - # Check remote repository - cd "$1" - - # skip URLs with http/s URLS as they're directories cloned for reference only - # skip git directories with no remote repository associated as well - remote_url=$(git config --get remote.origin.url) - if [ -n "$remote_url" ]; then - # if remote URL is http or https or empty, skip the directory - if [ -z "$remote_url" ] || echo "$remote_url" | grep -E -q "^(http|https)://"; then - return - fi - - # clear line and update directory - echo -ne "$CLEAR_LINE" - echo -ne "\\rchecking: $1 " - - if [ "$2" = "start" ]; then - if [ -n "$(git status --porcelain)" ]; then - # notify user of uncommitted work - echo ""; echo ">>>> uncommitted work found in $1"; - - # git stash, pull latest files, then pop uncommitted work - git_stash "$1" - git_maybe_pull "$1" - git_stash_pop "$1" - else - # retrieve any latest changes - git_maybe_pull "$1" - fi - elif [ "$2" = "end" ]; then - # Check for uncommitted work - if [ -n "$(git status --porcelain)" ]; then - echo ""; echo ">>>> Uncommitted work found in $1. <<<<"; echo "" - fi - return # Skip pulling changes - fi - fi - fi -} - -# Process directories -for directory in "$project_dirs"/*; do - process_directory "$directory" "$1" -done -for directory in "$sync_dirs"/*; do - process_directory "$directory" "$1" -done -for directory in "$code_dirs"/*; do - process_directory "$directory" "$1" -done - -# clear line and message finished -echo -ne "\033[1K" -echo -ne "\\rfinished.\n" diff --git a/dotfiles/common/.local/bin/protonvpn b/dotfiles/common/.local/bin/protonvpn deleted file mode 100755 index 0f24068..0000000 --- a/dotfiles/common/.local/bin/protonvpn +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env bash - -flatpak run com.protonvpn.www
\ No newline at end of file diff --git a/dotfiles/common/.local/bin/resetmimetypes b/dotfiles/common/.local/bin/resetmimetypes deleted file mode 100755 index e2e8f06..0000000 --- a/dotfiles/common/.local/bin/resetmimetypes +++ /dev/null @@ -1,123 +0,0 @@ -#!/bin/bash -# resetmimetypes - Reset MIME type associations to preferred defaults -# Run after package updates that may have overwritten associations - -# Remove old databases to force regeneration -rm ~/.config/mimeapps.list 2>/dev/null -rm ~/.local/share/applications/mimeinfo.cache 2>/dev/null -rm ~/.local/share/applications/mimeinfo.list 2>/dev/null - -# Directories: Nautilus -xdg-mime default org.gnome.Nautilus.desktop inode/directory - -# Audio: mpv -xdg-mime default mpv.desktop audio/basic -xdg-mime default mpv.desktop audio/flac -xdg-mime default mpv.desktop audio/mp4 -xdg-mime default mpv.desktop audio/mpeg -xdg-mime default mpv.desktop audio/ogg -xdg-mime default mpv.desktop audio/opus -xdg-mime default mpv.desktop audio/vnd.rn-realaudio -xdg-mime default mpv.desktop audio/vnd.wav -xdg-mime default mpv.desktop audio/vorbis -xdg-mime default mpv.desktop audio/x-aiff -xdg-mime default mpv.desktop audio/x-mpegurl -xdg-mime default mpv.desktop audio/x-wav - -# Video: VLC -xdg-mime default vlc.desktop application/ogg -xdg-mime default vlc.desktop application/vnd.apple.mpegurl -xdg-mime default vlc.desktop video/avi -xdg-mime default vlc.desktop video/divx -xdg-mime default vlc.desktop video/flv -xdg-mime default vlc.desktop video/mp4 -xdg-mime default vlc.desktop video/mp4v-es -xdg-mime default vlc.desktop video/mpeg -xdg-mime default vlc.desktop video/ogg -xdg-mime default vlc.desktop video/quicktime -xdg-mime default vlc.desktop video/webm -xdg-mime default vlc.desktop video/x-avi -xdg-mime default vlc.desktop video/x-flv -xdg-mime default vlc.desktop video/x-m4v -xdg-mime default vlc.desktop video/x-matroska -xdg-mime default vlc.desktop video/x-mpeg -xdg-mime default vlc.desktop video/x-ms-wmv -xdg-mime default vlc.desktop video/x-msvideo -xdg-mime default vlc.desktop x-content/video-dvd - -# Images: feh -xdg-mime default feh.desktop image/bmp -xdg-mime default feh.desktop image/gif -xdg-mime default feh.desktop image/jpeg -xdg-mime default feh.desktop image/jpg -xdg-mime default feh.desktop image/png -xdg-mime default feh.desktop image/tiff -xdg-mime default feh.desktop image/webp -xdg-mime default feh.desktop image/x-bmp -xdg-mime default feh.desktop image/x-ico -xdg-mime default feh.desktop image/x-icon - -# Torrents: Transmission Remote -xdg-mime default io.github.TransmissionRemoteGtk.desktop application/x-bittorrent -xdg-mime default io.github.TransmissionRemoteGtk.desktop x-scheme-handler/magnet - -# Web: Chrome -xdg-mime default com.google.Chrome.desktop application/rdf+xml -xdg-mime default com.google.Chrome.desktop application/rss+xml -xdg-mime default com.google.Chrome.desktop application/xhtml+xml -xdg-mime default com.google.Chrome.desktop application/xml -xdg-mime default com.google.Chrome.desktop text/html -xdg-mime default com.google.Chrome.desktop text/xml -xdg-mime default com.google.Chrome.desktop x-scheme-handler/http -xdg-mime default com.google.Chrome.desktop x-scheme-handler/https - -# Ebooks (mobi): Calibre -xdg-mime default calibre-ebook-viewer.desktop application/x-mobi8-ebook -xdg-mime default calibre-ebook-viewer.desktop application/x-mobipocket-ebook - -# Text/Code: Emacsclient -xdg-mime default emacsclient.desktop application/x-shellscript -xdg-mime default emacsclient.desktop text/english -xdg-mime default emacsclient.desktop text/markdown -xdg-mime default emacsclient.desktop text/plain -xdg-mime default emacsclient.desktop text/x-c -xdg-mime default emacsclient.desktop text/x-c++ -xdg-mime default emacsclient.desktop text/x-c++hdr -xdg-mime default emacsclient.desktop text/x-c++src -xdg-mime default emacsclient.desktop text/x-chdr -xdg-mime default emacsclient.desktop text/x-csrc -xdg-mime default emacsclient.desktop text/x-java -xdg-mime default emacsclient.desktop text/x-makefile -xdg-mime default emacsclient.desktop text/x-pascal -xdg-mime default emacsclient.desktop text/x-tcl -xdg-mime default emacsclient.desktop text/x-tex - -# PDF/EPUB/Documents: Zathura -xdg-mime default org.pwmt.zathura.desktop application/epub+zip -xdg-mime default org.pwmt.zathura.desktop application/pdf -xdg-mime default org.pwmt.zathura.desktop application/postscript -xdg-mime default org.pwmt.zathura.desktop image/vnd.djvu -xdg-mime default org.pwmt.zathura.desktop image/vnd.djvu+multipage - -# Comics: Zathura -xdg-mime default org.pwmt.zathura.desktop application/vnd.comicbook+zip -xdg-mime default org.pwmt.zathura.desktop application/vnd.comicbook-rar - -# Office documents: LibreOffice Writer -xdg-mime default libreoffice-writer.desktop application/msword -xdg-mime default libreoffice-writer.desktop application/rtf -xdg-mime default libreoffice-writer.desktop application/vnd.ms-word -xdg-mime default libreoffice-writer.desktop application/vnd.oasis.opendocument.text -xdg-mime default libreoffice-writer.desktop application/vnd.openxmlformats-officedocument.wordprocessingml.document -xdg-mime default libreoffice-writer.desktop text/rtf - -# FTP: FileZilla -xdg-mime default filezilla.desktop x-scheme-handler/ftp - -# Org-Protocol: Emacsclient -xdg-mime default org-protocol.desktop x-scheme-handler/org-protocol - -# Regenerate database -update-desktop-database ~/.local/share/applications/ - -echo "MIME associations reset." diff --git a/dotfiles/common/.local/bin/steam b/dotfiles/common/.local/bin/steam deleted file mode 100755 index 3d30238..0000000 --- a/dotfiles/common/.local/bin/steam +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -flatpak run com.valvesoftware.Steam >> "$HOME/.local/var/logs/steam.log" 2>&1 diff --git a/dotfiles/common/.local/bin/sudo-update-grub b/dotfiles/common/.local/bin/sudo-update-grub deleted file mode 100755 index 5d67823..0000000 --- a/dotfiles/common/.local/bin/sudo-update-grub +++ /dev/null @@ -1 +0,0 @@ -sudo grub-mkconfig -o /boot/grub/grub.cfg diff --git a/dotfiles/common/.local/bin/sysupdate b/dotfiles/common/.local/bin/sysupdate deleted file mode 100755 index 357348d..0000000 --- a/dotfiles/common/.local/bin/sysupdate +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh -# Craig Jennings <c@cjennings.net> - - -yay -Syu --noconfirm
\ No newline at end of file diff --git a/dotfiles/common/.local/bin/transadd b/dotfiles/common/.local/bin/transadd deleted file mode 100755 index a598fad..0000000 --- a/dotfiles/common/.local/bin/transadd +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh - -# Mimeapp script for adding torrent to transmission-daemon, but will also start the daemon first if not running. - -# transmission-daemon sometimes fails to take remote requests in its first moments, hence the sleep. - -pidof transmission-daemon >/dev/null || (transmission-daemon && notify-send "Starting transmission daemon..." && sleep 3 && pkill -RTMIN+7 "${STATUSBAR:-dwmblocks}") - -transmission-remote -a "$@" && notify-send "🔽 Torrent added." diff --git a/dotfiles/common/.local/bin/update-backup-repositories b/dotfiles/common/.local/bin/update-backup-repositories deleted file mode 100755 index a91b438..0000000 --- a/dotfiles/common/.local/bin/update-backup-repositories +++ /dev/null @@ -1,56 +0,0 @@ -#!/bin/sh -# Craig Jennings <c@cjennings.net> -# updates or clones repositories for backup - -REPOS_HOME="/media/backup/repositories/" - -# Create REPOS_HOME dir if not exists -if [ ! -d "$REPOS_HOME" ]; then - mkdir -p "$REPOS_HOME" -fi - -# Make sure REPOS_HOME dir is writable -if [ ! -w "$REPOS_HOME" ]; then - echo "Directory $REPOS_HOME is not writable." - exit 1 -fi - -# Make sure git is available -if ! command -v git >/dev/null 2>&1; then - echo "Git command does not exist. Please install git." - exit 1 -fi - -cd "$REPOS_HOME" - -repos=" -git@cjennings.net:archsetup.git -git@cjennings.net:dmenu.git -git@cjennings.net:dotemacs.git -git@cjennings.net:dotfiles.git -git@cjennings.net:dwm.git -git@cjennings.net:pinentry-dmenu.git -git@cjennings.net:rsyncshot.git -git@cjennings.net:st.git -git@github.com:cjennings/emacs-wttrin.git -https://github.com/d12frosted/elpa-mirror.git -https://github.com/mirrors/emacs.git -" - -for repo in $repos; do - dir=$(echo "$repo" | awk -F'[/:]' '{gsub(/.git/, "", $NF); print $NF}') - # Note on the above awk command: - # awk -F'[/:]': uses awk with a regex field delimiter that matches both : and / - # which will work with both ssh and http style URLs. - # '{gsub(/.git/, "", $NF); print $NF}: This removes the ".git" postfixes from the last field ($NF) - # which leaves only the repo name. - - fullpath="$REPOS_HOME$dir" - if [ -d "$fullpath" ]; then - echo "Repository $dir exists at $fullpath, pulling..." - (cd "$fullpath" && git pull) - else - echo "Repository $dir doesn't exist at $fullpath, cloning..." - cd "$REPOS_HOME" && git clone --depth 1 "$repo" "$fullpath" - fi -done diff --git a/dotfiles/common/.local/bin/virtstart b/dotfiles/common/.local/bin/virtstart deleted file mode 100755 index f9a326f..0000000 --- a/dotfiles/common/.local/bin/virtstart +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash -# launch a virtual machine in fullscreen. -# the argument is the machine name - -export LIBVIRT_DEFAULT_URI="qemu:///system" - -/usr/bin/virsh start $1 -/usr/bin/virt-viewer -f -w -a $1 diff --git a/dotfiles/common/.local/bin/ytp b/dotfiles/common/.local/bin/ytp deleted file mode 100755 index c24d50f..0000000 --- a/dotfiles/common/.local/bin/ytp +++ /dev/null @@ -1 +0,0 @@ -yt-dlp --ignore-config --yes-playlist --embed-metadata -i -o '%(channel)s-%(playlist_title)s-%(playlist_index)s-%(title)s.%(ext)s' $1 $2 $3 $4 diff --git a/dotfiles/common/.zshrc.d/media.sh b/dotfiles/common/.zshrc.d/media.sh index 92fe2ce..a5d54f1 100644 --- a/dotfiles/common/.zshrc.d/media.sh +++ b/dotfiles/common/.zshrc.d/media.sh @@ -18,12 +18,12 @@ alias ttdl="tsp tidal-dl -l" # YouTube (yt-dlp) # ============================================================================= # Video - single -alias yt="yt-dlp --ignore-config --no-playlist --add-metadata -i -o '%(channel)s-%(title)s.%(ext)s'" -alias tyt="tsp yt-dlp --ignore-config --no-playlist --add-metadata -i -o '%(channel)s-%(title)s.%(ext)s'" +alias yt="yt-dlp --ignore-config --no-playlist --embed-metadata -i -o '%(channel)s-%(title)s.%(ext)s'" +alias tyt="tsp yt-dlp --ignore-config --no-playlist --embed-metadata -i -o '%(channel)s-%(title)s.%(ext)s'" # Video - playlist -alias ytp="yt-dlp --ignore-config --yes-playlist --add-metadata -i -o '%(channel)s-%(playlist_title)s-%(playlist_index)s-%(title)s.%(ext)s'" -alias tytp="tsp yt-dlp --ignore-config --yes-playlist --add-metadata -i -o '%(channel)s-%(playlist_title)s-%(playlist_index)s-%(title)s.%(ext)s'" +alias ytp="yt-dlp --ignore-config --yes-playlist --embed-metadata -i -o '%(channel)s-%(playlist_title)s-%(playlist_index)s-%(title)s.%(ext)s'" +alias tytp="tsp yt-dlp --ignore-config --yes-playlist --embed-metadata -i -o '%(channel)s-%(playlist_title)s-%(playlist_index)s-%(title)s.%(ext)s'" # Audio - single alias yta="yt-dlp --ignore-config --no-playlist -x -f bestaudio/best -o '%(artist)s-%(title)s.%(ext)s'" diff --git a/dotfiles/common/.gnupg/gpg-agent.conf b/dotfiles/dwm/.gnupg/gpg-agent.conf index 6448665..6448665 100644 --- a/dotfiles/common/.gnupg/gpg-agent.conf +++ b/dotfiles/dwm/.gnupg/gpg-agent.conf diff --git a/dotfiles/common/.gnupg/pinentry-dmenu.conf b/dotfiles/dwm/.gnupg/pinentry-dmenu.conf index ccd4d55..ccd4d55 100644 --- a/dotfiles/common/.gnupg/pinentry-dmenu.conf +++ b/dotfiles/dwm/.gnupg/pinentry-dmenu.conf diff --git a/dotfiles/dwm/.local/bin/audioselect b/dotfiles/dwm/.local/bin/audioselect deleted file mode 100755 index 6c40d47..0000000 --- a/dotfiles/dwm/.local/bin/audioselect +++ /dev/null @@ -1,68 +0,0 @@ -#!/bin/sh -# Craig Jennings -# convenience script to switch audio devices -# need bluez and bluez-utils - -# DEVICE MAC ADDRESSES -marshall_earbuds_device="00:25:D1:1B:39:CA" -marshall_headset_device="9C:0D:AC:05:1E:C9" - -# SINKS (Audio Out) -marshall_headset_sink="bluez_output.9C_0D_AC_05_1E_C9.a2dp-sink" -marshall_earbuds_sink="bluez_output.00_25_D1_1B_39_CA.a2dp_sink" -builtin_sink="alsa_output.pci-0000_00_1f.3.analog-stereo" -jabra_510_sink="alsa_output.usb-0b0e_Jabra_SPEAK_510_USB_1C48F9C067D5020A00-00.analog-stereo" -steelseries_sink="alsa_output.usb-SteelSeries_SteelSeries_Arctis_7-00.stereo-game" -emberton_sink="bluez_sink.04_21_44_89_D0_BE.a2dp_sink" - -# SOURCES (Audio In) -jabra_510_source="alsa_input.usb-0b0e_Jabra_SPEAK_510_USB_1C48F9C067D5020A00-00.mono-fallback" -builtin_source="alsa_input.pci-0000_00_1f.3.analog-stereo" -steelseries_source="alsa_input.usb-SteelSeries_SteelSeries_Arctis_7-00.mono-chat" - -CHOICES="Cancel\nToggle Mute Speaker\nToggle Mute Mic\nMarshall Headset & Jabra Mic\nMarshall Headset & Default Mic\nMarshall Earbuds & Jabra Mic\nJabra Speaker & Mic\nBuilt-In Audio" - -CHOSEN=$(echo -e "$CHOICES" | dmenu -l 10) - -case "$CHOSEN" in -"Toggle Mute Speaker") - pactl set-sink-mute 0 toggle - ;; -"Toggle Mute Mic") - pactl set-source-mute 0 toggle - ;; -"Marshall Headset & Jabra Mic") - bluetooth power on - bluetoothctl connect $marshall_headset_device - pactl set-default-sink $marshall_headset_sink - pactl set-default-source $jabra_510_source - ;; -"Marshall Headset & Default Mic") - bluetooth power on - bluetoothctl connect $marshall_headset_device - pactl set-default-sink $marshall_headset_sink - pactl set-default-source $builtin_source - ;; -"Marshall Earbuds & Jabra Mic") - bluetooth power on - bluetoothctl connect $marshall_earbuds_device - pactl set-default-sink $marshall_earbuds_sink - pactl set-default-source $jabra_510_source - ;; -"Built-In Audio") - pactl set-default-sink $builtin_audio_sink - pactl set-default-source $builtin_audio_source - ;; -"Jabra Speaker & Mic") - pactl set-default-sink $jabra_510_sink - pactl set-default-source $jabra_510_source - ;; -"Emberton & Built-In") - pactl set-default-sink $emberton_sink - pactl set-default-source $builtin_audio_source - ;; -"Steelseries Headset") - pactl set-default-sink $steelseries_sink - pactl set-default-source $steelseries_source - ;; -esac diff --git a/dotfiles/dwm/.local/bin/battery_monitor b/dotfiles/dwm/.local/bin/battery_monitor deleted file mode 100755 index dc8d5ea..0000000 --- a/dotfiles/dwm/.local/bin/battery_monitor +++ /dev/null @@ -1,52 +0,0 @@ -#!/usr/bin/env bash -# battery_monitor -# Intended to be run via .xinitrc -# - Exit automatically if no battery (desktop) -# - When below 15%, warn user of low battery -# - When below 10%, suspend within 10 seconds if not charging -# -# Craig Jennings <c@cjennings.net> - -# check if acpi is installed -if ! command -v acpi &> /dev/null; then - echo "acpi is not installed. Cannot continue. Exiting...." - exit 1 -fi - -# exit if a battery exists -if [ ! -d "/sys/class/power_supply/BAT0" ] && [ ! -d "/sys/class/power_supply/BAT1" ]; then - echo "Acpi is installed but no battery detected. Assuming this is a desktop and exiting...." - exit 1 -fi - -while true; do - # Get the current battery percentage using acpi - battery_percentage=$(acpi -b | awk -F ', ' '{print $2}' | tr -d '%') - # battery_percentage=$(acpi -b | awk -F ', ' '{print $2}' | sed 's/%//') - - # When below 10%, suspend within 10 seconds if not charging - if [ "$battery_percentage" -lt 11 ] && ! acpi -a | grep -q "on-line" ; then - # Send a notification of sleeping in 10 seconds - notify-send -u critical "Critical Battery" "Battery is at $battery_percentage%. System entering sleep in 30 seconds." - - # sleep for 10 seconds, then abort if charging - sleep 30 - - # Check if the system is charging (AC adapter connected) - if acpi -a | grep -q "on-line"; then - notify-send "Charging" "The system is now charging. No action taken." - else - notify-send -u critical "Critical Battery" "Putting the system to sleep." - sudo systemctl suspend - fi - fi - - # When below 15%, warn user - if [ "$battery_percentage" -lt 15 ] && ! acpi -a | grep -q "on-line" ; then - # Send a notification using notify-send and dunst - notify-send -u critical "Low Battery" "Battery is at $battery_percentage%. System will automatically sleep at 10%." - fi - - # Sleep for 5 minutes before checking again - sleep 300 -done diff --git a/dotfiles/dwm/.local/bin/bookfind b/dotfiles/dwm/.local/bin/bookfind deleted file mode 100755 index c5cc1bc..0000000 --- a/dotfiles/dwm/.local/bin/bookfind +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh -# allows user to open a calibre book using dmenu - -find ~/Library/ -type f \( -iname \*.pdf -o -iname \*.epub \) | dmenu -i -l 20 -p "Choose an ebook:" - diff --git a/dotfiles/dwm/.local/bin/displayselect b/dotfiles/dwm/.local/bin/displayselect deleted file mode 100755 index f9e8062..0000000 --- a/dotfiles/dwm/.local/bin/displayselect +++ /dev/null @@ -1,83 +0,0 @@ -#!/bin/sh - -# A UI for detecting and selecting all displays. Probes xrandr for connected -# displays and lets user select one to use. User may also select "manual -# selection" which opens arandr. - -twoscreen() { # If multi-monitor is selected and there are two screens. - - mirror=$(printf "no\\nyes" | dmenu -i -p "Mirror displays?") - # Mirror displays using native resolution of external display and a scaled - # version for the internal display - if [ "$mirror" = "yes" ]; then - external=$(echo "$screens" | dmenu -i -p "Optimize resolution for:") - internal=$(echo "$screens" | grep -v "$external") - - res_external=$(xrandr --query | sed -n "/^$external/,/\+/p" | \ - tail -n 1 | awk '{print $1}') - res_internal=$(xrandr --query | sed -n "/^$internal/,/\+/p" | \ - tail -n 1 | awk '{print $1}') - - res_ext_x=$(echo "$res_external" | sed 's/x.*//') - res_ext_y=$(echo "$res_external" | sed 's/.*x//') - res_int_x=$(echo "$res_internal" | sed 's/x.*//') - res_int_y=$(echo "$res_internal" | sed 's/.*x//') - - scale_x=$(echo "$res_ext_x / $res_int_x" | bc -l) - scale_y=$(echo "$res_ext_y / $res_int_y" | bc -l) - - xrandr --output "$external" --auto --scale 1.0x1.0 \ - --output "$internal" --auto --same-as "$external" \ - --scale "$scale_x"x"$scale_y" - else - - primary=$(echo "$screens" | dmenu -i -p "Select primary display:") - secondary=$(echo "$screens" | grep -v "$primary") - direction=$(printf "left\\nright" | dmenu -i -p "What side of $primary should $secondary be on?") - xrandr --output "$primary" --auto --scale 1.0x1.0 --output "$secondary" --"$direction"-of "$primary" --auto --scale 1.0x1.0 - fi - } - -morescreen() { # If multi-monitor is selected and there are more than two screens. - primary=$(echo "$screens" | dmenu -i -p "Select primary display:") - secondary=$(echo "$screens" | grep -v "$primary" | dmenu -i -p "Select secondary display:") - direction=$(printf "left\\nright" | dmenu -i -p "What side of $primary should $secondary be on?") - tertiary=$(echo "$screens" | grep -v "$primary" | grep -v "$secondary" | dmenu -i -p "Select third display:") - xrandr --output "$primary" --auto --output "$secondary" --"$direction"-of "$primary" --auto --output "$tertiary" --"$(printf "left\\nright" | grep -v "$direction")"-of "$primary" --auto - } - -multimon() { # Multi-monitor handler. - case "$(echo "$screens" | wc -l)" in - 2) twoscreen ;; - *) morescreen ;; - esac ;} - -onescreen() { # If only one output available or chosen. - xrandr --output "$1" --auto --scale 1.0x1.0 $(echo "$allposs" | grep -v "\b$1" | awk '{print "--output", $1, "--off"}' | paste -sd ' ' -) - } - -postrun() { # Stuff to run to clean up. - 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 - } - -# Get all possible displays -allposs=$(xrandr -q | grep "connected") - -# Get all connected screens. -screens=$(echo "$allposs" | awk '/ connected/ {print $1}') - -# If there's only one screen -[ "$(echo "$screens" | wc -l)" -lt 2 ] && - { onescreen "$screens"; postrun; notify-send "💻 Only one screen detected." "Using it in its optimal settings..."; exit ;} - -# Get user choice including multi-monitor and manual selection: -chosen=$(printf "%s\\nmulti-monitor\\nmanual selection" "$screens" | dmenu -i -p "Select display arangement:") && -case "$chosen" in - "manual selection") arandr ; exit ;; - "multi-monitor") multimon ;; - *) onescreen "$chosen" ;; -esac - -postrun diff --git a/dotfiles/dwm/.local/bin/dmenuhandler b/dotfiles/dwm/.local/bin/dmenuhandler deleted file mode 100755 index 1c48f3a..0000000 --- a/dotfiles/dwm/.local/bin/dmenuhandler +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/sh - -# Feed this script a link and it will give dmenu -# some choice programs to use to open it. -feed="${1:-$(printf "%s" | dmenu -p 'Paste URL or file path')}" - -case "$(printf "Copy URL\\nsxiv\\nsetbg\\nPDF\\nbrowser\\nlynx\\nvim\\nmpv\\nmpv loop\\nmpv float\\nqueue download\\nqueue yt-dlp\\nqueue yt-dlp audio" | dmenu -i -p "Open it with?")" in - "Copy URL") echo "$feed" | xclip -selection clipboard ;; - mpv) setsid -f mpv -quiet "$feed" >/dev/null 2>&1 ;; - "mpv loop") setsid -f mpv -quiet --loop "$feed" >/dev/null 2>&1 ;; - "mpv float") setsid -f "$TERMINAL" -e mpv --geometry=+0-0 --autofit=30% --title="mpvfloat" "$feed" >/dev/null 2>&1 ;; - "queue yt-dlp") qndl "$feed" >/dev/null 2>&1 ;; - "queue yt-dlp audio") qndl "$feed" 'yt-dlp --embed-metadata -icx -f bestaudio/best' >/dev/null 2>&1 ;; - "queue download") qndl "$feed" 'curl -LO' >/dev/null 2>&1 ;; - PDF) curl -sL "$feed" > "/tmp/$(echo "$feed" | sed "s|.*/||;s/%20/ /g")" && zathura "/tmp/$(echo "$feed" | sed "s|.*/||;s/%20/ /g")" >/dev/null 2>&1 ;; - sxiv) curl -sL "$feed" > "/tmp/$(echo "$feed" | sed "s|.*/||;s/%20/ /g")" && sxiv -a "/tmp/$(echo "$feed" | sed "s|.*/||;s/%20/ /g")" >/dev/null 2>&1 ;; - vim) curl -sL "$feed" > "/tmp/$(echo "$feed" | sed "s|.*/||;s/%20/ /g")" && setsid -f "$TERMINAL" -e "$EDITOR" "/tmp/$(echo "$feed" | sed "s|.*/||;s/%20/ /g")" >/dev/null 2>&1 ;; - setbg) curl -L "$feed" > $XDG_CACHE_HOME/pic ; xwallpaper --zoom $XDG_CACHE_HOME/pic >/dev/null 2>&1 ;; - browser) setsid -f "$BROWSER" "$feed" >/dev/null 2>&1 ;; - lynx) lynx "$feed" >/dev/null 2>&1 ;; -esac diff --git a/dotfiles/dwm/.local/bin/dmenumount b/dotfiles/dwm/.local/bin/dmenumount deleted file mode 100755 index 3cb1f81..0000000 --- a/dotfiles/dwm/.local/bin/dmenumount +++ /dev/null @@ -1,67 +0,0 @@ -#!/bin/sh - -# Gives a dmenu prompt to mount unmounted drives and Android phones. If -# they're in /etc/fstab, they'll be mounted automatically. Otherwise, you'll -# be prompted to give a mountpoint from already existsing directories. If you -# input a novel directory, it will prompt you to create that directory. - -getmount() { \ - [ -z "$chosen" ] && exit 1 - # shellcheck disable=SC2086 - mp="$(find $1 2>/dev/null | dmenu -i -p "Type in mount point.")" || exit 1 - test -z "$mp" && exit 1 - if [ ! -d "$mp" ]; then - mkdiryn=$(printf "No\\nYes" | dmenu -i -p "$mp does not exist. Create it?") || exit 1 - [ "$mkdiryn" = "Yes" ] && (mkdir -p "$mp" || sudo -A mkdir -p "$mp") - fi - } - -mountusb() { \ - chosen="$(echo "$usbdrives" | dmenu -i -p "Mount which drive?")" || exit 1 - chosen="$(echo "$chosen" | awk '{print $1}')" - sudo -A mount "$chosen" 2>/dev/null && notify-send "💻 USB mounting" "$chosen mounted." && exit 0 - alreadymounted=$(lsblk -nrpo "name,type,mountpoint" | awk '$3!~/\/boot|\/home$|SWAP/&&length($3)>1{printf "-not ( -path *%s -prune ) ",$3}') - getmount "/mnt /media /mount /home -maxdepth 5 -type d $alreadymounted" - partitiontype="$(lsblk -no "fstype" "$chosen")" - case "$partitiontype" in - "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)";; - *) sudo -A mount "$chosen" "$mp"; user="$(whoami)"; ug="$(groups | awk '{print $1}')"; sudo -A chown "$user":"$ug" "$mp";; - esac - notify-send "💻 USB mounting" "$chosen mounted to $mp." - } - -mountandroid() { \ - chosen="$(echo "$anddrives" | dmenu -i -p "Which Android device?")" || exit 1 - chosen="$(echo "$chosen" | cut -d : -f 1)" - 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 - simple-mtpfs --device "$chosen" "$mp" - notify-send "🤖 Android Mounting" "Android device mounted to $mp." - } - -asktype() { \ - choice="$(printf "USB\\nAndroid" | dmenu -i -p "Mount a USB drive or Android device?")" || exit 1 - case $choice in - USB) mountusb ;; - Android) mountandroid ;; - esac - } - -anddrives=$(simple-mtpfs -l 2>/dev/null) -usbdrives="$(lsblk -rpo "name,type,size,mountpoint" | grep 'part\|rom' | awk '$4==""{printf "%s (%s)\n",$1,$3}')" - -if [ -z "$usbdrives" ]; then - [ -z "$anddrives" ] && echo "No USB drive or Android device detected" && exit - echo "Android device(s) detected." - mountandroid -else - if [ -z "$anddrives" ]; then - echo "USB drive(s) detected." - mountusb - else - echo "Mountable USB drive(s) and Android device(s) detected." - asktype - fi -fi diff --git a/dotfiles/dwm/.local/bin/dmenumountcifs b/dotfiles/dwm/.local/bin/dmenumountcifs deleted file mode 100755 index 46c2b57..0000000 --- a/dotfiles/dwm/.local/bin/dmenumountcifs +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/sh -# Gives a dmenu prompt to mount unmounted local NAS shares for read/write. -# Requirements - "%wheel ALL=(ALL) NOPASSWD: ALL" -# -# Browse for mDNS/DNS-SD services using the Avahi daemon... -srvname=$(avahi-browse _smb._tcp -t | awk '{print $4}' | dmenu -i -p "Which NAS?") || exit 1 -notify-send "Searching for network shares..." "Please wait..." -# Choose share disk... -share=$(smbclient -L "$srvname" -N | grep Disk | awk '{print $1}' | dmenu -i -p "Mount which share?") || exit 1 -# Format URL... -share2mnt=//"$srvname".local/"$share" - -sharemount() { - mounted=$(mount -v | grep "$share2mnt") || ([ ! -d /mnt/"$share" ] && sudo mkdir /mnt/"$share") - [ -z "$mounted" ] && sudo mount -t cifs "$share2mnt" -o user=nobody,password="",noperm /mnt/"$share" && notify-send "Netshare $share mounted" && exit 0 - notify-send "Netshare $share already mounted"; exit 1 -} - -sharemount diff --git a/dotfiles/dwm/.local/bin/dmenurecord b/dotfiles/dwm/.local/bin/dmenurecord deleted file mode 100755 index b83a7c5..0000000 --- a/dotfiles/dwm/.local/bin/dmenurecord +++ /dev/null @@ -1,123 +0,0 @@ -#!/bin/sh - -# Usage: -# `$0`: Ask for recording type via dmenu -# `$0 screencast`: Record both audio and screen -# `$0 video`: Record only screen -# `$0 audio`: Record only audio -# `$0 kill`: Kill existing recording -# -# If there is already a running instance, user will be prompted to end it. - -updateicon() { \ - echo "$1" > /tmp/recordingicon - pkill -RTMIN+9 "${STATUSBAR:-dwmblocks}" - } - -killrecording() { - recpid="$(cat /tmp/recordingpid)" - # kill with SIGTERM, allowing finishing touches. - kill -15 "$recpid" - rm -f /tmp/recordingpid - updateicon "" - pkill -RTMIN+9 "${STATUSBAR:-dwmblocks}" - # even after SIGTERM, ffmpeg may still run, so SIGKILL it. - sleep 3 - kill -9 "$recpid" - exit - } - -screencast() { \ - ffmpeg -y \ - -f x11grab \ - -framerate 60 \ - -s "$(xdpyinfo | awk '/dimensions/ {print $2;}')" \ - -i "$DISPLAY" \ - -f alsa -i default \ - -r 30 \ - -c:v h264 -crf 0 -preset ultrafast -c:a aac \ - "$HOME/screencast-$(date '+%y%m%d-%H%M-%S').mp4" & - echo $! > /tmp/recordingpid - updateicon "⏺️🎙️" - } - -video() { ffmpeg \ - -f x11grab \ - -s "$(xdpyinfo | awk '/dimensions/ {print $2;}')" \ - -i "$DISPLAY" \ - -c:v libx264 -qp 0 -r 30 \ - "$HOME/video-$(date '+%y%m%d-%H%M-%S').mkv" & - echo $! > /tmp/recordingpid - updateicon "⏺️" - } - -webcamhidef() { ffmpeg \ - -f v4l2 \ - -i /dev/video0 \ - -video_size 1920x1080 \ - "$HOME/webcam-$(date '+%y%m%d-%H%M-%S').mkv" & - echo $! > /tmp/recordingpid - updateicon "🎥" - } - -webcam() { ffmpeg \ - -f v4l2 \ - -i /dev/video0 \ - -video_size 640x480 \ - "$HOME/webcam-$(date '+%y%m%d-%H%M-%S').mkv" & - echo $! > /tmp/recordingpid - updateicon "🎥" - } - - -audio() { \ - ffmpeg \ - -f alsa -i default \ - -c:a flac \ - "$HOME/audio-$(date '+%y%m%d-%H%M-%S').flac" & - echo $! > /tmp/recordingpid - updateicon "🎙️" - } - -askrecording() { \ - choice=$(printf "screencast\\nvideo\\nvideo selected\\naudio\\nwebcam\\nwebcam (hi-def)" | dmenu -i -p "Select recording style:") - case "$choice" in - screencast) screencast;; - audio) audio;; - video) video;; - *selected) videoselected;; - webcam) webcam;; - "webcam (hi-def)") webcamhidef;; - esac - } - -asktoend() { \ - response=$(printf "No\\nYes" | dmenu -i -p "Recording still active. End recording?") && - [ "$response" = "Yes" ] && killrecording - } - -videoselected() -{ - slop -f "%x %y %w %h" > /tmp/slop - read -r X Y W H < /tmp/slop - rm /tmp/slop - - ffmpeg \ - -f x11grab \ - -framerate 60 \ - -video_size "$W"x"$H" \ - -i :0.0+"$X,$Y" \ - -c:v libx264 -qp 0 -r 30 \ - "$HOME/box-$(date '+%y%m%d-%H%M-%S').mkv" & - echo $! > /tmp/recordingpid - updateicon "⏺️" -} - -case "$1" in - screencast) screencast;; - audio) audio;; - video) video;; - *selected) videoselected;; - kill) killrecording;; - *) ([ -f /tmp/recordingpid ] && asktoend && exit) || askrecording;; -esac diff --git a/dotfiles/dwm/.local/bin/dmenuumount b/dotfiles/dwm/.local/bin/dmenuumount deleted file mode 100755 index 946d12c..0000000 --- a/dotfiles/dwm/.local/bin/dmenuumount +++ /dev/null @@ -1,44 +0,0 @@ -#!/bin/sh - -# A dmenu prompt to unmount drives. -# Provides you with mounted partitions, select one to unmount. -# Drives mounted at /, /boot and /home will not be options to unmount. - -unmountusb() { - [ -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="$(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() { \ - choice="$(printf "USB\\nAndroid" | dmenu -i -p "Unmount a USB drive or Android device?")" || exit 1 - case "$choice" in - USB) unmountusb ;; - Android) unmountandroid ;; - esac - } - -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}') - -if ! grep simple-mtpfs /etc/mtab; then - [ -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 diff --git a/dotfiles/dwm/.local/bin/exitmenu b/dotfiles/dwm/.local/bin/exitmenu deleted file mode 100755 index 54028a7..0000000 --- a/dotfiles/dwm/.local/bin/exitmenu +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh - -CHOICES="Shutdown\nReboot\nLock\nHibernate\nSuspend\nToggle Airplane Mode\nToggle Powersave Mode" -CHOSEN=$(echo -e "$CHOICES" | dmenu -i) - -case $CHOSEN in - "Shutdown") shutdown now ;; - "Reboot") reboot ;; - "Lock") xscreensaver-command --lock ;; - "Hiberbate") systemctl hibernate ;; - "Suspend") systemctl suspend ;; - "Toggle Airplane Mode") airplanemodetoggle ;; - "Toggle Powersave Mode") lowpowertoggle && notify-send "Battery Status" "$(acpi -b)" ;; -esac - diff --git a/dotfiles/dwm/.local/bin/monitor b/dotfiles/dwm/.local/bin/monitor deleted file mode 100755 index 30f04b6..0000000 --- a/dotfiles/dwm/.local/bin/monitor +++ /dev/null @@ -1,50 +0,0 @@ -#!/bin/sh -# Craig Jennings -# convenience script to switch monitors - -# this script assumes there are at most two monitors attached and we want to switch between then -CHOICES="Laptop\nLaptop-Scaled\nHome-Display\nExternal-Auto\nExternal-Scaled\nVirtualbox" - -# laptops always have a monitor connected when running the script. -LAPTOP=$(xrandr -q | grep primary | awk '$2 == "connected" {print $1}') -echo "primary monitor is $LAPTOP" - -# an external monitor will always be a connected monitor that isn't primary -EXTERNAL=$(xrandr -q | grep -v primary | awk '$2 == "connected" {print $1}') - -# start by resetting -xrandr -s 0 - -# disable if called automatically, otherwise you'll want the menu -# if there's only one monitor connected, setup laptop monitor -# if [ -z "$EXTERNAL" ]; then -# xrandr -s 0 -# xrandr --output "$LAPTOP" --auto --dpi 144 --scale 0.6 -# exit 0 -# fi - -CHOSEN=$(echo -e "$CHOICES" | dmenu -i) - -case "$CHOSEN" in -"Laptop") - xrandr --output "$LAPTOP" --auto --output "$EXTERNAL" --off - ;; -"Laptop-Scaled") - xrandr --output "$LAPTOP" --auto --dpi 144 --scale 0.6 --output "$EXTERNAL" --off - ;; -"External") - xrandr --output "$EXTERNAL" --auto --dpi 96 --mode 3440x1440 --scale 1.0 --output "$LAPTOP" --off - ;; -"External-Auto") - xrandr --output "$EXTERNAL" --auto --output "$LAPTOP" --off - ;; -"External-Scaled") - xrandr --output "$EXTERNAL" --auto --scale 0.6 --output "$LAPTOP" --off - ;; -"Virtualbox") - xrandr --output "$LAPTOP" --auto --mode 1920x1080 - ;; -esac - -# restore the wallpaper after resolution change -[ -f ~/.fehbg ] && ~/.fehbg diff --git a/dotfiles/dwm/.local/bin/prompt b/dotfiles/dwm/.local/bin/prompt deleted file mode 100755 index 666434f..0000000 --- a/dotfiles/dwm/.local/bin/prompt +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh - -# A dmenu binary prompt script. -# Gives a dmenu prompt labeled with $1 to perform command $2. -# For example: -# `./prompt "Do you want to shutdown?" "shutdown -h now"` - -[ "$(printf "No\\nYes" | dmenu -i -p "$1" -nb darkred -sb red -sf white -nf gray )" = "Yes" ] && $2 diff --git a/dotfiles/dwm/.local/bin/recordnow b/dotfiles/dwm/.local/bin/recordnow deleted file mode 100755 index 4e2d04a..0000000 --- a/dotfiles/dwm/.local/bin/recordnow +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env sh -# Craig Jennings <c@cjennings.net> - -# Start a screen recording using ffmpeg to capture the entire -# screen along with all audio and the microphone. - -# Make sure that ffmpeg is in the path and the destination directory -# exists. - -LOCATION="$HOME/videos/recordings" -NAME=$(date +'%Y-%m-%d-%H-%M-%S') -echo $NAME - -# create the directory if it doesn't exist -if [ ! -d "$LOCATION" ]; then - mkdir -p "$LOCATION" -fi - -# error out if ffmpeg isn't installed -if ! command -v ffmpeg &> /dev/null -then - echo "ERROR: ffmpeg couldn't be found. Please ensure it's installed and added to your PATH." - exit -fi - -ffmpeg -framerate 30 -f x11grab -i :0.0+ -f pulse -i alsa_input.pci-0000_00_1b.0.analog-stereo -ac 1 -f pulse -i alsa_output.pci-0000_00_1b.0.analog-stereo.monitor -ac 2 "$LOCATION/$NAME".mkv diff --git a/dotfiles/dwm/.local/bin/remaps b/dotfiles/dwm/.local/bin/remaps deleted file mode 100755 index c95ac84..0000000 --- a/dotfiles/dwm/.local/bin/remaps +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh - -# This script is called on startup to remap keys. -# Decrease key repeat delay to 300ms and increase key repeat rate to 50 per second. -xset r rate 300 50 -# Map the caps lock key to super, and map the menu key to right super. -setxkbmap -option caps:super,altwin:menu_win -# When caps lock is pressed only once, treat it as 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. -xset -q | grep "Caps Lock:\s*on" && xdotool key Caps_Lock diff --git a/dotfiles/dwm/.local/bin/samedir b/dotfiles/dwm/.local/bin/samedir deleted file mode 100755 index 371ec64..0000000 --- a/dotfiles/dwm/.local/bin/samedir +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh - -# 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") -PID="$(pstree -lpA "$PID")" -PID="${PID##*"${SHELL##*/}"(}" -PID="${PID%%)*}" -cd "$(readlink /proc/"$PID"/cwd)" || return 1 -"$TERMINAL" diff --git a/dotfiles/dwm/.local/bin/setbg b/dotfiles/dwm/.local/bin/setbg deleted file mode 100755 index b72dc7d..0000000 --- a/dotfiles/dwm/.local/bin/setbg +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/sh - -# This script does the following: -# Run by itself, set the wallpaper (at X start). -# If given a file, set that as the new wallpaper. -# If given a directory, choose random file in it. -# If wal is installed, also generates a colorscheme. - -# Location of link to wallpaper link. -bgloc="${XDG_DATA_HOME:-$HOME/.local/share}/bg" - -# Configuration files of applications that have their themes changed by pywal. -dunstconf="${XDG_CONFIG_HOME:-$HOME/.config}/dunst/dunstrc" -zathuraconf="${XDG_CONFIG_HOME:-$HOME/.config}/zathura/zathurarc" - -trueloc="$(readlink -f "$1")" && -case "$(file --mime-type -b "$trueloc")" in - image/* ) ln -sf "$(readlink -f "$1")" "$bgloc" && notify-send -i "$bgloc" "Changing wallpaper..." ;; - inode/directory ) ln -sf "$(find "$trueloc" -iregex '.*.\(jpg\|jpeg\|png\|gif\)' -type f | shuf -n 1)" "$bgloc" && notify-send -i "$bgloc" "Random Wallpaper chosen." ;; - *) notify-send "🖼️ Error" "Not a valid image or directory." ; exit 1;; -esac - -# If pywal is installed, use it. -if command -v wal >/dev/null 2>&1 ; then - wal -n -i "$(readlink -f $bgloc)" -o "${XDG_CONFIG_HOME:-$HOME/.config}/wal/postrun" >/dev/null 2>&1 -# If pywal is removed, return config files to normal. -else - [ -f "$dunstconf.bak" ] && unlink "$dunstconf" && mv "$dunstconf.bak" "$dunstconf" - [ -f "$zathuraconf.bak" ] && unlink "$zathuraconf" && mv "$zathuraconf.bak" "$zathuraconf" -fi - -xwallpaper --zoom "$bgloc" -# If running, dwm hit the key to refresh the color scheme. -pidof dwm >/dev/null && xdotool key super+F5 diff --git a/dotfiles/dwm/.local/bin/statusbar/sb-battery b/dotfiles/dwm/.local/bin/statusbar/sb-battery deleted file mode 100755 index 93cbe08..0000000 --- a/dotfiles/dwm/.local/bin/statusbar/sb-battery +++ /dev/null @@ -1,37 +0,0 @@ -#!/bin/sh - -# Prints all batteries, their percentage remaining and an emoji corresponding -# to charge status (🔌 for plugged up, 🔋 for discharging on battery, etc.). - -case $BLOCK_BUTTON in - 3) notify-send "🔋 Battery module" "🔋: discharging -🛑: not charging -♻: stagnant charge -🔌: charging -⚡: charged -❗: battery very low! -- Scroll to change adjust xbacklight." ;; - 4) xbacklight -inc 10 ;; - 5) xbacklight -dec 10 ;; - 6) "$TERMINAL" -e "$EDITOR" "$0" ;; -esac - -# Loop through all attached batteries and format the info -for battery in /sys/class/power_supply/BAT?*; do - # If non-first battery, print a space separator. - [ -n "${capacity+x}" ] && printf " " - # Sets up the status and capacity - case "$(cat "$battery/status" 2>&1)" in - "Full") status="⚡" ;; - "Discharging") status="🔋" ;; - "Charging") status="🔌" ;; - "Not charging") status="🛑" ;; - "Unknown") status="♻️" ;; - *) exit 1 ;; - esac - capacity="$(cat "$battery/capacity" 2>&1)" - # Will make a warn variable if discharging and low - [ "$status" = "🔋" ] && [ "$capacity" -le 25 ] && warn="❗" - # Prints the info - printf "%s%s%d%%" "$status" "$warn" "$capacity"; unset warn -done && printf "\\n" diff --git a/dotfiles/dwm/.local/bin/statusbar/sb-clock b/dotfiles/dwm/.local/bin/statusbar/sb-clock deleted file mode 100755 index e1ca8c7..0000000 --- a/dotfiles/dwm/.local/bin/statusbar/sb-clock +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/sh - -clock=$(date '+%I') - -case "$clock" in - "00") icon="🕛" ;; - "01") icon="🕐" ;; - "02") icon="🕑" ;; - "03") icon="🕒" ;; - "04") icon="🕓" ;; - "05") icon="🕔" ;; - "06") icon="🕕" ;; - "07") icon="🕖" ;; - "08") icon="🕗" ;; - "09") icon="🕘" ;; - "10") icon="🕙" ;; - "11") icon="🕚" ;; - "12") icon="🕛" ;; -esac - -case $BLOCK_BUTTON in - 1) notify-send "This Month" "$(cal --color=always | sed "s/..7m/<b><span color=\"red\">/;s|..27m|</span></b>|")" && notify-send "Appointments" "$(calcurse -d3)" ;; - 2) setsid -f "$TERMINAL" -e calcurse ;; - 3) notify-send "📅 Time/date module" "\- Left click to show upcoming appointments for the next three days via \`calcurse -d3\` and show the month via \`cal\` -- Middle click opens calcurse if installed" ;; - 6) "$TERMINAL" -e "$EDITOR" "$0" ;; -esac - -date "+%Y %b %d (%a) $icon%I:%M%p" diff --git a/dotfiles/dwm/.local/bin/statusbar/sb-cpu b/dotfiles/dwm/.local/bin/statusbar/sb-cpu deleted file mode 100755 index 1572b52..0000000 --- a/dotfiles/dwm/.local/bin/statusbar/sb-cpu +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh - -case $BLOCK_BUTTON in - 1) notify-send "🖥 CPU hogs" "$(ps axch -o cmd:15,%cpu --sort=-%cpu | head)\\n(100% per core)" ;; - 2) setsid -f "$TERMINAL" -e htop ;; - 3) notify-send "🖥 CPU module " "\- Shows CPU temperature. -- Click to show intensive processes. -- Middle click to open htop." ;; - 6) "$TERMINAL" -e "$EDITOR" "$0" ;; -esac - -sensors | awk '/Core 0/ {print "🌡" $3}' diff --git a/dotfiles/dwm/.local/bin/statusbar/sb-cpubars b/dotfiles/dwm/.local/bin/statusbar/sb-cpubars deleted file mode 100755 index 297424e..0000000 --- a/dotfiles/dwm/.local/bin/statusbar/sb-cpubars +++ /dev/null @@ -1,44 +0,0 @@ -#!/bin/sh - -# Module showing CPU load as a changing bars. -# Just like in polybar. -# Each bar represents amount of load on one core since -# last run. - -# Cache in tmpfs to improve speed and reduce SSD load -cache=/tmp/cpubarscache - -case $BLOCK_BUTTON in - 2) setsid -f "$TERMINAL" -e htop ;; - 3) notify-send "🪨 CPU load module" "Each bar represents -one CPU core";; - 6) "$TERMINAL" -e "$EDITOR" "$0" ;; -esac - -# id total idle -stats=$(awk '/cpu[0-9]+/ {printf "%d %d %d\n", substr($1,4), ($2 + $3 + $4 + $5), $5 }' /proc/stat) -[ ! -f $cache ] && echo "$stats" > "$cache" -old=$(cat "$cache") -printf "🪨" -echo "$stats" | while read -r row; do - id=${row%% *} - rest=${row#* } - total=${rest%% *} - idle=${rest##* } - - case "$(echo "$old" | awk '{if ($1 == id) - printf "%d\n", (1 - (idle - $3) / (total - $2))*100 /12.5}' \ - id="$id" total="$total" idle="$idle")" in - - "0") printf "▁";; - "1") printf "▂";; - "2") printf "▃";; - "3") printf "▄";; - "4") printf "▅";; - "5") printf "▆";; - "6") printf "▇";; - "7") printf "█";; - "8") printf "█";; - esac -done; printf "\\n" -echo "$stats" > "$cache" diff --git a/dotfiles/dwm/.local/bin/statusbar/sb-disk b/dotfiles/dwm/.local/bin/statusbar/sb-disk deleted file mode 100755 index e947509..0000000 --- a/dotfiles/dwm/.local/bin/statusbar/sb-disk +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/sh - -# Status bar module for disk space -# $1 should be drive mountpoint, otherwise assumed /. - -location=${1:-/} - -[ -d "$location" ] || exit - -case $BLOCK_BUTTON in - 1) notify-send "💽 Disk space" "$(df -h --output=target,used,size)" ;; - 3) notify-send "💽 Disk module" "\- Shows used hard drive space. -- Click to show all disk info." ;; - 6) "$TERMINAL" -e "$EDITOR" "$0" ;; -esac - -case "$location" in - "/home"* ) icon="🏠" ;; - "/mnt"* ) icon="💾" ;; - *) icon="🖥";; -esac - -printf "%s: %s\n" "$icon" "$(df -h "$location" | awk ' /[0-9]/ {print $3 "/" $2}')" diff --git a/dotfiles/dwm/.local/bin/statusbar/sb-doppler b/dotfiles/dwm/.local/bin/statusbar/sb-doppler deleted file mode 100755 index b5833a7..0000000 --- a/dotfiles/dwm/.local/bin/statusbar/sb-doppler +++ /dev/null @@ -1,279 +0,0 @@ -#!/bin/sh - -# Show a Doppler RADAR of a user's preferred location. - -secs=600 # Download a new doppler radar if one hasn't been downloaded in $secs seconds. -radarloc="${XDG_CACHE_HOME:-$HOME/.cache}/radar" -doppler="${XDG_CACHE_HOME:-$HOME/.cache}/doppler.gif" - -pickloc() { chosen="$(echo "US: Northeast -US: Southeast -US: PacNorthWest -US: PacSouthWest -US: UpperMissVly -US: SouthMissVly -US: SouthPlains -US: NorthRockies -US: SouthRockies -US: Alaska -US: Carib -US: Hawaii -US: CentGrLakes -US: Conus-Large -US: KABR: Aberdeen, SD -US: KBIS: Bismarck, ND -US: KFTG: Denver/Boulder, CO -US: KDMX: Des Moines, IA -US: KDTX: Detroit, MI -US: KDDC: Dodge City, KS -US: KDLH: Duluth, MN -US: KCYS: Cheyenne, WY -US: KLOT: Chicago, IL -US: KGLD: Goodland, KS -US: KUEX: Hastings, NE -US: KGJX: Grand Junction, CO -US: KGRR: Grand Rapids, MI -US: KMVX: Fargo/Grand Forks, ND -US: KGRB: Green Bay, WI -US: KIND: Indianapolis, IN -US: KJKL: Jackson, KY -US: KARX: La Crosse, WI -US: KILX: Lincoln/Central Illinois, IL -US: KLVX: Louisville, KY -US: KMQT: Marquette -US: KMKX: Milwaukee, WI -US: KMPX: Minneapolis, MN -US: KAPX: Gaylord/Alpena, MI -US: KLNX: North Platte, NE -US: KIWX: N. Webster/Northern, IN -US: KOAX: Omaha, NE -US: KPAH: Paducah, KY -US: KEAX: Pleasant Hill, MO -US: KPUX: Pueblo, CO -US: KDVN: Quad Cities, IA -US: KUDX: Rapid City, SD -US: KRIW: Riverton, WY -US: KSGF: Springfield, MO -US: KLSX: St. LOUIS, MO -US: KFSD: Sioux Falls, IA -US: KTWX: Topeka, KS -US: KICT: Wichita, KS -US: KVWX: Paducah, KY -US: ICAO: Responsible Wfo -US: KLTX: WILMINGTON, NC -US: KCCX: State College/Central, PA -US: KLWX: Sterling, VA -US: KFCX: Blacksburg/Roanoke, VA -US: KRAX: Raleigh/Durham, NC -US: KGYX: Portland, ME -US: KDIX: Mt Holly/Philadelphia, PA -US: KPBZ: Pittsburgh, PA -US: KAKQ: Wakefield, VA -US: KMHX: Morehead City, NC -US: KGSP: Greer/Greenville/Sprtbg, SC -US: KILN: Wilmington/Cincinnati, OH -US: KCLE: Cleveland, OH -US: KCAE: Columbia, SC -US: KBGM: Binghamton, NY -US: KENX: Albany, NY -US: KBUF: Buffalo, NY -US: KCXX: Burlington, VT -US: KCBW: Caribou, ME -US: KBOX: Boston /Taunton, MA -US: KOKX: New York City, NY -US: KCLX: Charleston, SC -US: KRLX: Charleston, WV -US: ICAO: Responsible WFO -US: KBRO: Brownsville, TX -US: KABX: Albuquerque, NM -US: KAMA: Amarillo, TX -US: KFFC: Peachtree City/Atlanta, GA -US: KEWX: Austin/Sanantonio, TX -US: KBMX: Birmingham, AL -US: KCRP: Corpus Christi, TX -US: KFWS: Dallas / Ft. Worth, TX -US: KEPZ: El Paso, TX -US: KHGX: Houston/ Galveston, TX -US: KJAX: Jacksonville, FL -US: KBYX: Key West, FL -US: KMRX: Morristown/knoxville, TN -US: KLBB: Lubbock, TX -US: KLZK: Little Rock, AR -US: KLCH: Lake Charles, LA -US: KOHX: Nashville, TN -US: KMLB: Melbourne, FL -US: KNQA: Memphis, TN -US: KAMX: Miami, FL -US: KMAF: Midland/odessa, TX -US: KTLX: Norman, OK -US: KHTX: Huntsville, AL -US: KMOB: Mobile, AL -US: KTLH: Tallahassee, FL -US: KTBW: Tampa Bay Area, FL -US: KSJT: San Angelo, TX -US: KINX: Tulsa, OK -US: KSRX: Tulsa, OK -US: KLIX: New Orleans/slidell, LA -US: KDGX: Jackson, MS -US: KSHV: Shreveport, LA -US: ICAO: Responsible WFO -US: KLGX: Seattle / Tacoma, WA -US: KOTX: Spokane, WA -US: KEMX: Tucson, AZ -US: KYUX: Phoenix, AZ -US: KNKX: San Diego, CA -US: KMUX: Monterey/san Francisco, CA -US: KHNX: San Joaquin/hanford, CA -US: KSOX: San Diego, CA -US: KATX: Seattle / Tacoma, WA -US: KIWA: Phoenix, AZ -US: KRTX: Portland, OR -US: KSFX: Pocatello, ID -US: KRGX: Reno, NV -US: KDAX: Sacramento, CA -US: KMTX: Salt Lake City, UT -US: KPDT: Pendleton, OR -US: KMSX: Missoula, MT -US: KESX: Las Vegas, NV -US: KVTX: Los Angeles, CA -US: KMAX: Medford, OR -US: KFSX: Flagstaff, AZ -US: KGGW: Glasgow, MT -US: KLRX: Elko, NV -US: KBHX: Eureka, CA -US: KTFX: Great Falls, MT -US: KCBX: Boise, ID -US: KBLX: Billings, MT -US: KICX: Salt Lake City, UT -US: ICAO: Responsible Wfo W/ MSCF -US: PABC: Anchorage, AK -US: PAPD: Fairbanks, AK -US: PHKM: Honolulu, HI -US: PAHG: Anchorage, AK -US: PAKC: Anchorage, AK -US: PAIH: Anchorage, AK -US: PHMO: Honolulu, HI -US: PAEC: Fairbanks, AK -US: TJUA: San Juan, PR -US: PACG: Juneau, AK -US: PHKI: Honolulu, HI -US: PHWA: Honolulu, HI -US: ICAO: Responsible Wfo W/ MSCF -US: KFDR: Norman, OK -US: PGUA: Guam -US: KBBX: Sacramento, CA -US: KFDX: Albuquerque, NM -US: KGWX: Jackson, MS -US: KDOX: Wakefield, VA -US: KDYX: San Angelo, TX -US: KEYX: Las Vegas, NV -US: KEVX: Mobile, AL -US: KHPX: Paducah, KY -US: KTYX: Burlington, VT -US: KGRK: Dallas / Ft. Worth, TX -US: KPOE: Lake Charles, LA -US: KEOX: Tallahassee, FL -US: KHDX: El Paso, TX -US: KDFX: San Antonio, TX -US: KMXX: Birmingham, AL -US: KMBX: Bismarck, ND -US: KVAX: Jacksonville, FL -US: KJGX: Peachtree City/atlanta, GA -US: KVNX: Norman, OK -US: KVBX: Vandenberg Afb: Orcutt, CA -EU: Europe -EU: GB: Great Brittain -EU: SCAN: Scandinavia -EU: ALPS: The Alps -EU: NL: The Netherlands -EU: DE: Germany -EU: SP: Spain -EU: FR: France -EU: IT: Italy -EU: PL: Poland -EU: GR: Greece -EU: TU: Turkey -EU: RU: Russia -EU: BA: Bahrain -EU: BC: Botswana -EU: SE: Republic of Seychelles -EU: HU: Hungary -EU: UK: Ukraine -AF: AF: Africa -AF: WA: West Africa -AF: ZA: South Africa -AF: DZ: Algeria -AF: CE: Canary Islands -AF: NG: Nigeria -AF: TD: Chad -AF: CG: Democratic Republic of Congo -AF: EG: Egypt -AF: ET: Ethiopia -AF: CM: Cameroon -AF: IS: Israel -AF: LY: Libya -AF: MG: Madagascar -AF: MO: Morocco -AF: BW: Namibia -AF: SA: Saudi Arabia -AF: SO: Somalia -AF: SD: Sudan -AF: TZ: Tanzania -AF: TN: Tunisia -AF: ZM: Zambia -AF: KE: Kenya -AF: AO: Angola -DE: BAW: Baden-Württemberg -DE: BAY: Bavaria -DE: BBB: Berlin -DE: BBB: Brandenburg -DE: HES: Hesse -DE: MVP: Mecklenburg-Western Pomerania -DE: NIB: Lower Saxony -DE: NIB: Bremen -DE: NRW: North Rhine-Westphalia -DE: RPS: Rhineland-Palatinate -DE: RPS: Saarland -DE: SAC: Saxony -DE: SAA: Saxony-Anhalt -DE: SHH: Schleswig-Holstein -DE: SHH: Hamburg -DE: THU: Thuringia" | dmenu -r -i -l 50 -p "Select a radar to use as default:" | tr "[:lower:]" "[:upper:]")" - -# Ensure user did not escape. -[ -z "$chosen" ] && exit 1 - -# Set continent code and radar code. -continentcode=${chosen%%:*} -radarcode=${chosen#* } radarcode=${radarcode%:*} - -# Print codes to $radarloc file. - printf "%s,%s\\n" "$continentcode" "$radarcode" > "$radarloc" ;} - -getdoppler() { - cont=$(cut -c -2 "$radarloc") - loc=$(cut -c 4- "$radarloc") - notify-send "🌦️ Doppler RADAR" "Pulling most recent Doppler RADAR for $loc." - case "$cont" in - "US") curl -sL "https://radar.weather.gov/ridge/lite/${loc}_loop.gif" > "$doppler" ;; - "EU") curl -sL "https://api.sat24.com/animated/${loc}/rainTMC/2/" > "$doppler" ;; - "AF") curl -sL "https://api.sat24.com/animated/${loc}/rain/2/" > "$doppler" ;; - "DE") loc="$(echo "$loc" | tr "[:upper:]" "[:lower:]")" - curl -sL "https://www.dwd.de/DWD/wetter/radar/radfilm_${loc}_akt.gif" > "$doppler" ;; - esac -} - -showdoppler() { setsid -f mpv --no-osc --loop=inf --no-terminal "$doppler" ;} - -case $BLOCK_BUTTON in - 1) [ ! -f "$radarloc" ] && pickloc && getdoppler - [ $(($(date '+%s') - $(stat -c %Y "$doppler"))) -gt "$secs" ] && getdoppler - showdoppler ;; - 2) pickloc && getdoppler && showdoppler ;; - 3) notify-send "🗺️ Doppler RADAR module" "\- Left click for local Doppler RADAR. -- Middle click to update RADAR location. -After $secs seconds, new clicks will also automatically update the doppler RADAR." ;; - 6) "$TERMINAL" -e "$EDITOR" "$0" ;; -esac - -echo 🗺️ diff --git a/dotfiles/dwm/.local/bin/statusbar/sb-forecast b/dotfiles/dwm/.local/bin/statusbar/sb-forecast deleted file mode 100755 index 45584c5..0000000 --- a/dotfiles/dwm/.local/bin/statusbar/sb-forecast +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/sh - -# Displays todays precipication chance (☔) and daily low (🥶) and high (🌞). -# 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" -getforecast() { curl -sf "wttr.in/$LOCATION" > "$weatherreport" || exit 1 ;} - -# Some very particular and terse stream manipulation. We get the maximum -# precipitation chance and the daily high and low from the downloaded file and -# display them with coresponding emojis. -showweather() { printf "%s" "$(sed '16q;d' "$weatherreport" | - grep -wo "[0-9]*%" | sort -rn | sed "s/^/☔/g;1q" | tr -d '\n')" -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 "°"}' ;} - -case $BLOCK_BUTTON in - 1) setsid -f "$TERMINAL" -e less -Srf "$weatherreport" ;; - 2) getforecast && showweather ;; - 3) notify-send "🌈 Weather module" "\- Left click for full forecast. -- Middle click to update forecast. -☔: Chance of rain/snow -🥶: Daily low -🌞: Daily high" ;; - 6) "$TERMINAL" -e "$EDITOR" "$0" ;; -esac - -# The test if our forcecast is updated to the day. If it isn't download a new -# weather report from wttr.in with the above function. -[ "$(stat -c %y "$weatherreport" 2>/dev/null | cut -d' ' -f1)" = "$(date '+%Y-%m-%d')" ] || - getforecast - -showweather diff --git a/dotfiles/dwm/.local/bin/statusbar/sb-help-icon b/dotfiles/dwm/.local/bin/statusbar/sb-help-icon deleted file mode 100755 index 8fa4a52..0000000 --- a/dotfiles/dwm/.local/bin/statusbar/sb-help-icon +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/sh - -# The clickable help menu. Middle click to restart wm. - -# If dwm is running, use dwm's readme and restart. -pidof dwm >/dev/null && - READMEFILE=/usr/local/share/dwm/larbs.mom - restartwm() { pkill -HUP dwm ;} || - restartwm() { i3 restart ;} - -case $BLOCK_BUTTON in - 1) groff -mom "${READMEFILE:-${XDG_DATA_HOME:-$HOME/.local/share}/larbs/readme.mom}" -Tpdf | zathura - ;; - 2) restartwm ;; - 3) notify-send "❓ Help module" "\- Left click to open LARBS guide. -- Middle click to refresh window manager." ;; - 6) "$TERMINAL" -e "$EDITOR" "$0" ;; -esac; echo "❓" diff --git a/dotfiles/dwm/.local/bin/statusbar/sb-internet b/dotfiles/dwm/.local/bin/statusbar/sb-internet deleted file mode 100755 index 94b7da2..0000000 --- a/dotfiles/dwm/.local/bin/statusbar/sb-internet +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/sh - -# Show wifi 📶 and percent strength or 📡 if none. -# Show 🌐 if connected to ethernet or ❎ if none. -# Show 🔒 if a vpn connection is active - -case $BLOCK_BUTTON in - 1) "$TERMINAL" -e nmtui; pkill -RTMIN+4 dwmblocks ;; - 3) notify-send "🌐 Internet module" "\- Click to connect -❌: wifi disabled -📡: no wifi connection -📶: wifi connection with quality -❎: no ethernet -🌐: ethernet working -🔒: vpn is active -" ;; - 6) "$TERMINAL" -e "$EDITOR" "$0" ;; -esac - -if grep -xq 'up' /sys/class/net/w*/operstate 2>/dev/null ; then - wifiicon="$(awk '/^\s*w/ { print "📶", int($3 * 100 / 70) "% " }' /proc/net/wireless)" -elif grep -xq 'down' /sys/class/net/w*/operstate 2>/dev/null ; then - grep -xq '0x1003' /sys/class/net/w*/flags && wifiicon="📡 " || wifiicon="❌ " -fi - -printf "%s%s%s\n" "$wifiicon" "$(sed "s/down/❎/;s/up/🌐/" /sys/class/net/e*/operstate 2>/dev/null)" "$(sed "s/.*/🔒/" /sys/class/net/tun*/operstate 2>/dev/null)" diff --git a/dotfiles/dwm/.local/bin/statusbar/sb-iplocate b/dotfiles/dwm/.local/bin/statusbar/sb-iplocate deleted file mode 100755 index 02adab8..0000000 --- a/dotfiles/dwm/.local/bin/statusbar/sb-iplocate +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh - -# Gets your public ip address checks which country you are in and -# displays that information in the statusbar -# -# https://www.maketecheasier.com/ip-address-geolocation-lookups-linux/ - -ifinstalled "geoip" || exit -addr="$(curl ifconfig.me 2>/dev/null)" || exit -grep "flag: " "${XDG_DATA_HOME:-$HOME/.local/share}/larbs/emoji" | grep "$(geoiplookup "$addr" | sed 's/.*, //')" | sed "s/flag: //;s/;.*//" diff --git a/dotfiles/dwm/.local/bin/statusbar/sb-kbselect b/dotfiles/dwm/.local/bin/statusbar/sb-kbselect deleted file mode 100755 index f0c923f..0000000 --- a/dotfiles/dwm/.local/bin/statusbar/sb-kbselect +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/sh -# works on any init system -# requirements: dmenu, xorg-setxkbmap -kb="$(setxkbmap -query | grep -oP 'layout:\s*\K\w+')" || exit 1 - -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)" - kb="$(echo "$kb_choice" | awk '{print $3}')" - setxkbmap "$kb" - pkill -RTMIN+30 "${STATUSBAR:-dwmblocks}";; - 3) notify-send "⌨ Keyboard/language module" "$(printf "%s" "\- Current layout: $(setxkbmap -query | grep -oP 'layout:\s*\K\w+')") -- Left click to change keyboard.";; - 6) "$TERMINAL" -e "$EDITOR" "$0" ;; -esac - -echo "$kb" diff --git a/dotfiles/dwm/.local/bin/statusbar/sb-mailbox b/dotfiles/dwm/.local/bin/statusbar/sb-mailbox deleted file mode 100755 index 2132184..0000000 --- a/dotfiles/dwm/.local/bin/statusbar/sb-mailbox +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/sh - -# Displays number of unread mail and an loading icon if updating. -# When clicked, brings up `neomutt`. - -case $BLOCK_BUTTON in - 1) setsid -f "$TERMINAL" -e neomutt ;; - 2) setsid -f mw -Y >/dev/null ;; - 3) notify-send "📬 Mail module" "\- Shows unread mail -- Shows 🔃 if syncing mail -- Left click opens neomutt -- Middle click syncs mail" ;; - 6) "$TERMINAL" -e "$EDITOR" "$0" ;; -esac - -unread="$(find "${XDG_DATA_HOME:-$HOME/.local/share}"/mail/*/[Ii][Nn][Bb][Oo][Xx]/new/* -type f | wc -l 2>/dev/null)" - -pidof mbsync >/dev/null 2>&1 && icon="🔃" - -[ "$unread" = "0" ] && [ "$icon" = "" ] || echo "📬$unread$icon" diff --git a/dotfiles/dwm/.local/bin/statusbar/sb-memory b/dotfiles/dwm/.local/bin/statusbar/sb-memory deleted file mode 100755 index 01d3daf..0000000 --- a/dotfiles/dwm/.local/bin/statusbar/sb-memory +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh - -case $BLOCK_BUTTON in - 1) notify-send "🧠 Memory hogs" "$(ps axch -o cmd:15,%mem --sort=-%mem | head)" ;; - 2) setsid -f "$TERMINAL" -e htop ;; - 3) notify-send "🧠 Memory module" "\- Shows Memory Used/Total. -- Click to show memory hogs. -- Middle click to open htop." ;; - 6) "$TERMINAL" -e "$EDITOR" "$0" ;; -esac - -free --mebi | sed -n '2{p;q}' | awk '{printf ("🧠%2.2fGiB/%2.2fGiB\n", ( $3 / 1024), ($2 / 1024))}' diff --git a/dotfiles/dwm/.local/bin/statusbar/sb-moonphase b/dotfiles/dwm/.local/bin/statusbar/sb-moonphase deleted file mode 100755 index fab8b4d..0000000 --- a/dotfiles/dwm/.local/bin/statusbar/sb-moonphase +++ /dev/null @@ -1,37 +0,0 @@ -#!/bin/sh - -# Shows the current moon phase. - -moonfile="${XDG_DATA_HOME:-$HOME/.local/share}/moonphase" - -[ "$(stat -c %y "$moonfile" 2>/dev/null | cut -d' ' -f1)" = "$(date '+%Y-%m-%d')" ] || - { curl -sf "wttr.in/?format=%m" > "$moonfile" || exit 1 ;} - -icon="$(cat "$moonfile")" - -case "$icon" in - 🌑) name="New" ;; - 🌒) name="Waxing Crescent" ;; - 🌓) name="First Quarter" ;; - 🌔) name="Waxing Gibbous" ;; - 🌕) name="Full" ;; - 🌖) name="Waning Gibbous" ;; - 🌗) name="Last Quarter" ;; - 🌘) name="Waning Crescent" ;; - *) exit 1 ;; -esac - -echo "${icon-?}" - -case $BLOCK_BUTTON in - 3) notify-send "🌜 Moon phase module" "Displays current moon phase. -- 🌑: New -- 🌒: Waxing Crescent -- 🌓: First Quarter -- 🌔: Waxing Gibbous -- 🌕: Full -- 🌖: Waning Gibbous -- 🌗: Last Quarter -- 🌘: Waning Crescent" ;; - 6) "$TERMINAL" -e "$EDITOR" "$0" ;; -esac diff --git a/dotfiles/dwm/.local/bin/statusbar/sb-mpdup b/dotfiles/dwm/.local/bin/statusbar/sb-mpdup deleted file mode 100755 index af81a7d..0000000 --- a/dotfiles/dwm/.local/bin/statusbar/sb-mpdup +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh - -# This loop will update the mpd statusbar module whenever a command changes the -# music player's status. mpd must be running on X's start for this to work. - -while : ; do - mpc idle >/dev/null && kill -45 "$(pidof "${STATUSBAR:-dwmblocks}")" || break -done diff --git a/dotfiles/dwm/.local/bin/statusbar/sb-music b/dotfiles/dwm/.local/bin/statusbar/sb-music deleted file mode 100755 index 7ea7032..0000000 --- a/dotfiles/dwm/.local/bin/statusbar/sb-music +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/sh - -filter() { mpc | 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 & - -case $BLOCK_BUTTON in - 1) mpc status | filter ; setsid -f "$TERMINAL" -e ncmpcpp ;; # right click, pause/unpause - 2) mpc toggle | filter ;; # right click, pause/unpause - 3) mpc status | filter ; notify-send "🎵 Music module" "\- Shows mpd song playing. -- ⏸ when paused. -- Left click opens ncmpcpp. -- Middle click pauses. -- Scroll changes track.";; # right click, pause/unpause - 4) mpc prev | filter ;; # scroll up, previous - 5) mpc next | filter ;; # scroll down, next - 6) mpc status | filter ; "$TERMINAL" -e "$EDITOR" "$0" ;; - *) mpc status | filter ;; -esac diff --git a/dotfiles/dwm/.local/bin/statusbar/sb-nettraf b/dotfiles/dwm/.local/bin/statusbar/sb-nettraf deleted file mode 100755 index 178f677..0000000 --- a/dotfiles/dwm/.local/bin/statusbar/sb-nettraf +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/sh - -# Module showing network traffic. Shows how much data has been received (RX) or -# transmitted (TX) since the previous time this script ran. So if run every -# second, gives network traffic per second. - -case $BLOCK_BUTTON in - 1) setsid -f "$TERMINAL" -e bmon ;; - 3) notify-send "🌐 Network traffic module" "🔻: Traffic received -🔺: Traffic transmitted" ;; - 6) "$TERMINAL" -e "$EDITOR" "$0" ;; -esac - -update() { - sum=0 - for arg; do - read -r i < "$arg" - sum=$(( sum + i )) - done - cache=/tmp/${1##*/} - [ -f "$cache" ] && read -r old < "$cache" || old=0 - printf %d\\n "$sum" > "$cache" - printf %d\\n $(( sum - old )) -} - -rx=$(update /sys/class/net/[ew]*/statistics/rx_bytes) -tx=$(update /sys/class/net/[ew]*/statistics/tx_bytes) - -printf "🔻%4sB 🔺%4sB\\n" $(numfmt --to=iec $rx $tx) diff --git a/dotfiles/dwm/.local/bin/statusbar/sb-news b/dotfiles/dwm/.local/bin/statusbar/sb-news deleted file mode 100755 index fe701db..0000000 --- a/dotfiles/dwm/.local/bin/statusbar/sb-news +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/sh - -# Displays number of unread news items and an loading icon if updating. -# When clicked, brings up `newsboat`. - -case $BLOCK_BUTTON in - 1) setsid "$TERMINAL" -e newsboat ;; - 2) setsid -f newsup >/dev/null exit ;; - 3) notify-send "📰 News module" "\- Shows unread news items -- Shows 🔃 if updating with \`newsup\` -- Left click opens newsboat -- Middle click syncs RSS feeds -<b>Note:</b> Only one instance of newsboat (including updates) may be running at a time." ;; - 6) "$TERMINAL" -e "$EDITOR" "$0" ;; -esac - - cat /tmp/newsupdate 2>/dev/null || echo "$(newsboat -x print-unread | awk '{ if($1>0) print "📰" $1}')$(cat "${XDG_CONFIG_HOME:-$HOME/.config}"/newsboat/.update 2>/dev/null)" diff --git a/dotfiles/dwm/.local/bin/statusbar/sb-pacpackages b/dotfiles/dwm/.local/bin/statusbar/sb-pacpackages deleted file mode 100755 index 37ebed3..0000000 --- a/dotfiles/dwm/.local/bin/statusbar/sb-pacpackages +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/sh - -# Displays number of upgradeable packages. -# For this to work, have a `pacman -Sy` command run in the background as a -# cronjob every so often as root. This script will then read those packages. -# When clicked, it will run an upgrade via pacman. -# -# Add the following text as a file in /usr/share/libalpm/hooks/statusbar.hook: -# -# [Trigger] -# Operation = Upgrade -# Type = Package -# Target = * -# -# [Action] -# Description = Updating statusbar... -# When = PostTransaction -# Exec = /usr/bin/pkill -RTMIN+8 dwmblocks # Or i3blocks if using i3. - -case $BLOCK_BUTTON in - 1) setsid -f "$TERMINAL" -e sb-popupgrade ;; - 2) notify-send "$(/usr/bin/pacman -Qu)" ;; - 3) notify-send "🎁 Upgrade module" "📦: number of upgradable packages -- Left click to upgrade packages -- Middle click to show upgradable packages" ;; - 6) "$TERMINAL" -e "$EDITOR" "$0" ;; -esac - -pacman -Qu | grep -Fcv "[ignored]" | sed "s/^/📦/;s/^📦0$//g" diff --git a/dotfiles/dwm/.local/bin/statusbar/sb-popupgrade b/dotfiles/dwm/.local/bin/statusbar/sb-popupgrade deleted file mode 100755 index 29d6230..0000000 --- a/dotfiles/dwm/.local/bin/statusbar/sb-popupgrade +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh - -printf "Beginning upgrade.\\n" - -yay -Syu -pkill -RTMIN+8 "${STATUSBAR:-dwmblocks}" - -printf "\\nUpgrade complete.\\nPress <Enter> to exit window.\\n\\n" -read -r _ diff --git a/dotfiles/dwm/.local/bin/statusbar/sb-price b/dotfiles/dwm/.local/bin/statusbar/sb-price deleted file mode 100755 index 42c84c1..0000000 --- a/dotfiles/dwm/.local/bin/statusbar/sb-price +++ /dev/null @@ -1,50 +0,0 @@ -#!/bin/sh - -# Usage: -# price <url> <Name of currency> <icon> <Price to show in> -# price bat "Basic Attention Token" 🦁 -# When the name of the currency is multi-word, put it in quotes. - -[ -z "$3" ] && exit 1 - -# use $4 as currency, if not passed in use "usd" as default -currency="${4:-usd}" -interval="@14d" # History contained in chart preceded by '@' (7d = 7 days) -dir="${XDG_DATA_HOME:-$HOME/.local/share}/crypto-prices" -pricefile="$dir/$1-$currency" -chartfile="$dir/$1-$currency-chart" - -updateprice() { temp="$(mktemp)" - curl -s "$currency.rate.sx/1$1" > "$temp" && - mv -f "$temp" "$pricefile" && - curl -s "$currency.rate.sx/$1$interval" > "$temp" && - mv -f "$temp" "$chartfile" ;} - -[ -d "$dir" ] || mkdir -p "$dir" - -[ "$(stat -c %x "$pricefile" 2>/dev/null | cut -d' ' -f1)" != "$(date '+%Y-%m-%d')" ] && - updateprice "$1" - -case $BLOCK_BUTTON in - 1) setsid "$TERMINAL" -e less -Srf "$chartfile" ;; - 2) notify-send -u low "$3 Updating..." "Updating $2 price..." - updateprice "$1" && notify-send "$3 Update complete." "$2 price is now -\$$(cat "$pricefile")" ;; - 3) uptime="$(date -d "$(stat -c %x "$pricefile")" '+%D at %T' | sed "s|$(date '+%D')|Today|")" - notify-send "$3 $2 module" "\- <b>Exact price: \$$(cat "$pricefile")</b> -- Left click for chart of changes. -- Middle click to update. -- Shows 🔃 if updating prices. -- <b>Last updated: - $uptime</b>" ;; - 6) "$TERMINAL" -e "$EDITOR" "$0" ;; -esac - -case "$currency" in - usd) symb="$" ;; - gbp) symb="£" ;; - eur) symb="€" ;; - btc) symb="₿" ;; -esac - -printf "$3$symb%0.2f$after" "$(cat "$pricefile")" diff --git a/dotfiles/dwm/.local/bin/statusbar/sb-tasks b/dotfiles/dwm/.local/bin/statusbar/sb-tasks deleted file mode 100755 index 586300e..0000000 --- a/dotfiles/dwm/.local/bin/statusbar/sb-tasks +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/sh - -# Originally by Andr3as07 <https://github.com/Andr3as07> -# Some changes by Luke -# Rebuild by Tenyun - -# This block displays the number running background tasks. Requires tsp. - -num=$(tsp -l | awk -v numr=0 -v numq=0 '{if (/running/)numr++; if (/queued/)numq++} END{print numr+numq"("numq")"}') - -# Handle mouse clicks -case $BLOCK_BUTTON in - 1) setsid -f "$TERMINAL" -e tsp -l ;; - 3) notify-send "Tasks module" "🤖: number of running/queued background tasks -- Left click opens tsp" ;; # Right click - 2) $EDITOR "$0" ;; # Middle click -esac - -[ "$num" != "0(0)" ] && - echo "🤖$num" diff --git a/dotfiles/dwm/.local/bin/statusbar/sb-torrent b/dotfiles/dwm/.local/bin/statusbar/sb-torrent deleted file mode 100755 index 6527005..0000000 --- a/dotfiles/dwm/.local/bin/statusbar/sb-torrent +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/sh - -transmission-remote -l | grep % | - sed " # The letters are for sorting and will not appear. - s/.*Stopped.*/A 🛑/; - s/.*Seeding.*/Z 🌱/; - s/.*100%.*/N ✅/; - s/.*Idle.*/B 🕰️/; - s/.*Uploading.*/L ⬆️/; - s/.*%.*/M ⬇️/" | - sort -h | uniq -c | awk '{print $3 $1}' | paste -sd ' ' - - -case $BLOCK_BUTTON in - 1) setsid -f "$TERMINAL" -e tremc ;; - 2) td-toggle ;; - 3) notify-send "🌱 Torrent module" "\- Left click to open tremc. -- Middle click to toggle transmission. -- Shift click to edit script. -Module shows number of torrents: -🛑: paused -🕰: idle (seeds needed) -🔼: uploading (unfinished) -🔽: downloading -✅: done -🌱: done and seeding" ;; - 6) "$TERMINAL" -e "$EDITOR" "$0" ;; -esac diff --git a/dotfiles/dwm/.local/bin/statusbar/sb-volume b/dotfiles/dwm/.local/bin/statusbar/sb-volume deleted file mode 100755 index 3cfdc45..0000000 --- a/dotfiles/dwm/.local/bin/statusbar/sb-volume +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/sh - -# Prints the current volume or 🔇 if muted. - -case $BLOCK_BUTTON in - 1) setsid -f "$TERMINAL" -e pulsemixer ;; - 2) pamixer -t ;; - 4) pamixer --allow-boost -i 1 ;; - 5) pamixer --allow-boost -d 1 ;; - 3) notify-send "📢 Volume module" "\- Shows volume 🔊, 🔇 if muted. -- Middle click to mute. -- Scroll to change." ;; - 6) "$TERMINAL" -e "$EDITOR" "$0" ;; -esac - -[ $(pamixer --get-mute) = true ] && echo 🔇 && exit - -vol="$(pamixer --get-volume)" - -if [ "$vol" -gt "70" ]; then - icon="🔊" -elif [ "$vol" -gt "30" ]; then - icon="🔉" -elif [ "$vol" -gt "0" ]; then - icon="🔈" -else - echo 🔇 && exit -fi - -echo "$icon$vol%" diff --git a/dotfiles/dwm/.local/bin/td-toggle b/dotfiles/dwm/.local/bin/td-toggle deleted file mode 100755 index de1a0e6..0000000 --- a/dotfiles/dwm/.local/bin/td-toggle +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh - -# If transmission-daemon is running, will ask to kill, else will ask to start. - -if pidof transmission-daemon >/dev/null ; -then - [ "$(printf "No\\nYes" | dmenu -i -p "Turn off transmission-daemon?")" = "Yes" ] && killall transmission-daemon && notify-send "transmission-daemon disabled." -else - ifinstalled transmission-cli || exit - [ "$(printf "No\\nYes" | dmenu -i -p "Turn on transmission daemon?")" = "Yes" ] && transmission-daemon && notify-send "transmission-daemon enabled." -fi -sleep 3 && pkill -RTMIN+7 "${STATUSBAR:-dwmblocks}" diff --git a/dotfiles/common/.local/share/applications/dwm.desktop b/dotfiles/dwm/.local/share/applications/dwm.desktop index ba3bd00..ba3bd00 100644 --- a/dotfiles/common/.local/share/applications/dwm.desktop +++ b/dotfiles/dwm/.local/share/applications/dwm.desktop diff --git a/dotfiles/common/.local/share/applications/emacsclient-mail.desktop b/dotfiles/dwm/.local/share/applications/emacsclient-mail.desktop index 6efcf61..6efcf61 100644 --- a/dotfiles/common/.local/share/applications/emacsclient-mail.desktop +++ b/dotfiles/dwm/.local/share/applications/emacsclient-mail.desktop diff --git a/dotfiles/common/.local/share/applications/file.desktop b/dotfiles/dwm/.local/share/applications/file.desktop index 5df1633..5df1633 100644 --- a/dotfiles/common/.local/share/applications/file.desktop +++ b/dotfiles/dwm/.local/share/applications/file.desktop diff --git a/dotfiles/common/.local/share/applications/img.desktop b/dotfiles/dwm/.local/share/applications/img.desktop index 42aa81e..42aa81e 100644 --- a/dotfiles/common/.local/share/applications/img.desktop +++ b/dotfiles/dwm/.local/share/applications/img.desktop diff --git a/dotfiles/common/.local/share/applications/lock-screen.desktop b/dotfiles/dwm/.local/share/applications/lock-screen.desktop index 2bd7afa..2bd7afa 100644 --- a/dotfiles/common/.local/share/applications/lock-screen.desktop +++ b/dotfiles/dwm/.local/share/applications/lock-screen.desktop diff --git a/dotfiles/common/.local/share/applications/logout.desktop b/dotfiles/dwm/.local/share/applications/logout.desktop index 8c3bc3a..8c3bc3a 100644 --- a/dotfiles/common/.local/share/applications/logout.desktop +++ b/dotfiles/dwm/.local/share/applications/logout.desktop diff --git a/dotfiles/common/.local/share/applications/mail.desktop b/dotfiles/dwm/.local/share/applications/mail.desktop index d24aea2..d24aea2 100644 --- a/dotfiles/common/.local/share/applications/mail.desktop +++ b/dotfiles/dwm/.local/share/applications/mail.desktop diff --git a/dotfiles/common/.local/share/applications/pdf.desktop b/dotfiles/dwm/.local/share/applications/pdf.desktop index 8c38677..8c38677 100644 --- a/dotfiles/common/.local/share/applications/pdf.desktop +++ b/dotfiles/dwm/.local/share/applications/pdf.desktop diff --git a/dotfiles/common/.local/share/applications/reboot.desktop b/dotfiles/dwm/.local/share/applications/reboot.desktop index ae2c76e..ae2c76e 100644 --- a/dotfiles/common/.local/share/applications/reboot.desktop +++ b/dotfiles/dwm/.local/share/applications/reboot.desktop diff --git a/dotfiles/common/.local/share/applications/shutdown.desktop b/dotfiles/dwm/.local/share/applications/shutdown.desktop index 2d93aa0..2d93aa0 100644 --- a/dotfiles/common/.local/share/applications/shutdown.desktop +++ b/dotfiles/dwm/.local/share/applications/shutdown.desktop diff --git a/dotfiles/common/.local/share/applications/suspend.desktop b/dotfiles/dwm/.local/share/applications/suspend.desktop index ab8addf..ab8addf 100644 --- a/dotfiles/common/.local/share/applications/suspend.desktop +++ b/dotfiles/dwm/.local/share/applications/suspend.desktop diff --git a/dotfiles/common/.local/share/applications/text.desktop b/dotfiles/dwm/.local/share/applications/text.desktop index 41ee05f..41ee05f 100644 --- a/dotfiles/common/.local/share/applications/text.desktop +++ b/dotfiles/dwm/.local/share/applications/text.desktop diff --git a/dotfiles/hyprland/.local/bin/power-menu b/dotfiles/hyprland/.local/bin/power-menu deleted file mode 100755 index 878a17b..0000000 --- a/dotfiles/hyprland/.local/bin/power-menu +++ /dev/null @@ -1,45 +0,0 @@ -#!/bin/bash -# Power menu using wofi -# Dupre theme with Nerd Font icons - -options="\n\n\n\n\n" - -selected=$(echo -e "$options" | wofi --dmenu \ - --cache-file /dev/null \ - --prompt "" \ - --hide-scroll \ - --hide-search \ - --gtk-dark \ - --layer overlay \ - --width 700 \ - --height 700 \ - --columns 3 \ - --lines 2 \ - --style ~/.config/wofi/power-menu.css \ - --conf /dev/null) - -case "$selected" in - "") - hyprlock - ;; - "") - notify-send "Power Menu" "Logout disabled for testing" - # hyprctl dispatch exit - ;; - "") - notify-send "Power Menu" "Suspend disabled for testing" - # systemctl suspend - ;; - "") - notify-send "Power Menu" "Hibernate disabled for testing" - # systemctl hibernate - ;; - "") - notify-send "Power Menu" "Reboot disabled for testing" - # systemctl reboot - ;; - "") - notify-send "Power Menu" "Shutdown disabled for testing" - # systemctl poweroff - ;; -esac |
