dotfiles

Cross platform dotfiles for linux, mac and windows

commit 5138fc0d83f548fce94d694b1a7c57a24473b4a7
parent 6b57e2ead106d2d6e9c43952ab1eac8d2b3c6374
Author: Bharatvaj <bharatvaj@yahoo.com>
Date: Wed, 7 Dec 2022 00:52:40 +0530

Merge branch 'main' of github.com:bharatvaj/dotfiles
98 files changed, 787 insertions(+), 364 deletions(-)
M
.config/alacritty/alacritty.yml
|
3
++-
A
.config/alacritty/bindings.yml
|
2
++
M
.config/alacritty/font.yml
|
16
+++++++++-------
R
.config/alacritty/theme.yml -> .config/alacritty/hyper-dark.yml
|
0
A
.config/alacritty/hyper-light.yml
|
25
+++++++++++++++++++++++++
M
.config/git/config
|
1
+
A
.config/mutt/keybindings
|
68
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A
.config/mutt/muttrc
|
44
++++++++++++++++++++++++++++++++++++++++++++
A
.config/mutt/ui
|
72
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
M
.config/nvim/init.lua
|
13
+++++++++----
M
.config/nvim/lua/keybindings.lua
|
232
+++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------
D
.config/nvim/lua/utils.lua
|
11
-----------
M
.config/sh/aliases
|
15
+++++++++++----
M
.config/sh/functions
|
11
+++++++----
M
.config/tmux/tmux.conf
|
17
+++++++++--------
M
.config/vim/gvimrc
|
2
+-
M
.config/vim/hyper-red.vim
|
56
+++++++++++++++++++++++++++++++++++---------------------
A
.config/vim/keybindings.vim
|
117
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
D
.config/vim/keybindings/keybindings.vim
|
81
-------------------------------------------------------------------------------
D
.config/vim/keybindings/markdown.vim
|
19
-------------------
D
.config/vim/keybindings/rust.vim
|
1
-
D
.config/vim/keybindings/vimspector.vim
|
25
-------------------------
M
.config/vim/plugin/plugin.vim
|
45
+++++++++++++++++++++++++++++++++++++++++++++
M
.config/vim/vimrc
|
18
+++++++++++++-----
M
.gitignore
|
6
+++---
M
.gitmodules
|
115
++++++++++++++++++++++++++++++++++++-------------------------------------------
R
.local/bin/call -> .local/bin/bash/call
|
0
A
.local/bin/sh/cam
|
3
+++
A
.local/bin/sh/irc
|
25
+++++++++++++++++++++++++
A
.local/bin/sh/ncp
|
11
+++++++++++
M
.local/share/.gitignore
|
15
+++++++++++++++
A
.local/share/nvim/pack/dev/opt/nvim-dap
|
1
+
A
.local/share/nvim/pack/dev/opt/nvim-dap-ui
|
1
+
D
.local/share/nvim/pack/development/opt/vimspector
|
1
-
D
.local/share/nvim/pack/development/start/nvim-dap
|
1
-
D
.local/share/nvim/pack/general/opt/vim-fugitive
|
1
-
D
.local/share/nvim/pack/general/start/nvim-lspconfig
|
1
-
D
.local/share/nvim/pack/general/start/plenary.nvim
|
1
-
D
.local/share/nvim/pack/general/start/telescope.nvim
|
1
-
D
.local/share/nvim/pack/general/start/vim-dispatch
|
1
-
D
.local/share/nvim/pack/general/start/vim-tmux-navigator
|
1
-
D
.local/share/nvim/pack/general/start/vim-unimpaired
|
1
-
D
.local/share/nvim/pack/themes/start/gruvbox-material
|
1
-
D
.local/share/vim/pack/development/opt/emmet-vim
|
1
-
D
.local/share/vim/pack/development/opt/rust.vim
|
1
-
D
.local/share/vim/pack/development/opt/vim-cmake
|
1
-
D
.local/share/vim/pack/development/opt/vim-msbuild
|
1
-
D
.local/share/vim/pack/general/opt/editorconfig-vim
|
1
-
D
.local/share/vim/pack/general/opt/vim-codepainter
|
1
-
D
.local/share/vim/pack/general/opt/vim-easymotion
|
1
-
D
.local/share/vim/pack/general/opt/vim-fugitive
|
1
-
A
.local/share/vim/pack/general/opt/vim-maildir
|
1
+
D
.local/share/vim/pack/general/opt/vim-ninja-feet
|
1
-
D
.local/share/vim/pack/general/opt/vim-surround
|
1
-
D
.local/share/vim/pack/general/opt/vim-textobj-user
|
1
-
D
.local/share/vim/pack/general/opt/vim-textobj-xmlattr
|
1
-
D
.local/share/vim/pack/general/start/ctrlp.vim
|
1
-
D
.local/share/vim/pack/general/start/mru
|
1
-
D
.local/share/vim/pack/general/start/vim-checklist
|
1
-
D
.local/share/vim/pack/general/start/vim-dispatch
|
1
-
D
.local/share/vim/pack/general/start/vim-repeat
|
1
-
D
.local/share/vim/pack/general/start/vim-tmux-navigator
|
1
-
D
.local/share/vim/pack/general/start/vim-unimpaired
|
1
-
D
.local/share/vim/pack/themes/start/gruvbox-material
|
1
-
A
.local/share/vimcommon/minisnip/_c_i
|
1
+
A
.local/share/vimcommon/minisnip/_c_main
|
4
++++
A
.local/share/vimcommon/minisnip/_c_p
|
1
+
A
.local/share/vimcommon/minisnip/_cmake_min
|
5
+++++
A
.local/share/vimcommon/minisnip/_cmake_p
|
1
+
A
.local/share/vimcommon/minisnip/_cpp_cout
|
1
+
A
.local/share/vimcommon/minisnip/_java_main
|
3
+++
A
.local/share/vimcommon/minisnip/_java_p
|
1
+
A
.local/share/vimcommon/minisnip/_sh_p
|
1
+
A
.local/share/vimcommon/pack/dev/opt/clang_complete
|
1
+
A
.local/share/vimcommon/pack/dev/opt/swift.vim
|
1
+
A
.local/share/vimcommon/pack/dev/opt/tagbar
|
1
+
A
.local/share/vimcommon/pack/dev/opt/vim-cmake
|
1
+
A
.local/share/vimcommon/pack/dev/opt/vim-msbuild
|
1
+
A
.local/share/vimcommon/pack/dev/opt/vim-xcode
|
1
+
A
.local/share/vimcommon/pack/dev/opt/vimspector
|
1
+
A
.local/share/vimcommon/pack/dev/opt/xcodebuild.vim
|
1
+
A
.local/share/vimcommon/pack/general/opt/birck.vim
|
1
+
A
.local/share/vimcommon/pack/general/opt/mru
|
1
+
A
.local/share/vimcommon/pack/general/opt/vim-fugitive
|
1
+
A
.local/share/vimcommon/pack/general/opt/vim-ninja-feet
|
1
+
A
.local/share/vimcommon/pack/general/opt/vim-tmux-navigator
|
1
+
A
.local/share/vimcommon/pack/general/opt/vim-unimpaired
|
1
+
A
.local/share/vimcommon/pack/general/start/vim-checklist
|
1
+
A
.local/share/vimcommon/pack/general/start/vim-dispatch
|
1
+
A
.local/share/vimcommon/pack/general/start/vim-minisnip
|
1
+
A
.local/share/vimcommon/pack/general/start/vim-pbxproj
|
1
+
A
.local/share/vimcommon/pack/general/start/vim-repeat
|
1
+
A
.local/share/vimcommon/pack/general/start/vim-submode
|
1
+
A
.local/share/vimcommon/pack/general/start/vim-surround
|
1
+
A
.local/share/vimcommon/pack/general/start/vim-vinegar
|
1
+
A
.local/share/vimcommon/pack/themes/opt/gruvbox-material
|
1
+
A
.local/share/vimcommon/vimrc
|
5
+++++
M
.profile
|
3
++-
diff --git a/.config/alacritty/alacritty.yml b/.config/alacritty/alacritty.yml
@@ -2,11 +2,12 @@ mouse:
   hide_when_typing: true
 
 import:
-  - ~/.config/alacritty/theme.yml
+  - ~/.config/alacritty/hyper-dark.yml
   - ~/.config/alacritty/font.yml
   - ~/.config/alacritty/unix.yml
   - ~/.config/alacritty/windows.yml
   - ~/.config/alacritty/mac.yml
+  - ~/.config/alacritty/bindings.yml
 
 live_config_reload: true
 
diff --git a/.config/alacritty/bindings.yml b/.config/alacritty/bindings.yml
@@ -0,0 +1,2 @@
+key_bindings:
+  - { key: N, mods: Control|Shift, action: CreateNewWindow}
diff --git a/.config/alacritty/font.yml b/.config/alacritty/font.yml
@@ -1,16 +1,18 @@
 font:
+  size: 12
   normal:
-    family: Fira Mono
-    style: Regular
+    family: Bitstream Vera Sans Mono
+    style: Roman
 
   bold:
-    family: Fira Mono
+    family: Bitstream Vera Sans Mono
+
     style: Bold
 
   italic:
-    family: Fira Mono
-    style: Regular Italic
+    family: Bitstream Vera Sans Mono
+    style: Oblique
 
   bold_italic:
-    family: Fira Mono
-    style: Bold Italic
+    family: Bitstream Vera Sans Mono
+    style: Bold Oblique
diff --git a/.config/alacritty/theme.yml b/.config/alacritty/hyper-dark.yml
diff --git a/.config/alacritty/hyper-light.yml b/.config/alacritty/hyper-light.yml
@@ -0,0 +1,25 @@
+colors:
+  primary:
+    background: '0xffffff'
+    foreground: '0x000000'
+
+  normal:
+    black:   '0x000000'
+    red:     '0xff0000'
+    green:   '0xff00ff'
+    yellow:  '0xaaaa10'
+    blue:    '0x0000ff'
+    magenta: '0xa00095'
+    cyan:    '0x3e953a'
+    white:   '0xa5a5a5'
+
+  bright:
+    black:   '0x000000'
+    red:     '0xff0000'
+    green:   '0x3e953a'
+    yellow:  '0xcccc10'
+    blue:    '0x0000aa'
+    magenta: '0xa00095'
+    cyan:    '0x3e953a'
+    white:   '0xffffff'
+
diff --git a/.config/git/config b/.config/git/config
@@ -27,6 +27,7 @@
 	st = status
 	suir = submodule update --init --recursive
 	wt = worktree
+	wta = worktree add
 
 [difftool]
 	prompt = false
diff --git a/.config/mutt/keybindings b/.config/mutt/keybindings
@@ -0,0 +1,68 @@
+bind index,pager i noop
+bind index,pager g noop
+bind index \Cf noop
+bind index,pager M noop
+bind index,pager C noop
+
+# General rebindings
+bind index gg first-entry
+bind index j next-entry
+bind index k previous-entry
+bind attach <return> view-mailcap
+bind attach l view-mailcap
+bind editor <space> noop
+bind index G last-entry
+bind index gg first-entry
+bind pager,attach h exit
+bind pager j next-line
+bind pager k previous-line
+bind pager l view-attachments
+bind index D delete-message
+bind index U undelete-message
+bind index L limit
+bind index h noop
+bind index l display-message
+bind index,query <space> tag-entry
+#bind browser h goto-parent
+macro browser h '<change-dir><kill-line>..<enter>' "Go to parent folder"
+bind index,pager H view-raw-message
+bind browser l select-entry
+bind pager,browser gg top-page
+bind pager,browser G bottom-page
+bind index,pager,browser d half-down
+bind index,pager,browser u half-up
+bind index,pager S sync-mailbox
+bind index,pager R group-reply
+bind index \031 previous-undeleted	# Mouse wheel
+bind index \005 next-undeleted		# Mouse wheel
+bind pager \031 previous-line		# Mouse wheel
+bind pager \005 next-line		# Mouse wheel
+bind editor <Tab> complete-query
+
+macro index S "<shell-escape>mbsync -c \"$XDG_CONFIG_HOME\"/isync/mbsyncrc -aV<enter>" "sync email"
+macro index,pager gi "<change-folder>=INBOX<enter>" "go to inbox"
+macro index,pager gd "<change-folder>=Drafts<enter>" "go to drafts"
+macro index,pager gj "<change-folder>=Junk<enter>" "go to junk"
+macro index,pager gt "<change-folder>=Trash<enter>" "go to trash"
+macro index,pager gs "<change-folder>=Sent<enter>" "go to sent"
+macro index,pager gb "<change-folder>=Business<enter>" "go to Business"
+macro index,pager ga "<change-folder>=Archive<enter>" "go to archive"
+macro index,pager gf "<change-folder>=Friends<enter>" "go to Friends"
+macro index,pager gF "<change-folder>=Family<enter>" "go to Family"
+macro index,pager Mi ";<save-message>=INBOX<enter>" "move mail to inbox"
+macro index,pager Md ";<save-message>=Drafts<enter>" "move mail to drafts"
+macro index,pager Mj ";<save-message>=Junk<enter>" "move mail to junk"
+macro index,pager Mt ";<save-message>=Trash<enter>" "move mail to trash"
+macro index,pager Ms ";<save-message>=Sent<enter>" "move mail to sent"
+macro index,pager Mb ";<save-message>=Business<enter>" "move mail to Business"
+macro index,pager Ma ";<save-message>=Archive<enter>" "move mail to archive"
+macro index,pager Mg ";<save-message>=Google<enter>" "move mail to google"
+macro index,pager Mf ";<save-message>=Friends<enter>" "move mail to Friends"
+macro index,pager MF ";<save-message>=Family<enter>" "move mail to Family"
+
+macro index,pager a "<enter-command>set my_pipe_decode=\$pipe_decode pipe_decode<return><pipe-message>abook --add-email<return><enter-command>set pipe_decode=\$my_pipe_decode; unset my_pipe_decode<return>" "add the sender address to abook"
+macro index \Cr "T~U<enter><tag-prefix><clear-flag>N<untag-pattern>.<enter>" "mark all messages as read"
+macro index O "<shell-escape>mw -Y<enter>" "run mw -Y to sync all mail"
+macro index \Cf "<enter-command>unset wait_key<enter><shell-escape>printf 'Enter a search term to find with notmuch: '; read x; echo \$x >~/.cache/mutt_terms<enter><limit>~i \"\`notmuch search --output=messages \$(cat ~/.cache/mutt_terms) | head -n 600 | perl -le '@a=<>;s/\^id:// for@a;$,=\"|\";print@a' | perl -le '@a=<>; chomp@a; s/\\+/\\\\+/ for@a;print@a' \`\"<enter>" "show only messages matching a notmuch pattern"
+macro index A "<limit>all\n" "show all messages (undo limit)"
+
diff --git a/.config/mutt/muttrc b/.config/mutt/muttrc
@@ -0,0 +1,44 @@
+set mbox_type = Maildir
+
+source ~/.config/mutt/keybindings
+source ~/.config/mutt/ui
+source ~/.config/mutt/accounts
+
+# mailbox settings
+set spoolfile = +
+set postponed = +Drafts
+set record = +Sent
+set trash = +Trash
+
+set auto_tag=true
+
+auto_view text/html
+set mailcap_path = ~/.config/mutt/mailcap
+
+set query_command= "abook --mutt-query '%s'"
+
+set mailcap_path = "~/.config/mutt/mailcap"
+set mime_type_query_command = "file --mime-type -b %s"
+set date_format="%y/%m/%d %I:%M%p"
+set index_format="%D %-15.15F %s (%-4.4c)"
+set sort = 'reverse-date'
+set smtp_authenticators = 'gssapi:login'
+set query_command = "abook --mutt-query '%s'"
+set rfc2047_parameters = yes
+set sleep_time = 0
+set markers = no		# Disables the `+` displayed at line wraps
+set mark_old = no		# Unread mail stay unread until read
+set mime_forward = yes		# attachments are forwarded with mail
+set wait_key = no		# mutt won't ask "press key to continue"
+set fast_reply			# skip to compose when replying
+set fcc_attach			# save attachments with the body
+set forward_format = "Fwd: %s"	# format of subject when forwarding
+set forward_quote		# include message in forwards
+set reverse_name		# reply as whomever it was to
+# TODO should we include though?
+set include			# include message in replies
+set mail_check=60 # to avoid lags using IMAP with some email providers (yahoo for example)
+
+auto_view text/html
+auto_view application/pgp-encrypted
+alternative_order text/plain text/enriched text/html
diff --git a/.config/mutt/ui b/.config/mutt/ui
@@ -0,0 +1,72 @@
+# Default index colors:
+color index yellow default '.*'
+color index_author red default '.*'
+color index_number blue default
+color index_subject cyan default '.*'
+
+# New mail is boldened:
+color index brightyellow black "~N"
+color index_author brightred black "~N"
+color index_subject brightcyan black "~N"
+
+# Tagged mail is highlighted:
+color index brightyellow blue "~T"
+color index_author brightred blue "~T"
+color index_subject brightcyan blue "~T"
+
+# Other colors and aesthetic settings:
+mono bold bold
+mono underline underline
+mono indicator reverse
+mono error bold
+color normal default default
+color indicator brightblack white
+color sidebar_highlight red default
+color sidebar_divider brightblack black
+color sidebar_flagged red black
+color sidebar_new green black
+color normal brightyellow default
+color error red default
+color tilde black default
+color message cyan default
+color markers red white
+color attachment white default
+color search brightmagenta default
+color status brightyellow black
+color hdrdefault brightgreen default
+color quoted green default
+color quoted1 blue default
+color quoted2 cyan default
+color quoted3 yellow default
+color quoted4 red default
+color quoted5 brightred default
+color signature brightgreen default
+color bold black default
+color underline black default
+color normal default default
+
+# Regex highlighting:
+color header blue default ".*"
+color header brightmagenta default "^(From)"
+color header brightcyan default "^(Subject)"
+color header brightwhite default "^(CC|BCC)"
+color body brightred default "[\-\.+_a-zA-Z0-9]+@[\-\.a-zA-Z0-9]+" # Email addresses
+color body brightblue default "(https?|ftp)://[\-\.,/%~_:?&=\#a-zA-Z0-9]+" # URL
+color body green default "\`[^\`]*\`" # Green text between ` and `
+color body brightblue default "^# \.*" # Headings as bold blue
+color body brightcyan default "^## \.*" # Subheadings as bold cyan
+color body brightgreen default "^### \.*" # Subsubheadings as bold green
+color body yellow default "^(\t| )*(-|\\*) \.*" # List items as yellow
+color body brightcyan default "[;:][-o][)/(|]" # emoticons
+color body brightcyan default "[;:][)(|]" # emoticons
+color body brightcyan default "[ ][*][^*]*[*][ ]?" # more emoticon?
+color body brightcyan default "[ ]?[*][^*]*[*][ ]" # more emoticon?
+color body red default "(BAD signature)"
+color body cyan default "(Good signature)"
+color body brightblack default "^gpg: Good signature .*"
+color body brightyellow default "^gpg: "
+color body brightyellow red "^gpg: BAD signature from.*"
+mono body bold "^gpg: Good signature"
+mono body bold "^gpg: BAD signature from.*"
+color body red default "([a-z][a-z0-9+-]*://(((([a-z0-9_.!~*'();:&=+$,-]|%[0-9a-f][0-9a-f])*@)?((([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?|[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+)(:[0-9]+)?)|([a-z0-9_.!~*'()$,;:@&=+-]|%[0-9a-f][0-9a-f])+)(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?(#([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?|(www|ftp)\\.(([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?(:[0-9]+)?(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?(#([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?)[^].,:;!)? \t\r\n<>\"]"
+
diff --git a/.config/nvim/init.lua b/.config/nvim/init.lua
@@ -9,6 +9,7 @@ require("keybindings")
 
 
 set.tabstop=4
+set.shiftwidth=4
 set.number=true
 set.laststatus=1
 set.expandtab=false

@@ -26,9 +27,17 @@ g.netrw_liststyle = 3
 
 require('nvim_comment').setup()
 
+-- TODO use lua api
+vim.cmd('source $XDG_DATA_HOME/vimcommon/vimrc')
+
 vim.cmd([[
 function! s:load_plugins(t) abort
+	packadd vim-tmux-navigator
+	packadd mru
+	packadd vim-surround
+	packadd vim-ninja-feet
 	packadd vim-fugitive
+	packadd gruvbox-material
 endfunction
 
 augroup user_cmds

@@ -37,7 +46,3 @@ augroup user_cmds
 augroup END
 ]])
 
--- theme
--- hyper-red
--- TODO use lua api
-vim.cmd('source $XDG_CONFIG_HOME/vim/hyper-red.vim')
diff --git a/.config/nvim/lua/keybindings.lua b/.config/nvim/lua/keybindings.lua
@@ -1,10 +1,8 @@
--- keybindings
-local set = vim.opt
-
+-- keybindings local set = vim.opt
 function save_and_build()
 -- TODO require vim-dispatch
-		vim.cmd('wall')
-		vim.cmd('Make')
+	vim.cmd('wall')
+	vim.cmd('Make')
 end
 
 function toggle_list(is_local_buffer)

@@ -17,11 +15,74 @@ function toggle_list(is_local_buffer)
 	end
 end
 
--- function toggle_highlight()
--- 	if vim.opt.highlight then
--- 			vim.
---
--- end
+local map = vim.keymap.set
+
+-- Column Navigation/Scrolling
+map('n', 'J', '<c-d>')
+map('n', 'K', '<c-u>')
+map('n', 'gJ', '<c-f>')
+map('n', 'gK', '<c-b>')
+-- map('n', '<c-d>', 'J')
+-- map('n', 'g<c-d>', 'gJ')
+-- map('n', '<c-u>', 'K')
+-- map('n', 'g<c-u>', 'gK')
+
+-- Edit
+-- map('n', "g<cr>", 'O')
+-- map('n', "<cr>", 'o')
+
+-- send command upstream
+map('n', "<esc>h", '<c-w>h')
+map('n', "<esc>j", '<c-w>j')
+map('n', "<esc>k", '<c-w>k')
+map('n', "<esc>l", '<c-w>l')
+map('n', "<esc>f", '<c-w>l')
+
+-- Horizonatal scrolling
+map('n', "H", 'zH')
+map('n', "L", 'zL')
+
+map('n', "zh", 'g0')
+map('n', "zj", 'L')
+map('n', "zk", 'H')
+map('n', "zl", 'g$')
+map('n', "zm", ":call cursor(0, len(getline('.'))/2)<cr>")
+map('n', "zM", 'M')
+
+-- Line movements
+map('n', "gh", '_')
+map('n', "gl", '$')
+map('n', "gm", 'M')
+
+map('n', "gM", 'M')
+
+map('n', "U", '<c-r>')
+map('n', "<c-r>", '"')
+
+map('n', "<bs>", 's')
+map('n', "z/", ':%s/')
+map('n', "z?", ':%s?')
+
+map('n', "M", 'q')
+
+vim.api.nvim_create_autocmd('LspAttach', {
+  callback = function(args)
+  -- vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc')
+
+  local lspbuf = vim.lsp.buf
+  local bufopts = { noremap=true, buffer=args.buf }
+  map({'n', 'v'}, '<a-CR>', lspbuf.code_action, bufopts)
+  map('n', 'gD', lspbuf.declaration, bufopts)
+  map('n', 'gd', lspbuf.definition, bufopts)
+  map('n', 'K', lspbuf.hover, bufopts)
+  map('n', 'gi', lspbuf.implementation, bufopts)
+  map('n', '<space>D', lspbuf.type_definition, bufopts)
+  map('n', '<space>rn', lspbuf.rename, bufopts)
+  map('n', '<space>ca', lspbuf.code_action, bufopts)
+  map('n', 'gr', lspbuf.references, bufopts)
+  map('n', '<space>f', function() lspbuf.format { async = true } end, bufopts)
+  end
+})
 
 vim.cmd([[
 function! DiffWithSaved()

@@ -37,68 +98,74 @@ function file_mv_helper()
 	vim.cmd('normal! 0i"A"0y$A p0imv j0')
 end
 
--- Run Make
-local map = require("utils").map
 -- general
-map("n", "<leader>co", ":copen<cr>", { silent = false })
-map("n", "<leader>cs", ":cdo<space>s/", { silent = false })
-map("n", "<leader>ec", ":edit $XDG_CONFIG_HOME/nvim/init.lua<cr>", { silent = true })
-map("n", "<leader>ek", ":edit $XDG_CONFIG_HOME/nvim/lua/keybindings.lua<cr>", { silent = false })
-map("n", "<leader>et", ":set expandtab<cr>", { silent = false })
-map("n", "<leader>ff", ":find *", { silent = false })
-map("n", "<leader>lb", ":ls<CR>:b<space>", { silent = false })
-map("n", "<leader>lo", ":lopen<cr>", { silent = false })
-map("n", "<leader>ls", ":ldo<space>s/", { silent = false })
-map("n", "<leader>p", ":Rg<cr>", { silent = false })
-map("n", "<leader>sc", ":source $XDG_CONFIG_HOME/nvim/init.lua<cr>", { silent = false })
-map("n", "<leader>so", ":source %<cr>", { silent = false })
-map("n", "<leader>sp", ":set paste<cr>", { silent = false })
-map("n", "<leader>tl", ":lua toggle_list(true)<CR>", { silent = true })
-map("n", "<leader>tt", ":tabnew<cr>", { silent = false })
-map("n", "<leader>vg", ":vimgrep<space>", { silent = false })
-map("n", "<leader>wd", ":call DiffWithSaved()<cr>", { silent = false });
+map("n", "<leader>aa", ":argadd **<cr>")
+map("n", "<leader>co", ":copen<cr>")
+map("n", "<leader>cd", ":cdo<space>s/")
+map("n", "<leader>ec", ":edit $XDG_CONFIG_HOME/nvim/init.lua<cr>")
+map("n", "<leader>ek", ":edit $XDG_CONFIG_HOME/nvim/lua/keybindings.lua<cr>")
+map("n", "<leader>et", ":set expandtab<cr>")
+map("n", "<leader>lb", ":ls<CR>:b<space>")
+map("n", "<leader>lo", ":lopen<cr>")
+map("n", "<leader>ld", ":ldo<space>s/")
+map("n", "<leader>p", ":Rg<cr>")
+map("n", "<leader>sc", ":source $XDG_CONFIG_HOME/nvim/init.lua<cr>")
+map("n", "<leader>so", ":source %<cr>")
+map("n", "<leader>spp", ":set paste<cr>")
+map("n", "<leader>spa", ":set path+=**<cr>")
+map("n", "<leader>tl", ":lua toggle_list(true)<CR>")
+map("n", "<leader>tt", ":tabnew<cr>")
+map("n", "<leader>vg", ":vimgrep<space>")
+map("n", "<leader>wd", ":call DiffWithSaved()<cr>")
 
 -- quick write and quit
-map("n", "<Leader>ww", ":w<CR>", { silent = true })
-map("n", "<Leader>wq", ":wq<CR>", { silent = true })
-map("n", "<Leader>qq", ":q<CR>", { silent = true })
-map("n", "<leader><cr>", ":noh<CR>", { silent = true })
+map("n", "<Leader>qq", ":q<CR>")
+map("n", "<Leader>ww", ":w<CR>")
+map("n", "<leader><cr>", ":noh<CR>")
 
 -- buffers
-map("n", "<leader>sc", ":source ~/.config/vim/vimrc<enter>", { silent = true })
-map("n", "<leader>ss", ":split<enter>", { silent = true })
-map("n", "<leader>vv", ":vsplit<enter>", { silent = true })
-
--- vimspector
-map("n", "<leader>dd", ":call vimspector#Launch()<CR>", { silent = true })
-map("n", "<leader>dc", ":call GotoWindow(g:vimspector_session_windows.code)<CR>", { silent = true })
-map("n", "<leader>dt", ":call GotoWindow(g:vimspector_session_windows.tagpage)<CR>", { silent = true })
-map("n", "<leader>dv", ":call GotoWindow(g:vimspector_session_windows.variables)<CR>", { silent = true })
-map("n", "<leader>dw", ":call GotoWindow(g:vimspector_session_windows.watches)<CR>", { silent = true })
-map("n", "<leader>ds", ":call GotoWindow(g:vimspector_session_windows.stack_trace)<CR>", { silent = true })
-map("n", "<leader>do", ":call GotoWindow(g:vimspector_session_windows.output)<CR>", { silent = true })
-map("n", "<leader>de", ":call vimspector#Reset()<CR>", { silent = true })
-
-map("n", "<leader>dtcb", ":call vimspector#CleanLineBreakpoint()<CR>", { silent = true })
-
-map("n", "<leader>dl", "<Plug>VimspectorStepInto", { silent = true })
-map("n", "<leader>dj", "<Plug>VimspectorStepOver", { silent = true })
-map("n", "<leader>dk", "<Plug>VimspectorStepOut", { silent = true })
-map("n", "<leader>d_", "<Plug>VimspectorRestart", { silent = true })
-map("n", "<leader>d<space>", ":call vimspector#Continue()<CR>", { silent = true })
-
-map("n", "<leader>drc", "<Plug>VimspectorRunToCursor", { silent = true })
-map("n", "<leader>dbp" , "<Plug>VimspectorToggleBreakpoint", { silent = true })
-map("n", "<leader>dcbp", "<Plug>VimspectorToggleConditionalBreakpoint", { silent = true })
-
-map("n", "<leader>bb", ":lua save_and_build()<CR>", { silent = false })
+map("n", "<leader>sc", ":source ~/.config/vim/vimrc<enter>")
+map("n", "<leader>ss", ":split<enter>")
+map("n", "<leader>vv", ":vsplit<enter>")
+
+-- nvim-dap
+map("n", "<leader>dd", ":lua require'dap'.continue()<cr>")
+map("n", "<leader>de", ":lua require'dap'.terminate()<cr> | :lua require'dap'.close()<cr>")
+map("n", "<leader>dl", ":lua require'dap'.step_into()<cr>")
+map("n", "<leader>dj", ":lua require'dap'.step_over()<cr>")
+map("n", "<leader>dk", ":lua require'dap'.step_out()<cr>")
+map("n", "<leader>dr", ":lua require'dap'.restart()<cr>")
+
+-- nvim-dap-ui
+map("n", "<leader>du", ":lua require'dapui'.toggle()<cr>")
+
+map("n", "<leader>drc", ":lua require'dap'.RunToCursor()")
+map("n", "<leader>db" , ":lua require'dap'.toggle_breakpoint()<cr>")
+map("n", "<leader>dcb", ":lua require'dap'.ToggleConditionalBreakpoint()")
+
+-- map("n", "<leader>dc", ":call GotoWindow(require'dap'.session_windows.code)<CR>")
+-- map("n", "<leader>dt", ":call GotoWindow(require'dap'.session_windows.tagpage)<CR>")
+-- map("n", "<leader>dv", ":call GotoWindow(require'dap'.session_windows.variables)<CR>")
+-- map("n", "<leader>dw", ":call GotoWindow(require'dap'.session_windows.watches)<CR>")
+-- map("n", "<leader>ds", ":call GotoWindow(require'dap'.session_windows.stack_trace)<CR>")
+-- map("n", "<leader>do", ":call GotoWindow(require'dap'.session_windows.output)<CR>")
+-- map("n", "<leader>dtcb", ":call vimspector#CleanLineBreakpoint()<CR>")
+
+map("n", "<leader>bb", ":lua save_and_build()<CR>")
+
+
+-- development
+map("n", "<leader>oc", ":grepadd /:: %")
+map("n", "<leader>oh", ":grepadd /:: %")
 
 -- quick navigation
--- telscope.nvim
-map("n", "<leader><leader>", ":Telescope find_files<cr>", { silent = true })
+map("n", "<leader>fb", ":b *")
+map("n", "<leader>ff", ":find *")
+map("n", "<leader>fs", ":set foldmethod=syntax<cr>")
+
 
 -- file helpers
-map("n", "<leader>fmv", "lua file_mv_helper()",  { silent = true })
+map("n", "<leader>fmv", "lua file_mv_helper()")
 
 -- doc functions
 function doc_quick_underline(n)

@@ -113,26 +180,39 @@ function reverse_date()
 	vim.cmd('normal! dt/wwpldeBP')
 end
 
-map("n", "<leader>h1", ":lua doc_quick_underline(1)<cr>", { silent = true });
-map("n", "<leader>h2", ":lua doc_quick_underline(2)<cr>", { silent = true });
+map("n", "<leader>h1", ":lua doc_quick_underline(1)<cr>")
+map("n", "<leader>h2", ":lua doc_quick_underline(2)<cr>")
 
 
-map("n", "<leader>ct", ":ChecklistToggleCheckbox<cr>", { silent = true });
-map("n", "<leader>ce", ":ChecklistEnableCheckbox<cr>", { silent = true });
-map("n", "<leader>cd", ":ChecklistDisableCheckbox<cr>", { silent = true });
-map("n", "<leader>ct", ":ChecklistToggleCheckbox<cr>", { silent = true });
-map("n", "<leader>ce", ":ChecklistEnableCheckbox<cr>", { silent = true });
-map("n", "<leader>cd", ":ChecklistDisableCheckbox<cr>", { silent = true });
+map("n", "<leader>ct", ":ChecklistToggleCheckbox<cr>")
+map("n", "<leader>ce", ":ChecklistEnableCheckbox<cr>")
+-- map("n", "<leader>cd", ":ChecklistDisableCheckbox<cr>")
 
 -- vim.g.checklist_filetypes:append('adoc', 'md')
 
 -- vim-fugitive
-map("n", "<leader>gg", ":Ggrep<space>", { silent = false });
-map("n", "<leader>lg", ":Glgrep<space>", { silent = false });
-map("n", "<leader>gwq", ":Gwq<cr>", { silent = false });
+map("n", "<leader>gd", ":Gvdiff")
+map("n", "<leader>gg", ":Ggrep<space>")
+map("n", "<leader>lg", ":Glgrep<space>")
+map("n", "<leader>gwq", ":Gwq<cr>")
+
+-- useful
+map("n", "<leader>nn", ":set number<cr>")
 
 -- neovim diagnostics
-map("n", "<leader>sd", ":lua vim.diagnostic.open_float()<cr>", { silent = false });
+map("n", "<leader>sd", ":lua vim.diagnostic.open_float()<cr>")
 
 -- netrw keybindings
-map("n", "<leader>sf", ":Ex<cr>", { silent = false });
+map("n", "<leader>sf", ":Ex<cr>")
+
+-- subst with power
+map("n", "cn", "*``cgn")
+map("n", "cN", "*``cgN")
+vim.cmd([[
+let g:mc = "y/\\V\<C-r>=escape(@\", '/')\<CR>\<CR>"
+vnoremap <expr> cn g:mc . "``cgn"
+]])
+
+-- nb
+-- TODO open a fuzzy finder quickly. Even better use fuzzy finder without chdir
+map("n", "<leader>nb", ":chdir $NB_PATH<cr> | :pwd<cr>")
diff --git a/.config/nvim/lua/utils.lua b/.config/nvim/lua/utils.lua
@@ -1,11 +0,0 @@
-local M = {}
-
-function M.map(mode, lhs, rhs, opts)
-    local options = { noremap = true }
-    if opts then
-        options = vim.tbl_extend("force", options, opts)
-    end
-    vim.api.nvim_set_keymap(mode, lhs, rhs, options)
-end
-
-return M
diff --git a/.config/sh/aliases b/.config/sh/aliases
@@ -10,10 +10,10 @@ alias wget='wget --hsts-file="$XDG_CACHE_HOME/wget-hsts"'
 # [misc]
 alias doas=sudo
 
-# [ls_conditioning]
+# [baseutils_conditioning]
 thwart sl && thwart ld && thwart lls &&  thwart sls && thwart lsl && thwart lss && thwart kls
-# [cd_conditioning]
 thwart cdd
+thwart mr
 
 # [ip]
 there ifconfig && alias lip="ifconfig | grep -w inet  | cut -d ' ' -f2"

@@ -27,6 +27,8 @@ alias n='cd_and_ls'
 alias cf="quickopen cd d"
 alias ef="quickopen ${EDITOR} f"
 alias vf="quickopen ${VISUAL} f"
+# TODO make it work for linux
+alias of="quickopen open f"
 # This won't work with dash
 # dash want's alias \-
 # alias -- -='cd -'

@@ -34,11 +36,16 @@ alias vf="quickopen ${VISUAL} f"
 # [shorthands]
 alias '?d'='sr duckduckgo'
 alias cls=clear
-alias d='wget'
+alias d='download'
 alias e='${EDITOR}'
 alias f='find . -name '
 alias g='git'
 alias g=git
 alias l=lfcd
-alias v='VIMINIT="" nvim'
+alias le=less
+alias m=make
+alias v="VIMINIT='' nvim"
 alias x=extract_archive
+
+# [longhands]
+alias girl='grep -irl'
diff --git a/.config/sh/functions b/.config/sh/functions
@@ -24,8 +24,12 @@ md() {
 
 # TODO make it non-interruptable
 insult() {
-	printf "You are a noob for typing '$1'\n"
-	sleep 5
+	if type sl 1>/dev/null; then
+		sl
+	else
+		printf "You are a noob for typing '$1'\n"
+		sleep 5
+	fi
 }
 
 thwart() {

@@ -43,6 +47,5 @@ quickopen() {
 }
 
 cd_and_ls() {
-		cd $*
-		ls
+		cd $* && ls
 }
diff --git a/.config/tmux/tmux.conf b/.config/tmux/tmux.conf
@@ -7,8 +7,8 @@ set -g set-titles on
 # Status bar
 set -g status-position top
 set -g status-justify left
-set -g status-right "#(tmux-now-playing)"
-set -g status-keys vi
+# set -g status-right "#(tmux-now-playing)"
+set -g status-right ""
 bind v split-window -h -c "#{pane_current_path}"
 bind s split-window -v -c "#{pane_current_path}"
 

@@ -41,14 +41,15 @@ bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "pb
 bind P paste-buffer
 
 # Themes
-set -g status-bg black
-set -g status-fg white
-set -g window-status-current-style "bg=black,fg=red,bold"
-set -g window-status-last-style "bg=black,fg=cyan"
-set -g pane-active-border-style "fg=red"
+set-option -g status-style "bg=default"
+set -g status-fg default
+set -g window-status-current-style "fg=red,bold"
+set -g window-status-last-style "fg=cyan"
+set -g pane-active-border-style "bg=default,fg=red"
 set -g pane-border-lines single
 set -g pane-border-status off
-set -g popup-border-style "bg=black,fg=red"
+set -g pane-border-indicators colour
+set -g popup-border-style "bg=default,fg=grey"
 set -g popup-border-lines single
 
 # Smart pane switching with awareness of Vim splits.
diff --git a/.config/vim/gvimrc b/.config/vim/gvimrc
@@ -1,2 +1,2 @@
-set guifont=Fira\ Code\ SemiBold
+set guifont=Bitstream\ Vera\ Sans\ Mono
 set guioptions=
diff --git a/.config/vim/hyper-red.vim b/.config/vim/hyper-red.vim
@@ -4,31 +4,45 @@
 " Probably use a autogroup for handling tCo count change
 " Do it in lua
 if &background == "dark"
-	hi StatusLine ctermfg=Black ctermbg=LightBlue guifg=black guibg=white
+    hi LineNr guibg=NONE ctermbg=NONE guifg=DarkGray ctermfg=DarkGray
+    hi CursorLineNr guibg=NONE ctermbg=NONE guifg=White ctermfg=White
+	hi StatusLine cterm=bold gui=bold ctermfg=White ctermbg=Black guifg=White guibg=Black
 	hi StatusLineNC guibg=lightgray ctermbg=lightgray guifg=black ctermfg=black
+	hi Statement ctermfg=Red guifg=Red
+	hi Constant ctermfg=LightGreen guifg=LightGreen
+	hi String ctermfg=LightBlue guifg=LightBlue
+	hi Special cterm=bold ctermfg=LightGreen guifg=LightYellow
+	hi Identifier ctermfg=White guifg=White
+	hi IncSearch ctermbg=Black ctermfg=Yellow guibg=Black guifg=Yellow
+	hi Search ctermbg=LightBlue ctermfg=Black guibg=Blue guifg=White
+	hi Todo cterm=underline ctermbg=NONE ctermfg=LightYellow guibg=NONE guifg=LightYellow
+	hi Comment ctermfg=DarkGray guifg=DarkGray
+	hi Visual ctermbg=White ctermfg=Black guibg=White guifg=Black
+	hi Type ctermfg=LightGray guifg=LightGray
+	hi PreProc ctermfg=DarkGray guifg=DarkGray
+	hi MatchParen ctermbg=NONE cterm=underline ctermfg=LightMagenta
 else
-	hi StatusLine guibg=darkblue ctermbg=darkblue guifg=white ctermfg=white
-	hi StatusLineNC guibg=darkgray ctermbg=darkgray guifg=white ctermfg=white
+	hi LineNr guibg=NONE ctermbg=NONE guifg=LightGray ctermfg=LightGray
+	hi StatusLine cterm=bold gui=bold guibg=NONE ctermbg=NONE guifg=Black ctermfg=Black
+	hi StatusLineNC guibg=DarkGray ctermbg=DarkGray guifg=White ctermfg=White
+	hi Statement ctermfg=Red guifg=Red
+	hi Constant ctermfg=Green guifg=Green
+	hi String ctermfg=DarkBlue guifg=DarkBlue
+	hi Special cterm=bold ctermfg=DarkGreen guifg=DarkGreen
+	hi Identifier ctermfg=Black guifg=Black
+	hi IncSearch ctermbg=White ctermfg=Yellow guibg=White guifg=Yellow
+	hi Search ctermbg=Blue ctermfg=White guibg=Blue guifg=White
+	hi Todo cterm=underline,bold ctermbg=NONE ctermfg=Yellow guibg=NONE guifg=Yellow
+	hi Comment ctermfg=LightGray guifg=LightGray
+	hi Visual ctermbg=Black ctermfg=white guibg=Black guifg=white
+	hi Type ctermfg=DarkGray guifg=DarkGray
+	hi PreProc ctermfg=LightGray guifg=LightGray
+	hi MatchParen guibg=NONE ctermbg=NONE gui=underline cterm=underline guifg=DarkMagenta ctermfg=DarkMagenta
 endif
-hi LineNr guibg=NONE ctermbg=NONE guifg=DarkGray ctermfg=DarkGray
 set fillchars=vert:\│
 hi VertSplit term=NONE cterm=NONE gui=NONE
 hi SignColumn ctermbg=NONE guibg=NONE
-if empty($DISPLAY)
-hi Comment ctermfg=NONE
-else
-hi Comment ctermfg=DarkGray guifg=DarkGray
-hi Visual ctermbg=DarkGray ctermfg=white guibg=DarkGray guifg=white
-hi Type ctermfg=LightGray guifg=LightGray
-hi PreProc ctermfg=LightGray guifg=LightGray
-endif
 
-hi Statement ctermfg=Red guifg=LightGreen
-hi Constant ctermfg=Red guifg=Red
-hi String cterm=bold ctermfg=NONE guifg=LightRed
-hi Special cterm=bold ctermfg=LightBlue guifg=LightYellow
-hi Identifier ctermfg=White guifg=White
-hi Search ctermbg=Blue ctermfg=White guibg=Blue guifg=White
-hi Todo cterm=underline ctermbg=NONE ctermfg=LightYellow guibg=NONE guifg=LightYellow
-
-hi MatchParen ctermbg=NONE cterm=underline ctermfg=Magenta
+if (&t_Co == 8)
+	hi Comment ctermfg=NONE
+endif
diff --git a/.config/vim/keybindings.vim b/.config/vim/keybindings.vim
@@ -0,0 +1,117 @@
+" General keybindings
+nnoremap <leader>aa :argadd **<cr>
+nnoremap <leader>co :copen<cr>
+nnoremap <leader>cs :cdo<space>s/
+nnoremap <leader>ec :edit $XDG_CONFIG_HOME/vim/vimrc<cr>
+nnoremap <leader>ek :edit $XDG_CONFIG_HOME/vim/keybindings.vim<cr>
+nnoremap <leader>et :set expandtab<cr>
+nnoremap <leader>fa :find *
+nnoremap <leader>ff :b *
+nnoremap <leader>lb :ls<cr>:b<space>
+nnoremap <leader>lo :lopen<cr>
+nnoremap <leader>ls :ldo<space>s/
+nnoremap <leader>pp :Rg<cr>
+nnoremap <leader>pv :packadd vimspector<cr>
+nnoremap <leader>sc :source $XDG_CONFIG_HOME/vim/vimrc<cr>
+nnoremap <leader>so :source %<cr>
+nnoremap <leader>sp :set paste<cr>
+nnoremap <leader>tt :tabnew<cr>
+nnoremap <leader>vg :vimgrep<space>
+" Buffer Creation
+nnoremap <leader>sc :source $XDG_CONFIG_HOME/vim/vimrc<enter>
+nnoremap <leader>ss :split<enter>
+nnoremap <leader>vv :vsplit<enter>
+
+" Accessible completions
+inoremap <c-f> <c-x><c-f>
+inoremap <c-l> <c-x><c-l>
+" Emacs line navigation in insert mode
+inoremap <c-a> <c-o>0
+inoremap <c-e> <c-o>A
+" Behave vim
+nnoremap Y y$
+
+fun! SetupCommandAlias(from, to)
+  exec 'cnoreabbrev <expr> '.a:from
+        \ .' ((getcmdtype() is# ":" && getcmdline() is# "'.a:from.'")'
+        \ .'? ("'.a:to.'") : ("'.a:from.'"))'
+endfun
+call SetupCommandAlias("W","w")
+call SetupCommandAlias("Wq","wq")
+call SetupCommandAlias("man","help")
+
+nnoremap <leader>tb :call ToggleBackground()<CR>
+nnoremap <leader>tl :call ToggleList()<CR>
+nnoremap <leader>bb :call SaveAndBuild()<CR>
+nnoremap <leader>fmv :call FileMvHelper()<CR>
+
+" Quick save and write
+nnoremap <leader>wq :wq<cr>
+nnoremap <leader>ww :w<cr>
+nnoremap <leader>qq :q<cr>
+
+" Fugitive
+nnoremap <space>gd :Gvdiff<CR>
+
+
+" Generate ctags
+map <leader>gt :!sh -c "ctags `rg --files`"<CR>
+set tags+=.git/tags
+
+nnoremap <CR> :noh<CR><CR>:<backspace>
+
+" Markdown
+nnoremap <leader>cc :ChecklistToggleCheckbox<cr>
+
+let g:gutentags_file_list_command = 'rg --files'
+nnoremap <tab><tab> :CtrlPBuffer<cr>
+
+" vim-fugitive
+nnoremap <leader>gg :Ggrep<space>
+nnoremap <leader>lg :Glgrep<space>
+
+autocmd FileType markdown set cursorline
+
+" Hide and format markdown elements like **bold**
+autocmd FileType markdown set conceallevel=2
+
+function QuickUnderline(n)
+	if a:n == 1
+		normal! yypv$r=
+	else
+		normal! yypv$r-
+	endif
+endfunction
+
+function ReverseDate()
+	normal! dt/wwpldeBP
+endfunction
+
+nnoremap <leader>h1 :call QuickUnderline(1)<cr>
+nnoremap <leader>h2 :call QuickUnderline(2)<cr>
+
+fun! GotoWindow(id)
+    call win_gotoid(a:id)
+endfun
+
+" Debugger remaps
+nnoremap <leader>dd :call vimspector#Launch()<CR>
+nnoremap <leader>dc :call GotoWindow(g:vimspector_session_windows.code)<CR>
+nnoremap <leader>dt :call GotoWindow(g:vimspector_session_windows.tagpage)<CR>
+nnoremap <leader>dv :call GotoWindow(g:vimspector_session_windows.variables)<CR>
+nnoremap <leader>dw :call GotoWindow(g:vimspector_session_windows.watches)<CR>
+nnoremap <leader>ds :call GotoWindow(g:vimspector_session_windows.stack_trace)<CR>
+nnoremap <leader>do :call GotoWindow(g:vimspector_session_windows.output)<CR>
+nnoremap <leader>de :call vimspector#Reset()<CR>
+
+nnoremap <leader>dtcb :call vimspector#CleanLineBreakpoint()<CR>
+
+nmap <leader>dl <Plug>VimspectorStepInto
+nmap <leader>dj <Plug>VimspectorStepOver
+nmap <leader>dk <Plug>VimspectorStepOut
+nmap <leader>d_ <Plug>VimspectorRestart
+nnoremap <leader>d<space> :call vimspector#Continue()<CR>
+
+nmap <leader>drc <Plug>VimspectorRunToCursor
+nmap <leader>dbp <Plug>VimspectorToggleBreakpoint
+nmap <leader>dcbp <Plug>VimspectorToggleConditionalBreakpoint
diff --git a/.config/vim/keybindings/keybindings.vim b/.config/vim/keybindings/keybindings.vim
@@ -1,81 +0,0 @@
-" General keybindings
-nnoremap <leader>lb :ls<CR>:b<space>
-nnoremap <leader>co :copen<cr>
-nnoremap <leader>cs :cdo<space>s/
-nnoremap <leader>ec :edit $XDG_CONFIG_HOME/vim/vimrc<cr>
-nnoremap <leader>ek :edit $XDG_CONFIG_HOME/vim/keybindings/keybindings.vim<cr>
-nnoremap <leader>et :set expandtab<cr>
-nnoremap <leader>ff :find *
-nnoremap <leader>lo :lopen<cr>
-nnoremap <leader>ls :ldo<space>s/
-nnoremap <leader>p :Rg<cr>
-nnoremap <leader>sc :source $XDG_CONFIG_HOME/vim/vimrc<cr>
-nnoremap <leader>so :source %<cr>
-nnoremap <leader>tt :tabnew<cr>
-nnoremap <leader>vg :vimgrep<space>
-" Buffer Creation
-nnoremap <leader>sc :source ~/.config/vim/vimrc<enter>
-nnoremap <leader>ss :split<enter>
-nnoremap <leader>vv :vsplit<enter>
-
-" Accessible completions
-inoremap <c-f> <c-x><c-f>
-inoremap <c-l> <c-x><c-l>
-" Emacs line navigation in insert mode
-inoremap <c-a> <c-o>0
-inoremap <c-e> <c-o>A
-" Behave vim
-nnoremap Y y$
-
-fun! SetupCommandAlias(from, to)
-  exec 'cnoreabbrev <expr> '.a:from
-        \ .' ((getcmdtype() is# ":" && getcmdline() is# "'.a:from.'")'
-        \ .'? ("'.a:to.'") : ("'.a:from.'"))'
-endfun
-call SetupCommandAlias("W","w")
-call SetupCommandAlias("Wq","wq")
-call SetupCommandAlias("man","help")
-
-nnoremap <leader>tl :call ToggleList()<CR>
-nnoremap <leader>bb :call SaveAndBuild()<CR>
-nnoremap <leader>fmv :call FileMvHelper()<CR>
-
-" Quick save and write
-nnoremap <leader>wq :wq<cr>
-nnoremap <leader>ww :w<cr>
-nnoremap <leader>qq :q<cr>
-
-" Fugitive
-nnoremap <space>gd :Gvdiff<CR>
-
-
-" Generate ctags
-map <leader>gt :!sh -c "ctags `rg --files`"<CR>
-set tags+=.git/tags
-
-nnoremap <CR> :noh<CR><CR>:<backspace>
-
-" Plugin keybindings
-source $XDG_CONFIG_HOME/vim/keybindings/vimspector.vim
-source $XDG_CONFIG_HOME/vim/keybindings/markdown.vim
-
-" Development keybindings
-" TODO Have a default build hotkey keybinding, maybe bb,br?
-" And make it based on the project
-" Make it as a filetype plugin. This should cover most cases.
-" Cargo
-nnoremap <leader>cb :Cargo build<cr>
-nnoremap <leader>cr :Cargo run<cr>
-" Markdown
-nnoremap <leader>cc :ChecklistToggleCheckbox<cr>
-
-"ctrlp.vim
-let g:ctrlp_map = '<leader><leader>'
-let g:ctrlp_user_command = ['.git/', 'git --git-dir=%s/.git ls-files -oc --exclude-standard']
-let g:ctrlp_working_path_mode = 'r'
-let g:gutentags_file_list_command = 'rg --files'
-nnoremap <tab><tab> :CtrlPBuffer<cr>
-" vim-fugitive
-nnoremap <leader>gg :Ggrep<space>
-nnoremap <leader>lg :Glgrep<space>
-
diff --git a/.config/vim/keybindings/markdown.vim b/.config/vim/keybindings/markdown.vim
@@ -1,19 +0,0 @@
-autocmd FileType markdown set cursorline
-
-" Hide and format markdown elements like **bold**
-autocmd FileType markdown set conceallevel=2
-
-function QuickUnderline(n)
-	if a:n == 1
-		normal! yypv$r=
-	else
-		normal! yypv$r-
-	endif
-endfunction
-
-function ReverseDate()
-	normal! dt/wwpldeBP
-endfunction
-
-nnoremap <leader>h1 :call QuickUnderline(1)<cr>
-nnoremap <leader>h2 :call QuickUnderline(2)<cr>
diff --git a/.config/vim/keybindings/rust.vim b/.config/vim/keybindings/rust.vim
@@ -1 +0,0 @@
-
diff --git a/.config/vim/keybindings/vimspector.vim b/.config/vim/keybindings/vimspector.vim
@@ -1,25 +0,0 @@
-fun! GotoWindow(id)
-    call win_gotoid(a:id)
-endfun
-
-" Debugger remaps
-nnoremap <leader>dd :call vimspector#Launch()<CR>
-nnoremap <leader>dc :call GotoWindow(g:vimspector_session_windows.code)<CR>
-nnoremap <leader>dt :call GotoWindow(g:vimspector_session_windows.tagpage)<CR>
-nnoremap <leader>dv :call GotoWindow(g:vimspector_session_windows.variables)<CR>
-nnoremap <leader>dw :call GotoWindow(g:vimspector_session_windows.watches)<CR>
-nnoremap <leader>ds :call GotoWindow(g:vimspector_session_windows.stack_trace)<CR>
-nnoremap <leader>do :call GotoWindow(g:vimspector_session_windows.output)<CR>
-nnoremap <leader>de :call vimspector#Reset()<CR>
-
-nnoremap <leader>dtcb :call vimspector#CleanLineBreakpoint()<CR>
-
-nmap <leader>dl <Plug>VimspectorStepInto
-nmap <leader>dj <Plug>VimspectorStepOver
-nmap <leader>dk <Plug>VimspectorStepOut
-nmap <leader>d_ <Plug>VimspectorRestart
-nnoremap <leader>d<space> :call vimspector#Continue()<CR>
-
-nmap <leader>drc <Plug>VimspectorRunToCursor
-nmap <leader>dbp <Plug>VimspectorToggleBreakpoint
-nmap <leader>dcbp <Plug>VimspectorToggleConditionalBreakpoint
diff --git a/.config/vim/plugin/plugin.vim b/.config/vim/plugin/plugin.vim
@@ -6,6 +6,14 @@ function! ToggleList()
 	endif
 endfunction
 
+function! ToggleBackground()
+	if &background == "light"
+		set background=dark
+	else
+		set background=light
+	endif
+endfunction
+
 function! FileMvHelper()
 	:normal! 0i"A"0y$A p0imv j0
 endfunction

@@ -18,3 +26,40 @@ endfunction
 
 " TODO load this automatically
 source $XDG_CONFIG_HOME/vim/ftplugin/cpp.vim
+
+
+" Mail
+set rtp+=~/.local/share/nvim/pack/general/start/himalaya/vim
+
+
+let g:birck_default_chan="irc.libera.chat"
+
+" Strip the newline from the end of a string
+function! Chomp(str)
+  return substitute(a:str, '\n$', '', '')
+endfunction
+
+" Find a file and pass it to cmd
+function! DmenuOpen(cmd)
+  let fname = Chomp(system("git ls-files | dmenu-mac -i -l 20 -p " . a:cmd))
+  if empty(fname)
+    return
+  endif
+  execute a:cmd . " " . fname
+endfunction
+
+" find file in git repo
+function! ChooseFile()
+  let dir = expand("%:h")
+  if empty(dir) | let dir = getcwd() | endif
+
+  let root = system("cd " . dir . " && git rev-parse --show-toplevel")
+  if v:shell_error != 0 | echo "Not in a git repo" | return | endif
+  let root = root[0:-2]
+
+  let selection = system("cd " . root . " && git ls-files -co --exclude-standard | choose")
+  if empty(selection) | echo "Canceled" | return | end
+
+  echo "Finding file..."
+  exec ":e " . root . "/" . selection
+endfunction
diff --git a/.config/vim/vimrc b/.config/vim/vimrc
@@ -39,6 +39,7 @@ set nowrapscan
 filetype plugin indent on
 set tabstop=4
 set shiftwidth=4
+set expandtab
 
 " Netrw customization
 let g:netrw_banner = 0

@@ -49,19 +50,25 @@ set laststatus=1
 
 set lazyredraw
 set ttyfast
+set nospell
+
+set background=dark
+syntax on indent off
 
 " Plugins
 source $XDG_CONFIG_HOME/vim/plugin/plugin.vim
 
 " Keybindings
-source $XDG_CONFIG_HOME/vim/keybindings/keybindings.vim
+source $XDG_CONFIG_HOME/vim/keybindings.vim
+
+" Common vimrc
+source $XDG_DATA_HOME/vimcommon/vimrc
 
 set packpath^=$XDG_DATA_HOME/vim
 
 function! s:load_plugins(t) abort
-	" Use XDG Paths for vim
-	syntax on
 	set synmaxcol=128
+	" Use XDG Paths for vim
 	" TODO compile hard constants somewhere based on OS
 	set runtimepath^='$XDG_CONFIG_HOME/vim'
 	set runtimepath+='$XDG_DATA_HOME/vim'

@@ -75,13 +82,14 @@ function! s:load_plugins(t) abort
 	set directory=$XDG_CACHE_HOME/vim/swap   | call mkdir(&directory, 'p')
 	set undodir=$XDG_CACHE_HOME/vim/undo     | call mkdir(&undodir,   'p')
 	packadd vim-tmux-navigator
-	packadd editorconfig-vim
 	packadd vim-commentary
+	packadd mru
 	packadd vim-surround
 	packadd vim-ninja-feet
 	packadd vim-fugitive
+	packadd vim-unimpaired
 	packadd vim-better-whitespace
-	source $XDG_CONFIG_HOME/vim/hyper-red.vim
+	packadd gruvbox-material
 endfunction
 
 augroup user_cmds
diff --git a/.gitignore b/.gitignore
@@ -14,8 +14,9 @@
 # Config
 !.config/
 
-# Local shell scripts
 !.local/
+
+# Local shell scripts
 !.local/bin/
 # !.local/bin/**
 !.local/bin/cmd/

@@ -23,5 +24,4 @@
 !.local/bin/sh/
 !.local/bin/sh/**
 
-# !.local/share/vim/pack/**/start/**
-# !.local/share/vim/pack/**/opt/**
+!.local/share/
diff --git a/.gitmodules b/.gitmodules
@@ -1,102 +1,93 @@
-[submodule ".local/share/vim/pack/development/opt/rust.vim"]
-	path = .local/share/vim/pack/development/opt/rust.vim
-	url = https://git::@github.com/rust-lang/rust.vim.git
 [submodule ".local/share/vim/pack/development/opt/vim-cmake"]
-	path = .local/share/vim/pack/development/opt/vim-cmake
+	path = .local/share/vimcommon/pack/dev/opt/vim-cmake
 	url = https://git::@github.com/cdelledonne/vim-cmake.git
 [submodule ".local/share/vim/pack/development/opt/vim-msbuild"]
-	path = .local/share/vim/pack/development/opt/vim-msbuild
+	path = .local/share/vimcommon/pack/dev/opt/vim-msbuild
 	url = https://git::@github.com/heaths/vim-msbuild.git
-[submodule ".local/share/vim/pack/development/opt/emmet-vim"]
-	path = .local/share/vim/pack/development/opt/emmet-vim
-	url = https://github.com/mattn/emmet-vim
-[submodule ".local/share/vim/pack/general/opt/editorconfig-vim"]
-	path = .local/share/vim/pack/general/opt/editorconfig-vim
-	url = https://git::@github.com/editorconfig/editorconfig-vim.git
 [submodule ".local/share/vim/pack/general/opt/vim-better-whitespace"]
 	path = .local/share/vim/pack/general/opt/vim-better-whitespace
 	url = https://git::@github.com/ntpeters/vim-better-whitespace.git
-[submodule ".local/share/vim/pack/general/opt/vim-codepainter"]
-	path = .local/share/vim/pack/general/opt/vim-codepainter
-	url = https://git::@github.com/lpinilla/vim-codepainter.git
 [submodule ".local/share/vim/pack/general/opt/vim-commentary"]
 	path = .local/share/vim/pack/general/opt/vim-commentary
 	url = https://git::@github.com/tpope/vim-commentary.git
 [submodule ".local/share/vim/pack/general/opt/vim-surround"]
-	path = .local/share/vim/pack/general/opt/vim-surround
+	path = .local/share/vimcommon/pack/general/start/vim-surround
 	url = https://git::@github.com/tpope/vim-surround.git
-[submodule ".local/share/vim/pack/general/opt/vim-easymotion"]
-	path = .local/share/vim/pack/general/opt/vim-easymotion
-	url = https://git::@github.com/easymotion/vim-easymotion.git
 [submodule ".local/share/vim/pack/general/opt/vim-fugitive"]
-	path = .local/share/vim/pack/general/opt/vim-fugitive
+	path = .local/share/vimcommon/pack/general/opt/vim-fugitive
 	url = https://git::@github.com/tpope/vim-fugitive.git
 [submodule ".local/share/vim/pack/general/opt/vim-ninja-feet"]
-	path = .local/share/vim/pack/general/opt/vim-ninja-feet
+	path = .local/share/vimcommon/pack/general/opt/vim-ninja-feet
 	url = https://git::@github.com/tommcdo/vim-ninja-feet.git
-[submodule ".local/share/vim/pack/general/opt/vim-textobj-user"]
-	path = .local/share/vim/pack/general/opt/vim-textobj-user
-	url = https://git::@github.com/kana/vim-textobj-user.git
-[submodule ".local/share/vim/pack/general/opt/vim-textobj-xmlattr"]
-	path = .local/share/vim/pack/general/opt/vim-textobj-xmlattr
-	url = https://git::@github.com/whatyouhide/vim-textobj-xmlattr.git
 [submodule ".local/share/vim/pack/themes/start/gruvbox-material"]
-	path = .local/share/vim/pack/themes/start/gruvbox-material
+	path = .local/share/vimcommon/pack/themes/opt/gruvbox-material
 	url = https://git::@github.com/sainnhe/gruvbox-material.git
-[submodule ".local/share/nvim/pack/general/start/nvim-lspconfig"]
-	path = .local/share/nvim/pack/general/start/nvim-lspconfig
-	url = https://github.com/neovim/nvim-lspconfig
 [submodule ".local/share/vim/pack/general/start/vim-unimpaired"]
-	path = .local/share/vim/pack/general/start/vim-unimpaired
+	path = .local/share/vimcommon/pack/general/opt/vim-unimpaired
 	url = https://github.com/tpope/vim-unimpaired
 [submodule ".local/share/vim/pack/general/start/vim-repeat"]
-	path = .local/share/vim/pack/general/start/vim-repeat
+	path = .local/share/vimcommon/pack/general/start/vim-repeat
 	url = https://git::@github.com/tpope/vim-repeat.git
 [submodule ".local/share/vim/pack/general/start/vim-tmux-navigator"]
-	path = .local/share/vim/pack/general/start/vim-tmux-navigator
+	path = .local/share/vimcommon/pack/general/opt/vim-tmux-navigator
 	url = https://github.com/christoomey/vim-tmux-navigator
 [submodule ".local/share/vim/pack/general/start/vim-dispatch"]
-	path = .local/share/vim/pack/general/start/vim-dispatch
+	path = .local/share/vimcommon/pack/general/start/vim-dispatch
 	url = https://github.com/tpope/vim-dispatch
 [submodule ".local/share/vim/pack/general/start/mru"]
-	path = .local/share/vim/pack/general/start/mru
+	path = .local/share/vimcommon/pack/general/opt/mru
 	url = https://github.com/yegappan/mru
-[submodule ".local/share/vim/pack/general/start/ctrlp.vim"]
-	path = .local/share/vim/pack/general/start/ctrlp.vim
-	url = https://github.com/kien/ctrlp.vim
-[submodule ".local/share/nvim/pack/general/start/telescope.nvim"]
-	path = .local/share/nvim/pack/general/start/telescope.nvim
-	url = https://github.com/nvim-telescope/telescope.nvim
-[submodule ".local/share/nvim/pack/general/start/plenary.nvim"]
-	path = .local/share/nvim/pack/general/start/plenary.nvim
-	url = https://github.com/nvim-lua/plenary.nvim
-[submodule ".local/share/nvim/pack/general/start/vim-dispatch"]
-	path = .local/share/nvim/pack/general/start/vim-dispatch
-	url = https://github.com/tpope/vim-dispatch
 [submodule ".local/share/nvim/pack/general/start/vim-dispatch-neovim"]
 	path = .local/share/nvim/pack/general/start/vim-dispatch-neovim
 	url = https://github.com/radenling/vim-dispatch-neovim
-[submodule ".local/share/nvim/pack/general/start/vim-tmux-navigator"]
-	path = .local/share/nvim/pack/general/start/vim-tmux-navigator
-	url = https://github.com/christoomey/vim-tmux-navigator
 [submodule ".local/share/nvim/pack/development/start/nvim-dap"]
-	path = .local/share/nvim/pack/development/start/nvim-dap
+	path = .local/share/nvim/pack/dev/opt/nvim-dap
 	url = https://github.com/mfussenegger/nvim-dap
 [submodule ".local/share/nvim/pack/general/start/nvim-comment"]
 	path = .local/share/nvim/pack/general/start/nvim-comment
 	url = https://github.com/terrortylor/nvim-comment
 [submodule ".local/share/nvim/pack/development/opt/vimspector"]
-	path = .local/share/nvim/pack/development/opt/vimspector
+	path = .local/share/vimcommon/pack/dev/opt/vimspector
 	url = https://github.com/puremourning/vimspector
 [submodule ".local/share/vim/pack/general/start/vim-checklist"]
-	path = .local/share/vim/pack/general/start/vim-checklist
+	path = .local/share/vimcommon/pack/general/start/vim-checklist
 	url = https://github.com/evansalter/vim-checklist
-[submodule ".local/share/nvim/pack/general/opt/vim-fugitive"]
-	path = .local/share/nvim/pack/general/opt/vim-fugitive
-	url = https://git::@github.com/tpope/vim-fugitive.git
-[submodule ".local/share/nvim/pack/general/start/vim-unimpaired"]
-	path = .local/share/nvim/pack/general/start/vim-unimpaired
-	url = https://github.com/tpope/vim-unimpaired
-[submodule ".local/share/nvim/pack/themes/start/gruvbox-material"]
-	path = .local/share/nvim/pack/themes/start/gruvbox-material
-	url = https://git::@github.com/sainnhe/gruvbox-material.git
+[submodule ".config/nvim/vim-vinegar"]
+	path = .config/nvim/vim-vinegar
+	url = https://github.com/tpope/vim-vinegar
+[submodule ".local/share/nvim/pack/general/start/vim-vinegar"]
+	path = .local/share/vimcommon/pack/general/start/vim-vinegar
+	url = https://github.com/tpope/vim-vinegar
+[submodule ".local/share/vim/pack/general/opt/birck.vim"]
+	path = .local/share/vimcommon/pack/general/opt/birck.vim
+	url = https://git.sr.ht/~torresjrjr/birck.vim
+[submodule ".local/share/vim/pack/general/opt/vim-maildir"]
+	path = .local/share/vim/pack/general/opt/vim-maildir
+	url = https://github.com/ferranpm/vim-maildir
+[submodule ".local/share/vimcommon/pack/general/start/vim-minisnip"]
+	path = .local/share/vimcommon/pack/general/start/vim-minisnip
+	url = https://github.com/joereynolds/vim-minisnip/
+[submodule ".local/share/vimcommon/pack/dev/opt/clang_complete"]
+	path = .local/share/vimcommon/pack/dev/opt/clang_complete
+	url = https://github.com/xavierd/clang_complete
+[submodule ".local/share/vimcommon/pack/dev/opt/swift.vim"]
+	path = .local/share/vimcommon/pack/dev/opt/swift.vim
+	url = https://github.com/keith/swift.vim
+[submodule ".local/share/vimcommon/pack/dev/opt/tagbar"]
+	path = .local/share/vimcommon/pack/dev/opt/tagbar
+	url = https://github.com/preservim/tagbar
+[submodule ".local/share/vimcommon/pack/general/start/vim-pbxproj"]
+	path = .local/share/vimcommon/pack/general/start/vim-pbxproj
+	url = https://github.com/cfdrake/vim-pbxproj
+[submodule ".local/share/vimcommon/pack/dev/opt/vim-submode"]
+	path = .local/share/vimcommon/pack/general/start/vim-submode
+	url = https://github.com/kana/vim-submode
+[submodule ".local/share/vimcommon/pack/dev/opt/xcodebuild.vim"]
+	path = .local/share/vimcommon/pack/dev/opt/xcodebuild.vim
+	url = https://github.com/jerrymarino/xcodebuild.vim
+[submodule ".local/share/nvim/pack/dev/opt/nvim-dap-ui"]
+	path = .local/share/nvim/pack/dev/opt/nvim-dap-ui
+	url = https://github.com/rcarriga/nvim-dap-ui
+[submodule ".local/share/vimcommon/pack/dev/opt/vim-xcode"]
+	path = .local/share/vimcommon/pack/dev/opt/vim-xcode
+	url = https://github.com/gfontenot/vim-xcode
diff --git a/.local/bin/call b/.local/bin/bash/call
diff --git a/.local/bin/sh/cam b/.local/bin/sh/cam
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+ffplay -f avfoundation -i 1:0 -video_size 1280x720 -framerate 30
diff --git a/.local/bin/sh/irc b/.local/bin/sh/irc
@@ -0,0 +1,25 @@
+#!/bin/sh
+
+test -z "${FUZZER}" && { printf "FUZZER not set\n"; exit 1; }
+
+CHATS="irc.freenode.net\nirc.libera.chat"
+
+startii() {
+	pick=`echo ${CHATS} | ${FUZZER}`
+	ii -s "${pick}" -n $IRC_NICK &
+}
+
+startvim() {
+	vim "+packadd birck.vim | Birck"
+}
+
+
+iipid="$(pgrep ii)"
+
+if [ -n "${iipid}" ]; then
+	printf "ii is already running with pid: %s\n" "${iipid}"
+else
+	startii
+fi
+
+startvim
diff --git a/.local/bin/sh/ncp b/.local/bin/sh/ncp
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Copies the given file over a server.
+# 0x0.st is used for copying.
+# WARNING: Don't use this for sensitive files.
+if [ $# -ne 1 ]; then
+	printf "Usage: %s <file_to_upload>\n" "$0"
+	exit 1
+fi
+file_to_upload="$1"
+curl -F "file=@$file_to_upload" https://0x0.st
diff --git a/.local/share/.gitignore b/.local/share/.gitignore
@@ -1,2 +1,17 @@
+!vim/
 !vim/pack/
 !vim/pack/*
+
+!nvim/
+!nvim/pack/
+!nvim/pack/**
+
+
+!vimcommon/
+!vimcommon/*
+!vimcommon/pack/
+!vimcommon/pack/**
+!vimcommon/minisnip/
+!vimcommon/minisnip/*
+
+tags
diff --git a/.local/share/nvim/pack/dev/opt/nvim-dap b/.local/share/nvim/pack/dev/opt/nvim-dap
@@ -0,0 +1 @@
+Subproject commit d2fcb949cd25fcdee0481a79672297082fc6c39e
diff --git a/.local/share/nvim/pack/dev/opt/nvim-dap-ui b/.local/share/nvim/pack/dev/opt/nvim-dap-ui
@@ -0,0 +1 @@
+Subproject commit 0f385f7f5268f408a546772c049271121b0d71c9
diff --git a/.local/share/nvim/pack/development/opt/vimspector b/.local/share/nvim/pack/development/opt/vimspector
@@ -1 +0,0 @@
-Subproject commit a17d1e12450d3a2e55bb442a1091a1cff99bc5e2
diff --git a/.local/share/nvim/pack/development/start/nvim-dap b/.local/share/nvim/pack/development/start/nvim-dap
@@ -1 +0,0 @@
-Subproject commit d2fcb949cd25fcdee0481a79672297082fc6c39e
diff --git a/.local/share/nvim/pack/general/opt/vim-fugitive b/.local/share/nvim/pack/general/opt/vim-fugitive
@@ -1 +0,0 @@
-Subproject commit 9a13fc87c4ab83ea81e71ccad9b846a5eb31a998
diff --git a/.local/share/nvim/pack/general/start/nvim-lspconfig b/.local/share/nvim/pack/general/start/nvim-lspconfig
@@ -1 +0,0 @@
-Subproject commit 54181ddb2709a4cd594e29bf82343c79196ec0c6
diff --git a/.local/share/nvim/pack/general/start/plenary.nvim b/.local/share/nvim/pack/general/start/plenary.nvim
@@ -1 +0,0 @@
-Subproject commit 986ad71ae930c7d96e812734540511b4ca838aa2
diff --git a/.local/share/nvim/pack/general/start/telescope.nvim b/.local/share/nvim/pack/general/start/telescope.nvim
@@ -1 +0,0 @@
-Subproject commit b5833a682c511885887373aad76272ad70f7b3c2
diff --git a/.local/share/nvim/pack/general/start/vim-dispatch b/.local/share/nvim/pack/general/start/vim-dispatch
@@ -1 +0,0 @@
-Subproject commit 00e77d90452e3c710014b26dc61ea919bc895e92
diff --git a/.local/share/nvim/pack/general/start/vim-tmux-navigator b/.local/share/nvim/pack/general/start/vim-tmux-navigator
@@ -1 +0,0 @@
-Subproject commit 9ca5bfe5bd274051b5dd796cc150348afc993b80
diff --git a/.local/share/nvim/pack/general/start/vim-unimpaired b/.local/share/nvim/pack/general/start/vim-unimpaired
@@ -1 +0,0 @@
-Subproject commit efdc6475f7ea789346716dabf9900ac04ee8604a
diff --git a/.local/share/nvim/pack/themes/start/gruvbox-material b/.local/share/nvim/pack/themes/start/gruvbox-material
@@ -1 +0,0 @@
-Subproject commit d4d5731854b5b029d33130748e33a654c216bfb4
diff --git a/.local/share/vim/pack/development/opt/emmet-vim b/.local/share/vim/pack/development/opt/emmet-vim
@@ -1 +0,0 @@
-Subproject commit 1b7e460de071b7ed45cae3b5bec47310e7d12ed5
diff --git a/.local/share/vim/pack/development/opt/rust.vim b/.local/share/vim/pack/development/opt/rust.vim
@@ -1 +0,0 @@
-Subproject commit c06a17151c69b9d61e60a28274932a28fd37c453
diff --git a/.local/share/vim/pack/development/opt/vim-cmake b/.local/share/vim/pack/development/opt/vim-cmake
@@ -1 +0,0 @@
-Subproject commit 844b85677d52d932432eb115236d9173ebe3664d
diff --git a/.local/share/vim/pack/development/opt/vim-msbuild b/.local/share/vim/pack/development/opt/vim-msbuild
@@ -1 +0,0 @@
-Subproject commit 4766d9a225c433e7ce2625bcc6263bfd028c4a50
diff --git a/.local/share/vim/pack/general/opt/editorconfig-vim b/.local/share/vim/pack/general/opt/editorconfig-vim
@@ -1 +0,0 @@
-Subproject commit 3078cd10b28904e57d878c0d0dab42aa0a9fdc89
diff --git a/.local/share/vim/pack/general/opt/vim-codepainter b/.local/share/vim/pack/general/opt/vim-codepainter
@@ -1 +0,0 @@
-Subproject commit 1ae0ee4f48e7e196ef90bc84ecbc56cad231e9df
diff --git a/.local/share/vim/pack/general/opt/vim-easymotion b/.local/share/vim/pack/general/opt/vim-easymotion
@@ -1 +0,0 @@
-Subproject commit d75d9591e415652b25d9e0a3669355550325263d
diff --git a/.local/share/vim/pack/general/opt/vim-fugitive b/.local/share/vim/pack/general/opt/vim-fugitive
@@ -1 +0,0 @@
-Subproject commit 6f07d7e6cd23b7a76dc461fdfb1984717d233806
diff --git a/.local/share/vim/pack/general/opt/vim-maildir b/.local/share/vim/pack/general/opt/vim-maildir
@@ -0,0 +1 @@
+Subproject commit 5fffc4b5ef0059dc07ed06970d7b14a581a3e35c
diff --git a/.local/share/vim/pack/general/opt/vim-ninja-feet b/.local/share/vim/pack/general/opt/vim-ninja-feet
@@ -1 +0,0 @@
-Subproject commit cb9b448dd468a338255aed474e6113ed115612c1
diff --git a/.local/share/vim/pack/general/opt/vim-surround b/.local/share/vim/pack/general/opt/vim-surround
@@ -1 +0,0 @@
-Subproject commit f51a26d3710629d031806305b6c8727189cd1935
diff --git a/.local/share/vim/pack/general/opt/vim-textobj-user b/.local/share/vim/pack/general/opt/vim-textobj-user
@@ -1 +0,0 @@
-Subproject commit 41a675ddbeefd6a93664a4dc52f302fe3086a933
diff --git a/.local/share/vim/pack/general/opt/vim-textobj-xmlattr b/.local/share/vim/pack/general/opt/vim-textobj-xmlattr
@@ -1 +0,0 @@
-Subproject commit 694a297f1d75fd527e87da9769f3c6519a87ebb1
diff --git a/.local/share/vim/pack/general/start/ctrlp.vim b/.local/share/vim/pack/general/start/ctrlp.vim
@@ -1 +0,0 @@
-Subproject commit 564176f01d7f3f7f8ab452ff4e1f5314de7b0981
diff --git a/.local/share/vim/pack/general/start/mru b/.local/share/vim/pack/general/start/mru
@@ -1 +0,0 @@
-Subproject commit 8e8220a005d070dbd01caae86e3139d83fc444c4
diff --git a/.local/share/vim/pack/general/start/vim-checklist b/.local/share/vim/pack/general/start/vim-checklist
@@ -1 +0,0 @@
-Subproject commit a63f22fdd1acfff7f4db3f79641135b9dc9a36fb
diff --git a/.local/share/vim/pack/general/start/vim-dispatch b/.local/share/vim/pack/general/start/vim-dispatch
@@ -1 +0,0 @@
-Subproject commit 00e77d90452e3c710014b26dc61ea919bc895e92
diff --git a/.local/share/vim/pack/general/start/vim-repeat b/.local/share/vim/pack/general/start/vim-repeat
@@ -1 +0,0 @@
-Subproject commit 24afe922e6a05891756ecf331f39a1f6743d3d5a
diff --git a/.local/share/vim/pack/general/start/vim-tmux-navigator b/.local/share/vim/pack/general/start/vim-tmux-navigator
@@ -1 +0,0 @@
-Subproject commit 9ca5bfe5bd274051b5dd796cc150348afc993b80
diff --git a/.local/share/vim/pack/general/start/vim-unimpaired b/.local/share/vim/pack/general/start/vim-unimpaired
@@ -1 +0,0 @@
-Subproject commit e4006d68cd4f390efef935bc09be0ce3bd022e72
diff --git a/.local/share/vim/pack/themes/start/gruvbox-material b/.local/share/vim/pack/themes/start/gruvbox-material
@@ -1 +0,0 @@
-Subproject commit fb27ccbd20cc1eda04e181f22c722977bdf9c934
diff --git a/.local/share/vimcommon/minisnip/_c_i b/.local/share/vimcommon/minisnip/_c_i
@@ -0,0 +1 @@
+#include <{{++}}.{{+h+}}>
diff --git a/.local/share/vimcommon/minisnip/_c_main b/.local/share/vimcommon/minisnip/_c_main
@@ -0,0 +1,4 @@
+int main(int argc, char* argv[]) {
+	{{++}}
+	return 0;
+}
diff --git a/.local/share/vimcommon/minisnip/_c_p b/.local/share/vimcommon/minisnip/_c_p
@@ -0,0 +1 @@
+printf("{{+%s\n+}}", {{++}});
diff --git a/.local/share/vimcommon/minisnip/_cmake_min b/.local/share/vimcommon/minisnip/_cmake_min
@@ -0,0 +1,5 @@
+cmake_minimum_required(VERSION {{++}})
+
+project({{++}})
+
+add_executable({{++}} PUBLIC {{++}})
diff --git a/.local/share/vimcommon/minisnip/_cmake_p b/.local/share/vimcommon/minisnip/_cmake_p
@@ -0,0 +1 @@
+messages({{++}})
diff --git a/.local/share/vimcommon/minisnip/_cpp_cout b/.local/share/vimcommon/minisnip/_cpp_cout
@@ -0,0 +1 @@
+std::cout << {{++}} << std::endl;
diff --git a/.local/share/vimcommon/minisnip/_java_main b/.local/share/vimcommon/minisnip/_java_main
@@ -0,0 +1,3 @@
+public static void main(String args[]) {
+    {{++}}
+}
diff --git a/.local/share/vimcommon/minisnip/_java_p b/.local/share/vimcommon/minisnip/_java_p
@@ -0,0 +1 @@
+System.out.print({{++}});
diff --git a/.local/share/vimcommon/minisnip/_sh_p b/.local/share/vimcommon/minisnip/_sh_p
@@ -0,0 +1 @@
+printf "{{+%s\n+}}" {{+""+}}
diff --git a/.local/share/vimcommon/pack/dev/opt/clang_complete b/.local/share/vimcommon/pack/dev/opt/clang_complete
@@ -0,0 +1 @@
+Subproject commit e25b6a54e5cf648eb36d5be5b82c1bbb22260fde
diff --git a/.local/share/vimcommon/pack/dev/opt/swift.vim b/.local/share/vimcommon/pack/dev/opt/swift.vim
@@ -0,0 +1 @@
+Subproject commit 3e0529e1a97e3da24aabd18daf8ed92c6da8c68b
diff --git a/.local/share/vimcommon/pack/dev/opt/tagbar b/.local/share/vimcommon/pack/dev/opt/tagbar
@@ -0,0 +1 @@
+Subproject commit 83933d557409639df53fd2ca21484279b5854c1e
diff --git a/.local/share/vimcommon/pack/dev/opt/vim-cmake b/.local/share/vimcommon/pack/dev/opt/vim-cmake
@@ -0,0 +1 @@
+Subproject commit 844b85677d52d932432eb115236d9173ebe3664d
diff --git a/.local/share/vimcommon/pack/dev/opt/vim-msbuild b/.local/share/vimcommon/pack/dev/opt/vim-msbuild
@@ -0,0 +1 @@
+Subproject commit 4766d9a225c433e7ce2625bcc6263bfd028c4a50
diff --git a/.local/share/vimcommon/pack/dev/opt/vim-xcode b/.local/share/vimcommon/pack/dev/opt/vim-xcode
@@ -0,0 +1 @@
+Subproject commit 2adc409bd7bb58499218f4f487c825e55306e46d
diff --git a/.local/share/vimcommon/pack/dev/opt/vimspector b/.local/share/vimcommon/pack/dev/opt/vimspector
@@ -0,0 +1 @@
+Subproject commit 5c328b513485675c061558d2f25a98ee503cb243
diff --git a/.local/share/vimcommon/pack/dev/opt/xcodebuild.vim b/.local/share/vimcommon/pack/dev/opt/xcodebuild.vim
@@ -0,0 +1 @@
+Subproject commit d62fa4cf952b4b8a1650778bdec284c35e468279
diff --git a/.local/share/vimcommon/pack/general/opt/birck.vim b/.local/share/vimcommon/pack/general/opt/birck.vim
@@ -0,0 +1 @@
+Subproject commit e316a915b34f42f448966df7f79d10d8a49706c5
diff --git a/.local/share/vimcommon/pack/general/opt/mru b/.local/share/vimcommon/pack/general/opt/mru
@@ -0,0 +1 @@
+Subproject commit 8e8220a005d070dbd01caae86e3139d83fc444c4
diff --git a/.local/share/vimcommon/pack/general/opt/vim-fugitive b/.local/share/vimcommon/pack/general/opt/vim-fugitive
@@ -0,0 +1 @@
+Subproject commit 6f07d7e6cd23b7a76dc461fdfb1984717d233806
diff --git a/.local/share/vimcommon/pack/general/opt/vim-ninja-feet b/.local/share/vimcommon/pack/general/opt/vim-ninja-feet
@@ -0,0 +1 @@
+Subproject commit cb9b448dd468a338255aed474e6113ed115612c1
diff --git a/.local/share/vimcommon/pack/general/opt/vim-tmux-navigator b/.local/share/vimcommon/pack/general/opt/vim-tmux-navigator
@@ -0,0 +1 @@
+Subproject commit afb45a55b452b9238159047ce7c6e161bd4a9907
diff --git a/.local/share/vimcommon/pack/general/opt/vim-unimpaired b/.local/share/vimcommon/pack/general/opt/vim-unimpaired
@@ -0,0 +1 @@
+Subproject commit e4006d68cd4f390efef935bc09be0ce3bd022e72
diff --git a/.local/share/vimcommon/pack/general/start/vim-checklist b/.local/share/vimcommon/pack/general/start/vim-checklist
@@ -0,0 +1 @@
+Subproject commit a63f22fdd1acfff7f4db3f79641135b9dc9a36fb
diff --git a/.local/share/vimcommon/pack/general/start/vim-dispatch b/.local/share/vimcommon/pack/general/start/vim-dispatch
@@ -0,0 +1 @@
+Subproject commit 00e77d90452e3c710014b26dc61ea919bc895e92
diff --git a/.local/share/vimcommon/pack/general/start/vim-minisnip b/.local/share/vimcommon/pack/general/start/vim-minisnip
@@ -0,0 +1 @@
+Subproject commit 1897727298c658dde9ec9deda0e56b608c8b2f32
diff --git a/.local/share/vimcommon/pack/general/start/vim-pbxproj b/.local/share/vimcommon/pack/general/start/vim-pbxproj
@@ -0,0 +1 @@
+Subproject commit d230f2cc70faf47ec0b97ffefa8235991438aca8
diff --git a/.local/share/vimcommon/pack/general/start/vim-repeat b/.local/share/vimcommon/pack/general/start/vim-repeat
@@ -0,0 +1 @@
+Subproject commit 24afe922e6a05891756ecf331f39a1f6743d3d5a
diff --git a/.local/share/vimcommon/pack/general/start/vim-submode b/.local/share/vimcommon/pack/general/start/vim-submode
@@ -0,0 +1 @@
+Subproject commit d29de4f55c40a7a03af1d8134453a703d6affbd2
diff --git a/.local/share/vimcommon/pack/general/start/vim-surround b/.local/share/vimcommon/pack/general/start/vim-surround
@@ -0,0 +1 @@
+Subproject commit f51a26d3710629d031806305b6c8727189cd1935
diff --git a/.local/share/vimcommon/pack/general/start/vim-vinegar b/.local/share/vimcommon/pack/general/start/vim-vinegar
@@ -0,0 +1 @@
+Subproject commit bb1bcddf43cfebe05eb565a84ab069b357d0b3d6
diff --git a/.local/share/vimcommon/pack/themes/opt/gruvbox-material b/.local/share/vimcommon/pack/themes/opt/gruvbox-material
@@ -0,0 +1 @@
+Subproject commit 2807579bd0a9981575dbb518aa65d3206f04ea02
diff --git a/.local/share/vimcommon/vimrc b/.local/share/vimcommon/vimrc
@@ -0,0 +1,5 @@
+set packpath^=$XDG_DATA_HOME/vimcommon
+
+let g:minisnip_dir=$XDG_DATA_HOME . '/vimcommon/minisnip'
+
+source $XDG_CONFIG_HOME/vim/hyper-red.vim
diff --git a/.profile b/.profile
@@ -99,4 +99,5 @@ chance "${XDG_CONFIG_HOME}/sh/unstaged"
 export LESS_TERMCAP_us=$'\E[0;31m'
 export LESS_TERMCAP_ue=$'\E[0m'
 export CLICOLOR=1
-export LSCOLORS="hxgxfxxxbxxxxxxxxxxxxx"
+export LSCOLORS="xxexcxdxbxegxdxbagxcxd"
+export LS_COLORS="di=0:ln=34:so=32:pi=33:ex=31:bd=34;46:cd=0;43:su=0;41:sg=30;46:tw=0;42:ow=0;43"