about summary refs log tree commit diff stats
path: root/bin
diff options
context:
space:
mode:
authorEnsa <psychoticfervor@tuta.io>2020-01-30 13:31:42 -0800
committerEnsa <psychoticfervor@tuta.io>2020-01-30 14:56:12 -0800
commit8fa69fc68072910f855958b3b79360ede1a32682 (patch)
tree7045a02b4ff7ead46f746fed7293a0408ec392ae /bin
parent4684d80b6271dd775cd23dabf2b91d6ce56fa33a (diff)
downloadcfg-8fa69fc68072910f855958b3b79360ede1a32682.tar.gz
new scripts, switched to ksh, and a lot more
sorry, it's been ages since i've updated this thing, so there's a lot of
stuff to go through here.

NEW:
bin/
	bother: bothers you with an urgent notification containing the
		contents of the file $HOME/today
	opener: opens files according to the mimetype file(1) gets from
		the aforementioned file
config/
	ksh: my config files for openbsd's ksh
		00-opts.ksh
			just sets vi because ksh's options are sparse
			and sane
		diraliases
			uses alias -d to set a bunch of convenient
			shortcuts
			not everybody will have these specific
			directories: i recommend you change these to be
			appropriate for you. "grep '^cd'|sort" your shell's
			histfile to figure out the common ones
		exports.ksh
			has exports for the following
			$GITHUB (site shortcut for git cloning)
			$IRC_SERVERS_FILE (ircii/epic5 thing)
			$CLICOLOR (enables ANSI color on colorls)
			$PF_INFO (specifies what pfetch should show)
			$MANPATH (normal MANPATH for openbsd plus one in
			the user's directory (user-added man pages))
		functions.ksh
			mc() (makes a directory and moves into it)
			mpvpin (makes a pinned mpv window, shows up on
			all workspaces (assumes you're using my dwm
			build))
		kshrc
			exports the XDG_*_HOME variables, keeping old
			values if old values existed
			sources config/shrc
			checks to see if PATH contains $HOME/.local/bin
				if not, adds it
			sources the other *.ksh files in the dir
			sources $HOME/.config/lf/lfcd.sh
				same as the one in lf's source
			sources diraliases and config/aliasrc
		zz-prompt.ksh
			named like that so it's sourced last
			contains a lot of convenience vars for ANSI
			escapes
			basically just
			return value with green background
			time with magenta background
			username with bright red foreground
			short hostname with bright blue foreground
			current directory with bright cyan foreground
	wal/colorschemes/dark/base16-causalagency.json
		quick and dirty implementation of https://causal.agency/
		's colorscheme

MODIFIED:
	bin
		comm-sel
			added a stanza that uses st-altscreen when
			available
				check DEPENDENCIES.md for details
			swapped irssi for epic5
			now uses env to force 6cord to use 16color
		popmail->mbsync-cron
			changed the name so it doesnt sound like the
			program uses the POP mail protocol
			no longer uses $acc because the $account
			instances are already clean
			added a stanza that prevents per-email notifs
			from happening if you would have gotten more
			than 15 of them
			finally removed the old broken $from and
			$subject lines
			commented out old statusline file, now just uses
			a single icon for any new mail in any box
				less accurate but more concise
		pw
			now has functionality for sending the generated
			password to the primary X selection
			also backgrounds both the "send to selection"
			modes so they don't make the terminal wait for
			the clear timer to finish
	lf/lfrc
		now has a similar prompt to ksh
		uses opener instead of that mess that basically did the
		same thing but worse
		doesn't add a custom delete prompt anymore, that was
		slow
	ncmpcpp/config
		now splits library albums by date
		now explicitly disables mouse
	newsboat/config
		youtube audio macro now uses the new better config-music
		for ytdl
	nvim/init.vim
		got rid of wal.vim
			i use 16color neovim now
		moved colorizer and VimCompletesMe to the plugin
		graveyard
		added lf.vim (lf integration) and bclose.vim
		(requirement)
			made it replace netrw
		now sets the colorscheme to delek, does not set
		termguicolors
		made cppcheck the syntastic checker for the cpp ft
		removed fancy separators from lightline
		added (broken) shortcut to save as root
		added shortcut to clear highlights in normal mode
		shortened the MakeTags line
		updated the c-practice line as well as making it use pcc
		added lines treating calcurse notes as markdown
		enabled ksh on the ksh ft
	shrc
		changed ISH to ksh
		removed ZDOTDIR
	wal/templates
		6cord.toml
			disabled truecolor
			removed pointless obfuscate-words disable
			changed command-prefix to be more brief
			changed default-status to be empty
		colors-wal-dmenu.h
			changed the background to color0 on both schemes
			fg is now 4 for norm and 1 for sel
		colors-wal-dwm.h
			changed the background to color0 on both schemes
			fg is now 4 for norm and 1 for sel
		dunstrc
			changed font name to match what the otb terminus
			is (at size 8 now)
			simplified dmenu line because all of that is now
			compiled into dmenu
		zathurarc
			changed font to SauceCodePro Nerd Font Mono 10
			because terminus otb refused to work
	youtube-dl/
		config
			changed --output to put everything into
			subfolders
		config-music
			commented out downloading with axel because i
			was getting rate limited on bandcamp
			--output now almost 100% lines up with my music
			folder's format

diff --git a/DEPENDENCIES.md b/DEPENDENCIES.md
index 9e1b086..a2b356e 100644
--- a/DEPENDENCIES.md
+++ b/DEPENDENCIES.md
@@ -16,17 +16,18 @@ each and every file in this repository can be altered by anyone with any goal, i
 * `opt: any of the previous bullets`: same meaning as before but optional
 * `(description)`: explains why it's necessary/what optional feature it enables if present
 # bin/
-* popmail: populate local maildirs and notify the user if there is new mail
+* mbsync-cron: populate local maildirs and notify the user if there is new mail
   * [isync](https://isync.sourceforge.net)
   * properly configured `$HOME/.mbsync` (One Group per email account)
   * libnotify (notifies the user for new mail and the subject line of said mail)
   * `$XDG_DATA_HOME`
 * comm-sel: a handy menu for spawning communication clients
-  * [irssi](https://irssi.org)
+  * [epic5](https://epicsol.org)
   * [6cord](https://gitlab.com/diamondburned/6cord)
   * [scli](https://github.com/isamert/scli)
   * [dmenu](https://dmenu.suckless.org) (provides a menu for selecting which client to start)
   * notify-send (notifies the user that they made an invalid choice)
+  * opt: st-altscreen (build of st that doesn't have scrollback or extra bindings, doesnt interfere with programs and is generally smaller)
   * `$TERMINAL`
 * lh: a script that takes a URL as input and does different things depending on what the URL links to
   * [mpv](https://mpv.io) (video file streaming, streaming from sites like youtube, viewing livestreams from twitch)
@@ -39,11 +40,16 @@ each and every file in this repository can be altered by anyone with any goal, i
   * `$READER`
   * `$EDITOR`
   * `$BROWSER`
+* opener: a script that uses file(1) to determine what a file is, then opens it with an appropriate program
+  * [mpv](https://mpv.io) (opens video and audio files)
+  * [sxiv](https://github.com/muennich/sxiv) (used to view images)
+  * `$READER`
+  * `$EDITOR`
 * prompt: makes prompting the user for particular actions easier
   * [dmenu](https://dmenu.suckless.org)
 * pw: generates a password of variable length
-  * opt: xclip (enables pw's mode copying the generated password to the clipboard)
-  * opt: libnotify (notifies the user that the password is generated, how long the password will be kept in the clipboard for, and when the clipboard is cleared.)
+  * opt: xclip (enables pw's mode copying the generated password to the clipboard or the primary selection)
+  * opt: libnotify (notifies the user that the password is generated, how long the password will be kept in the clipboard/primary selection for, and when the clipboard/primary selection is cleared.)
 * rsschk: takes a URL as an argument and adds it to newsboat's url file, with an optional second argument specifying a category
   * libnotify (notifies the user of improper usage, and whether or not they should probably edit the url file manually to add a category.)
   * [newsboat](https://newsboat.org)
@@ -55,14 +61,9 @@ each and every file in this repository can be altered by anyone with any goal, i
   * xwallpaper (sets the wallpaper)
 # config/
 * lfrc: configuration file for [lf](https://github.com/gokcehan/lf)
-  * opt: $EDITOR (viewing text files)
-  * opt: [gimp](https://gimp.org) (editing vector images)
-  * opt: [zathura](https://pwmt.org/projects/zathura) (viewing ebooks)
-  * opt: [sxiv](https://github.com/muennich/sxiv) (view images)
-  * opt: mpv (listening to audio files or viewing video files)
-  * opt: bin/lh (wildcard for opening files not detected by other MIME types)
+  * opt: bin/opener (for opening files)
 * shrc: shell environment, particularly for bin/shenv
-  * nvim (`$EDITOR`)
+  * neovim (`$EDITOR`)
   * lf (`$FILE`)
   * st (`$TERMINAL`)
   * firefox (`$BROWSER`)
@@ -71,23 +72,20 @@ each and every file in this repository can be altered by anyone with any goal, i
   * neomutt (`$MAILER`)
   * ncmpcpp (`$MUSIC`)
   * newsboat (`$RSS`)
-  * zsh (`$ISH` `$ZDOTDIR`)
+  * ksh (`$ISH` `$ZDOTDIR`)
   * maim (`$SCR`)
   * slock (`$LOCK`)
   * opt: go (`$GOPATH`)
   * opt: cargo (`$CARGO_HOME`)
   * opt: mednafen (`$MEDNAFEN_HOME`)
-## zsh/
-configuration files for zsh
-* zshrc
-  * git (installing zplugin)
-* functions.zsh
-  * bin/pw (for pw() to work)
-* exports.zsh
+## ksh/
+configuration files for ksh
+* kshrc
   * config/shrc (for the majority of variables set)
+* functions.ksh
+  * mpv (for mpvpin() to work)
+* exports.ksh
   * opt: pfetch (`$PF_INFO`)
-* themes/p10k.zsh
-  * [Nerd Fonts font](https://nerdfonts.com)
 # data/
 * mailcap: helps neomutt figure out what to do with particular MIME types
   * $EDITOR
diff --git a/bin/bother b/bin/bother
new file mode 100755
index 0000000..701b1a4
--- /dev/null
+++ b/bin/bother
@@ -0,0 +1,10 @@
+#!/bin/sh
+# puts up a critical notification if $HOME/today exists, containing the contents of that file.
+if [ -f "$HOME"/today ]; then
+	until pgrep -x dwm>/dev/null
+	do
+		true
+	done
+	sleep 0.5
+	notify-send -u critical "DO TODAY:" "$(cat "$HOME"/today)"
+fi
diff --git a/bin/comm-sel b/bin/comm-sel
index f67787f..0678679 100755
--- a/bin/comm-sel
+++ b/bin/comm-sel
@@ -1,9 +1,14 @@
 #!/bin/sh
-# sends a list of communication TUIs (e.g irssi) to dmenu and allows the user to choose one.
+# sends a list of communication TUIs (e.g epic5) to dmenu and allows the user to choose one.
 # class "comm" is added to enable window managers (e.g dwm) to do specific things with them.
-case "$(dmenu_path|grep -E "irssi|6cord|scli$"|dmenu -p "choose chat app:")" in
-	irssi) $TERMINAL -c comm -e irssi --home=$XDG_CONFIG_HOME/irssi&;;
-	6cord) $TERMINAL -c comm -e 6cord&;;
+# st-altscreen is a built of st that doesn't have scrollback or extra keybindings, so it doesn't get in the way of whatever binds clients have.
+# as a result it's lighter than the build of st i use for interactive use.
+if command -v st-altscreen>/dev/null; then
+	TERMINAL="st-altscreen"
+fi
+case "$(dmenu_path|grep -E "epic5$|6cord|scli$"|dmenu -p "choose chat app:")" in
+	epic5) $TERMINAL -c comm -e epic5 -l "$XDG_CONFIG_HOME/epic/epicrc" ensa&;;
+	6cord) $TERMINAL -c comm -e env TERM=xterm 6cord&;;
 	scli) $TERMINAL -c comm -e scli&;;
 	*) notify-send "comm-sel error" "invalid program selection"&&return 1;;
 esac
diff --git a/bin/popmail b/bin/mbsync-cron
similarity index 67%
rename from bin/popmail
rename to bin/mbsync-cron
index d1bae9f..dd69c01 100755
--- a/bin/popmail
+++ b/bin/mbsync-cron
@@ -21,23 +21,20 @@ if ! [ -d "$XDG_DATA_HOME/neomutt" ]; then
 fi
 # check account for new mail, notify for new content
 syncandnotify() {
-    # sanitize $account for use in function
-    acc="$(printf '%s\n' "$account" | sed "s/.*\///")"
-    mbsync "$acc">/dev/null 2>&1
+    mbsync "$account">/dev/null 2>&1
     # $new holds an index of all mail since the last time popmail ran
-    new=$(find "$XDG_DATA_HOME/mail/$acc/inbox/new/" -type f -newer "$XDG_DATA_HOME/neomutt/.popmail-last" 2> /dev/null)
+    new=$(find "$XDG_DATA_HOME/mail/$account/inbox/new/" -type f -newer "$XDG_DATA_HOME/neomutt/.popmail-last" 2> /dev/null)
     # $newcount is the number of new mails
     newcount=$(printf '%s\n' "$new" | sed '/^\s*$/d' | wc -l | tr -d " ")
-    # send $newcount to a file specific to $acc
+    # send $newcount to a file specific to $account
     # the preceding space makes generating a status bar string easier.
-    printf ' %s' "$newcount" > "$XDG_DATA_HOME/mail/$acc/note"
+    printf ' %s' "$newcount" > "$XDG_DATA_HOME/mail/$account/note"
     # don't notify if there isn't new mail
     if [ "$newcount" -gt "0" ]; then
-        notify-send --app-name="popmail" "mail fetcher" "new mail for profile $acc! [$newcount]" &
+        notify-send --app-name="popmail" "mail fetcher" "new mail for profile $account! [$newcount]" &
+	# reduce output if you have a lot of new mail
+	if [ "$newcount" -lt "16" ]; then
         for file in $new; do
-	    # broken lines, not sure what they're supposed to do
-            #from=$(awk '/^From: / && ++n ==1,/^\<.*\>:/' "$file" | perl -CS -MEncode -ne 'print decode("MIME-Header", $_)' | awk '{ $1=""; if (NF>=3)$NF=""; print $0 }' | sed 's/^[[:blank:]]*[\"'\''\<]*//;s/[\"'\''\>]*[[:blank:]]*$//')
-            #subject=$(awk '/^Subject: / && ++n == 1,/^\<.*\>: / && ++i == 2' "$file" | sed '$D' | perl -CS -MEncode -ne 'print decode("MIME-Header", $_)' | sed 's/^Subject: //' | sed 's/^{[[:blank:]]*[\"'\''\<]*//;s/[\"'\''\>]*[[:blank:]]*$//' | tr -d '\n')
             # Extract subject and sender from mail.
 	    # modified version of broken $from variable, only prints the first from (so forwards are slightly unclear)
 	    from=$(awk '/^From: / && ++n ==1,/^\<.*\>:/' "$file" | awk '{ $1=""; if (NF>=3)$NF=""; print $0 }' | sed '1!d'| sed '1,/From/s/From: //')
@@ -47,6 +44,7 @@ syncandnotify() {
 	    # sleep for half a second to avoid notification clog
 	    sleep .5
         done
+	fi
     fi
 }

@@ -65,7 +63,13 @@ do
 done

 wait
-# collect all previously created note files and collate them into a file that can be read by a status bar to notify the user of new mails
-printf "$(cat "$XDG_DATA_HOME"/mail/*/note|tr " " "|"|sed 's/|//')\n">"$XDG_DATA_HOME/mail/note"
+## OLD: collect all previously created note files and collate them into a file that can be read by a status bar to notify the user of new mails
+#printf "$(cat "$XDG_DATA_HOME"/mail/*/note|tr " " "|"|sed 's/|//')\n">"$XDG_DATA_HOME/mail/note"
+# use a single symbol to indicate new mail in any maildir
+if cat "$XDG_DATA_HOME"/mail/*/note|grep -q '[1-9]'; then
+	printf ' \n'>"$XDG_DATA_HOME/mail/note"
+else
+	printf '\n'>"$XDG_DATA_HOME/mail/note"
+fi
 #create/update modification time on an empty file that indicates the time of the last run of popmail
 touch "$XDG_DATA_HOME/neomutt/.popmail-last"
diff --git a/bin/opener b/bin/opener
new file mode 100755
index 0000000..755da51
--- /dev/null
+++ b/bin/opener
@@ -0,0 +1,41 @@
+#!/bin/sh
+# opener: opens files according to its contents
+# takes one path as its argument, launches the appropriate program for it
+if ! [ -f "$1" ]; then
+	printf 'file %s does not exist!\n' "$1" >/dev/stderr
+	return 1
+fi
+FILEPATH="$1"
+FILEMIME="$(file -ib "$FILEPATH")"
+echo() {
+	printf '%s\n' "$*"
+}
+case "$FILEMIME" in
+	#ebooks
+	application/epub*|application/pdf|application/postscript|image/vnd.djvu)
+		if [ -n "$READER" ]; then
+			$READER "$FILEPATH">/dev/null 2>&1 &
+		else
+			zathura "$FILEPATH" &
+		fi ;;
+	#videos
+	video/*)
+		mpv --input-ipc-server=/tmp/mpv-socket$(date +%s) --quiet "$FILEPATH" >/dev/null 2>&1 & ;;
+	#images
+	image/*)
+		sxiv -a "$FILEPATH">/dev/null 2>&1 & ;;
+	#audio
+	audio/*)
+		mpv --input-ipc-server=/tmp/mpv-socket$(date +%s) "$FILEPATH" >/dev/null 2>&1 & ;;
+	#text
+	text/*)
+		if [ -n "$EDITOR" ]; then
+			$EDITOR "$FILEPATH">/dev/null 2>&1 &
+		else
+			vi "$FILEPATH" &
+		fi ;;
+	#catchall
+	*)
+		echo "file $(basename "$FILEPATH") could not be opened. its type is $FILEMIME, go tell ensa that opener didn't work" >/dev/stderr
+		return 1 ;;
+esac
diff --git a/bin/pw b/bin/pw
index 140f1dc..cec9e54 100755
--- a/bin/pw
+++ b/bin/pw
@@ -1,14 +1,25 @@
 #!/bin/sh
-# generates a password of length $1, sends it to stdout if $2 isn't clip.
-# if it is clip, sends it to the X clipboard and clears it after 10 seconds.
+# generates a password of length $1, sends it to stdout if $2 is blank.
+# if $2 is clip, sends it to the X clipboard and clears it after 10 seconds.
+# if $2 is anything else, sends it to the X primary selection and clears it after 10 seconds
 if [ "$1" = "-h" ]; then
-	printf 'usage: %s [-h]|LENGTH [clip]\n' "$(basename $0)">/dev/stderr&&return 1
+  printf 'usage: %s [-h]|LENGTH [clip|pri]\n' "$(basename $0)">/dev/stderr
+  return 1
 fi
-PW=$(tr -cd "[:alnum:][:punct:]"</dev/urandom|fold -w $1|head -1)
-if [ "$2" = "clip" ]; then
-	printf '%s' "$PW"|xclip -sel clip -i&&notify-send "Password Generated" "$1-character password generated. It will clear in 10 seconds."
-	sleep 10
-	printf "\0"|xclip -sel clip -i&&notify-send "Clipboard Cleared" "Generated password cleared from clipboard."
+PW=$(tr -cd "[:alnum:][:punct:]"</dev/urandom|fold -w "$1"|head -1)
+if [ -n "$2" ]; then
+    # streamline selection variation by using $SEL
+    if [ "$2" = "clip" ]; then
+	    SEL="-sel clip"
+    else
+	    SEL=""
+    fi
+    # backgrounds so the user doesn't have to wait 10 seconds to get a prompt again
+      {
+      printf "%s" "$PW"|xclip $SEL -i&&notify-send "Password Generated" "$1-character password generated. It will clear in 10 seconds."
+      sleep 10
+      printf '\0'|xclip $SEL -i&&notify-send "Clipboard Cleared" "Generated password cleared from clipboard."
+      } &
 else
-	printf '%s\n' "$PW"
+  printf '%s\n' "$PW"
 fi
diff --git a/config/ksh/00-opts.ksh b/config/ksh/00-opts.ksh
new file mode 100644
index 0000000..4b7ff4c
--- /dev/null
+++ b/config/ksh/00-opts.ksh
@@ -0,0 +1 @@
+set -o vi
diff --git a/config/ksh/diraliases b/config/ksh/diraliases
new file mode 100644
index 0000000..f4546a5
--- /dev/null
+++ b/config/ksh/diraliases
@@ -0,0 +1,10 @@
+#!/bin/ksh
+alias -d "src=$HOME/src"\
+	"vcs=$HOME/src/vcs"\
+	"me=$HOME/src/me"\
+	"ports=/usr/ports"\
+	"conf=$XDG_CONFIG_HOME"\
+	"data=$XDG_DATA_HOME"\
+	"write=$HOME/doc/writing"\
+	"crit=$HOME/doc/writing/critique"\
+	"bin=$HOME/.local/bin"
diff --git a/config/zsh/exports.zsh b/config/ksh/exports.ksh
similarity index 75%
rename from config/zsh/exports.zsh
rename to config/ksh/exports.ksh
index 48ec72b..c2ec25d 100644
--- a/config/zsh/exports.zsh
+++ b/config/ksh/exports.ksh
@@ -1,7 +1,10 @@
-. $XDG_CONFIG_HOME/shrc
 # exports for convenience
 export GITHUB="https://github.com"
+# programs
+export IRC_SERVERS_FILE="$HOME/.local/share/ircservers"
 # make pfetch show what i want
 export PF_INFO="ascii title os host shell editor wm pkgs uptime palette"
+# color
+export CLICOLOR=1
 # fix manpath so local man pages work
 export MANPATH="/usr/share/man:/usr/X11R6/man:/usr/local/man:$XDG_DATA_HOME/man"
diff --git a/config/ksh/functions.ksh b/config/ksh/functions.ksh
new file mode 100644
index 0000000..e5d2668
--- /dev/null
+++ b/config/ksh/functions.ksh
@@ -0,0 +1,6 @@
+mc() {
+	mkdir "$1" && cd "$1";
+}
+mpvpin() {
+	mpv --input-ipc-server=/tmp/mpv-socket$(date +%s) --quiet --title "PIN" "$1" >/dev/null 2>&1 &
+}
diff --git a/config/ksh/kshrc b/config/ksh/kshrc
new file mode 100644
index 0000000..abf9bf0
--- /dev/null
+++ b/config/ksh/kshrc
@@ -0,0 +1,22 @@
+#!/bin/ksh
+export XDG_CACHE_HOME=${XDG_CACHE_HOME:=~/.cache}
+export XDG_CONFIG_HOME=${XDG_CONFIG_HOME:=~/.config}
+export XDG_DATA_HOME=${XDG_DATA_HOME:=~/.local/share}
+. $XDG_CONFIG_HOME/shrc
+KSHCONFIG="$XDG_CONFIG_HOME/ksh"
+if ! echo "$PATH"|grep -q ".local/bin"; then
+  export PATH="$HOME/.local/bin:$PATH"
+fi
+
+HISTFILE=$XDG_DATA_HOME/ksh/histfile
+HISTSIZE=5000
+HISTCONTROL="ignoredups"
+TMPDIR=$XDG_CACHE_HOME/ksh
+
+#load ksh external configs
+for file in $KSHCONFIG/*.ksh; do
+	. "$file"
+done
+. $XDG_CONFIG_HOME/lf/lfcd.sh
+[[ -f "$KSHCONFIG/diraliases" ]] && . "$KSHCONFIG/diraliases"
+[[ -f "$XDG_CONFIG_HOME/aliasrc" ]] && . "$XDG_CONFIG_HOME/aliasrc"
diff --git a/config/ksh/zz-prompt.ksh b/config/ksh/zz-prompt.ksh
new file mode 100644
index 0000000..b7f80cf
--- /dev/null
+++ b/config/ksh/zz-prompt.ksh
@@ -0,0 +1,32 @@
+#!/bin/ksh
+SEP="|"
+_PS1='\[\033['
+_END='m\]'
+
+_CLEAR='0'
+_BRIGHT='1'
+_DIM='2'
+_UNDER='4'
+_BLINK='5'
+_REVERSE='7'
+_HIDDEN='8'
+
+_FG_BLACK='30'
+_FG_RED='31'
+_FG_GREEN='32'
+_FG_YELLOW='33'
+_FG_BLUE='34'
+_FG_MAGENTA='35'
+_FG_CYAN='36'
+_FG_WHITE='37'
+
+_BG_BLACK='40'
+_BG_RED='41'
+_BG_GREEN='42'
+_BG_YELLOW='43'
+_BG_BLUE='44'
+_BG_MAGENTA='45'
+_BG_CYAN='46'
+_BG_WHITE='47'
+PS1='$_PS1$_FG_BLACK;$_BG_GREEN$_END$?$_PS1$_CLEAR$_END$SEP$_PS1$_FG_BLACK;$_BG_MAGENTA$_END\A$_PS1$_CLEAR$_END$SEP$_PS1$_BRIGHT;$_FG_RED$_END\u$_PS1$_CLEAR;$_FG_GREEN$_END@$_PS1$_BRIGHT;$_FG_BLUE$_END\h$_PS1$_CLEAR$_END:$_PS1$_BRIGHT;$_FG_CYAN$_END\w$_PS1$_CLEAR;$_FG_GREEN$_END\$$_PS1$_CLEAR$_END '
+export PS1
diff --git a/config/lf/lfrc b/config/lf/lfrc
index 21634d4..e5e58cd 100644
--- a/config/lf/lfrc
+++ b/config/lf/lfrc
@@ -3,30 +3,14 @@ set shell sh
 set shellopts '-eu'
 set ifs "\n"

+set promptfmt "\033[1;31m%u\033[0;32m@\033[1;34m%h\033[0m:\033[1;36m%w/\033[0m\033[1m%f\033[0m"
 # cmds
 cmd open ${{
-    case $(file -bi $f) in
-	text/troff) man ./ $f;;
-        text/*) $EDITOR $fx;;
-	image/x-xcf|image/svg+xml) gimp $f >/dev/null 2>&1 & ;;
-	image/vnd.djvu|application/epub+zip|application/pdf) zathura $f >/dev/null 2>&1 & ;;
-	image/*) sxiv -ai >/dev/null 2>&1 & ;;
-	audio/*) mpv --input-ipc-server=/tmp/mpvsoc$(date +%%s) --quiet $f >/dev/null 2>&1 & ;;
-	video/*) mpv --input-ipc-server=/tmp/mpvsoc$(date +%%s) $f ;;
-        *) for f in $fx; do lh $f > /dev/null 2>&1 & done;;
-    esac
+	opener $f
 }}

 cmd rename %[ -e $1 ] && printf "file exists" || mv $f $1

-cmd delete ${{
-	set -f
-	printf "%s\n\t" "$fx"
-	printf "delete?[y/n]"
-	read ans
-	[ $ans = "y" ] && rm -rf $fx
-}}
-
 # binds
 map D delete
 map a push %mkdir<space>
diff --git a/config/ncmpcpp/config b/config/ncmpcpp/config
index 04c319f..ffeb996 100644
--- a/config/ncmpcpp/config
+++ b/config/ncmpcpp/config
@@ -321,7 +321,7 @@ progressbar_look = ->
 ##
 media_library_primary_tag = album_artist
 #
-media_library_albums_split_by_date = no
+media_library_albums_split_by_date = yes
 #
 ## Available values: wrapped, normal.
 ##
@@ -430,7 +430,7 @@ ignore_leading_the = yes
 #
 #block_search_constraints_change_if_items_found = yes
 #
-#mouse_support = yes
+mouse_support = no
 #
 #mouse_list_scroll_whole_page = yes
 #
diff --git a/config/newsboat/config b/config/newsboat/config
index aeb6ddf..233cd8b 100644
--- a/config/newsboat/config
+++ b/config/newsboat/config
@@ -33,6 +33,6 @@ color article cyan default
 browser lh
 macro , open-in-browser
 macro t set browser "youtube-dl --add-metadata -ic"; open-in-browser ; set browser lh
-macro a set browser "youtube-dl --config-location ~/.config/youtube-dl/config-audio --add-metadata -xic -f bestaudio/best"; open-in-browser ; set browser lh
+macro a set browser "youtube-dl --add-metadata -ic --config-location ~/.config/youtube-dl/config-music"; open-in-browser ; set browser lh
 macro v set browser "mpv"; open-in-browser ; set browser lh
 macro w set browser "w3m"; open-in-browser ; set browser lh
diff --git a/config/nvim/colors/asmanian_blood.vim b/config/nvim/colors/asmanian_blood.vim
deleted file mode 100644
index 90df688..0000000
--- a/config/nvim/colors/asmanian_blood.vim
+++ /dev/null
@@ -1,42 +0,0 @@
-
-set background=dark
-
-hi Normal       guifg=#b4b0b0 guibg=#080404 gui=none
-hi NonText      guifg=#b4b0b0 guibg=#181414 gui=none
-hi SpecialKey   guifg=#b4b0b0 guibg=#282424 gui=bold
-
-hi Comment      guifg=#686460 guibg=#080404 gui=none
-hi Todo         guifg=#686460 guibg=#080404 gui=underline,italic
-hi Search       guifg=#000000 guibg=#00f0f0 gui=underline,italic
-hi Visual                     guibg=#282020
-hi MatchParen   guifg=#ffffff guibg=#904030 gui=none
-
-hi Title        guifg=#ffffff guibg=#202020 gui=underline
-hi Underlined   guifg=#b4b0b0 guibg=#080404 gui=underline
-
-hi CursorColumn guifg=#f4f0f0 guibg=#201c1c gui=none
-hi CursorLine   guifg=#f4f0f0 guibg=#201c1c gui=none
-
-hi StatusLine   guifg=#f8e0d0 guibg=#301810 gui=bold
-hi StatusLineNC guifg=#503830 guibg=#200800 gui=none
-hi VertSplit    guifg=#200800 guibg=#301810 gui=none
-hi LineNr       guifg=#848070 guibg=#181414 gui=none
-hi Folded       guifg=#484040 guibg=#080404 gui=bold,italic
-
-hi Define       guifg=#607080 guibg=#080404 gui=italic
-hi Function     guifg=#60b050 guibg=#080404 gui=italic
-hi PreProc      guifg=#a090a0 guibg=#080404 gui=italic
-hi Define       guifg=#806080 guibg=#080404 gui=italic
-hi Identifier   guifg=#c0b060 guibg=#080404 gui=italic
-
-hi Statement    guifg=#506090 guibg=#080404 gui=underline
-hi Repeat       guifg=#906050 guibg=#080404 gui=underline
-hi Conditional  guifg=#609050 guibg=#080404 gui=underline
-hi Exception    guifg=#903020 guibg=#080404 gui=underline
-
-hi Type         guifg=#705850 guibg=#080404 gui=italic
-hi String       guifg=#a06050 guibg=#080404 gui=italic
-hi Special      guifg=#a06050 guibg=#181414 gui=italic
-hi Number       guifg=#60d060 guibg=#080404 gui=none
-hi Constant     guifg=#60d060 guibg=#080404 gui=none
-
diff --git a/config/nvim/init.vim b/config/nvim/init.vim
index 41450bb..0632b5d 100644
--- a/config/nvim/init.vim
+++ b/config/nvim/init.vim
@@ -10,8 +10,6 @@ call plug#begin('~/.local/share/nvim/plugged')
 Plug 'gregsexton/matchtag'
 " lightline.vim
 Plug 'itchyny/lightline.vim'
-" wal.vim
-Plug 'dylanaraps/wal.vim'
 " vim-fugitive
 Plug 'tpope/vim-fugitive'
 " vim-gitgutter
@@ -20,20 +18,23 @@ Plug 'airblade/vim-gitgutter'
 Plug 'tpope/vim-surround'
 " JsBeautify
 Plug 'maksimr/vim-jsbeautify'
-" recognize color tags
-Plug 'lilydjwg/colorizer'
 " syntax checking
 Plug 'vim-syntastic/syntastic'
+" lf integration
+Plug 'ptzz/lf.vim'
+" req for lf.vim
+Plug 'rbgrouleff/bclose.vim'
+"""plugin graveyard
+" END PLUGINS
+"" recognize color tags
+"Plug 'lilydjwg/colorizer'
 "" VimCompletesMe
 "Plug 'ajh17/VimCompletesMe'
-" END PLUGINS
 call plug#end()

 " end of vim-plug related lines

-"colo wal
-colo asmanian_blood
-set tgc
+colo delek

 " productivity binds

@@ -79,26 +80,29 @@ let g:syntastic_check_on_open = 1
 let g:syntastic_check_on_wq = 0

 let g:syntastic_c_checkers = ["cppcheck"]
+let g:syntastic_cpp_checkers = ["cppcheck"]
 let g:syntastic_sh_checkers = ["shellcheck", "sh"]

 " lightline config
 set noshowmode
 let g:lightline = {
 	\ 'colorscheme': 'selenized_dark',
-	\ 'separator': {
-	\	'left': '',
-	\	'right': ''
-	\	},
-	\ 'subseparator': {
-	\	'left': '',
-	\	'right': ''
-	\	},
 	\ }

+" lf config
+let g:lf_replace_netrw = 1
+
 " betterize
 set path+=**

+cno w!! exe 'sil! w !doas tee % >/dev/null' <bar> e!
+nno <space> :noh<return><space>
 " add a ctags shortcut like a shitty goblin
-command! MakeTags !ectags -R .
+com! MakeTags !ectags -R .
 " make make work when im learning c
-autocmd BufRead $HOME/src/c-practice/*.c set makeprg=cc\ --std=c89\ %
+autocmd BufRead $HOME/src/me/c-practice/*.c set makeprg=pcc\ -ansi\ %
+" calcurse notes should be treated as markdown
+autocmd BufRead,BufNewFile /tmp/calcurse* set filetype=markdown
+autocmd BufRead,BufNewFile ~/.local/share/calcurse/notes/* set filetype=markdown
+" ksh should work
+autocmd FileType ksh let g:is_kornshell = 1
diff --git a/config/shrc b/config/shrc
index a3cc31c..bc5162e 100644
--- a/config/shrc
+++ b/config/shrc
@@ -16,7 +16,7 @@ export READER="zathura"
 export MAILER="neomutt"
 export MUSIC="ncmpcpp"
 export RSS="newsboat"
-export ISH="zsh"
+export ISH="ksh"
 export SCR="maim"
 export LOCK="slock"
 export LESS='-iMRS -x2'
@@ -31,4 +31,3 @@ export LESSHISTFILE="-"
 export GOPATH="$HOME/.local/go"
 export CARGO_HOME="$XDG_DATA_HOME/cargo"
 export MEDNAFEN_HOME="$XDG_CONFIG_HOME/mednafen"
-export ZDOTDIR="$XDG_CONFIG_HOME/zsh"
diff --git a/config/wal/colorschemes/dark/base16-causalagency.json b/config/wal/colorschemes/dark/base16-causalagency.json
new file mode 100644
index 0000000..8b21dfd
--- /dev/null
+++ b/config/wal/colorschemes/dark/base16-causalagency.json
@@ -0,0 +1,25 @@
+{
+    "special": {
+        "background": "#14130e",
+        "foreground": "#b7a980",
+        "cursor": "#72694f"
+    },
+    "colors": {
+        "color0": "#161510",
+        "color1": "#a32810",
+        "color2": "#727a18",
+        "color3": "#a37720",
+        "color4": "#3d6266",
+        "color5": "#7a4955",
+        "color6": "#557a55",
+        "color7": "#8e8463",
+        "color8": "#4c4635",
+        "color9": "#cc3214",
+        "color10": "#8e991e",
+        "color11": "#cc9528",
+        "color12": "#4c7b7f",
+        "color13": "#995b6b",
+        "color14": "#6b996b",
+        "color15": "#ccbc8e"
+    }
+}
diff --git a/config/wal/templates/6cord.toml b/config/wal/templates/6cord.toml
index f267982..0217cc2 100644
--- a/config/wal/templates/6cord.toml
+++ b/config/wal/templates/6cord.toml
@@ -1,11 +1,14 @@
+# comment to get vim to recognize the ft
+token = "MjA0MzU4MzIzMTQ1ODAxNzI5.Xh6pqg.a3-wz3fXBZEUveMq0_etic4S7do"
 [ properties ]
-	true-color = true
+	true-color = false
 	default-name-color = "{color7}"
 	mention-color = "{color5}"
 	mention-self-color = "{color14}"
 	compact-mode = false
 	syntax-highlight-colorscheme = "native"
 	show-emoji-urls = false
-	obfuscate-words = false
 	shorten-url = false
+	command-prefix = "[${{CHANNEL}}] "
+	default-status = ""

diff --git a/config/wal/templates/colors-wal-dmenu.h b/config/wal/templates/colors-wal-dmenu.h
index afcbb8d..d139d56 100644
--- a/config/wal/templates/colors-wal-dmenu.h
+++ b/config/wal/templates/colors-wal-dmenu.h
@@ -1,6 +1,6 @@
 static const char *colors[SchemeLast][2] = {{
 	/*     fg         bg       */
-	[SchemeNorm] = {{ "{color13}", "{color0}" }},
-	[SchemeSel] = {{ "{color13}", "{color4}" }},
+	[SchemeNorm] = {{ "{color4}", "{color0}" }},
+	[SchemeSel] = {{ "{color1}", "{color0}" }},
 	[SchemeOut] = {{ "{color13}", "{color8}" }},
 }};
diff --git a/config/wal/templates/colors-wal-dwm.h b/config/wal/templates/colors-wal-dwm.h
index 133c7a3..eeea645 100644
--- a/config/wal/templates/colors-wal-dwm.h
+++ b/config/wal/templates/colors-wal-dwm.h
@@ -1,9 +1,9 @@
-static const char norm_fg[] = "{color13}";
+static const char norm_fg[] = "{color4}";
 static const char norm_bg[] = "{color0}";
 static const char norm_border[] = "{color8}";

-static const char sel_fg[] = "{color13}";
-static const char sel_bg[] = "{color4}";
+static const char sel_fg[] = "{color1}";
+static const char sel_bg[] = "{color0}";
 static const char sel_border[] = "{color9}";

 static const char *colors[][3]      = {{
diff --git a/config/wal/templates/dunstrc b/config/wal/templates/dunstrc
index cea407f..61972d6 100644
--- a/config/wal/templates/dunstrc
+++ b/config/wal/templates/dunstrc
@@ -24,7 +24,7 @@
     idle_threshold = 120

     ### Text ###
-    font = Terminus 9
+    font = Terminus Medium 8
     line_height = 0

     markup = full
@@ -59,7 +59,7 @@
     history_length = 20

     ### Misc/Advanced ###
-    dmenu = /usr/local/bin/dmenu -fn "Terminus:style=Regular:pixelsize=12" -nb "{color0}" -nf "{color13}" -sb "{color4}" -sf "{color13}" -p dunst:
+    dmenu = /usr/local/bin/dmenu -p dunst:
     browser = /usr/local/bin/firefox -new-tab
     always_run_script = true
     title = Dunst
diff --git a/config/wal/templates/zathurarc b/config/wal/templates/zathurarc
index ebfd44a..ebb74ca 100644
--- a/config/wal/templates/zathurarc
+++ b/config/wal/templates/zathurarc
@@ -32,3 +32,4 @@ set render-loading-fg "{color15}"
 set window-title-home-tilde true
 set statusbar-basename true
 set selection-clipboard clipboard
+set font "SauceCodePro Nerd Font Mono 10"
diff --git a/config/youtube-dl/config b/config/youtube-dl/config
index 46041ac..0b55e08 100644
--- a/config/youtube-dl/config
+++ b/config/youtube-dl/config
@@ -2,7 +2,7 @@
 # always use axel
 --external-downloader axel
 # coherent output format
---output ~/vid/%(uploader)s:%(title)s.%(ext)s
+--output ~/vid/%(uploader)s/%(title)s.%(ext)s
 # always merge into mkv
 --merge-output-format mkv
 # embed subtitles if they are to be written
diff --git a/config/youtube-dl/config-music b/config/youtube-dl/config-music
index a5cf801..5860766 100644
--- a/config/youtube-dl/config-music
+++ b/config/youtube-dl/config-music
@@ -1,6 +1,6 @@
 # only download audio stream
 --format bestaudio
 # always use axel
---external-downloader axel
+#--external-downloader axel
 # coherent output format
---output ~/mus/%(uploader)s/%(album)s/S%(track_number)s-%(track)s.%(ext)s
+--output ~/mus/%(uploader)s/%(album)s/S%(track_number)02d-%(track)s.%(ext)s
diff --git a/config/zsh/.zshrc b/config/zsh/.zshrc
deleted file mode 120000
index c8b42f4..0000000
--- a/config/zsh/.zshrc
+++ /dev/null
@@ -1 +0,0 @@
-zshrc
\ No newline at end of file
diff --git a/config/zsh/00-opts.zsh b/config/zsh/00-opts.zsh
deleted file mode 100644
index 4573008..0000000
--- a/config/zsh/00-opts.zsh
+++ /dev/null
@@ -1,3 +0,0 @@
-setopt append_history auto_pushd hist_ignore_dups inc_append_history
-setopt interactive_comments list_packed no_auto_menu no_autocd
-setopt no_beep no_share_history pushd_ignore_dups
diff --git a/config/zsh/binds.zsh b/config/zsh/binds.zsh
deleted file mode 100644
index 02c0fc7..0000000
--- a/config/zsh/binds.zsh
+++ /dev/null
@@ -1,12 +0,0 @@
-autoload up-line-or-beginning-search down-line-or-beginning-search edit-command-line
-zle -N up-line-or-beginning-search
-zle -N down-line-or-beginning-search
-zle -N edit-command-line
-bindkey -v
-bindkey -a "!" edit-command-line
-[[ -n "$terminfo[kpp]"   ]] && bindkey "$terminfo[kpp]"   up-line-or-beginning-search   # PAGE UP
-[[ -n "$terminfo[knp]"   ]] && bindkey "$terminfo[knp]"   down-line-or-beginning-search # PAGE DOWN
-[[ -n "$terminfo[khome]" ]] && bindkey "$terminfo[khome]" beginning-of-line             # HOME
-[[ -n "$terminfo[kend]"  ]] && bindkey "$terminfo[kend]"  end-of-line                   # END
-[[ -n "$terminfo[kdch1]" ]] && bindkey "$terminfo[kdch1]" delete-char                   # DELETE
-[[ -n "$terminfo[kbs]"   ]] && bindkey "$terminfo[kbs]"   backward-delete-char          # BACKSPACE
diff --git a/config/zsh/functions.zsh b/config/zsh/functions.zsh
deleted file mode 100644
index fca5709..0000000
--- a/config/zsh/functions.zsh
+++ /dev/null
@@ -1,2 +0,0 @@
-mc() { mkdir $1 && cd $1 }
-pw() { "$(which -p pw)" "$1" "$2" & }
diff --git a/config/zsh/themes/p10k.zsh b/config/zsh/themes/p10k.zsh
deleted file mode 100644
index db7e1a9..0000000
--- a/config/zsh/themes/p10k.zsh
+++ /dev/null
@@ -1,856 +0,0 @@
-# Generated by Powerlevel10k configuration wizard on 2019-10-24 at 12:41 PDT.
-# Based on romkatv/powerlevel10k/config/p10k-rainbow.zsh.
-# Wizard options: nerdfont-complete + powerline, small icons, rainbow,
-# slanted separators, slanted heads, flat tails, 2 lines, disconnected, no frame,
-# compact, few icons, concise.
-# Type `p10k configure` to generate another config.
-#
-# Config for Powerlevel10k with powerline prompt style with colorful background.
-# Type `p10k configure` to generate your own config based on it.
-#
-# Tip: Looking for a nice color? Here's a one-liner to print colormap.
-#
-#   for i in {0..255}; do print -Pn "%${i}F${(l:3::0:)i}%f " ${${(M)$((i%8)):#7}:+$'\n'}; done
-
-# Temporarily change options.
-'builtin' 'local' '-a' 'p10k_config_opts'
-[[ ! -o 'aliases'         ]] || p10k_config_opts+=('aliases')
-[[ ! -o 'sh_glob'         ]] || p10k_config_opts+=('sh_glob')
-[[ ! -o 'no_brace_expand' ]] || p10k_config_opts+=('no_brace_expand')
-'builtin' 'setopt' 'no_aliases' 'no_sh_glob' 'brace_expand'
-
-() {
-  emulate -L zsh
-  setopt no_unset extended_glob
-  zmodload zsh/langinfo
-  if [[ ${langinfo[CODESET]:-} != (utf|UTF)(-|)8 ]]; then
-    local LC_ALL=${${(@M)$(locale -a):#*.(utf|UTF)(-|)8}[1]:-en_US.UTF-8}
-  fi
-
-  # Unset all configuration options. This allows you to apply configuration changes without
-  # restarting zsh. Edit ~/.p10k.zsh and type `source ~/.p10k.zsh`.
-  unset -m 'POWERLEVEL9K_*'
-
-  # The list of segments shown on the left. Fill it with the most important segments.
-  typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(
-      # =========================[ Line #1 ]=========================
-      os_icon                 # os identifier
-      prompt_char             # prompt symbol
-      dir                     # current directory
-      vcs                     # git status
-      # =========================[ Line #2 ]=========================
-      newline
-      # prompt_char             # prompt symbol
-  )
-
-  # The list of segments shown on the right. Fill it with less important segments.
-  # Right prompt on the last prompt line (where you are typing your commands) gets
-  # automatically hidden when the input line reaches it. Right prompt above the
-  # last prompt line gets hidden if it would overlap with left prompt.
-  typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(
-      # =========================[ Line #1 ]=========================
-      status                  # exit code of the last command
-      command_execution_time  # duration of the last command
-      background_jobs         # presence of background jobs
-      # virtualenv            # python virtual environment (https://docs.python.org/3/library/venv.html)
-      # anaconda              # conda environment (https://conda.io/)
-      # pyenv                 # python environment (https://github.com/pyenv/pyenv)
-      # nodenv                # node.js version from nodenv (https://github.com/nodenv/nodenv)
-      # nvm                   # node.js version from nvm (https://github.com/nvm-sh/nvm)
-      # nodeenv               # node.js environment (https://github.com/ekalinin/nodeenv)
-      # node_version          # node.js version
-      # go_version            # go version (https://golang.org)
-      # rust_version          # rustc version (https://www.rust-lang.org)
-      # dotnet_version        # .NET version (https://dotnet.microsoft.com)
-      # rbenv                 # ruby version from rbenv (https://github.com/rbenv/rbenv)
-      # rvm                   # ruby version from rvm (https://rvm.io)
-      # kubecontext           # current kubernetes context (https://kubernetes.io/)
-      # terraform             # terraform workspace (https://www.terraform.io)
-      # aws                   # aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html)
-      # aws_eb_env            # aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/)
-      # azure                 # azure account name (https://docs.microsoft.com/en-us/cli/azure)
-      context                 # user@hostname
-      # nordvpn               # nordvpn connection status, linux only (https://nordvpn.com/)
-      # ranger                # ranger shell (https://github.com/ranger/ranger)
-      # vpn_ip                # virtual private network indicator
-      # ram                   # free RAM
-      # load                  # CPU load
-      # time                  # current time
-      # =========================[ Line #2 ]=========================
-      newline
-      # public_ip             # public IP address
-      # proxy                 # system-wide http/https/ftp proxy
-      # battery               # internal battery
-      # example               # example user-defined segment (see prompt_example function below)
-  )
-
-  # To disable default icons for all segments, set POWERLEVEL9K_VISUAL_IDENTIFIER_EXPANSION=''.
-  #
-  # To enable default icons for all segments, don't define POWERLEVEL9K_VISUAL_IDENTIFIER_EXPANSION
-  # or set it to '${P9K_VISUAL_IDENTIFIER}'.
-  #
-  # To remove trailing space from all default icons, set POWERLEVEL9K_VISUAL_IDENTIFIER_EXPANSION
-  # to '${P9K_VISUAL_IDENTIFIER% }'.
-  #
-  # To enable default icons for one segment (e.g., dir), set
-  # POWERLEVEL9K_DIR_VISUAL_IDENTIFIER_EXPANSION='${P9K_VISUAL_IDENTIFIER}'.
-  #
-  # To assign a specific icon to one segment (e.g., dir), set
-  # POWERLEVEL9K_DIR_VISUAL_IDENTIFIER_EXPANSION='⭐'.
-  #
-  # To assign a specific icon to a segment in a given state (e.g., dir in state NOT_WRITABLE),
-  # set POWERLEVEL9K_DIR_NOT_WRITABLE_VISUAL_IDENTIFIER_EXPANSION='⭐'.
-  #
-  # Note: You can use $'\u2B50' instead of '⭐'. It's especially convenient when specifying
-  # icons that your text editor cannot render. Don't forget to put $ and use single quotes when
-  # defining icons via Unicode codepoints.
-  #
-  # Note: Many default icons cannot be displayed with system fonts. You'll need to install a
-  # capable font to use them. See POWERLEVEL9K_MODE below.
-  typeset -g POWERLEVEL9K_VISUAL_IDENTIFIER_EXPANSION='${P9K_VISUAL_IDENTIFIER// }'
-
-  # This option makes a difference only when default icons are enabled for all or some prompt
-  # segments (see POWERLEVEL9K_VISUAL_IDENTIFIER_EXPANSION above). LOCK_ICON can be printed as
-  # $'\uE0A2', $'\uE138' or $'\uF023' depending on POWERLEVEL9K_MODE. The correct value of this
-  # parameter depends on the provider of the font your terminal is using.
-  #
-  #   Font Provider                    | POWERLEVEL9K_MODE
-  #   ---------------------------------+-------------------
-  #   Powerline                        | powerline
-  #   Font Awesome                     | awesome-fontconfig
-  #   Adobe Source Code Pro            | awesome-fontconfig
-  #   Source Code Pro                  | awesome-fontconfig
-  #   Awesome-Terminal Fonts (regular) | awesome-fontconfig
-  #   Awesome-Terminal Fonts (patched) | awesome-patched
-  #   Nerd Fonts                       | nerdfont-complete
-  #   Other                            | compatible
-  #
-  # If this looks overwhelming, either stick with a preinstalled system font and set
-  # POWERLEVEL9K_MODE=compatible, or install the recommended Powerlevel10k font from
-  # https://github.com/romkatv/powerlevel10k/#recommended-meslo-nerd-font-patched-for-powerlevel10k
-  # and set POWERLEVEL9K_MODE=nerdfont-complete.
-  typeset -g POWERLEVEL9K_MODE=nerdfont-complete
-
-  # When set to true, icons appear before content on both sides of the prompt. When set
-  # to false, icons go after content. If empty or not set, icons go before content in the left
-  # prompt and after content in the right prompt.
-  #
-  # You can also override it for a specific segment:
-  #
-  #   POWERLEVEL9K_STATUS_ICON_BEFORE_CONTENT=false
-  #
-  # Or for a specific segment in specific state:
-  #
-  #   POWERLEVEL9K_DIR_NOT_WRITABLE_ICON_BEFORE_CONTENT=false
-  typeset -g POWERLEVEL9K_ICON_BEFORE_CONTENT=
-
-  # Add an empty line before each prompt.
-  typeset -g POWERLEVEL9K_PROMPT_ADD_NEWLINE=false
-
-  # Connect left prompt lines with these symbols. You'll probably want to use the same color
-  # as POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND below.
-  typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX=
-  typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_PREFIX=
-  typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX=
-  # Connect right prompt lines with these symbols.
-  typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_SUFFIX=
-  typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_SUFFIX=
-  typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_SUFFIX=
-
-  # Filler between left and right prompt on the first prompt line. You can set it to ' ', '·' or
-  # '─'. The last two make it easier to see the alignment between left and right prompt and to
-  # separate prompt from command output. You might want to set POWERLEVEL9K_PROMPT_ADD_NEWLINE=false
-  # for more compact prompt if using using this option.
-  typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR=' '
-  typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_BACKGROUND=
-  if [[ $POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR != ' ' ]]; then
-    # The color of the filler. You'll probably want to match the color of POWERLEVEL9K_MULTILINE
-    # ornaments defined above.
-    typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND=242
-    # Start filler from the edge of the screen if there are no left segments on the first line.
-    typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_FIRST_SEGMENT_END_SYMBOL='%{%}'
-    # End filler on the edge of the screen if there are no right segments on the first line.
-    typeset -g POWERLEVEL9K_EMPTY_LINE_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL='%{%}'
-  fi
-
-  # Separator between same-color segments on the left.
-  typeset -g POWERLEVEL9K_LEFT_SUBSEGMENT_SEPARATOR='\uE0B9'
-  # Separator between same-color segments on the right.
-  typeset -g POWERLEVEL9K_RIGHT_SUBSEGMENT_SEPARATOR='\uE0B9'
-  # Separator between different-color segments on the left.
-  typeset -g POWERLEVEL9K_LEFT_SEGMENT_SEPARATOR='\uE0B8'
-  # Separator between different-color segments on the right.
-  typeset -g POWERLEVEL9K_RIGHT_SEGMENT_SEPARATOR='\uE0BE'
-  # The right end of left prompt.
-  typeset -g POWERLEVEL9K_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL='\uE0B8'
-  # The left end of right prompt.
-  typeset -g POWERLEVEL9K_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL='\uE0BE'
-  # The left end of left prompt.
-  typeset -g POWERLEVEL9K_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL=''
-  # The right end of right prompt.
-  typeset -g POWERLEVEL9K_RIGHT_PROMPT_LAST_SEGMENT_END_SYMBOL=''
-  # Left prompt terminator for lines without any segments.
-  typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL=
-
-  #################################[ os_icon: os identifier ]##################################
-  # OS identifier color.
-  # typeset -g POWERLEVEL9K_OS_ICON_FOREGROUND=255
-  # typeset -g POWERLEVEL9K_OS_ICON_BACKGROUND=0
-  # Make the icon bold.
-  typeset -g POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION='${P9K_CONTENT// }'
-
-  ################################[ prompt_char: prompt symbol ]################################
-  # Transparent background.
-  typeset -g POWERLEVEL9K_PROMPT_CHAR_BACKGROUND=8
-  # Green prompt symbol if the last command succeeded.
-  typeset -g POWERLEVEL9K_PROMPT_CHAR_OK_{VIINS,VICMD,VIVIS}_FOREGROUND=76
-  # Red prompt symbol if the last command failed.
-  typeset -g POWERLEVEL9K_PROMPT_CHAR_ERROR_{VIINS,VICMD,VIVIS}_FOREGROUND=196
-  # Default prompt symbol.
-  # typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIINS_CONTENT_EXPANSION='❯'
-  typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIINS_CONTENT_EXPANSION=' INSERT '
-  # Prompt symbol in command vi mode.
-  # typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VICMD_CONTENT_EXPANSION='❮'
-  typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VICMD_CONTENT_EXPANSION=' NORMAL '
-  # Prompt symbol in visual vi mode.
-  # typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIVIS_CONTENT_EXPANSION='Ⅴ'
-  typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIVIS_CONTENT_EXPANSION=' VISUAL '
-  # Prompt symbol in overwrite vi mode.
-  # typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIOWR_CONTENT_EXPANSION='▶'
-  typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIOWR_CONTENT_EXPANSION=' REPLACE '
-  typeset -g POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE=true
-  # No line terminator if prompt_char is the last segment.
-  typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL=
-  # No line introducer if prompt_char is the first segment.
-  typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL=
-  # No surrounding whitespace.
-  typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_{LEFT,RIGHT}_WHITESPACE=
-
-  ##################################[ dir: current directory ]##################################
-  # Current directory background color.
-  # typeset -g POWERLEVEL9K_DIR_BACKGROUND=4
-  # Default current directory foreground color.
-  typeset -g POWERLEVEL9K_DIR_FOREGROUND=254
-  # If directory is too long, shorten some of its segments to the shortest possible unique
-  # prefix. The shortened directory can be tab-completed to the original.
-  typeset -g POWERLEVEL9K_SHORTEN_STRATEGY=truncate_to_unique
-  # Replace removed segment suffixes with this symbol.
-  typeset -g POWERLEVEL9K_SHORTEN_DELIMITER=
-  # Color of the shortened directory segments.
-  typeset -g POWERLEVEL9K_DIR_SHORTENED_FOREGROUND=250
-  # Color of the anchor directory segments. Anchor segments are never shortened. The first
-  # segment is always an anchor.
-  typeset -g POWERLEVEL9K_DIR_ANCHOR_FOREGROUND=255
-  # Display anchor directory segments in bold.
-  typeset -g POWERLEVEL9K_DIR_ANCHOR_BOLD=true
-  # Don't shorten directories that contain any of these files. They are anchors.
-  local anchor_files=(
-    .bzr
-    .citc
-    .git
-    .hg
-    .node-version
-    .python-version
-    .ruby-version
-    .shorten_folder_marker
-    .svn
-    .terraform
-    CVS
-    Cargo.toml
-    composer.json
-    go.mod
-    package.json
-  )
-  typeset -g POWERLEVEL9K_SHORTEN_FOLDER_MARKER="(${(j:|:)anchor_files})"
-  # Don't shorten this many last directory segments. They are anchors.
-  typeset -g POWERLEVEL9K_SHORTEN_DIR_LENGTH=1
-  # Shorten directory if it's longer than this even if there is space for it. The value can
-  # be either absolute (e.g., '80') or a percentage of terminal width (e.g, '50%'). If empty,
-  # directory will be shortened only when prompt doesn't fit or when other parameters demand it
-  # (see POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS and POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT below).
-  typeset -g POWERLEVEL9K_DIR_MAX_LENGTH=80
-  # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least this
-  # many columns for typing commands.
-  typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS=40
-  # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least
-  # COLUMNS * POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT * 0.01 columns for typing commands.
-  typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT=50
-  # If set to true, embed a hyperlink into the directory. Useful for quickly
-  # opening a directory in the file manager simply by clicking the link.
-  # Can also be handy when the directory is shortened, as it allows you to see
-  # the full directory that was used in previous commands.
-  typeset -g POWERLEVEL9K_DIR_HYPERLINK=false
-
-  # Enable special styling for non-writable directories.
-  typeset -g POWERLEVEL9K_DIR_SHOW_WRITABLE=true
-  # Show this icon when the current directory is not writable. POWERLEVEL9K_DIR_SHOW_WRITABLE
-  # above must be set to true for this parameter to have effect.
-  # typeset -g POWERLEVEL9K_DIR_NOT_WRITABLE_VISUAL_IDENTIFIER_EXPANSION='⭐'
-
-  # Custom prefix.
-  # typeset -g POWERLEVEL9K_DIR_PREFIX='in '
-
-  # POWERLEVEL9K_DIR_CLASSES allows you to specify custom icons for different directories.
-  # It must be an array with 3 * N elements. Each triplet consists of:
-  #
-  #   1. A pattern against which the current directory is matched. Matching is done with
-  #      extended_glob option enabled.
-  #   2. Directory class for the purpose of styling.
-  #   3. Icon.
-  #
-  # Triplets are tried in order. The first triplet whose pattern matches $PWD wins. If there
-  # are no matches, the directory will have no icon.
-  #
-  # Example:
-  #
-  #   typeset -g POWERLEVEL9K_DIR_CLASSES=(
-  #       '~/work(/*)#'  WORK     '(╯°□°)╯︵ ┻━┻'
-  #       '~(/*)#'       HOME     '⌂'
-  #       '*'            DEFAULT  '')
-  #
-  # With these settings, the current directory in the prompt may look like this:
-  #
-  #   (╯°□°)╯︵ ┻━┻ ~/work/projects/important/urgent
-  #
-  # Or like this:
-  #
-  #   ⌂ ~/best/powerlevel10k
-  #
-  # You can also set different colors for directories of different classes. Remember to override
-  # FOREGROUND, SHORTENED_FOREGROUND and ANCHOR_FOREGROUND for every directory class that you wish
-  # to have its own color.
-  #
-  #   typeset -g POWERLEVEL9K_DIR_WORK_BACKGROUND=4
-  #   typeset -g POWERLEVEL9K_DIR_WORK_FOREGROUND=254
-  #   typeset -g POWERLEVEL9K_DIR_WORK_SHORTENED_FOREGROUND=250
-  #   typeset -g POWERLEVEL9K_DIR_WORK_ANCHOR_FOREGROUND=255
-  #
-  typeset -g POWERLEVEL9K_DIR_CLASSES=()
-
-  #####################################[ vcs: git status ]######################################
-  # Versio control system colors.
-  # typeset -g POWERLEVEL9K_VCS_CLEAN_BACKGROUND=2
-  # typeset -g POWERLEVEL9K_VCS_MODIFIED_BACKGROUND=3
-  # typeset -g POWERLEVEL9K_VCS_UNTRACKED_BACKGROUND=2
-  # typeset -g POWERLEVEL9K_VCS_CONFLICTED_BACKGROUND=3
-  # typeset -g POWERLEVEL9K_VCS_LOADING_BACKGROUND=8
-
-  # Branch icon. Set this parameter to '\uF126 ' for the popular Powerline branch icon.
-  typeset -g POWERLEVEL9K_VCS_BRANCH_ICON='\uF126 '
-  POWERLEVEL9K_VCS_BRANCH_ICON=${(g::)POWERLEVEL9K_VCS_BRANCH_ICON}
-
-  # Untracked files icon. It's really a question mark, your font isn't broken.
-  # Change the value of this parameter to show a different icon.
-  typeset -g POWERLEVEL9K_VCS_UNTRACKED_ICON='?'
-  POWERLEVEL9K_VCS_UNTRACKED_ICON=${(g::)POWERLEVEL9K_VCS_UNTRACKED_ICON}
-
-  # Formatter for Git status.
-  #
-  # Example output: master ⇣42⇡42 *42 merge ~42 +42 !42 ?42.
-  #
-  # You can edit the function to customize how Git status looks.
-  #
-  # VCS_STATUS_* parameters are set by gitstatus plugin. See reference:
-  # https://github.com/romkatv/gitstatus/blob/master/gitstatus.plugin.zsh.
-  function my_git_formatter() {
-    emulate -L zsh
-
-    if [[ -n $P9K_CONTENT ]]; then
-      # If P9K_CONTENT is not empty, use it. It's either "loading" or from vcs_info (not from
-      # gitstatus plugin). VCS_STATUS_* parameters are not available in this case.
-      typeset -g my_git_format=$P9K_CONTENT
-      return
-    fi
-
-    # Styling for different parts of Git status.
-    local       meta='%7F' # white foreground
-    local      clean='%0F' # black foreground
-    local   modified='%0F' # black foreground
-    local  untracked='%0F' # black foreground
-    local conflicted='%1F' # red foreground
-
-    local res
-    local where  # branch name, tag or commit
-    if [[ -n $VCS_STATUS_LOCAL_BRANCH ]]; then
-      res+="${clean}${POWERLEVEL9K_VCS_BRANCH_ICON}"
-      where=${(V)VCS_STATUS_LOCAL_BRANCH}
-    elif [[ -n $VCS_STATUS_TAG ]]; then
-      res+="${meta}#"
-      where=${(V)VCS_STATUS_TAG}
-    else
-      res+="${meta}@"
-      where=${VCS_STATUS_COMMIT[1,8]}
-    fi
-
-    # If local branch name or tag is at most 32 characters long, show it in full.
-    # Otherwise show the first 12 … the last 12.
-    (( $#where > 32 )) && where[13,-13]="…"
-    res+="${clean}${where//\%/%%}"  # escape %
-
-    # Show tracking branch name if it differs from local branch.
-    if [[ -n ${VCS_STATUS_REMOTE_BRANCH:#$VCS_STATUS_LOCAL_BRANCH} ]]; then
-      res+="${meta}:${clean}${(V)VCS_STATUS_REMOTE_BRANCH//\%/%%}"  # escape %
-    fi
-
-    # ⇣42 if behind the remote.
-    (( VCS_STATUS_COMMITS_BEHIND )) && res+=" ${clean}⇣${VCS_STATUS_COMMITS_BEHIND}"
-    # ⇡42 if ahead of the remote; no leading space if also behind the remote: ⇣42⇡42.
-    (( VCS_STATUS_COMMITS_AHEAD && !VCS_STATUS_COMMITS_BEHIND )) && res+=" "
-    (( VCS_STATUS_COMMITS_AHEAD  )) && res+="${clean}⇡${VCS_STATUS_COMMITS_AHEAD}"
-    # *42 if have stashes.
-    (( VCS_STATUS_STASHES        )) && res+=" ${clean}*${VCS_STATUS_STASHES}"
-    # 'merge' if the repo is in an unusual state.
-    [[ -n $VCS_STATUS_ACTION     ]] && res+=" ${conflicted}${VCS_STATUS_ACTION}"
-    # ~42 if have merge conflicts.
-    (( VCS_STATUS_NUM_CONFLICTED )) && res+=" ${conflicted}~${VCS_STATUS_NUM_CONFLICTED}"
-    # +42 if have staged changes.
-    (( VCS_STATUS_NUM_STAGED     )) && res+=" ${modified}+${VCS_STATUS_NUM_STAGED}"
-    # !42 if have unstaged changes.
-    (( VCS_STATUS_NUM_UNSTAGED   )) && res+=" ${modified}!${VCS_STATUS_NUM_UNSTAGED}"
-    # ?42 if have untracked files. It's really a question mark, your font isn't broken.
-    # See POWERLEVEL9K_VCS_UNTRACKED_ICON above if you want to use a different icon.
-    # Remove the next line if you don't want to see untracked files at all.
-    (( VCS_STATUS_NUM_UNTRACKED  )) && res+=" ${untracked}${POWERLEVEL9K_VCS_UNTRACKED_ICON}${VCS_STATUS_NUM_UNTRACKED}"
-
-    typeset -g my_git_format=$res
-  }
-  functions -M my_git_formatter 2>/dev/null
-
-  # Disable the default Git status formatting.
-  typeset -g POWERLEVEL9K_VCS_DISABLE_GITSTATUS_FORMATTING=true
-  # Install our own Git status formatter.
-  typeset -g POWERLEVEL9K_VCS_CONTENT_EXPANSION='${$((my_git_formatter(1)))+${my_git_format}}'
-  # Enable counters for staged, unstaged, etc.
-  typeset -g POWERLEVEL9K_VCS_{STAGED,UNSTAGED,UNTRACKED,CONFLICTED,COMMITS_AHEAD,COMMITS_BEHIND}_MAX_NUM=-1
-
-  # Custom icon.
-  typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_EXPANSION=
-  # Custom prefix.
-  # typeset -g POWERLEVEL9K_VCS_PREFIX='on '
-
-  # Show status of repositories of these types. You can add svn and/or hg if you are
-  # using them. If you do, your prompt may become slow even when your current directory
-  # isn't in an svn or hg reposotiry.
-  typeset -g POWERLEVEL9K_VCS_BACKENDS=(git)
-
-  ##########################[ status: exit code of the last command ]###########################
-  # Enable OK_PIPE, ERROR_PIPE and ERROR_SIGNAL status states to allow us to enable, disable and
-  # style them independently from the regular OK and ERROR state.
-  typeset -g POWERLEVEL9K_STATUS_EXTENDED_STATES=true
-
-  # Status on success. No content, just an icon. No need to show it if prompt_char is enabled as
-  # it will signify success by turning green.
-  typeset -g POWERLEVEL9K_STATUS_OK=false
-  typeset -g POWERLEVEL9K_STATUS_OK_VISUAL_IDENTIFIER_EXPANSION='✔'
-  # typeset -g POWERLEVEL9K_STATUS_OK_FOREGROUND=2
-  # typeset -g POWERLEVEL9K_STATUS_OK_BACKGROUND=0
-
-  # Status when some part of a pipe command fails but the overall exit status is zero. It may look
-  # like this: 1|0.
-  typeset -g POWERLEVEL9K_STATUS_OK_PIPE=true
-  typeset -g POWERLEVEL9K_STATUS_OK_PIPE_VISUAL_IDENTIFIER_EXPANSION='✔'
-  # typeset -g POWERLEVEL9K_STATUS_OK_PIPE_FOREGROUND=2
-  # typeset -g POWERLEVEL9K_STATUS_OK_PIPE_BACKGROUND=0
-
-  # Status when it's just an error code (e.g., '1'). No need to show it if prompt_char is enabled as
-  # it will signify error by turning red.
-  typeset -g POWERLEVEL9K_STATUS_ERROR=false
-  typeset -g POWERLEVEL9K_STATUS_ERROR_VISUAL_IDENTIFIER_EXPANSION='↵'
-  # typeset -g POWERLEVEL9K_STATUS_ERROR_FOREGROUND=3
-  # typeset -g POWERLEVEL9K_STATUS_ERROR_BACKGROUND=1
-
-  # Status when the last command was terminated by a signal.
-  typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL=true
-  # Use terse signal names: "INT" instead of "SIGINT(2)".
-  typeset -g POWERLEVEL9K_STATUS_VERBOSE_SIGNAME=false
-  typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_VISUAL_IDENTIFIER_EXPANSION='↵'
-  # typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_FOREGROUND=3
-  # typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_BACKGROUND=1
-
-  # Status when some part of a pipe command fails and the overall exit status is also non-zero.
-  # It may look like this: 1|0.
-  typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE=true
-  typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_VISUAL_IDENTIFIER_EXPANSION='↵'
-  # typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_FOREGROUND=3
-  # typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_BACKGROUND=1
-
-  ###################[ command_execution_time: duration of the last command ]###################
-  # Execution time color.
-  typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FOREGROUND=0
-  typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_BACKGROUND=3
-  # Show duration of the last command if takes longer than this many seconds.
-  typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=3
-  # Show this many fractional digits. Zero means round to seconds.
-  typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=0
-  # Duration format: 1d 2h 3m 4s.
-  typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FORMAT='d h m s'
-  # Custom icon.
-  typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_VISUAL_IDENTIFIER_EXPANSION=
-  # Custom prefix.
-  # typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PREFIX='took '
-
-  #######################[ background_jobs: presence of background jobs ]#######################
-  # Background jobs color.
-  # typeset -g POWERLEVEL9K_BACKGROUND_JOBS_FOREGROUND=6
-  # typeset -g POWERLEVEL9K_BACKGROUND_JOBS_BACKGROUND=0
-  # Don't show the number of background jobs.
-  typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE=false
-  # Icon to show when there are background jobs.
-  typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VISUAL_IDENTIFIER_EXPANSION='${P9K_VISUAL_IDENTIFIER// }'
-
-  ##########[ nordvpn: nordvpn connection status, linux only (https://nordvpn.com/) ]###########
-  # NordVPN connection indicator color.
-  # typeset -g POWERLEVEL9K_NORDVPN_FOREGROUND=7
-  # typeset -g POWERLEVEL9K_NORDVPN_BACKGROUND=4
-  # Hide NordVPN connection indicator when not connected.
-  typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_CONTENT_EXPANSION=
-  typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_VISUAL_IDENTIFIER_EXPANSION=
-  # Custom icon.
-  # typeset -g POWERLEVEL9K_NORDVPN_VISUAL_IDENTIFIER_EXPANSION='⭐'
-
-  #################[ ranger: ranger shell (https://github.com/ranger/ranger) ]##################
-  # Ranger shell color.
-  # typeset -g POWERLEVEL9K_RANGER_FOREGROUND=3
-  # typeset -g POWERLEVEL9K_RANGER_BACKGROUND=0
-  # Custom icon.
-  # typeset -g POWERLEVEL9K_RANGER_VISUAL_IDENTIFIER_EXPANSION='⭐'
-
-  ######################################[ ram: free RAM ]#######################################
-  # RAM color.
-  # typeset -g POWERLEVEL9K_RAM_FOREGROUND=0
-  # typeset -g POWERLEVEL9K_RAM_BACKGROUND=3
-  # Custom icon.
-  # typeset -g POWERLEVEL9K_RAM_VISUAL_IDENTIFIER_EXPANSION='⭐'
-
-  ######################################[ load: CPU load ]######################################
-  # Show average CPU load over this many last minutes. Valid values are 1, 5 and 15.
-  typeset -g POWERLEVEL9K_LOAD_WHICH=5
-  # Load color when load is under 50%.
-  # typeset -g POWERLEVEL9K_LOAD_NORMAL_FOREGROUND=0
-  # typeset -g POWERLEVEL9K_LOAD_NORMAL_BACKGROUND=2
-  # Load color when load is between 50% and 70%.
-  # typeset -g POWERLEVEL9K_LOAD_WARNING_FOREGROUND=0
-  # typeset -g POWERLEVEL9K_LOAD_WARNING_BACKGROUND=3
-  # Load color when load is over 70%.
-  # typeset -g POWERLEVEL9K_LOAD_CRITICAL_FOREGROUND=0
-  # typeset -g POWERLEVEL9K_LOAD_CRITICAL_BACKGROUND=1
-  # Custom icon.
-  # typeset -g POWERLEVEL9K_LOAD_VISUAL_IDENTIFIER_EXPANSION='⭐'
-
-  ##################################[ context: user@hostname ]##################################
-  # Default context color.
-  typeset -g POWERLEVEL9K_CONTEXT_FOREGROUND=3
-  typeset -g POWERLEVEL9K_CONTEXT_BACKGROUND=0
-  # Default context format: %n is username, %m is hostname.
-  typeset -g POWERLEVEL9K_CONTEXT_TEMPLATE='%n@%m'
-
-  # Context color when running with privileges.
-  typeset -g POWERLEVEL9K_CONTEXT_ROOT_FOREGROUND=1
-  typeset -g POWERLEVEL9K_CONTEXT_ROOT_BACKGROUND=0
-  # Context format when running with privileges: %n is username, %m is hostname.
-  typeset -g POWERLEVEL9K_CONTEXT_ROOT_TEMPLATE='%n@%m'
-
-  # Don't show context unless running with privileges or in SSH.
-  # Tip: Remove the next line to always show context.
-  typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_{CONTENT,VISUAL_IDENTIFIER}_EXPANSION=
-
-  # Custom icon.
-  # typeset -g POWERLEVEL9K_CONTEXT_VISUAL_IDENTIFIER_EXPANSION='⭐'
-  # Custom prefix.
-  # typeset -g POWERLEVEL9K_CONTEXT_PREFIX='with '
-
-  ###[ virtualenv: python virtual environment (https://docs.python.org/3/library/venv.html) ]###
-  # Python virtual environment color.
-  # typeset -g POWERLEVEL9K_VIRTUALENV_FOREGROUND=0
-  # typeset -g POWERLEVEL9K_VIRTUALENV_BACKGROUND=4
-  # Don't show Python version next to the virtual environment name.
-  typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_PYTHON_VERSION=false
-  # Separate environment name from Python version only with a space.
-  typeset -g POWERLEVEL9K_VIRTUALENV_{LEFT,RIGHT}_DELIMITER=
-  # Custom icon.
-  # typeset -g POWERLEVEL9K_VIRTUALENV_VISUAL_IDENTIFIER_EXPANSION='⭐'
-
-  #####################[ anaconda: conda environment (https://conda.io/) ]######################
-  # Anaconda environment color.
-  # typeset -g POWERLEVEL9K_ANACONDA_FOREGROUND=0
-  # typeset -g POWERLEVEL9K_ANACONDA_BACKGROUND=4
-  # Don't show Python version next to the anaconda environment name.
-  typeset -g POWERLEVEL9K_ANACONDA_SHOW_PYTHON_VERSION=false
-  # Separate environment name from Python version only with a space.
-  typeset -g POWERLEVEL9K_ANACONDA_{LEFT,RIGHT}_DELIMITER=
-  # Custom icon.
-  # typeset -g POWERLEVEL9K_ANACONDA_VISUAL_IDENTIFIER_EXPANSION='⭐'
-
-  ################[ pyenv: python environment (https://github.com/pyenv/pyenv) ]################
-  # Pyenv color.
-  # typeset -g POWERLEVEL9K_PYENV_FOREGROUND=0
-  # typeset -g POWERLEVEL9K_PYENV_BACKGROUND=4
-  # Don't show the current Python version if it's the same as global.
-  typeset -g POWERLEVEL9K_PYENV_PROMPT_ALWAYS_SHOW=false
-  # Custom icon.
-  # typeset -g POWERLEVEL9K_PYENV_VISUAL_IDENTIFIER_EXPANSION='⭐'
-
-  ##########[ nodenv: node.js version from nodenv (https://github.com/nodenv/nodenv) ]##########
-  # Nodenv color.
-  # typeset -g POWERLEVEL9K_NODENV_FOREGROUND=2
-  # typeset -g POWERLEVEL9K_NODENV_BACKGROUND=0
-  # Don't show node version if it's the same as global: $(nodenv version-name) == $(nodenv global).
-  typeset -g POWERLEVEL9K_NODENV_PROMPT_ALWAYS_SHOW=false
-  # Custom icon.
-  # typeset -g POWERLEVEL9K_NODENV_VISUAL_IDENTIFIER_EXPANSION='⭐'
-
-  ##############[ nvm: node.js version from nvm (https://github.com/nvm-sh/nvm) ]###############
-  # Nvm color.
-  # typeset -g POWERLEVEL9K_NVM_FOREGROUND=70
-  # Custom icon.
-  # typeset -g POWERLEVEL9K_NVM_VISUAL_IDENTIFIER_EXPANSION='⭐'
-
-  ############[ nodeenv: node.js environment (https://github.com/ekalinin/nodeenv) ]############
-  # Nodeenv color.
-  # typeset -g POWERLEVEL9K_NODEENV_FOREGROUND=2
-  # typeset -g POWERLEVEL9K_NODEENV_BACKGROUND=0
-  # Don't show Node version next to the environment name.
-  typeset -g POWERLEVEL9K_NODEENV_SHOW_NODE_VERSION=false
-  # Separate environment name from Node version only with a space.
-  typeset -g POWERLEVEL9K_NODEENV_{LEFT,RIGHT}_DELIMITER=
-  # Custom icon.
-  # typeset -g POWERLEVEL9K_NODEENV_VISUAL_IDENTIFIER_EXPANSION='⭐'
-
-  ##############################[ node_version: node.js version ]###############################
-  # Node version color.
-  # typeset -g POWERLEVEL9K_NODE_VERSION_FOREGROUND=7
-  # typeset -g POWERLEVEL9K_NODE_VERSION_BACKGROUND=2
-  # Show node version only when in a directory tree containing package.json.
-  typeset -g POWERLEVEL9K_NODE_VERSION_PROJECT_ONLY=true
-  # Custom icon.
-  # typeset -g POWERLEVEL9K_NODE_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐'
-
-  #######################[ go_version: go version (https://golang.org) ]########################
-  # Go version color.
-  # typeset -g POWERLEVEL9K_GO_VERSION_FOREGROUND=255
-  # typeset -g POWERLEVEL9K_GO_VERSION_BACKGROUND=2
-  # Show go version only when in a go project subdirectory.
-  typeset -g POWERLEVEL9K_GO_VERSION_PROJECT_ONLY=true
-  # Custom icon.
-  # typeset -g POWERLEVEL9K_GO_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐'
-
-  #################[ rust_version: rustc version (https://www.rust-lang.org) ]##################
-  # Rust version color.
-  # typeset -g POWERLEVEL9K_RUST_VERSION_FOREGROUND=0
-  # typeset -g POWERLEVEL9K_RUST_VERSION_BACKGROUND=208
-  # Show rust version only when in a rust project subdirectory.
-  typeset -g POWERLEVEL9K_RUST_VERSION_PROJECT_ONLY=true
-  # Custom icon.
-  # typeset -g POWERLEVEL9K_RUST_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐'
-
-  ###############[ dotnet_version: .NET version (https://dotnet.microsoft.com) ]################
-  # .NET version color.
-  # typeset -g POWERLEVEL9K_DOTNET_VERSION_FOREGROUND=7
-  # typeset -g POWERLEVEL9K_DOTNET_VERSION_BACKGROUND=5
-  # Show .NET version only when in a .NET project subdirectory.
-  typeset -g POWERLEVEL9K_DOTNET_VERSION_PROJECT_ONLY=true
-  # Custom icon.
-  # typeset -g POWERLEVEL9K_DOTNET_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐'
-
-  #############[ rbenv: ruby version from rbenv (https://github.com/rbenv/rbenv) ]##############
-  # Rbenv color.
-  # typeset -g POWERLEVEL9K_RBENV_FOREGROUND=0
-  # typeset -g POWERLEVEL9K_RBENV_BACKGROUND=1
-  # Don't show ruby version if it's the same as global: $(rbenv version-name) == $(rbenv global).
-  typeset -g POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW=false
-  # Custom icon.
-  # typeset -g POWERLEVEL9K_RBENV_VISUAL_IDENTIFIER_EXPANSION='⭐'
-
-  #######################[ rvm: ruby version from rvm (https://rvm.io) ]########################
-  # Rvm color.
-  # typeset -g POWERLEVEL9K_RVM_FOREGROUND=0
-  # typeset -g POWERLEVEL9K_RVM_BACKGROUND=240
-  # Don't show @gemset at the end.
-  typeset -g POWERLEVEL9K_RVM_SHOW_GEMSET=false
-  # Don't show ruby- at the front.
-  typeset -g POWERLEVEL9K_RVM_SHOW_PREFIX=false
-  # Custom icon.
-  # typeset -g POWERLEVEL9K_RVM_VISUAL_IDENTIFIER_EXPANSION='⭐'
-
-  ################[ terraform: terraform workspace (https://www.terraform.io) ]#################
-  # Terraform color.
-  # typeset -g POWERLEVEL9K_TERRAFORM_FOREGROUND=4
-  # typeset -g POWERLEVEL9K_TERRAFORM_BACKGROUND=0
-  # Custom icon.
-  # typeset -g POWERLEVEL9K_TERRAFORM_VISUAL_IDENTIFIER_EXPANSION='⭐'
-
-  #[ aws: aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) ]#
-  # AWS profile color.
-  # typeset -g POWERLEVEL9K_AWS_FOREGROUND=7
-  # typeset -g POWERLEVEL9K_AWS_BACKGROUND=1
-  # Custom icon.
-  # typeset -g POWERLEVEL9K_AWS_VISUAL_IDENTIFIER_EXPANSION='⭐'
-
-  #[ aws_eb_env: aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/) ]#
-  # AWS Elastic Beanstalk environment color.
-  # typeset -g POWERLEVEL9K_AWS_EB_ENV_FOREGROUND=2
-  # typeset -g POWERLEVEL9K_AWS_EB_ENV_BACKGROUND=0
-  # Custom icon.
-  # typeset -g POWERLEVEL9K_AWS_EB_ENV_VISUAL_IDENTIFIER_EXPANSION='⭐'
-
-  ##########[ azure: azure account name (https://docs.microsoft.com/en-us/cli/azure) ]##########
-  # Azure account name color.
-  # typeset -g POWERLEVEL9K_AZURE_FOREGROUND=7
-  # typeset -g POWERLEVEL9K_AZURE_BACKGROUND=4
-  # Custom icon.
-  # typeset -g POWERLEVEL9K_AZURE_VISUAL_IDENTIFIER_EXPANSION='⭐'
-
-  #############[ kubecontext: current kubernetes context (https://kubernetes.io/) ]#############
-  # Kubernetes context classes for the purpose of using different colors, icons and expansions with
-  # different contexts.
-  #
-  # POWERLEVEL9K_KUBECONTEXT_CLASSES is an array with even number of elements. The first element
-  # in each pair defines a pattern against which the current kubernetes context gets matched.
-  # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below)
-  # that gets matched. If you unset all POWERLEVEL9K_KUBECONTEXT_*CONTENT_EXPANSION parameters,
-  # you'll see this value in your prompt. The second element of each pair in
-  # POWERLEVEL9K_KUBECONTEXT_CLASSES defines the context class. Patterns are tried in order. The
-  # first match wins.
-  #
-  # For example, given these settings:
-  #
-  #   typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=(
-  #     '*prod*'  PROD
-  #     '*test*'  TEST
-  #     '*'       DEFAULT)
-  #
-  # If your current kubernetes context is "deathray-testing/default", its class is TEST
-  # because "deathray-testing/default" doesn't match the pattern '*prod*' but does match '*test*'.
-  #
-  # You can define different colors, icons and content expansions for different classes:
-  #
-  #   typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_FOREGROUND=0
-  #   typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_BACKGROUND=2
-  #   typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐'
-  #   typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <'
-  typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=(
-      # '*prod*'  PROD    # These values are examples that are unlikely
-      # '*test*'  TEST    # to match your needs. Customize them as needed.
-      '*'       DEFAULT)
-  typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_FOREGROUND=7
-  typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_BACKGROUND=5
-  # typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐'
-
-  # Use POWERLEVEL9K_KUBECONTEXT_CONTENT_EXPANSION to specify the content displayed by kubecontext
-  # segment. Parameter expansions are very flexible and fast, too. See reference:
-  # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion.
-  #
-  # Within the expansion the following parameters are always available:
-  #
-  # - P9K_CONTENT                The content that would've been displayed if there was no content
-  #                              expansion defined.
-  # - P9K_KUBECONTEXT_NAME       The current context's name. Corresponds to column NAME in the
-  #                              output of `kubectl config get-contexts`.
-  # - P9K_KUBECONTEXT_CLUSTER    The current context's cluster. Corresponds to column CLUSTER in the
-  #                              output of `kubectl config get-contexts`.
-  # - P9K_KUBECONTEXT_NAMESPACE  The current context's namespace. Corresponds to column NAMESPACE
-  #                              in the output of `kubectl config get-contexts`. If there is no
-  #                              namespace, the parameter is set to "default".
-  #
-  # If the context points to Google Kubernetes Engine (GKE) or Elastic Kubernetes Service (EKS),
-  # the following extra parameters are available:
-  #
-  # - P9K_KUBECONTEXT_CLOUD_NAME     Either "gke" or "eks".
-  # - P9K_KUBECONTEXT_CLOUD_ACCOUNT  Account/project ID.
-  # - P9K_KUBECONTEXT_CLOUD_ZONE     Availability zone.
-  # - P9K_KUBECONTEXT_CLOUD_CLUSTER  Cluster.
-  #
-  # P9K_KUBECONTEXT_CLOUD_* parameters are derived from P9K_KUBECONTEXT_CLUSTER. For example,
-  # if P9K_KUBECONTEXT_CLUSTER is "gke_my-account_us-east1-a_my-cluster-01":
-  #
-  #   - P9K_KUBECONTEXT_CLOUD_NAME=gke
-  #   - P9K_KUBECONTEXT_CLOUD_ACCOUNT=my-account
-  #   - P9K_KUBECONTEXT_CLOUD_ZONE=us-east1-a
-  #   - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01
-  #
-  # If P9K_KUBECONTEXT_CLUSTER is "arn:aws:eks:us-east-1:123456789012:cluster/my-cluster-01":
-  #
-  #   - P9K_KUBECONTEXT_CLOUD_NAME=eks
-  #   - P9K_KUBECONTEXT_CLOUD_ACCOUNT=123456789012
-  #   - P9K_KUBECONTEXT_CLOUD_ZONE=us-east-1
-  #   - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01
-  typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION=
-  # Show P9K_KUBECONTEXT_CLOUD_CLUSTER if it's not empty and fall back to P9K_KUBECONTEXT_NAME.
-  POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${P9K_KUBECONTEXT_CLOUD_CLUSTER:-${P9K_KUBECONTEXT_NAME}}'
-  # Append the current context's namespace if it's not "default".
-  POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${${:-/$P9K_KUBECONTEXT_NAMESPACE}:#/default}'
-
-  # Custom prefix.
-  # typeset -g POWERLEVEL9K_KUBECONTEXT_PREFIX='at '
-
-  ###############################[ public_ip: public IP address ]###############################
-  # Public IP color.
-  # typeset -g POWERLEVEL9K_PUBLIC_IP_FOREGROUND=7
-  # typeset -g POWERLEVEL9K_PUBLIC_IP_BACKGROUND=0
-  # Custom icon.
-  # typeset -g POWERLEVEL9K_PUBLIC_IP_VISUAL_IDENTIFIER_EXPANSION='⭐'
-
-  ########################[ vpn_ip: virtual private network indicator ]#########################
-  # VPN IP color.
-  # typeset -g POWERLEVEL9K_VPN_IP_FOREGROUND=0
-  # typeset -g POWERLEVEL9K_VPN_IP_BACKGROUND=6
-  # When on VPN, show just an icon without the IP address.
-  typeset -g POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION=
-  # Regular expression for the VPN network interface. Run ifconfig while on VPN to see the
-  # name of the interface.
-  typeset -g POWERLEVEL9K_VPN_IP_INTERFACE='(wg|(.*tun))[0-9]*'
-  # Icon to show when on VPN.
-  typeset -g POWERLEVEL9K_VPN_IP_VISUAL_IDENTIFIER_EXPANSION='${P9K_VISUAL_IDENTIFIER// }'
-
-  #########################[ proxy: system-wide http/https/ftp proxy ]##########################
-  # Proxy color.
-  # typeset -g POWERLEVEL9K_PROXY_FOREGROUND=4
-  # typeset -g POWERLEVEL9K_PROXY_BACKGROUND=0
-  # Custom icon.
-  # typeset -g POWERLEVEL9K_PROXY_VISUAL_IDENTIFIER_EXPANSION='⭐'
-
-  ################################[ battery: internal battery ]#################################
-  # Show battery in red when it's below this level and not connected to power supply.
-  typeset -g POWERLEVEL9K_BATTERY_LOW_THRESHOLD=20
-  typeset -g POWERLEVEL9K_BATTERY_LOW_FOREGROUND=1
-  # Show battery in green when it's charging or fully charged.
-  typeset -g POWERLEVEL9K_BATTERY_{CHARGING,CHARGED}_FOREGROUND=2
-  # Show battery in yellow when it's discharging.
-  typeset -g POWERLEVEL9K_BATTERY_DISCONNECTED_FOREGROUND=3
-  # Battery pictograms going from low to high level of charge.
-  typeset -g POWERLEVEL9K_BATTERY_STAGES=$'\uf58d\uf579\uf57a\uf57b\uf57c\uf57d\uf57e\uf57f\uf580\uf581\uf578'
-  # Don't show the remaining time to charge/discharge.
-  typeset -g POWERLEVEL9K_BATTERY_VERBOSE=false
-  # typeset -g POWERLEVEL9K_BATTERY_BACKGROUND=0
-
-  ####################################[ time: current time ]####################################
-  # Current time color.
-  # typeset -g POWERLEVEL9K_TIME_FOREGROUND=0
-  # typeset -g POWERLEVEL9K_TIME_BACKGROUND=7
-  # Format for the current time: 09:51:02. See `man 3 strftime`.
-  typeset -g POWERLEVEL9K_TIME_FORMAT='%D{%H:%M:%S}'
-  # If set to true, time will update when you hit enter. This way prompts for the past
-  # commands will contain the start times of their commands as opposed to the default
-  # behavior where they contain the end times of their preceding commands.
-  typeset -g POWERLEVEL9K_TIME_UPDATE_ON_COMMAND=false
-  # Custom icon.
-  typeset -g POWERLEVEL9K_TIME_VISUAL_IDENTIFIER_EXPANSION=
-  # Custom prefix.
-  # typeset -g POWERLEVEL9K_TIME_PREFIX='at '
-
-  # Example of a user-defined prompt segment. Function prompt_example will be called on every
-  # prompt if `example` prompt segment is added to POWERLEVEL9K_LEFT_PROMPT_ELEMENTS or
-  # POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS. It displays an icon and orange text greeting the user.
-  #
-  # Type `p10k help segment` for documentation and a more sophisticated example.
-  function prompt_example() {
-    p10k segment -b red -f yellow -i '⭐' -t 'hello, %n'
-  }
-
-  # User-defined prompt segments can be customized the same way as built-in segments.
-  # typeset -g POWERLEVEL9K_EXAMPLE_FOREGROUND=4
-  typeset -g POWERLEVEL9K_EXAMPLE_VISUAL_IDENTIFIER_EXPANSION='${P9K_VISUAL_IDENTIFIER}'
-}
-
-(( ${#p10k_config_opts} )) && setopt ${p10k_config_opts[@]}
-'builtin' 'unset' 'p10k_config_opts'
diff --git a/config/zsh/zshrc b/config/zsh/zshrc
deleted file mode 100644
index 559b1ca..0000000
--- a/config/zsh/zshrc
+++ /dev/null
@@ -1,53 +0,0 @@
-export XDG_CACHE_HOME=${XDG_CACHE_HOME:=~/.cache}
-export XDG_CONFIG_HOME=${XDG_CONFIG_HOME:=~/.config}
-export XDG_DATA_HOME=${XDG_DATA_HOME:=~/.local/share}
-if printf "$PATH"|grep -q ".local/bin"; then
-	export PATH="$PATH:$HOME/.local/bin"
-fi
-
-HISTFILE=$XDG_DATA_HOME/zsh/histfile
-HISTSIZE=5000
-SAVEHIST=5000
-
-typeset -A ZPLGM
-ZPLG_HOME=$XDG_CACHE_HOME/zsh/zplugin
-ZPLGM[HOME_DIR]=$ZPLG_HOME
-ZPLGM[ZCOMPDUMP_PATH]=$XDG_CACHE_HOME/zsh/zcompdump
-ZPLGM[COMPLETIONS_DIR]=$XDG_DATA_HOME/zsh/completions
-if [[ ! -f $ZPLG_HOME/bin/zplugin.zsh ]]; then
-	git clone https://github.com/zdharma/zplugin $ZPLG_HOME/bin
-	zcompile $ZPLG_HOME/bin/zplugin.zsh
-fi
-autoload -Uz _zplugin
-(( ${+_comps} )) && _comps[zplugin]=_zplugin
-source $ZPLG_HOME/bin/zplugin.zsh
-load=light
-
-#load zsh external configs
-for file in $ZDOTDIR/*.zsh; do
-	source "$file"
-done
-#make fpath not contain all the completions I don't use (enable completions using "zplugin creinstall [PATH_TO_COMPLETIONS_FOLDER]")
-if [[ -d /usr/local/share/zsh ]]; then
-fpath=($XDG_DATA_HOME/zsh/completions /usr/local/share/zsh/site-functions /usr/local/share/zsh/$ZSH_VERSION/functions/Calendar /usr/local/share/zsh/$ZSH_VERSION/functions/Chpwd /usr/local/share/zsh/$ZSH_VERSION/functions/Completion /usr/local/share/zsh/$ZSH_VERSION/functions/Exceptions /usr/local/share/zsh/$ZSH_VERSION/functions/MIME /usr/local/share/zsh/$ZSH_VERSION/functions/Exceptions /usr/local/share/zsh/$ZSH_VERSION/functions/Math /usr/local/share/zsh/$ZSH_VERSION/functions/Exceptions /usr/local/share/zsh/$ZSH_VERSION/functions/Misc /usr/local/share/zsh/$ZSH_VERSION/functions/TCP /usr/local/share/zsh/$ZSH_VERSION/functions/VCS_Info /usr/local/share/zsh/$ZSH_VERSION/functions/VCS_Info/Backends /usr/local/share/zsh/$ZSH_VERSION/functions/Zftp /usr/local/share/zsh/$ZSH_VERSION/functions/Zle)
-else
-fpath=($XDG_DATA_HOME/zsh/completions /usr/share/zsh/site-functions /usr/share/zsh/$ZSH_VERSION/functions/Calendar /usr/share/zsh/$ZSH_VERSION/functions/Chpwd /usr/share/zsh/$ZSH_VERSION/functions/Completion /usr/share/zsh/$ZSH_VERSION/functions/Exceptions /usr/share/zsh/$ZSH_VERSION/functions/MIME /usr/share/zsh/$ZSH_VERSION/functions/Exceptions /usr/share/zsh/$ZSH_VERSION/functions/Math /usr/share/zsh/$ZSH_VERSION/functions/Exceptions /usr/share/zsh/$ZSH_VERSION/functions/Misc /usr/share/zsh/$ZSH_VERSION/functions/TCP /usr/share/zsh/$ZSH_VERSION/functions/VCS_Info /usr/share/zsh/$ZSH_VERSION/functions/VCS_Info/Backends /usr/share/zsh/$ZSH_VERSION/functions/Zftp /usr/share/zsh/$ZSH_VERSION/functions/Zle)
-fi
-# load shortcutrc and aliasrc to grab cross-shell niceties
-[ -f "$XDG_CONFIG_HOME/shortcutrc" ] && source "$XDG_CONFIG_HOME/shortcutrc"
-[ -f "$XDG_CONFIG_HOME/aliasrc" ] && source "$XDG_CONFIG_HOME/aliasrc"
-# plugin loading goes here:
-# theme
-zplugin ice silent depth=1
-zplugin $load romkatv/powerlevel10k
-# Ctrl-R functionality
-zplugin $load zdharma/history-search-multi-word
-# completions
-zplugin ice blockf
-zplugin $load zsh-users/zsh-completions
-# good, fast syntax highlighting
-zplugin ice silent wait!1 atload"ZPLGM[COMPINIT_OPTS]=-C; zpcompinit"
-zplugin $load zdharma/fast-syntax-highlighting
-
-# theme config loading
-[ -f "$ZDOTDIR/themes/p10k.zsh" ] && source "$ZDOTDIR/themes/p10k.zsh"
Diffstat (limited to 'bin')
-rwxr-xr-xbin/bother10
-rwxr-xr-xbin/comm-sel13
-rwxr-xr-xbin/mbsync-cron (renamed from bin/popmail)28
-rwxr-xr-xbin/opener41
-rwxr-xr-xbin/pw29
5 files changed, 96 insertions, 25 deletions
diff --git a/bin/bother b/bin/bother
new file mode 100755
index 0000000..701b1a4
--- /dev/null
+++ b/bin/bother
@@ -0,0 +1,10 @@
+#!/bin/sh
+# puts up a critical notification if $HOME/today exists, containing the contents of that file.
+if [ -f "$HOME"/today ]; then
+	until pgrep -x dwm>/dev/null
+	do
+		true
+	done
+	sleep 0.5
+	notify-send -u critical "DO TODAY:" "$(cat "$HOME"/today)"
+fi
diff --git a/bin/comm-sel b/bin/comm-sel
index f67787f..0678679 100755
--- a/bin/comm-sel
+++ b/bin/comm-sel
@@ -1,9 +1,14 @@
 #!/bin/sh
-# sends a list of communication TUIs (e.g irssi) to dmenu and allows the user to choose one.
+# sends a list of communication TUIs (e.g epic5) to dmenu and allows the user to choose one.
 # class "comm" is added to enable window managers (e.g dwm) to do specific things with them.
-case "$(dmenu_path|grep -E "irssi|6cord|scli$"|dmenu -p "choose chat app:")" in
-	irssi) $TERMINAL -c comm -e irssi --home=$XDG_CONFIG_HOME/irssi&;;
-	6cord) $TERMINAL -c comm -e 6cord&;;
+# st-altscreen is a built of st that doesn't have scrollback or extra keybindings, so it doesn't get in the way of whatever binds clients have.
+# as a result it's lighter than the build of st i use for interactive use.
+if command -v st-altscreen>/dev/null; then
+	TERMINAL="st-altscreen"
+fi
+case "$(dmenu_path|grep -E "epic5$|6cord|scli$"|dmenu -p "choose chat app:")" in
+	epic5) $TERMINAL -c comm -e epic5 -l "$XDG_CONFIG_HOME/epic/epicrc" ensa&;;
+	6cord) $TERMINAL -c comm -e env TERM=xterm 6cord&;;
 	scli) $TERMINAL -c comm -e scli&;;
 	*) notify-send "comm-sel error" "invalid program selection"&&return 1;;
 esac
diff --git a/bin/popmail b/bin/mbsync-cron
index d1bae9f..dd69c01 100755
--- a/bin/popmail
+++ b/bin/mbsync-cron
@@ -21,23 +21,20 @@ if ! [ -d "$XDG_DATA_HOME/neomutt" ]; then
 fi
 # check account for new mail, notify for new content
 syncandnotify() {
-    # sanitize $account for use in function
-    acc="$(printf '%s\n' "$account" | sed "s/.*\///")"
-    mbsync "$acc">/dev/null 2>&1
+    mbsync "$account">/dev/null 2>&1
     # $new holds an index of all mail since the last time popmail ran
-    new=$(find "$XDG_DATA_HOME/mail/$acc/inbox/new/" -type f -newer "$XDG_DATA_HOME/neomutt/.popmail-last" 2> /dev/null)
+    new=$(find "$XDG_DATA_HOME/mail/$account/inbox/new/" -type f -newer "$XDG_DATA_HOME/neomutt/.popmail-last" 2> /dev/null)
     # $newcount is the number of new mails
     newcount=$(printf '%s\n' "$new" | sed '/^\s*$/d' | wc -l | tr -d " ")
-    # send $newcount to a file specific to $acc
+    # send $newcount to a file specific to $account
     # the preceding space makes generating a status bar string easier.
-    printf ' %s' "$newcount" > "$XDG_DATA_HOME/mail/$acc/note"
+    printf ' %s' "$newcount" > "$XDG_DATA_HOME/mail/$account/note"
     # don't notify if there isn't new mail
     if [ "$newcount" -gt "0" ]; then
-        notify-send --app-name="popmail" "mail fetcher" "new mail for profile $acc! [$newcount]" &
+        notify-send --app-name="popmail" "mail fetcher" "new mail for profile $account! [$newcount]" &
+	# reduce output if you have a lot of new mail
+	if [ "$newcount" -lt "16" ]; then
         for file in $new; do
-	    # broken lines, not sure what they're supposed to do
-            #from=$(awk '/^From: / && ++n ==1,/^\<.*\>:/' "$file" | perl -CS -MEncode -ne 'print decode("MIME-Header", $_)' | awk '{ $1=""; if (NF>=3)$NF=""; print $0 }' | sed 's/^[[:blank:]]*[\"'\''\<]*//;s/[\"'\''\>]*[[:blank:]]*$//')
-            #subject=$(awk '/^Subject: / && ++n == 1,/^\<.*\>: / && ++i == 2' "$file" | sed '$D' | perl -CS -MEncode -ne 'print decode("MIME-Header", $_)' | sed 's/^Subject: //' | sed 's/^{[[:blank:]]*[\"'\''\<]*//;s/[\"'\''\>]*[[:blank:]]*$//' | tr -d '\n')
             # Extract subject and sender from mail.
 	    # modified version of broken $from variable, only prints the first from (so forwards are slightly unclear)
 	    from=$(awk '/^From: / && ++n ==1,/^\<.*\>:/' "$file" | awk '{ $1=""; if (NF>=3)$NF=""; print $0 }' | sed '1!d'| sed '1,/From/s/From: //')
@@ -47,6 +44,7 @@ syncandnotify() {
 	    # sleep for half a second to avoid notification clog
 	    sleep .5
         done
+	fi
     fi
 }
 
@@ -65,7 +63,13 @@ do
 done
 
 wait
-# collect all previously created note files and collate them into a file that can be read by a status bar to notify the user of new mails
-printf "$(cat "$XDG_DATA_HOME"/mail/*/note|tr " " "|"|sed 's/|//')\n">"$XDG_DATA_HOME/mail/note"
+## OLD: collect all previously created note files and collate them into a file that can be read by a status bar to notify the user of new mails
+#printf "$(cat "$XDG_DATA_HOME"/mail/*/note|tr " " "|"|sed 's/|//')\n">"$XDG_DATA_HOME/mail/note"
+# use a single symbol to indicate new mail in any maildir
+if cat "$XDG_DATA_HOME"/mail/*/note|grep -q '[1-9]'; then
+	printf ' \n'>"$XDG_DATA_HOME/mail/note"
+else
+	printf '\n'>"$XDG_DATA_HOME/mail/note"
+fi
 #create/update modification time on an empty file that indicates the time of the last run of popmail
 touch "$XDG_DATA_HOME/neomutt/.popmail-last"
diff --git a/bin/opener b/bin/opener
new file mode 100755
index 0000000..755da51
--- /dev/null
+++ b/bin/opener
@@ -0,0 +1,41 @@
+#!/bin/sh
+# opener: opens files according to its contents
+# takes one path as its argument, launches the appropriate program for it
+if ! [ -f "$1" ]; then
+	printf 'file %s does not exist!\n' "$1" >/dev/stderr
+	return 1
+fi
+FILEPATH="$1"
+FILEMIME="$(file -ib "$FILEPATH")"
+echo() {
+	printf '%s\n' "$*"
+}
+case "$FILEMIME" in
+	#ebooks
+	application/epub*|application/pdf|application/postscript|image/vnd.djvu)
+		if [ -n "$READER" ]; then
+			$READER "$FILEPATH">/dev/null 2>&1 &
+		else
+			zathura "$FILEPATH" &
+		fi ;;
+	#videos
+	video/*)
+		mpv --input-ipc-server=/tmp/mpv-socket$(date +%s) --quiet "$FILEPATH" >/dev/null 2>&1 & ;;
+	#images
+	image/*)
+		sxiv -a "$FILEPATH">/dev/null 2>&1 & ;;
+	#audio
+	audio/*)
+		mpv --input-ipc-server=/tmp/mpv-socket$(date +%s) "$FILEPATH" >/dev/null 2>&1 & ;;
+	#text
+	text/*)
+		if [ -n "$EDITOR" ]; then
+			$EDITOR "$FILEPATH">/dev/null 2>&1 &
+		else
+			vi "$FILEPATH" &
+		fi ;;
+	#catchall
+	*)
+		echo "file $(basename "$FILEPATH") could not be opened. its type is $FILEMIME, go tell ensa that opener didn't work" >/dev/stderr
+		return 1 ;;
+esac
diff --git a/bin/pw b/bin/pw
index 140f1dc..cec9e54 100755
--- a/bin/pw
+++ b/bin/pw
@@ -1,14 +1,25 @@
 #!/bin/sh
-# generates a password of length $1, sends it to stdout if $2 isn't clip.
-# if it is clip, sends it to the X clipboard and clears it after 10 seconds.
+# generates a password of length $1, sends it to stdout if $2 is blank.
+# if $2 is clip, sends it to the X clipboard and clears it after 10 seconds.
+# if $2 is anything else, sends it to the X primary selection and clears it after 10 seconds
 if [ "$1" = "-h" ]; then
-	printf 'usage: %s [-h]|LENGTH [clip]\n' "$(basename $0)">/dev/stderr&&return 1
+  printf 'usage: %s [-h]|LENGTH [clip|pri]\n' "$(basename $0)">/dev/stderr
+  return 1
 fi
-PW=$(tr -cd "[:alnum:][:punct:]"</dev/urandom|fold -w $1|head -1)
-if [ "$2" = "clip" ]; then
-	printf '%s' "$PW"|xclip -sel clip -i&&notify-send "Password Generated" "$1-character password generated. It will clear in 10 seconds."
-	sleep 10
-	printf "\0"|xclip -sel clip -i&&notify-send "Clipboard Cleared" "Generated password cleared from clipboard."
+PW=$(tr -cd "[:alnum:][:punct:]"</dev/urandom|fold -w "$1"|head -1)
+if [ -n "$2" ]; then
+    # streamline selection variation by using $SEL
+    if [ "$2" = "clip" ]; then
+	    SEL="-sel clip"
+    else
+	    SEL=""
+    fi
+    # backgrounds so the user doesn't have to wait 10 seconds to get a prompt again
+      {
+      printf "%s" "$PW"|xclip $SEL -i&&notify-send "Password Generated" "$1-character password generated. It will clear in 10 seconds."
+      sleep 10
+      printf '\0'|xclip $SEL -i&&notify-send "Clipboard Cleared" "Generated password cleared from clipboard."
+      } &
 else
-	printf '%s\n' "$PW"
+  printf '%s\n' "$PW"
 fi