diff options
70 files changed, 5197 insertions, 0 deletions
diff --git a/.config/calcurse/conf b/.config/calcurse/conf new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/.config/calcurse/conf diff --git a/.config/calcurse/keys b/.config/calcurse/keys new file mode 100644 index 0000000..24a0fbc --- /dev/null +++ b/.config/calcurse/keys @@ -0,0 +1,56 @@ +# +# Calcurse Tasten Konfiguration +# +# In dieser Datei sind die Tastaturkürzel für calcurse festgelegt. +# Sie wird automatisch von Calcurse angelegt und von +# calcurse verwaltet. Eine manuelle Bearbeitung ist nicht +# empfohlen. + +generic-cancel ESC +generic-select SPC +generic-credits @ +generic-help ? +generic-quit q Q +generic-save s S ^S +generic-reload R +generic-copy c +generic-paste p ^V +generic-change-view TAB +generic-prev-view KEY_BTAB +generic-import i I +generic-export x X +generic-goto g G +generic-other-cmd o O +generic-config-menu C +generic-redraw ^R +generic-add-appt ^A +generic-add-todo ^T +generic-prev-day T ^H +generic-next-day t ^L +generic-prev-week W ^K +generic-next-week w +generic-prev-month M +generic-next-month m +generic-prev-year Y +generic-next-year y +generic-scroll-down ^N +generic-scroll-up ^P +generic-goto-today ^G +generic-command : +move-right l L RGT +move-left h H LFT +move-down j J DWN +move-up k K UP +start-of-week 0 +end-of-week $ +add-item a A +del-item d D +edit-item e E +view-item v V RET +pipe-item | +flag-item ! +repeat r +edit-note n N +view-note > +raise-priority + +lower-priority - diff --git a/.config/fcitx/config b/.config/fcitx/config new file mode 100644 index 0000000..c12a316 --- /dev/null +++ b/.config/fcitx/config @@ -0,0 +1,150 @@ +[Hotkeys] +CustomSwitchKey=CTRL_SPACE +IMSwitchKey=True +IMSwitchHotkey=MOD_CTRL_SHIFT + +# Eingabemethode aktivieren +#TriggerKey=CTRL_SPACE +# Extra Triggertaste nur benutzen, wenn sie vorher zum Inaktivieren benutzt wurde +# Mögliche Werte: +# True False +#UseExtraTriggerKeyOnlyWhenUseItToInactivate=True +# Extrataste zum Aktivieren der Eingabemethode +# Mögliche Werte: +# R_CTRL +# R_SHIFT +# L_SHIFT +# L_CTRL +# ALT_L_SHIFT +# ALT_R_SHIFT +# CTRL Both +# SHIFT Both +# L_ALT +# R_ALT +# ALT Both +# Left Super +# Right Super +# Super Both +# Ctrl+Left Super +# Ctrl+Right Super +# Super+Left Ctrl +# Super+Right Ctrl +# Disabled +# Custom +#SwitchKey=L_SHIFT +# Eingestellte Taste zum Wechseln +# Eingabemethode aktivieren +#ActivateKey= +# Eingabemethode deaktivieren +#InactivateKey= +# Hotkey aktivieren, um durch die Eingabemethoden zu scrollen +# Mögliche Werte: +# True False +#IMSwitchKey=True +# "Deaktiviert" einschließen, wenn durch die Eingabemethoden gescrollt wird +# Mögliche Werte: +# True False +#IMSwitchIncludeInactive=False +# Durch Eingabemethoden scrollen +# Mögliche Werte: +# CTRL_SHIFT +# ALT_SHIFT +# CTRL_SUPER +# ALT_SUPER +#IMSwitchHotkey=CTRL_SHIFT +# Konfiguration erneut laden +#ReloadConfig=CTRL_5 +# Tastenwiederholung/Sekunde +#TimeInterval=250 +# Wechsel der Virtuellen Tastatur +#VKSwitchKey=CTRL_ALT_B +# Erinnerungsmodus wechseln +#RemindSwitchKey= +# Wechsel zum Modus Vollbreite Zeichen +#FullWidthSwitchKey= +# Wechsel zum Modus Vollbreite Interpunktion +#PuncSwitchKey=CTRL_. +# Taste vorherige Kandidaten +#PrevPageKey=- UP +# Taste für weitere Kanditaten +#NextPageKey== DOWN +# Zweiten und dritten Kandidaten auswählen +#SecondThirdCandWordKey= +# Konfiguration und Eingabeverlauf sichern +#SaveAllKey=CTRL_ALT_S +# Wechsel zum eingebetteten Preedit +#SwitchPreedit=CTRL_ALT_P +# Vorheriger Kandidat (Wort) +#PrevWord=SHIFT_TAB +# Nächster Kandidat (Wort) +#NextWord=TAB + +[Program] +# Warten, bevor fcitx started (sec.) +#DelayStart=0 +# Eingabemethode beibehalten +# Mögliche Werte: +# No +# All +# PerProgram +#ShareStateAmongWindow=No +# Standard Status Eingabemethode +# Mögliche Werte: +# Inactive +# Active +#DefaultInputMethodState=Inactive + +[Output] +# Halbweite Interpunktion nach Zahlen +# Mögliche Werte: +# True False +#HalfPuncAfterNumber=True +# Paging im Erinnerungsmodus ausschalten +# Mögliche Werte: +# True False +#RemindModeDisablePaging=True +# Bestätigen, wenn der Status verändert wird +# Mögliche Werte: +# True False +#SendTextWhenSwitchEng=True +# Anzahl Zeichenvorschläge +#CandidateWordNumber=5 +# Phrasenvorschläge aktivieren +# Mögliche Werte: +# True False +#PhraseTips=True +# Preedittext nicht eingeben, wenn das Fenster den Fokus verliert +# Mögliche Werte: +# True False +#DontCommitPreeditWhenUnfocus=False + +[Appearance] +# Hinweis zur Eingabemethode zeigen, nachdem sie gewechselt wurde +# Mögliche Werte: +# True False +#ShowInputWindowAfterTriggering=True +# Hinweis zur Eingabemethode zeigen, nachdem sie gewechselt wurde und Fokus auf +# Mögliche Werte: +# True False +#ShowInputWindowWhenFocusIn=False +# Hinweis auf die Eingabemethode wird nur angezeigt, wenn der Status AKTIV ist +# Mögliche Werte: +# True False +#ShowInputWindowOnlyWhenActive=True +# Eingabegeschwindigkeit zeigen +# Mögliche Werte: +# True False +#ShowInputSpeed=False +# Version zeigen +# Mögliche Werte: +# True False +#ShowVersion=False +# Fcitx Fenster nicht anzeigen, wenn es nur einen Vorschlag gibt +# Mögliche Werte: +# True False +#HideInputWindowWhenOnlyPreeditString=False +# Eingabefenster nicht zeigen, wenn nur ein Kandidat und der Preeditstring vorhanden sind +# Mögliche Werte: +# True False +#HideInputWindowWhenOnlyOneCandidate=False + diff --git a/.config/fontconfig/fonts.conf b/.config/fontconfig/fonts.conf new file mode 100755 index 0000000..761ae00 --- /dev/null +++ b/.config/fontconfig/fonts.conf @@ -0,0 +1,40 @@ +<?xml version='1.0'?> +<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'> +<fontconfig> + <alias> + <family>serif</family> + <prefer> + <family>Libertinus Serif</family> + <family>Joy Pixels</family> + <family>Noto Color Emoji</family> + <family>FontAwesome</family> + </prefer> + </alias> + <alias> + <family>sans-serif</family> + <prefer> + <family>Libertinus Sans</family> + <family>Joy Pixels</family> + <family>Noto Color Emoji</family> + <family>FontAwesome</family> + </prefer> + </alias> + <alias> + <family>sans</family> + <prefer> + <family>Libertinus Sans</family> + <family>Joy Pixels</family> + <family>Noto Color Emoji</family> + <family>FontAwesome</family> + </prefer> + </alias> + <alias> + <family>monospace</family> + <prefer> + <family>Noto Sans Mono</family> + <family>Libertinus Mono</family> + <family>FontAwesome</family> + <family>Braille</family> + </prefer> + </alias> +</fontconfig> diff --git a/.config/lf/cleaner b/.config/lf/cleaner new file mode 100644 index 0000000..a184d84 --- /dev/null +++ b/.config/lf/cleaner @@ -0,0 +1,4 @@ +#!/bin/sh +if [ -n "$FIFO_UEBERZUG" ]; then + printf '{"action": "remove", "identifier": "PREVIEW"}\n' > "$FIFO_UEBERZUG" +fi diff --git a/.config/lf/icons b/.config/lf/icons new file mode 100644 index 0000000..aad068c --- /dev/null +++ b/.config/lf/icons @@ -0,0 +1,77 @@ +di 📁 +fi 📃 +tw 🤝 +ow 📂 +ln ⛓ +or ❌ +ex 🎯 +*.txt ✍ +*.mom ✍ +*.me ✍ +*.ms ✍ +*.avif 🖼 +*.png 🖼 +*.webp 🖼 +*.ico 🖼 +*.jpg 📸 +*.jpe 📸 +*.jpeg 📸 +*.gif 🖼 +*.svg 🗺 +*.tif 🖼 +*.tiff 🖼 +*.xcf 🖌 +*.html 🌎 +*.xml 📰 +*.gpg 🔒 +*.css 🎨 +*.pdf 📚 +*.djvu 📚 +*.epub 📚 +*.csv 📓 +*.xlsx 📓 +*.tex 📜 +*.md 📘 +*.r 📊 +*.R 📊 +*.rmd 📊 +*.Rmd 📊 +*.m 📊 +*.mp3 🎵 +*.opus 🎵 +*.ogg 🎵 +*.m4a 🎵 +*.flac 🎼 +*.wav 🎼 +*.mkv 🎥 +*.mp4 🎥 +*.webm 🎥 +*.mpeg 🎥 +*.avi 🎥 +*.mov 🎥 +*.mpg 🎥 +*.wmv 🎥 +*.m4b 🎥 +*.flv 🎥 +*.zip 📦 +*.rar 📦 +*.7z 📦 +*.tar 📦 +*.z64 🎮 +*.v64 🎮 +*.n64 🎮 +*.gba 🎮 +*.nes 🎮 +*.gdi 🎮 +*.1 ℹ +*.nfo ℹ +*.info ℹ +*.log 📙 +*.iso 📀 +*.img 📀 +*.bib 🎓 +*.ged 👪 +*.part 💔 +*.torrent 🔽 +*.jar ♨ +*.java ♨ diff --git a/.config/lf/lfrc b/.config/lf/lfrc new file mode 100644 index 0000000..894b19d --- /dev/null +++ b/.config/lf/lfrc @@ -0,0 +1,171 @@ +# Luke's lf settings + + +# Note on Image Previews +# For those wanting image previews, like this system, there are four steps to +# set it up. These are done automatically for LARBS users, but I will state +# them here for others doing it manually. +# +# 1. ueberzug must be installed. +# 2. The scope file (~/.config/lf/scope for me), must have a command similar to +# mine to generate ueberzug images. +# 3. A `set cleaner` line as below is a cleaner script. +# 4. lf should be started through a wrapper script (~/.local/bin/lfub for me) +# that creates the environment for ueberzug. This command can be be aliased +# in your shellrc (`alias lf="lfub") or if set to a binding, should be +# called directly instead of normal lf. + +# Basic vars +set shellopts '-eu' +set ifs "\n" +set scrolloff 10 +set icons +set period 1 +set hiddenfiles ".*:*.aux:*.log:*.bbl:*.bcf:*.blg:*.run.xml" +set cleaner '~/.config/lf/cleaner' +set previewer '~/.config/lf/scope' +set autoquit true + +# cmds/functions +cmd open ${{ + case $(file --mime-type "$(readlink -f $f)" -b) in + 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 ;; + text/*|application/json|inode/x-empty|application/x-subrip) $EDITOR $fx;; + image/x-xcf) setsid -f gimp $f >/dev/null 2>&1 ;; + image/svg+xml) display -- $f ;; + image/*) rotdir $f | grep -i "\.\(png\|jpg\|jpeg\|gif\|webp\|avif\|tif\|ico\)\(_large\)*$" | + setsid -f nsxiv -aio 2>/dev/null | while read -r file; do + [ -z "$file" ] && continue + lf -remote "send select \"$file\"" + lf -remote "send toggle" + done & + ;; + audio/*|video/x-ms-asf) mpv --audio-display=no $f ;; + video/*) setsid -f mpv $f -quiet >/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/vnd.openxmlformats-officedocument.wordprocessingml.document|application/vnd.oasis.opendocument.text|application/vnd.openxmlformats-officedocument.spreadsheetml.sheet|application/octet-stream|application/vnd.oasis.opendocument.spreadsheet|application/vnd.oasis.opendocument.spreadsheet-template|application/vnd.openxmlformats-officedocument.presentationml.presentation|application/vnd.oasis.opendocument.presentation-template|application/vnd.oasis.opendocument.presentation|application/vnd.ms-powerpoint|application/vnd.oasis.opendocument.graphics|application/vnd.oasis.opendocument.graphics-template|application/vnd.oasis.opendocument.formula|application/vnd.oasis.opendocument.database) setsid -f libreoffice $fx >/dev/null 2>&1 ;; + *) for f in $fx; do setsid -f $OPENER $f >/dev/null 2>&1; done;; + esac +}} + +cmd mkdir $mkdir -p "$@" + +cmd extract ${{ + clear; tput cup $(($(tput lines)/3)); tput bold + set -f + printf "%s\n\t" "$fx" + printf "extract?[y/N]" + read ans + [ $ans = "y" ] && { + case $fx in + *.tar.bz2) tar xjf $fx ;; + *.tar.gz) tar xzf $fx ;; + *.bz2) bunzip2 $fx ;; + *.rar) unrar e $fx ;; + *.gz) gunzip $fx ;; + *.tar) tar xf $fx ;; + *.tbz2) tar xjf $fx ;; + *.tgz) tar xzf $fx ;; + *.zip) unzip $fx ;; + *.Z) uncompress $fx ;; + *.7z) 7z x $fx ;; + *.tar.xz) tar xf $fx ;; + esac + } +}} + +cmd delete ${{ + clear; tput cup $(($(tput lines)/3)); tput bold + set -f + printf "%s\n\t" "$fx" + printf "delete?[y/N]" + read ans + [ $ans = "y" ] && rm -rf -- $fx +}} + +cmd moveto ${{ + clear; tput cup $(($(tput lines)/3)); tput bold + set -f + clear; echo "Move to where?" + dest="$(sed -e 's/\s*#.*//' -e '/^$/d' -e 's/^\S*\s*//' ${XDG_CONFIG_HOME:-$HOME/.config}/shell/bm-dirs | fzf | sed 's|~|$HOME|')" && + for x in $fx; do + eval mv -iv \"$x\" \"$dest\" + done && + notify-send "🚚 File(s) moved." "File(s) moved to $dest." +}} + +cmd copyto ${{ + clear; tput cup $(($(tput lines)/3)); tput bold + set -f + clear; echo "Copy to where?" + dest="$(sed -e 's/\s*#.*//' -e '/^$/d' -e 's/^\S*\s*//' ${XDG_CONFIG_HOME:-$HOME/.config}/shell/bm-dirs | fzf | sed 's|~|$HOME|')" && + for x in $fx; do + eval cp -ivr \"$x\" \"$dest\" + done && + notify-send "📋 File(s) copied." "File(s) copies to $dest." +}} + +cmd setbg "$1" + +cmd bulkrename ${{ + tmpfile_old="$(mktemp)" + tmpfile_new="$(mktemp)" + + [ -n "$fs" ] && fs=$(basename -a $fs) || fs=$(ls) + + echo "$fs" > "$tmpfile_old" + echo "$fs" > "$tmpfile_new" + $EDITOR "$tmpfile_new" + + [ "$(wc -l < "$tmpfile_old")" -eq "$(wc -l < "$tmpfile_new")" ] || { rm -f "$tmpfile_old" "$tmpfile_new"; exit 1; } + + paste "$tmpfile_old" "$tmpfile_new" | while IFS="$(printf '\t')" read -r src dst + do + [ "$src" = "$dst" ] || [ -e "$dst" ] || mv -- "$src" "$dst" + done + + rm -f "$tmpfile_old" "$tmpfile_new" + lf -remote "send $id unselect" +}} + +# Bindings +map <c-f> $lf -remote "send $id select \"$(fzf)\"" +map J $lf -remote "send $id cd $(sed -e 's/\s*#.*//' -e '/^$/d' -e 's/^\S*\s*//' ${XDG_CONFIG_HOME:-$HOME/.config}/shell/bm-dirs | fzf)" +map gh +map g top +map D delete +map E extract +map C copyto +map M moveto +map <c-n> push :mkdir<space>""<left> +map <c-r> reload +map <c-s> set hidden! +map <enter> shell +map x $$f +map X !$f +map o &mimeopen "$f" +map O $mimeopen --ask "$f" + +map A :rename; cmd-end # at the very end +map c push A<c-u> # new rename +map I :rename; cmd-home # at the very beginning +map i :rename # before extension +map a :rename; cmd-right # after extension +map B bulkrename +map b $setbg $f + +map <c-e> down +map <c-y> up +map V push :!nvim<space> + +map W $setsid -f $TERMINAL >/dev/null 2>&1 + +map Y $printf "%s" "$fx" | xclip -selection clipboard + +# Source Bookmarks +source "~/.config/lf/shortcutrc" + +set sort mtime +set reverse true diff --git a/.config/newsboat/config b/.config/newsboat/config new file mode 100644 index 0000000..d8dbecd --- /dev/null +++ b/.config/newsboat/config @@ -0,0 +1,55 @@ +#show-read-feeds no +auto-reload yes + +external-url-viewer "urlscan -dc -r 'linkhandler {}'" + +bind-key j down +bind-key k up +bind-key j next articlelist +bind-key k prev articlelist +bind-key J next-feed articlelist +bind-key K prev-feed articlelist +bind-key G end +bind-key g home +bind-key d pagedown +bind-key u pageup +bind-key l open +bind-key h quit +bind-key a toggle-article-read +bind-key n next-unread +bind-key N prev-unread +bind-key D pb-download +bind-key U show-urls +bind-key x pb-delete + +color listnormal cyan default +color listfocus black yellow standout bold +color listnormal_unread blue default +color listfocus_unread yellow default bold +color info red black bold +color article white default bold + +browser linkhandler +macro , open-in-browser +macro t set browser "qndl" ; open-in-browser ; set browser linkhandler +macro a set browser "tsp yt-dlp --embed-metadata -xic -f bestaudio/best --restrict-filenames" ; open-in-browser ; set browser linkhandler +macro v set browser "setsid -f mpv" ; open-in-browser ; set browser linkhandler +macro w set browser "lynx" ; open-in-browser ; set browser linkhandler +macro d set browser "dmenuhandler" ; open-in-browser ; set browser linkhandler +macro c set browser "echo %u | xclip -r -sel c" ; open-in-browser ; set browser linkhandler +macro C set browser "youtube-viewer --comments=%u" ; open-in-browser ; set browser linkhandler +macro p set browser "peertubetorrent %u 480" ; open-in-browser ; set browser linkhandler +macro P set browser "peertubetorrent %u 1080" ; open-in-browser ; set browser linkhandler + +highlight all "---.*---" yellow +highlight feedlist ".*(0/0))" black +highlight article "(^Feed:.*|^Title:.*|^Author:.*)" cyan default bold +highlight article "(^Link:.*|^Date:.*)" default default +highlight article "https?://[^ ]+" green default +highlight article "^(Title):.*$" blue default +highlight article "\\[[0-9][0-9]*\\]" magenta default bold +highlight article "\\[image\\ [0-9]+\\]" green default bold +highlight article "\\[embedded flash: [0-9][0-9]*\\]" green default bold +highlight article ":.*\\(link\\)$" cyan default +highlight article ":.*\\(image\\)$" blue default +highlight article ":.*\\(embedded flash\\)$" magenta default diff --git a/.config/newsboat/to-do b/.config/newsboat/to-do new file mode 100644 index 0000000..1e1cd98 --- /dev/null +++ b/.config/newsboat/to-do @@ -0,0 +1,9 @@ +https://www.mql5.com/de/forum +https://www.hackers-arise.com/forum +https://www.kuketz-blog.de/feed/ +https://lukesmith.xyz/index.xml +https://www.buzer.de/gesetze_feed.xml +https://tradingeconomics.com/rss/feeds.aspx +https://www.youtube.com/feeds/videos.xml?user=jvscholz +https://www.youtube.com/feeds/videos.xml?user=Hamza97 +https://www.youtube.com/feeds/videos.xml?user=phoenixhou4486 diff --git a/.config/newsboat/urls b/.config/newsboat/urls new file mode 100644 index 0000000..0015178 --- /dev/null +++ b/.config/newsboat/urls @@ -0,0 +1,6 @@ +https://lukesmith.xyz/index.xml +https://www.youtube.com/feeds/videos.xml?channel_id=UCcaTUtGzOiS4cqrgtcsHYWg +https://www.youtube.com/feeds/videos.xml?channel_id=UCWsslCoN3b_wBaFVWK_ye_A +https://www.youtube.com/feeds/videos.xml?channel_id=UCqLqngg7htY6Pol4ZBJKwHA +https://www.youtube.com/feeds/videos.xml?channel_id=UC2eYFnH61tmytImy1mTYvhA +https://www.youtube.com/feeds/videos.xml?channel_id=UCMrY-JHG6bF3LEdlDvhv7XA diff --git a/.config/sharx/commands.md b/.config/sharx/commands.md new file mode 100644 index 0000000..b42f447 --- /dev/null +++ b/.config/sharx/commands.md @@ -0,0 +1,491 @@ +# Sharks - Navigation + +`/home/artix/.zprofile` - Profile file that runs on login and includes enviromental variables and other stuff. +`/home/artix/.config/` - Configurations obviously. +`/home/artix/.local/src` - Compiled software utilities. +`/home/artix/.local/bin/` - All scripts that feature a automated workflow. +`/home/artix/.local/bin/statusbar` - All configuration Files for [dmenu](/home/artix/.local/bin/statusbar) the statusbar. + +# Sharks - scripts, commands and bindings + +Sharks pre-installed utilities are in alignment to the unixcism. Directorys of Scripts and commands are indicaded. + +[TOC] + +## autostart: + +#### remaps + +Remaps keys on startup, set on `/home/artix/.local/bin/remaps` + +#### dmenupass + +Using dmenu as a password prompter, set on `/home/artix/.local/bin/dmenupass` + +## scripts: + +#### maimpick: + +`shift PrintScreen` - Make screenshot + +#### backup + +`backup <directory>` - will make a compressed backup of given directory + +#### compiler + +Compiles .tex. groff (.mom, .ms), .rmd, .md, .org. Opens .sent files as sent presentations + +#### displayselect + +`displayselect` - A UI for detecting and selecting all displays + +#### dmenuhandler + +`dmenuhandler <link>` - Give it any link and dmenu outputs programms to open it + +#### dmenunicode + + `dmenuunicode` - The famous "*get a menu of emojis to copy*" script + +#### getkeys + +`getkeys <software>` - Outputs all shotcut keys of given utility, configurable man alternative + +#### noisereduce + +`noisereduce <input video file> <output video file>` - Reduces background noices of given video file + +#### slider + +`slider -i <file.txt>` - Give a file with images and timecodes and creates a video slideshow of them + +#### mounter + +`no argument` - Can mount decrypted drives or usb or anything + +#### rssadd + +`rssadd <rss-link>` - Add rss-feeds to newsboat from the command line + +#### transadd + +`transadd <torrent-link>` - Add torrents to transmission from the command line + +## bindings: + +#### lfub: + +`y` - copy +`p` - paste +`a` - create +`A` - mkdir +`en` - open +`bs` - go back one directory +`D` - delete +`C` - copy +`X` - Cut +`P` - paste +`r` - rename +`/` - search +`q` - quit +`m` - mark +`h`, `j`, `k` ,`l` - to move around and enter directories and open files. +`g`, `G`, `<c d>`, `<c u>` - movement like in vim. +`w` - drop into a terminal in the current directory. + `<c d>` in the terminal, you will return to lf +`<crtl n>` - new directory +`V` - new file with `nvim` +`sp` - select files: + `d` - cut files to lf's clipboard + `y` - yank files to lf's clipboard + `p` - paste/move copied/cut files + `C` - copy selected files to a bookmarked directory + `M` - move selected files to a bookmarked directory + `Y` - copy text names of selected files to the system clipboard. + +**Renaming files:** +`o` - rename the selected file +`A` - rename the selected file, starting at end +`a` - rename the selected file, starting after the extension +`I` - rename the selected file, starting at beginning +`i` - rename the selected file, starting before extension +`B` - bulk rename: use vidir to mass edit all files in the directory +`s` - sort files by a different metric +`z` - show extra data or hidden files + +#### st (zsh): + +*includes* `.config/shell/` + +`<alt page-up/page-down>` - faster scroll +`<alt c j/k>` - decrease or increase font size +`<alt c>` - copy selected text to clipboard +`<alt c l>` - clear terminal +`<alt insert>` - paste clipboard contents +`<alt l>` - open a link +`<alt y>` - copy a link +`<alt o>` - copy the output from a recent command +`<alt a/s>` - decrease/increase transparency +`<crtl-l>` - clear-screen +`<crtl-a>` - beginning-of-line + +#### vim: + +*mapping*: +`<crtl h>` - wechsle zum Fenster links +`<crtl j>` - wechsle zum Fenster unten +`<crtl k>` - wechsle zum Fenster oben +`<crtl l>` - wechsle zum Fenster rechts +`<, n>` - öffne oder schließe NERDTree +`b` - öffne die Bibliotheksdatei in einem vertikalen Split +`,r` - öffne die Referenzdatei in einem vertikalen Split +`,f` - aktiviere den Goyo-Modus für fokussiertes Schreiben +`,h` - toggle die Anzeige der unteren Statusleiste +`,o` - toggle die Rechtschreibprüfung (Englisch) +`Q` - ersetze Ex-Mode mit dem `gq` Befehl (Formatierung) +`S` - ersetze alle Vorkommen eines Suchmusters in der Datei +`,,` - füge `<++>` ein und platziere den Cursor an der richtigen Stelle für den nächsten Text +`,c` - speichere die Datei und kompiliere das Dokument (z.B. LaTeX, Markdown) +`,p` - öffne das entsprechende PDF oder HTML-Dokument der aktuellen Datei +`,s` - überprüfe die aktuelle Datei mit `shellcheck` +`w!!` - speichere eine Datei mit Root-Rechten +`,v` - öffne den Vimwiki-Index +`,`d - toggle DeadKeys +`<, i>` - toggle IPA (International Phonetic Alphabet) Eingabe +`<, q>` - toggle Prosa-Modus +`Q` - ersetze Ex-Mode mit dem `gq` Befehl (Formatierung) +`S` - ersetze alle Vorkommen eines Suchmusters in der Datei +`,,` - füge `<++>` ein und platziere den Cursor an der richtigen Stelle für den nächsten Text +`,`c - speichere die Datei und kompiliere das Dokument (z.B. LaTeX, Markdown) +`,`p - öffne das entsprechende PDF oder HTML-Dokument der aktuellen Datei + +*normal-mode*: +`k` - up +`h` - left +`l` - right +`j` - down +`w` - next start of word +`W` - next start of whitespace-delimited word +`e` - next end of word +`E` - next end of whitespace-delimited word +`b` - previous start of word +`B` - previous start of whitespace-delimited word +`:0` - start of line +`:$` - end of line +`gg` - go to first line in file +`G` - go to end of file +`gk` - move down one displayed line +`gj` - move up one displayed line +`a` - append after the cursor +`A` - append at the end of the line + +*insert-mode*: +`i` - insert before the cursor +`I` - insert at the beginning of the line +`o` - create a new line under the cursor +`O` - create a new line above the cursor +`R` - enter insert mode but replace instead of inserting chars +`u` - undo +`yy` - yank (copy) a line +`y {motion}` - yank text that {motion} moves over +`p` - paste after cursor +`P` - paste before cursor +`x` - delete a character +`dd` - delete a line + +#### dwm: + +`<mod j/k>` – cycle thru windows +`<mod rc>` - drag window around (floating mode) +`<mod S>` – un-/make a window float +`<mod l>` - change window size +`<mod S>` – make selected window the master +`<mod h/l>` – change width of master window +`<mod z/x>` – increase/decrease gaps (not permament) +`<mod a>` – toggle gaps (not permament) +`<mod 1-9>` - send window to workspace 1-9 +`<mod shift 1-9>` - take window with you to workspace 1-9 +`<mod b>` – toggle statusbar +`<mod f>` - fullscreen a window +`<mod q>` - cloze a window + +**utilities:** +`<m k>` - kdenlive +`<m w>` - firefox +`<m e>` - dolphin +`<m en>` - st + +**dwmblocks:** +`<mod a>` - agenda +`<mod m>` - mail +`<mod r>` - readme +`<mod u>` - updater + +#### surf: + +`<shift ctrl enter>` - New tab +`<shift ctrl l>` - Next higher number tab +`<shift ctrl h>` - Next lower number tab +Ctrl+Tab: Toggle between last 2 tabs +Ctrl+1: Switch to tab 1 +Ctrl+2: Switch to tab 2 + +- Ctrl+3: Switch to tab 3, etc. +- Ctrl+q: Close this tab +- Ctrl+t: Tab picklist + +- Ctrl+g: Go to URL (field on screen's upper left (not the browser window) opens for you to type) +- Ctrl+h: Previous page in history, like back button on other browsers +- Ctrl+r: Refresh/reload. +- Ctrl+-: Zoom out a little +- Shift+Ctrl++: Zoom in a little +- Shift+Ctrl+q: Normal zoom + +- Ctrl+g: Go to URL (field on screen's upper left (not the browser window) opens for you to type) +- Ctrl+p: Go to URL in cut and paste clipboard +- Ctrl+y: Put current website URL into cut and paste clipboard +- Ctrl+h: Previous page in history, like back button on other browsers +- Ctrl+l: Undo the last Ctrl+h (go later in history) +- Ctrl+r: Refresh/reload from cache. +- Ctrl+Shift+r: Refresh/reload *without* cache +- Ctrl+-: Zoom out a little +- Shift+Ctrl++: Zoom in a little +- Shift+Ctrl+q: Normal zoom, and note that this might not be the zoom the browser opened with, if the browser was set to open with a non-normal zoom. +- Ctrl+o: Toggle "view source" +- Ctrl+j: Down a little +- Ctrl+k: Up a little +- Ctrl+Space: Down a lot +- Ctrl+b: Up a lot +- Ctrl+i: Scroll left a little +- Ctrl+u: Scroll right a little +- F11: Toggle fullscreen +- Shift+Ctrl+b: Toggle scrollbars +- Shift+Ctrl+g: Toggle geolocation + +#### gimp: + +`<crtl l>` - transfomieren +`<crtl i>` - invertieren + +#### scrot: + +`<mod s>` - make screenshot + +#### dfcitx: + +`<crtl space>` - Change global language input + +#### typora: + +`<c ,>` - settings +`<c h>` - search for input +`<crtl alt c>` - convert selected text to code +`<crtl 1-6>` - convert to heading 1-6 + +#### mpv: + +`<a ->` - Zoom Out +`<a +>` - Zoom In +`o` - show progress +`s` - Screenshot the current frame +`S` - Cycle trough subtitels (.config/mpv/mpv.conf) +`f` - toggle Fullscreen + +#### sxiv: + +`b` - hide bar +`W` - fit image to window +`<` - rotate image by 90 degrees. +`?` - rotate image by 180 degrees. +`+` - zoom Out +`-` - zoom out +`q` - quit sxiv + +#### zathura: + +`sp` - next page +`D` - toggle double-page mode +`r` - reload +`R` - rotate +`K` - zoom in +`J` - zoom out +`i` - invert colour +`p` - print +`g` - go to top +`z` - zathura + +#### neomutt: + +`adduser mail -m -a mail bryan` - Add user bryan and add him to mail + +#### calibre + +`<crtl t>` - inhaltsverzeichnis +`<crtl r>` - reload book + +#### audacity: + +`<crtl k>` - open keybindings menu +`<crtl r>` - start recording +`<crtl s>` - add new spur +`<crtl e>` - export + +#### kdenlive + +`<c a k>` - open keybindings menu +`<c a u>` - add subtitels +`<c a h>` - add helpline +`<c a en>` - render video +`<s lc>` - bulk select +`<c x>` - cutting tool +`<c i>` - un-/hide inhalt +`<c e>` - un-/hide effects +`<c m>` - un-/hide menubar +`<c ü>` - un-/hide effect configuration +`<c +>` - zoom in +`<c ->` - zoom out + +#### libreoffice: + +`<c k>` - open shortcut menu +`<c a left>` - select to beginning of line +`<c B>` - buchstaben kleiner stellen +`<c e>` - export directly as PDF +`<c 1-6>` - convert to heading 1-6 +`<c o>` - optimal view + +#### goldendict: + +` <crtl selct>` - opens word in goldendict +`<crtl A>` - sends word to anki-deck + +## commands: + +#### mv: + +`mv [filename]` - Rename file in cd + +#### rm: + +`rm [filename]` - Remove file +`rm -r [directory]` - Remove directory + +#### ln: + +`ln -s a/directory/ ~/to/another` - Link a directory to another +`sudo ln -s /home/script /usr/local/bin/script` - symlink script to global utitlites + +#### tar: + +`tar -czvf /var/backups/dokuwiki_pages_backup.tar.gz /var/www/dokuwiki/data/pages` - Erstelle ein Backup eines Directorys +`tar -xzvf /var/backups/dokuwiki_pages_backup.tar.gz -C /var/www/dokuwiki/data/pages` - Spule das Backup ins Directory + +#### vim: + +`:%d` - delete everything in file +`:%y` - copy everything in file + +#### adb: + +`adb backup -apk -noshared -all` - make backup of phone but without files +`adb restore backup.ab` - Restore from backup + +#### man: + +`mandb` - aktualisiere Datenbank + +#### git: + +`git clone https://github.com/repository` - clone repository +`git remote set-url origin git@github.com:marlonivo/example.git` - link your local-folder with server-repo +`git-sync` - git pull --no-rebase origin main && git add . && git commit -m "Update" && git push origin main + +#### git-lfs: + +`git lfs install # in repo` - install lfs +`git lfs track "file.txt"` - first track +`git add .gitattributes` - then add this +`git add file.txt` - then add the file +`git commit -m "update"` - then commit +`git push origin main` - then push + +#### php: + +`php -S localhost:8000` - start webserver on https://localhost:8000 #can be any number between 1-9999 + +#### ssh: + +`m-shh` - connect (as root) to marlonivo.xyz +`ssh email@marlonivo.xyz` - connect (as mail) to marlonivo.xyz + +#### yt-dl: + +`yt [URL]` - download yt video from [URL] +`yt-mp3 [URL]` - download audio of yt video from [URL] + +#### date: + +`date MMDDhhmmYYYY` - set time +`date -u` - set time to utc + +#### rsync: + +*includes `.config/shell/aliasrc`:* + +`m-wesbite-sync` - push to marlonivo.xyz +`s-website-sync` - push to sharks.marlonivo.xyz +`d-website-pull` - pull from wiki.marlonivo.xyz +`d-wesbite-push` - push to wiki.marlonivo.xyz +`lib-push` - push to library.marlonivo.xyz + +#### sqlite: + +`CREATE TABLE tabelle` - create a new table called "tabelle" +`ALTER TABLE tablle ADD COLUMN column_name TEXT;` - Add a column called column_name to "tabelle" +`PRAGMA table_info(tabelle);` - look at the table called "tabelle" + +#### fdisk: + +`sudo fdisk` - start partitan manipulator + +#### artix: + +`useradd -G mail -m user` - Add a user called "user" to a group called "mail" +`passwd [user]` - Give user a password +`deluser user` - delete user + +#### pandoc: + + + +#### ffmpeg: + +`ffmpeg -i input.MP4 -vf "transpose=1" out.MP4` - Turn video 90 clockwise +`ffmpeg -i track.mp3 -i cover.jpg -map 0:a -map 1:v -c:a copy -c:v mjpeg -metadata:s:v title="Album Cover" -metadata:s:v comment="Cover" output.mp3` - Give mp3 a cover +`ffmpeg -i in.jpg -vf "transpose=1" output.jpg` - Turn picture 90 clockwise +`ffmpeg -i in.MP4 -vf "scale=trunc(iw/10)*2:trunc(ih/10)*2" out.MP4` - compress video-quality to a fitfth +`ffmpeg -i in.jpg -q:v 10 output.jpg` - Compress Picture (up to 31 Levels) +`ffmpeg -i in.MP4 -vf "crop=iw-96:ih:96:0" out.MP4` - Crop video 5% on the left site +`ffmpeg -f lavfi -i color=c=green:s=1280x720:d=80 -vf "drawtext=fontfile=/path/to/font.ttf:` - Create video with text +`ffmpeg -i in.MP4 -ss 00:00:00 -t 00:00:60 -c copy out.MP4` - create mp4 with the first 60 seconds of input.mp4 +`ffmpeg -i in.MP4 -map 0:v:0 -map 0:a:0 -c:v copy -c:a aac -b:a 192k out.MP4` - Extract only video and audio from mp4 + +#### pacman: + +`pacman -S [package]` - Install from Arch Repository +`pacman -Syyu` - Update System & Packages +`pacman -Rns $(pacman -Qdtq)` - Autoremove Reqiuerements that are no longer required +`pacman -Qm` - List packages installed + +#### imagemagick + +`convert -density 300 input.pdf -quality 100 output.png` - hochauflösende konvertierung + +#### bluetoothctl: + +`power on` - turn bluetooth on +`agent on` - set agent to on +`default-agent` - set default-agent +`scan on` - scan for available devices +`dis/connect [XX:XX:XX:XX:XX:XX]` - dis/connect device diff --git a/.config/shell/aliasrc b/.config/shell/aliasrc new file mode 100644 index 0000000..09f9a32 --- /dev/null +++ b/.config/shell/aliasrc @@ -0,0 +1,61 @@ +#!/bin/sh + +# Use neovim for vim if present. +[ -x "$(command -v nvim)" ] && alias vim="nvim" vimdiff="nvim -d" + +# Use $XINITRC variable if file exists. +[ -f "$XINITRC" ] && alias startx="startx $XINITRC" + +[ -f "$MBSYNCRC" ] && alias mbsync="mbsync -c $MBSYNCRC" + +# sudo not required for some system commands +for command in mount umount sv pacman updatedb su shutdown poweroff reboot ; do + alias $command="sudo $command" +done; unset command + +se() { + choice="$(find ~/.local/bin -mindepth 1 -printf '%P\n' | fzf)" + [ -f "$HOME/.local/bin/$choice" ] && $EDITOR "$HOME/.local/bin/$choice" + ;} + +# Verbosity and settings that you pretty much just always are going to want. +alias \ + cp="cp -iv" \ + mv="mv -iv" \ + rm="rm -vI" \ + bc="bc -ql" \ + rsync="rsync -vrPlu" \ + mkd="mkdir -pv" \ + yt="yt-dlp --embed-metadata -i" \ + yta="yt -x -f bestaudio/best" \ + ytt="yt --skip-download --write-thumbnail" \ + ffmpeg="ffmpeg -hide_banner" + +# Colorize commands when possible. +alias \ + ls="ls -hN --color=auto --group-directories-first" \ + grep="grep --color=auto" \ + diff="diff --color=auto" \ + ccat="highlight --out-format=ansi" \ + ip="ip -color=auto" + +# These common commands are just too long! Abbreviate them. +alias \ + ka="killall" \ + g="git" \ + trem="transmission-remote" \ + YT="youtube-viewer" \ + sdn="shutdown -h now" \ + e="$EDITOR" \ + v="$EDITOR" \ + p="pacman" \ + xi="sudo xbps-install" \ + xr="sudo xbps-remove -R" \ + xq="xbps-query" \ + z="zathura" + +alias \ + lf="lfub" \ + magit="nvim -c MagitOnly" \ + ref="shortcuts >/dev/null; source ${XDG_CONFIG_HOME:-$HOME/.config}/shell/shortcutrc ; source ${XDG_CONFIG_HOME:-$HOME/.config}/shell/zshnameddirrc" \ + weath="less -S ${XDG_CACHE_HOME:-$HOME/.cache}/weatherreport" \ diff --git a/.config/shell/bm-dirs b/.config/shell/bm-dirs new file mode 100644 index 0000000..9d212ec --- /dev/null +++ b/.config/shell/bm-dirs @@ -0,0 +1,14 @@ +# You can add comments to these files with # +cac ${XDG_CACHE_HOME:-$HOME/.cache} +cf ${XDG_CONFIG_HOME:-$HOME/.config} +D ${XDG_DOWNLOAD_DIR:-$HOME/Downloads} +d ${XDG_DOCUMENTS_DIR:-$HOME/Documents} +dt ${XDG_DATA_HOME:-$HOME/.local/share} +rr $HOME/.local/src +h $HOME +m ${XDG_MUSIC_DIR:-$HOME/Music} +mn /mnt +pp ${XDG_PICTURES_DIR:-$HOME/Pictures} +sc $HOME/.local/bin +src $HOME/.local/src +vv ${XDG_VIDEOS_DIR:-$HOME/Videos} diff --git a/.config/shell/bm-files b/.config/shell/bm-files new file mode 100644 index 0000000..2e8864b --- /dev/null +++ b/.config/shell/bm-files @@ -0,0 +1,23 @@ +# These files automatically update when edited/saved in vim: + +# keys filename description +bf ${XDG_CONFIG_HOME:-$HOME/.config}/shell/bm-files # This file, a list of bookmarked files +bd ${XDG_CONFIG_HOME:-$HOME/.config}/shell/bm-dirs # A list of bookmarked directories similar to this file +cfx ${XDG_CONFIG_HOME:-$HOME/.config}/x11/xresources # Colors, themes and variables for X11 +cfb ~/.local/src/dwmblocks/config.h # dwmblocks: the status bar for dwm + + +# These do not update automatically, but on the next new instance of a program: + +cfv ${XDG_CONFIG_HOME:-$HOME/.config}/nvim/init.vim # vim/neovim config +cfz $ZDOTDIR/.zshrc # zsh (shell) config +cfa ${XDG_CONFIG_HOME:-$HOME/.config}/shell/aliasrc # aliases used by zsh (and potentially other shells) +cfp ${XDG_CONFIG_HOME:-$HOME/.config}/shell/profile # profile file for login settings for zsh +cfm ${XDG_CONFIG_HOME:-$HOME/.config}/mutt/muttrc # mutt (email client) config +cfn ${XDG_CONFIG_HOME:-$HOME/.config}/newsboat/config # newsboat (RSS reader) +cfu ${XDG_CONFIG_HOME:-$HOME/.config}/newsboat/urls # RSS urls for newsboat +cfmb ${XDG_CONFIG_HOME:-$HOME/.config}/ncmpcpp/bindings # ncmpcpp (music player) keybinds file +cfmc ${XDG_CONFIG_HOME:-$HOME/.config}/ncmpcpp/config # ncmpcpp (music player) config +cfl ${XDG_CONFIG_HOME:-$HOME/.config}/lf/lfrc # lf (file browser) config +cfL ${XDG_CONFIG_HOME:-$HOME/.config}/lf/scope # lf's scope/preview file +cfX ${XDG_CONFIG_HOME:-$HOME/.config}/nsxiv/exec/key-handler # nsxiv (image viewer) key/script handler diff --git a/.config/shell/inputrc b/.config/shell/inputrc new file mode 100644 index 0000000..f9b94dd --- /dev/null +++ b/.config/shell/inputrc @@ -0,0 +1,19 @@ +$include /etc/inputrc +set editing-mode vi +$if mode=vi + +set show-mode-in-prompt on +set vi-ins-mode-string \1\e[6 q\2 +set vi-cmd-mode-string \1\e[2 q\2 + +set keymap vi-command +# these are for vi-command mode +Control-l: clear-screen +Control-a: beginning-of-line + +set keymap vi-insert +# these are for vi-insert mode +Control-l: clear-screen +Control-a: beginning-of-line + +$endif diff --git a/.config/shell/profile b/.config/shell/profile new file mode 100644 index 0000000..ac5cf86 --- /dev/null +++ b/.config/shell/profile @@ -0,0 +1,87 @@ +#!/bin/sh +# +# zprofile: Runs on login and includes environmental variables and autostart. +# +# ──────────────────────────────────── Enviromental Variables ──────────────────────────────────── +# +# Set GTK and QT Input Method Modules: +export GTK_IM_MODULE=fcitx +export QT_IM_MODULE=fcitx +export XMODIFIERS=@im=fcitx + +# Add all directories in `~/.local/bin` to $PATH: +export PATH="$PATH:$(find ~/.local/bin -type d | paste -sd ':')" + +# Surf configs: +export SURF_STYLE="$HOME/.surf/css-styles" + +# Default programs: +export EDITOR="nvim" +export TERMINAL="st" +export TERMINAL_PROG="st" +export BROWSER="firefox" + +# Clean-up: +export ANSIBLE_CONFIG="$XDG_CONFIG_HOME/ansible/ansible.cfg" +export PASSWORD_STORE_DIR="$XDG_DATA_HOME/password-store" +export NOTMUCH_CONFIG="$XDG_CONFIG_HOME/notmuch-config" +export GTK2_RC_FILES="$XDG_DATA_HOME/.config/gtk-2.0/gtkrc" +export PYTHONSTARTUP="$XDG_CONFIG_HOME/python/pythonrc" +export SQLITE_HISTORY="$XDG_DATA_HOME/sqlite_history" +export INPUTRC="$XDG_CONFIG_HOME/shell/inputrc" +export ANDROID_USER_HOME="$XDG_DATA_HOME"/android +export XDG_CONFIG_HOME="$HOME/.config" +export XDG_DATA_HOME="$HOME/.local/share" +export XDG_CACHE_HOME="$HOME/.cache" +export XINITRC="$XDG_CONFIG_HOME/x11/xinitrc" +export WGETRC="$XDG_CONFIG_HOME/wget/wgetrc" +export TMUX_TMPDIR="$XDG_RUNTIME_DIR" +export CARGO_HOME="$XDG_DATA_HOME/cargo" +export GOPATH="$XDG_DATA_HOME/go" +export GOMODCACHE="$XDG_CACHE_HOME/go/mod" +export UNISON="$XDG_DATA_HOME/unison" +export HISTFILE="$XDG_DATA_HOME/history" +export MBSYNCRC="$XDG_CONFIG_HOME/mbsync/config" +export ELECTRUMDIR="$XDG_DATA_HOME/electrum" +export GNUPGHOME="$XDG_DATA_HOME/.config/gnupg" +export ZDOTDIR="$XDG_DATA_HOME/.config/zsh" +export GRADLE_USER_HOME="$XDG_DATA_HOME"/gradle +export XAUTHORITY="$XDG_RUNTIME_DIR"/Xauthority +alias adb='HOME="$XDG_DATA_HOME"/android adb' + +# Program settings: +export SUDO_ASKPASS="$HOME/.local/bin/dmenupass" +export FZF_DEFAULT_OPTS="--layout=reverse --height 40%" +export LESS="R" +export LESS_TERMCAP_mb="$(printf '%b' '[1;31m')" +export LESS_TERMCAP_md="$(printf '%b' '[1;36m')" +export LESS_TERMCAP_me="$(printf '%b' '[0m')" +export LESS_TERMCAP_so="$(printf '%b' '[01;44;33m')" +export LESS_TERMCAP_se="$(printf '%b' '[0m')" +export LESS_TERMCAP_us="$(printf '%b' '[1;32m')" +export LESS_TERMCAP_ue="$(printf '%b' '[0m')" +export LESSOPEN="| /usr/bin/highlight -O ansi %s 2>/dev/null" +export QT_QPA_PLATFORMTHEME="gtk2" # Have QT use gtk2 theme. +export AWT_TOOLKIT="MToolkit wmname LG3D" # May have to install wmname +export _JAVA_AWT_WM_NONREPARENTING=1 # Fix for Java applications in dwm + +# ───────────────────────────────────────────── Configurations ──────────────────────────────────────────────── + +# Set screen DPI: +xrandr --dpi 96 + +# Autostart Cronjobs +autostart="newsup checkup" + +# Autostart daemons +autostart="transmission-daemon remapd xcompmgr dunst unclutter pipewire" + +for program in $autostart; do + pidof -sx "$program" || "$program" & +done >/dev/null 2>&1 + +# Start graphical server on user's current tty if not already running: +[ "$(tty)" = "/dev/tty1" ] && ! pidof -s Xorg >/dev/null 2>&1 && exec startx "$XINITRC" + +# Switch escape and caps if tty and no passwd required: +sudo -n loadkeys "$XDG_DATA_HOME/sharks/ttymaps.kmap" 2>/dev/null diff --git a/.config/shell/shortcutrc b/.config/shell/shortcutrc new file mode 100644 index 0000000..f754601 --- /dev/null +++ b/.config/shell/shortcutrc @@ -0,0 +1,30 @@ +# vim: filetype=sh +alias cac="cd /home/artix/.cache && ls -A" \ +cf="cd /home/artix/.config && ls -A" \ +D="cd /home/artix/Downloads && ls -A" \ +d="cd /home/artix/Documents && ls -A" \ +dt="cd /home/artix/.local/share && ls -A" \ +rr="cd /home/artix/.local/src && ls -A" \ +h="cd /home/artix && ls -A" \ +m="cd /home/artix/Music && ls -A" \ +mn="cd /mnt && ls -A" \ +pp="cd /home/artix/Pictures && ls -A" \ +sc="cd /home/artix/.local/bin && ls -A" \ +src="cd /home/artix/.local/src && ls -A" \ +vv="cd /home/artix/Videos && ls -A" \ +bf="$EDITOR /home/artix/.config/shell/bm-files" \ +bd="$EDITOR /home/artix/.config/shell/bm-dirs" \ +cfx="$EDITOR /home/artix/.config/x11/xresources" \ +cfb="$EDITOR ~/.local/src/dwmblocks/config.h" \ +cfv="$EDITOR /home/artix/.config/nvim/init.vim" \ +cfz="$EDITOR /home/artix/.config/zsh/.zshrc" \ +cfa="$EDITOR /home/artix/.config/shell/aliasrc" \ +cfp="$EDITOR /home/artix/.config/shell/profile" \ +cfm="$EDITOR /home/artix/.config/mutt/muttrc" \ +cfn="$EDITOR /home/artix/.config/newsboat/config" \ +cfu="$EDITOR /home/artix/.config/newsboat/urls" \ +cfmb="$EDITOR /home/artix/.config/ncmpcpp/bindings" \ +cfmc="$EDITOR /home/artix/.config/ncmpcpp/config" \ +cfl="$EDITOR /home/artix/.config/lf/lfrc" \ +cfL="$EDITOR /home/artix/.config/lf/scope" \ +cfX="$EDITOR /home/artix/.config/nsxiv/exec/key-handler" \ diff --git a/.config/shell/zshnameddirrc b/.config/shell/zshnameddirrc new file mode 100644 index 0000000..fcda7e2 --- /dev/null +++ b/.config/shell/zshnameddirrc @@ -0,0 +1,29 @@ +hash -d cac=/home/artix/.cache +hash -d cf=/home/artix/.config +hash -d D=/home/artix/Downloads +hash -d d=/home/artix/Documents +hash -d dt=/home/artix/.local/share +hash -d rr=/home/artix/.local/src +hash -d h=/home/artix +hash -d m=/home/artix/Music +hash -d mn=/mnt +hash -d pp=/home/artix/Pictures +hash -d sc=/home/artix/.local/bin +hash -d src=/home/artix/.local/src +hash -d vv=/home/artix/Videos +hash -d bf=/home/artix/.config/shell/bm-files +hash -d bd=/home/artix/.config/shell/bm-dirs +hash -d cfx=/home/artix/.config/x11/xresources +hash -d cfb=~/.local/src/dwmblocks/config.h +hash -d cfv=/home/artix/.config/nvim/init.vim +hash -d cfz=/home/artix/.config/zsh/.zshrc +hash -d cfa=/home/artix/.config/shell/aliasrc +hash -d cfp=/home/artix/.config/shell/profile +hash -d cfm=/home/artix/.config/mutt/muttrc +hash -d cfn=/home/artix/.config/newsboat/config +hash -d cfu=/home/artix/.config/newsboat/urls +hash -d cfmb=/home/artix/.config/ncmpcpp/bindings +hash -d cfmc=/home/artix/.config/ncmpcpp/config +hash -d cfl=/home/artix/.config/lf/lfrc +hash -d cfL=/home/artix/.config/lf/scope +hash -d cfX=/home/artix/.config/nsxiv/exec/key-handler diff --git a/.config/x11/xinitrc b/.config/x11/xinitrc new file mode 100644 index 0000000..b183f25 --- /dev/null +++ b/.config/x11/xinitrc @@ -0,0 +1,18 @@ +#!/bin/sh + +# xinitrc runs automatically when you run startx. + +# There are some small but important commands that need to be run when we start +# the graphical environment. There is a link to this file in ~/.xprofile +# because that file is run automatically if someone uses a display manager +# (login screen) and so they are needed there. To prevent doubling up commands, +# I source them here with the line below. + +if [ -f "${XDG_CONFIG_HOME:-$HOME/.config}/x11/xprofile" ]; then + . "${XDG_CONFIG_HOME:-$HOME/.config}/x11/xprofile" +else + . "$HOME/.xprofile" +fi +# Activate dbus variables +dbus-update-activation-environment --all +dbus-launch ssh-agent dwm diff --git a/.config/x11/xprofile b/.config/x11/xprofile new file mode 100644 index 0000000..d6b88c5 --- /dev/null +++ b/.config/x11/xprofile @@ -0,0 +1,17 @@ +#!/bin/sh + +# This file runs when a DM logs you into a graphical session. +# If you use startx/xinit like a Chad, this file will also be sourced. + +xrandr --dpi 96 # Set DPI. User may want to use a larger number for larger screens. +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 + +autostart="mpd xcompmgr dunst unclutter pipewire remapd" + +for program in $autostart; do + pidof -sx "$program" || "$program" & +done >/dev/null 2>&1 + +# Ensure that xrdb has finished running before moving on to start the WM/DE. +[ -n "$xrdbpid" ] && wait "$xrdbpid" diff --git a/.config/x11/xresources b/.config/x11/xresources new file mode 100644 index 0000000..611f39a --- /dev/null +++ b/.config/x11/xresources @@ -0,0 +1,156 @@ +!! Transparency (0-1): +*.alpha: 0.8 + +!! Set a default font and font size as below: +*.font: monospace:size=10 + +/* name dark light */ +/* black 0 8 */ +/* red 1 9 */ +/* green 2 10 */ +/* yellow 3 11 */ +/* blue 4 12 */ +/* purple 5 13 */ +/* cyan 6 14 */ +/* white 7 15 */ + +/* !! gruvbox: */ +/* *.color0: #1d2021 */ +/* *.color1: #cc241d */ +/* *.color2: #98971a */ +/* *.color3: #d79921 */ +/* *.color4: #458588 */ +/* *.color5: #b16286 */ +/* *.color6: #689d6a */ +/* *.color7: #a89984 */ +/* *.color8: #928374 */ +/* *.color9: #fb4934 */ +/* *.color10: #b8bb26 */ +/* *.color11: #fabd2f */ +/* *.color12: #83a598 */ +/* *.color13: #d3869b */ +/* *.color14: #8ec07c */ +/* *.color15: #ebdbb2 */ +/* *.color256: #1d2021 */ +/* *.color257: #ebdbb2 */ + +/* !! gruvbox light: */ +/* *.color0: #fbf1c7 */ +/* *.color1: #cc241d */ +/* *.color2: #98971a */ +/* *.color3: #d79921 */ +/* *.color4: #458588 */ +/* *.color5: #b16286 */ +/* *.color6: #689d6a */ +/* *.color7: #7c6f64 */ +/* *.color8: #928374 */ +/* *.color9: #9d0006 */ +/* *.color10: #79740e */ +/* *.color11: #b57614 */ +/* *.color12: #076678 */ +/* *.color13: #8f3f71 */ +/* *.color14: #427b58 */ +/* *.color15: #3c3836 */ +/* *.background: #fbf1c7 */ +/* *.foreground: #282828 */ +/* st.alpha: 0.9 */ + +/* !! brogrammer: */ +/* *.foreground: #d6dbe5 */ +/* *.background: #131313 */ +/* *.color0: #1f1f1f */ +/* *.color8: #d6dbe5 */ +/* *.color1: #f81118 */ +/* *.color9: #de352e */ +/* *.color2: #2dc55e */ +/* *.color10: #1dd361 */ +/* *.color3: #ecba0f */ +/* *.color11: #f3bd09 */ +/* *.color4: #2a84d2 */ +/* *.color12: #1081d6 */ +/* *.color5: #4e5ab7 */ +/* *.color13: #5350b9 */ +/* *.color6: #1081d6 */ +/* *.color14: #0f7ddb */ +/* *.color7: #d6dbe5 */ +/* *.color15: #ffffff */ +/* *.colorBD: #d6dbe5 */ + +/* ! base16 */ +/* *.color0: #181818 */ +/* *.color1: #ab4642 */ +/* *.color2: #a1b56c */ +/* *.color3: #f7ca88 */ +/* *.color4: #7cafc2 */ +/* *.color5: #ba8baf */ +/* *.color6: #86c1b9 */ +/* *.color7: #d8d8d8 */ +/* *.color8: #585858 */ +/* *.color9: #ab4642 */ +/* *.color10: #a1b56c */ +/* *.color11: #f7ca88 */ +/* *.color12: #7cafc2 */ +/* *.color13: #ba8baf */ +/* *.color14: #86c1b9 */ +/* *.color15: #f8f8f8 */ + +/* !! solarized */ +/* *.color0: #073642 */ +/* *.color1: #dc322f */ +/* *.color2: #859900 */ +/* *.color3: #b58900 */ +/* *.color4: #268bd2 */ +/* *.color5: #d33682 */ +/* *.color6: #2aa198 */ +/* *.color7: #eee8d5 */ +/* *.color9: #cb4b16 */ +/* *.color8: #fdf6e3 */ +/* *.color10: #586e75 */ +/* *.color11: #657b83 */ +/* *.color12: #839496 */ +/* *.color13: #6c71c4 */ +/* *.color14: #93a1a1 */ +/* *.color15: #fdf6e3 */ + +/* !! xterm */ +/* *.color0: #000000 */ +/* *.color1: #cd0000 */ +/* *.color2: #00cd00 */ +/* *.color3: #cdcd00 */ +/* *.color4: #0000cd */ +/* *.color5: #cd00cd */ +/* *.color6: #00cdcd */ +/* *.color7: #e5e5e5 */ +/* *.color8: #4d4d4d */ +/* *.color9: #ff0000 */ +/* *.color10: #00ff00 */ +/* *.color11: #ffff00 */ +/* *.color12: #0000ff */ +/* *.color13: #ff00ff */ +/* *.color14: #00ffff */ +/* *.color15: #aabac8 */ +/* *.background: #000000 */ + +/* ! Dracula Xresources palette */ +/* *.foreground: #F8F8F2 */ +/* *.background: #282A36 */ +/* *.color0: #000000 */ +/* *.color8: #4D4D4D */ +/* *.color1: #FF5555 */ +/* *.color9: #FF6E67 */ +/* *.color2: #50FA7B */ +/* *.color10: #5AF78E */ +/* *.color3: #F1FA8C */ +/* *.color11: #F4F99D */ +/* *.color4: #BD93F9 */ +/* *.color12: #CAA9FA */ +/* *.color5: #FF79C6 */ +/* *.color13: #FF92D0 */ +/* *.color6: #8BE9FD */ +/* *.color14: #9AEDFE */ +/* *.color7: #BFBFBF */ +/* *.color15: #E6E6E6 */ + +/* *.background: .color0 */ +/* *.color256: 0#1d2021 */ +/* *.color257: 15#ebdbb2 */ diff --git a/.config/zathura/zathurarc b/.config/zathura/zathurarc new file mode 100644 index 0000000..452e116 --- /dev/null +++ b/.config/zathura/zathurarc @@ -0,0 +1,15 @@ +set sandbox none +set statusbar-h-padding 0 +set statusbar-v-padding 0 +set page-padding 1 +set selection-clipboard clipboard +map u scroll half-up +map d scroll half-down +map D toggle_page_mode +map r reload +map R rotate +map K zoom in +map J zoom out +map i recolor +map p print +map g goto top diff --git a/.config/zsh/.zcompdump b/.config/zsh/.zcompdump new file mode 100644 index 0000000..0d1931b --- /dev/null +++ b/.config/zsh/.zcompdump @@ -0,0 +1,1821 @@ +#files: 795 version: 5.9 + +_comps=( +'-' '_precommand' +'.' '_source' +'5g' '_go' +'5l' '_go' +'6g' '_go' +'6l' '_go' +'8g' '_go' +'8l' '_go' +'a2ps' '_a2ps' +'aaaa' '_hosts' +'aap' '_aap' +'abcde' '_abcde' +'ack' '_ack' +'ack2' '_ack' +'ack-grep' '_ack' +'ack-standalone' '_ack' +'acpi' '_acpi' +'acpitool' '_acpitool' +'acroread' '_acroread' +'adb' '_adb' +'add-zle-hook-widget' '_add-zle-hook-widget' +'add-zsh-hook' '_add-zsh-hook' +'admin' '_sccs' +'ali' '_mh' +'alias' '_alias' +'amaya' '_webbrowser' +'analyseplugin' '_analyseplugin' +'animate' '_imagemagick' +'anno' '_mh' +'ansible' '_ansible' +'ansible-config' '_ansible' +'ansible-console' '_ansible' +'ansible-doc' '_ansible' +'ansible-galaxy' '_ansible' +'ansible-inventory' '_ansible' +'ansible-playbook' '_ansible' +'ansible-pull' '_ansible' +'ansible-vault' '_ansible' +'ant' '_ant' +'antiword' '_antiword' +'aodh' '_openstack' +'aoss' '_precommand' +'apache2ctl' '_apachectl' +'apachectl' '_apachectl' +'aplay' '_alsa-utils' +'apm' '_apm' +'appletviewer' '_java' +'apropos' '_man' +'apvlv' '_pdf' +'arduino-ctags' '_ctags' +'arecord' '_alsa-utils' +'arena' '_webbrowser' +'_arguments' '__arguments' +'arp' '_arp' +'arping' '_arping' +'-array-value-' '_value' +'asciidoctor' '_asciidoctor' +'asciinema' '_asciinema' +'ash' '_sh' +'-assign-parameter-' '_assign' +'at' '_at' +'atq' '_at' +'atrm' '_at' +'attr' '_attr' +'augtool' '_augeas' +'autoload' '_typeset' +'avahi-browse' '_avahi' +'avahi-browse-domains' '_avahi' +'avahi-resolve' '_avahi' +'avahi-resolve-address' '_avahi' +'avahi-resolve-host-name' '_avahi' +'awk' '_awk' +'b2sum' '_md5sum' +'barbican' '_openstack' +'base32' '_base64' +'base64' '_base64' +'basename' '_basename' +'basenc' '_basenc' +'bash' '_bash' +'bat' '_bat' +'batch' '_at' +'baz' '_baz' +'beep' '_beep' +'bg' '_jobs_bg' +'bibtex' '_bibtex' +'bindkey' '_bindkey' +'bison' '_bison' +'bmake' '_make' +'bogofilter' '_bogofilter' +'bogotune' '_bogofilter' +'bogoutil' '_bogofilter' +'bpython' '_bpython' +'bpython2' '_bpython' +'bpython2-gtk' '_bpython' +'bpython2-urwid' '_bpython' +'bpython3' '_bpython' +'bpython3-gtk' '_bpython' +'bpython3-urwid' '_bpython' +'bpython-gtk' '_bpython' +'bpython-urwid' '_bpython' +'-brace-parameter-' '_brace_parameter' +'brctl' '_brctl' +'bsdgrep' '_grep' +'bsdtar' '_tar' +'btdownloadcurses' '_bittorrent' +'btdownloadgui' '_bittorrent' +'btdownloadheadless' '_bittorrent' +'btlaunchmany' '_bittorrent' +'btlaunchmanycurses' '_bittorrent' +'btmakemetafile' '_bittorrent' +'btreannounce' '_bittorrent' +'btrename' '_bittorrent' +'btrfs' '_btrfs' +'btshowmetainfo' '_bittorrent' +'bttrack' '_bittorrent' +'buildhash' '_ispell' +'builtin' '_builtin' +'bunzip2' '_bzip2' +'burst' '_mh' +'busctl' '_busctl' +'bzcat' '_bzip2' +'bzegrep' '_grep' +'bzfgrep' '_grep' +'bzgrep' '_grep' +'bzip2' '_bzip2' +'bzip2recover' '_bzip2' +'bzr' '_bzr' +'c++' '_gcc' +'cabal' '_cabal' +'cal' '_cal' +'calendar' '_calendar' +'calibre' '_calibre' +'calibredb' '_calibre' +'calibre-debug' '_calibre' +'calibre-server' '_calibre' +'calibre-smtp' '_calibre' +'cat' '_cat' +'catchsegv' '_precommand' +'cc' '_gcc' +'ccal' '_ccal' +'cd' '_cd' +'cdc' '_sccs' +'cdcd' '_cdcd' +'cdr' '_cdr' +'cdrdao' '_cdrdao' +'cdrecord' '_cdrecord' +'ceilometer' '_openstack' +'certtool' '_gnutls' +'cftp' '_twisted' +'chage' '_users' +'chattr' '_chattr' +'chcon' '_chcon' +'chdir' '_cd' +'chfn' '_users' +'chgrp' '_chown' +'chimera' '_webbrowser' +'chkconfig' '_chkconfig' +'chkstow' '_stow' +'chmod' '_chmod' +'choom' '_choom' +'chown' '_chown' +'chpass' '_chsh' +'chroot' '_chroot' +'chrt' '_chrt' +'chsh' '_chsh' +'ci' '_rcs' +'cifsiostat' '_sysstat' +'cinder' '_openstack' +'ckeygen' '_twisted' +'cksum' '_cksum' +'clang' '_gcc' +'clang++' '_gcc' +'clay' '_clay' +'clear' '_nothing' +'cloudkitty' '_openstack' +'clusterdb' '_postgresql' +'cmp' '_cmp' +'co' '_rcs' +'code' '_code' +'column' '_column' +'comb' '_sccs' +'combine' '_imagemagick' +'combinediff' '_patchutils' +'comm' '_comm' +'-command-' '_autocd' +'command' '_command' +'-command-line-' '_normal' +'comp' '_mh' +'compadd' '_compadd' +'compdef' '_compdef' +'composer' '_composer' +'composer.phar' '_composer' +'composite' '_imagemagick' +'compress' '_compress' +'conch' '_twisted' +'-condition-' '_condition' +'config.status' '_configure' +'configure' '_configure' +'convert' '_imagemagick' +'cowsay' '_cowsay' +'cowthink' '_cowsay' +'cp' '_cp' +'cpio' '_cpio' +'cplay' '_cplay' +'cpupower' '_cpupower' +'createdb' '_postgresql' +'createuser' '_postgresql' +'crontab' '_crontab' +'crsh' '_cssh' +'cryptsetup' '_cryptsetup' +'cscope' '_cscope' +'csh' '_sh' +'csplit' '_csplit' +'cssh' '_cssh' +'ctags' '_ctags' +'ctags-exuberant' '_ctags' +'ctags-universal' '_ctags' +'curl' '_curl' +'cut' '_cut' +'cvs' '_cvs' +'darcs' '_darcs' +'dash' '_sh' +'date' '_date' +'dbus-launch' '_dbus' +'dbus-monitor' '_dbus' +'dbus-send' '_dbus' +'dconf' '_dconf' +'dcop' '_dcop' +'dcopclient' '_dcop' +'dcopfind' '_dcop' +'dcopobject' '_dcop' +'dcopref' '_dcop' +'dcopstart' '_dcop' +'dd' '_dd' +'declare' '_typeset' +'-default-' '_default' +'delta' '_sccs' +'designate' '_openstack' +'devtodo' '_devtodo' +'df' '_df' +'dhclient' '_dhclient' +'dhclient3' '_dhclient' +'dict' '_dict' +'diff' '_diff' +'diff3' '_diff3' +'diffstat' '_diffstat' +'dig' '_dig' +'dillo' '_webbrowser' +'dircmp' '_directories' +'dirs' '_dirs' +'disable' '_disable' +'disown' '_jobs_fg' +'display' '_imagemagick' +'dist' '_mh' +'django-admin' '_django' +'django-admin.py' '_django' +'dkms' '_dkms' +'dmake' '_make' +'dmesg' '_dmesg' +'dmidecode' '_dmidecode' +'doas' '_doas' +'dolphin' '_dolphin' +'domainname' '_yp' +'dos2unix' '_dos2unix' +'drill' '_drill' +'dropbox' '_dropbox' +'dropdb' '_postgresql' +'dropuser' '_postgresql' +'dsh' '_dsh' +'dtruss' '_dtruss' +'du' '_du' +'dvibook' '_dvi' +'dviconcat' '_dvi' +'dvicopy' '_dvi' +'dvidvi' '_dvi' +'dvipdf' '_dvi' +'dvips' '_dvi' +'dviselect' '_dvi' +'dvitodvi' '_dvi' +'dvitype' '_dvi' +'dwb' '_webbrowser' +'e2label' '_e2label' +'eatmydata' '_precommand' +'ebook-convert' '_calibre' +'ebook-edit' '_calibre' +'ebook-meta' '_calibre' +'ebook-polish' '_calibre' +'ebook-viewer' '_calibre' +'ecasound' '_ecasound' +'echotc' '_echotc' +'echoti' '_echoti' +'ed' '_ed' +'egrep' '_grep' +'elfdump' '_elfdump' +'elinks' '_elinks' +'emulate' '_emulate' +'enable' '_enable' +'enscript' '_enscript' +'entr' '_entr' +'env' '_env' +'eog' '_eog' +'epdfview' '_pdf' +'epsffit' '_psutils' +'-equal-' '_equal' +'erb' '_ruby' +'espeak' '_espeak' +'etags' '_etags' +'ethtool' '_ethtool' +'eu-nm' '_nm' +'eu-objdump' '_objdump' +'eu-readelf' '_readelf' +'eu-strings' '_strings' +'eval' '_precommand' +'eview' '_vim' +'evim' '_vim' +'evince' '_evince' +'ex' '_vi' +'exec' '_exec' +'expand' '_unexpand' +'export' '_typeset' +'express' '_webbrowser' +'extcheck' '_java' +'extractres' '_psutils' +'fakeroot' '_fakeroot' +'false' '_nothing' +'fc' '_fc' +'fc-list' '_xft_fonts' +'fc-match' '_xft_fonts' +'feh' '_feh' +'fetch-ebook-metadata' '_calibre' +'fetchmail' '_fetchmail' +'ffmpeg' '_ffmpeg' +'fg' '_jobs_fg' +'fgrep' '_grep' +'figlet' '_figlet' +'filterdiff' '_patchutils' +'find' '_find' +'findaffix' '_ispell' +'findmnt' '_findmnt' +'finger' '_finger' +'firefox' '_mozilla' +'-first-' '_first' +'fixdlsrps' '_psutils' +'fixfmps' '_psutils' +'fixmacps' '_psutils' +'fixpsditps' '_psutils' +'fixpspps' '_psutils' +'fixscribeps' '_psutils' +'fixtpps' '_psutils' +'fixwfwps' '_psutils' +'fixwpps' '_psutils' +'fixwwps' '_psutils' +'flac' '_flac' +'flex' '_flex' +'flex++' '_flex' +'flipdiff' '_patchutils' +'flist' '_mh' +'flists' '_mh' +'float' '_typeset' +'fmt' '_fmt' +'fmttest' '_mh' +'fned' '_zed' +'fnext' '_mh' +'fold' '_fold' +'folder' '_mh' +'folders' '_mh' +'fortune' '_fortune' +'forw' '_mh' +'fprev' '_mh' +'free' '_free' +'freebsd-make' '_make' +'freezer' '_openstack' +'fsh' '_fsh' +'ftp' '_hosts' +'functions' '_typeset' +'fuser' '_fuser' +'fusermount' '_fusermount' +'fwhois' '_whois' +'g++' '_gcc' +'galeon' '_webbrowser' +'gawk' '_awk' +'gb2sum' '_md5sum' +'gbase32' '_base64' +'gbase64' '_base64' +'gbasename' '_basename' +'gcat' '_cat' +'gcc' '_gcc' +'gccgo' '_go' +'gchgrp' '_chown' +'gchmod' '_chmod' +'gchown' '_chown' +'gchroot' '_chroot' +'gcksum' '_cksum' +'gcmp' '_cmp' +'gcomm' '_comm' +'gcore' '_gcore' +'gcp' '_cp' +'gcut' '_cut' +'gdate' '_date' +'gdb' '_gdb' +'gdd' '_dd' +'gdf' '_df' +'gdiff' '_diff' +'gdu' '_du' +'geany' '_geany' +'gegrep' '_grep' +'gem' '_gem' +'genisoimage' '_genisoimage' +'genv' '_env' +'get' '_sccs' +'getafm' '_psutils' +'getconf' '_getconf' +'getent' '_getent' +'getfacl' '_getfacl' +'getfacl.exe' '_getfacl' +'getfattr' '_attr' +'getmail' '_getmail' +'getopt' '_getopt' +'getopts' '_vars' +'gex' '_vim' +'gexpand' '_unexpand' +'gfgrep' '_grep' +'gfind' '_find' +'gfmt' '_fmt' +'gfold' '_fold' +'ggetopt' '_getopt' +'ggrep' '_grep' +'ggv' '_gnome-gv' +'ghead' '_head' +'ghostscript' '_ghostscript' +'ghostview' '_pspdf' +'gid' '_id' +'ginstall' '_install' +'git' '_git' +'git-cvsserver' '_git' +'gitk' '_git' +'git-receive-pack' '_git' +'git-shell' '_git' +'git-upload-archive' '_git' +'git-upload-pack' '_git' +'gjoin' '_join' +'glance' '_openstack' +'gln' '_ln' +'global' '_global' +'glocate' '_locate' +'gls' '_ls' +'gm' '_graphicsmagick' +'gmake' '_make' +'gmd5sum' '_md5sum' +'gmkdir' '_mkdir' +'gmkfifo' '_mkfifo' +'gmknod' '_mknod' +'gmktemp' '_mktemp' +'gmplayer' '_mplayer' +'gmv' '_mv' +'gnl' '_nl' +'gnocchi' '_openstack' +'gnome-gv' '_gnome-gv' +'gnumfmt' '_numfmt' +'gnupod_addsong' '_gnupod' +'gnupod_addsong.pl' '_gnupod' +'gnupod_check' '_gnupod' +'gnupod_check.pl' '_gnupod' +'gnupod_INIT' '_gnupod' +'gnupod_INIT.pl' '_gnupod' +'gnupod_search' '_gnupod' +'gnupod_search.pl' '_gnupod' +'gnutls-cli' '_gnutls' +'gnutls-cli-debug' '_gnutls' +'gnutls-serv' '_gnutls' +'god' '_od' +'gofmt' '_go' +'gpasswd' '_gpasswd' +'gpaste' '_paste' +'gpatch' '_patch' +'gpg' '_gpg' +'gpg2' '_gpg' +'gpgv' '_gpg' +'gpg-zip' '_gpg' +'gphoto2' '_gphoto2' +'gprintenv' '_printenv' +'gprof' '_gprof' +'gqview' '_gqview' +'gradle' '_gradle' +'gradlew' '_gradle' +'grail' '_webbrowser' +'greadlink' '_readlink' +'grep' '_grep' +'grepdiff' '_patchutils' +'grm' '_rm' +'grmdir' '_rmdir' +'groff' '_groff' +'groupadd' '_user_admin' +'groupdel' '_groups' +'groupmod' '_user_admin' +'groups' '_users' +'growisofs' '_growisofs' +'gs' '_ghostscript' +'gsbj' '_pspdf' +'gsdj' '_pspdf' +'gsdj500' '_pspdf' +'gsed' '_sed' +'gseq' '_seq' +'gsettings' '_gsettings' +'gsha1sum' '_md5sum' +'gsha224sum' '_md5sum' +'gsha256sum' '_md5sum' +'gsha384sum' '_md5sum' +'gsha512sum' '_md5sum' +'gshred' '_shred' +'gshuf' '_shuf' +'gslj' '_pspdf' +'gslp' '_pspdf' +'gsnd' '_pspdf' +'gsort' '_sort' +'gsplit' '_split' +'gstat' '_stat' +'gstdbuf' '_stdbuf' +'gstrings' '_strings' +'gstty' '_stty' +'gsum' '_cksum' +'gtac' '_tac' +'gtail' '_tail' +'gtar' '_tar' +'gtee' '_tee' +'gtimeout' '_timeout' +'gtouch' '_touch' +'gtr' '_tr' +'gtty' '_tty' +'guilt' '_guilt' +'guilt-add' '_guilt' +'guilt-applied' '_guilt' +'guilt-delete' '_guilt' +'guilt-files' '_guilt' +'guilt-fold' '_guilt' +'guilt-fork' '_guilt' +'guilt-header' '_guilt' +'guilt-help' '_guilt' +'guilt-import' '_guilt' +'guilt-import-commit' '_guilt' +'guilt-init' '_guilt' +'guilt-new' '_guilt' +'guilt-next' '_guilt' +'guilt-patchbomb' '_guilt' +'guilt-pop' '_guilt' +'guilt-prev' '_guilt' +'guilt-push' '_guilt' +'guilt-rebase' '_guilt' +'guilt-refresh' '_guilt' +'guilt-rm' '_guilt' +'guilt-series' '_guilt' +'guilt-status' '_guilt' +'guilt-top' '_guilt' +'guilt-unapplied' '_guilt' +'guname' '_uname' +'gunexpand' '_unexpand' +'guniq' '_uniq' +'gunzip' '_gzip' +'guptime' '_uptime' +'gv' '_gv' +'gview' '_vim' +'gvim' '_vim' +'gvimdiff' '_vim' +'gwc' '_wc' +'gwho' '_who' +'gxargs' '_xargs' +'gzcat' '_gzip' +'gzegrep' '_grep' +'gzfgrep' '_grep' +'gzgrep' '_grep' +'gzilla' '_webbrowser' +'gzip' '_gzip' +'hash' '_hash' +'hd' '_hexdump' +'head' '_head' +'heat' '_openstack' +'help' '_sccs' +'hexdump' '_hexdump' +'hilite' '_precommand' +'histed' '_zed' +'history' '_fc' +'host' '_host' +'hostname' '_hostname' +'hotjava' '_webbrowser' +'htop' '_htop' +'iceweasel' '_mozilla' +'icombine' '_ispell' +'iconv' '_iconv' +'iconvconfig' '_iconvconfig' +'id' '_id' +'identify' '_imagemagick' +'ifconfig' '_ifconfig' +'ifdown' '_net_interfaces' +'iftop' '_iftop' +'ifup' '_net_interfaces' +'ijoin' '_ispell' +'img2sixel' '_img2sixel' +'import' '_imagemagick' +'inc' '_mh' +'includeres' '_psutils' +'info' '_texinfo' +'infocmp' '_terminals' +'initctl' '_initctl' +'initdb' '_postgresql' +'insmod' '_modutils' +'install' '_install' +'install-info' '_texinfo' +'integer' '_typeset' +'interdiff' '_patchutils' +'ionice' '_ionice' +'iostat' '_iostat' +'ip' '_ip' +'ip6tables' '_iptables' +'ip6tables-restore' '_iptables' +'ip6tables-save' '_iptables' +'ipkg' '_opkg' +'ipsec' '_ipsec' +'ipset' '_ipset' +'iptables' '_iptables' +'iptables-restore' '_iptables' +'iptables-save' '_iptables' +'irb' '_ruby' +'ironic' '_openstack' +'irssi' '_irssi' +'isag' '_sysstat' +'ispell' '_ispell' +'iwconfig' '_iwconfig' +'jadetex' '_tex' +'jar' '_java' +'jarsigner' '_java' +'java' '_java' +'javac' '_java' +'javadoc' '_java' +'javah' '_java' +'javap' '_java' +'jdb' '_java' +'jobs' '_jobs_builtin' +'joe' '_joe' +'join' '_join' +'jq' '_jq' +'kcmshell5' '_systemsettings' +'kcmshell6' '_systemsettings' +'kdeconnect-cli' '_kdeconnect' +'keystone' '_openstack' +'keytool' '_java' +'kfmclient' '_kfmclient' +'kill' '_kill' +'killall' '_killall' +'killall5' '_killall' +'kinfocenter' '_systemsettings' +'kioclient' '_kfmclient' +'knock' '_knock' +'konqueror' '_webbrowser' +'kpartx' '_kpartx' +'kpdf' '_pdf' +'ksh' '_sh' +'ksh88' '_sh' +'ksh93' '_sh' +'kvno' '_kvno' +'last' '_last' +'lastb' '_last' +'latex' '_tex' +'latexmk' '_tex' +'ldconfig' '_ldconfig' +'ldconfig.real' '_ldconfig' +'ldd' '_ldd' +'less' '_less' +'let' '_math' +'lftp' '_ncftp' +'lha' '_lha' +'libinput' '_libinput' +'light' '_webbrowser' +'limit' '_limit' +'links' '_links' +'links2' '_links' +'linux' '_uml' +'lldb' '_lldb' +'llvm-g++' '_gcc' +'llvm-gcc' '_gcc' +'llvm-objdump' '_objdump' +'ln' '_ln' +'loadkeys' '_loadkeys' +'local' '_typeset' +'locale' '_locale' +'localedef' '_localedef' +'locate' '_locate' +'log' '_nothing' +'logger' '_logger' +'loginctl' '_loginctl' +'logname' '_nothing' +'look' '_look' +'losetup' '_losetup' +'lp' '_lp' +'lpadmin' '_lp' +'lpinfo' '_lp' +'lpoptions' '_lp' +'lpq' '_lp' +'lpr' '_lp' +'lprm' '_lp' +'lpstat' '_lp' +'lrf2lrs' '_calibre' +'lrfviewer' '_calibre' +'ls' '_ls' +'lsattr' '_lsattr' +'lsblk' '_lsblk' +'lsdiff' '_patchutils' +'lsinitcpio' '_mkinitcpio' +'lsmod' '_modutils' +'lsns' '_lsns' +'lsof' '_lsof' +'lsusb' '_lsusb' +'ltrace' '_ltrace' +'lua' '_lua' +'luarocks' '_luarocks' +'lynx' '_lynx' +'lz4' '_lz4' +'lz4c' '_lz4' +'lz4c32' '_lz4' +'lz4cat' '_lz4' +'lzcat' '_xz' +'lzma' '_xz' +'lzop' '_lzop' +'mac2unix' '_dos2unix' +'magnum' '_openstack' +'mail' '_mail' +'Mail' '_mail' +'mailx' '_mail' +'make' '_make' +'makeinfo' '_texinfo' +'makepkg' '_pacman' +'man' '_man' +'manage.py' '_django' +'manila' '_openstack' +'mark' '_mh' +'mat' '_mat' +'mat2' '_mat2' +'-math-' '_math' +'matlab' '_matlab' +'mattrib' '_mtools' +'mcd' '_mtools' +'mcopy' '_mtools' +'md2' '_cksum' +'md4' '_cksum' +'md5' '_cksum' +'md5sum' '_md5sum' +'mdadm' '_mdadm' +'mdel' '_mtools' +'mdeltree' '_mtools' +'mdir' '_mtools' +'mdu' '_mtools' +'mencal' '_mencal' +'mere' '_mere' +'merge' '_rcs' +'metaflac' '_flac' +'mformat' '_mtools' +'mgv' '_pspdf' +'mhfixmsg' '_mh' +'mhlist' '_mh' +'mhmail' '_mh' +'mhn' '_mh' +'mhparam' '_mh' +'mhpath' '_mh' +'mhshow' '_mh' +'mhstore' '_mh' +'mii-tool' '_mii-tool' +'mistral' '_openstack' +'mkdir' '_mkdir' +'mkfifo' '_mkfifo' +'mkinitcpio' '_mkinitcpio' +'mkisofs' '_growisofs' +'mknod' '_mknod' +'mksh' '_sh' +'mktemp' '_mktemp' +'mktunes' '_gnupod' +'mktunes.pl' '_gnupod' +'mlabel' '_mtools' +'mlocate' '_locate' +'mmd' '_mtools' +'mmm' '_webbrowser' +'mmount' '_mtools' +'mmove' '_mtools' +'modinfo' '_modutils' +'modprobe' '_modutils' +'module' '_module' +'mogrify' '_imagemagick' +'monasca' '_openstack' +'mondoarchive' '_mondo' +'montage' '_imagemagick' +'moosic' '_moosic' +'Mosaic' '_webbrowser' +'mosh' '_mosh' +'mount' '_mount' +'mozilla' '_mozilla' +'mozilla-firefox' '_mozilla' +'mozilla-xremote-client' '_mozilla' +'mpc' '_mpc' +'mplayer' '_mplayer' +'mpstat' '_sysstat' +'mpv' '_mpv' +'mr' '_myrepos' +'mrd' '_mtools' +'mread' '_mtools' +'mren' '_mtools' +'msgchk' '_mh' +'mt' '_mt' +'mtn' '_monotone' +'mtoolstest' '_mtools' +'mtr' '_mtr' +'mtype' '_mtools' +'munchlist' '_ispell' +'mupdf' '_mupdf' +'murano' '_openstack' +'mush' '_mail' +'mutt' '_mutt' +'mv' '_mv' +'mvim' '_vim' +'mw' '_mutt-wizard.zsh' +'mx' '_hosts' +'mysql' '_mysql_utils' +'mysqladmin' '_mysql_utils' +'mysqldiff' '_mysqldiff' +'mysqldump' '_mysql_utils' +'mysqlimport' '_mysql_utils' +'mysqlshow' '_mysql_utils' +'nail' '_mail' +'native2ascii' '_java' +'nautilus' '_nautilus' +'nawk' '_awk' +'nc' '_netcat' +'ncal' '_cal' +'ncftp' '_ncftp' +'ncl' '_nedit' +'nedit' '_nedit' +'nedit-nc' '_nedit' +'netcat' '_netcat' +'netrik' '_webbrowser' +'netscape' '_netscape' +'netstat' '_netstat' +'neutron' '_openstack' +'new' '_mh' +'newgrp' '_groups' +'next' '_mh' +'nginx' '_nginx' +'ngrep' '_ngrep' +'nice' '_nice' +'nkf' '_nkf' +'nl' '_nl' +'nm' '_nm' +'nmap' '_nmap' +'nmblookup' '_samba' +'nmcli' '_networkmanager' +'nocorrect' '_precommand' +'noglob' '_precommand' +'nohup' '_precommand' +'notmuch' '_notmuch' +'nova' '_openstack' +'npm' '_npm' +'ns' '_hosts' +'nsenter' '_nsenter' +'nslookup' '_nslookup' +'ntalk' '_other_accounts' +'numfmt' '_numfmt' +'nvim' '_vim' +'objdump' '_objdump' +'od' '_od' +'ogg123' '_vorbis' +'oggdec' '_vorbis' +'oggenc' '_vorbis' +'ogginfo' '_vorbis' +'oksh' '_sh' +'okular' '_okular' +'openrc' '_openrc' +'openstack' '_openstack' +'opera' '_webbrowser' +'opera-next' '_webbrowser' +'opkg' '_opkg' +'opusdec' '_opustools' +'opusenc' '_opustools' +'opusinfo' '_opustools' +'p4' '_perforce' +'p4d' '_perforce' +'pacat' '_pulseaudio' +'pack' '_pack' +'packf' '_mh' +'pacman' '_pacman' +'pacman-conf' '_pacman' +'pacman-key' '_pacman' +'pacman.static' '_pacman' +'pacmd' '_pulseaudio' +'pactl' '_pulseaudio' +'padsp' '_pulseaudio' +'pandoc' '_pandoc' +'paplay' '_pulseaudio' +'-parameter-' '_parameter' +'parec' '_pulseaudio' +'parecord' '_pulseaudio' +'pass' '_pass' +'passwd' '_users' +'paste' '_paste' +'pasuspender' '_pulseaudio' +'patch' '_patch' +'pax' '_pax' +'pcat' '_pack' +'pcp-htop' '_htop' +'pcred' '_pids' +'pdf2dsc' '_pdf' +'pdf2ps' '_pdf' +'pdffonts' '_pdf' +'pdfimages' '_pdf' +'pdfinfo' '_pdf' +'pdfjadetex' '_tex' +'pdflatex' '_tex' +'pdfopt' '_pdf' +'pdftex' '_tex' +'pdftexi2dvi' '_texinfo' +'pdftk' '_pdftk' +'pdftopbm' '_pdf' +'pdftops' '_pdf' +'pdftotext' '_pdf' +'pdksh' '_sh' +'perf' '_perf' +'perl' '_perl' +'perldoc' '_perldoc' +'pfiles' '_pids' +'pflags' '_pids' +'pg_config' '_postgresql' +'pg_ctl' '_postgresql' +'pg_dump' '_postgresql' +'pg_dumpall' '_postgresql' +'pg_isready' '_postgresql' +'pgrep' '_pgrep' +'pg_restore' '_postgresql' +'pg_upgrade' '_postgresql' +'php' '_php' +'pick' '_mh' +'picocom' '_picocom' +'pidof' '_pidof' +'pidstat' '_sysstat' +'pigz' '_gzip' +'pine' '_pine' +'pinef' '_pine' +'pinfo' '_texinfo' +'ping' '_ping' +'ping6' '_ping' +'pkgadd' '_pkgadd' +'pkg-config' '_pkg-config' +'pkginfo' '_pkginfo' +'pkgrm' '_pkgrm' +'pkill' '_pgrep' +'pldd' '_pids' +'pmake' '_make' +'pman' '_perl_modules' +'pmap' '_pmap' +'pmcat' '_perl_modules' +'pmdesc' '_perl_modules' +'pmeth' '_perl_modules' +'pmexp' '_perl_modules' +'pmfunc' '_perl_modules' +'pmload' '_perl_modules' +'pmls' '_perl_modules' +'pmpath' '_perl_modules' +'pmvers' '_perl_modules' +'podgrep' '_perl_modules' +'podpath' '_perl_modules' +'podtoc' '_perl_modules' +'poff' '_pon' +'policytool' '_java' +'polybar' '_polybar' +'polybar-msg' '_polybar_msg' +'pon' '_pon' +'popd' '_directory_stack' +'postconf' '_postfix' +'postgres' '_postgresql' +'postmaster' '_postgresql' +'postqueue' '_postfix' +'postsuper' '_postfix' +'pr' '_pr' +'prev' '_mh' +'print' '_print' +'printenv' '_printenv' +'printf' '_print' +'prompt' '_prompt' +'prove' '_prove' +'prs' '_sccs' +'prt' '_sccs' +'prun' '_pids' +'ps' '_ps' +'ps2ascii' '_pspdf' +'ps2epsi' '_postscript' +'ps2pdf' '_postscript' +'ps2pdf12' '_postscript' +'ps2pdf13' '_postscript' +'ps2pdf14' '_postscript' +'ps2pdfwr' '_postscript' +'ps2ps' '_postscript' +'psbook' '_psutils' +'psed' '_sed' +'psig' '_pids' +'psmerge' '_psutils' +'psmulti' '_postscript' +'psnup' '_psutils' +'psql' '_postgresql' +'psresize' '_psutils' +'psselect' '_psutils' +'pstack' '_pids' +'pstoedit' '_pspdf' +'pstop' '_pids' +'pstops' '_psutils' +'pstotgif' '_pspdf' +'pswrap' '_postscript' +'ptx' '_ptx' +'pulseaudio' '_pulseaudio' +'pump' '_pump' +'pushd' '_cd' +'pv' '_pv' +'pwait' '_pids' +'pwdx' '_pids' +'pwgen' '_pwgen' +'pyhtmlizer' '_twisted' +'qdbus' '_qdbus' +'qiv' '_qiv' +'qpdf' '_qpdf' +'quilt' '_quilt' +'r' '_fc' +'rake' '_rake' +'ranlib' '_ranlib' +'rar' '_rar' +'rc' '_sh' +'rclone' '_rclone' +'rcp' '_rlogin' +'rcs' '_rcs' +'rcsdiff' '_rcs' +'rc-service' '_rc-service' +'rc-status' '_rc-status' +'rc-update' '_rc-update' +'rdesktop' '_rdesktop' +'read' '_read' +'readelf' '_readelf' +'readlink' '_readlink' +'readonly' '_typeset' +'-redirect-' '_redirect' +'-redirect-,<,bunzip2' '_bzip2' +'-redirect-,<,bzip2' '_bzip2' +'-redirect-,>,bzip2' '_bzip2' +'-redirect-,<,compress' '_compress' +'-redirect-,>,compress' '_compress' +'-redirect-,-default-,-default-' '_files' +'-redirect-,<,gunzip' '_gzip' +'-redirect-,<,gzip' '_gzip' +'-redirect-,>,gzip' '_gzip' +'-redirect-,<,uncompress' '_compress' +'-redirect-,<,unxz' '_xz' +'-redirect-,<,xz' '_xz' +'-redirect-,>,xz' '_xz' +'refile' '_mh' +'rehash' '_hash' +'reindexdb' '_postgresql' +'reload' '_initctl' +'remsh' '_rlogin' +'renice' '_renice' +'repl' '_mh' +'restart' '_initctl' +'retawq' '_webbrowser' +'rgrep' '_grep' +'rgview' '_vim' +'rgvim' '_vim' +'ri' '_ri' +'rlogin' '_rlogin' +'rm' '_rm' +'rmd160' '_cksum' +'rmdel' '_sccs' +'rmdir' '_rmdir' +'rmf' '_mh' +'rmic' '_java' +'rmid' '_java' +'rmiregistry' '_java' +'rmm' '_mh' +'rmmod' '_modutils' +'route' '_route' +'rrdtool' '_rrdtool' +'rsh' '_rlogin' +'rsync' '_rsync' +'rtin' '_tin' +'rubber' '_rubber' +'rubber-info' '_rubber' +'rubber-pipe' '_rubber' +'ruby' '_ruby' +'ruby-mri' '_ruby' +'run-help' '_run-help' +'rup' '_hosts' +'rusage' '_precommand' +'rview' '_vim' +'rvim' '_vim' +'rwho' '_hosts' +'rxvt' '_urxvt' +'s2p' '_sed' +'sact' '_sccs' +'sadf' '_sysstat' +'sahara' '_openstack' +'sar' '_sysstat' +'scan' '_mh' +'sccs' '_sccs' +'sccsdiff' '_sccs' +'sched' '_sched' +'schedtool' '_schedtool' +'scons' '_scons' +'scp' '_ssh' +'screen' '_screen' +'script' '_script' +'scriptreplay' '_script' +'seaf-cli' '_seafile' +'sed' '_sed' +'senlin' '_openstack' +'seq' '_seq' +'serialver' '_java' +'service' '_service' +'set' '_set' +'setfacl' '_setfacl' +'setfacl.exe' '_setfacl' +'setfattr' '_attr' +'setopt' '_setopt' +'setpriv' '_setpriv' +'setsid' '_setsid' +'setxkbmap' '_setxkbmap' +'sftp' '_ssh' +'sh' '_sh' +'sha1' '_cksum' +'sha1sum' '_md5sum' +'sha224sum' '_md5sum' +'sha256' '_cksum' +'sha256sum' '_md5sum' +'sha384' '_cksum' +'sha384sum' '_md5sum' +'sha512' '_cksum' +'sha512sum' '_md5sum' +'sha512t256' '_cksum' +'shasum' '_shasum' +'shift' '_arrays' +'show' '_mh' +'showchar' '_psutils' +'showmount' '_showmount' +'shred' '_shred' +'shuf' '_shuf' +'shutdown' '_shutdown' +'sisu' '_sisu' +'skein1024' '_cksum' +'skein256' '_cksum' +'skein512' '_cksum' +'skipstone' '_webbrowser' +'slabtop' '_slabtop' +'slitex' '_tex' +'slocate' '_locate' +'slogin' '_ssh' +'slrn' '_slrn' +'smartctl' '_smartmontools' +'smbclient' '_samba' +'smbcontrol' '_samba' +'smbstatus' '_samba' +'soa' '_hosts' +'socket' '_socket' +'sort' '_sort' +'sortm' '_mh' +'source' '_source' +'spamassassin' '_spamassassin' +'split' '_split' +'splitdiff' '_patchutils' +'sqlite' '_sqlite' +'sqlite3' '_sqlite' +'sqsh' '_sqsh' +'sr' '_surfraw' +'srptool' '_gnutls' +'ss' '_ss' +'ssh' '_ssh' +'ssh-add' '_ssh' +'ssh-agent' '_ssh' +'ssh-copy-id' '_ssh' +'sshfs' '_sshfs' +'ssh-keygen' '_ssh' +'ssh-keyscan' '_ssh' +'star' '_tar' +'start' '_initctl' +'stat' '_stat' +'status' '_initctl' +'stdbuf' '_stdbuf' +'stg' '_stgit' +'stop' '_initctl' +'stow' '_stow' +'strace' '_strace' +'strace64' '_strace' +'strftime' '_strftime' +'strings' '_strings' +'strip' '_strip' +'strongswan' '_ipsec' +'stty' '_stty' +'su' '_su' +'subl' '_sublimetext' +'-subscript-' '_subscript' +'sudo' '_sudo' +'sudoedit' '_sudo' +'sum' '_cksum' +'surfraw' '_surfraw' +'sv' '_runit' +'svn' '_subversion' +'svnadmin' '_subversion' +'svnadmin-static' '_subversion' +'svnlite' '_subversion' +'svnliteadmin' '_subversion' +'swaks' '_swaks' +'swanctl' '_swanctl' +'swift' '_swift' +'swiftc' '_swift' +'sync' '_nothing' +'sysctl' '_sysctl' +'systemsettings' '_systemsettings' +'tac' '_tac' +'tacker' '_openstack' +'tail' '_tail' +'talk' '_other_accounts' +'tar' '_tar' +'tardy' '_tardy' +'tcpdump' '_tcpdump' +'tcp_open' '_tcpsys' +'tcptraceroute' '_tcptraceroute' +'tcsh' '_sh' +'tda' '_devtodo' +'tdd' '_devtodo' +'tde' '_devtodo' +'tdr' '_devtodo' +'tee' '_tee' +'telnet' '_telnet' +'tex' '_tex' +'texi2any' '_texinfo' +'texi2dvi' '_texinfo' +'texi2pdf' '_texinfo' +'texindex' '_texinfo' +'tg' '_topgit' +'tidy' '_tidy' +'tig' '_git' +'-tilde-' '_tilde' +'time' '_precommand' +'timeout' '_timeout' +'times' '_nothing' +'tin' '_tin' +'tkconch' '_twisted' +'tkinfo' '_texinfo' +'tla' '_tla' +'tload' '_tload' +'tmux' '_tmux' +'todo' '_devtodo' +'todo.sh' '_todo.sh' +'toilet' '_toilet' +'top' '_top' +'totdconfig' '_totd' +'touch' '_touch' +'tpb' '_tpb' +'tput' '_tput' +'tr' '_tr' +'tracepath' '_tracepath' +'tracepath6' '_tracepath' +'traceroute' '_hosts' +'transmission-remote' '_transmission' +'trap' '_trap' +'tree' '_tree' +'trial' '_twisted' +'trove' '_openstack' +'true' '_nothing' +'truncate' '_truncate' +'truss' '_truss' +'tryaffix' '_ispell' +'tty' '_tty' +'ttyctl' '_ttyctl' +'tunctl' '_uml' +'tune2fs' '_tune2fs' +'tunes2pod' '_gnupod' +'tunes2pod.pl' '_gnupod' +'twidge' '_twidge' +'twist' '_twisted' +'twistd' '_twisted' +'txt' '_hosts' +'type' '_which' +'typeset' '_typeset' +'udevadm' '_udevadm' +'udisksctl' '_udisks2' +'ulimit' '_ulimit' +'uml_mconsole' '_uml' +'uml_moo' '_uml' +'uml_switch' '_uml' +'umount' '_mount' +'unace' '_unace' +'unalias' '_aliases' +'uname' '_uname' +'uncompress' '_compress' +'unexpand' '_unexpand' +'unfunction' '_functions' +'unget' '_sccs' +'unhash' '_unhash' +'uniq' '_uniq' +'unison' '_unison' +'units' '_units' +'unix2dos' '_dos2unix' +'unix2mac' '_dos2unix' +'unlimit' '_limits' +'unlz4' '_lz4' +'unlzma' '_xz' +'unpack' '_pack' +'unpigz' '_gzip' +'unrar' '_rar' +'unset' '_vars' +'unsetopt' '_setopt' +'unshare' '_unshare' +'unwrapdiff' '_patchutils' +'unxz' '_xz' +'unzip' '_zip' +'uptime' '_uptime' +'urxvt' '_urxvt' +'urxvt256c' '_urxvt' +'urxvt256cc' '_urxvt' +'urxvt256c-ml' '_urxvt' +'urxvt256c-mlc' '_urxvt' +'urxvtc' '_urxvt' +'useradd' '_user_admin' +'userdel' '_users' +'usermod' '_user_admin' +'vacuumdb' '_postgresql' +'val' '_sccs' +'valgrind' '_valgrind' +'-value-' '_value' +'-value-,ADB_TRACE,-default-' '_adb' +'-value-,ANDROID_LOG_TAGS,-default-' '_adb' +'-value-,ANDROID_SERIAL,-default-' '_adb' +'-value-,ANSIBLE_INVENTORY_ENABLED,-default-' '_ansible' +'-value-,ANSIBLE_STDOUT_CALLBACK,-default-' '_ansible' +'-value-,ANT_ARGS,-default-' '_ant' +'-value-,CFLAGS,-default-' '_gcc' +'-value-,CPPFLAGS,-default-' '_gcc' +'-value-,CXXFLAGS,-default-' '_gcc' +'-value-,-default-,-command-' '_zargs' +'-value-,-default-,-default-' '_value' +'-value-,DISPLAY,-default-' '_x_display' +'-value-,GREP_OPTIONS,-default-' '_grep' +'-value-,GZIP,-default-' '_gzip' +'-value-,LANG,-default-' '_locales' +'-value-,LANGUAGE,-default-' '_locales' +'-value-,LD_DEBUG,-default-' '_ld_debug' +'-value-,LDFLAGS,-default-' '_gcc' +'-value-,LESSCHARSET,-default-' '_less' +'-value-,LESS,-default-' '_less' +'-value-,LOOPDEV_DEBUG,-default-' '_losetup' +'-value-,LPDEST,-default-' '_printers' +'-value-,MPD_HOST,-default' '_mpc' +'-value-,P4CLIENT,-default-' '_perforce' +'-value-,P4MERGE,-default-' '_perforce' +'-value-,P4PORT,-default-' '_perforce' +'-value-,P4USER,-default-' '_perforce' +'-value-,PERLDOC,-default-' '_perldoc' +'-value-,PRINTER,-default-' '_printers' +'-value-,PROMPT2,-default-' '_ps1234' +'-value-,PROMPT3,-default-' '_ps1234' +'-value-,PROMPT4,-default-' '_ps1234' +'-value-,PROMPT,-default-' '_ps1234' +'-value-,PS1,-default-' '_ps1234' +'-value-,PS2,-default-' '_ps1234' +'-value-,PS3,-default-' '_ps1234' +'-value-,PS4,-default-' '_ps1234' +'-value-,RPROMPT2,-default-' '_ps1234' +'-value-,RPROMPT,-default-' '_ps1234' +'-value-,RPS1,-default-' '_ps1234' +'-value-,RPS2,-default-' '_ps1234' +'-value-,SPROMPT,-default-' '_ps1234' +'-value-,TERM,-default-' '_terminals' +'-value-,TERMINFO_DIRS,-default-' '_dir_list' +'-value-,TZ,-default-' '_time_zone' +'-value-,VALGRIND_OPTS,-default-' '_valgrind' +'-value-,WWW_HOME,-default-' '_urls' +'-value-,XML_CATALOG_FILES,-default-' '_xmlsoft' +'-value-,XZ_DEFAULTS,-default-' '_xz' +'-value-,XZ_OPT,-default-' '_xz' +'-vared-' '_in_vared' +'vared' '_vared' +'vcs_info_hookadd' '_vcs_info' +'vcs_info_hookdel' '_vcs_info' +'vi' '_vi' +'view' '_vi' +'vim' '_vim' +'vimdiff' '_vim' +'virsh' '_libvirt' +'virt-admin' '_libvirt' +'virt-host-validate' '_libvirt' +'virt-pki-validate' '_libvirt' +'virt-xml-validate' '_libvirt' +'visudo' '_visudo' +'vitrage' '_openstack' +'vmstat' '_vmstat' +'vncserver' '_vnc' +'vncviewer' '_vnc' +'vorbiscomment' '_vorbis' +'vpnc' '_vpnc' +'vpnc-connect' '_vpnc' +'vserver' '_vserver' +'w' '_w' +'w3m' '_w3m' +'wait' '_wait' +'watch' '_watch' +'watcher' '_openstack' +'wc' '_wc' +'wget' '_wget' +'what' '_sccs' +'whatis' '_man' +'whence' '_which' +'where' '_which' +'whereis' '_whereis' +'which' '_which' +'who' '_who' +'whoami' '_nothing' +'whois' '_whois' +'whom' '_mh' +'wiggle' '_wiggle' +'wipefs' '_wipefs' +'wodim' '_cdrecord' +'wpa_cli' '_wpa_cli' +'wpctl' '_wpctl' +'write' '_users_on' +'www' '_webbrowser' +'xargs' '_xargs' +'xattr' '_attr' +'xauth' '_xauth' +'xautolock' '_xautolock' +'xclip' '_xclip' +'xdpyinfo' '_x_utils' +'xdvi' '_xdvi' +'xelatex' '_tex' +'xetex' '_tex' +'xev' '_x_utils' +'xfd' '_x_utils' +'xfig' '_xfig' +'xfontsel' '_x_utils' +'xfreerdp' '_rdesktop' +'xhost' '_x_utils' +'xinput' '_xinput' +'xkill' '_x_utils' +'xli' '_xloadimage' +'xloadimage' '_xloadimage' +'xlsatoms' '_x_utils' +'xlsclients' '_x_utils' +'xml' '_xmlstarlet' +'xmllint' '_xmlsoft' +'xmlstarlet' '_xmlstarlet' +'xmms2' '_xmms2' +'xmodmap' '_xmodmap' +'xmosaic' '_webbrowser' +'xon' '_x_utils' +'xournal' '_xournal' +'xpdf' '_xpdf' +'xping' '_hosts' +'xprop' '_x_utils' +'xrandr' '_xrandr' +'xrdb' '_x_utils' +'xscreensaver-command' '_xscreensaver' +'xset' '_xset' +'xsetbg' '_xloadimage' +'xsetroot' '_x_utils' +'xsltproc' '_xmlsoft' +'xterm' '_xterm' +'xtightvncviewer' '_vnc' +'xtp' '_imagemagick' +'xv' '_xv' +'xview' '_xloadimage' +'xvnc4viewer' '_vnc' +'xvncviewer' '_vnc' +'xwallpaper' '_xwallpaper' +'xwd' '_x_utils' +'xwininfo' '_x_utils' +'xwit' '_xwit' +'xwud' '_x_utils' +'xxd' '_xxd' +'xz' '_xz' +'xzcat' '_xz' +'yafc' '_yafc' +'yash' '_sh' +'yay' '_yay' +'ypbind' '_yp' +'ypcat' '_yp' +'ypmatch' '_yp' +'yppasswd' '_yp' +'yppoll' '_yp' +'yppush' '_yp' +'ypserv' '_yp' +'ypset' '_yp' +'ypwhich' '_yp' +'ypxfr' '_yp' +'ytalk' '_other_accounts' +'yt-dlp' '_yt-dlp' +'zargs' '_zargs' +'zathura' '_zathura' +'zcalc' '_zcalc' +'-zcalc-line-' '_zcalc_line' +'zcat' '_zcat' +'zcompile' '_zcompile' +'zcp' '_zmv' +'zdb' '_zfs' +'zdelattr' '_zattr' +'zdump' '_zdump' +'zeal' '_zeal' +'zed' '_zed' +'zegrep' '_grep' +'zen' '_webbrowser' +'zf_chgrp' '_chown' +'zf_chmod' '_chmod' +'zf_chown' '_chown' +'zfgrep' '_grep' +'zf_ln' '_ln' +'zf_mkdir' '_mkdir' +'zf_mv' '_mv' +'zf_rm' '_rm' +'zf_rmdir' '_rmdir' +'zfs' '_zfs' +'zgetattr' '_zattr' +'zgrep' '_grep' +'zip' '_zip' +'zipinfo' '_zip' +'zle' '_zle' +'zlistattr' '_zattr' +'zln' '_zmv' +'zmail' '_mail' +'zmodload' '_zmodload' +'zmv' '_zmv' +'zone' '_hosts' +'zparseopts' '_zparseopts' +'zpool' '_zfs' +'zpty' '_zpty' +'zsetattr' '_zattr' +'zsh' '_zsh' +'zsh-mime-handler' '_zsh-mime-handler' +'zsocket' '_zsocket' +'zstat' '_stat' +'zstyle' '_zstyle' +'ztodo' '_ztodo' +'zun' '_openstack' +'zxpdf' '_xpdf' +) + +_services=( +'bzcat' 'bunzip2' +'gchgrp' 'chgrp' +'gchown' 'chown' +'gnupod_addsong.pl' 'gnupod_addsong' +'gnupod_check.pl' 'gnupod_check' +'gnupod_INIT.pl' 'gnupod_INIT' +'gnupod_search.pl' 'gnupod_search' +'gpg2' 'gpg' +'gzcat' 'gunzip' +'iceweasel' 'firefox' +'lzcat' 'unxz' +'lzma' 'xz' +'Mail' 'mail' +'mailx' 'mail' +'mktunes.pl' 'mktunes' +'nail' 'mail' +'ncl' 'nc' +'nedit-nc' 'nc' +'pacman.static' 'pacman' +'pcat' 'unpack' +'-redirect-,<,bunzip2' 'bunzip2' +'-redirect-,<,bzip2' 'bzip2' +'-redirect-,>,bzip2' 'bunzip2' +'-redirect-,<,compress' 'compress' +'-redirect-,>,compress' 'uncompress' +'-redirect-,<,gunzip' 'gunzip' +'-redirect-,<,gzip' 'gzip' +'-redirect-,>,gzip' 'gunzip' +'-redirect-,<,uncompress' 'uncompress' +'-redirect-,<,unxz' 'unxz' +'-redirect-,<,xz' 'xz' +'-redirect-,>,xz' 'unxz' +'remsh' 'rsh' +'slogin' 'ssh' +'svnadmin-static' 'svnadmin' +'svnlite' 'svn' +'svnliteadmin' 'svnadmin' +'tunes2pod.pl' 'tunes2pod' +'unlzma' 'unxz' +'xelatex' 'latex' +'xetex' 'tex' +'xzcat' 'unxz' +'zf_chgrp' 'chgrp' +'zf_chown' 'chown' +) + +_patcomps=( +'*/(init|rc[0-9S]#).d/*' '_init_d' +'notmuch-*' '_notmuch' +) + +_postpatcomps=( +'_*' '_compadd' +'c++-*' '_gcc' +'g++-*' '_gcc' +'gcc-*' '_gcc' +'gem[0-9.]#' '_gem' +'lua[0-9.-]##' '_lua' +'(p[bgpn]m*|*top[bgpn]m)' '_pbm' +'php[0-9.-]' '_php' +'pip[0-9.]#' '_pip' +'pydoc[0-9.]#' '_pydoc' +'python[0-9.]#' '_python' +'qemu(|-system-*)' '_qemu' +'(ruby|[ei]rb)[0-9.]#' '_ruby' +'shasum(|5).*' '_shasum' +'(texi(2*|ndex))' '_texi' +'(tiff*|*2tiff|pal2rgb)' '_tiff' +'-value-,(ftp|http(|s))_proxy,-default-' '_urls' +'-value-,LC_*,-default-' '_locales' +'-value-,*path,-default-' '_directories' +'-value-,*PATH,-default-' '_dir_list' +'-value-,RUBY(LIB|OPT|PATH),-default-' '_ruby' +'*/X11(|R<4->)/*' '_x_arguments' +'yodl(|2*)' '_yodl' +'zf*' '_zftp' +) + +_compautos=( +'_call_program' '+X' +) + +zle -C _bash_complete-word .complete-word _bash_completions +zle -C _bash_list-choices .list-choices _bash_completions +zle -C _complete_debug .complete-word _complete_debug +zle -C _complete_help .complete-word _complete_help +zle -C _complete_tag .complete-word _complete_tag +zle -C _correct_filename .complete-word _correct_filename +zle -C _correct_word .complete-word _correct_word +zle -C _expand_alias .complete-word _expand_alias +zle -C _expand_word .complete-word _expand_word +zle -C _history-complete-newer .complete-word _history_complete_word +zle -C _history-complete-older .complete-word _history_complete_word +zle -C _list_expansions .list-choices _expand_word +zle -C _most_recent_file .complete-word _most_recent_file +zle -C _next_tags .list-choices _next_tags +zle -C _read_comp .complete-word _read_comp +bindkey '^X^R' _read_comp +bindkey '^X?' _complete_debug +bindkey '^XC' _correct_filename +bindkey '^Xa' _expand_alias +bindkey '^Xc' _correct_word +bindkey '^Xd' _list_expansions +bindkey '^Xe' _expand_word +bindkey '^Xh' _complete_help +bindkey '^Xm' _most_recent_file +bindkey '^Xn' _next_tags +bindkey '^Xt' _complete_tag +bindkey '^X~' _bash_list-choices +bindkey '^[,' _history-complete-newer +bindkey '^[/' _history-complete-older +bindkey '^[~' _bash_complete-word + +autoload -Uz _bat _busctl _calibre _curl _dolphin \ + _email-notmuch _img2sixel _libinput _loginctl _mkinitcpio \ + _mpv _mutt-wizard.zsh _notmuch _openrc _pacman \ + _pass _polybar _polybar_msg _pulseaudio _qpdf \ + _rc-service _rc-status _rc-update _systemsettings _udevadm \ + _udisks2 _wpctl _xwallpaper _yay _yt-dlp \ + _zathura _cdr _all_labels _all_matches _alternative \ + _approximate _arg_compile _arguments _bash_completions _cache_invalid \ + _call_function _combination _complete _complete_debug _complete_help \ + _complete_help_generic _complete_tag _comp_locale _correct _correct_filename \ + _correct_word _describe _description _dispatch _expand \ + _expand_alias _expand_word _extensions _external_pwds _generic \ + _guard _history _history_complete_word _ignored _list \ + _main_complete _match _menu _message _most_recent_file \ + _multi_parts _next_label _next_tags _normal _nothing \ + _numbers _oldlist _pick_variant _prefix _read_comp \ + _regex_arguments _regex_words _requested _retrieve_cache _sep_parts \ + _sequence _set_command _setup _store_cache _sub_commands \ + _tags _user_expand _values _wanted _acpi \ + _acpitool _alsa-utils _analyseplugin _basenc _brctl \ + _btrfs _capabilities _chattr _chcon _choom \ + _chrt _cpupower _cryptsetup _dkms _e2label \ + _ethtool _findmnt _free _fuse_arguments _fusermount \ + _fuse_values _gpasswd _htop _iconvconfig _ionice \ + _ipset _iptables _iwconfig _kpartx _losetup \ + _lsattr _lsblk _lsns _lsusb _ltrace \ + _mat _mat2 _mdadm _mii-tool _modutils \ + _mondo _networkmanager _nsenter _opkg _perf \ + _pidof _pmap _qdbus _schedtool _selinux_contexts \ + _selinux_roles _selinux_types _selinux_users _setpriv _setsid \ + _slabtop _ss _sshfs _strace _sysstat \ + _tload _tpb _tracepath _tune2fs _uml \ + _unshare _valgrind _vserver _wakeup_capable_devices _wipefs \ + _wpa_cli _a2ps _aap _abcde _absolute_command_paths \ + _ack _adb _ansible _ant _antiword \ + _apachectl _apm _arch_archives _arch_namespace _arp \ + _arping _asciidoctor _asciinema _at _attr \ + _augeas _avahi _awk _base64 _basename \ + _bash _baudrates _baz _beep _bibtex \ + _bind_addresses _bison _bittorrent _bogofilter _bpf_filters \ + _bpython _bzip2 _bzr _cabal _cal \ + _calendar _canonical_paths _cat _ccal _cdcd \ + _cdrdao _cdrecord _chkconfig _chmod _chown \ + _chroot _chsh _cksum _clay _cmdambivalent \ + _cmdstring _cmp _column _comm _composer \ + _compress _configure _cowsay _cp _cpio \ + _cplay _crontab _cscope _csplit _cssh \ + _ctags _ctags_tags _curl _cut _cvs \ + _darcs _date _date_formats _dates _dbus \ + _dconf _dd _devtodo _df _dhclient \ + _dict _dict_words _diff _diff3 _diff_options \ + _diffstat _dig _directories _dir_list _django \ + _dmesg _dmidecode _dns_types _doas _domains \ + _dos2unix _drill _dropbox _dsh _dtruss \ + _du _dvi _ecasound _ed _elfdump \ + _elinks _email_addresses _enscript _entr _env \ + _espeak _etags _fakeroot _feh _fetchmail \ + _ffmpeg _figlet _file_modes _files _file_systems \ + _find _find_net_interfaces _finger _flac _flex \ + _fmt _fold _fortune _fsh _fuser \ + _gcc _gcore _gdb _gem _genisoimage \ + _getconf _getent _getfacl _getmail _getopt \ + _ghostscript _git _global _global_tags _gnu_generic \ + _gnupod _gnutls _go _gpg _gphoto2 \ + _gprof _gradle _graphicsmagick _grep _groff \ + _groups _growisofs _gsettings _guilt _gzip \ + _have_glob_qual _head _hexdump _host _hostname \ + _hosts _iconv _id _ifconfig _iftop \ + _imagemagick _initctl _init_d _install _iostat \ + _ip _ipsec _irssi _ispell _java \ + _java_class _joe _join _jq _killall \ + _knock _kvno _last _ldconfig _ldd \ + _ld_debug _less _lha _libvirt _links \ + _list_files _lldb _ln _loadkeys _locale \ + _localedef _locales _locate _logger _look \ + _lp _ls _lsof _lua _luarocks \ + _lynx _lz4 _lzop _mail _mailboxes \ + _make _man _md5sum _mencal _mh \ + _mime_types _mkdir _mkfifo _mknod _mktemp \ + _module _monotone _moosic _mosh _mount \ + _mpc _mt _mtools _mtr _mutt \ + _mv _my_accounts _myrepos _mysqldiff _mysql_utils \ + _ncftp _netcat _net_interfaces _netstat _newsgroups \ + _nginx _ngrep _nice _nkf _nl \ + _nm _nmap _npm _nslookup _numfmt \ + _objdump _object_files _od _openstack _opustools \ + _other_accounts _pack _pandoc _paste _patch \ + _patchutils _path_commands _path_files _pax _pbm \ + _pdf _perforce _perl _perl_basepods _perldoc \ + _perl_modules _pgids _pgrep _php _picocom \ + _pids _pine _ping _pip _pkgadd \ + _pkg-config _pkginfo _pkg_instance _pkgrm _pon \ + _ports _postfix _postgresql _postscript _pr \ + _printenv _printers _process_names _prove _ps \ + _pspdf _psutils _ptx _pump _pv \ + _pwgen _pydoc _python _python_modules _qemu \ + _quilt _rake _ranlib _rar _rclone \ + _rcs _readelf _readlink _remote_files _renice \ + _ri _rlogin _rm _rmdir _route \ + _rrdtool _rsync _rubber _ruby _runit \ + _samba _sccs _scons _screen _script \ + _seafile _sed _seq _service _services \ + _setfacl _sh _shasum _showmount _shred \ + _shuf _shutdown _signals _sisu _slrn \ + _smartmontools _socket _sort _spamassassin _split \ + _sqlite _sqsh _ssh _ssh_hosts _stat \ + _stdbuf _stgit _stow _strings _strip \ + _stty _su _subversion _sudo _surfraw \ + _swaks _swanctl _swift _sys_calls _sysctl \ + _tac _tail _tar _tar_archive _tardy \ + _tcpdump _tcptraceroute _tee _telnet _terminals \ + _tex _texi _texinfo _tidy _tiff \ + _tilde_files _timeout _time_zone _tin _tla \ + _tmux _todo.sh _toilet _top _topgit \ + _totd _touch _tput _tr _transmission \ + _tree _truncate _truss _tty _ttys \ + _twidge _twisted _umountable _unace _uname \ + _unexpand _uniq _unison _units _uptime \ + _urls _user_admin _user_at_host _users _users_on \ + _vi _vim _visudo _vmstat _vorbis \ + _vpnc _w _w3m _watch _wc \ + _webbrowser _wget _whereis _who _whois \ + _wiggle _xargs _xmlsoft _xmlstarlet _xmms2 \ + _xxd _xz _yafc _yodl _yp \ + _zcat _zdump _zfs _zfs_dataset _zfs_pool \ + _zip _zsh _acroread _code _dcop \ + _eog _evince _geany _gnome-gv _gqview \ + _gv _kdeconnect _kfmclient _matlab _mozilla \ + _mplayer _mupdf _nautilus _nedit _netscape \ + _okular _pdftk _qiv _rdesktop _setxkbmap \ + _sublimetext _urxvt _vnc _x_arguments _xauth \ + _xautolock _x_borderwidth _xclip _x_color _x_colormapid \ + _x_cursor _x_display _xdvi _x_extension _xfig \ + _x_font _xft_fonts _x_geometry _xinput _x_keysym \ + _xloadimage _x_locale _x_modifier _xmodmap _x_name \ + _xournal _xpdf _xrandr _x_resource _xscreensaver \ + _x_selection_timeout _xset _xt_arguments _xterm _x_title \ + _xt_session_id _x_utils _xv _x_visual _x_window \ + _xwit _zeal _add-zle-hook-widget _add-zsh-hook _alias \ + _aliases __arguments _arrays _assign _autocd \ + _bindkey _brace_parameter _builtin _cd _command \ + _command_names _compadd _compdef _completers _condition \ + _default _delimiters _directory_stack _dirs _disable \ + _dynamic_directory_name _echotc _echoti _emulate _enable \ + _equal _exec _fc _file_descriptors _first \ + _functions _globflags _globqual_delims _globquals _hash \ + _history_modifiers _in_vared _jobs _jobs_bg _jobs_builtin \ + _jobs_fg _kill _limit _limits _math \ + _math_params _mere _module_math_func _options _options_set \ + _options_unset _parameter _parameters _precommand _print \ + _prompt _ps1234 _read _redirect _run-help \ + _sched _set _setopt _source _strftime \ + _subscript _suffix_alias_files _tcpsys _tilde _trap \ + _ttyctl _typeset _ulimit _unhash _user_math_func \ + _value _vared _vars _vcs_info _vcs_info_hooks \ + _wait _which _widgets _zargs _zattr \ + _zcalc _zcalc_line _zcompile _zed _zftp \ + _zle _zmodload _zmv _zparseopts _zpty \ + _zsh-mime-handler _zsocket _zstyle _ztodo +autoload -Uz +X _call_program + +typeset -gUa _comp_assocs +_comp_assocs=( '' ) diff --git a/.config/zsh/.zshrc b/.config/zsh/.zshrc new file mode 100644 index 0000000..c46f51d --- /dev/null +++ b/.config/zsh/.zshrc @@ -0,0 +1,80 @@ +# Luke's config for the Zoomer Shell + +# Enable colors and change prompt: +autoload -U colors && colors # Load colors +PS1="%B%{$fg[red]%}[%{$fg[yellow]%}%n%{$fg[green]%}@%{$fg[blue]%}%M %{$fg[magenta]%}%~%{$fg[red]%}]%{$reset_color%}$%b " +setopt autocd # Automatically cd into typed directory. +stty stop undef # Disable ctrl-s to freeze terminal. +setopt interactive_comments + +# History in cache directory: +HISTSIZE=10000000 +SAVEHIST=10000000 +HISTFILE="${XDG_CACHE_HOME:-$HOME/.cache}/zsh/history" + +# Load aliases and shortcuts if existent. +[ -f "${XDG_CONFIG_HOME:-$HOME/.config}/shell/shortcutrc" ] && source "${XDG_CONFIG_HOME:-$HOME/.config}/shell/shortcutrc" +[ -f "${XDG_CONFIG_HOME:-$HOME/.config}/shell/aliasrc" ] && source "${XDG_CONFIG_HOME:-$HOME/.config}/shell/aliasrc" +[ -f "${XDG_CONFIG_HOME:-$HOME/.config}/shell/zshnameddirrc" ] && source "${XDG_CONFIG_HOME:-$HOME/.config}/shell/zshnameddirrc" + +# Basic auto/tab complete: +autoload -U compinit +zstyle ':completion:*' menu select +zmodload zsh/complist +compinit +_comp_options+=(globdots) # Include hidden files. + +# vi mode +bindkey -v +export KEYTIMEOUT=1 + +# Use vim keys in tab complete menu: +bindkey -M menuselect 'h' vi-backward-char +bindkey -M menuselect 'k' vi-up-line-or-history +bindkey -M menuselect 'l' vi-forward-char +bindkey -M menuselect 'j' vi-down-line-or-history +bindkey -v '^?' backward-delete-char + +# Change cursor shape for different vi modes. +function zle-keymap-select () { + case $KEYMAP in + vicmd) echo -ne '\e[1 q';; # block + viins|main) echo -ne '\e[5 q';; # beam + esac +} +zle -N zle-keymap-select +zle-line-init() { + zle -K viins # initiate `vi insert` as keymap (can be removed if `bindkey -V` has been set elsewhere) + echo -ne "\e[5 q" +} +zle -N zle-line-init +echo -ne '\e[5 q' # Use beam shape cursor on startup. +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 +lfcd () { + tmp="$(mktemp -uq)" + 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" "$@" + if [ -f "$tmp" ]; then + dir="$(cat "$tmp")" + [ -d "$dir" ] && [ "$dir" != "$(pwd)" ] && cd "$dir" + fi +} +bindkey -s '^o' '^ulfcd\n' + +bindkey -s '^a' '^ubc -lq\n' + +bindkey -s '^f' '^ucd "$(dirname "$(fzf)")"\n' + +bindkey '^[[P' delete-char + +# Edit line in vim with ctrl-e: +autoload edit-command-line; zle -N edit-command-line +bindkey '^e' edit-command-line +bindkey -M vicmd '^[[P' vi-delete-char +bindkey -M vicmd '^e' edit-command-line +bindkey -M visual '^[[P' vi-delete + +# Load syntax highlighting; should be last. +source /usr/share/zsh/plugins/fast-syntax-highlighting/fast-syntax-highlighting.plugin.zsh 2>/dev/null diff --git a/.local/bin/compiler b/.local/bin/compiler new file mode 100755 index 0000000..2c4fdf6 --- /dev/null +++ b/.local/bin/compiler @@ -0,0 +1,53 @@ +#!/bin/sh +# +# Compiles .tex. groff (.mom, .ms), .rmd, .md, .org. Opens .sent files as sent +# presentations. Runs scripts based on extension or shebang. + +file=$(readlink -f "$1") +dir=${file%/*} +base="${file%.*}" +ext="${file##*.}" + +cd "$dir" || exit 1 + +textype() { \ + textarget="$(getcomproot "$file" || echo "$file")" + echo "$textarget" + command="pdflatex" + ( head -n5 "$textarget" | grep -qi 'xelatex' ) && command="xelatex" + $command --output-directory="${textarget%/*}" "${textarget%.*}" + grep -qi addbibresource "$textarget" && + biber --input-directory "${textarget%/*}" "${textarget%.*}" && + $command --output-directory="${textarget%/*}" "${textarget%.*}" && + $command --output-directory="${textarget%/*}" "${textarget%.*}" +} + +case "$ext" in + # Try to keep these cases in alphabetical order. + [0-9]) preconv "$file" | refer -PS -e | groff -mandoc -T pdf > "$base".pdf ;; + c) cc "$file" -o "$base" && "$base" ;; + cpp) g++ "$file" -o "$base" && "$base" ;; + cs) mcs "$file" && mono "$base".exe ;; + go) go run "$file" ;; + h) sudo make install ;; + java) javac -d classes "$file" && java -cp classes "${1%.*}" ;; + m) octave "$file" ;; + md) if [ -x "$(command -v lowdown)" ]; then + lowdown --parse-no-intraemph "$file" -Tms | groff -mpdfmark -ms -kept -T pdf > "$base".pdf + elif [ -x "$(command -v groffdown)" ]; then + groffdown -i "$file" | groff -T pdf > "$base".pdf + else + pandoc -t ms --highlight-style=kate -s -o "$base".pdf "$file" + fi ; ;; + mom) preconv "$file" | refer -PS -e | groff -mom -kept -T pdf > "$base".pdf ;; + ms) preconv "$file" | refer -PS -e | groff -me -ms -kept -T pdf > "$base".pdf ;; + org) emacs "$file" --batch -u "$USER" -f org-latex-export-to-pdf ;; + py) python "$file" ;; + [rR]md) Rscript -e "rmarkdown::render('$file', quiet=TRUE)" ;; + rs) cargo build ;; + sass) sassc -a "$file" "$base".css ;; + scad) openscad -o "$base".stl "$file" ;; + sent) setsid -f sent "$file" 2>/dev/null ;; + tex) textype "$file" ;; + *) sed -n '/^#!/s/^#!//p; q' "$file" | xargs -r -I % "$file" ;; +esac diff --git a/.local/bin/cron/README.md b/.local/bin/cron/README.md new file mode 100644 index 0000000..fa0c354 --- /dev/null +++ b/.local/bin/cron/README.md @@ -0,0 +1,11 @@ +# Important Note + +These cronjobs have components that require information about your current display to display notifications correctly. + +When you add them as cronjobs, I recommend you precede the command with commands as those below: + +``` +export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u $USER)/bus; export DISPLAY=:0; . $HOME/.zprofile; then_command_goes_here +``` + +This ensures that notifications will display, xdotool commands will function and environmental variables will work as well. diff --git a/.local/bin/cron/checkup b/.local/bin/cron/checkup new file mode 100644 index 0000000..bd3c634 --- /dev/null +++ b/.local/bin/cron/checkup @@ -0,0 +1,17 @@ +#!/bin/sh + +# Syncs repositories and downloads updates, meant to be run as a cronjob. + +notify-send "📦 Repository Sync" "Checking for package updates..." + +sudo pacman -Syyuw --noconfirm || notify-send "Error downloading updates. + +Check your internet connection, if pacman is already running, or run update manually to see errors." +pkill -RTMIN+8 "${STATUSBAR:-dwmblocks}" + +if pacman -Qu | grep -v "\[ignored\]" +then + notify-send "🎁 Repository Sync" "Updates available. Click statusbar icon (📦) for update." +else + notify-send "📦 Repository Sync" "Sync complete. No new packages for update." +fi diff --git a/.local/bin/cron/crontog b/.local/bin/cron/crontog new file mode 100644 index 0000000..c9a640f --- /dev/null +++ b/.local/bin/cron/crontog @@ -0,0 +1,6 @@ +#!/bin/sh + +# Toggles all cronjobs off/on. +# Stores disabled crontabs in ~/.config/cronsaved until restored. + +([ -f "${XDG_CONFIG_HOME:-$HOME/.config}"/cronsaved ] && crontab - < "${XDG_CONFIG_HOME:-$HOME/.config}"/cronsaved && rm "${XDG_CONFIG_HOME:-$HOME/.config}"/cronsaved && notify-send "🕓 Cronjobs re-enabled.") || ( crontab -l > "${XDG_CONFIG_HOME:-$HOME/.config}"/cronsaved && crontab -r && notify-send "🕓 Cronjobs saved and disabled.") diff --git a/.local/bin/cron/newsup b/.local/bin/cron/newsup new file mode 100644 index 0000000..ed266d7 --- /dev/null +++ b/.local/bin/cron/newsup @@ -0,0 +1,15 @@ +#!/bin/sh + +# Set as a cron job to check for new RSS entries for newsboat. +# If newsboat is open, sends it an "R" key to refresh. + +/usr/bin/notify-send "📰 Updating RSS feeds..." + +pgrep -f newsboat$ && /usr/bin/xdotool key --window "$(/usr/bin/xdotool search --name "^newsboat$")" R && exit + +echo 🔃 > /tmp/newsupdate +pkill -RTMIN+6 "${STATUSBAR:-dwmblocks}" +/usr/bin/newsboat -x reload +rm -f /tmp/newsupdate +pkill -RTMIN+6 "${STATUSBAR:-dwmblocks}" +/usr/bin/notify-send "📰 RSS feed update complete." diff --git a/.local/bin/displayselect b/.local/bin/displayselect new file mode 100755 index 0000000..0227a32 --- /dev/null +++ b/.local/bin/displayselect @@ -0,0 +1,82 @@ +#!/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. + { 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/.local/bin/dmenuhandler b/.local/bin/dmenuhandler new file mode 100755 index 0000000..52960ee --- /dev/null +++ b/.local/bin/dmenuhandler @@ -0,0 +1,20 @@ +#!/bin/sh + +# Feed this script a link and it will give dmenu the given choice programs to open it. +feed="${1:-$(true | dmenu -p 'Paste URL or file path')}" + +case "$(printf "copy url\\nnsxiv\\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 -o "%(title)s.%(ext)s" -f bestaudio --embed-metadata --restrict-filenames' ;; + "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 ;; + nsxiv) curl -sL "$feed" > "/tmp/$(echo "$feed" | sed "s|.*/||;s/%20/ /g")" && nsxiv -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/.local/bin/dmenupass b/.local/bin/dmenupass new file mode 100755 index 0000000..2c14e6f --- /dev/null +++ b/.local/bin/dmenupass @@ -0,0 +1,6 @@ +#!/bin/sh + +# This script is the SUDO_ASKPASS variable, meaning that it will be used as a +# password prompt if needed. + +dmenu -fn Monospace-18 -P -p "$1" <&- && echo diff --git a/.local/bin/dmenuunicode b/.local/bin/dmenuunicode new file mode 100755 index 0000000..d438d53 --- /dev/null +++ b/.local/bin/dmenuunicode @@ -0,0 +1,18 @@ +#!/bin/sh + +# The famous "get a menu of emojis to copy" script. + +# Get user selection via dmenu from emoji file. +chosen=$(cut -d ';' -f1 ~/.local/share/sharks/chars/* | dmenu -i -l 30 | sed "s/ .*//") + +# Exit if none chosen. +[ -z "$chosen" ] && exit + +# If you run this command with an argument, it will automatically insert the +# character. Otherwise, show a message that the emoji has been copied. +if [ -n "$1" ]; then + xdotool type "$chosen" +else + printf "%s" "$chosen" | xclip -selection clipboard + notify-send "'$chosen' copied to clipboard." & +fi diff --git a/.local/bin/getkeys b/.local/bin/getkeys new file mode 100755 index 0000000..0705efe --- /dev/null +++ b/.local/bin/getkeys @@ -0,0 +1,5 @@ +#!/bin/sh + +cat "${XDG_DATA_HOME:-$HOME/.local/share}"/sharks/getkeys/"$1" 2>/dev/null && exit +echo "Run command with one of the following arguments for info about that program:" +ls "${XDG_DATA_HOME:-$HOME/.local/share}"/sharks/getkeys diff --git a/.local/bin/lfub b/.local/bin/lfub new file mode 100755 index 0000000..83fe974 --- /dev/null +++ b/.local/bin/lfub @@ -0,0 +1,25 @@ +#!/bin/sh + +# lfub: +# This is a wrapper script for lf that allows it to create image previews with +# ueberzug. This works in concert with the lf configuration file and the +# lf-cleaner script. + +set -e + +cleanup() { + exec 3>&- + rm "$FIFO_UEBERZUG" +} + +if [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ]; then + lf "$@" +else + [ ! -d "$HOME/.cache/lf" ] && mkdir -p "$HOME/.cache/lf" + export FIFO_UEBERZUG="$HOME/.cache/lf/ueberzug-$$" + mkfifo "$FIFO_UEBERZUG" + ueberzug layer -s <"$FIFO_UEBERZUG" -p json & + exec 3>"$FIFO_UEBERZUG" + trap cleanup HUP INT QUIT TERM PWR EXIT + lf "$@" 3>&- +fi diff --git a/.local/bin/linkhandler b/.local/bin/linkhandler new file mode 100755 index 0000000..d372d84 --- /dev/null +++ b/.local/bin/linkhandler @@ -0,0 +1,26 @@ +#!/bin/sh + +# Feed script a url or file location. +# If an image, it will view in nsxiv, +# if a video or gif, it will view in mpv +# if a music file or pdf, it will download, +# otherwise it opens link in browser. + +if [ -z "$1" ]; then + url="$(xclip -o)" +else + url="$1" +fi + +case "$url" in + *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 ;; + *png|*jpg|*jpe|*jpeg|*gif|*webp) + curl -sL "$url" > "/tmp/$(echo "$url" | sed "s/.*\///;s/%20/ /g")" && nsxiv -a "/tmp/$(echo "$url" | sed "s/.*\///;s/%20/ /g")" >/dev/null 2>&1 & ;; + *pdf|*cbz|*cbr) + curl -sL "$url" > "/tmp/$(echo "$url" | sed "s/.*\///;s/%20/ /g")" && zathura "/tmp/$(echo "$url" | sed "s/.*\///;s/%20/ /g")" >/dev/null 2>&1 & ;; + *mp3|*flac|*opus|*mp3?source*) + qndl "$url" 'curl -LO' >/dev/null 2>&1 ;; + *) + [ -f "$url" ] && setsid -f "$TERMINAL" -e "$EDITOR" "$url" >/dev/null 2>&1 || setsid -f "$BROWSER" "$url" >/dev/null 2>&1 +esac diff --git a/.local/bin/maimpick b/.local/bin/maimpick new file mode 100755 index 0000000..5de26c1 --- /dev/null +++ b/.local/bin/maimpick @@ -0,0 +1,18 @@ +#!/bin/sh + +# This is bound to Shift+PrintScreen by default, requires maim. It lets you +# choose the kind of screenshot to take, including copying the image or even +# highlighting an area to copy. scrotcucks on suicidewatch right now. + +# variables +output="$(date '+%y%m%d-%H%M-%S').png" +xclip_cmd="xclip -sel clip -t image/png" + +case "$(printf "a selected area\\ncurrent window\\nfull screen\\na selected area (copy)\\ncurrent window (copy)\\nfull screen (copy)" | dmenu -l 6 -i -p "Screenshot which area?")" in + "a selected area") maim -u -s pic-selected-"${output}" ;; + "current window") maim -q -d 0.2 -i "$(xdotool getactivewindow)" pic-window-"${output}" ;; + "full screen") maim -q -d 0.2 pic-full-"${output}" ;; + "a selected area (copy)") maim -u -s | ${xclip_cmd} ;; + "current window (copy)") maim -q -d 0.2 -i "$(xdotool getactivewindow)" | ${xclip_cmd} ;; + "full screen (copy)") maim -q -d 0.2 | ${xclip_cmd} ;; +esac diff --git a/.local/bin/mounter b/.local/bin/mounter new file mode 100755 index 0000000..756d04d --- /dev/null +++ b/.local/bin/mounter @@ -0,0 +1,114 @@ +#!/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: Try decrypt for drives in crtypttab +# TODO: Add some support for connecting iPhones (although they are annoying). + +IFS=' +' +# Function for escaping cell-phone names. +escape(){ echo "$@" | iconv -cf UTF-8 -t ASCII//TRANSLIT | tr -d '[:punct:]' | tr '[:upper:]' '[:lower:]' | tr ' ' '-' | sed "s/-\+/-/g;s/\(^-\|-\$\)//g" ;} + +# Check for phones. +phones="$(simple-mtpfs -l 2>/dev/null | sed "s/^/📱/")" +mountedphones="$(grep "simple-mtpfs" /etc/mtab)" +# If there are already mounted phones, remove them from the list of mountables. +[ -n "$mountedphones" ] && phones="$(for phone in $phones; do + for mounted in $mountedphones; do + escphone="$(escape "$phone")" + [[ "$mounted" =~ "$escphone" ]] && break 1 + done && continue 1 + echo "$phone" +done)" + +# Check for drives. +lsblkoutput="$(lsblk -rpo "uuid,name,type,size,label,mountpoint,fstype")" +# Get all LUKS drives +allluks="$(echo "$lsblkoutput" | grep crypto_LUKS)" +# Get a list of the LUKS drive UUIDs already decrypted. +decrypted="$(find /dev/disk/by-id/dm-uuid-CRYPT-LUKS2-* | sed "s|.*LUKS2-||;s|-.*||")" +# 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. +unopenedluks="$(for drive in $allluks; do + uuid="${drive%% *}" + uuid="${uuid//-}" # This is a bashism. + [ -n "$decrypted" ] && 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/ *$//")" + +# Quit the script if a sequential command fails. +set -e + +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 +} + +attemptmount(){ + # Attempt to mount without a mountpoint, to see if drive is in fstab. + sudo -A mount "$chosen" || return 1 + notify-send "💾Drive Mounted." "$chosen mounted." + exit +} + +case "$chosen" in + 💾*) + chosen="${chosen%% *}" + chosen="${chosen:1}" # This is a bashism. + attemptmount || getmount + sudo -A mount "$chosen" "$mp" -o uid="$(id -u)",gid="$(id -g)" + 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" + + attemptmount || getmount + sudo -A mount "/dev/mapper/usb$num" "$mp" -o uid="$(id -u)",gid="$(id -g)" + notify-send "🔓Decrypted drive Mounted." "$chosen decrypted and mounted to $mp." + ;; + + 📱*) + notify-send "❗Note" "Remember to allow file access on your phone now." + getmount + number="${chosen%%:*}" + number="${chosen:1}" # This is a bashism. + sudo -A simple-mtpfs -o allow_other -o fsname="simple-mtpfs-$(escape "$chosen")" --device "$number" "$mp" + notify-send "🤖 Android Mounted." "Android device mounted to $mp." + ;; +esac diff --git a/.local/bin/noisereduce b/.local/bin/noisereduce new file mode 100755 index 0000000..c344760 --- /dev/null +++ b/.local/bin/noisereduce @@ -0,0 +1,81 @@ +#!/usr/bin/sh + +usage () +{ + printf "Usage : noisereduce <input video file> <output video file>\n" + exit +} + +# Tests for requirements +ifinstalled ffmpeg || { echo >&2 "We require 'ffmpeg' but it's not installed."; exit 1; } +ifinstalled sox || { echo >&2 "We require 'ffmpeg' but it's not installed."; exit 1; } + +if [ "$#" -ne 2 ] +then + usage +fi + +if [ ! -e "$1" ] +then + printf "File not found: %s\n" "$1" + exit +fi + +if [ -e "$2" ] +then + printf "File %s already exists, overwrite? [y/N]\n: " "$2" + read -r yn + case $yn in + [Yy]* ) ;; + * ) exit;; + esac +fi + +inBasename=$(basename "$1") +inExt="${inBasename##*.}" + +isVideoStr=$(ffprobe -v warning -show_streams "$1" | grep codec_type=video) +if [ -n "$isVideoStr" ] +then + isVideo=1 + printf "Detected %s as a video file\n" "$inBasename" +else + isVideo=0 + printf "Detected %s as an audio file\n" "$inBasename" +fi + +printf "Sample noise start time [00:00:00]: " +read -r sampleStart +if [ -z "$sampleStart" ] ; then sampleStart="00:00:00"; fi +printf "Sample noise end time [00:00:00.900]: " +read -r sampleEnd +if [ -z "$sampleEnd" ] ; then sampleEnd="00:00:00.900"; fi +printf "Noise reduction amount [0.21]: " +read -r sensitivity +if [ -z "$sensitivity" ] ; then sensitivity="0.21"; fi + + +tmpVidFile="/tmp/noiseclean_tmpvid.$inExt" +tmpAudFile="/tmp/noiseclean_tmpaud.wav" +noiseAudFile="/tmp/noiseclean_noiseaud.wav" +noiseProfFile="/tmp/noiseclean_noise.prof" +tmpAudCleanFile="/tmp/noiseclean_tmpaud-clean.wav" + +printf "Cleaning noise on %s...\n" "$1" + +if [ $isVideo -eq "1" ]; then + ffmpeg -v warning -y -i "$1" -qscale:v 0 -vcodec copy -an "$tmpVidFile" + ffmpeg -v warning -y -i "$1" -qscale:a 0 "$tmpAudFile" +else + cp "$1" "$tmpAudFile" +fi +ffmpeg -v warning -y -i "$1" -vn -ss "$sampleStart" -t "$sampleEnd" "$noiseAudFile" +sox "$noiseAudFile" -n noiseprof "$noiseProfFile" +sox "$tmpAudFile" "$tmpAudCleanFile" noisered "$noiseProfFile" "$sensitivity" +if [ $isVideo -eq "1" ]; then + ffmpeg -v warning -y -i "$tmpAudCleanFile" -i "$tmpVidFile" -vcodec copy -qscale:v 0 -qscale:a 0 "$2" +else + cp "$tmpAudCleanFile" "$2" +fi + +printf "Done" diff --git a/.local/bin/remaps b/.local/bin/remaps new file mode 100755 index 0000000..fed2965 --- /dev/null +++ b/.local/bin/remaps @@ -0,0 +1,14 @@ +#!/bin/sh +# remaps: 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 -q "Caps Lock:\s*on" && xdotool key Caps_Lock diff --git a/.local/bin/sbackup b/.local/bin/sbackup new file mode 100755 index 0000000..1e8c8f4 --- /dev/null +++ b/.local/bin/sbackup @@ -0,0 +1,11 @@ +#!/bin/bash +# +# Backup Script with rsync +# +# Zielverzeichnis für das Backup +BACKUP_DIR="/backup/home_backup" + +# Backup mit rsync (komprimiert mit zstd) +sudo rsync -a --delete --compress --info=progress2 --rsync-path="rsync --compress-level=9" /home/artix/ "$BACKUP_DIR" + +echo "Backup abgeschlossen: $BACKUP_DIR" diff --git a/.local/bin/slider b/.local/bin/slider new file mode 100755 index 0000000..3460c77 --- /dev/null +++ b/.local/bin/slider @@ -0,0 +1,126 @@ +#!/bin/sh + +# Give a file with images and timecodes and creates a video slideshow of them. +# +# Timecodes must be in format 00:00:00. +# +# Imagemagick and ffmpeg required. + +# Application cache if not stated elsewhere. +cache="${XDG_CACHE_HOME:-$HOME/.cache}/slider" + +while getopts "hvrpi:c:a:o:d:f:t:e:x:s:" o; do case "${o}" in + c) bgc="$OPTARG" ;; + t) fgc="$OPTARG" ;; + f) font="$OPTARG" ;; + i) file="$OPTARG" ;; + a) audio="$OPTARG" ;; + o) outfile="$OPTARG" ;; + d) prepdir="$OPTARG" ;; + r) redo="$OPTARG" ;; + s) ppt="$OPTARG" ;; + e) endtime="$OPTARG" ;; + x) res="$OPTARG" + echo "$res" | grep -qv "^[0-9]\+x[0-9]\+$" && + echo "Resolution must be dimensions separated by a 'x': 1280x720, etc." && + exit 1 ;; + p) echo "Purge old build files in $cache? [y/N]" + read -r confirm + echo "$confirm" | grep -iq "^y$" && rm -rf "$cache" && echo "Done." + exit ;; + v) verbose=True ;; + *) echo "$(basename "$0") usage: + -i input timecode list (required) + -a audio file + -c color of background (use html names, black is default) + -t text color for text slides (white is default) + -s text font size for text slides (150 is default) + -f text font for text slides (sans serif is default) + -o output video file + -e if no audio given, the time in seconds that the last slide will be shown (5 is default) + -x resolution (1920x1080 is default) + -d tmp directory + -r rerun imagemagick commands even if done previously (in case files or background has changed) + -p purge old build files instead of running + -v be verbose" && exit 1 + +esac done + +# Check that the input file looks like it should. +{ head -n 1 "$file" 2>/dev/null | grep -q "^00:00:00 " ;} || { + echo "Give an input file with -i." && + echo "The file should look as this example: + +00:00:00 first_image.jpg +00:00:03 otherdirectory/next_image.jpg +00:00:09 this_image_starts_at_9_seconds.jpg +etc... + +Timecodes and filenames must be separated by Tabs." && + exit 1 + } + +if [ -n "${audio+x}" ]; then + # Check that the audio file looks like an actual audio file. + case "$(file --dereference --brief --mime-type -- "$audio")" in + audio/*) ;; + *) echo "That doesn't look like an audio file."; exit 1 ;; + esac + totseconds="$(date '+%s' -d $(ffmpeg -i "$audio" 2>&1 | awk '/Duration/ {print $2}' | sed s/,//))" + endtime="$((totseconds-seconds))" +fi + +prepdir="${prepdir:-$cache/$file}" +outfile="${outfile:-$file.mp4}" +prepfile="$prepdir/$file.prep" + +[ -n "${verbose+x}" ] && echo "Preparing images... May take a while depending on the number of files." +mkdir -p "$prepdir" + +{ +while read -r x; +do + # Get the time from the first column. + time="${x%% *}" + seconds="$(date '+%s' -d "$time")" + # Duration is not used on the first looped item. + duration="$((seconds - prevseconds))" + + # Get the filename/text content from the rest. + content="${x#* }" + base="$(basename "$content")" + base="${base%.*}.jpg" + + if [ -f "$content" ]; then + # If images have already been made in a previous run, do not recreate + # them unless -r was given. + { [ ! -f "$prepdir/$base" ] || [ -n "${redo+x}" ] ;} && + convert -size "${res:-1920x1080}" canvas:"${bgc:-black}" -gravity center "$content" -resize 1920x1080 -composite "$prepdir/$base" + else + { [ ! -f "$prepdir/$base" ] || [ -n "${redo+x}" ] ;} && + convert -size "${res:-1920x1080}" -background "${bgc:-black}" -fill "${fgc:-white}" -font "${font:-Sans}" -pointsize "${ppt:-150}" -gravity center label:"$content" "$prepdir/$base" + fi + + # If the first line, do not write yet. + [ "$time" = "00:00:00" ] || echo "file '$prevbase' +duration $duration" + + # Keep the information required for the next file. + prevbase="$base" + prevtime="$time" + prevseconds="$(date '+%s' -d "$prevtime")" +done < "$file" +# Do last file which must be given twice as follows +echo "file '$base' +duration ${endtime:-5} +file '$base'" +} > "$prepfile" +if [ -n "${audio+x}" ]; then + ffmpeg -hide_banner -y -f concat -safe 0 -i "$prepfile" -i "$audio" -c:a aac -vsync vfr -c:v libx264 -pix_fmt yuv420p "$outfile" +else + ffmpeg -hide_banner -y -f concat -safe 0 -i "$prepfile" -vsync vfr -c:v libx264 -pix_fmt yuv420p "$outfile" +fi + +# Might also try: +# -vf "fps=${fps:-24},format=yuv420p" "$outfile" +# but has given some problems. diff --git a/.local/bin/statusbar/sb-battery b/.local/bin/statusbar/sb-battery new file mode 100755 index 0000000..79030bc --- /dev/null +++ b/.local/bin/statusbar/sb-battery @@ -0,0 +1,37 @@ +#!/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) setsid -f "$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/.local/bin/statusbar/sb-bluetooth [TODO] b/.local/bin/statusbar/sb-bluetooth [TODO] new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/.local/bin/statusbar/sb-bluetooth [TODO] diff --git a/.local/bin/statusbar/sb-clock b/.local/bin/statusbar/sb-clock new file mode 100755 index 0000000..572f99d --- /dev/null +++ b/.local/bin/statusbar/sb-clock @@ -0,0 +1,33 @@ +#!/bin/sh + +# If you relocate you have to manually change the timezone +export TZ=Europe/Berlin + +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 | sed "s/\<$(date +'%e')\>/<b><span color='red'>&<\/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) setsid -f "$TERMINAL" -e "$EDITOR" "$0" ;; +esac + +# Ausgabe der Zeit ohne Emoji +date "+%Y %b %d %a | %I:%M%p" diff --git a/.local/bin/statusbar/sb-cpu b/.local/bin/statusbar/sb-cpu new file mode 100755 index 0000000..85e52c8 --- /dev/null +++ b/.local/bin/statusbar/sb-cpu @@ -0,0 +1,12 @@ +#!/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) setsid -f "$TERMINAL" -e "$EDITOR" "$0" ;; +esac + +sensors | awk '/Core 0/ {print "" $3 ")" }' diff --git a/.local/bin/statusbar/sb-cpubars b/.local/bin/statusbar/sb-cpubars new file mode 100755 index 0000000..4015893 --- /dev/null +++ b/.local/bin/statusbar/sb-cpubars @@ -0,0 +1,44 @@ +#!/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) setsid -f "$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/.local/bin/statusbar/sb-disk b/.local/bin/statusbar/sb-disk new file mode 100755 index 0000000..7f3ff79 --- /dev/null +++ b/.local/bin/statusbar/sb-disk @@ -0,0 +1,23 @@ +#!/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) setsid -f "$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/.local/bin/statusbar/sb-help-icon b/.local/bin/statusbar/sb-help-icon new file mode 100755 index 0000000..051f663 --- /dev/null +++ b/.local/bin/statusbar/sb-help-icon @@ -0,0 +1,20 @@ +#!/bin/sh + +# Das anklickbare Hilfemenü. Mittelklick, um den Fenstermanager neu zu starten. + +# Überprüfe, ob dwm läuft, verwende dwm's Readme und starte neu. +if pidof dwm >/dev/null; then + READMEFILE="/home/artix/.config/sharks/commands.md" + restartwm() { pkill -HUP dwm ;} +else + restartwm() { i3 restart ;} +fi + +case $BLOCK_BUTTON in + 1) typora "${READMEFILE:-${XDG_DATA_HOME:-$HOME/.local/share}/larbs/readme.md}" ;; + 2) restartwm ;; + 3) notify-send "❓ Shortcutkeys" ;; + 6) setsid -f "$TERMINAL" -e "$EDITOR" "$0" ;; +esac + +echo "❓" diff --git a/.local/bin/statusbar/sb-internet b/.local/bin/statusbar/sb-internet new file mode 100755 index 0000000..f94447d --- /dev/null +++ b/.local/bin/statusbar/sb-internet @@ -0,0 +1,33 @@ +#!/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) setsid -f "$TERMINAL" -e "$EDITOR" "$0" ;; +esac + +# Wifi +if [ "$(cat /sys/class/net/w*/operstate 2>/dev/null)" = 'up' ] ; then + wifiicon="$(awk '/^\s*w/ { print "📶", int($3 * 100 / 70) "% " }' /proc/net/wireless)" +elif [ "$(cat /sys/class/net/w*/operstate 2>/dev/null)" = 'down' ] ; then + [ "$(cat /sys/class/net/w*/flags 2>/dev/null)" = '0x1003' ] && wifiicon="📡 " || wifiicon="❌ " +fi + +# Ethernet +[ "$(cat /sys/class/net/e*/operstate 2>/dev/null)" = 'up' ] && ethericon="🛜" || ethericon="🛜" + +# TUN +[ -n "$(cat /sys/class/net/tun*/operstate 2>/dev/null)" ] && tunicon=" 🔒" + +printf "%s%s%s\n" "$wifiicon" "$ethericon" "$tunicon" diff --git a/.local/bin/statusbar/sb-kbselect b/.local/bin/statusbar/sb-kbselect new file mode 100755 index 0000000..2c58325 --- /dev/null +++ b/.local/bin/statusbar/sb-kbselect @@ -0,0 +1,17 @@ +#!/bin/sh +# works on any init system +# requirements: dmenu, xorg-setxkbmap +kb="⌨️" || 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)" + [ -z "$kb_choice" ] && exit 0 + kb="$(echo "$kb_choice" | awk '{print "⌨️"}')" + setxkbmap "$(echo "$kb_choice" | awk '{print $3}')" + 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) setsid -f "$TERMINAL" -e "$EDITOR" "$0" ;; +esac + +echo "$kb" diff --git a/.local/bin/statusbar/sb-mailbox [TODO] b/.local/bin/statusbar/sb-mailbox [TODO] new file mode 100755 index 0000000..7483aa4 --- /dev/null +++ b/.local/bin/statusbar/sb-mailbox [TODO] @@ -0,0 +1,20 @@ +#!/bin/sh + +# Displays number of unread mail and an loading icon if updating. +# When clicked, brings up `neomutt`. + +case $BLOCK_BUTTON in + 1) setsid -w -f "$TERMINAL" -e neomutt; pkill -RTMIN+12 "${STATUSBAR:-dwmblocks}" ;; + 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) setsid -f "$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/.local/bin/statusbar/sb-memory b/.local/bin/statusbar/sb-memory new file mode 100755 index 0000000..1fe74de --- /dev/null +++ b/.local/bin/statusbar/sb-memory @@ -0,0 +1,13 @@ +#!/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) setsid -f "$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/.local/bin/statusbar/sb-mpdup b/.local/bin/statusbar/sb-mpdup new file mode 100755 index 0000000..af81a7d --- /dev/null +++ b/.local/bin/statusbar/sb-mpdup @@ -0,0 +1,8 @@ +#!/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/.local/bin/statusbar/sb-music [TODO] b/.local/bin/statusbar/sb-music [TODO] new file mode 100755 index 0000000..6734eeb --- /dev/null +++ b/.local/bin/statusbar/sb-music [TODO] @@ -0,0 +1,19 @@ +#!/bin/sh + +filter() { sed "/^volume:/d;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 ; setsid -f "$TERMINAL" -e "$EDITOR" "$0" ;; + *) mpc status | filter ;; +esac diff --git a/.local/bin/statusbar/sb-news b/.local/bin/statusbar/sb-news new file mode 100755 index 0000000..58ff9a9 --- /dev/null +++ b/.local/bin/statusbar/sb-news @@ -0,0 +1,17 @@ +#!/bin/sh + +# Displays an 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 "\- 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) setsid -f "$TERMINAL" -e "$EDITOR" "$0" ;; +esac + +# Display update icon if updating, otherwise display nothing. +cat /tmp/newsupdate 2>/dev/null || echo "" diff --git a/.local/bin/statusbar/sb-pacpackages b/.local/bin/statusbar/sb-pacpackages new file mode 100755 index 0000000..6acdce6 --- /dev/null +++ b/.local/bin/statusbar/sb-pacpackages @@ -0,0 +1,29 @@ +#!/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) setsid -f "$TERMINAL" -e "$EDITOR" "$0" ;; +esac + +pacman -Qu | grep -Fcv "[ignored]" | sed "s/^/📦/;s/^📦0$//g" diff --git a/.local/bin/statusbar/sb-popupgrade b/.local/bin/statusbar/sb-popupgrade new file mode 100755 index 0000000..51aa48f --- /dev/null +++ b/.local/bin/statusbar/sb-popupgrade @@ -0,0 +1,9 @@ +#!/bin/sh + +printf "Beginning upgrade.\\n" + +yay -Syu --noconfirm +pkill -RTMIN+8 "${STATUSBAR:-dwmblocks}" + +printf "\\nUpgrade complete.\\nPress <Enter> to exit window.\\n\\n" +read -r _ diff --git a/.local/bin/statusbar/sb-tasks [TODO] b/.local/bin/statusbar/sb-tasks [TODO] new file mode 100755 index 0000000..fbee70b --- /dev/null +++ b/.local/bin/statusbar/sb-tasks [TODO] @@ -0,0 +1,16 @@ +#!/bin/sh + +# 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 + 6) setsid -f "$TERMINAL" -e "$EDITOR" "$0" ;; +esac + +[ "$num" != "0(0)" ] && + echo "🤖$num" diff --git a/.local/bin/statusbar/sb-volume b/.local/bin/statusbar/sb-volume new file mode 100755 index 0000000..e66dea7 --- /dev/null +++ b/.local/bin/statusbar/sb-volume @@ -0,0 +1,39 @@ +#!/bin/sh + +# Prints the current volume or 🔇 if muted. + +case $BLOCK_BUTTON in + 1) setsid -w -f "$TERMINAL" -e pulsemixer; pkill -RTMIN+10 "${STATUSBAR:-dwmblocks}" ;; + 2) wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle ;; + 4) wpctl set-volume @DEFAULT_AUDIO_SINK@ 1%+ ;; + 5) wpctl set-volume @DEFAULT_AUDIO_SINK@ 1%- ;; + 3) notify-send "📢 Volume module" "\- Shows volume 🔊, 🔇 if muted. +- Middle click to mute. +- Scroll to change." ;; + 6) setsid -f "$TERMINAL" -e "$EDITOR" "$0" ;; +esac + +vol="$(wpctl get-volume @DEFAULT_AUDIO_SINK@)" + +# If muted, print 🔇 and exit. +[ "$vol" != "${vol%\[MUTED\]}" ] && echo 🔇 && exit + +vol="${vol#Volume: }" + +split() { + # For ommiting the . without calling and external program. + IFS=$2 + set -- $1 + printf '%s' "$@" +} + +vol="$(printf "%.0f" "$(split "$vol" ".")")" + +case 1 in + $((vol >= 70)) ) icon="🔊" ;; + $((vol >= 30)) ) icon="🔉" ;; + $((vol >= 1)) ) icon="🔈" ;; + * ) echo 🔇 && exit ;; +esac + +echo "$icon$vol%" diff --git a/.local/bin/statusbar/sb-write b/.local/bin/statusbar/sb-write new file mode 100755 index 0000000..b731626 --- /dev/null +++ b/.local/bin/statusbar/sb-write @@ -0,0 +1,20 @@ +#!/bin/sh + +# Das anklickbare Hilfemenü. Mittelklick, um den Fenstermanager neu zu starten. + +# Überprüfe, ob dwm läuft, verwende dwm's Readme und starte neu. +if pidof dwm >/dev/null; then + READMEFILE="/home/artix/Files Sync/📝 Writings/Memoiren/Wer wir sind/Kapitel 1 - Erstes Quartal/✔️ 1. Kapitel Übersicht.txt" + restartwm() { pkill -HUP dwm ;} +else + restartwm() { i3 restart ;} +fi + +case $BLOCK_BUTTON in + 1) typora "${READMEFILE:-${XDG_DATA_HOME:-$HOME/.local/share}/larbs/readme.md}" ;; + 2) restartwm ;; + 3) notify-send "❓ Shortcutkeys" ;; + 6) setsid -f "$TERMINAL" -e "$EDITOR" "$0" ;; +esac + +echo "write" diff --git a/.local/bin/transadd b/.local/bin/transadd new file mode 100755 index 0000000..a598fad --- /dev/null +++ b/.local/bin/transadd @@ -0,0 +1,9 @@ +#!/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/.local/src/dmenu b/.local/src/dmenu new file mode 160000 +Subproject c1819f18c07df6984bbfd2ca7207295eec85806 diff --git a/.local/src/dwm b/.local/src/dwm new file mode 160000 +Subproject 499d9e523a156e55511cee24ac30da9c0c9919f diff --git a/.local/src/dwmblocks b/.local/src/dwmblocks new file mode 160000 +Subproject 1c9744ac7ded4fff8171169bc0b9736f3acd4cf diff --git a/.local/src/st b/.local/src/st new file mode 160000 +Subproject 36d225d71d448bfe307075580f0d8ef81eeb5a8 diff --git a/.local/src/surf b/.local/src/surf new file mode 160000 +Subproject 9ef79bf7106496c736ba613c51d2fd5af9d873a diff --git a/.zprofile b/.zprofile new file mode 120000 index 0000000..2c3b685 --- /dev/null +++ b/.zprofile @@ -0,0 +1 @@ +/home/artix/git/hack/hosted/git/rice/.conf/shell/profile
\ No newline at end of file @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + <program> Copyright (C) <year> <name of author> + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<http://www.gnu.org/licenses/>. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +<http://www.gnu.org/philosophy/why-not-lgpl.html>. diff --git a/README.md b/README.md new file mode 100644 index 0000000..719ab09 --- /dev/null +++ b/README.md @@ -0,0 +1,27 @@ +# Ricebowl + +A bowl of delicous fine graned golden rice. + +- Scripts are in `~/.local/bin/` +- Settings are in `~/.config` +- Environmental variables are in `~/.zprofile` and `~/.config/x11/xprofile` +- File bookmarks in `~/.config/shell/bm-files` +- Directory bookmarks in `~/.config/shell/bm-dirs` + +## Usage + +These dotfiles are intended to go with numerous suckless programs I use: + +- [dwm](https://github.com/lukesmithxyz/dwm) (window manager) +- [dwmblocks](https://github.com/lukesmithxyz/dwmblocks) (statusbar) +- [st](https://github.com/lukesmithxyz/st) (terminal emulator) + +## Installation + +Use [SHARKS](https://shars.sh) to a guidea autoinstallation: + +``` +curl -LO sharks.sh/sharks.sh +``` + +or clone the repo files directly to your home directory and install the [dependencies](https://github.com/LukeSmithxyz/LARBS/blob/master/static/progs.csv). |