aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCameron Katri <me@cameronkatri.com>2021-06-13 16:11:26 -0400
committerCameron Katri <me@cameronkatri.com>2021-06-13 16:11:26 -0400
commit8ceda16d9eb3ff274aaf35df700868d3d90269db (patch)
tree421070fe136171a54e129571c9f576a664e9c6e6
downloaddotfiles-8ceda16d9eb3ff274aaf35df700868d3d90269db.tar.gz
dotfiles-8ceda16d9eb3ff274aaf35df700868d3d90269db.tar.zst
dotfiles-8ceda16d9eb3ff274aaf35df700868d3d90269db.zip
Initial dotfiles
-rw-r--r--.Xresources47
-rwxr-xr-x.config/bspwm/autostart.sh18
-rwxr-xr-x.config/bspwm/bspwmrc62
-rw-r--r--.config/bspwm/picom.conf233
-rwxr-xr-x.config/bspwm/sxhkdrc331
-rw-r--r--.config/dunst/dunstrc95
-rwxr-xr-x.config/kitty/kitty.conf964
-rw-r--r--.config/neomutt/neomuttrc50
-rw-r--r--.config/neomutt/nord.mutt42
-rw-r--r--.config/nvim/ftdetect/control.vim1
-rw-r--r--.config/nvim/init.vim59
-rwxr-xr-x.config/polybar/launch.sh3
-rw-r--r--.config/polybar/theme.ini151
-rw-r--r--.config/rofi/config1
-rw-r--r--.config/rofi/nord.rasi92
-rw-r--r--.gitconfig26
-rwxr-xr-x.local/bin/bat-check35
-rwxr-xr-x.local/bin/cleanup-after-bad-patch18
-rwxr-xr-x.xinitrc19
-rwxr-xr-x.zshrc107
20 files changed, 2354 insertions, 0 deletions
diff --git a/.Xresources b/.Xresources
new file mode 100644
index 0000000..916a0ff
--- /dev/null
+++ b/.Xresources
@@ -0,0 +1,47 @@
+! Copyright (c) 2016-present Arctic Ice Studio <development@arcticicestudio.com>
+! Copyright (c) 2016-present Sven Greb <code@svengreb.de>
+
+! Project: Nord XResources
+! Version: 0.1.0
+! Repository: https://github.com/arcticicestudio/nord-xresources
+! License: MIT
+
+#define nord0 #2E3440
+#define nord1 #3B4252
+#define nord2 #434C5E
+#define nord3 #4C566A
+#define nord4 #D8DEE9
+#define nord5 #E5E9F0
+#define nord6 #ECEFF4
+#define nord7 #8FBCBB
+#define nord8 #88C0D0
+#define nord9 #81A1C1
+#define nord10 #5E81AC
+#define nord11 #BF616A
+#define nord12 #D08770
+#define nord13 #EBCB8B
+#define nord14 #A3BE8C
+#define nord15 #B48EAD
+
+*.foreground: nord4
+*.background: nord0
+*.cursorColor: nord4
+*fading: 35
+*fadeColor: nord3
+
+*.color0: nord1
+*.color1: nord11
+*.color2: nord14
+*.color3: nord13
+*.color4: nord9
+*.color5: nord15
+*.color6: nord8
+*.color7: nord5
+*.color8: nord3
+*.color9: nord11
+*.color10: nord14
+*.color11: nord13
+*.color12: nord9
+*.color13: nord15
+*.color14: nord7
+*.color15: nord6
diff --git a/.config/bspwm/autostart.sh b/.config/bspwm/autostart.sh
new file mode 100755
index 0000000..b6c83d8
--- /dev/null
+++ b/.config/bspwm/autostart.sh
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+run() {
+ $@ &
+}
+
+run nitrogen ~/Pictures/at-at-minimalist-pc-wallpaper-4k.png --set-scaled
+run nitrogen ~/Pictures/WallpaperNew.png --set-scaled
+
+xsetroot -cursor_name left_ptr
+run sxhkd -c $HOME/.config/bspwm/sxhkdrc
+
+run picom --experimental-backends --config $HOME/.config/bspwm/picom.conf
+
+$HOME/.config/polybar/launch.sh
+
+run dunst
+run bat-check
diff --git a/.config/bspwm/bspwmrc b/.config/bspwm/bspwmrc
new file mode 100755
index 0000000..d025c02
--- /dev/null
+++ b/.config/bspwm/bspwmrc
@@ -0,0 +1,62 @@
+#!/bin/sh
+
+#LAUNCHERS
+$HOME/.config/bspwm/autostart.sh
+
+# BSPWM configuration
+bspc config border_width 2
+bspc config window_gap 10
+bspc config top_padding 25
+bspc config bottom_padding 0
+bspc config left_padding 0
+bspc config right_padding 0
+
+bspc config single_monocle false
+bspc config split_ratio 0.55
+bspc config borderless_monocle false
+bspc config gapless_monocle false
+bspc config focus_follows_pointer true
+
+bspc config pointer_modifier mod4
+bspc config pointer_action1 move
+bspc config pointer_action2 resize_side
+bspc config pointer_action3 resize_corner
+bspc config remove_disabled_monitors true
+bspc config merge_overlapping_monitors true
+
+bspc config automatic_scheme alternate
+
+#BSPWM coloring
+
+#bspc config normal_border_color "#3c3836"
+#bspc config active_border_color "#504945"
+#bspc config focused_border_color "#98971a"
+#bspc config presel_feedback_color "#504945"
+
+bspc config focused_border_color "#5e81ac"
+bspc config normal_border_color "#4c566a"
+bspc config active_border_color "#2e3440"
+bspc config presel_feedback_color "#2e3440"
+bspc config urgent_border_color "#2e3440"
+
+# Laptop monitor
+bspc monitor -d one two three four five six seven eight nine zero
+# External monitor
+# bspc monitor DP1 -d code web chat media other
+# PC Monitor
+# bspc monitor HDMI-1 -d code web chat media other
+
+bspc rule -a MultiMC5 state=floating
+bspc rule -a Steam state=floating
+bspc rule -a Transmission-gtk state=floating
+bspc rule -a Qemu-system-x86_64 state=floating
+bspc rule -a Virt-manager state=floating
+bspc rule -a Pavucontrol state=floating
+bspc rule -a Plug state=floating
+bspc rule -a zoom state=floating
+bspc rule -a Signal state=floating
+bspc rule -a Spotify state=floating
+bspc rule -a Cawbird state=floating
+bspc rule -a krita state=floating
+
+bspc config border_radius 5
diff --git a/.config/bspwm/picom.conf b/.config/bspwm/picom.conf
new file mode 100644
index 0000000..90c48f3
--- /dev/null
+++ b/.config/bspwm/picom.conf
@@ -0,0 +1,233 @@
+# Thank you code_nomad: http://9m.no/ꪯ鵞
+# and Arch Wiki contributors: https://wiki.archlinux.org/index.php/Compton
+
+#################################
+#
+# Backend
+#
+#################################
+
+# Backend to use: "xrender" or "glx".
+# GLX backend is typically much faster but depends on a sane driver.
+backend = "glx";
+#backend = "xrender"
+
+#################################
+#
+# GLX backend
+#
+#################################
+
+glx-no-stencil = true;
+
+# GLX backend: Copy unmodified regions from front buffer instead of redrawing them all.
+# My tests with nvidia-drivers show a 10% decrease in performance when the whole screen is modified,
+# but a 20% increase when only 1/4 is.
+# My tests on nouveau show terrible slowdown.
+glx-copy-from-front = false;
+
+# GLX backend: Use MESA_copy_sub_buffer to do partial screen update.
+# My tests on nouveau shows a 200% performance boost when only 1/4 of the screen is updated.
+# May break VSync and is not available on some drivers.
+# Overrides --glx-copy-from-front.
+# glx-use-copysubbuffermesa = true;
+
+# GLX backend: Avoid rebinding pixmap on window damage.
+# Probably could improve performance on rapid window content changes, but is known to break things on some drivers (LLVMpipe).
+# Recommended if it works.
+# glx-no-rebind-pixmap = true;
+
+# GLX backend: GLX buffer swap method we assume.
+# Could be undefined (0), copy (1), exchange (2), 3-6, or buffer-age (-1).
+# undefined is the slowest and the safest, and the default value.
+# copy is fastest, but may fail on some drivers,
+# 2-6 are gradually slower but safer (6 is still faster than 0).
+# Usually, double buffer means 2, triple buffer means 3.
+# buffer-age means auto-detect using GLX_EXT_buffer_age, supported by some drivers.
+# Useless with --glx-use-copysubbuffermesa.
+# Partially breaks --resize-damage.
+# Defaults to undefined.
+#glx-swap-method = "undefined";
+
+#################################
+#
+# Shadows
+#
+#################################
+
+# Enabled client-side shadows on windows.
+shadow = true;
+# The blur radius for shadows. (default 12)
+shadow-radius = 15;
+# The left offset for shadows. (default -15)
+shadow-offset-x = -6;
+# The top offset for shadows. (default -15)
+shadow-offset-y = -6;
+# The translucency for shadows. (default .75)
+shadow-opacity = .75;
+
+log-level = "warn";
+#change your username here
+#log-file = "/home/erik/.config/compton.log";
+
+# Set if you want different colour shadows
+# shadow-red = 0.0;
+# shadow-green = 0.0;
+# shadow-blue = 0.0;
+
+# The shadow exclude options are helpful if you have shadows enabled. Due to the way compton draws its shadows, certain applications will have visual glitches
+# (most applications are fine, only apps that do weird things with xshapes or argb are affected).
+# This list includes all the affected apps I found in my testing. The "! name~=''" part excludes shadows on any "Unknown" windows, this prevents a visual glitch with the XFWM alt tab switcher.
+#shadow-exclude = [
+# "! name~=''",
+# "name = 'Notification'",
+# "name = 'Plank'",
+# "name = 'Docky'",
+# "name = 'Kupfer'",
+# "name = 'xfce4-notifyd'",
+# "name *= 'VLC'",
+# "name *= 'compton'",
+# "name *= 'Chromium'",
+# "name *= 'Chrome'",
+# "class_g = 'Firefox' && argb",
+# "class_g = 'Conky'",
+# "class_g = 'Kupfer'",
+# "class_g = 'Synapse'",
+# "class_g ?= 'Notify-osd'",
+# "class_g ?= 'Cairo-dock'",
+# "class_g = 'Cairo-clock'",
+# "class_g ?= 'Xfce4-notifyd'",
+# "class_g ?= 'Xfce4-power-manager'",
+# "_GTK_FRAME_EXTENTS@:c",
+# "_NET_WM_STATE@:32a *= '_NET_WM_STATE_HIDDEN'"
+#];
+# Avoid drawing shadow on all shaped windows (see also: --detect-rounded-corners)
+shadow-ignore-shaped = false;
+
+#################################
+#
+# Opacity
+#
+#################################
+
+inactive-opacity = 1;
+active-opacity = 1;
+frame-opacity = 1;
+inactive-opacity-override = false;
+
+# Dim inactive windows. (0.0 - 1.0)
+# inactive-dim = 0.2;
+# Do not let dimness adjust based on window opacity.
+# inactive-dim-fixed = true;
+# Blur background of transparent windows. Bad performance with X Render backend. GLX backend is preferred.
+blur-background = true;
+# Blur background of opaque windows with transparent frames as well.
+blur-background-frame = true;
+# Do not let blur radius adjust based on window opacity.
+blur-background-fixed = true;
+blur-background-exclude = [
+ "window_type = 'dock'",
+ "window_type = 'desktop'",
+ "_GTK_FRAME_EXTENTS@:c"
+];
+
+blur: {
+ method = "dual_kawase";
+ strength = 2;
+}
+
+#################################
+#
+# Fading
+#
+#################################
+
+# Fade windows during opacity changes.
+fading = true;
+# The time between steps in a fade in milliseconds. (default 10).
+fade-delta = 4;
+# Opacity change between steps while fading in. (default 0.028).
+fade-in-step = 0.03;
+# Opacity change between steps while fading out. (default 0.03).
+fade-out-step = 0.03;
+# Fade windows in/out when opening/closing
+# no-fading-openclose = true;
+
+# Specify a list of conditions of windows that should not be faded.
+fade-exclude = [ ];
+
+#################################
+#
+# Other
+#
+#################################
+
+# Try to detect WM windows and mark them as active.
+mark-wmwin-focused = true;
+# Mark all non-WM but override-redirect windows active (e.g. menus).
+mark-ovredir-focused = true;
+# Use EWMH _NET_WM_ACTIVE_WINDOW to determine which window is focused instead of using FocusIn/Out events.
+# Usually more reliable but depends on a EWMH-compliant WM.
+use-ewmh-active-win = true;
+# Detect rounded corners and treat them as rectangular when --shadow-ignore-shaped is on.
+detect-rounded-corners = true;
+
+# Detect _NET_WM_OPACITY on client windows, useful for window managers not passing _NET_WM_OPACITY of client windows to frame windows.
+# This prevents opacity being ignored for some apps.
+# For example without this enabled my xfce4-notifyd is 100% opacity no matter what.
+detect-client-opacity = true;
+
+# Specify refresh rate of the screen.
+# If not specified or 0, compton will try detecting this with X RandR extension.
+refresh-rate = 0;
+
+# Vertical synchronization: match the refresh rate of the monitor
+# this breaks transparency in virtualbox - put a "#" before next line to fix that
+vsync = true;
+
+# Enable DBE painting mode, intended to use with VSync to (hopefully) eliminate tearing.
+# Reported to have no effect, though.
+dbe = false;
+
+# Limit compton to repaint at most once every 1 / refresh_rate second to boost performance.
+# This should not be used with --vsync drm/opengl/opengl-oml as they essentially does --sw-opti's job already,
+# unless you wish to specify a lower refresh rate than the actual value.
+#sw-opti = true;
+
+# Unredirect all windows if a full-screen opaque window is detected, to maximize performance for full-screen windows, like games.
+# Known to cause flickering when redirecting/unredirecting windows.
+unredir-if-possible = false;
+
+# Specify a list of conditions of windows that should always be considered focused.
+focus-exclude = [ ];
+
+# Use WM_TRANSIENT_FOR to group windows, and consider windows in the same group focused at the same time.
+detect-transient = true;
+# Use WM_CLIENT_LEADER to group windows, and consider windows in the same group focused at the same time.
+# WM_TRANSIENT_FOR has higher priority if --detect-transient is enabled, too.
+detect-client-leader = true;
+
+#################################
+#
+# Window type settings
+#
+#################################
+
+wintypes:
+{
+ tooltip = { fade = true; shadow = true; opacity = 0.9; focus = true;};
+ dock = { shadow = false; }
+ dnd = { shadow = false; }
+ popup_menu = { opacity = 0.9; }
+ dropdown_menu = { opacity = 0.9; }
+};
+
+######################
+#
+# XSync
+# See: https://github.com/yshui/compton/commit/b18d46bcbdc35a3b5620d817dd46fbc76485c20d
+#
+######################
+
+# Use X Sync fence to sync clients' draw calls. Needed on nvidia-drivers with GLX backend for some users.
+xrender-sync-fence = true;
diff --git a/.config/bspwm/sxhkdrc b/.config/bspwm/sxhkdrc
new file mode 100755
index 0000000..3f81241
--- /dev/null
+++ b/.config/bspwm/sxhkdrc
@@ -0,0 +1,331 @@
+#################################################################
+# KEYBOARD BINDINGS
+#################################################################
+
+#################################################################
+# SUPER + FUNCTION KEYS
+#################################################################
+
+#Rofi
+super + F12
+ rofi-theme-selector
+
+#################################################################
+# SUPER + ... KEYS
+#################################################################
+
+#Rofit
+super + space
+ rofi -show drun -show-icons -run-shell-command '{terminal} -e \\" {cmd}; read -n 1 -s\\"'
+
+
+#Browser
+super + w
+ firefox
+
+#calc start
+super + c
+ kitty -e calc
+
+super + t
+ thunderbird
+# kitty -e mutt
+
+#Spotify
+super + s
+ pkill spotify; spotify
+
+# start discord
+super + d
+ pkill Discord; Discord
+
+#Terminal
+super + Return
+ kitty
+
+super + g
+ kitty -e gotop
+
+super + m
+ MultiMC
+
+super + ctrl + s
+ prime-run steam
+
+#################################################################
+# SUPER + SHIFT KEYS
+#################################################################
+
+# Make a window sticky
+super + shift + t
+ bspc node focused --flag sticky
+
+# Quit xorg server
+super + shift + x
+ bspc quit
+
+#File-Manager
+super + shift + Return
+ kitty -e ranger
+
+#Keyboard dependent
+#File-Manager
+#super + shift + KP_Enter
+# thunar
+
+#reload sxhkd:
+super + shift + s
+ pkill -USR1 -x sxhkd
+
+#Keyboard dependent
+#super + shift + KP_Enter
+# thunar
+
+#################################################################
+# CONTROL + ALT KEYS
+#################################################################
+
+
+#################################################################
+# ALT + ... KEYS
+#################################################################
+
+
+#################################################################
+#VARIETY KEYS WITH PYWAL
+#################################################################
+
+
+#################################################################
+# CONTROL + SHIFT KEYS
+#################################################################
+
+
+#################################################################
+# SCREENSHOTS
+#################################################################
+
+# Screenshot
+super + ctrl + 4
+ maim | xclip -selection clipboard -t image/png
+
+super + ctrl + alt + 4
+ maim -i $(xdotool getactivewindow) | xclip -selection clipboard -t image/png
+
+#################################################################
+# FUNCTION KEYS
+#################################################################
+
+
+#################################################################
+# MULTIMEDIA KEYS
+#################################################################
+
+#Raises volume
+XF86AudioRaiseVolume
+ pamixer -i 1
+
+#Lowers volume
+XF86AudioLowerVolume
+ pamixer -d 1
+
+#Mute
+XF86AudioMute
+ pamixer -t
+
+#Playerctl works for Pragha, Spotify and others
+#Delete the line for playerctl if you want to use mpc
+#and replace it with the corresponding code
+#mpc works for e.g.ncmpcpp
+#mpc toggle
+#mpc next
+#mpc prev
+#mpc stop
+
+#PLAY
+XF86AudioPlay
+ playerctl play-pause
+
+#Next
+XF86AudioNext
+ playerctl next
+
+#previous
+XF86AudioPrev
+ playerctl previous
+
+#Stop
+XF86AudioStop
+ playerctl stop
+
+XF86MonBrightnessUp
+ light -A 5
+
+XF86MonBrightnessDown
+ light -U 5
+
+#########################
+# POLYBAR #
+#########################
+
+
+#################################################################
+#################################################################
+################## DESKTOP SPECIFIC ########################
+#################################################################
+#################################################################
+
+#################################################################
+# CTRL + ALT KEYS
+#################################################################
+
+#################################################################
+# SUPER + KEYS
+#################################################################
+
+#Toggle fullscreen of window
+#super + f
+super + f
+ bspc node --state \~fullscreen
+
+
+# Toggle pseudo tiling of window
+super + p
+ bspc node --state \~pseudo_tiled
+
+#kill
+super + q
+ bspc node -c
+
+#################################################################
+# SUPER KEYS
+#################################################################
+
+#Focus selected desktop
+#super + Tab
+# rofi -show window
+
+# Increase/decrease window gap on focused desktop
+super + bracket{left,right}
+ bspc config -d focused window_gap $((`bspc config -d focused window_gap` {-,+} 5 ))
+
+# set the window state
+super + alt + space
+ bspc node -t {floating,tiled}
+
+# Move focus to other monitor
+super + BackSpace
+ bspc monitor -f next
+
+#################################################################
+# SUPER + ALT KEYS
+#################################################################
+
+# Expand tiled space
+super + alt + {h,j,k,l}
+ bspc node {@west -r -10,@south -r +10,@north -r -10,@east -r +10}
+
+
+#################################################################
+# SUPER + CONTROL KEYS
+#################################################################
+
+#################################################################
+# SUPER + SHIFT KEYS
+#################################################################
+
+# toggle all to floating or tiled
+super + shift + space
+ ~/.config/bspwm/scripts/toggle_all {floating,tiled}
+
+#Reload bspwm
+super + shift + r
+ ~/.config/bspwm/bspwmrc
+
+#Logout
+super + shift + x
+ bspc quit
+
+# Focus/swap windows by direction
+super + {h,j,k,l}
+ bspc node --focus {west,south,north,east}
+
+super + shift + {h,j,k,l}
+ bspc node --swap {west,south,north,east}
+
+# Flip layout vertically/horizontally
+super + {_,shift + }a
+ bspc node @/ --flip {vertical,horizontal}
+
+# Move focused window to other monitor
+super + shift + Left
+ bspc node -m next --follow
+
+# Move focused window to other monitor
+super + shift + Right
+ bspc node -m next --follow
+
+# Move focused window to other monitor
+super + shift + Up
+ bspc node -m next --follow
+
+# Move focused window to other monitor
+super + shift + Down
+ bspc node -m next --follow
+
+#################################################################
+# SUPER + CONTROL KEYS
+#################################################################
+
+# Contract tiled space
+super + ctrl + {h,j,k,l}
+ bspc node {@east -r -10,@north -r +10,@south -r -10,@west -r +10}
+
+#################################################################
+# ALT KEYS
+#################################################################
+
+
+#################################################################
+# ALT + SHIFT KEYS
+#################################################################
+
+
+#################################################################
+# CTRL + ALT KEYS
+#################################################################
+
+
+#################################################################
+#################################################################
+################## AZERTY/QWERTY/ ... KEYBOARD#################
+#################################################################
+#################################################################
+
+#Switch here between qwerty and azerty or make new one
+#Focus selected desktop FOR QWERTY KEYBOARDS
+super + {1-9,0}
+ bspc desktop -f '^{1-9,10}'
+
+#Focus selected desktop FOR AZERTY KEYBOARDS
+#super + {ampersand,eacute,quotedbl,apostrophe,parenleft,section,egrave,exclam,ccedilla,agrave}
+# bspc desktop -f '^{1-9,10}'
+
+#################################################################
+
+#Switch here between qwerty and azerty or make new one
+#Move window to selected desktop FOR QWERTY KEYBOARDS
+super + shift + {1-9,0}
+ id=$(bspc query -N -n); bspc node -d ^{1-9,10}; bspc node -f ${id}}
+
+#Move window to selected desktop FOR AZERTY KEYBOARDS
+#super + shift + {ampersand,eacute,quotedbl,apostrophe,parenleft,section,egrave,exclam,ccedilla,agrave}
+# id=$(bspc query -N -n); bspc node -d ^{1-9,10}; bspc node -f ${id}}
+
+#################################################################
+
+super + grave
+ dunstctl history-pop
+
+super + shift + grave
+ dunstctl close
diff --git a/.config/dunst/dunstrc b/.config/dunst/dunstrc
new file mode 100644
index 0000000..747194c
--- /dev/null
+++ b/.config/dunst/dunstrc
@@ -0,0 +1,95 @@
+
+[global]
+monitor = 0
+#follow = keyboard
+geometry = "400x0-10+34"
+corner_radius = 0
+indicate_hidden = yes
+shrink = yes
+#transparency = 20
+notification_height = 0
+padding = 5
+horizontal_padding = 5
+frame_width = 2
+frame_color = "#84a0c6"
+
+separator_color = auto
+separator_height = 2
+
+sort = yes
+
+idle_threshold = 120
+font = Jet Brains Mono 12
+line_height = 0
+markup = full
+
+# The format of the message. Possible variables are:
+# %a appname
+# %s summary
+# %b body
+# %i iconname (including its path)
+# %I iconname (without its path)
+# %p progress value if set ([ 0%] to [100%]) or nothing
+# %n progress value if set without any extra characters
+# %% Literal %
+# Markup is allowed
+#format = "<b>%s\n%b</b>"
+format = "<b>%s</b>\n%b"
+
+alignment = left
+show_age_threshold = 60
+word_wrap = yes
+ellipsize = middle
+ignore_newline = no
+stack_duplicates = true
+hide_duplicate_count = true
+show_indicators = yes
+icon_position = left
+max_icon_size = 80
+#icon_path = /usr/share/icons/gnome/16x16/status/:/usr/share/icons/gnome/16x16/devices/:/usr/share/icons/Adwaita/256x256/status/
+sticky_history = yes
+history_length = 20
+browser = /usr/bin/firefox
+
+# Always run rule-defined scripts, even if the notification is suppressed
+always_run_script = true
+
+title = Dunst
+class = Dunst
+startup_notification = false
+force_xinerama = false
+
+mouse_left_click = do_action
+mouse_middle_click = close_all
+mouse_right_click = close_current
+
+[experimental]
+per_monitor_dpi = false
+
+#[shortcuts]
+#close = ctrl+space
+#close_all = ctrl+shift+space
+#history = ctrl+grave
+#context = ctrl+shift+period
+
+[urgency_low]
+# IMPORTANT: colors have to be defined in quotation marks.
+# Otherwise the "#" and following would be interpreted as a comment.
+background = "#161821"
+foreground = "#c6c8d1"
+frame_color = "#84a0c6"
+timeout = 5
+# Icon for notifications with low urgency, uncomment to enable
+#icon = ~/.local/share/arch.png
+
+[urgency_normal]
+background = "#161821"
+foreground = "#c6c8d1"
+frame_color = "#84a0c6"
+timeout = 5
+
+[urgency_critical]
+background = "#e27878"
+foreground = "#161821"
+frame_color = "#e27878"
+timeout = 0
diff --git a/.config/kitty/kitty.conf b/.config/kitty/kitty.conf
new file mode 100755
index 0000000..0a216bb
--- /dev/null
+++ b/.config/kitty/kitty.conf
@@ -0,0 +1,964 @@
+# vim:fileencoding=utf-8:ft=conf:foldmethod=marker
+
+font_family JetBrains Mono
+bold_font JetBrains Mono Bold
+italic_font JetBrains Mono Italic
+bold_italic_font JetBrains Mono Bold Italic
+symbol_map U+2800-U+28FF Braille
+
+font_size 10
+
+#: Font size (in pts)
+
+force_ltr no
+
+adjust_line_height 0
+adjust_column_width 0
+
+disable_ligatures never
+
+font_features none
+
+box_drawing_scale 0.001, 1, 1.5, 2
+
+cursor_text_color #111111
+
+cursor_shape beam
+
+cursor_blink_interval 0.5
+
+#cursor_stop_blinking_after 15.0
+
+scrollback_lines 2000
+
+scrollback_pager less --chop-long-lines --RAW-CONTROL-CHARS +INPUT_LINE_NUMBER
+
+scrollback_pager_history_size 0
+
+wheel_scroll_multiplier 5.0
+
+touch_scroll_multiplier 1.0
+
+mouse_hide_wait 3.0
+
+#: Hide mouse cursor after the specified number of seconds of the
+#: mouse not being used. Set to zero to disable mouse cursor hiding.
+#: Set to a negative value to hide the mouse cursor immediately when
+#: typing text. Disabled by default on macOS as getting it to work
+#: robustly with the ever-changing sea of bugs that is Cocoa is too
+#: much effort.
+
+url_color #0087bd
+url_style curly
+
+#: The color and style for highlighting URLs on mouse-over. url_style
+#: can be one of: none, single, double, curly
+
+open_url_modifiers kitty_mod
+
+#: The modifier keys to press when clicking with the mouse on URLs to
+#: open the URL
+
+open_url_with default
+
+#: The program with which to open URLs that are clicked on. The
+#: special value default means to use the operating system's default
+#: URL handler.
+
+copy_on_select no
+
+#: Copy to clipboard or a private buffer on select. With this set to
+#: clipboard, simply selecting text with the mouse will cause the text
+#: to be copied to clipboard. Useful on platforms such as macOS that
+#: do not have the concept of primary selections. You can instead
+#: specify a name such as a1 to copy to a private kitty buffer
+#: instead. Map a shortcut with the paste_from_buffer action to paste
+#: from this private buffer. For example::
+
+#: map cmd+shift+v paste_from_buffer a1
+
+#: Note that copying to the clipboard is a security risk, as all
+#: programs, including websites open in your browser can read the
+#: contents of the system clipboard.
+
+strip_trailing_spaces never
+
+#: Remove spaces at the end of lines when copying to clipboard. A
+#: value of smart will do it when using normal selections, but not
+#: rectangle selections. always will always do it.
+
+rectangle_select_modifiers ctrl+alt
+
+#: The modifiers to use rectangular selection (i.e. to select text in
+#: a rectangular block with the mouse)
+
+terminal_select_modifiers shift
+
+#: The modifiers to override mouse selection even when a terminal
+#: application has grabbed the mouse
+
+select_by_word_characters :@-./_~?&=%+#
+
+#: Characters considered part of a word when double clicking. In
+#: addition to these characters any character that is marked as an
+#: alphanumeric character in the unicode database will be matched.
+
+click_interval -1.0
+
+#: The interval between successive clicks to detect double/triple
+#: clicks (in seconds). Negative numbers will use the system default
+#: instead, if available, or fallback to 0.5.
+
+focus_follows_mouse no
+
+#: Set the active window to the window under the mouse when moving the
+#: mouse around
+
+pointer_shape_when_grabbed arrow
+
+#: The shape of the mouse pointer when the program running in the
+#: terminal grabs the mouse. Valid values are: arrow, beam and hand
+
+
+#: Performance tuning {{{
+
+repaint_delay 10
+
+#: Delay (in milliseconds) between screen updates. Decreasing it,
+#: increases frames-per-second (FPS) at the cost of more CPU usage.
+#: The default value yields ~100 FPS which is more than sufficient for
+#: most uses. Note that to actually achieve 100 FPS you have to either
+#: set sync_to_monitor to no or use a monitor with a high refresh
+#: rate. Also, to minimize latency when there is pending input to be
+#: processed, repaint_delay is ignored.
+
+input_delay 3
+
+#: Delay (in milliseconds) before input from the program running in
+#: the terminal is processed. Note that decreasing it will increase
+#: responsiveness, but also increase CPU usage and might cause flicker
+#: in full screen programs that redraw the entire screen on each loop,
+#: because kitty is so fast that partial screen updates will be drawn.
+
+sync_to_monitor yes
+
+#: Sync screen updates to the refresh rate of the monitor. This
+#: prevents tearing (https://en.wikipedia.org/wiki/Screen_tearing)
+#: when scrolling. However, it limits the rendering speed to the
+#: refresh rate of your monitor. With a very high speed mouse/high
+#: keyboard repeat rate, you may notice some slight input latency. If
+#: so, set this to no.
+
+#: }}}
+
+#: Terminal bell {{{
+
+enable_audio_bell no
+
+#: Enable/disable the audio bell. Useful in environments that require
+#: silence.
+
+visual_bell_duration 0.0
+
+#: Visual bell duration. Flash the screen when a bell occurs for the
+#: specified number of seconds. Set to zero to disable.
+
+window_alert_on_bell no
+
+#: Request window attention on bell. Makes the dock icon bounce on
+#: macOS or the taskbar flash on linux.
+
+bell_on_tab no
+
+#: Show a bell symbol on the tab if a bell occurs in one of the
+#: windows in the tab and the window is not the currently focused
+#: window
+
+command_on_bell none
+
+#: Program to run when a bell occurs.
+
+#: }}}
+
+#: Window layout {{{
+
+remember_window_size yes
+initial_window_width 640
+initial_window_height 400
+
+#: If enabled, the window size will be remembered so that new
+#: instances of kitty will have the same size as the previous
+#: instance. If disabled, the window will initially have size
+#: configured by initial_window_width/height, in pixels. You can use a
+#: suffix of "c" on the width/height values to have them interpreted
+#: as number of cells instead of pixels.
+
+enabled_layouts *
+
+#: The enabled window layouts. A comma separated list of layout names.
+#: The special value all means all layouts. The first listed layout
+#: will be used as the startup layout. Default configuration is all
+#: layouts in alphabetical order. For a list of available layouts, see
+#: the https://sw.kovidgoyal.net/kitty/index.html#layouts.
+
+window_resize_step_cells 2
+window_resize_step_lines 2
+
+#: The step size (in units of cell width/cell height) to use when
+#: resizing windows. The cells value is used for horizontal resizing
+#: and the lines value for vertical resizing.
+
+window_border_width 1.0
+
+#: The width (in pts) of window borders. Will be rounded to the
+#: nearest number of pixels based on screen resolution. Note that
+#: borders are displayed only when more than one window is visible.
+#: They are meant to separate multiple windows.
+
+draw_minimal_borders yes
+
+#: Draw only the minimum borders needed. This means that only the
+#: minimum needed borders for inactive windows are drawn. That is only
+#: the borders that separate the inactive window from a neighbor. Note
+#: that setting a non-zero window margin overrides this and causes all
+#: borders to be drawn.
+
+window_margin_width 0.0
+
+#: The window margin (in pts) (blank area outside the border)
+
+single_window_margin_width -1000.0
+
+#: The window margin (in pts) to use when only a single window is
+#: visible. Negative values will cause the value of
+#: window_margin_width to be used instead.
+
+window_padding_width 15.0
+
+#: The window padding (in pts) (blank area between the text and the
+#: window border)
+
+placement_strategy center
+
+#: When the window size is not an exact multiple of the cell size, the
+#: cell area of the terminal window will have some extra padding on
+#: the sides. You can control how that padding is distributed with
+#: this option. Using a value of center means the cell area will be
+#: placed centrally. A value of top-left means the padding will be on
+#: only the bottom and right edges.
+
+active_border_color #00ff00
+
+#: The color for the border of the active window. Set this to none to
+#: not draw borders around the active window.
+
+inactive_border_color #cccccc
+
+#: The color for the border of inactive windows
+
+bell_border_color #ff5a00
+
+#: The color for the border of inactive windows in which a bell has
+#: occurred
+
+inactive_text_alpha 1.0
+
+#: Fade the text in inactive windows by the specified amount (a number
+#: between zero and one, with zero being fully faded).
+
+hide_window_decorations no
+
+#: Hide the window decorations (title-bar and window borders) with
+#: yes. On macOS, titlebar-only can be used to only hide the titlebar.
+#: Whether this works and exactly what effect it has depends on the
+#: window manager/operating system.
+
+resize_debounce_time 0.1
+
+#: The time (in seconds) to wait before redrawing the screen when a
+#: resize event is received. On platforms such as macOS, where the
+#: operating system sends events corresponding to the start and end of
+#: a resize, this number is ignored.
+
+resize_draw_strategy static
+
+#: Choose how kitty draws a window while a resize is in progress. A
+#: value of static means draw the current window contents, mostly
+#: unchanged. A value of scale means draw the current window contents
+#: scaled. A value of blank means draw a blank window. A value of size
+#: means show the window size in cells.
+
+resize_in_steps no
+
+#: Resize the OS window in steps as large as the cells, instead of
+#: with the usual pixel accuracy. Combined with an
+#: initial_window_width and initial_window_height in number of cells,
+#: this option can be used to keep the margins as small as possible
+#: when resizing the OS window. Note that this does not currently work
+#: on Wayland.
+
+#: }}}
+
+#: Tab bar {{{
+
+tab_bar_edge bottom
+
+#: Which edge to show the tab bar on, top or bottom
+
+tab_bar_margin_width 0.0
+
+#: The margin to the left and right of the tab bar (in pts)
+
+tab_bar_style fade
+
+#: The tab bar style, can be one of: fade, separator, powerline, or
+#: hidden. In the fade style, each tab's edges fade into the
+#: background color, in the separator style, tabs are separated by a
+#: configurable separator, and the powerline shows the tabs as a
+#: continuous line.
+
+tab_bar_min_tabs 2
+
+#: The minimum number of tabs that must exist before the tab bar is
+#: shown
+
+tab_switch_strategy previous
+
+#: The algorithm to use when switching to a tab when the current tab
+#: is closed. The default of previous will switch to the last used
+#: tab. A value of left will switch to the tab to the left of the
+#: closed tab. A value of last will switch to the right-most tab.
+
+tab_fade 0.25 0.5 0.75 1
+
+#: Control how each tab fades into the background when using fade for
+#: the tab_bar_style. Each number is an alpha (between zero and one)
+#: that controls how much the corresponding cell fades into the
+#: background, with zero being no fade and one being full fade. You
+#: can change the number of cells used by adding/removing entries to
+#: this list.
+
+tab_separator " ┇"
+
+#: The separator between tabs in the tab bar when using separator as
+#: the tab_bar_style.
+
+tab_title_template {title}
+
+#: A template to render the tab title. The default just renders the
+#: title. If you wish to include the tab-index as well, use something
+#: like: {index}: {title}. Useful if you have shortcuts mapped for
+#: goto_tab N.
+
+active_tab_title_template none
+
+#: Template to use for active tabs, if not specified falls back to
+#: tab_title_template.
+
+active_tab_foreground #000
+active_tab_background #eee
+active_tab_font_style bold-italic
+inactive_tab_foreground #444
+inactive_tab_background #999
+inactive_tab_font_style normal
+
+#: Tab bar colors and styles
+
+tab_bar_background none
+
+#: Background color for the tab bar. Defaults to using the terminal
+#: background color.
+
+#: }}}
+
+shell .
+
+#: The shell program to execute. The default value of . means to use
+#: whatever shell is set as the default shell for the current user.
+#: Note that on macOS if you change this, you might need to add
+#: --login to ensure that the shell starts in interactive mode and
+#: reads its startup rc files.
+
+editor .
+
+#: The console editor to use when editing the kitty config file or
+#: similar tasks. A value of . means to use the environment variables
+#: VISUAL and EDITOR in that order. Note that this environment
+#: variable has to be set not just in your shell startup scripts but
+#: system-wide, otherwise kitty will not see it.
+
+close_on_child_death no
+
+#: Close the window when the child process (shell) exits. If no (the
+#: default), the terminal will remain open when the child exits as
+#: long as there are still processes outputting to the terminal (for
+#: example disowned or backgrounded processes). If yes, the window
+#: will close as soon as the child process exits. Note that setting it
+#: to yes means that any background processes still using the terminal
+#: can fail silently because their stdout/stderr/stdin no longer work.
+
+allow_remote_control no
+
+#: Allow other programs to control kitty. If you turn this on other
+#: programs can control all aspects of kitty, including sending text
+#: to kitty windows, opening new windows, closing windows, reading the
+#: content of windows, etc. Note that this even works over ssh
+#: connections. You can chose to either allow any program running
+#: within kitty to control it, with yes or only programs that connect
+#: to the socket specified with the kitty --listen-on command line
+#: option, if you use the value socket-only. The latter is useful if
+#: you want to prevent programs running on a remote computer over ssh
+#: from controlling kitty.
+
+# env
+
+#: Specify environment variables to set in all child processes. Note
+#: that environment variables are expanded recursively, so if you
+#: use::
+
+#: env MYVAR1=a
+#: env MYVAR2=${MYVAR1}/${HOME}/b
+
+#: The value of MYVAR2 will be a/<path to home directory>/b.
+
+update_check_interval 24
+
+#: Periodically check if an update to kitty is available. If an update
+#: is found a system notification is displayed informing you of the
+#: available update. The default is to check every 24 hrs, set to zero
+#: to disable.
+
+startup_session none
+
+#: Path to a session file to use for all kitty instances. Can be
+#: overridden by using the kitty --session command line option for
+#: individual instances. See
+#: https://sw.kovidgoyal.net/kitty/index.html#sessions in the kitty
+#: documentation for details. Note that relative paths are interpreted
+#: with respect to the kitty config directory. Environment variables
+#: in the path are expanded.
+
+clipboard_control write-clipboard write-primary
+
+#: Allow programs running in kitty to read and write from the
+#: clipboard. You can control exactly which actions are allowed. The
+#: set of possible actions is: write-clipboard read-clipboard write-
+#: primary read-primary. You can additionally specify no-append to
+#: disable kitty's protocol extension for clipboard concatenation. The
+#: default is to allow writing to the clipboard and primary selection
+#: with concatenation enabled. Note that enabling the read
+#: functionality is a security risk as it means that any program, even
+#: one running on a remote server via SSH can read your clipboard.
+
+term xterm-kitty
+
+#: The value of the TERM environment variable to set. Changing this
+#: can break many terminal programs, only change it if you know what
+#: you are doing, not because you read some advice on Stack Overflow
+#: to change it. The TERM variable is used by various programs to get
+#: information about the capabilities and behavior of the terminal. If
+#: you change it, depending on what programs you run, and how
+#: different the terminal you are changing it to is, various things
+#: from key-presses, to colors, to various advanced features may not
+#: work.
+
+#:
+
+linux_display_server auto
+
+#: For a list of key names, see: GLFW keys
+#: <https://www.glfw.org/docs/latest/group__keys.html>. The name to
+#: use is the part after the GLFW_KEY_ prefix. For a list of modifier
+#: names, see: GLFW mods
+#: <https://www.glfw.org/docs/latest/group__mods.html>
+
+#: On Linux you can also use XKB key names to bind keys that are not
+#: supported by GLFW. See XKB keys
+#: <https://github.com/xkbcommon/libxkbcommon/blob/master/xkbcommon/xkbcommon-
+#: keysyms.h> for a list of key names. The name to use is the part
+#: after the XKB_KEY_ prefix. Note that you should only use an XKB key
+#: name for keys that are not present in the list of GLFW keys.
+
+#: Finally, you can use raw system key codes to map keys. To see the
+#: system key code for a key, start kitty with the kitty --debug-
+#: keyboard option. Then kitty will output some debug text for every
+#: key event. In that text look for ``native_code`` the value of that
+#: becomes the key name in the shortcut. For example:
+
+#: .. code-block:: none
+
+#: on_key_input: glfw key: 65 native_code: 0x61 action: PRESS mods: 0x0 text: 'a'
+
+#: Here, the key name for the A key is 0x61 and you can use it with::
+
+#: map ctrl+0x61 something
+
+#: to map ctrl+a to something.
+
+#: You can use the special action no_op to unmap a keyboard shortcut
+#: that is assigned in the default configuration::
+
+#: map kitty_mod+space no_op
+
+#: You can combine multiple actions to be triggered by a single
+#: shortcut, using the syntax below::
+
+#: map key combine <separator> action1 <separator> action2 <separator> action3 ...
+
+#: For example::
+
+#: map kitty_mod+e combine : new_window : next_layout
+
+#: this will create a new window and switch to the next available
+#: layout
+
+#: You can use multi-key shortcuts using the syntax shown below::
+
+#: map key1>key2>key3 action
+
+#: For example::
+
+#: map ctrl+f>2 set_font_size 20
+
+kitty_mod ctrl+shift
+
+#: The value of kitty_mod is used as the modifier for all default
+#: shortcuts, you can change it in your kitty.conf to change the
+#: modifiers for all the default shortcuts.
+
+clear_all_shortcuts no
+
+#: You can have kitty remove all shortcut definition seen up to this
+#: point. Useful, for instance, to remove the default shortcuts.
+
+# kitten_alias hints hints --hints-offset=0
+
+#: You can create aliases for kitten names, this allows overriding the
+#: defaults for kitten options and can also be used to shorten
+#: repeated mappings of the same kitten with a specific group of
+#: options. For example, the above alias changes the default value of
+#: kitty +kitten hints --hints-offset to zero for all mappings,
+#: including the builtin ones.
+
+#: Clipboard {{{
+
+map kitty_mod+c copy_to_clipboard
+
+#: There is also a copy_or_interrupt action that can be optionally
+#: mapped to Ctrl+c. It will copy only if there is a selection and
+#: send an interrupt otherwise.
+
+map kitty_mod+v paste_from_clipboard
+map kitty_mod+s paste_from_selection
+map shift+insert paste_from_selection
+map kitty_mod+o pass_selection_to_program
+
+#: You can also pass the contents of the current selection to any
+#: program using pass_selection_to_program. By default, the system's
+#: open program is used, but you can specify your own, the selection
+#: will be passed as a command line argument to the program, for
+#: example::
+
+#: map kitty_mod+o pass_selection_to_program firefox
+
+#: You can pass the current selection to a terminal program running in
+#: a new kitty window, by using the @selection placeholder::
+
+#: map kitty_mod+y new_window less @selection
+
+#: }}}
+
+#: Scrolling {{{
+
+map kitty_mod+up scroll_line_up
+map kitty_mod+k scroll_line_up
+map kitty_mod+down scroll_line_down
+map kitty_mod+j scroll_line_down
+map kitty_mod+page_up scroll_page_up
+map kitty_mod+page_down scroll_page_down
+map kitty_mod+home scroll_home
+map kitty_mod+end scroll_end
+map kitty_mod+h show_scrollback
+
+#: You can pipe the contents of the current screen + history buffer as
+#: STDIN to an arbitrary program using the ``launch`` function. For
+#: example, the following opens the scrollback buffer in less in an
+#: overlay window::
+
+#: map f1 launch --stdin-source=@screen_scrollback --stdin-add-formatting --type=overlay less +G -R
+
+#: For more details on piping screen and buffer contents to external
+#: programs, see launch.
+
+#: }}}
+
+#: Window management {{{
+
+map kitty_mod+enter new_window
+
+#: You can open a new window running an arbitrary program, for
+#: example::
+
+#: map kitty_mod+y launch mutt
+
+#: You can open a new window with the current working directory set to
+#: the working directory of the current window using::
+
+#: map ctrl+alt+enter launch --cwd=current
+
+#: You can open a new window that is allowed to control kitty via the
+#: kitty remote control facility by prefixing the command line with @.
+#: Any programs running in that window will be allowed to control
+#: kitty. For example::
+
+#: map ctrl+enter launch --allow-remote-control some_program
+
+#: You can open a new window next to the currently active window or as
+#: the first window, with::
+
+#: map ctrl+n launch --location=neighbor some_program
+#: map ctrl+f launch --location=first some_program
+
+#: For more details, see launch.
+
+map kitty_mod+n new_os_window
+
+#: Works like new_window above, except that it opens a top level OS
+#: kitty window. In particular you can use new_os_window_with_cwd to
+#: open a window with the current working directory.
+
+map kitty_mod+w close_window
+map kitty_mod+] next_window
+map kitty_mod+[ previous_window
+map kitty_mod+f move_window_forward
+map kitty_mod+b move_window_backward
+map kitty_mod+` move_window_to_top
+map kitty_mod+r start_resizing_window
+map kitty_mod+1 first_window
+map kitty_mod+2 second_window
+map kitty_mod+3 third_window
+map kitty_mod+4 fourth_window
+map kitty_mod+5 fifth_window
+map kitty_mod+6 sixth_window
+map kitty_mod+7 seventh_window
+map kitty_mod+8 eighth_window
+map kitty_mod+9 ninth_window
+map kitty_mod+0 tenth_window
+#: }}}
+
+#: Tab management {{{
+
+map kitty_mod+right next_tab
+map kitty_mod+left previous_tab
+map kitty_mod+t new_tab
+map kitty_mod+q close_tab
+map kitty_mod+. move_tab_forward
+map kitty_mod+, move_tab_backward
+map kitty_mod+alt+t set_tab_title
+
+#: You can also create shortcuts to go to specific tabs, with 1 being
+#: the first tab, 2 the second tab and -1 being the previously active
+#: tab, and any number larger than the last tab being the last tab::
+
+#: map ctrl+alt+1 goto_tab 1
+#: map ctrl+alt+2 goto_tab 2
+
+#: Just as with new_window above, you can also pass the name of
+#: arbitrary commands to run when using new_tab and use
+#: new_tab_with_cwd. Finally, if you want the new tab to open next to
+#: the current tab rather than at the end of the tabs list, use::
+
+#: map ctrl+t new_tab !neighbor [optional cmd to run]
+#: }}}
+
+#: Layout management {{{
+
+map kitty_mod+l next_layout
+
+#: You can also create shortcuts to switch to specific layouts::
+
+#: map ctrl+alt+t goto_layout tall
+#: map ctrl+alt+s goto_layout stack
+
+#: Similarly, to switch back to the previous layout::
+
+#: map ctrl+alt+p last_used_layout
+#: }}}
+
+#: Font sizes {{{
+
+#: You can change the font size for all top-level kitty OS windows at
+#: a time or only the current one.
+
+map kitty_mod+equal change_font_size all +2.0
+map kitty_mod+minus change_font_size all -2.0
+map kitty_mod+backspace change_font_size all 0
+
+#: To setup shortcuts for specific font sizes::
+
+#: map kitty_mod+f6 change_font_size all 10.0
+
+#: To setup shortcuts to change only the current OS window's font
+#: size::
+
+#: map kitty_mod+f6 change_font_size current 10.0
+#: }}}
+
+#: Select and act on visible text {{{
+
+#: Use the hints kitten to select text and either pass it to an
+#: external program or insert it into the terminal or copy it to the
+#: clipboard.
+
+map kitty_mod+e kitten hints
+
+#: Open a currently visible URL using the keyboard. The program used
+#: to open the URL is specified in open_url_with.
+
+map kitty_mod+p>f kitten hints --type path --program -
+
+#: Select a path/filename and insert it into the terminal. Useful, for
+#: instance to run git commands on a filename output from a previous
+#: git command.
+
+map kitty_mod+p>shift+f kitten hints --type path
+
+#: Select a path/filename and open it with the default open program.
+
+map kitty_mod+p>l kitten hints --type line --program -
+
+#: Select a line of text and insert it into the terminal. Use for the
+#: output of things like: ls -1
+
+map kitty_mod+p>w kitten hints --type word --program -
+
+#: Select words and insert into terminal.
+
+map kitty_mod+p>h kitten hints --type hash --program -
+
+#: Select something that looks like a hash and insert it into the
+#: terminal. Useful with git, which uses sha1 hashes to identify
+#: commits
+
+map kitty_mod+p>n kitten hints --type linenum
+
+#: Select something that looks like filename:linenum and open it in
+#: vim at the specified line number.
+
+
+#: The hints kitten has many more modes of operation that you can map
+#: to different shortcuts. For a full description see kittens/hints.
+#: }}}
+
+#: Miscellaneous {{{
+
+map kitty_mod+f11 toggle_fullscreen
+map kitty_mod+f10 toggle_maximized
+map kitty_mod+u kitten unicode_input
+map kitty_mod+f2 edit_config_file
+map kitty_mod+escape kitty_shell window
+
+#: Open the kitty shell in a new window/tab/overlay/os_window to
+#: control kitty using commands.
+
+map kitty_mod+a>m set_background_opacity +0.1
+map kitty_mod+a>l set_background_opacity -0.1
+map kitty_mod+a>1 set_background_opacity 1
+map kitty_mod+a>d set_background_opacity default
+map kitty_mod+delete clear_terminal reset active
+
+#: You can create shortcuts to clear/reset the terminal. For example::
+
+#: # Reset the terminal
+#: map kitty_mod+f9 clear_terminal reset active
+#: # Clear the terminal screen by erasing all contents
+#: map kitty_mod+f10 clear_terminal clear active
+#: # Clear the terminal scrollback by erasing it
+#: map kitty_mod+f11 clear_terminal scrollback active
+#: # Scroll the contents of the screen into the scrollback
+#: map kitty_mod+f12 clear_terminal scroll active
+
+#: If you want to operate on all windows instead of just the current
+#: one, use all instead of active.
+
+#: It is also possible to remap Ctrl+L to both scroll the current
+#: screen contents into the scrollback buffer and clear the screen,
+#: instead of just clearing the screen::
+
+#: map ctrl+l combine : clear_terminal scroll active : send_text normal,application \x0c
+
+
+#: You can tell kitty to send arbitrary (UTF-8) encoded text to the
+#: client program when pressing specified shortcut keys. For example::
+
+#: map ctrl+alt+a send_text all Special text
+
+#: This will send "Special text" when you press the ctrl+alt+a key
+#: combination. The text to be sent is a python string literal so you
+#: can use escapes like \x1b to send control codes or \u21fb to send
+#: unicode characters (or you can just input the unicode characters
+#: directly as UTF-8 text). The first argument to send_text is the
+#: keyboard modes in which to activate the shortcut. The possible
+#: values are normal or application or kitty or a comma separated
+#: combination of them. The special keyword all means all modes. The
+#: modes normal and application refer to the DECCKM cursor key mode
+#: for terminals, and kitty refers to the special kitty extended
+#: keyboard protocol.
+
+#: Another example, that outputs a word and then moves the cursor to
+#: the start of the line (same as pressing the Home key)::
+
+#: map ctrl+alt+a send_text normal Word\x1b[H
+#: map ctrl+alt+a send_text application Word\x1bOH
+
+background_opacity 0.95
+
+## -----------------------------------------------------------------------------
+## File: gruvbox-dark.conf
+## Description: Retro groove colorscheme generalized
+## Author: morhetz <morhetz@gmail.com>
+## Source: https://github.com/morhetz/gruvbox-generalized
+## Last Modified: 9 Feb 2019
+## -----------------------------------------------------------------------------
+#
+## hard contrast: background #1d2021
+#background #282828
+## soft contrast: background #32302f
+#foreground #ebdbb2
+#cursor #fbf1c7
+#url_color #83a598
+## Black + DarkGrey
+#color0 #282828
+#color8 #928374
+## DarkRed + Red
+#color1 #cc241d
+#color9 #fb4934
+## DarkGreen + Green
+#color2 #98971a
+#color10 #b8bb26
+## DarkYellow + Yellow
+#color3 #d79921
+#color11 #fabd2f
+## DarkBlue + Blue
+#color4 #458588
+#color12 #83a598
+## DarkMagenta + Magenta
+#color5 #b16286
+#color13 #d3869b
+## DarkCyan + Cyan
+#color6 #689d6a
+#color14 #8ec07c
+## LightGrey + White
+#color7 #a89984
+#color15 #ebdbb2
+
+foreground #dddddd
+# background #242a36
+background #2e3440
+
+#: The foreground and background colors
+
+background_opacity 0.95
+
+#: The opacity of the background. A number between 0 and 1, where 1 is
+#: opaque and 0 is fully transparent. This will only work if
+#: supported by the OS (for instance, when using a compositor under
+#: X11). Note that it only sets the default background color's
+#: opacity. This is so that things like the status bar in vim,
+#: powerline prompts, etc. still look good. But it means that if you
+#: use a color theme with a background color in your editor, it will
+#: not be rendered as transparent. Instead you should change the
+#: default background color in your kitty config and not use a
+#: background color in the editor color scheme. Or use the escape
+#: codes to set the terminals default colors in a shell script to
+#: launch your editor. Be aware that using a value less than 1.0 is a
+#: (possibly significant) performance hit. If you want to dynamically
+#: change transparency of windows set dynamic_background_opacity to
+#: yes (this is off by default as it has a performance cost)
+
+dynamic_background_opacity no
+
+#: Allow changing of the background_opacity dynamically, using either
+#: keyboard shortcuts (increase_background_opacity and
+#: decrease_background_opacity) or the remote control facility.
+
+dim_opacity 0.75
+
+#: How much to dim text that has the DIM/FAINT attribute set. One
+#: means no dimming and zero means fully dimmed (i.e. invisible).
+
+selection_foreground #000000
+
+#: The foreground for text selected with the mouse. A value of none
+#: means to leave the color unchanged.
+
+selection_background #fffacd
+
+#: The background for text selected with the mouse.
+
+
+#: The 16 terminal colors. There are 8 basic colors, each color has a
+#: dull and bright version. You can also set the remaining colors from
+#: the 256 color table as color16 to color255.
+
+color0 #3B4252
+color8 #4C566A
+
+#: black
+
+color1 #BF616A
+color9 #BF616A
+
+#: red
+
+color2 #A3BE8C
+color10 #A3BE8C
+
+#: green
+
+color3 #EBCB8B
+color11 #EBCB8B
+
+#: yellow
+
+color4 #81A1C1
+color12 #81A1C1
+
+#: blue
+
+color5 #B48EAD
+color13 #B48EAD
+
+#: magenta
+
+color6 #88C0D0
+color14 #8FBCBB
+
+#: cyan
+
+color7 #E5E9F0
+color15 #ECEFF4
+
+#: white
+
+mark1_foreground black
+
+#: Color for marks of type 1
+
+mark1_background #98d3cb
+
+#: Color for marks of type 1 (light steel blue)
+
+mark2_foreground black
+
+#: Color for marks of type 2
+
+mark2_background #f2dcd3
+
+#: Color for marks of type 1 (beige)
+
+mark3_foreground black
+
+#: Color for marks of type 3
+
+mark3_background #f274bc
diff --git a/.config/neomutt/neomuttrc b/.config/neomutt/neomuttrc
new file mode 100644
index 0000000..58eeeae
--- /dev/null
+++ b/.config/neomutt/neomuttrc
@@ -0,0 +1,50 @@
+# Copyright (c) 2021 Cameron Katri
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+
+source ~/.config/neomutt/passwords.mutt
+source ~/.config/neomutt/nord.mutt
+
+set smtp_authenticators="plain"
+
+set from="Cameron Katri <me@cameronkatri.com>"
+set edit_headers=yes
+
+set spoolfile=+INBOX
+set record="=Sent"
+set postponed="=Drafts"
+
+set imap_check_subscribed
+set sort=reverse-date-sent
+
+bind index G imap-fetch-mail
+
+set sidebar_visible
+set sidebar_format = "%B%?F? [%F]?%* %?N?%N/?%S"
+set mail_check_stats
+bind index,pager \CP sidebar-prev
+bind index,pager \CN sidebar-next
+bind index,pager \CO sidebar-open
+
+# vim: syntax=neomuttrc
diff --git a/.config/neomutt/nord.mutt b/.config/neomutt/nord.mutt
new file mode 100644
index 0000000..5b8f152
--- /dev/null
+++ b/.config/neomutt/nord.mutt
@@ -0,0 +1,42 @@
+# mutt color scheme
+# https://gitlab.uni-oldenburg.de/fili6799/dotfiles/
+
+color normal default default # default colours
+color index brightblue default ~N # new messages
+color index red default ~F # flagged messages
+color index blue default ~T # tagged messages
+color index cyan default ~D # deleted messages
+color body brightyellow default (https?|ftp)://[\-\.+,/%~_:?&=\#a-zA-Z0-9]+
+color body brightgreen default [\-\.+_a-zA-Z0-9]+@[\-\.a-zA-Z0-9]+
+color attachment magenta default # attachments
+color signature brightwhite default # sigs
+color search brightred black # highlight results
+
+color indicator brightyellow default # currently highlighted message
+color error red default # error messages
+color status white cyan # status line
+color tree brightblack default # thread tree
+color tilde cyan default # blank line padding
+
+color hdrdefault black cyan # default headers
+color header brightwhite cyan "^From:"
+color header brightwhite cyan "^Subject:"
+
+color quoted cyan default # quote colours
+color quoted1 brightcyan default
+color quoted2 blue default
+color quoted3 green default
+color quoted4 yellow default
+color quoted5 red default
+
+color body green default "^gpg: Good signature from"
+color body brightred default "^gpg: Bad signature from"
+color body brightred default "^gpg: BAD signature from"
+color body brightred default "^gpg: Note: This key has expired!"
+color body brightyellow default "^gpg: WARNING: This key is not certified with a trusted signature!"
+color body brightyellow default "^gpg: There is no indication that the signature belongs to the owner."
+color body brightyellow default "^gpg: can't handle these multiple signatures"
+color body brightyellow default "^gpg: signature verification suppressed"
+color body brightyellow default "^gpg: invalid node with packet of type"
+
+# vim: syntax=neomuttrc
diff --git a/.config/nvim/ftdetect/control.vim b/.config/nvim/ftdetect/control.vim
new file mode 100644
index 0000000..dc3b7fa
--- /dev/null
+++ b/.config/nvim/ftdetect/control.vim
@@ -0,0 +1 @@
+autocmd BufNewFile,BufRead *.control* set filetype=debcontrol
diff --git a/.config/nvim/init.vim b/.config/nvim/init.vim
new file mode 100644
index 0000000..ec7c481
--- /dev/null
+++ b/.config/nvim/init.vim
@@ -0,0 +1,59 @@
+call plug#begin()
+Plug 'airblade/vim-gitgutter'
+Plug 'vim-airline/vim-airline'
+Plug 'neoclide/coc.nvim', {'branch': 'release'}
+Plug 'dhruvasagar/vim-table-mode'
+Plug 'chrisbra/Colorizer'
+Plug 'octol/vim-cpp-enhanced-highlight'
+Plug 'arcticicestudio/nord-vim'
+Plug 'junegunn/fzf.vim'
+Plug 'rhysd/git-messenger.vim'
+Plug 'iamcco/markdown-preview.nvim', { 'do': 'cd app && yarn install' }
+call plug#end()
+
+let g:coc_global_extensions = [
+ \'coc-pairs',
+ \'coc-json',
+ \'coc-clangd',
+ \]
+
+set number
+colorscheme nord
+
+set tabstop=2
+set softtabstop=2
+set shiftwidth=2
+set list lcs=tab:\¦\
+set noexpandtab
+set completeopt-=preview
+set cursorline
+
+tnoremap <Esc> <C-\><C-n>
+
+" use <tab> for trigger completion and navigate to the next complete item
+function! s:check_back_space() abort
+ let col = col('.') - 1
+ return !col || getline('.')[col - 1] =~ '\s'
+endfunction
+
+inoremap <silent><expr> <Tab>
+ \ pumvisible() ? "\<C-n>" :
+ \ <SID>check_back_space() ? "\<Tab>" :
+ \ coc#refresh()
+
+let g:airline_skip_empty_sections = 1
+let g:airline_section_warning = ''
+let g:airline_section_x=''
+let g:airline_section_z = airline#section#create(['%3p%% ', 'linenr', ':%c'])
+let g:airline#parts#ffenc#skip_expected_string='utf-8[unix]'
+let g:airline#extensions#tabline#enabled = 1
+let g:airline#extensions#tabline#buffer_min_count = 2 " show tabline only if there is more than 1 buffer
+let g:airline#extensions#tabline#fnamemod = ':t' " show only file name on tabs
+let airline#extensions#coc#error_symbol = '✘:'
+let airline#extensions#coc#warning_symbol = '⚠:'
+if !exists('g:airline_symbols')
+ let g:airline_symbols = {}
+endif
+let g:airline_symbols.linenr = ''
+let g:airline_symbols.branch = '⎇ '
+let g:airline_symbols.dirty= ''
diff --git a/.config/polybar/launch.sh b/.config/polybar/launch.sh
new file mode 100755
index 0000000..dc67ea1
--- /dev/null
+++ b/.config/polybar/launch.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+pkill polybar
+polybar main -r -c ~/.config/polybar/theme.ini &
diff --git a/.config/polybar/theme.ini b/.config/polybar/theme.ini
new file mode 100644
index 0000000..2f25629
--- /dev/null
+++ b/.config/polybar/theme.ini
@@ -0,0 +1,151 @@
+# My whole right side is pretty broken but I don't really care.
+[colors]
+background = #3b4252
+background-alt = #3b4252
+foreground = #d8dee9
+
+red = #bf616a
+green = #a3be8c
+yellow = #ebcb8b
+
+[bar/main]
+;width = 17%
+height = 35
+fixed-center = true
+override-redirect = true
+background = #00000000
+foreground = ${colors.foreground}
+line-color = ${colors.yellow}
+border-size = 0
+border-color = #00000000
+module-margin-left = 1
+module-margin-right = 1
+font-0 = JetBrainsMono Nerd Font:size=10;1
+cursor-click = pointer
+cursor-scroll = ns-resize
+modules-left = bspwm
+modules-center = date
+;modules-right = spotify pulseaudio backlight battery wireless-network wired-network
+modules-right = bsd-bat
+padding-right = 2
+
+[module/spotify]
+type = custom/script
+interval = 1
+format-prefix = " "
+format-prefix-foreground = ${colors.yellow}
+format = <label>
+tail = true
+exec = /home/cameron/.config/polybar/scripts/scroll.sh
+
+[module/bspwm]
+ws-icon-default = 
+ws-icon-0 = one; 1
+ws-icon-1 = two; 2
+ws-icon-2 = three; 3
+ws-icon-3 = four; 4
+ws-icon-4 = five; 5
+ws-icon-5 = six; 6
+ws-icon-6 = seven; 7
+ws-icon-7 = eight; 8
+ws-icon-8 = nine; 9
+ws-icon-9 = zero; 0
+
+format = <label-state> <label-mode>
+label-monitor = %name%
+
+type = internal/bspwm
+
+label-focused = "%icon%"
+label-focused-foreground = ${colors.red}
+label-focused-padding = 1
+
+label-occupied = "%icon%"
+label-occupied-foreground = ${colors.yellow}
+label-occupied-padding = 1
+
+label-urgent = "%icon%"
+label-urgent-background = ${colors.red}
+label-nrgent-padding = 1
+
+label-empty = "%icon%"
+label-empty-foreground = ${colors.foreground}
+label-empty-padding = 1
+
+[module/date]
+type = internal/date
+interval = 5
+date = %m/%d/%Y
+time = %I:%M
+format-prefix-foreground = ${colors.yellow}
+format-prefix = " "
+label = " %time% %date%"
+
+[module/pulseaudio]
+type = internal/pulseaudio
+format-volume = <label-volume>
+label-volume = " %percentage%%"
+format-volume-prefix = 
+label-volume-foreground = ${colors.foreground}
+format-volume-prefix-foreground = ${colors.yellow}
+
+format-muted = <label-muted>
+label-muted = ""
+label-muted-foreground = ${colors.red}
+
+[module/battery]
+type = internal/battery
+battery = BAT0
+adapter = AC
+full-at = 98
+
+format-charging = "<animation-charging> <label-charging>"
+format-discharging = "<ramp-capacity> <label-discharging>"
+
+animation-charging-0 = 
+animation-charging-1 = 
+animation-charging-2 = 
+animation-charging-3 = 
+animation-charging-4 = 
+animation-charging-foreground = ${colors.green}
+
+ramp-capacity-0 = 
+ramp-capacity-1 = 
+ramp-capacity-2 = 
+ramp-capacity-3 = 
+ramp-capacity-4 = 
+ramp-capacity-foreground = ${colors.green}
+
+[module/bsd-bat]
+type = custom/script
+exec = sysctl -n hw.acpi.battery.life
+interval = 50
+format =  <label>%
+format-foreground = ${colors.green}
+
+[module/wired-network]
+type = internal/network
+interface = enp7s0
+accumulate-stats = true
+label-connected = " "
+label-disconnected = " "
+
+[module/wireless-network]
+type = internal/network
+interface = wlp0s20f3
+accumulate-stats = true
+label-connected = "%essid% 直"
+label-disconnected = "睊"
+
+[module/backlight]
+type = internal/backlight
+card = intel_backlight
+format-prefix-foreground = ${colors.yellow}
+format-prefix = " "
+
+[settings]
+screenchange-reload = true
+
+[global/wm]
+margin-top = 5
+margin-bottom = 5
diff --git a/.config/rofi/config b/.config/rofi/config
new file mode 100644
index 0000000..df8f205
--- /dev/null
+++ b/.config/rofi/config
@@ -0,0 +1 @@
+rofi.theme: ~/.config/rofi/nord.rasi
diff --git a/.config/rofi/nord.rasi b/.config/rofi/nord.rasi
new file mode 100644
index 0000000..492c09f
--- /dev/null
+++ b/.config/rofi/nord.rasi
@@ -0,0 +1,92 @@
+* {
+ nord0: #2e3440;
+ nord1: #3b4252;
+ nord2: #434c5e;
+ nord3: #4c566a;
+ nord4: #d8dee9;
+ nord5: #e5e9f0;
+ nord6: #eceff4;
+ nord7: #8fbcbb;
+ nord8: #88c0d0;
+ nord9: #81a1c1;
+ nord10: #5e81ac;
+ nord11: #bf616a;
+ nord12: #d08770;
+ nord13: #ebcb8b;
+ nord14: #a3be8c;
+ nord15: #b48ead;
+
+ background-color: @nord1;
+ border: 0px;
+ margin: 0px;
+ padding: 0px;
+ spacing: 0px;
+ text-color: @nord4;
+}
+#window {
+ width: 33%;
+}
+#inputbar {
+ text-color: @nord3;
+ padding: 6px;
+ margin: 0px 0px 2px;
+ children: [ entry ];
+}
+#entry {
+ background-color: @nord3;
+ text-color: @nord4;
+ padding: 5px;
+}
+#message {
+ border: 0px 0px 1px;
+ border-color: @nord3;
+ padding: 0px 0px 6px 7px;
+}
+#listview {
+ lines: 10;
+ padding: 2px 0px 0px;
+ scrollbar: true;
+}
+#element {
+ padding: 0px 0px 0px 7px;
+ margin: 0px 0px 5px 0px;
+ text-color: @nord4;
+}
+#element.normal.normal {
+ text-color: @nord4;
+}
+#element.normal.urgent {
+ text-color: @nord11;
+}
+#element.normal.active {
+ text-color: @nord10;
+}
+#element.alternate.normal {
+ text-color: @nord4;
+}
+#element.alternate.urgent {
+ text-color: @nord11;
+}
+#element.alternate.active {
+ text-color: @nord10;
+}
+#element.selected.normal {
+ background-color: @nord8;
+ text-color: @nord1;
+}
+#element.selected.urgent {
+ background-color: @nord11;
+ text-color: @nord4;
+}
+#element.selected.active {
+ background-color: @nord10;
+ text-color: @nord4;
+}
+#scrollbar {
+ handle-color: @nord3;
+ handle-width: 0.50em;
+}
+#button.selected {
+ background-color: @nord8;
+ text-color: @nord4;
+}
diff --git a/.gitconfig b/.gitconfig
new file mode 100644
index 0000000..af54786
--- /dev/null
+++ b/.gitconfig
@@ -0,0 +1,26 @@
+[user]
+ email = me@cameronkatri.com
+ name = Cameron Katri
+ signingkey = 7D3B36CEA40FCC2181FB6DCDBAFFD97826540F1C
+[commit]
+ gpgsign = true
+[filter "lfs"]
+ smudge = git-lfs smudge -- %f
+ process = git-lfs filter-process
+ required = true
+ clean = git-lfs clean -- %f
+[color]
+ diff = auto
+ status = auto
+ branch = auto
+ interactive = auto
+ ui = true
+ pager = true
+[interactive]
+ diffFilter = diff-highlight
+[init]
+ defaultBranch = main
+[credential]
+ helper = store
+[alias]
+ tree = log --graph --all --date=rfc --pretty=format:'%C(auto)%h%d %Cgreen%an <%ae>%n%CresetAuthor Date: %Cred%ar %Cblue(%ad) %n%CresetCommit Date: %Cred%cr %Cblue(%cd) %n%n%Creset%s%n'
diff --git a/.local/bin/bat-check b/.local/bin/bat-check
new file mode 100755
index 0000000..5a10edb
--- /dev/null
+++ b/.local/bin/bat-check
@@ -0,0 +1,35 @@
+#!/bin/sh
+#
+# ISC License
+#
+# Copyright (c) 2020-2021, Jake Bauer
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+
+while true; do
+ perc=$(apm -l)
+ ac=$(apm -a)
+ if [ ! "$ac" -eq 1 ]; then
+ if [ "$perc" -lt 10 ]; then
+ notify-send -u critical "CRITICAL: Battery Drained" \
+ "Hibernating soon!"
+ elif [ "$perc" -lt 15 ]; then
+ notify-send -u critical "WARNING: Battery Critically Low" \
+ "Plug in a charger now or save all work and shut down."
+ elif [ "$perc" -lt 20 ]; then
+ notify-send "Warning: Battery Low" "Plug in a charger soon."
+ fi
+ fi
+ sleep 300
+done
diff --git a/.local/bin/cleanup-after-bad-patch b/.local/bin/cleanup-after-bad-patch
new file mode 100755
index 0000000..8a6cf42
--- /dev/null
+++ b/.local/bin/cleanup-after-bad-patch
@@ -0,0 +1,18 @@
+#!/bin/sh
+if [ "$1" == "-n" ]; then
+find . '(' \
+ -name \*-baseline -o \
+ -name \*-merge -o \
+ -name \*-original -o \
+ -name \*.orig -o \
+ -name \*.rej \
+')'
+else
+find . '(' \
+ -name \*-baseline -o \
+ -name \*-merge -o \
+ -name \*-original -o \
+ -name \*.orig -o \
+ -name \*.rej \
+')' -delete
+fi
diff --git a/.xinitrc b/.xinitrc
new file mode 100755
index 0000000..24d3831
--- /dev/null
+++ b/.xinitrc
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+userresources=$HOME/.Xresources
+usermodmap=$HOME/.Xmodmap
+
+# merge in defaults and keymaps
+if [ -f "$userresources" ]; then
+ xrdb -merge "$userresources"
+
+fi
+
+if [ -f "$usermodmap" ]; then
+ xmodmap "$usermodmap"
+fi
+
+eval $(dbus-launch)
+eval $(gnome-keyring-daemon --start --components=pkcs11,secrets,ssh)
+
+exec bspwm
diff --git a/.zshrc b/.zshrc
new file mode 100755
index 0000000..90fe865
--- /dev/null
+++ b/.zshrc
@@ -0,0 +1,107 @@
+# Copyright (c) 2021 Cameron Katri
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+
+export ZSH="$HOME/.oh-my-zsh"
+ZSH_THEME="spaceship"
+DISABLE_LS_COLORS="true"
+plugins=(git man mosh)
+source $ZSH/oh-my-zsh.sh
+
+SPACESHIP_PROMPT_ORDER=(time user dir host git package node docker venv pyenv exec_time line_sep battery vi_mode jobs exit_code char)
+
+export LANG=en_US.UTF-8
+
+# Various editors and fix aliases with sudo
+export EDITOR=nvim
+bindkey '^E' edit-command-line
+alias code='code-oss'
+alias sudo='sudo '
+alias icat="kitty +kitten icat"
+alias fuzz="fzf --preview 'bat --style=numbers,changes --color=always --line-range :500 {}' --preview-window=right:66%"
+alias sort='LC_ALL=C sort'
+# https://reviews.freebsd.org/D30545
+alias diff='LC_ALL=C TZ=UTC diff --color=auto'
+alias ls='ls --color=auto -F'
+
+# Setup LSCOLORS, LS_COLORS and completion
+# https://reviews.freebsd.org/D30547
+# https://git.cameronkatri.com/opendircolors
+test -r ~/.nord_colors && eval $(opendircolors ~/.nord_colors)
+zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS}
+
+# Use the correct key with git
+export GIT_SSH_COMMAND='ssh -i ~/.ssh/git -o IdentitiesOnly=yes'
+
+# Qt Theme
+export QT_QPA_PLATFORMTHEME=gtk2
+
+setopt AUTO_CD
+cdpath=(. ~/Documents)
+
+setxkbmap -option compose:rctrl
+
+export GPG_TTY=$(tty)
+
+export GOPATH=$HOME/Documents/go
+
+if [ -n "$DESKTOP_SESSION" ];then
+ eval $(gnome-keyring-daemon --start)
+ export SSH_AUTH_SOCK
+fi
+
+export PATH="$HOME/.local/bin:/usr/local/libexec/ccache:$PATH"
+export PATH="$GOPATH/bin:$PATH"
+typeset -U path
+
+# Completion for kitty
+kitty + complete setup zsh | source /dev/stdin
+
+#autoload -U compinit
+#compinit
+
+export LESS='-FiMRx2$z-4$Dd+c$Du+g'
+export LESSOPEN="| source-highlight-esc.sh %s"
+
+# https://reviews.freebsd.org/D30341
+if ! mount -t fusefs --libxo=json | \
+jq -e '.mount.mounted[] | select(.node == "/usr/home/cameron/Documents/smbnetfs")' >/dev/null; then
+ smbnetfs $HOME/Documents/smbnetfs
+fi
+
+source ~/.proenv.zsh
+
+source /usr/local/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
+source /usr/local/share/zsh-autosuggestions/zsh-autosuggestions.zsh
+
+source /usr/local/share/examples/fzf/shell/completion.zsh
+
+PROG=tea _CLI_ZSH_AUTOCOMPLETE_HACK=1 source $HOME/.config/tea/autocomplete.zsh
+
+# I don't regularly check my system mail so give me an alert
+if mail -e; then
+ echo "You have mail!"
+fi
+
+alias dotconfig='git --git-dir=$HOME/Documents/dotfiles --work-tree=$HOME'