repos / dotfiles

my dotfiles

commit
06677c6
parent
06677c6
author
Eric Bower
date
2024-08-24 23:38:28 -0400 EDT
feat: init
57 files changed,  +3969, -0
A mblaze
A npmrc
A zshrc
A .gitignore
+2, -0
1@@ -0,0 +1,2 @@
2+*DS_Store
3+*.swp
A bin/backup
+9, -0
 1@@ -0,0 +1,9 @@
 2+#!/usr/bin/env bash
 3+
 4+docker run --rm -it \
 5+	-v /home:/mnt/source/home:ro \
 6+	-v /etc:/mnt/source/etc:ro \
 7+	-v /home/erock/dev/dev/borg/config_fox.yaml:/etc/borgmatic.d/config.yaml \
 8+	-v /home/erock/dev/dev/borg/crontab.txt:/etc/borgmatic.d/crontab.txt \
 9+	-e TZ=America/Detroit \
10+	borgmatic borgmatic --create --prune --stats -v 2 2>&1
A bin/ecare
+3, -0
1@@ -0,0 +1,3 @@
2+#!/usr/bin/env bash
3+
4+exec magrep -i from:"lilac lane" | mrefile $MDIR/Family
A bin/ehtml
+10, -0
 1@@ -0,0 +1,10 @@
 2+#!/bin/sh
 3+# aerc filter which runs w3m using socksify (from the dante package) to prevent
 4+# any phoning home by rendered emails
 5+export SOCKS_SERVER="127.0.0.1:1"
 6+exec socksify w3m \
 7+	-T text/html \
 8+	-cols $(tput cols) \
 9+	-o display_image=false \
10+	-o display_link_number=true \
11+  -o confirm_qq=false
A bin/einc
+3, -0
1@@ -0,0 +1,3 @@
2+#!/usr/bin/env bash
3+
4+exec minc $MDIR/INBOX
A bin/eread
+3, -0
1@@ -0,0 +1,3 @@
2+#!/usr/bin/env bash
3+
4+exec mflag -S | mless
A bin/github-pr
+13, -0
 1@@ -0,0 +1,13 @@
 2+#!/usr/bin/env bash
 3+
 4+help() {
 5+  echo "github-pr.sh <REMOTE> <PR-ID> <NEW-BRANCH>"
 6+}
 7+
 8+if [ $# -eq 0 ]; then
 9+  help
10+  exit
11+fi
12+
13+git fetch $1 pull/$2/head:$3
14+git checkout $3
A bin/gpg_reset
+6, -0
1@@ -0,0 +1,6 @@
2+#!/usr/bin/env sh
3+
4+pkill -9 gpg-agent
5+export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)
6+gpgconf --launch gpg-agent
7+gpg-connect-agent updatestartuptty /bye
A bin/load_keys
+16, -0
 1@@ -0,0 +1,16 @@
 2+#!/usr/bin/env bash
 3+set -x
 4+
 5+chmod 700 ~/.ssh
 6+chmod 644 ~/.ssh/id_ed25519.pub
 7+chmod 600 ~/.ssh/id_ed25519
 8+ssh-add -k
 9+
10+#chmod 600 ~/.gnupg/*
11+chmod 700 ~/.gnupg
12+gpg --import ./keys/gpg_private.asc
13+gpg --list-secret-keys
14+expect -c "spawn gpg --edit-key 6A690E9AAD5A2AF29B2BBBD77A51A47D76D3FD02 trust quit; send \"5\ry\r\"; expect eof"
15+# echo "RUN gpg --edit-key {KEY}"
16+# echo "TYPE 'trust' AND THEN PRESS '5' AND THEN 'y'"
17+# echo "THEN type 'quit'"
A bin/mailsync
+6, -0
1@@ -0,0 +1,6 @@
2+#!/usr/bin/env bash
3+
4+echo "Syncing imap mail"
5+mbsync -a -V -q
6+
7+exit 0
A bin/setup_fresh
+10, -0
 1@@ -0,0 +1,10 @@
 2+#!/usr/bin/env bash
 3+set -x
 4+
 5+#source ./load_keys.sh
 6+
 7+# tpm
 8+git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
 9+
10+nvim --headless "+Lazy! sync" +qa
11+~/.tmux/plugins/tpm/bin/install_plugins
A bin/vdirsyncer
+4, -0
1@@ -0,0 +1,4 @@
2+#!/usr/bin/env bash
3+set +x
4+
5+vdirsyncer sync
A config/aerc/accounts.conf
+9, -0
 1@@ -0,0 +1,9 @@
 2+[Personal]
 3+source   = maildir:///home/erock/mail
 4+exclude-tags = Trash
 5+outgoing = smtps+plain://me%40erock.io@smtp.fastmail.com
 6+outgoing-cred-cmd = "pass logins/local-mail"
 7+default  = INBOX
 8+from     = Eric Bower <me@erock.io>
 9+copy-to  = Sent
10+
A config/aerc/aerc.conf
+31, -0
 1@@ -0,0 +1,31 @@
 2+[ui]
 3+index-columns = date<*,name<17,flags>4,subject<*
 4+column-name = {{index (.From | names) 0}}
 5+column-flags = {{.Flags | join ""}}
 6+column-subject = {{.ThreadPrefix}}{{.Subject}}
 7+column-date = {{.DateAutoFormat .Date.Local}}
 8+
 9+dirlist-left = {{.Folder}}
10+dirlist-right = {{if .Unread}}{{humanReadable .Unread}}/{{end}}{{if .Exists}}{{humanReadable .Exists}}{{end}}
11+
12+[viewer]
13+
14+[compose]
15+address-book-cmd=khard email --remove-first-line --parsable '%s'
16+
17+[filters]
18+text/plain=colorize
19+text/calendar=calendar
20+message/delivery-status=colorize
21+message/rfc822=colorize
22+#text/html=pandoc -f html -t plain | colorize
23+#text/html=html | colorize
24+#text/*=bat -fP --file-name="$AERC_FILENAME"
25+#application/x-sh=bat -fP -l sh
26+#image/*=catimg -w $(tput cols) -
27+#subject,~Git(hub|lab)=lolcat -f
28+#from,thatguywhodoesnothardwraphismessages=wrap -w 100 | colorize
29+
30+[triggers]
31+
32+[templates]
A config/aerc/binds.conf
+103, -0
  1@@ -0,0 +1,103 @@
  2+# Binds are of the form <key sequence> = <command to run>
  3+# To use '=' in a key sequence, substitute it with "Eq": "<Ctrl+Eq>"
  4+# If you wish to bind #, you can wrap the key sequence in quotes: "#" = quit
  5+<C-p> = :prev-tab<Enter>
  6+<C-n> = :next-tab<Enter>
  7+<C-t> = :term<Enter>
  8+
  9+[messages]
 10+q = :quit<Enter>
 11+
 12+j = :next<Enter>
 13+<Down> = :next<Enter>
 14+<C-d> = :next 50%<Enter>
 15+<C-f> = :next 100%<Enter>
 16+<PgDn> = :next -s 100%<Enter>
 17+
 18+k = :prev<Enter>
 19+<Up> = :prev<Enter>
 20+<C-u> = :prev 50%<Enter>
 21+<C-b> = :prev 100%<Enter>
 22+<PgUp> = :prev -s 100%<Enter>
 23+g = :select 0<Enter>
 24+G = :select -1<Enter>
 25+
 26+J = :next-folder<Enter>
 27+K = :prev-folder<Enter>
 28+
 29+v = :mark -t<Enter>
 30+V = :mark -v<Enter>
 31+
 32+<Enter> = :view<Enter>
 33+d = :prompt 'Really delete this message?' 'delete-message'<Enter>
 34+D = :delete<Enter>
 35+A = :archive flat<Enter>
 36+
 37+C = :compose<Enter>
 38+
 39+rr = :reply -a<Enter>
 40+rq = :reply -aq<Enter>
 41+Rr = :reply<Enter>
 42+Rq = :reply -q<Enter>
 43+
 44+c = :cf<space>
 45+$ = :term<space>
 46+! = :term<space>
 47+| = :pipe<space>
 48+
 49+/ = :search<space>
 50+\ = :filter<space>
 51+n = :next-result<Enter>
 52+N = :prev-result<Enter>
 53+
 54+[view]
 55+q = :close<Enter>
 56+| = :pipe<space>
 57+D = :delete<Enter>
 58+S = :save<space>
 59+A = :archive flat<Enter>
 60+
 61+f = :forward<Enter>
 62+rr = :reply -a<Enter>
 63+rq = :reply -aq<Enter>
 64+Rr = :reply<Enter>
 65+Rq = :reply -q<Enter>
 66+
 67+H = :toggle-headers<Enter>
 68+<C-k> = :prev-part<Enter>
 69+<C-j> = :next-part<Enter>
 70+J = :next<Enter>
 71+K = :prev<Enter>
 72+
 73+[compose]
 74+# Keybindings used when the embedded terminal is not selected in the compose
 75+# view
 76+$ex = <C-x>
 77+<C-k> = :prev-field<Enter>
 78+<C-j> = :next-field<Enter>
 79+<tab> = :next-field<Enter>
 80+
 81+[compose::editor]
 82+# Keybindings used when the embedded terminal is selected in the compose view
 83+$noinherit = true
 84+$ex = <C-x>
 85+<C-k> = :prev-field<Enter>
 86+<C-j> = :next-field<Enter>
 87+<C-p> = :prev-tab<Enter>
 88+<C-n> = :next-tab<Enter>
 89+
 90+[compose::review]
 91+# Keybindings used when reviewing a message to be sent
 92+y = :send<Enter>
 93+n = :abort<Enter>
 94+p = :postpone<Enter>
 95+q = :abort<Enter>
 96+e = :edit<Enter>
 97+a = :attach<space>
 98+
 99+[terminal]
100+$noinherit = true
101+$ex = <C-x>
102+
103+<C-p> = :prev-tab<Enter>
104+<C-n> = :next-tab<Enter>
A config/alacritty/alacritty.toml
+9, -0
 1@@ -0,0 +1,9 @@
 2+[font]
 3+size = 12.0
 4+
 5+[keyboard]
 6+bindings = [
 7+  { key = "i", mods = "Control", action = "IncreaseFontSize"  },
 8+  { key = "o", mods = "Control", action = "DecreaseFontSize"  },
 9+  { key = "0", mods = "Control", action = "ResetFontSize"     },
10+]
A config/direnv/direnv.toml
+2, -0
1@@ -0,0 +1,2 @@
2+[global]
3+load_dotenv = true
A config/electron-flags.conf
+2, -0
1@@ -0,0 +1,2 @@
2+--enable-features=UseOzonePlatform
3+--ozone-platform=wayland
A config/fish/config.fish
+25, -0
 1@@ -0,0 +1,25 @@
 2+fish_config theme choose "dracula"
 3+
 4+fish_add_path ~/.deno/bin ~/.yarn/bin ~/go/bin ~/.npm-packages/bin ~/bin
 5+
 6+set -xg EDITOR nvim
 7+set -xg VISUAL nvim
 8+set -xg GPG_TTY (tty)
 9+set -xg XDG_CONFIG_HOME ~/.config
10+set -xg VDIRSYNCER_CONFIG ~/.config/vdirsyncer/config
11+set -xg MDIR ~/mail
12+
13+abbr -a gu git remote update --prune
14+abbr -a ga git add -A
15+abbr -a gm git commit -S
16+abbr -a gs git commit -S --amend --no-edit
17+abbr -a gl git --no-pager log --oneline -n 30
18+abbr -a gt git log --graph --oneline --all
19+abbr -a pushall "git remote | xargs git push"
20+abbr -a tmux tmux -u
21+abbr -a scratch nvim ~/scratch.md
22+abbr -a bcp rsync -avzu --progress
23+abbr -a weather curl wttr.in/Ann+Arbor+Michigan
24+abbr -a img img2sixel
25+
26+direnv hook fish | source
A config/fish/themes/dracula.theme
+55, -0
 1@@ -0,0 +1,55 @@
 2+# Dracula Color Palette
 3+#
 4+# Foreground: f8f8f2
 5+# Selection: 44475a
 6+# Comment: 6272a4
 7+# Red: ff5555
 8+# Orange: ffb86c
 9+# Yellow: f1fa8c
10+# Green: 50fa7b
11+# Purple: bd93f9
12+# Cyan: 8be9fd
13+# Pink: ff79c6
14+
15+# Syntax Highlighting Colors
16+fish_color_normal f8f8f2
17+fish_color_command 8be9fd
18+fish_color_keyword ff79c6
19+fish_color_quote f1fa8c
20+fish_color_redirection f8f8f2
21+fish_color_end ffb86c
22+fish_color_error ff5555
23+fish_color_param bd93f9
24+fish_color_comment 6272a4
25+fish_color_selection --background=44475a
26+fish_color_search_match --background=44475a
27+fish_color_operator 50fa7b
28+fish_color_escape ff79c6
29+fish_color_autosuggestion 6272a4
30+fish_color_cancel ff5555 --reverse
31+fish_color_option ffb86c
32+fish_color_history_current --bold
33+fish_color_status ff5555
34+fish_color_valid_path --underline
35+
36+# Default Prompt Colors
37+fish_color_cwd 50fa7b
38+fish_color_cwd_root red
39+fish_color_host bd93f9
40+fish_color_host_remote bd93f9
41+fish_color_user 8be9fd
42+
43+# Completion Pager Colors
44+fish_pager_color_progress 6272a4
45+fish_pager_color_background
46+fish_pager_color_prefix 8be9fd
47+fish_pager_color_completion f8f8f2
48+fish_pager_color_description 6272a4
49+fish_pager_color_selected_background --background=44475a
50+fish_pager_color_selected_prefix 8be9fd
51+fish_pager_color_selected_completion f8f8f2
52+fish_pager_color_selected_description 6272a4
53+fish_pager_color_secondary_background
54+fish_pager_color_secondary_prefix 8be9fd
55+fish_pager_color_secondary_completion f8f8f2
56+fish_pager_color_secondary_description 6272a4
A config/foot/foot.ini
+49, -0
 1@@ -0,0 +1,49 @@
 2+#font=monospace:size=12
 3+pad=2x2
 4+dpi-aware=yes
 5+[bell]
 6+
 7+[scrollback]
 8+
 9+[url]
10+launch=xdg-open ${url}
11+
12+[cursor]
13+color=282a36 f8f8f2
14+
15+[mouse]
16+
17+[colors]
18+alpha=1.00
19+foreground=f2f2f2
20+background=282a36
21+
22+regular0=000000  # black
23+regular1=ff7f7f  # red
24+regular2=7bfb9c  # green
25+regular3=cdaefa  # yellow
26+regular4=8995bb  # blue
27+regular5=ff9ad4  # magenta
28+regular6=a8eefd  # cyan
29+regular7=ffffff  # white
30+
31+bright0=808080   # bright black
32+bright1=ff5555   # bright red
33+bright2=50fa7b   # bright green
34+bright3=bd93f9   # bright yellow
35+bright4=6272a4   # bright blue
36+bright5=ff79c6   # bright magenta
37+bright6=8be9fd   # bright cyan
38+bright7=ffffff   # bright white
39+
40+[csd]
41+
42+[key-bindings]
43+font-increase=Control+i
44+font-decrease=Control+o
45+
46+[search-bindings]
47+
48+[url-bindings]
49+
50+[mouse-bindings]
A config/ghostty/config
+1, -0
1@@ -0,0 +1 @@
2+font-size = 18
A config/i3/config
+184, -0
  1@@ -0,0 +1,184 @@
  2+# Please see https://i3wm.org/docs/userguide.html for a complete reference!
  3+
  4+set $mod Mod4
  5+font pango:monospace 8
  6+
  7+# Start XDG autostart .desktop files using dex. See also
  8+# https://wiki.archlinux.org/index.php/XDG_Autostart
  9+exec --no-startup-id dex --autostart --environment i3
 10+
 11+# xss-lock grabs a logind suspend inhibit lock and will use i3lock to lock the
 12+# screen before suspend. Use loginctl lock-session to lock your screen.
 13+exec --no-startup-id xss-lock --transfer-sleep-lock -- i3lock --nofork
 14+
 15+# NetworkManager is the most popular way to manage wireless networks on Linux,
 16+# and nm-applet is a desktop environment-independent system tray GUI for it.
 17+exec --no-startup-id nm-applet
 18+
 19+# Use pactl to adjust volume in PulseAudio.
 20+set $refresh_i3status killall -SIGUSR1 i3status
 21+bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status
 22+bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3status
 23+bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status
 24+bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3status
 25+
 26+# Use Mouse+$mod to drag floating windows to their wanted position
 27+floating_modifier $mod
 28+
 29+# start a terminal
 30+bindsym $mod+Return exec alacritty
 31+
 32+# kill focused window
 33+bindsym $mod+Shift+q kill
 34+
 35+bindsym $mod+d exec "dmenu_run -nf '#F8F8F2' -nb '#282A36' -sb '#6272A4' -sf '#F8F8F2' -fn 'monospace-10' -p 'dmenu%'"
 36+
 37+# change focus
 38+bindsym $mod+h focus left
 39+bindsym $mod+j focus down
 40+bindsym $mod+k focus up
 41+bindsym $mod+l focus right
 42+
 43+# alternatively, you can use the cursor keys:
 44+bindsym $mod+Left focus left
 45+bindsym $mod+Down focus down
 46+bindsym $mod+Up focus up
 47+bindsym $mod+Right focus right
 48+
 49+# move focused window
 50+bindsym $mod+Shift+h move left
 51+bindsym $mod+Shift+j move down
 52+bindsym $mod+Shift+k move up
 53+bindsym $mod+Shift+l move right
 54+
 55+# alternatively, you can use the cursor keys:
 56+bindsym $mod+Shift+Left move left
 57+bindsym $mod+Shift+Down move down
 58+bindsym $mod+Shift+Up move up
 59+bindsym $mod+Shift+Right move right
 60+
 61+# split in horizontal orientation
 62+bindsym $mod+z split h
 63+
 64+# split in vertical orientation
 65+bindsym $mod+x split v
 66+
 67+# enter fullscreen mode for the focused container
 68+bindsym $mod+f fullscreen toggle
 69+
 70+# change container layout (stacked, tabbed, toggle split)
 71+bindsym $mod+s layout stacking
 72+bindsym $mod+w layout tabbed
 73+bindsym $mod+e layout toggle split
 74+
 75+# toggle tiling / floating
 76+bindsym $mod+Shift+space floating toggle
 77+
 78+# change focus between tiling / floating windows
 79+bindsym $mod+space focus mode_toggle
 80+
 81+# focus the parent container
 82+bindsym $mod+a focus parent
 83+
 84+# Define names for default workspaces for which we configure key bindings later on.
 85+# We use variables to avoid repeating the names in multiple places.
 86+set $ws1 "1"
 87+set $ws2 "2"
 88+set $ws3 "3"
 89+set $ws4 "4"
 90+set $ws5 "5"
 91+set $ws6 "6"
 92+set $ws7 "7"
 93+set $ws8 "8"
 94+set $ws9 "9"
 95+set $ws10 "10"
 96+
 97+# switch to workspace
 98+bindsym $mod+1 workspace number $ws1
 99+bindsym $mod+2 workspace number $ws2
100+bindsym $mod+3 workspace number $ws3
101+bindsym $mod+4 workspace number $ws4
102+bindsym $mod+5 workspace number $ws5
103+bindsym $mod+6 workspace number $ws6
104+bindsym $mod+7 workspace number $ws7
105+bindsym $mod+8 workspace number $ws8
106+bindsym $mod+9 workspace number $ws9
107+bindsym $mod+0 workspace number $ws10
108+
109+# move focused container to workspace
110+bindsym $mod+Shift+1 move container to workspace number $ws1
111+bindsym $mod+Shift+2 move container to workspace number $ws2
112+bindsym $mod+Shift+3 move container to workspace number $ws3
113+bindsym $mod+Shift+4 move container to workspace number $ws4
114+bindsym $mod+Shift+5 move container to workspace number $ws5
115+bindsym $mod+Shift+6 move container to workspace number $ws6
116+bindsym $mod+Shift+7 move container to workspace number $ws7
117+bindsym $mod+Shift+8 move container to workspace number $ws8
118+bindsym $mod+Shift+9 move container to workspace number $ws9
119+bindsym $mod+Shift+0 move container to workspace number $ws10
120+
121+# reload the configuration file
122+bindsym $mod+Shift+c reload
123+# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
124+bindsym $mod+Shift+r restart
125+# exit i3 (logs you out of your X session)
126+bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -B 'Yes, exit i3' 'i3-msg exit'"
127+
128+# resize window (you can also use the mouse for that)
129+mode "resize" {
130+        # These bindings trigger as soon as you enter the resize mode
131+
132+        # Pressing left will shrink the window’s width.
133+        # Pressing right will grow the window’s width.
134+        # Pressing up will shrink the window’s height.
135+        # Pressing down will grow the window’s height.
136+        bindsym j resize shrink width 10 px or 10 ppt
137+        bindsym k resize grow height 10 px or 10 ppt
138+        bindsym l resize shrink height 10 px or 10 ppt
139+        bindsym semicolon resize grow width 10 px or 10 ppt
140+
141+        # same bindings, but for the arrow keys
142+        bindsym Left resize shrink width 10 px or 10 ppt
143+        bindsym Down resize grow height 10 px or 10 ppt
144+        bindsym Up resize shrink height 10 px or 10 ppt
145+        bindsym Right resize grow width 10 px or 10 ppt
146+
147+        # back to normal: Enter or Escape or $mod+r
148+        bindsym Return mode "default"
149+        bindsym Escape mode "default"
150+        bindsym $mod+r mode "default"
151+}
152+
153+bindsym $mod+r mode "resize"
154+
155+bindsym $mod+Shift+minus move scratchpad
156+bindsym $mod+minus scratchpad show
157+
158+for_window [class="steam_app_1182480" title="Origin"] floating enable
159+for_window [instance="origin.exe"] floating enable
160+
161+# class                 border  bground text    indicator child_border
162+client.focused          #6272A4 #6272A4 #F8F8F2 #6272A4   #6272A4
163+client.focused_inactive #44475A #44475A #F8F8F2 #44475A   #44475A
164+client.unfocused        #282A36 #282A36 #BFBFBF #282A36   #282A36
165+client.urgent           #44475A #FF5555 #F8F8F2 #FF5555   #FF5555
166+client.placeholder      #282A36 #282A36 #F8F8F2 #282A36   #282A36
167+
168+client.background       #F8F8F2
169+
170+bar {
171+  status_command i3blocks
172+  colors {
173+    background #282A36
174+    statusline #F8F8F2
175+    separator  #44475A
176+
177+    focused_workspace  #44475A #44475A #F8F8F2
178+    active_workspace   #282A36 #44475A #F8F8F2
179+    inactive_workspace #282A36 #282A36 #BFBFBF
180+    urgent_workspace   #FF5555 #FF5555 #F8F8F2
181+    binding_mode       #FF5555 #FF5555 #F8F8F2
182+  }
183+}
184+
185+exec_always = "xset r rate 300 30"
A config/i3blocks/config
+11, -0
 1@@ -0,0 +1,11 @@
 2+separator_block_width=15
 3+markup=none
 4+
 5+[volume]
 6+full_text=
 7+command=pavucontrol
 8+align=left
 9+
10+[time]
11+command=date '+%Y-%m-%d %I:%M:%S'
12+interval=5
A config/i3status/config
+7, -0
1@@ -0,0 +1,7 @@
2+general {
3+  output_format = "i3bar"
4+  colors = true
5+  color_good = "#50FA7B"
6+  color_degraded = "#F1FA8C"
7+  color_bad = "#FF5555"
8+}
A config/imapnotify/fastmail
+14, -0
 1@@ -0,0 +1,14 @@
 2+{
 3+  "host": "imap.fastmail.com",
 4+  "port": 993,
 5+  "tls": true,
 6+  "tlsOptions": {
 7+    "rejectUnauthorized": false
 8+  },
 9+  "username": "me@erock.io",
10+  "password": "",
11+  "passwordCmd": "pass logins/local-mail",
12+  "onNewMail": "/home/erock/bin/mailsync",
13+  "onNewMailPost": "",
14+  "boxes": [ "INBOX" ]
15+}
A config/khal/config
+29, -0
 1@@ -0,0 +1,29 @@
 2+[calendars]
 3+
 4+[[fastmail]]
 5+path = /home/erock/.calendars/3b9b2f5e-cbc9-4f8a-8e54-f210dcb8b1a6
 6+type = calendar
 7+color = light blue
 8+
 9+[[shijing]]
10+path = /home/erock/.calendars/shijing
11+type = calendar
12+readonly = True
13+color = light green
14+
15+[[work]]
16+path = /home/erock/.calendars/work
17+type = calendar
18+readonly = True
19+color = light red
20+
21+[locale]
22+timeformat = %I:%M %p
23+dateformat = %m/%d/%Y
24+longdateformat = %m/%d/%Y
25+datetimeformat = %m/%d/%Y %I:%M %p
26+longdatetimeformat = %m/%d/%Y %I:%M %p
27+local_timezone=America/Detroit
28+
29+[default]
30+default_calendar = fastmail
A config/khard/khard.conf
+46, -0
 1@@ -0,0 +1,46 @@
 2+# example configuration file for khard version > 0.14.0
 3+# place it under ~/.config/khard/khard.conf
 4+# This file is parsed by the configobj library.  The syntax is described at
 5+# https://configobj.readthedocs.io/en/latest/configobj.html#the-config-file-format
 6+
 7+[addressbooks]
 8+[[contacts]]
 9+path = ~/.contacts/Default/
10+
11+[general]
12+debug = no
13+default_action = list
14+# These are either strings or comma seperated lists
15+editor = vim, -i, NONE
16+merge_editor = vimdiff
17+
18+[contact table]
19+# display names by first or last name: first_name / last_name / formatted_name
20+display = first_name
21+# group by address book: yes / no
22+group_by_addressbook = no
23+# reverse table ordering: yes / no
24+reverse = no
25+# append nicknames to name column: yes / no
26+show_nicknames = no
27+# show uid table column: yes / no
28+show_uids = no
29+# sort by first or last name: first_name / last_name / formatted_name
30+sort = last_name
31+# localize dates: yes / no
32+localize_dates = yes
33+# set a comma separated list of preferred phone number types in descending priority
34+# or nothing for non-filtered alphabetical order
35+preferred_phone_number_type = pref, cell, home
36+# set a comma separated list of preferred email address types in descending priority
37+# or nothing for non-filtered alphabetical order
38+preferred_email_address_type = pref, work, home
39+
40+[vcard]
41+preferred_version = 3.0
42+# Look into source vcf files to speed up search queries: yes / no
43+search_in_source_files = no
44+# skip unparsable vcard files: yes / no
45+skip_unparsable = no
46+
47+
A config/libinput-gestures.conf
+5, -0
1@@ -0,0 +1,5 @@
2+# Cycle right through sway workspaces
3+gesture: swipe right 3 swaymsg focus right
4+
5+# Cycle left through sway workspaces
6+gesture: swipe left 3 swaymsg focus left
A config/nvim/ftplugin/help.lua
+1, -0
1@@ -0,0 +1 @@
2+vim.treesitter.start()
A config/nvim/init.vim
+10, -0
 1@@ -0,0 +1,10 @@
 2+set termguicolors
 3+set rtp+=/usr/local/opt/fzf
 4+
 5+let $FZF_DEFAULT_COMMAND = 'rg --files --hidden --glob "!.git/"'
 6+let $NVIM_TUI_ENABLE_TRUE_COLOR=1
 7+
 8+" source our 'init.lua'
 9+" https://github.com/nanotee/nvim-lua-guide#sourcing-a-lua-file-vs-calling-require
10+" luafile $XDG_CONFIG_HOME/nvim/lua/init.lua
11+lua require'init'
A config/nvim/lua/autocmd.lua
+48, -0
 1@@ -0,0 +1,48 @@
 2+local api = vim.api
 3+
 4+-- Taken from https://github.com/norcalli/nvim_utils
 5+local function nvim_create_augroups(definitions)
 6+  for group_name, definition in pairs(definitions) do
 7+    api.nvim_command('augroup '..group_name)
 8+    api.nvim_command('autocmd!')
 9+    for _, def in ipairs(definition) do
10+      local command = table.concat(vim.tbl_flatten{'autocmd', def}, ' ')
11+      api.nvim_command(command)
12+    end
13+    api.nvim_command('augroup END')
14+  end
15+end
16+
17+local autocmds = {
18+  language_spacing = {
19+    {
20+      'BufRead,BufNewFile,BufEnter',
21+      'make',
22+      'setlocal tabstop=4 shiftwidth=4 softtabstop=4',
23+    },
24+  },
25+  golang = {
26+    {
27+      'BufRead,BufNewFile,BufEnter',
28+      '*.go',
29+      'setlocal noexpandtab copyindent preserveindent softtabstop=0 shiftwidth=4 tabstop=4',
30+    },
31+  },
32+  typescript = {
33+    { 'BufNewFile,BufRead', '*.ts,*.mts', 'setlocal filetype=typescript' },
34+  },
35+  markdown = {
36+    { 'BufNewFile,BufRead', '*.md,*.mdx', 'setlocal filetype=markdown' },
37+  },
38+  quickfix = {
39+    { 'FileType', 'qf', 'setlocal wrap' }
40+  },
41+  wrapmdfiles = {
42+    { 'FileType', 'markdown', 'setlocal wrap tw=79 formatoptions+=t tabstop=2 shiftwidth=2 softtabstop=2' },
43+  },
44+  wraptextfiles = {
45+    { 'FileType', 'text', 'setlocal wrap' },
46+  },
47+}
48+
49+nvim_create_augroups(autocmds)
A config/nvim/lua/init.lua
+39, -0
 1@@ -0,0 +1,39 @@
 2+local o = vim.o
 3+o.termguicolors       = true    -- enable 24bit colors
 4+o.background          = 'dark'
 5+o.encoding            = 'utf-8'
 6+o.fileencoding        = 'utf-8'
 7+o.number              = true    -- show absolute line no. at the cursor pos
 8+o.tabstop             = 2       -- Tab indentation levels every two columns
 9+o.shiftwidth          = 2       -- Indent/outdent by two columns
10+o.softtabstop         = 2       -- Tab indentation when mixing tabs & spaces
11+o.expandtab           = true    -- Convert all tabs that are typed into spaces
12+o.colorcolumn         = '72'    -- Vertical column at 80 characters
13+o.laststatus          = 2       -- always show status line
14+o.wrap                = false   -- wrap long lines
15+o.cursorline          = false   -- Show a line where the current cursor is
16+o.autoread            = true    -- auto read file if changed outside of vim
17+o.updatetime          = 250     -- decrease update time
18+o.cursorline          = false   -- disable highlighting the current line
19+o.backspace           = 'indent,eol,start'
20+o.completeopt         = 'menuone,noselect'
21+o.signcolumn          = 'yes'
22+
23+local g = vim.g
24+g.mapleader           = ','
25+g.maplocalleader      = ','
26+g.loaded_netrw        = 1 -- disable netrw (nvim-tree)
27+g.loaded_netrwPlugin  = 1
28+
29+local opts = { noremap=true, silent=true }
30+local set_keymap = vim.api.nvim_set_keymap
31+set_keymap('n', '<leader>b', '<C-O>', opts)
32+set_keymap('n', '<leader>s', ':FZF<CR>', opts)
33+set_keymap('n', '<leader>S', ':Rg!<CR>', opts)
34+set_keymap('n', '<leader>B', ':Buffers<CR>', opts)
35+set_keymap('n', 'Q', '<nop>', opts)
36+set_keymap('n', '<leader>w', ':!make fmt<CR>', opts)
37+vim.keymap.set('n', '<Esc>', [[<C-\><C-n>]], opts)
38+
39+require 'plugins'
40+require 'autocmd'
A config/nvim/lua/plugin_config.lua
+234, -0
  1@@ -0,0 +1,234 @@
  2+function setup_tree()
  3+  local opts = { noremap=true, silent=true }
  4+  vim.api.nvim_set_keymap('n', '<leader>t', ':NvimTreeToggle<CR>', opts)
  5+  vim.api.nvim_set_keymap('n', '<leader>f', ':NvimTreeFindFile<CR>', opts)
  6+
  7+  require'nvim-tree'.setup {
  8+    sort_by = "case_sensitive",
  9+    auto_reload_on_write = true,
 10+    view = {
 11+      width = 30,
 12+      side = 'left',
 13+    },
 14+    update_focused_file = {
 15+      ignore_list = {'.git', 'node_modules', '.cache'},
 16+    },
 17+    renderer = {
 18+      group_empty = true,
 19+    },
 20+    filters = {
 21+      dotfiles = true,
 22+    },
 23+  }
 24+
 25+  -- open for directories and change neovim's directory
 26+  local function open_nvim_tree(data)
 27+    -- buffer is a directory
 28+    local directory = vim.fn.isdirectory(data.file) == 1
 29+
 30+    if not directory then
 31+      return
 32+    end
 33+
 34+    -- change to the directory
 35+    vim.cmd.cd(data.file)
 36+
 37+    -- open the tree
 38+    require("nvim-tree.api").tree.open()
 39+  end
 40+
 41+  vim.api.nvim_create_autocmd({ "VimEnter" }, { callback = open_nvim_tree })
 42+end
 43+
 44+function setup_bufferline()
 45+  require("bufferline").setup{
 46+    options = {
 47+      mode = "tabs",
 48+    },
 49+  }
 50+end
 51+
 52+function setup_treesitter()
 53+  require'nvim-treesitter.configs'.setup {
 54+    ensure_installed = {
 55+      "bash",
 56+      "c",
 57+      "cmake",
 58+      "dockerfile",
 59+      "git_config",
 60+      "git_rebase",
 61+      "gitattributes",
 62+      "gitcommit",
 63+      "gitignore",
 64+      "glimmer",
 65+      "go",
 66+      "gomod",
 67+      "gosum",
 68+      "html",
 69+      "javascript",
 70+      "jq",
 71+      "json",
 72+      "json5",
 73+      "lua",
 74+      "make",
 75+      "markdown",
 76+      "nix",
 77+      "python",
 78+      "query",
 79+      "r",
 80+      "ruby",
 81+      "rust",
 82+      "scss",
 83+      "sql",
 84+      "svelte",
 85+      "terraform",
 86+      "toml",
 87+      "tsx",
 88+      "typescript",
 89+      "vim",
 90+      "vimdoc",
 91+      "yaml",
 92+      "zig",
 93+    },
 94+    highlight = {
 95+      enable = true,
 96+    },
 97+    indent = {
 98+      enable = true
 99+    }
100+  }
101+end
102+
103+function setup_comp()
104+  local cmp = require'cmp'
105+  cmp.setup({
106+    snippet = {
107+      expand = function(args)
108+        vim.fn["vsnip#anonymous"](args.body)
109+      end,
110+    },
111+    mapping = {
112+      ['<C-p>'] = cmp.mapping.select_prev_item(),
113+      ['<C-n>'] = cmp.mapping.select_next_item(),
114+      ['<Tab>'] = function(fallback)
115+        if cmp.visible() then
116+          cmp.select_next_item()
117+        else
118+          fallback()
119+        end
120+      end,
121+      ['<S-Tab>'] = function(fallback)
122+        if cmp.visible() then
123+          cmp.select_prev_item()
124+        else
125+          fallback()
126+        end
127+      end,
128+      ['<C-Space>'] = cmp.mapping(cmp.mapping.complete(), { 'i', 'c' }),
129+      ['<CR>'] = cmp.mapping.confirm({ select = true }),
130+    },
131+    sources = {
132+      { name = 'nvim_lsp' },
133+    },
134+  })
135+end
136+
137+function setup_statusline()
138+  require('lualine').setup {
139+    options = {
140+      theme = 'dracula-nvim',
141+    },
142+  }
143+end
144+
145+function setup_lsp()
146+  local opts = { noremap=true, silent=true }
147+  vim.keymap.set('n', '<leader>e', vim.diagnostic.open_float, opts)
148+  vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, opts)
149+  vim.keymap.set('n', ']d', vim.diagnostic.goto_next, opts)
150+  vim.keymap.set('n', '<leader>q', vim.diagnostic.setloclist, opts)
151+  -- Use an on_attach function to only map the following keysk
152+  -- after the language server attaches to the current buffer
153+  local on_attach = function(client, bufnr)
154+    local bufopts = { noremap=true, silent=true, buffer=bufnr }
155+
156+    --Enable completion triggered by <c-x><c-o>
157+    vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc')
158+
159+    -- Mappings.
160+
161+    -- See `:help vim.lsp.*` for documentation on any of the below functions
162+    vim.keymap.set('n', '<leader>d', vim.lsp.buf.definition, bufopts)
163+    vim.keymap.set('n', '<leader>D', vim.lsp.buf.type_definition, bufopts)
164+    vim.keymap.set('n', '<leader>h', vim.lsp.buf.hover, bufopts)
165+    vim.keymap.set('n', '<leader>r', vim.lsp.buf.references, bufopts)
166+    vim.keymap.set('n', '<leader>k', vim.lsp.buf.signature_help, bufopts)
167+    vim.keymap.set('n', '<leader>i', vim.lsp.buf.implementation, bufopts)
168+  end
169+
170+  local nvim_lsp = require('lspconfig')
171+  local capabilities = vim.lsp.protocol.make_client_capabilities()
172+  capabilities = require('cmp_nvim_lsp').default_capabilities(capabilities)
173+  capabilities.textDocument.foldingRange = {
174+    dynamicRegistration = false,
175+    lineFoldingOnly = true
176+  }
177+
178+  function handler(server_name)
179+    local opts = {
180+      capabilities = capabilities,
181+      on_attach = on_attach,
182+    }
183+    if server_name == "denols" then
184+      opts.root_dir = nvim_lsp.util.root_pattern("deno.json", "deno.jsonc")
185+    elseif server_name == "tsserver" then
186+      opts.root_dir = nvim_lsp.util.root_pattern("package.json")
187+      -- https://github.com/neovim/nvim-lspconfig/issues/2507#issuecomment-1471438640
188+      opts.single_file_support = false
189+    end
190+    nvim_lsp[server_name].setup(opts)
191+  end
192+
193+  handler("tsserver")
194+  handler("denols")
195+  handler("gopls")
196+  handler("zls")
197+  handler("pyright")
198+  -- setup_folding()
199+end
200+
201+function setup_folding()
202+  vim.o.foldcolumn = '0' -- '0' is not bad
203+  vim.o.foldlevel = 99 -- Using ufo provider need a large value, feel free to decrease the value
204+  vim.o.foldlevelstart = 99
205+  vim.o.foldenable = true
206+  -- vim.o.fillchars = [[eob: ,fold: ,foldopen:,foldsep: ,foldclose:]]
207+
208+  -- `za` to toggle fold on cursor
209+  vim.keymap.set('n', '<leader>M', require('ufo').openAllFolds)
210+  vim.keymap.set('n', '<leader>m', require('ufo').closeAllFolds)
211+  require('ufo').setup()
212+end
213+
214+function setup_gitsigns()
215+  require('gitsigns').setup {}
216+end
217+
218+function setup_gitlinker()
219+  require"gitlinker".setup()
220+end
221+
222+function setup_tmux_nav()
223+  local nvim_tmux_nav = require('nvim-tmux-navigation')
224+
225+  nvim_tmux_nav.setup {
226+    disable_when_zoomed = true -- defaults to false
227+  }
228+
229+  vim.keymap.set('n', "<C-h>", nvim_tmux_nav.NvimTmuxNavigateLeft)
230+  vim.keymap.set('n', "<C-j>", nvim_tmux_nav.NvimTmuxNavigateDown)
231+  vim.keymap.set('n', "<C-k>", nvim_tmux_nav.NvimTmuxNavigateUp)
232+  vim.keymap.set('n', "<C-l>", nvim_tmux_nav.NvimTmuxNavigateRight)
233+  vim.keymap.set('n', "<C-\\>", nvim_tmux_nav.NvimTmuxNavigateLastActive)
234+  vim.keymap.set('n', "<C-Space>", nvim_tmux_nav.NvimTmuxNavigateNext)
235+end
A config/nvim/lua/plugins.lua
+105, -0
  1@@ -0,0 +1,105 @@
  2+local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
  3+if not vim.loop.fs_stat(lazypath) then
  4+  vim.fn.system({
  5+    "git",
  6+    "clone",
  7+    "--filter=blob:none",
  8+    "https://github.com/folke/lazy.nvim.git",
  9+    "--branch=stable", -- latest stable release
 10+    lazypath,
 11+  })
 12+end
 13+vim.opt.rtp:prepend(lazypath)
 14+
 15+-- require functions used to configure plugins
 16+require 'plugin_config'
 17+
 18+require("lazy").setup({
 19+  {
 20+    'neovim/nvim-lspconfig',
 21+    config = setup_lsp,
 22+  },
 23+  {
 24+    'nvim-treesitter/nvim-treesitter',
 25+    build = ':TSUpdate',
 26+    config = setup_treesitter
 27+  },
 28+  {
 29+    "hrsh7th/nvim-cmp",
 30+    dependencies = {
 31+      "hrsh7th/cmp-buffer",
 32+      "hrsh7th/cmp-vsnip",
 33+      "hrsh7th/vim-vsnip"
 34+    },
 35+    config = setup_comp,
 36+  },
 37+  "hrsh7th/cmp-nvim-lsp",
 38+  {
 39+    "akinsho/bufferline.nvim",
 40+    dependencies = 'nvim-tree/nvim-web-devicons',
 41+    config = setup_bufferline,
 42+  },
 43+  {
 44+    'nvim-lualine/lualine.nvim',
 45+    dependencies = {
 46+      'nvim-tree/nvim-web-devicons',
 47+      lazy = true,
 48+    },
 49+    config = setup_statusline
 50+  },
 51+  {
 52+    'nvim-tree/nvim-tree.lua',
 53+    config = setup_tree,
 54+    dependencies = {
 55+      'nvim-tree/nvim-web-devicons',
 56+      lazy = true,
 57+    }
 58+  },
 59+  {
 60+    'lewis6991/gitsigns.nvim',
 61+    config = setup_gitsigns,
 62+  },
 63+  'lukas-reineke/indent-blankline.nvim',
 64+  {
 65+    'ruifm/gitlinker.nvim',
 66+    dependencies = 'nvim-lua/plenary.nvim',
 67+    config = setup_gitlinker,
 68+  },
 69+  {
 70+    'rhysd/git-messenger.vim'
 71+  },
 72+  {
 73+    'junegunn/fzf',
 74+    build = function()
 75+      vim.fn['fzf#install']()
 76+    end
 77+  },
 78+  'junegunn/fzf.vim',
 79+  {
 80+    'alexghergh/nvim-tmux-navigation',
 81+    config = setup_tmux_nav,
 82+  },
 83+  {
 84+    'mg979/vim-visual-multi',
 85+    branch = 'master',
 86+  },
 87+  {
 88+    'Shougo/vimproc.vim',
 89+    build = 'make',
 90+  },
 91+  --{
 92+  --  'kevinhwang91/nvim-ufo',
 93+  --  dependencies = 'kevinhwang91/promise-async',
 94+  --},
 95+  {
 96+    'Mofiqul/dracula.nvim',
 97+    lazy = false,
 98+    priority = 1000,
 99+    config = function()
100+      require('dracula').setup({})
101+      vim.cmd[[colorscheme dracula]]
102+    end
103+  },
104+  'ntpeters/vim-better-whitespace',
105+  'psliwka/vim-smoothie'
106+})
A config/qutebrowser/bookmarks/urls
+0, -0
A config/qutebrowser/config.py
+156, -0
  1@@ -0,0 +1,156 @@
  2+# Autogenerated config.py
  3+#
  4+# NOTE: config.py is intended for advanced users who are comfortable
  5+# with manually migrating the config file on qutebrowser upgrades. If
  6+# you prefer, you can also configure qutebrowser using the
  7+# :set/:bind/:config-* commands without having to write a config.py
  8+# file.
  9+#
 10+# Documentation:
 11+#   qute://help/configuring.html
 12+#   qute://help/settings.html
 13+
 14+# Change the argument to True to still load settings configured via autoconfig.yml
 15+config.load_autoconfig(False)
 16+config.set("url.searchengines", {
 17+    "DEFAULT": "https://kagi.com/search?q={}",
 18+    "brave": "https://search.brave.com/search?q={}",
 19+})
 20+config.set("url.start_pages", [
 21+    "https://erock.lists.sh/bookmark-web"
 22+])
 23+config.set("url.default_page", "https://erock.lists.sh/bookmark-web")
 24+config.set("colors.webpage.preferred_color_scheme", "dark")
 25+# config.set("content.user_stylesheets", ["./theme.css"])
 26+# config.set("content.user_stylesheets", ["./hn.css"])
 27+config.set("content.user_stylesheets", ["./solarized-dark-all-sites.css"])
 28+config.set("colors.webpage.bg", "black")
 29+config.set("tabs.show", "multiple")
 30+config.set("fonts.default_family", "FireCode")
 31+config.set("fonts.default_size", "12pt")
 32+# config.set("colors.webpage.darkmode.enabled", True)
 33+
 34+# Which cookies to accept. With QtWebEngine, this setting also controls
 35+# other features with tracking capabilities similar to those of cookies;
 36+# including IndexedDB, DOM storage, filesystem API, service workers, and
 37+# AppCache. Note that with QtWebKit, only `all` and `never` are
 38+# supported as per-domain values. Setting `no-3rdparty` or `no-
 39+# unknown-3rdparty` per-domain on QtWebKit will have the same effect as
 40+# `all`. If this setting is used with URL patterns, the pattern gets
 41+# applied to the origin/first party URL of the page making the request,
 42+# not the request URL. With QtWebEngine 5.15.0+, paths will be stripped
 43+# from URLs, so URL patterns using paths will not match. With
 44+# QtWebEngine 5.15.2+, subdomains are additionally stripped as well, so
 45+# you will typically need to set this setting for `example.com` when the
 46+# cookie is set on `somesubdomain.example.com` for it to work properly.
 47+# To debug issues with this setting, start qutebrowser with `--debug
 48+# --logfilter network --debug-flag log-cookies` which will show all
 49+# cookies being set.
 50+# Type: String
 51+# Valid values:
 52+#   - all: Accept all cookies.
 53+#   - no-3rdparty: Accept cookies from the same origin only. This is known to break some sites, such as GMail.
 54+#   - no-unknown-3rdparty: Accept cookies from the same origin only, unless a cookie is already set for the domain. On QtWebEngine, this is the same as no-3rdparty.
 55+#   - never: Don't accept cookies at all.
 56+config.set('content.cookies.accept', 'all', 'chrome-devtools://*')
 57+
 58+# Which cookies to accept. With QtWebEngine, this setting also controls
 59+# other features with tracking capabilities similar to those of cookies;
 60+# including IndexedDB, DOM storage, filesystem API, service workers, and
 61+# AppCache. Note that with QtWebKit, only `all` and `never` are
 62+# supported as per-domain values. Setting `no-3rdparty` or `no-
 63+# unknown-3rdparty` per-domain on QtWebKit will have the same effect as
 64+# `all`. If this setting is used with URL patterns, the pattern gets
 65+# applied to the origin/first party URL of the page making the request,
 66+# not the request URL. With QtWebEngine 5.15.0+, paths will be stripped
 67+# from URLs, so URL patterns using paths will not match. With
 68+# QtWebEngine 5.15.2+, subdomains are additionally stripped as well, so
 69+# you will typically need to set this setting for `example.com` when the
 70+# cookie is set on `somesubdomain.example.com` for it to work properly.
 71+# To debug issues with this setting, start qutebrowser with `--debug
 72+# --logfilter network --debug-flag log-cookies` which will show all
 73+# cookies being set.
 74+# Type: String
 75+# Valid values:
 76+#   - all: Accept all cookies.
 77+#   - no-3rdparty: Accept cookies from the same origin only. This is known to break some sites, such as GMail.
 78+#   - no-unknown-3rdparty: Accept cookies from the same origin only, unless a cookie is already set for the domain. On QtWebEngine, this is the same as no-3rdparty.
 79+#   - never: Don't accept cookies at all.
 80+config.set('content.cookies.accept', 'all', 'devtools://*')
 81+
 82+# Value to send in the `Accept-Language` header. Note that the value
 83+# read from JavaScript is always the global value.
 84+# Type: String
 85+config.set('content.headers.accept_language', '', 'https://matchmaker.krunker.io/*')
 86+
 87+# User agent to send.  The following placeholders are defined:  *
 88+# `{os_info}`: Something like "X11; Linux x86_64". * `{webkit_version}`:
 89+# The underlying WebKit version (set to a fixed value   with
 90+# QtWebEngine). * `{qt_key}`: "Qt" for QtWebKit, "QtWebEngine" for
 91+# QtWebEngine. * `{qt_version}`: The underlying Qt version. *
 92+# `{upstream_browser_key}`: "Version" for QtWebKit, "Chrome" for
 93+# QtWebEngine. * `{upstream_browser_version}`: The corresponding
 94+# Safari/Chrome version. * `{qutebrowser_version}`: The currently
 95+# running qutebrowser version.  The default value is equal to the
 96+# unchanged user agent of QtWebKit/QtWebEngine.  Note that the value
 97+# read from JavaScript is always the global value. With QtWebEngine
 98+# between 5.12 and 5.14 (inclusive), changing the value exposed to
 99+# JavaScript requires a restart.
100+# Type: FormatString
101+config.set('content.headers.user_agent', 'Mozilla/5.0 ({os_info}) AppleWebKit/{webkit_version} (KHTML, like Gecko) {upstream_browser_key}/{upstream_browser_version} Safari/{webkit_version}', 'https://web.whatsapp.com/')
102+
103+# User agent to send.  The following placeholders are defined:  *
104+# `{os_info}`: Something like "X11; Linux x86_64". * `{webkit_version}`:
105+# The underlying WebKit version (set to a fixed value   with
106+# QtWebEngine). * `{qt_key}`: "Qt" for QtWebKit, "QtWebEngine" for
107+# QtWebEngine. * `{qt_version}`: The underlying Qt version. *
108+# `{upstream_browser_key}`: "Version" for QtWebKit, "Chrome" for
109+# QtWebEngine. * `{upstream_browser_version}`: The corresponding
110+# Safari/Chrome version. * `{qutebrowser_version}`: The currently
111+# running qutebrowser version.  The default value is equal to the
112+# unchanged user agent of QtWebKit/QtWebEngine.  Note that the value
113+# read from JavaScript is always the global value. With QtWebEngine
114+# between 5.12 and 5.14 (inclusive), changing the value exposed to
115+# JavaScript requires a restart.
116+# Type: FormatString
117+config.set('content.headers.user_agent', 'Mozilla/5.0 ({os_info}; rv:90.0) Gecko/20100101 Firefox/90.0', 'https://accounts.google.com/*')
118+
119+# User agent to send.  The following placeholders are defined:  *
120+# `{os_info}`: Something like "X11; Linux x86_64". * `{webkit_version}`:
121+# The underlying WebKit version (set to a fixed value   with
122+# QtWebEngine). * `{qt_key}`: "Qt" for QtWebKit, "QtWebEngine" for
123+# QtWebEngine. * `{qt_version}`: The underlying Qt version. *
124+# `{upstream_browser_key}`: "Version" for QtWebKit, "Chrome" for
125+# QtWebEngine. * `{upstream_browser_version}`: The corresponding
126+# Safari/Chrome version. * `{qutebrowser_version}`: The currently
127+# running qutebrowser version.  The default value is equal to the
128+# unchanged user agent of QtWebKit/QtWebEngine.  Note that the value
129+# read from JavaScript is always the global value. With QtWebEngine
130+# between 5.12 and 5.14 (inclusive), changing the value exposed to
131+# JavaScript requires a restart.
132+# Type: FormatString
133+config.set('content.headers.user_agent', 'Mozilla/5.0 ({os_info}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99 Safari/537.36', 'https://*.slack.com/*')
134+
135+# Load images automatically in web pages.
136+# Type: Bool
137+config.set('content.images', True, 'chrome-devtools://*')
138+
139+# Load images automatically in web pages.
140+# Type: Bool
141+config.set('content.images', True, 'devtools://*')
142+
143+# Enable JavaScript.
144+# Type: Bool
145+config.set('content.javascript.enabled', True, 'chrome-devtools://*')
146+
147+# Enable JavaScript.
148+# Type: Bool
149+config.set('content.javascript.enabled', True, 'devtools://*')
150+
151+# Enable JavaScript.
152+# Type: Bool
153+config.set('content.javascript.enabled', True, 'chrome://*/*')
154+
155+# Enable JavaScript.
156+# Type: Bool
157+config.set('content.javascript.enabled', True, 'qute://*/*')
A config/qutebrowser/hn.css
+61, -0
 1@@ -0,0 +1,61 @@
 2+/* ==UserStyle==
 3+@name           Oficial Dracula Theme
 4+@namespace      github.com/dracula/hacker-news
 5+@version        1.0.0
 6+@description    A dark theme for Hacker News
 7+@supportURL     https://github.com/dracula/hacker-news/issues
 8+@license        MIT
 9+==/UserStyle== */
10+#hnmain {
11+    background-color: #282a36;
12+}
13+#hnmain > tbody > tr:nth-child(1) > td {
14+    background-color: #282a36;
15+}
16+#hnmain > tbody > tr:nth-child(2) > td  {
17+    background-color: #44475a;
18+}
19+a:link{
20+    color: #bd93f9;
21+}
22+.hnmore a:link, a:visited {
23+    color: #6272a4;
24+}
25+#hnmain > tbody > tr:nth-child(2) > td > table > tbody > tr > td:nth-child(2) > span > b > a {
26+    color: #50fa7b;
27+}
28+.comhead a:link, .subtext a:visited {
29+    color: #8be9fd;
30+}
31+.score {
32+    color: #ffb86c;
33+}
34+#karma {
35+    color: #ffb86c;
36+}
37+#hnmain > tbody > tr:nth-child(1) > td > table > tbody > tr > td:nth-child(3) > span {
38+    color: #ffb86c;
39+}
40+#hnmain > tbody > tr:nth-child(4) > td > center:nth-child(6) > form > input[type=text] {
41+    background-color: #44475a;
42+}
43+#hnmain > tbody > tr:nth-child(4) > td > center:nth-child(6) > form {
44+    color: #50fa7b;
45+}
46+.pagetop a:visited {
47+    color: #bd93f9;
48+}
49+.title {
50+    color: #6272a4;
51+}
52+body {
53+    background-color: #282a36;
54+}
55+.commtext {
56+    color: #f8f8f2
57+}
58+textarea, input {
59+    background-color: #282a36;
60+    color: #f8f8f2;
61+    border-color: #8be9fd
62+}
A config/qutebrowser/quickmarks
+0, -0
A config/qutebrowser/solarized-dark-all-sites.css
+1712, -0
   1@@ -0,0 +1,1712 @@
   2+* {
   3+  border-color: #657b83 !important;
   4+}
   5+a {
   6+  color: #268bd2 !important;
   7+}
   8+a:visited {
   9+  color: #6c71c4 !important;
  10+}
  11+body {
  12+  background-color: #002b36 !important;
  13+  color: #839496 !important;
  14+}
  15+html {
  16+  background-color: #002b36 !important;
  17+}
  18+input,
  19+textarea {
  20+  background-color: #073642 !important;
  21+  color: #839496 !important;
  22+}
  23+blockquote,
  24+pre {
  25+  background-color: #073642 !important;
  26+  color: #839496 !important;
  27+}
  28+.post-actions {
  29+  background-color: #073642 !important;
  30+}
  31+.textarea-wrapper {
  32+  background-color: #002b36 !important;
  33+  color: #839496 !important;
  34+}
  35+.search--adv {
  36+  background-color: #073642 !important;
  37+}
  38+.search__autocomplete > .acp-wrap {
  39+  background-color: #002b36 !important;
  40+}
  41+.search__autocomplete > .acp-wrap > .acp--highlight {
  42+  background-color: #073642 !important;
  43+  color: #eee8d5 !important;
  44+}
  45+.search__autocomplete > .acp-wrap strong {
  46+  color: #eee8d5 !important;
  47+}
  48+.site-wrapper > #header_wrapper {
  49+  background-color: #002b36 !important;
  50+}
  51+.site-wrapper > #header_wrapper > #header {
  52+  background-color: #002b36 !important;
  53+}
  54+.search--header {
  55+  background-color: #073642 !important;
  56+}
  57+.zci {
  58+  background-color: #073642 !important;
  59+  color: #839496 !important;
  60+}
  61+.tile--info {
  62+  background-color: #002b36 !important;
  63+}
  64+.tile--info__expand {
  65+  background-color: #586e75 !important;
  66+}
  67+.tile--c {
  68+  background-color: #586e75 !important;
  69+  color: #eee8d5 !important;
  70+}
  71+.module__text {
  72+  color: #839496 !important;
  73+}
  74+.about-info-box__heading {
  75+  color: #93a1a1 !important;
  76+}
  77+.result.highlight {
  78+  background-color: #073642 !important;
  79+}
  80+.result__snippet {
  81+  color: #839496 !important;
  82+}
  83+.result__snippet b {
  84+  color: #93a1a1 !important;
  85+}
  86+.btn--top {
  87+  background-color: #073642 !important;
  88+  color: #839496 !important;
  89+}
  90+.btn--top:hover {
  91+  background-color: #586e75 !important;
  92+}
  93+.result--sep--hr:before {
  94+  background-color: #586e75 !important;
  95+}
  96+* {
  97+  border-color: #073642 !important;
  98+}
  99+.news .alert .pull-info {
 100+  background-color: #083c4a !important;
 101+}
 102+.link-gray-dark,
 103+.text-gray-dark {
 104+  color: #839496 !important;
 105+}
 106+.bg-white {
 107+  background-color: #002b36 !important;
 108+}
 109+.border {
 110+  border-color: #657b83 !important;
 111+}
 112+.breadcrumb .repo-root.js-repo-root a {
 113+  color: #268bd2 !important;
 114+}
 115+.breadcrumb strong.final-path {
 116+  color: #839496 !important;
 117+}
 118+button.ajax-pagination-btn {
 119+  background-color: #073642 !important;
 120+  color: #93a1a1 !important;
 121+}
 122+button.ajax-pagination-btn:hover {
 123+  background-color: #586e75 !important;
 124+}
 125+.comment-reactions .btn-link {
 126+  color: #839496 !important;
 127+}
 128+.comment-reactions .user-has-reacted {
 129+  background-color: #073642 !important;
 130+}
 131+.text-gray-dark {
 132+  color: #839496 !important;
 133+}
 134+.contrib-number {
 135+  color: #93a1a1 !important;
 136+}
 137+.counter {
 138+  background-color: #094352 !important;
 139+  color: #93a1a1 !important;
 140+}
 141+.diffstat-bar {
 142+  color: #839496 !important;
 143+}
 144+.file-header {
 145+  background-color: #073642 !important;
 146+}
 147+.file-history-tease .participation {
 148+  background-color: #002b36 !important;
 149+  color: #839496 !important;
 150+}
 151+.file-history-tease .participation .quickstat strong {
 152+  color: #839496 !important;
 153+}
 154+.file-history-tease .participation a {
 155+  color: #586e75 !important;
 156+}
 157+.file-history-tease .author a {
 158+  color: #839496 !important;
 159+}
 160+.file-history-tease-header {
 161+  background-color: #073642 !important;
 162+}
 163+.file-info-divider {
 164+  background-color: #586e75 !important;
 165+}
 166+.file-wrap {
 167+  color: #839496 !important;
 168+}
 169+.file-wrap * {
 170+  background-color: transparent !important;
 171+}
 172+.filter-bar {
 173+  background-color: #083c4a !important;
 174+}
 175+a.filter-item,
 176+.filter-item {
 177+  color: #839496 !important;
 178+}
 179+a.filter-item.selected,
 180+.filter-item.selected {
 181+  background-color: #073642 !important;
 182+  color: #93a1a1 !important;
 183+}
 184+a.filter-item:hover,
 185+.filter-item:hover {
 186+  background-color: #586e75 !important;
 187+  color: #93a1a1 !important;
 188+}
 189+.flash {
 190+  background-color: #073642 !important;
 191+  color: #93a1a1 !important;
 192+}
 193+.gh-header {
 194+  background-color: #002b36 !important;
 195+}
 196+.gh-header-number {
 197+  color: #586e75 !important;
 198+}
 199+.ellipsis-expander,
 200+.hidden-text-expander a {
 201+  background-color: #073642 !important;
 202+}
 203+.issue-meta {
 204+  color: #586e75 !important;
 205+}
 206+.issues-listing a {
 207+  color: #839496 !important;
 208+}
 209+.muted-link {
 210+  color: #839496 !important;
 211+}
 212+.new-user-avatar-cta {
 213+  background-color: #073642 !important;
 214+  border-color: #586e75 !important;
 215+  color: #93a1a1 !important;
 216+}
 217+.overall-summary {
 218+  border-color: #586e75 !important;
 219+}
 220+.pinned-repo-item.border {
 221+  border-color: #586e75 !important;
 222+}
 223+.progress-bar {
 224+  background-color: #586e75 !important;
 225+}
 226+.simple-box {
 227+  background-color: #073642 !important;
 228+}
 229+.social-count {
 230+  background-color: #073642 !important;
 231+  border-color: #586e75 !important;
 232+  color: #93a1a1 !important;
 233+}
 234+.scope-badge {
 235+  background-color: #586e75 !important;
 236+  color: #93a1a1 !important;
 237+}
 238+.stats-switcher-wrapper {
 239+  background-color: #002b36 !important;
 240+}
 241+.stats-switcher-wrapper .numbers-summary li a {
 242+  color: #839496 !important;
 243+}
 244+.table-list-header-toggle .btn-link {
 245+  color: #586e75 !important;
 246+}
 247+.table-list-header-toggle .btn-link.selected {
 248+  color: #839496 !important;
 249+}
 250+.text-emphasized {
 251+  color: #93a1a1 !important;
 252+}
 253+.text-diff-added {
 254+  color: #859900 !important;
 255+}
 256+.text-diff-deleted {
 257+  color: #dc322f !important;
 258+}
 259+.avatar,
 260+.timeline-comment-avatar {
 261+  filter: opacity(75%);
 262+}
 263+.blob-code {
 264+  background-color: #002b36 !important;
 265+  color: #839496 !important;
 266+}
 267+.blob-code-addition {
 268+  background-color: rgba(232,255,77,0.1) !important;
 269+}
 270+.blob-code-addition .x {
 271+  background-color: #647300 !important;
 272+  color: #c1cacb !important;
 273+}
 274+.blob-code-deletion {
 275+  background-color: rgba(220,50,47,0.2) !important;
 276+}
 277+.blob-code-deletion .x {
 278+  background-color: #721513 !important;
 279+  color: #c1cacb !important;
 280+}
 281+.blob-code-hunk {
 282+  background-color: #073642 !important;
 283+  border-color: #586e75 !important;
 284+}
 285+.blob-code-inner {
 286+  color: #839496 !important;
 287+}
 288+.blob-num {
 289+  background-color: #002b36 !important;
 290+  color: #586e75 !important;
 291+}
 292+.file {
 293+  color: #839496 !important;
 294+}
 295+.form-control {
 296+  background-color: #073642 !important;
 297+  border-color: #586e75 !important;
 298+}
 299+.pl-c {
 300+  color: #586e75 !important;
 301+}
 302+.pl-c1 {
 303+  color: #268bd2 !important;
 304+}
 305+.pl-e {
 306+  color: #b58900 !important;
 307+}
 308+.pl-en {
 309+  color: #268bd2 !important;
 310+}
 311+.pl-k {
 312+  color: #859900 !important;
 313+  font-weight: bold !important;
 314+}
 315+.pl-pds {
 316+  color: #2aa198 !important;
 317+}
 318+.pl-s {
 319+  color: #2aa198 !important;
 320+}
 321+.pl-smi {
 322+  color: #839496 !important;
 323+}
 324+.pl-v {
 325+  color: #859900 !important;
 326+  font-weight: bold !important;
 327+}
 328+.pl-mi1 {
 329+  color: #859900 !important;
 330+  background-color: transparent !important;
 331+}
 332+.pl-md {
 333+  color: #dc322f !important;
 334+  background-color: transparent !important;
 335+}
 336+.border-bottom,
 337+.border-top {
 338+  border-color: #073642 !important;
 339+}
 340+.boxed-group * {
 341+  border-color: #586e75 !important;
 342+}
 343+.boxed-group article {
 344+  background-color: #002b36 !important;
 345+  color: #839496 !important;
 346+}
 347+.boxed-group > h3 {
 348+  background-color: #094352 !important;
 349+  color: #93a1a1 !important;
 350+}
 351+.more-repos {
 352+  background-color: #094352 !important;
 353+  box-shadow: inset 0 1px 0 #586e75 !important;
 354+}
 355+.boxed-group-inner {
 356+  background-color: #002b36 !important;
 357+}
 358+.branch-action-body {
 359+  background-color: #073642 !important;
 360+  border-color: #586e75 !important;
 361+}
 362+.branch-action-body div {
 363+  border-color: #586e75 !important;
 364+}
 365+.branch-action-state-clean .branch-action-icon {
 366+  background-color: #859900 !important;
 367+}
 368+.branch-action-state-dirty .branch-action-icon,
 369+.branch-action-state-unstable .branch-action-icon,
 370+.branch-action-state-unknown .branch-action-icon {
 371+  background-color: #b58900 !important;
 372+  color: #fff !important;
 373+}
 374+.text-shadow-light,
 375+.branch-group-name,
 376+.branch-summary {
 377+  color: #839496 !important;
 378+  text-shadow: none !important;
 379+}
 380+.branch-a-b-count .meter {
 381+  background-color: #b58900 !important;
 382+}
 383+.more-branches,
 384+.branch-group-heading,
 385+.branch-infobar,
 386+.branch-name {
 387+  border-color: #586e75 !important;
 388+  background-color: #073642 !important;
 389+}
 390+.State,
 391+.State:visited {
 392+  color: #fff !important;
 393+}
 394+.State--red {
 395+  background-color: #dc322f !important;
 396+  color: #002b36 !important;
 397+}
 398+.State--green {
 399+  background-color: #859900 !important;
 400+  color: #002b36 !important;
 401+}
 402+.select-menu-filters {
 403+  background-color: #083c4a !important;
 404+  color: #93a1a1 !important;
 405+}
 406+.js-select-menu-tab {
 407+  background-color: #094352 !important;
 408+  color: #93a1a1 !important;
 409+}
 410+.select-menu-tabs a.selected,
 411+.select-menu-tab-nav.selected {
 412+  background-color: #586e75 !important;
 413+  color: #002b36 !important;
 414+}
 415+.signed-commit-header {
 416+  background-color: #002b36 !important;
 417+}
 418+.build-status-item {
 419+  background-color: #094352 !important;
 420+  color: #93a1a1 !important;
 421+}
 422+.build-status-item .build-status-details {
 423+  color: #268bd2 !important;
 424+}
 425+.capped-card h3 {
 426+  background-color: #094352 !important;
 427+}
 428+.capped-card h3 a {
 429+  color: #93a1a1 !important;
 430+}
 431+.capped-card-content {
 432+  background-color: #002b36 !important;
 433+}
 434+.capped-list th {
 435+  background-color: #083c4a !important;
 436+  color: #93a1a1 !important;
 437+}
 438+.capped-list tr:nth-child(2n) {
 439+  background-color: #073642 !important;
 440+}
 441+.commit,
 442+.commit-meta,
 443+.commit-icon .octicon,
 444+.commit-group-title .octicon-git-commit {
 445+  background-color: #002b36 !important;
 446+}
 447+.commit *,
 448+.commit-meta *,
 449+.commit-icon .octicon *,
 450+.commit-group-title .octicon-git-commit * {
 451+  border-color: #586e75 !important;
 452+}
 453+.commit-author {
 454+  color: #839496 !important;
 455+}
 456+.commit-author-section {
 457+  color: #839496 !important;
 458+}
 459+.commit-meta {
 460+  color: #586e75 !important;
 461+}
 462+.commit-meta .sha-block {
 463+  color: #586e75 !important;
 464+}
 465+.commit-meta .sha-block .sha {
 466+  color: #839496 !important;
 467+}
 468+.commit-ref,
 469+code.commit-sha {
 470+  background-color: #073642 !important;
 471+  color: #93a1a1 !important;
 472+}
 473+.commit-ref .user,
 474+code.commit-sha .user {
 475+  color: #2aa198 !important;
 476+}
 477+.commit-branches *,
 478+.commit-tease,
 479+.commit-title {
 480+  background-color: rgba(190,255,255,0.2) !important;
 481+  border: none !important;
 482+}
 483+.commit-branches * *,
 484+.commit-tease *,
 485+.commit-title * {
 486+  color: #93a1a1 !important;
 487+}
 488+.commit-tease-contributors {
 489+  background-color: #073642 !important;
 490+}
 491+div.commit-branches,
 492+div.commit.full-commit p.commit-title,
 493+qul.branches-list {
 494+  background-color: #073642 !important;
 495+  color: #93a1a1 !important;
 496+}
 497+div.commit-branches *,
 498+div.commit.full-commit p.commit-title *,
 499+qul.branches-list * {
 500+  background-color: #073642 !important;
 501+  color: #93a1a1 !important;
 502+}
 503+.commit-meta {
 504+  background-color: #073642 !important;
 505+  color: #839496 !important;
 506+}
 507+.commits-listing:before {
 508+  background-color: #073642 !important;
 509+}
 510+.full-commit {
 511+  background-color: #073642 !important;
 512+  border-color: #586e75 !important;
 513+}
 514+.full-commit * {
 515+  text-shadow: none !important;
 516+}
 517+.commit-desc pre {
 518+  background-color: transparent !important;
 519+  color: #839496 !important;
 520+}
 521+.commit.table-list-item {
 522+  border-color: #073642 !important;
 523+}
 524+.commit-meta.commit-author-section {
 525+  background-color: transparent !important;
 526+  color: #839496 !important;
 527+}
 528+.table-list-cell .commit-title {
 529+  background-color: transparent !important;
 530+  color: #839496 !important;
 531+}
 532+.completeness-indicator-success {
 533+  background-color: #859900 !important;
 534+}
 535+.completeness-indicator-problem {
 536+  background-color: #b58900 !important;
 537+  color: #fff !important;
 538+}
 539+.copyable-terminal {
 540+  background-color: #073642 !important;
 541+}
 542+.blankslate {
 543+  background-color: #073642 !important;
 544+  color: #93a1a1 !important;
 545+}
 546+.comment-form-head.tabnav {
 547+  background-color: #002b36 !important;
 548+}
 549+.conversation-list-heading .inner {
 550+  background-color: #002b36 !important;
 551+}
 552+.discussion-item-closed .discussion-item-icon {
 553+  background-color: #dc322f !important;
 554+  color: #93a1a1 !important;
 555+}
 556+.discussion-item-icon {
 557+  background-color: #586e75 !important;
 558+  color: #93a1a1 !important;
 559+}
 560+.discussion-item-icon.octicon {
 561+  color: #93a1a1 !important;
 562+}
 563+.discussion-item-entity,
 564+.discussion-item .renamed-was,
 565+.discussion-item .renamed-is {
 566+  color: #93a1a1 !important;
 567+}
 568+.discussion-timeline:before {
 569+  background-color: #657b83 !important;
 570+}
 571+.discussion-timeline-actions {
 572+  background-color: #002b36 !important;
 573+}
 574+.drag-and-drop {
 575+  background-color: #073642 !important;
 576+}
 577+.new-discussion-timeline .closed-banner {
 578+  background-color: #657b83 !important;
 579+  border-color: #002b36 !important;
 580+}
 581+.timeline-comment {
 582+  background-color: #002b36 !important;
 583+  border-color: #586e75 !important;
 584+}
 585+.timeline-comment-header {
 586+  background-color: #073642 !important;
 587+}
 588+.timeline-comment-wrapper {
 589+  border-color: #002b36 !important;
 590+}
 591+.donut-chart > .pending {
 592+  fill: #b58900 !important;
 593+}
 594+.dropdown-divider {
 595+  background-color: #657b83 !important;
 596+}
 597+.dropdown-item {
 598+  color: #839496 !important;
 599+}
 600+.dropdown-item:hover {
 601+  background-color: #586e75 !important;
 602+  color: #93a1a1 !important;
 603+}
 604+.dropdown-menu {
 605+  background-color: #094352 !important;
 606+  color: #93a1a1 !important;
 607+  border-color: #657b83 !important;
 608+}
 609+.files * {
 610+  color: #839496 !important;
 611+}
 612+.files tbody tr {
 613+  border-color: #073642 !important;
 614+}
 615+.files tbody tr:nth-child(even) {
 616+  background-color: #00323f !important;
 617+}
 618+.files tbody tr:nth-child(odd) {
 619+  background-color: #002b36 !important;
 620+}
 621+.files tbody tr:hover * {
 622+  background-color: #094352 !important;
 623+}
 624+.btn {
 625+  background-image: linear-gradient(to bottom, #586e75, #073642) !important;
 626+  border-color: #586e75 !important;
 627+  color: #93a1a1 !important;
 628+}
 629+.btn:hover {
 630+  background-color: #083c4a !important;
 631+}
 632+.btn-primary,
 633+.issues-listing .btn-primary {
 634+  background-color: #859900 !important;
 635+  background-image: linear-gradient(#859900, #424d00) !important;
 636+  color: #000 !important;
 637+  filter: opacity(62.5%);
 638+}
 639+.entry-title a {
 640+  color: #268bd2 !important;
 641+}
 642+.Header {
 643+  background-color: #083c4a !important;
 644+  border-bottom-color: #586e75 !important;
 645+}
 646+.Header a {
 647+  color: #93a1a1 !important;
 648+}
 649+.lang {
 650+  color: #93a1a1 !important;
 651+}
 652+.reponav-item,
 653+.pagehead-tabs-item {
 654+  background-color: #073642 !important;
 655+  border-color: transparent !important;
 656+  color: #839496 !important;
 657+}
 658+.reponav-item:visited,
 659+.pagehead-tabs-item:visited {
 660+  color: #839496 !important;
 661+}
 662+.reponav-item.selected,
 663+.pagehead-tabs-item.selected {
 664+  background-color: #002b36 !important;
 665+  border-color: #dc322f #094352 transparent !important;
 666+}
 667+.site-footer-links * {
 668+  color: #839496 !important;
 669+}
 670+.Box-row--focus-gray.navigation-focus {
 671+  background-color: #083c4a !important;
 672+  color: #93a1a1 !important;
 673+}
 674+.js-directory-link {
 675+  color: #268bd2 !important;
 676+}
 677+.js-site-search-form input,
 678+.js-chromeless-input-container {
 679+  background-color: #002b36 !important;
 680+  border-color: #586e75 !important;
 681+}
 682+a.label {
 683+  color: #000 !important;
 684+  filter: opacity(75%);
 685+}
 686+.notifications-list a {
 687+  color: #839496 !important;
 688+}
 689+.notifications-list li {
 690+  background-color: #002b36 !important;
 691+}
 692+.octicon-repo {
 693+  color: #93a1a1 !important;
 694+}
 695+.type-icon-state-closed {
 696+  color: rgba(255,54,43,0.65) !important;
 697+}
 698+.type-icon-state-merged {
 699+  color: #6c71c4 !important;
 700+}
 701+.type-icon-state-open {
 702+  color: rgba(205,212,0,0.65) !important;
 703+}
 704+.octicon-alert {
 705+  color: #fff !important;
 706+}
 707+.octicon-x {
 708+  color: #dc322f !important;
 709+}
 710+.octicon-check {
 711+  color: #859900 !important;
 712+}
 713+.octicon-primitive-dot {
 714+  color: #b58900 !important;
 715+}
 716+.octicon-clippy {
 717+  color: #93a1a1 !important;
 718+}
 719+.octicon-diff {
 720+  color: #fff !important;
 721+}
 722+.octicon-markdown {
 723+  color: #586e75 !important;
 724+}
 725+.orghead {
 726+  background-color: #073642 !important;
 727+  border-color: #657b83 !important;
 728+  border-bottom: 0px !important;
 729+  color: #93a1a1 !important;
 730+}
 731+.org-name {
 732+  color: #93a1a1 !important;
 733+}
 734+.pagehead.orghead {
 735+  background-color: #073642 !important;
 736+}
 737+.outline-box-highlighted {
 738+  background-color: #073642 !important;
 739+  color: #93a1a1 !important;
 740+}
 741+.pagination .current {
 742+  background-color: #586e75 !important;
 743+  color: #93a1a1 !important;
 744+}
 745+.pagination .disabled {
 746+  background-color: #073642 !important;
 747+  color: #586e75 !important;
 748+}
 749+.pagination .disabled:hover {
 750+  background-color: #073642 !important;
 751+}
 752+.pagination .gap {
 753+  background-color: #073642 !important;
 754+  color: #586e75 !important;
 755+}
 756+.pagination a {
 757+  background-color: #073642 !important;
 758+  border-color: #002b36 !important;
 759+  color: #839496 !important;
 760+}
 761+.pagination a:hover {
 762+  background-color: #586e75 !important;
 763+  color: #002b36 !important;
 764+}
 765+.empty-cell,
 766+.diffbar {
 767+  background-color: #002b36 !important;
 768+}
 769+.merge-status-item {
 770+  background-color: #094352 !important;
 771+}
 772+.merge-message {
 773+  background-color: #083c4a !important;
 774+}
 775+.pr-toolbar {
 776+  background-color: #002b36 !important;
 777+}
 778+.review-thread-reply {
 779+  background-color: #073642 !important;
 780+}
 781+.review-thread-reply .inline-comment-form {
 782+  background-color: #002b36 !important;
 783+}
 784+.merged.octicon,
 785+.octicon-git-merge {
 786+  color: #6c71c4 !important;
 787+}
 788+.uploaded-files {
 789+  background-color: #002b36 !important;
 790+}
 791+.upload-progress {
 792+  background-color: #073642 !important;
 793+  box-shadow: 1px 0px 0px #073642 inset;
 794+}
 795+#readme .plain {
 796+  background-color: #002b36 !important;
 797+}
 798+.markdown-body,
 799+.markdown-body table * {
 800+  background-color: #002b36 !important;
 801+  border-color: #657b83 !important;
 802+  color: #839496 !important;
 803+}
 804+.markdown-body a,
 805+.markdown-body table * a {
 806+  color: #268bd2 !important;
 807+}
 808+.markdown-body code,
 809+.markdown-body table * code,
 810+.markdown-body pre,
 811+.markdown-body table * pre {
 812+  background-color: #073642 !important;
 813+}
 814+.markdown-body hr,
 815+.markdown-body table * hr {
 816+  background-color: #586e75 !important;
 817+}
 818+.markdown-body img,
 819+.markdown-body table * img {
 820+  background-color: #002b36 !important;
 821+}
 822+.task-list-item.hovered {
 823+  background-color: #073642 !important;
 824+}
 825+.range-editor {
 826+  background-color: #073642 !important;
 827+}
 828+.compare-pr-placeholder {
 829+  background-color: #083c4a !important;
 830+}
 831+ul.comparison-list > li.title {
 832+  background-color: #094352 !important;
 833+}
 834+ul.comparison-list {
 835+  background-color: #083c4a !important;
 836+}
 837+.repository-description {
 838+  color: #839496 !important;
 839+}
 840+.repository-meta .edit-repository-meta label {
 841+  color: #839496 !important;
 842+}
 843+.pagehead.repohead {
 844+  background-color: #073642 !important;
 845+}
 846+.repository-content .RecentBranches {
 847+  background-color: #073642 !important;
 848+  border-color: #657b83 !important;
 849+}
 850+.repohead-details-container a {
 851+  color: #839496 !important;
 852+}
 853+.select-menu-modal {
 854+  border-color: #839496 !important;
 855+}
 856+.select-menu-modal * {
 857+  color: #839496 !important;
 858+}
 859+.select-menu-header,
 860+.select-menu-header * {
 861+  background-color: #073642 !important;
 862+  color: #93a1a1 !important;
 863+  text-shadow: none !important;
 864+}
 865+.select-menu-item {
 866+  background-color: #002b36 !important;
 867+}
 868+.select-menu-item.navigation-focus,
 869+.select-menu-item.navigation-focus.selected,
 870+.select-menu-item.navigation-focus.select-menu-action,
 871+.select-menu-item-text.navigation-focus {
 872+  background-color: #586e75 !important;
 873+  color: #93a1a1 !important;
 874+}
 875+.repository-sidebar {
 876+  background-color: #002b36 !important;
 877+}
 878+.thread-subscription-status {
 879+  background-color: #002b36 !important;
 880+}
 881+.sunken-menu {
 882+  background-image: linear-gradient(to right, #073642 0%, #002b36 8px) !important;
 883+  box-shadow: 1px 0px 0px #073642 inset;
 884+}
 885+.sunken-menu:before {
 886+  background-image: linear-gradient(#002b36, transparent) !important;
 887+}
 888+.sunken-menu:after {
 889+  background-image: linear-gradient(transparent, #002b36) !important;
 890+}
 891+.sunken-menu-item {
 892+  border-color: #002b36 !important;
 893+}
 894+.sunken-menu-item.selected {
 895+  background-color: #002b36 !important;
 896+  border-color: #094352 !important;
 897+  color: #93a1a1 !important;
 898+}
 899+.sunken-menu-item.selected:after {
 900+  background-color: #cb4b16 !important;
 901+}
 902+.sunken-menu-separator:before {
 903+  background-image: linear-gradient(to right, #073642 70%, #002b36 100%) !important;
 904+}
 905+.state {
 906+  color: #93a1a1 !important;
 907+}
 908+.state-closed {
 909+  background-color: #dc322f !important;
 910+}
 911+.state-open {
 912+  background-color: #859900 !important;
 913+}
 914+.subnav-item {
 915+  color: #839496 !important;
 916+}
 917+.subnav-item:hover {
 918+  background-color: #083c4a !important;
 919+}
 920+.subnav-item:visited {
 921+  color: #839496 !important;
 922+}
 923+.subnav-item.selected {
 924+  background-color: #073642 !important;
 925+}
 926+.subnav-links a:hover {
 927+  background-color: #073642 !important;
 928+}
 929+.subnav-search input {
 930+  border-color: #586e75 !important;
 931+}
 932+.right .tabnav-extra {
 933+  color: #586e75 !important;
 934+}
 935+a.tabnav-tab,
 936+.tabnav-tab {
 937+  border-color: transparent !important;
 938+  color: #586e75 !important;
 939+}
 940+a.tabnav-tab.selected,
 941+.tabnav-tab.selected {
 942+  background-color: #002b36 !important;
 943+  background-image: linear-gradient(#073642, #002b36) !important;
 944+  border-color: #657b83 !important;
 945+  color: #93a1a1 !important;
 946+}
 947+.table-list tr,
 948+.table-list li {
 949+  background-color: #002b36 !important;
 950+}
 951+.table-list tr:hover,
 952+.table-list li:hover {
 953+  background-color: #094352 !important;
 954+}
 955+.table-list-header {
 956+  background-color: #073642 !important;
 957+}
 958+.text-pending {
 959+  color: #b58900 !important;
 960+}
 961+.text-pending .octicon-primitive-dot {
 962+  color: #b58900 !important;
 963+}
 964+.text-red {
 965+  color: #dc322f !important;
 966+}
 967+.timeline-commits .commit-meta {
 968+  background-color: #002b36 !important;
 969+}
 970+.timeline-commits .commit-meta .commit-id {
 971+  color: #586e75 !important;
 972+}
 973+.topic-tag.topic-tag-link {
 974+  background-color: #073642 !important;
 975+  color: #839496 !important;
 976+}
 977+.underline-nav-item {
 978+  color: #839496 !important;
 979+}
 980+.underline-nav-item.selected {
 981+  border-bottom-color: #dc322f !important;
 982+  color: #839496 !important;
 983+}
 984+.user-profile-nav {
 985+  background-color: #073642 !important;
 986+  border-color: #657b83 !important;
 987+}
 988+.user-profile-sticky-bar:after {
 989+  background-color: #073642 !important;
 990+  border-color: #657b83 !important;
 991+}
 992+.graphs .area {
 993+  fill: #859900;
 994+}
 995+.summary-stats li .num {
 996+  color: #93a1a1 !important;
 997+}
 998+.viz {
 999+  background-color: #083c4a !important;
1000+}
1001+.facebox-popup {
1002+  color: #839496 !important;
1003+  background-color: #002b36 !important;
1004+}
1005+.facebox-popup .octicon {
1006+  color: #fff !important;
1007+}
1008+.facebox-popup .owner-select-target {
1009+  color: #839496 !important;
1010+  background-color: #073642 !important;
1011+}
1012+.facebox-popup .owner-select-target:hover {
1013+  background-color: #586e75 !important;
1014+}
1015+.suggester {
1016+  background-color: #094352 !important;
1017+}
1018+.suggester li.navigation-focus {
1019+  background-color: #586e75 !important;
1020+}
1021+.menu {
1022+  background-color: #073642 !important;
1023+}
1024+.menu-item.selected {
1025+  background-color: #094352 !important;
1026+}
1027+.menu-item:hover {
1028+  background-color: #586e75 !important;
1029+}
1030+.Box {
1031+  background-color: #002b36 !important;
1032+}
1033+.Box-header {
1034+  background-color: #073642 !important;
1035+}
1036+svg > * text {
1037+  color: #839496 !important;
1038+  fill: #839496 !important;
1039+}
1040+.insertions {
1041+  color: #859900 !important;
1042+}
1043+.deletions {
1044+  color: #dc322f !important;
1045+}
1046+.sfbgg {
1047+  background-color: #073642 !important;
1048+}
1049+.sbib_a {
1050+  background: linear-gradient(to bottom, #073642, #002b36) !important;
1051+}
1052+input#lst-ib,
1053+#sb_ifc0.sbib_b,
1054+#gs_taif0 {
1055+  background: transparent !important;
1056+}
1057+#lst-ib,
1058+.sbsb_a {
1059+  background-color: #002b36 !important;
1060+}
1061+.kpbb {
1062+  background-image: linear-gradient(to bottom, #59a9e1, #268bd2) !important;
1063+}
1064+#hdtbSum {
1065+  background-color: #002b36 !important;
1066+}
1067+#hdtbMenus.hdtb-td-o {
1068+  background-color: #002b36 !important;
1069+}
1070+#hdtb-tls.hdtb-tl {
1071+  background-image: linear-gradient(to bottom, #002b36, #073642) !important;
1072+}
1073+#hdtb-tls.hdtb-tl.hdtb-tl-sel {
1074+  background-image: linear-gradient(to bottom, #073642, #002b36) !important;
1075+}
1076+#abar_button_opt.ab_button {
1077+  background: linear-gradient(to bottom, #002b36, #073642) !important;
1078+}
1079+#appbar {
1080+  background-color: #002b36 !important;
1081+}
1082+cite {
1083+  color: #859900 !important;
1084+}
1085+.ab_dropdown {
1086+  background-color: #002b36 !important;
1087+}
1088+div.crp {
1089+  background-color: #002b36 !important;
1090+}
1091+#fbar {
1092+  background-color: #073642 !important;
1093+}
1094+tr.Even {
1095+  background-color: #073642 !important;
1096+}
1097+.BigQuote {
1098+  background-color: #073642 !important;
1099+  color: #cb4b16 !important;
1100+}
1101+.Cat1HL {
1102+  background-color: #586e75 !important;
1103+  color: #93a1a1 !important;
1104+}
1105+.Cat2HL {
1106+  background-color: #094352 !important;
1107+}
1108+.Cat3HL {
1109+  background-color: #083c4a !important;
1110+}
1111+.FeatureByline {
1112+  background-color: #073642 !important;
1113+  border: none !important;
1114+}
1115+.Headline {
1116+  background-color: #094352 !important;
1117+}
1118+.QuotedText {
1119+  color: #6c71c4 !important;
1120+}
1121+DIV.GAByline {
1122+  background-color: #073642 !important;
1123+  border: none !important;
1124+}
1125+table.OddEven tr:nth-child(even) {
1126+  background-color: #00323f !important;
1127+}
1128+table.OddEven tr:nth-child(odd) {
1129+  background-color: #002b36 !important;
1130+}
1131+DIV.CommentBox {
1132+  border-color: #073642 !important;
1133+}
1134+DIV.CommentBox P.CommentTitle {
1135+  background-color: #094352 !important;
1136+}
1137+#menu,
1138+.topnav-container {
1139+  background-color: #073642 !important;
1140+}
1141+.navmenu ul {
1142+  background-color: #073642 !important;
1143+}
1144+body * {
1145+  border-color: #094352 !important;
1146+}
1147+#content {
1148+  background-color: #002b36 !important;
1149+  color: #839496 !important;
1150+}
1151+#mw-head,
1152+#mw-panel {
1153+  background-color: #073642 !important;
1154+  color: #93a1a1 !important;
1155+}
1156+#mw-head div.portal,
1157+#mw-panel div.portal {
1158+  background-image: none !important;
1159+}
1160+#mw-head {
1161+  background-color: #073642 !important;
1162+  background-image: linear-gradient(to bottom, #002b36, #073642) !important;
1163+}
1164+#mw-panel,
1165+#p-logo {
1166+  background-image: linear-gradient(to right, #002b36, #073642) !important;
1167+}
1168+div.vectorTabs {
1169+  background-image: linear-gradient(to bottom, #002b36, #073642) !important;
1170+}
1171+div.vectorTabs ul {
1172+  background-image: linear-gradient(to bottom, #002b36, #073642) !important;
1173+}
1174+div.vectorTabs ul li {
1175+  background-color: #073642 !important;
1176+  background-image: none !important;
1177+  padding: 0px 1px 0px 1px !important;
1178+}
1179+div.vectorTabs span {
1180+  background-color: #073642 !important;
1181+  background-image: linear-gradient(to bottom, #002b36, #073642) !important;
1182+}
1183+div.vectorTabs li.selected,
1184+div.vectorTabs li.selected span {
1185+  background-color: transparent !important;
1186+  background-image: linear-gradient(to bottom, #073642, #002b36) !important;
1187+}
1188+.mw-wiki-logo {
1189+  filter: opacity(50%);
1190+}
1191+div#simpleSearch #searchInput {
1192+  background-color: #002b36 !important;
1193+  padding: 0.05em 0px 0.2em 0.2em !important;
1194+}
1195+.ambox,
1196+.infobox,
1197+#toc,
1198+#toctitle,
1199+.toclevel-1 {
1200+  background-color: #073642 !important;
1201+  border-color: #094352 !important;
1202+  color: #93a1a1 !important;
1203+}
1204+.catlinks {
1205+  background-color: #073642 !important;
1206+  border-color: #094352 !important;
1207+  color: #93a1a1 !important;
1208+}
1209+.navbox {
1210+  background-color: #073642 !important;
1211+  border-color: #094352 !important;
1212+  color: #93a1a1 !important;
1213+}
1214+.navbox .th,
1215+.navbox .navbox-title {
1216+  background-color: #094352 !important;
1217+}
1218+.navbox-abovebelow,
1219+th.navbox-group,
1220+.navbox-subgroup,
1221+.navbox-title {
1222+  background-color: #083c4a !important;
1223+}
1224+.navbox-even {
1225+  background-color: #002b36 !important;
1226+}
1227+h1,
1228+h2,
1229+h3,
1230+h4,
1231+h5,
1232+h6 {
1233+  border-color: #094352 !important;
1234+  color: #93a1a1 !important;
1235+}
1236+code {
1237+  background-color: #094352 !important;
1238+  border-color: #094352 !important;
1239+  color: #93a1a1 !important;
1240+}
1241+div.thumbinner {
1242+  background-color: #073642 !important;
1243+  border-color: #094352 !important;
1244+}
1245+img {
1246+  filter: opacity(75%);
1247+}
1248+img.thumbimage {
1249+  border-color: #094352 !important;
1250+}
1251+.mw-body .external {
1252+  opacity: 0.5 !important;
1253+}
1254+table.wikitable {
1255+  background-color: #002b36 !important;
1256+  border-color: #094352 !important;
1257+  color: #839496 !important;
1258+}
1259+table.wikitable > * > tr > th {
1260+  background-color: #073642 !important;
1261+}
1262+table {
1263+  background-color: #002b36 !important;
1264+}
1265+#hnmain > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(1) > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(1) > table,
1266+#hnmain > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(1) > table {
1267+  background-color: #cb4b16 !important;
1268+}
1269+#hnmain > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(1) > tbody:nth-child(1) > tr:nth-child(1) a,
1270+#hnmain > tbody:nth-child(1) > tr:nth-child(1) a {
1271+  color: #000 !important;
1272+}
1273+#hnmain > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(1) > tbody:nth-child(1) > tr:nth-child(2),
1274+#hnmain > tbody:nth-child(1) > tr:nth-child(2) {
1275+  background-color: #002b36 !important;
1276+}
1277+#hnmain > tbody:nth-child(1) > tr:nth-child(2) {
1278+  background-color: #002b36 !important;
1279+}
1280+.title a {
1281+  color: #839496 !important;
1282+}
1283+.title a:visited {
1284+  color: #586e75 !important;
1285+}
1286+a.storylink {
1287+  color: #93a1a1 !important;
1288+  font-weight: bold;
1289+}
1290+.sitestr {
1291+  color: #268bd2 !important;
1292+}
1293+#hnmain > tbody:nth-child(1) > tr:nth-child(3) > td:nth-child(1) {
1294+  background-color: #002b36 !important;
1295+}
1296+#hnmain .comhead {
1297+  color: #93a1a1 !important;
1298+}
1299+#hnmain .c00 {
1300+  color: #839496 !important;
1301+}
1302+#hnmain a.hnuser {
1303+  color: #b58900 !important;
1304+}
1305+#hnmain span.age a {
1306+  color: #586e75 !important;
1307+}
1308+.cdd {
1309+  color: rgba(255,54,43,0.65) !important;
1310+}
1311+.comment i {
1312+  color: #6c71c4 !important;
1313+}
1314+#hnmain > tbody:nth-child(1) > tr:nth-child(4) {
1315+  background-color: #002b36 !important;
1316+}
1317+#hnmain > tbody:nth-child(1) > tr:nth-child(4) > td:nth-child(1) > table:nth-child(2) > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(1) {
1318+  background-color: #cb4b16 !important;
1319+}
1320+div#page div#header {
1321+  background-color: #002b36 !important;
1322+}
1323+div#page div#header a {
1324+  color: #6c71c4 !important;
1325+}
1326+.post {
1327+  background-color: #002b36 !important;
1328+}
1329+.post * {
1330+  overflow: auto !important;
1331+}
1332+.post h2 {
1333+  background-color: #073642 !important;
1334+}
1335+.post h2 a {
1336+  color: #93a1a1 !important;
1337+}
1338+.post div.entry {
1339+  background-color: #002b36 !important;
1340+  color: #839496 !important;
1341+}
1342+.post div.entry blockquote {
1343+  background-color: #073642 !important;
1344+}
1345+.post div.entry kbd {
1346+  background-color: #073642 !important;
1347+  border-color: #586e75 !important;
1348+  box-shadow: none !important;
1349+  color: #93a1a1 !important;
1350+  text-shadow: 0px 1px 0px #000 !important;
1351+}
1352+.post pre.mode-line {
1353+  overflow: visible !important;
1354+}
1355+#sr-header-area {
1356+  background-color: #073642 !important;
1357+}
1358+#sr-header-area .srdrop .selected {
1359+  color: #839496 !important;
1360+}
1361+#sr-header-area #sr-more-link {
1362+  background-color: #073642 !important;
1363+}
1364+.link.promotedlink.promoted {
1365+  background-color: #073642 !important;
1366+}
1367+.link .usertext .md {
1368+  background-color: #073642 !important;
1369+}
1370+.linkinfo {
1371+  background-color: #073642 !important;
1372+}
1373+.linklisting .odd {
1374+  background-color: #073642 !important;
1375+}
1376+.thing .title {
1377+  color: #839496 !important;
1378+}
1379+div.md {
1380+  color: #839496 !important;
1381+}
1382+body.comment {
1383+  background-color: #002b36 !important;
1384+}
1385+.commentarea > .usertext {
1386+  background-color: #002b36 !important;
1387+}
1388+.commentarea .menuarea {
1389+  background-color: #002b36 !important;
1390+}
1391+.comments-page .panestack-title {
1392+  background-color: #002b36 !important;
1393+}
1394+.listing-chooser {
1395+  background-color: #002b36 !important;
1396+}
1397+.listing-chooser .intro {
1398+  background-color: #586e75 !important;
1399+  color: #93a1a1 !important;
1400+}
1401+.listing-chooser .grippy {
1402+  background-color: #002b36 !important;
1403+}
1404+.listing-chooser .grippy:after {
1405+  border-right: none !important;
1406+}
1407+.listing-chooser li {
1408+  background-color: #073642 !important;
1409+}
1410+.listing-chooser li.selected {
1411+  background-color: #586e75 !important;
1412+  box-shadow: none;
1413+}
1414+.listing-chooser li a {
1415+  color: #839496 !important;
1416+}
1417+.listing-chooser li a .description {
1418+  color: #93a1a1 !important;
1419+}
1420+.titlebox {
1421+  background-color: #073642 !important;
1422+}
1423+.titlebox form.toggle {
1424+  background-color: #073642 !important;
1425+  color: #839496 !important;
1426+}
1427+.side .usertext-body .md {
1428+  background-color: #073642 !important;
1429+}
1430+.side {
1431+  background-color: #073642 !important;
1432+}
1433+.sidebox .spacer {
1434+  background-color: #073642 !important;
1435+  color: #93a1a1 !important;
1436+}
1437+.tabmenu li a {
1438+  background-color: #073642 !important;
1439+}
1440+#header-bottom-right {
1441+  background-color: #073642 !important;
1442+}
1443+.morelink .nub {
1444+  background-color: #073642 !important;
1445+}
1446+* {
1447+  border-color: #657b83 !important;
1448+}
1449+a {
1450+  color: #268bd2 !important;
1451+}
1452+a:visited {
1453+  color: #6c71c4 !important;
1454+}
1455+body {
1456+  background-color: #002b36 !important;
1457+  color: #839496 !important;
1458+}
1459+html {
1460+  background-color: #002b36 !important;
1461+}
1462+input,
1463+textarea {
1464+  background-color: #073642 !important;
1465+  color: #839496 !important;
1466+}
1467+tr:hover,
1468+blockquote,
1469+pre {
1470+  background-color: #073642 !important;
1471+  color: #839496 !important;
1472+}
1473+#toolMenu li {
1474+  background-color: #002b36 !important;
1475+}
1476+.navPanel,
1477+.navIntraTool {
1478+  background-color: #002b36 !important;
1479+}
1480+.instruction,
1481+.sakaiCopyrightInfo {
1482+  color: #839496 !important;
1483+}
1484+.listHier th {
1485+  background-color: #094352 !important;
1486+}
1487+ul.makeMenu {
1488+  background-color: #094352 !important;
1489+  border: 1px solid #094352 !important;
1490+}
1491+tr.external {
1492+  background-color: #094352 !important;
1493+}
1494+hr {
1495+  background-color: #094352 !important;
1496+  color: #094352 !important;
1497+}
1498+.bounty-indicator,
1499+.bounty-indicator-tab {
1500+  background-color: #6c71c4 !important;
1501+}
1502+.bottom-notice {
1503+  background-color: #073642 !important;
1504+}
1505+.comments-link {
1506+  color: #859900 !important;
1507+}
1508+.page-numbers {
1509+  background-color: #859900 !important;
1510+  color: #eee8d5 !important;
1511+}
1512+.page-numbers.current {
1513+  background-color: #cb4b16 !important;
1514+  color: #002b36 !important;
1515+}
1516+.post-menu a {
1517+  color: #6c71c4 !important;
1518+}
1519+.question-status {
1520+  background-color: #073642 !important;
1521+}
1522+.bg-black-050 {
1523+  background-color: transparent !important;
1524+}
1525+.val-info {
1526+  background-color: transparent !important;
1527+  color: #839496 !important;
1528+}
1529+.s-label {
1530+  color: #839496 !important;
1531+}
1532+pre code {
1533+  background-color: #073642 !important;
1534+  color: #93a1a1 !important;
1535+}
1536+pre code .atn {
1537+  color: #268bd2 !important;
1538+}
1539+pre code .atv {
1540+  color: #2aa198 !important;
1541+}
1542+pre code .com {
1543+  color: #586e75 !important;
1544+}
1545+pre code .kwd {
1546+  color: #859900 !important;
1547+}
1548+pre code .lit {
1549+  color: #d33682 !important;
1550+}
1551+pre code .pln,
1552+pre code .pun {
1553+  color: #839496 !important;
1554+}
1555+pre code .str {
1556+  color: #2aa198 !important;
1557+}
1558+pre code .tag {
1559+  color: #859900 !important;
1560+}
1561+pre code .typ {
1562+  color: #b58900 !important;
1563+}
1564+#footer {
1565+  background-color: #083c4a !important;
1566+  color: #839496 !important;
1567+}
1568+#footer #footer-sites th {
1569+  color: #93a1a1 !important;
1570+}
1571+.top-footer-links a {
1572+  color: #859900 !important;
1573+}
1574+.so-header {
1575+  background-color: #094352 !important;
1576+  color: #93a1a1 !important;
1577+}
1578+.so-header a {
1579+  color: #859900 !important;
1580+}
1581+.so-header .navigation .-list .-item :hover {
1582+  background-color: #859900 !important;
1583+  color: #fdf6e3 !important;
1584+}
1585+.topbar-dialog {
1586+  background-color: #002b36 !important;
1587+  box-shadow: #586e75 5px 5px 5px;
1588+}
1589+.topbar-dialog .current-site-container {
1590+  background-color: #002b36 !important;
1591+}
1592+.topbar-dialog .header {
1593+  background-color: #073642 !important;
1594+}
1595+.topbar-dialog .header a {
1596+  color: #93a1a1 !important;
1597+}
1598+.topbar-dialog .site-link {
1599+  color: #93a1a1 !important;
1600+}
1601+#header {
1602+  background-color: #094352 !important;
1603+}
1604+#question-header .question-hyperlink {
1605+  color: #93a1a1 !important;
1606+}
1607+#hlogo a {
1608+  filter: opacity(75%);
1609+}
1610+.new-post-activity {
1611+  background-color: #073642 !important;
1612+}
1613+.tagged-interesting {
1614+  background-color: #094352 !important;
1615+}
1616+div.answered-accepted {
1617+  background-color: #859900 !important;
1618+  color: #eee8d5 !important;
1619+}
1620+div.answered-accepted .mini-counts {
1621+  background-color: #859900 !important;
1622+  color: #eee8d5 !important;
1623+}
1624+.answered .mini-counts span {
1625+  color: #859900 !important;
1626+}
1627+.unanswered .mini-counts span {
1628+  color: #839496 !important;
1629+}
1630+#hot-network-questions a {
1631+  color: #2aa198 !important;
1632+}
1633+#hot-network-questions h4 a.js-gps-track {
1634+  color: #93a1a1 !important;
1635+}
1636+#sidebar .community-bulletin .bulletin-item-content a {
1637+  color: #93a1a1 !important;
1638+}
1639+#sidebar .module.community-bulletin {
1640+  background-color: #073642 !important;
1641+  color: #93a1a1 !important;
1642+}
1643+#sidebar .question-hyperlink {
1644+  color: #2aa198 !important;
1645+}
1646+.newuser {
1647+  background-color: #073642 !important;
1648+  color: #93a1a1 !important;
1649+}
1650+.label-key {
1651+  color: #839496 !important;
1652+}
1653+.label-key b {
1654+  color: #93a1a1 !important;
1655+}
1656+#h-chat-link {
1657+  color: #93a1a1 !important;
1658+}
1659+.ad502-room {
1660+  background-color: #073642 !important;
1661+  box-shadow: #586e75 0px 1px 3px;
1662+  color: #93a1a1 !important;
1663+}
1664+#tabs a {
1665+  background-color: transparent !important;
1666+  background-image: linear-gradient(to bottom, #002b36, #073642);
1667+  color: #93a1a1 !important;
1668+}
1669+#tabs a.youarehere {
1670+  background-image: linear-gradient(to bottom, #cb4b16, #002b36);
1671+  color: #fdf6e3 !important;
1672+}
1673+.post-tag {
1674+  background-color: #586e75 !important;
1675+  color: #002b36 !important;
1676+}
1677+.post-tag::before {
1678+  background-color: #002b36 !important;
1679+}
1680+a.comment-user.owner {
1681+  background-color: #859900 !important;
1682+  color: #eee8d5 !important;
1683+}
1684+.post-signature {
1685+  background-color: #073642 !important;
1686+  color: #93a1a1 !important;
1687+}
1688+.post-signature a {
1689+  color: #2aa198 !important;
1690+}
1691+.post-signature.owner .user-info .user-details a {
1692+  color: #859900 !important;
1693+}
1694+.post-signature span.relativetime {
1695+  color: #93a1a1 !important;
1696+}
1697+.vote {
1698+  background-color: #073642 !important;
1699+}
1700+.vote .star-off {
1701+  filter: opacity(75%);
1702+}
1703+.vote .star-on {
1704+  filter: opacity(50%) !important;
1705+}
1706+.vote .vote-down-off,
1707+.vote .vote-up-off {
1708+  filter: opacity(50%);
1709+}
1710+.answer-votes {
1711+  background-color: #586e75 !important;
1712+  color: #002b36 !important;
1713+}
A config/qutebrowser/theme.css
+0, -0
A config/sway/config
+259, -0
  1@@ -0,0 +1,259 @@
  2+# Read `man 5 sway` for a complete reference. exec wl-paste -t text --watch clipman store exec wl-paste -p -t text --watch clipman store -P --histpath="~/.local/share/clipman-primary.json" ## Variables
  3+#
  4+# Logo key. Use Mod1 for Alt.
  5+set $mod Mod4
  6+# Home row direction keys, like vim
  7+set $left h
  8+set $down j
  9+set $up k
 10+set $right l
 11+# Your preferred terminal emulator
 12+set $term foot
 13+
 14+set $background #282a36
 15+set $color5 #bd93f9
 16+set $menuargs --binding vim --no-exec --no-overlap --ignorecase --prompt '>>' --fn "FiraCode 15" --tf "$color5" --hf "$color5" --tb "$background" --fb "$background" --nb "$background" --ab "$background" --hb "$background"
 17+set $menu bemenu-run $menuargs | xargs swaymsg exec --
 18+
 19+client.focused		#bd93f9 #bd93f9 #414558 #50fa7b #bd93f9
 20+client.unfocused	#282a36 #282a36 #81859b #50fa7b #44475a
 21+
 22+default_border pixel 2
 23+
 24+### Output configuration
 25+output * bg /home/erock/config/wallpapers/linux_dracula.png fill
 26+
 27+set $home DP-1
 28+#output $home mode 2560x1440@144Hz
 29+#output $home scale 1
 30+
 31+set $home3 DP-3
 32+output $home3 mode 2560x1440@144Hz
 33+output $home3 scale 1
 34+
 35+set $cahoots DP-4
 36+# Dell Inc. DELL U2713HM JMPXK44LA7AL
 37+output $cahoots mode 2560x1440@59.951Hz
 38+output $cahoots scale 1.2
 39+
 40+#set $cahoots DP-3
 41+#output $cahoots mode 3840x2160@120.000Hz
 42+#output $cahoots scale 1.5
 43+
 44+set $laptop eDP-1
 45+output $laptop mode 2256x1504@59.999Hz
 46+output $laptop scale 1.5
 47+
 48+bindswitch lid:on output $laptop disable
 49+bindswitch lid:off output $laptop enable
 50+
 51+# from /usr/include/xkbcommon/xkbcommon-keysyms.h
 52+# RUN: `usermod -a -G video erock`
 53+bindsym XF86MonBrightnessUp exec light -A 1
 54+bindsym XF86MonBrightnessDown exec light -U 1
 55+# RUN: pacman -S pamixer
 56+bindsym XF86AudioMute exec pamixer --toggle-mute
 57+bindsym XF86AudioLowerVolume exec pamixer -d 5
 58+bindsym XF86AudioRaiseVolume exec pamixer -i 5
 59+bindsym $mod+Shift+s exec grimshot --notify save area
 60+
 61+### Input configuration
 62+#
 63+# Example configuration:
 64+#
 65+#   input "2:14:SynPS/2_Synaptics_TouchPad" {
 66+#       dwt enabled
 67+#       tap enabled
 68+#       natural_scroll enabled
 69+#       middle_emulation enabled
 70+#   }
 71+#
 72+# You can get the names of your inputs by running: swaymsg -t get_inputs
 73+# Read `man 5 sway-input` for more information about this section.
 74+
 75+input "type:touchpad" {
 76+    tap enabled
 77+    natural_scroll disabled
 78+    dwt disabled
 79+    accel_profile "flat" # disable mouse acceleration (enabled by default; to set it manually, use "adaptive" instead of "flat")
 80+    pointer_accel 0.0 # set mouse sensitivity (between -1 and 1)
 81+}
 82+
 83+input "1149:8257:Kensington_Slimblade_Trackball" {
 84+    # 272 (left) (phys: front-left)
 85+    # 273 (right) (phys: front-right)
 86+    # 274 (middle) (phys: back-left)
 87+    # 275 (side) (phys: back-right)
 88+}
 89+
 90+input "type:keyboard" {
 91+	repeat_delay 300
 92+	repeat_rate 30
 93+}
 94+
 95+input "1:1:AT_Translated_Set_2_keyboard" {
 96+  xkb_options "caps:escape,altwin:swap_alt_win"
 97+}
 98+
 99+input "18003:1:foostan_Corne" {
100+}
101+
102+input "4152:5920:SteelSeries_SteelSeries_Rival_310_eSports_Mouse_Keyboard" {
103+    scroll_factor 1
104+}
105+
106+### Key bindings
107+#
108+# Basics:
109+#
110+    # Start a terminal
111+    bindsym $mod+Return exec $term
112+
113+    # Kill focused window
114+    bindsym $mod+Shift+q kill
115+
116+    # Start your launcher
117+    bindsym $mod+d exec $menu
118+
119+    # Drag floating windows by holding down $mod and left mouse button.
120+    # Resize them with right mouse button + $mod.
121+    # Despite the name, also works for non-floating windows.
122+    # Change normal to inverse to use left mouse button for resizing and right
123+    # mouse button for dragging.
124+    floating_modifier $mod normal
125+
126+    # Reload the configuration file
127+    bindsym $mod+Shift+c reload
128+
129+    # Exit sway (logs you out of your Wayland session)
130+    bindsym $mod+Shift+e exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -b 'Yes, exit sway' 'swaymsg exit'
131+#
132+# Moving around:
133+#
134+    # Move your focus around
135+    bindsym $mod+$left focus left
136+    bindsym $mod+$down focus down
137+    bindsym $mod+$up focus up
138+    bindsym $mod+$right focus right
139+
140+    # Move the focused window with the same, but add Shift
141+    bindsym $mod+Shift+$left move left
142+    bindsym $mod+Shift+$down move down
143+    bindsym $mod+Shift+$up move up
144+    bindsym $mod+Shift+$right move right
145+#
146+# Workspaces:
147+#
148+    # Switch to workspace
149+    bindsym $mod+1 workspace number 1
150+    bindsym $mod+2 workspace number 2
151+    bindsym $mod+3 workspace number 3
152+    bindsym $mod+4 workspace number 4
153+    bindsym $mod+5 workspace number 5
154+    bindsym $mod+6 workspace number 6
155+    bindsym $mod+7 workspace number 7
156+    bindsym $mod+8 workspace number 8
157+    bindsym $mod+9 workspace number 9
158+    bindsym $mod+0 workspace number 10
159+    # Move focused container to workspace
160+    bindsym $mod+Shift+1 move container to workspace number 1
161+    bindsym $mod+Shift+2 move container to workspace number 2
162+    bindsym $mod+Shift+3 move container to workspace number 3
163+    bindsym $mod+Shift+4 move container to workspace number 4
164+    bindsym $mod+Shift+5 move container to workspace number 5
165+    bindsym $mod+Shift+6 move container to workspace number 6
166+    bindsym $mod+Shift+7 move container to workspace number 7
167+    bindsym $mod+Shift+8 move container to workspace number 8
168+    bindsym $mod+Shift+9 move container to workspace number 9
169+    bindsym $mod+Shift+0 move container to workspace number 10
170+    # Note: workspaces can have any name you want, not just numbers.
171+    # We just use 1-10 as the default.
172+
173+#
174+# Clipboard:
175+#
176+    bindsym $mod+c exec wl-copy
177+    bindsym $mod+v exec wl-paste
178+
179+#
180+# Layout stuff:
181+#
182+    # You can "split" the current object of your focus with
183+    # $mod+b or $mod+v, for horizontal and vertical splits
184+    # respectively.
185+    bindsym $mod+z splith
186+    bindsym $mod+x splitv
187+
188+    # Switch the current container between different layout styles
189+    bindsym $mod+s layout stacking
190+    bindsym $mod+w layout tabbed
191+    bindsym $mod+e layout toggle split
192+
193+    # Make the current focus fullscreen
194+    bindsym $mod+f fullscreen
195+
196+    # Toggle the current focus between tiling and floating mode
197+    bindsym $mod+Shift+space floating toggle
198+
199+    # Swap focus between the tiling area and the floating area
200+    bindsym $mod+space focus mode_toggle
201+
202+    # Move focus to the parent container
203+    bindsym $mod+a focus parent
204+#
205+# Scratchpad:
206+#
207+    # Sway has a "scratchpad", which is a bag of holding for windows.
208+    # You can send windows there and get them back later.
209+
210+    # Move the currently focused window to the scratchpad
211+    bindsym $mod+Shift+minus move scratchpad
212+
213+    # Show the next scratchpad window or hide the focused scratchpad window.
214+    # If there are multiple scratchpad windows, this command cycles through them.
215+    bindsym $mod+minus scratchpad show
216+#
217+# Resizing containers:
218+#
219+mode "resize" {
220+    # left will shrink the containers width
221+    # right will grow the containers width
222+    # up will shrink the containers height
223+    # down will grow the containers height
224+    bindsym $left resize shrink width 10px
225+    bindsym $down resize grow height 10px
226+    bindsym $up resize shrink height 10px
227+    bindsym $right resize grow width 10px
228+
229+    # Ditto, with arrow keys
230+    bindsym Left resize shrink width 10px
231+    bindsym Down resize grow height 10px
232+    bindsym Up resize shrink height 10px
233+    bindsym Right resize grow width 10px
234+
235+    # Return to default mode
236+    bindsym Return mode "default"
237+    bindsym Escape mode "default"
238+}
239+bindsym $mod+r mode "resize"
240+
241+#
242+# Status Bar:
243+#
244+# Read `man 5 sway-bar` for more information about this section.
245+bar {
246+	swaybar_command waybar
247+}
248+
249+include /etc/sway/config.d/*
250+
251+# exec swayidle
252+# flux alternative  with hardcoded lat/long
253+# exec_always wlsunset -l 42.265385 -L -83.716557
254+
255+exec_always gammastep -l 42.265385:-83.716557 -t 6500:3500
256+
257+# notifications
258+exec mako
259+# swipe gestures
260+exec libinput-gestures-setup autostart start
A config/vdirsyncer/config
+67, -0
 1@@ -0,0 +1,67 @@
 2+[general]
 3+status_path = "/home/erock/.vdirsyncer/status/"
 4+
 5+# CARDDAV
 6+[pair contacts]
 7+a = "contacts_local"
 8+b = "contacts_remote"
 9+collections = ["Default"]
10+conflict_resolution = "b wins"
11+metadata = ["displayname"]
12+
13+[storage contacts_local]
14+type = "filesystem"
15+path = "/home/erock/.contacts/"
16+fileext = ".vcf"
17+
18+[storage contacts_remote]
19+type = "carddav"
20+url = "https://carddav.fastmail.com/"
21+username = "me@erock.io"
22+password = "5cgeapsmpxwre55r"
23+
24+# CALDAV
25+[pair fastmail]
26+a = "fastmail_local"
27+b = "fastmail_remote"
28+collections = ["3b9b2f5e-cbc9-4f8a-8e54-f210dcb8b1a6"]
29+conflict_resolution = "b wins"
30+
31+[storage fastmail_local]
32+type = "filesystem"
33+path = "/home/erock/.calendars/"
34+fileext = ".ics"
35+
36+[storage fastmail_remote]
37+type = "caldav"
38+url = "https://caldav.fastmail.com/"
39+username = "me@erock.io"
40+password = "5cgeapsmpxwre55r"
41+
42+[pair shijing]
43+a = "shijing_local"
44+b = "shijing_remote"
45+collections = null
46+
47+[storage shijing_local]
48+type = "filesystem"
49+path = "/home/erock/.calendars/shijing"
50+fileext = ".ics"
51+
52+[storage shijing_remote]
53+type = "http"
54+url = "https://calendar.google.com/calendar/ical/shijingjia%40gmail.com/private-57f965d846f7fe37d857cd2f9af3d23b/basic.ics"
55+
56+[pair work]
57+a = "work_local"
58+b = "work_remote"
59+collections = null
60+
61+[storage work_local]
62+type = "filesystem"
63+path = "/home/erock/.calendars/work"
64+fileext = ".ics"
65+
66+[storage work_remote]
67+type = "http"
68+url = "https://calendar.google.com/calendar/ical/eric.bower%40aptible.com/private-74e695f18c814f2a16af258664c34ef0/basic.ics"
A config/waybar/config
+51, -0
 1@@ -0,0 +1,51 @@
 2+{
 3+	"layer": "top",
 4+  "position": "bottom",
 5+	"modules-left": ["sway/workspaces"],
 6+	"modules-center": ["sway/window"],
 7+	"modules-right": ["battery", "backlight", "pulseaudio", "network", "clock"],
 8+
 9+	"pulseaudio": {
10+		"tooltip": false,
11+		"scroll-step": 5,
12+		"format": "{icon}   {volume}%",
13+		"format-muted": "{icon}   {volume}%",
14+		"on-click":"pavucontrol",
15+		"format-icons": {
16+			"default": [" ", " ", " "]
17+		}
18+	},
19+  "sway/workspaces": {
20+      "disable-scroll": true,
21+      "all-outputs": true,
22+      "format": "{name}"
23+  },
24+	"network": {
25+		"tooltip": false,
26+		"format-wifi": "    {essid}",
27+		"format-ethernet": "",
28+    "on-click": "iwgtk"
29+	},
30+	"backlight": {
31+		"tooltip": false,
32+		"format": " {}%",
33+		"interval":1,
34+    "on-scroll-up": "light -A 5",
35+		"on-scroll-down": "light -U 5"
36+	},
37+  "battery": {
38+      "states": {
39+          "good": 95,
40+          "warning": 30,
41+          "critical": 20
42+      },
43+      "format": "{icon}  {capacity}%",
44+      "format-charging": "  {capacity}%",
45+      "format-plugged": "  {capacity}%",
46+      "format-alt": "{time} {icon}",
47+      "format-icons": [" ", " ", " ", " ", " "]
48+  },
49+  "clock": {
50+      "format": "{:%I:%M %m/%d}"
51+  }
52+}
A config/waybar/style.css
+93, -0
 1@@ -0,0 +1,93 @@
 2+* {
 3+	border: none;
 4+  padding: 0;
 5+  margin: 0;
 6+	transition: none;
 7+}
 8+
 9+window#waybar {
10+	background: #282a36;
11+  color: #f2f2f2;
12+}
13+
14+window#waybar.hidden {
15+	opacity: 0.2;
16+}
17+
18+#window {
19+}
20+
21+#workspaces {
22+	background: #161320;
23+}
24+
25+#workspaces button {
26+  padding: 0 5px;
27+	color: #B5E8E0;
28+	background: transparent;
29+  border: 2px solid black;
30+}
31+
32+#workspaces button.focused {
33+	color: #ABE9B3;
34+  border: 2px solid #ABE9B3;
35+}
36+
37+#workspaces button:hover {
38+	box-shadow: inherit;
39+	text-shadow: inherit;
40+  border: 2px solid #E8A2AF;
41+  color: #E8A2AF;
42+}
43+
44+#pulseaudio {
45+  padding: 0 10px;
46+	color: #1A1826;
47+	background: #FAE3B0;
48+}
49+
50+#backlight {
51+  padding: 0 10px;
52+	color: #161320;
53+	background: #F8BD96;
54+}
55+
56+#clock {
57+  padding: 0 10px;
58+	color: #161320;
59+	background: #ABE9B3;
60+}
61+
62+#network {
63+  padding: 0 10px;
64+	color: #161320;
65+	background: #DDB6F2;
66+}
67+
68+#battery {
69+  padding: 0 10px;
70+	color: #161320;
71+	background: #B5E8E0;
72+}
73+
74+#battery.charging, #battery.plugged {
75+	color: #161320;
76+  background-color: #B5E8E0;
77+}
78+
79+#battery.critical:not(.charging) {
80+  background-color: #B5E8E0;
81+  color: #161320;
82+  animation-name: blink;
83+  animation-duration: 0.5s;
84+  animation-timing-function: linear;
85+  animation-iteration-count: infinite;
86+  animation-direction: alternate;
87+}
88+
89+@keyframes blink {
90+  to {
91+    background-color: #BF616A;
92+    color: #B5E8E0;
93+  }
94+}
A config/zls.json
+4, -0
1@@ -0,0 +1,4 @@
2+{
3+  "enable_autofix": false,
4+  "enable_build_on_save": true
5+}
A dotfiles.sh
+81, -0
 1@@ -0,0 +1,81 @@
 2+#!/usr/bin/env bash
 3+
 4+TRACKED_FILES=(
 5+    gitconfig
 6+    tmux.conf
 7+    mbsyncrc
 8+    gpg-agent.conf
 9+    bin/
10+    config/
11+    ssh_config
12+    mblaze
13+    msmtprc
14+    config/qutebrowser/
15+    npmrc
16+)
17+
18+TRACKED_LOCATIONS=(
19+    ~/.gitconfig
20+    ~/.tmux.conf
21+    ~/.mbsyncrc
22+    ~/.gnupg/gpg-agent.conf
23+    ~/bin/
24+    ~/.config/
25+    ~/.ssh/config
26+    ~/.mblaze/profile
27+    ~/.msmtprc
28+    ~/.qutebrowser/
29+    ~/.npmrc
30+)
31+
32+find_files() {
33+    if [[ ${TRACKED_FILES[$1]} == */ ]]; then
34+        find "$PWD/${TRACKED_FILES[$1]}" -type d -exec find {} -maxdepth 1 -type f \; | sed "s|$PWD/${TRACKED_FILES[$1]}||" | sed "s|^/||"
35+    fi
36+}
37+
38+link_file() {
39+    if [[ ! -L $2 && ! -f $2 && ! -d $2 ]]; then
40+        echo "Creating a link from $1 to $2"
41+        mkdir -p $2
42+        rmdir $2
43+        ln -s $1 $2
44+    fi
45+}
46+export -f link_file
47+
48+unlink_file() {
49+    if [[ -L $1 ]]; then
50+        echo "Unlinking $1"
51+        unlink "$1"
52+    fi
53+}
54+export -f unlink_file
55+
56+move_file() {
57+    if [[ ! -L $1 ]] && [[ -f $1 || -d $1 ]]; then
58+        echo "Moving $1 to backup/$1"
59+        mkdir -p "backup/$1"
60+        rmdir "backup/$1"
61+        mv $1 "backup/$1"
62+    fi
63+}
64+export -f move_file
65+
66+for ((i = 0; i < ${#TRACKED_FILES[@]}; ++i)); do
67+    if [ "$1" == "cleanup" ]; then
68+        unlink_file "${TRACKED_LOCATIONS[$i]}"
69+        find_files "$i" | xargs -I {} bash -c "unlink_file ${TRACKED_LOCATIONS[$i]}{}"
70+        continue
71+    fi
72+
73+    if [ "$1" == "override" ]; then
74+        move_file ${TRACKED_LOCATIONS[$i]}
75+        find_files "$i" | xargs -I {} bash -c "move_file ${TRACKED_LOCATIONS[$i]}{}"
76+    fi
77+
78+    if [ "$1" != "cleanup" ]; then
79+        link_file "$PWD/${TRACKED_FILES[$i]}" "${TRACKED_LOCATIONS[$i]}"
80+        find_files "$i" | xargs -I {} bash -c "link_file $PWD/${TRACKED_FILES[$i]}{} ${TRACKED_LOCATIONS[$i]}{}"
81+    fi
82+done
A gitconfig
+20, -0
 1@@ -0,0 +1,20 @@
 2+[gpg]
 3+	program = gpg2
 4+[user]
 5+	signingkey = 7A51A47D76D3FD02
 6+	name = Eric Bower
 7+	email = me@erock.io
 8+[pull]
 9+  rebase = true
10+[sendemail]
11+	smtpserver = smtp.fastmail.com
12+	smtpuser = me@erock.io
13+	smtpencryption = tls
14+	smtpserverport = 587
15+	annotate = yes
16+[init]
17+  defaultBranch = main
18+[diff]
19+  renames = true
20+[format]
21+  useAutoBase = whenAble
A gpg-agent.conf
+3, -0
1@@ -0,0 +1,3 @@
2+default-cache-ttl 31536000
3+max-cache-ttl 31536000
4+enable-ssh-support
A mblaze
+3, -0
1@@ -0,0 +1,3 @@
2+Local-Mailbox: me@erock.io
3+Reply-From: me@erock.io
4+Outbox: ~/mail/Sent
A mbsyncrc
+27, -0
 1@@ -0,0 +1,27 @@
 2+IMAPAccount fastmail
 3+# Address to connect to
 4+Host imap.fastmail.com
 5+User me@erock.io
 6+PassCmd "pass logins/local-mail"
 7+SSLType IMAPS
 8+IMAPStore fastmail-remote
 9+Account fastmail
10+MaildirStore fastmail-local
11+SubFolders Verbatim
12+# The trailing "/" is important
13+Path ~/mail/
14+Inbox ~/mail/INBOX
15+
16+Channel fastmail
17+Master :fastmail-remote:
18+Slave :fastmail-local:
19+# Exclude everything under the internal [Gmail] folder, except the interesting folders
20+# Patterns * ![Gmail]* "[Gmail]/Sent Mail" "[Gmail]/Starred" "[Gmail]/All Mail"
21+# Or include everything
22+Patterns *
23+# Automatically create missing mailboxes, both locally and on the server
24+Create Both
25+# Save the synchronization state files in the relevant directory
26+SyncState *
27+# Automatically delete messages on either side if they are found deleted on the other.
28+Expunge Both
A msmtprc
+15, -0
 1@@ -0,0 +1,15 @@
 2+# Set default values for all following accounts.
 3+defaults
 4+auth           on
 5+tls            on
 6+tls_trust_file /etc/ssl/certs/ca-certificates.crt
 7+logfile        ~/.msmtp.log
 8+
 9+account        fastmail
10+host           smtp.fastmail.com
11+port           587
12+from           me@erock.io
13+user           me@erock.io
14+passwordeval   "pass logins/local-mail"
15+
16+account default : fastmail
A npmrc
+1, -0
1@@ -0,0 +1 @@
2+prefix = ${HOME}/.npm-packages
A ssh_config
+148, -0
  1@@ -0,0 +1,148 @@
  2+Host *
  3+    StrictHostKeyChecking no
  4+    PubkeyAcceptedKeyTypes +ssh-rsa
  5+    AddKeysToAgent yes
  6+
  7+Host localhost
  8+    UserKnownHostsFile /dev/null
  9+
 10+Host kings
 11+    HostName 192.168.1.132
 12+    User erock
 13+    IdentityFile ~/.ssh/id_ed25519
 14+
 15+Host kings.zt
 16+    HostName kings.zt.erock.io
 17+    User erock
 18+    IdentityFile ~/.ssh/id_ed25519
 19+
 20+Host dev
 21+    HostName 192.168.1.242
 22+    User erock
 23+    IdentityFile ~/.ssh/id_ed25519
 24+
 25+Host dev.zt
 26+    HostName 10.147.17.154
 27+    User erock
 28+    IdentityFile ~/.ssh/id_ed25519
 29+
 30+Host kings.zt
 31+    HostName 10.147.17.159
 32+    User erock
 33+    IdentityFile ~/.ssh/id_ed25519
 34+
 35+Host gpu
 36+    HostName 192.168.1.189
 37+    User erock
 38+    IdentityFile ~/.ssh/id_ed25519
 39+
 40+Host cpu
 41+    HostName 192.168.1.193
 42+    User erock
 43+    IdentityFile ~/.ssh/id_ed25519
 44+
 45+Host pr
 46+  HostName pr.pico.sh
 47+  User erock
 48+  IdentityFile ~/.ssh/id_ed25519
 49+
 50+Host git
 51+    HostName 192.168.1.193
 52+    User erock
 53+    IdentityFile ~/.ssh/id_ed25519
 54+
 55+Host ui
 56+    IdentitiesOnly yes
 57+    IdentityFile ~/.ssh/id_ed25519
 58+    User pico-ui
 59+    Hostname pgs.sh
 60+    LocalForward 0.0.0.0:1337 localhost:80
 61+    SessionType none
 62+
 63+Host imgs
 64+    IdentitiesOnly yes
 65+    IdentityFile ~/.ssh/id_ed25519
 66+    Hostname imgs.sh
 67+    LocalForward 0.0.0.0:1338 localhost:80
 68+    SessionType none
 69+
 70+Host p.ui
 71+    IdentitiesOnly yes
 72+    IdentityFile ~/.ssh/id_ed25519_pico
 73+    User pico-ui
 74+    Hostname pgs.sh
 75+    LocalForward 0.0.0.0:1339 localhost:80
 76+    SessionType none
 77+
 78+Host hey.*
 79+    HostName %h.sh
 80+    IdentitiesOnly yes
 81+    IdentityFile ~/.ssh/id_ed25519_hey_bot
 82+
 83+Host pico.sh
 84+    HostName pico.sh
 85+    IdentitiesOnly yes
 86+    IdentityFile ~/.ssh/id_ed25519
 87+
 88+Host ppico
 89+    HostName pico.sh
 90+    IdentitiesOnly yes
 91+    IdentityFile ~/.ssh/id_ed25519_pico
 92+
 93+Host p.*
 94+    HostName %h.sh
 95+    IdentitiesOnly yes
 96+    IdentityFile ~/.ssh/id_ed25519_pico
 97+
 98+Host erock.*
 99+    HostName %h.sh
100+    IdentitiesOnly yes
101+    IdentityFile ~/.ssh/id_ed25519
102+
103+Host erock
104+    HostName 138.197.2.218
105+    User root
106+    IdentityFile ~/.ssh/id_ed25519
107+
108+Host aur.archlinux.org
109+    User aur
110+    IdentityFile ~/.ssh/id_ed25519
111+
112+Host pico.0
113+    HostName oracle0.ash.pico.sh
114+    Port 650
115+    User root
116+    IdentityFile ~/.ssh/id_ed25519
117+
118+Host pico.1
119+    HostName oracle1.ash.pico.sh
120+    Port 650
121+    User root
122+    IdentityFile ~/.ssh/id_ed25519
123+
124+Host pico.2
125+    HostName oracle2.ash.pico.sh
126+    Port 650
127+    User root
128+    IdentityFile ~/.ssh/id_ed25519
129+
130+Host pico.3
131+    HostName oracle3.ash.pico.sh
132+    Port 650
133+    User root
134+    IdentityFile ~/.ssh/id_ed25519
135+
136+Host pico.db
137+    HostName oracle0.ash.pico.sh
138+    Port 650
139+    User root
140+    IdentityFile ~/.ssh/id_ed25519
141+
142+Host tuns.sh
143+    HostName tuns.sh
144+    IdentityFile ~/.ssh/id_ed25519
145+
146+Host rsync
147+    HostName de2098.rsync.net
148+    User de2098
149+    IdentityFile ~/.ssh/id_ed25519
A tmux.conf
+37, -0
 1@@ -0,0 +1,37 @@
 2+unbind C-b
 3+set-option -g prefix C-Space
 4+bind-key C-Space send-prefix
 5+
 6+set -ag terminal-overrides ",*256col*:colors=256:Tc"
 7+set -g set-clipboard on
 8+set-option -ga update-environment ' SWAYSOCK'
 9+set-option -ga update-environment ' DISPLAY'
10+# https://stackoverflow.com/a/18953148
11+set-option -g renumber-windows on
12+# sane scrolling
13+bind -n WheelUpPane if-shell -F -t = "#{mouse_any_flag}" "send-keys -M" "if -Ft= '#{pane_in_mode}' 'send-keys -M' 'copy-mode -e; send-keys -M'"
14+# Set new panes to open in current directory
15+bind c new-window -c "#{pane_current_path}"
16+bind '"' split-window -c "#{pane_current_path}"
17+bind % split-window -h -c "#{pane_current_path}"
18+# fix highlight style
19+set-window-option -g mode-style "fg=default,bg=default,reverse"
20+
21+# List of plugins
22+set -g @plugin 'tmux-plugins/tpm'
23+set -g @plugin 'tmux-plugins/tmux-sensible'
24+set -g @plugin 'christoomey/vim-tmux-navigator'
25+set -g @plugin 'tmux-plugins/tmux-yank'
26+# set -g @plugin 'tmux-plugins/tmux-sensible'
27+set -g @plugin 'dracula/tmux'
28+set -g @dracula-plugins "time"
29+set -g @dracula-show-timezone false
30+set -g @dracula-day-month false
31+set -g @dracula-military-time false
32+set -g @dracula-show-powerline false
33+set -g @dracula-show-left-icon session
34+set -g @dracula-show-flags true
35+set -g @dracula-git-disable-status true
36+
37+# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
38+run '~/.tmux/plugins/tpm/tpm'
A xinitrc
+39, -0
 1@@ -0,0 +1,39 @@
 2+#!/bin/sh
 3+
 4+userresources=$HOME/.Xresources
 5+usermodmap=$HOME/.Xmodmap
 6+sysresources=/etc/X11/xinit/.Xresources
 7+sysmodmap=/etc/X11/xinit/.Xmodmap
 8+
 9+# merge in defaults and keymaps
10+
11+if [ -f $sysresources ]; then
12+    xrdb -merge $sysresources
13+
14+fi
15+
16+if [ -f $sysmodmap ]; then
17+    xmodmap $sysmodmap
18+fi
19+
20+if [ -f "$userresources" ]; then
21+    xrdb -merge "$userresources"
22+fi
23+
24+if [ -f "$usermodmap" ]; then
25+    xmodmap "$usermodmap"
26+fi
27+
28+# start some nice programs
29+
30+if [ -d /etc/X11/xinit/xinitrc.d ] ; then
31+ for f in /etc/X11/xinit/xinitrc.d/?*.sh ; do
32+  [ -x "$f" ] && . "$f"
33+ done
34+ unset f
35+fi
36+
37+xset r rate 300 30
38+xrandr --output DP-0 --mode 2560x1440 --rate 144.00
39+exec i3
40+xautolock -time 5 -locker i3lock &
A zshrc
+88, -0
 1@@ -0,0 +1,88 @@
 2+# Path to your oh-my-zsh installation.
 3+export ZSH="$HOME/.oh-my-zsh"
 4+export EDITOR="nvim"
 5+export VISUAL="nvim"
 6+export GPG_TTY=$(tty)
 7+export ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="fg=#bd93f9,underline"
 8+export XDG_CONFIG_HOME="$HOME/.config"
 9+
10+# See https://github.com/ohmyzsh/ohmyzsh/wiki/Themes
11+ZSH_THEME="robbyrussell"
12+
13+# Required installations
14+# https://github.com/zsh-users/zsh-syntax-highlighting/blob/master/INSTALL.md#oh-my-zsh
15+# https://github.com/zsh-users/zsh-completions#oh-my-zsh
16+# https://github.com/zsh-users/zsh-autosuggestions/blob/master/INSTALL.md#oh-my-zsh
17+plugins=(zsh-completions zsh-autosuggestions zsh-syntax-highlighting docker-compose history bundler)
18+
19+source $ZSH/oh-my-zsh.sh
20+
21+# zsh-autosuggetion ctrl+space
22+bindkey '^ ' autosuggest-accept
23+# zsh-completions
24+autoload -U compinit && compinit
25+# load zsh completions
26+fpath=(~/.zsh.d/ $fpath)
27+# manual completions
28+zstyle ':completion:*:manuals'    separate-sections true
29+zstyle ':completion:*:manuals.*'  insert-sections   true
30+zstyle ':completion:*:man:*'      menu yes select
31+
32+alias vimdiff='nvim -d'
33+alias gu="git remote update --prune"
34+alias ga="git add -A"
35+alias gm="git commit -S"
36+alias gs="git commit -S --amend --no-edit"
37+alias gl="git --no-pager log --oneline -n 30"
38+alias gt="git log --graph --oneline --all"
39+alias pushall="git remote | xargs -I R git push R"
40+alias tmux="tmux -u"
41+alias scratch="nvim ~/scratch.md"
42+alias bcp='rsync -avzu --progress'
43+alias weather='curl wttr.in/Ann+Arbor+Michigan'
44+alias dhe="distrobox-host-exec"
45+alias img="img2sixel"
46+
47+export PATH="$PATH:/usr/local/bin:$HOME/.local/bin:$HOME/bin"
48+
49+case "$OSTYPE" in
50+  darwin*)
51+    setopt NO_NOMATCH
52+    alias aptible-login="aptible login --lifetime 7days --email eric.bower@aptible.com"
53+    alias pss='aws-vault exec prod ~/work/pancake/bin/pancake stack:ssh eric'
54+    alias aptible-eric="DOMAIN=aptible-sandbox.com SUBDOMAIN_SUFFIX=eric APTIBLE_AUTH_ROOT_URL=https://auth-eric.aptible-sandbox.com APTIBLE_API_ROOT_URL=https://api-eric.aptible-sandbox.com APTIBLE_REMOTE=eric"
55+    export PATH="/opt/homebrew/opt/libpq/bin:/opt/homebrew/bin:/Users/eric/.deno/bin:/usr/local/sbin:$PATH"
56+    export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)
57+    alias sbx-main='DOMAIN=aptible-sandbox.com SUBDOMAIN_SUFFIX=sbx-main APTIBLE_AUTH_ROOT_URL=https://auth-sbx-main.aptible-sandbox.com APTIBLE_API_ROOT_URL=https://api-sbx-main.aptible-sandbox.com APTIBLE_REMOTE=sbx-main'
58+    gpgconf --launch gpg-agent
59+
60+    source /opt/homebrew/opt/chruby/share/chruby/chruby.sh
61+
62+    export NVM_DIR="$HOME/.config/nvm"
63+    [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
64+    [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion
65+  ;;
66+  linux*)
67+    # alias paclean="sudo pacman -Rs $(sudo pacman -Qqtd)"
68+    # ncdu to see folder sizes
69+    # imv for pictures
70+    # thunar for gui file manager
71+    # alias webcam="mpv --demuxer-lavf-format=video4linux2 --demuxer-lavf-o-set=input_format=mjpeg av://v4l2:/dev/video0"
72+    alias inbox="mlist $MDIR/INBOX"
73+
74+    export VDIRSYNCER_CONFIG="$HOME/.config/vdirsyncer/config"
75+    export MDIR="$HOME/mail"
76+    export MOZ_ENABLE_WAYLAND=1
77+    # https://github.com/qutebrowser/qutebrowser/discussions/7938#discussioncomment-8672918
78+    # export QT_SCALE_FACTOR_ROUNDING_POLICY=RoundPreferFloor
79+
80+    eval $(keychain --eval --quiet --agents ssh,gpg ~/.ssh/id_ed25519 76D3FD02)
81+    export PATH="/home/erock/.deno/bin:/home/erock/.yarn/bin:/home/erock/go/bin:/home/erock/.npm-packages/bin:/opt/nvim-linux64/bin:/home/erock/nvim/bin:$PATH"
82+  ;;
83+esac
84+
85+if [ -x "$(command -v direnv)" ]; then
86+  eval "$(direnv hook zsh)"
87+fi
88+
89+export PROMPT='%{$fg[yellow]%}@%M %{$fg_bold[green]%}%c%{$reset_color%} $(git_prompt_info)'