]> git.armaanb.net Git - config.org.git/blobdiff - config.org
Add doas-edit function
[config.org.git] / config.org
index 93ef8e5823e6e6d8155882bfd27e51db13cd025e..3d8019686d626433b8c726938d760d8d3a94698c 100644 (file)
@@ -1,5 +1,7 @@
 #+TITLE: System Configuration
-#+DESCRIPTION: Armaan's system configuration.
+#+DESCRIPTION: Personal system configuration in org-mode format.
+#+AUTHOR: Armaan Bhojwani
+#+EMAIL: me@armaanb.net
 
 * Welcome
 Welcome to my system configuration! This file contains my Emacs configuration, but also my config files for many of the other programs on my system!
@@ -48,10 +50,8 @@ Its fine to set this here because I run Emacs in daemon mode, but if I were not,
 #+begin_src emacs-lisp
   (setq modus-themes-slanted-constructs t
         modus-themes-bold-constructs t
-        modus-themes-org-blocks 'grayscale
         modus-themes-mode-line '3d
         modus-themes-scale-headings t
-        modus-themes-region 'no-extend
         modus-themes-diffs 'desaturated)
   (load-theme 'modus-vivendi t)
 #+end_src
@@ -68,33 +68,20 @@ Great programming font with ligatures.
     :config
     (ligature-set-ligatures
      '(prog-mode text-mode)
-     '("-|" "-~" "---" "-<<" "-<" "--" "->" "->>" "-->" "///" "/=" "/=="
+     '("-|" "-~" "---" "-<<" "-<" "--" "->" "->>" "-->" "/=" "/=="
        "/>" "//" "/*" "*>" "*/" "<-" "<<-" "<=>" "<=" "<|" "<||"
-       "<|||" "<|>" "<:" "<>" "<-<" "<<<" "<==" "<<=" "<=<" "<==>" "<-|"
-       "<<" "<~>" "<=|" "<~~" "<~" "<$>" "<$" "<+>" "<+" "</>" "</" "<*"
-       "<*>" "<->" "<!--" ":>" ":<" ":::" "::" ":?" ":?>" ":=" "::=" "=>>"
-       "==>" "=/=" "=!=" "=>" "===" "=:=" "==" "!==" "!!" "!=" ">]" ">:"
-       ">>-" ">>=" ">=>" ">>>" ">-" ">=" "&&&" "&&" "|||>" "||>" "|>" "|]"
-       "|}" "|=>" "|->" "|=" "||-" "|-" "||=" "||" ".." ".?" ".=" ".-" "..<"
-       "..." "+++" "+>" "++" "[||]" "[<" "[|" "{|" "??" "?." "?=" "?:" "##"
-       "###" "####" "#[" "#{" "#=" "#!" "#:" "#_(" "#_" "#?" "#(" ";;" "_|_"
-       "__" "~~" "~~>" "~>" "~-" "~@" "$>" "^=" "]#"))
+       "<|||" "<|>" "<:" "<>" "<-<" "<<<" "<==" "<<=" "<=<" "<==>"
+       "<-|" "<<" "<~>" "<=|" "<~~" "<~" "<$>" "<$" "<+>" "<+" "</>"
+       "</" "<*" "<*>" "<->" "<!--" ":>" ":<" ":::" "::" ":?" ":?>"
+       ":=" "::=" "=>>" "==>" "=/=" "=!=" "=>" "===" "=:=" "==" "!=="
+       "!!" "!=" ">]" ">:" ">>-" ">>=" ">=>" ">>>" ">-" ">=" "&&&"
+       "&&" "|||>" "||>" "|>" "|]" "|}" "|=>" "|->" "|=" "||-" "|-"
+       "||=" "||" ".." ".?" ".=" ".-" "..<" "..." "+++" "+>" "++"
+       "[||]" "[<" "[|" "{|" "?." "?=" "?:" "##" "###" "####" "#["
+       "#{" "#=" "#!" "#:" "#_(" "#_" "#?" "#(" ";;" "_|_" "__" "~~"
+       "~~>" "~>" "~-" "~@" "$>" "^=" "]#"))
     (global-ligature-mode t))
 #+end_src
-*** Emoji
-#+begin_src emacs-lisp
-  (use-package emojify
-    :config (global-emojify-mode))
-
-  ;; http://ergoemacs.org/emacs/emacs_list_and_set_font.html
-  (set-fontset-font
-   t
-   '(#x1f300 . #x1fad0)
-   (cond
-    ((member "Twitter Color Emoji" (font-family-list)) "Twitter Color Emoji")
-    ((member "Noto Color Emoji" (font-family-list)) "Noto Color Emoji")
-    ((member "Noto Emoji" (font-family-list)) "Noto Emoji")))
-#+end_src
 ** Line numbers
 Display relative line numbers except in some modes
 #+begin_src emacs-lisp
@@ -132,6 +119,7 @@ Show current column and file size.
 ** Ruler
 Show a ruler at a certain number of chars depending on mode.
 #+begin_src emacs-lisp
+  (setq display-fill-column-indicator-column 80)
   (global-display-fill-column-indicator-mode)
 #+end_src
 ** Keybinding hints
@@ -141,13 +129,6 @@ Whenever starting a key chord, show possible future steps.
     :config (which-key-mode)
     :custom (which-key-idle-delay 0.3))
 #+end_src
-** Visual highlights of changes
-Highlight when changes are made.
-#+begin_src emacs-lisp
-  (use-package evil-goggles
-    :config (evil-goggles-mode)
-    (evil-goggles-use-diff-faces))
-#+end_src
 ** Highlight TODOs in comments
 #+begin_src emacs-lisp
   (use-package hl-todo
@@ -161,7 +142,7 @@ Highlight when changes are made.
 ** Visual line mode
 Soft wrap words and do operations by visual lines.
 #+begin_src emacs-lisp
-  (add-hook 'text-mode-hook 'turn-on-visual-line-mode)
+  (add-hook 'text-mode-hook 'visual-line-mode 1)
 #+end_src
 ** Display number of matches in search
 #+begin_src emacs-lisp
@@ -172,10 +153,9 @@ Soft wrap words and do operations by visual lines.
 Inverts modeline instead of audible bell or the standard visual bell.
 #+begin_src emacs-lisp
   (setq visible-bell nil
-        ring-bell-function 'flash-mode-line)
-  (defun flash-mode-line ()
-    (invert-face 'mode-line)
-    (run-with-timer 0.1 nil #'invert-face 'mode-line))
+        ring-bell-function
+        (lambda () (invert-face 'mode-line)
+          (run-with-timer 0.1 nil #'invert-face 'mode-line)))
 #+end_src
 * Evil mode
 ** General
@@ -219,16 +199,10 @@ tpope prevails!
                 ("gc" . evilnc-comment-or-uncomment-lines))
     :custom (evilnc-invert-comment-line-by-line nil))
 #+end_src
-** Undo tree
-Fix the oopsies! Maybe replace with undo-fu or Emacs 28 built in undo-redo.
+** Undo redo
+Fix the oopsies!
 #+begin_src emacs-lisp
-  (use-package undo-tree
-    :custom
-    (undo-tree-auto-save-history t)
-    (undo-tree-history-directory-alist '(("." . "~/.emacs.d/undo-tree")))
-    :config
-    (global-undo-tree-mode)
-    (evil-set-undo-system 'undo-tree))
+  (evil-set-undo-system 'undo-redo)
 #+end_src
 ** Number incrementing
 Add back C-a/C-x
@@ -250,8 +224,7 @@ Add back C-a/C-x
   (use-package evil-org-agenda
     :straight (:type built-in)
     :after evil-org
-    :config
-    (evil-org-agenda-set-keys))
+    :config (evil-org-agenda-set-keys))
 #+end_src
 *** Leader maps
 #+begin_src emacs-lisp
@@ -288,12 +261,16 @@ Add back C-a/C-x
     ;; TODO: There's gotta be a more efficient way to write this
     (add-to-list 'org-structure-template-alist '("el" . "src emacs-lisp"))
     (add-to-list 'org-structure-template-alist '("sp" . "src conf :tangle ~/.spectrwm.conf"))
-    (add-to-list 'org-structure-template-alist '("zsh" . "src shell :tangle ~/.config/zsh/zshrc"))
+    (add-to-list 'org-structure-template-alist '("ash" . "src shell :tangle ~/.config/ash/ashrc"))
     (add-to-list 'org-structure-template-alist '("al" . "src yml :tangle ~/.config/alacritty/alacritty.yml"))
     (add-to-list 'org-structure-template-alist '("ipy" . "src python :tangle ~/.ipython/"))
     (add-to-list 'org-structure-template-alist '("pi" . "src conf :tangle ~/.config/picom/picom.conf"))
     (add-to-list 'org-structure-template-alist '("git" . "src conf :tangle ~/.gitconfig"))
-    (add-to-list 'org-structure-template-alist '("du" . "src conf :tangle ~/.config/dunst/dunstrc")))
+    (add-to-list 'org-structure-template-alist '("du" . "src conf :tangle ~/.config/dunst/dunstrc"))
+    (add-to-list 'org-structure-template-alist '("za" . "src conf :tangle ~/.config/zathura/zathurarc"))
+    (add-to-list 'org-structure-template-alist '("ff1" . "src css :tangle ~/.mozilla/firefox/armaan-release/chrome/userChrome.css"))
+    (add-to-list 'org-structure-template-alist '("ff2" . "src css :tangle ~/.mozilla/firefox/armaan-release/chrome/userContent.css"))
+    (add-to-list 'org-structure-template-alist '("xr" . "src conf :tangle ~/.Xresources")))
 #+end_src
 * Autocompletion
 ** Ivy
@@ -366,6 +343,7 @@ Contexts are a not very well known feature of mu4e that makes it super easy to m
     :straight (:type built-in))
   (use-package mu4e
     :load-path "/usr/share/emacs/site-lisp/mu4e"
+    :straight (:build nil)
     :bind (("C-c m" . mu4e))
     :config
     (setq user-full-name "Armaan Bhojwani"
@@ -373,11 +351,12 @@ Contexts are a not very well known feature of mu4e that makes it super easy to m
           smtpmail-stream-type 'ssl
           smtpmail-smtp-service '465
           mu4e-change-filenames-when-moving t
-          message-kill-buffer-on-exit t
           mu4e-get-mail-command "offlineimap -q"
           message-citation-line-format "On %a %d %b %Y at %R, %f wrote:\n"
           message-citation-line-function 'message-insert-formatted-citation-line
-          mu4e-context-policy "pick-first"
+          mu4e-completing-read-function 'ivy-completing-read
+          mu4e-confirm-quit nil
+          mail-user-agent 'mu4e-user-agent
           mu4e-contexts
           `( ,(make-mu4e-context
                :name "school"
@@ -386,14 +365,15 @@ Contexts are a not very well known feature of mu4e that makes it super easy to m
                :match-func (lambda (msg)
                              (when msg
                                (string-match-p "^/school" (mu4e-message-field msg :maildir))))
-               :vars '( (user-mail-address . "abhojwani22@nobles.edu")
-                        (mu4e-sent-folder . "/school/Sent")
-                        (mu4e-drafts-folder . "/school/Drafts")
-                        (mu4e-trash-folder . "/school/Trash")
-                        (mu4e-refile-folder . "/school/Archive")
-                        (user-mail-address . "abhojwani22@nobles.edu")
-                        (smtpmail-smtp-user . "abhojwani22@nobles.edu")
-                        (smtpmail-smtp-server . "smtp.gmail.com")))
+               :vars '((user-mail-address . "abhojwani22@nobles.edu")
+                       (mu4e-sent-folder . "/school/Sent")
+                       (mu4e-drafts-folder . "/school/Drafts")
+                       (mu4e-trash-folder . "/school/Trash")
+                       (mu4e-refile-folder . "/school/Archive")
+                       (message-cite-reply-position . above)
+                       (user-mail-address . "abhojwani22@nobles.edu")
+                       (smtpmail-smtp-user . "abhojwani22@nobles.edu")
+                       (smtpmail-smtp-server . "smtp.gmail.com")))
              ,(make-mu4e-context
                :name "personal"
                :enter-func (lambda () (mu4e-message "Entering personal context"))
@@ -401,53 +381,21 @@ Contexts are a not very well known feature of mu4e that makes it super easy to m
                :match-func (lambda (msg)
                              (when msg
                                (string-match-p "^/personal" (mu4e-message-field msg :maildir))))
-               :vars '(
-                       (mu4e-sent-folder . "/personal/Sent")
+               :vars '((mu4e-sent-folder . "/personal/Sent")
                        (mu4e-drafts-folder . "/personal/Drafts")
                        (mu4e-trash-folder . "/personal/Trash")
                        (mu4e-refile-folder . "/personal/Archive")
                        (user-mail-address . "me@armaanb.net")
+                       (message-cite-reply-position . below)
                        (smtpmail-smtp-user . "me@armaanb.net")
-                       (smtpmail-smtp-server "smtp.mailbox.org")
-                       (mu4e-drafts-folder . "/school/Drafts")
-                       (mu4e-trash-folder . "/school/Trash")))))
+                       (smtpmail-smtp-server . "smtp.mailbox.org")))))
     (add-to-list 'mu4e-bookmarks
                  '(:name "Unified inbox"
                          :query "maildir:\"/personal/INBOX\" or maildir:\"/school/INBOX\""
-                         :key ?b)))
-#+end_src
-** Calendar
-#+begin_src emacs-lisp
-  (use-package calfw)
-  (use-package calfw-org)
-  (use-package calfw-ical)
-
-  (defun acheam-calendar ()
-    "Open a calendar."
-    (interactive)
-    (shell-command "vdirsyncer sync")
-    (let ((default-directory "~/.local/share/vdirsyncer/"))
-      (cfw:open-calendar-buffer
-       :contents-sources
-       (list
-        (cfw:ical-create-source "School" (expand-file-name "school/abhojwani22@nobles.edu.ics") "Green")
-        (cfw:ical-create-source "Personal" (expand-file-name "mailbox/Y2FsOi8vMC8zMQ.ics") "Blue")
-        (cfw:ical-create-source "Birthdays" (expand-file-name "mailbox/Y2FsOi8vMS8w.ics") "Gray")
-        ))))
-#+end_src
-** IRC
-Another file has more specific network configuration.
-#+begin_src emacs-lisp
-  (use-package circe
-    :config (load-file "~/.emacs.d/irc.el"))
-
-  (use-package circe-chanop
-    :straight (:type built-in)
-    :after circe)
-
-  (use-package circe-color-nicks
-    :straight (:type built-in)
-    :after circe)
+                         :key ?b))
+    :hook ((mu4e-compose-mode . flyspell-mode)
+           (mu4e-compose-mode . auto-fill-mode)
+           (mu4e-view-mode-hook . turn-on-visual-line-mode)))
 #+end_src
 ** Default browser
 Set EWW as default browser except for videos.
@@ -459,6 +407,9 @@ Set EWW as default browser except for videos.
   (setq browse-url-handlers
         (quote
          (("youtu\\.?be" . browse-url-mpv)
+          ("peertube.*" . browse-url-mpv)
+          ("vid.*" . browse-url-mpv)
+          ("vid.*" . browse-url-mpv)
           ("." . eww-browse-url)
           )))
 #+end_src
@@ -469,13 +420,16 @@ Some EWW enhancements.
   ;; From https://protesilaos.com/dotemacs/
   (defun prot-eww--rename-buffer ()
     "Rename EWW buffer using page title or URL.
-  To be used by `eww-after-render-hook'."
+        To be used by `eww-after-render-hook'."
     (let ((name (if (eq "" (plist-get eww-data :title))
                     (plist-get eww-data :url)
                   (plist-get eww-data :title))))
       (rename-buffer (format "*%s # eww*" name) t)))
 
-  (add-hook 'eww-after-render-hook #'prot-eww--rename-buffer)
+  (use-package eww
+    :straight (:type built-in)
+    :bind (("C-c w" . eww))
+    :hook (eww-after-render-hook prot-eww--rename-buffer))
 #+end_src
 *** Better entrypoint
 #+begin_src emacs-lisp
@@ -500,74 +454,39 @@ Some EWW enhancements.
 
   (global-set-key (kbd "C-c w") 'prot-eww-browse-dwim)
 #+end_src
-** Emacs Anywhere
-Use Emacs globally. Use the Emacs daemon and bind a key in your wm to
-"emacsclient --eval "(emacs-everywhere)".
-#+begin_src emacs-lisp
-  (use-package emacs-everywhere)
-#+end_src
-* Emacs IDE
-** LSP
-*** General
-#+begin_src emacs-lisp
-  (use-package lsp-mode
-    :commands (lsp lsp-deferred)
-    :custom (lsp-keymap-prefix "C-c l")
-    :hook ((lsp-mode . lsp-enable-which-key-integration)))
-
-  (use-package lsp-ivy)
-
-  (use-package lsp-ui
-    :commands lsp-ui-mode
-    :custom (lsp-ui-doc-position 'bottom))
-  (use-package lsp-ui-flycheck
-    :after lsp-ui
-    :straight (:type built-in))
-#+end_src
-*** Company
-Company-box adds icons.
+** IRC
 #+begin_src emacs-lisp
-  (use-package company
-    :after lsp-mode
-    :hook (lsp-mode . company-mode)
-    :bind (:map company-active-map
-                ("<tab>" . company-complete-selection))
-    (:map lsp-mode-map
-          ("<tab>" . company-indent-or-complete-common))
-    :custom
-    (company-minimum-prefix-length 1)
-    (setq company-dabbrev-downcase 0)
-    (company-idle-delay 0.0))
+  (use-package erc
+    :straight (:type built-in)
+    :config
+    (load "~/.emacs.d/irc.el")
+    (acheam-irc)
+    (erc-notifications-enable)
+    (erc-smiley-disable))
 
-  (use-package company-box
-    :hook (company-mode . company-box-mode))
+  (use-package erc-hl-nicks
+    :config (erc-hl-nicks-mode 1))
 #+end_src
-*** Language servers
-**** Python
+** Emacs Anywhere
+Use Emacs globally. Use the Emacs daemon and bind a key in your wm to =emacsclient --eval "(emacs-everywhere)"=.
 #+begin_src emacs-lisp
-  (use-package lsp-pyright
-    :hook (python-mode . (lambda ()
-                           (use-package lsp-pyright
-                             :straight (:type built-in))
-                           (lsp-deferred))))
+  (use-package emacs-everywhere)
 #+end_src
+* Emacs IDE
 ** Code cleanup
 #+begin_src emacs-lisp
   (use-package blacken
     :hook (python-mode . blacken-mode)
-    :config
-    (setq blacken-line-length 79))
+    :config (setq blacken-line-length 79))
 
   ;; Purge whitespace
   (use-package ws-butler
-    :config
-    (ws-butler-global-mode))
+    :config (ws-butler-global-mode))
 #+end_src
 ** Flycheck
 #+begin_src emacs-lisp
   (use-package flycheck
-    :config
-    (global-flycheck-mode))
+    :config (global-flycheck-mode))
 #+end_src
 ** Project management
 #+begin_src emacs-lisp
@@ -591,19 +510,17 @@ Company-box adds icons.
     :straight (:type built-in)
     :commands (dired dired-jump)
     :custom ((dired-listing-switches "-agho --group-directories-first"))
-    :config
-    (evil-collection-define-key 'normal 'dired-mode-map
-      "h" 'dired-single-up-directory
-      "l" 'dired-single-buffer))
+    :config (evil-collection-define-key 'normal 'dired-mode-map
+              "h" 'dired-single-up-directory
+              "l" 'dired-single-buffer))
 
   (use-package dired-single
     :commands (dired dired-jump))
 
   (use-package dired-open
     :commands (dired dired-jump)
-    :custom
-    (dired-open-extensions '(("png" . "feh")
-                             ("mkv" . "mpv"))))
+    :custom (dired-open-extensions '(("png" . "feh")
+                                     ("mkv" . "mpv"))))
 
   (use-package dired-hide-dotfiles
     :hook (dired-mode . dired-hide-dotfiles-mode)
@@ -615,8 +532,7 @@ Company-box adds icons.
 *** Magit
 # TODO: Write a command that commits hunk, skipping staging step.
 #+begin_src emacs-lisp
-  (use-package magit
-    :hook (magit-mode-hook. pinentry-start))
+  (use-package magit)
 #+end_src
 *** Colored diff in line number area
 #+begin_src emacs-lisp
@@ -626,6 +542,13 @@ Company-box adds icons.
            (magit-post-refresh-hook . diff-hl-magit-post-refresh))
     :config (global-diff-hl-mode))
 #+end_src
+*** Email
+#+begin_src emacs-lisp
+  (use-package piem)
+  (use-package git-email
+    :straight (git-email :repo "https://git.sr.ht/~yoctocell/git-email")
+    :config (git-email-piem-mode))
+#+end_src
 * General text editing
 ** Indentation
 Indent after every change.
@@ -654,10 +577,6 @@ Spell check in text mode, and in prog-mode comments.
     (interactive)
     (x-select-text (current-kill 0)))
 #+end_src
-** Browse kill ring
-#+begin_src emacs-lisp
-  (use-package browse-kill-ring)
-#+end_src
 ** Save place
 Opens file where you left it.
 #+begin_src emacs-lisp
@@ -673,46 +592,39 @@ Distraction free writing a la junegunn/goyo.
 ** Abbreviations
 Abbreviate things!
 #+begin_src emacs-lisp
-  (setq abbrev-file-name "~/.emacs.d/abbrevs")
+  (setq abbrev-file-name "~/.emacs.d/abbrevs.el")
   (setq save-abbrevs 'silent)
   (setq-default abbrev-mode t)
 #+end_src
-* Functions
-** Easily convert splits
-Converts splits from horizontal to vertical and vice versa. Lifted from EmacsWiki.
+** TRAMP
 #+begin_src emacs-lisp
-  (defun toggle-window-split ()
-    (interactive)
-    (if (= (count-windows) 2)
-        (let* ((this-win-buffer (window-buffer))
-               (next-win-buffer (window-buffer (next-window)))
-               (this-win-edges (window-edges (selected-window)))
-               (next-win-edges (window-edges (next-window)))
-               (this-win-2nd (not (and (<= (car this-win-edges)
-                                           (car next-win-edges))
-                                       (<= (cadr this-win-edges)
-                                           (cadr next-win-edges)))))
-               (splitter
-                (if (= (car this-win-edges)
-                       (car (window-edges (next-window))))
-                    'split-window-horizontally
-                  'split-window-vertically)))
-          (delete-other-windows)
-          (let ((first-win (selected-window)))
-            (funcall splitter)
-            (if this-win-2nd (other-window 1))
-            (set-window-buffer (selected-window) this-win-buffer)
-            (set-window-buffer (next-window) next-win-buffer)
-            (select-window first-win)
-            (if this-win-2nd (other-window 1))))))
-
-  (define-key ctl-x-4-map "t" 'toggle-window-split)
+  (setq tramp-default-method "ssh")
 #+end_src
-** Insert date
+** Don't ask about following symlinks in vc
 #+begin_src emacs-lisp
-  (defun insert-date ()
-    (interactive)
-    (insert (format-time-string "%Y-%m-%d")))
+  (setq vc-follow-symlinks t)
+#+end_src
+** Don't ask to save custom dictionary
+#+begin_src emacs-lisp
+  (setq ispell-silently-savep t)
+#+end_src
+** Open file as root
+#+begin_src emacs-lisp
+  (defun doas-edit (&optional arg)
+    "Edit currently visited file as root.
+
+    With a prefix ARG prompt for a file to visit.
+    Will also prompt for a file to visit if current
+    buffer is not visiting a file.
+
+    Modified from Emacs Redux."
+    (interactive "P")
+    (if (or arg (not buffer-file-name))
+        (find-file (concat "/doas:root@localhost:"
+                           (ido-read-file-name "Find file(as root): ")))
+      (find-alternate-file (concat "/doas:root@localhost:" buffer-file-name))))
+
+    (global-set-key (kbd "C-x C-r") #'doas-edit)
 #+end_src
 * Keybindings
 ** Switch windows
@@ -727,13 +639,8 @@ Makes "C-x k" binding faster.
 #+end_src
 * Other settings
 ** OpenSCAD
-Render OpenSCAD files, and add a preview window.
-
-Personal fork just merges a PR.
 #+begin_src emacs-lisp
   (use-package scad-mode)
-  (use-package scad-preview
-    :straight (scad-preview :type git :host github :repo "Armaanb/scad-preview"))
 #+end_src
 ** Control backup files
 Stop backup files from spewing everywhere.
@@ -766,12 +673,14 @@ No more clogging up init.el.
 ** GPG
 #+begin_src emacs-lisp
   (use-package epa-file
-    :straight (:type built-in))
-  (setq epa-file-select-keys nil
-        epa-file-encrypt-to '("me@armaanb.net")
-        password-cache-expiry (* 60 15))
+    :straight (:type built-in)
+    :custom
+    (epa-file-select-keys nil)
+    (epa-file-encrypt-to '("me@armaanb.net"))
+    (password-cache-expiry (* 60 15)))
 
-  (use-package pinentry)
+  (use-package pinentry
+    :config (pinentry-start))
 #+end_src
 ** Pastebin
 #+begin_src emacs-lisp
@@ -792,17 +701,8 @@ No more clogging up init.el.
   workspace_limit = 5
   warp_pointer = 1
   modkey = Mod4
-  border_width = 4
-  tile_gap = 10
   autorun = ws[1]:/home/armaa/Code/scripts/autostart
 #+end_src
-*** Apprearance
-Gruvbox colors
-#+begin_src conf :tangle ~/.spectrwm.conf
-  color_focus = rgb:83/a5/98
-  color_focus_maximized = rgb:d6/5d/0e
-  color_unfocus = rgb:58/58/58
-#+end_src
 *** Bar
 #+begin_src conf :tangle ~/.spectrwm.conf
   bar_enabled = 0
@@ -811,15 +711,13 @@ Gruvbox colors
 *** Keybindings
 **** WM actions
 #+begin_src conf :tangle ~/.spectrwm.conf
-  program[lock] = i3lock -c 000000 -ef
   program[term] = alacritty
   program[screenshot_all] = flameshot gui
-  program[menu] = rofi -show run # `rofi-dmenu` handles the rest
-  program[switcher] = rofi -show window
   program[notif] = /home/armaa/Code/scripts/setter status
+  program[pass] = /home/armaa/Code/scripts/passmenu
 
   bind[notif] = MOD+n
-  bind[switcher] = MOD+Tab
+  bind[pass] = MOD+Shift+p
 #+end_src
 **** Media keys
 #+begin_src conf :tangle ~/.spectrwm.conf
@@ -855,109 +753,42 @@ Gruvbox colors
 #+end_src
 **** Programs
 #+begin_src conf :tangle ~/.spectrwm.conf
-  program[aerc] = alacritty -e aerc
-  program[weechat] = alacritty --hold -e sh -c "while : ; do ssh -p 23 -t root@armaanb.net tmux attach-session -t weechat; sleep 2; done"
+  program[email] = emacsclient -c --eval "(mu4e)"
+  program[irc] = emacsclient -c --eval '(switch-to-buffer "irc.armaanb.net:6697")'
   program[emacs] = emacsclient -c
-  program[emacs-anywhere] = emacsclient --eval "(emacs-everywhere)"
   program[firefox] = firefox
-  program[thunderbird] = thunderbird
-  program[slack] = slack
-
-  bind[aerc] = MOD+Control+s
-  bind[weechat] = MOD+Control+d
-  bind[emacs] = MOD+Control+f
-  bind[emacs-anywhere] = MOD+f
-  bind[firefox] = MOD+Control+u
-  bind[thunderbird] = MOD+Control+i
-  bind[slack] = MOD+Control+o
-#+end_src
-** Zsh
-*** Settings
-**** Completions
-#+begin_src shell :tangle ~/.config/zsh/zshrc
-  autoload -Uz compinit
-  compinit
-
-  setopt no_case_glob
-  unsetopt glob_complete
-#+end_src
-**** Vim bindings
-#+begin_src shell :tangle ~/.config/zsh/zshrc
-  bindkey -v
-  KEYTIMEOUT=1
-
-  bindkey -M vicmd "^[[3~" delete-char
-  bindkey "^[[3~" delete-char
-
-  autoload edit-command-line
-  zle -N edit-command-line
-  bindkey -M vicmd ^e edit-command-line
-  bindkey ^e edit-command-line
-#+end_src
-**** History
-#+begin_src shell :tangle ~/.config/zsh/zshrc
-  setopt extended_history
-  setopt share_history
-  setopt inc_append_history
-  setopt hist_ignore_dups
-  setopt hist_reduce_blanks
-
-  HISTSIZE=10000
-  SAVEHIST=10000
-  HISTFILE=~/.local/share/zsh/history
-#+end_src
-*** Plugins
-I manage plugins using my own plugin manager, ZPE. https://git.sr.ht/~armaan/zpe
-**** ZPE
-#+begin_src plain :tangle ~/.config/zpe/repositories
-    https://github.com/Aloxaf/fzf-tab
-    https://github.com/zdharma/fast-syntax-highlighting
-    https://github.com/rupa/z
-#+end_src
-**** Zshrc
-#+begin_src shell :tangle ~/.config/zsh/zshrc
-  source ~/Code/zpe/zpe.sh
-  source ~/Code/admone/admone.zsh
-  source ~/.config/zsh/fzf-bindings.zsh
+  program[calc] = alacritty -e because -l
+  program[emacs-anywhere] = emacsclient --eval "(emacs-everywhere)"
 
-  zpe-source fzf-tab/fzf-tab.zsh
-  zstyle ':completion:*:descriptions' format '[%d]'
-  zstyle ':fzf-tab:complete:cd:*' fzf-preview 'exa -1 --color=always $realpath'
-  zstyle ':completion:*' completer _complete
-  zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' \
-         'm:{a-zA-Z}={A-Za-z} l:|=* r:|=*'
-  enable-fzf-tab
-  zpe-source fast-syntax-highlighting/fast-syntax-highlighting.plugin.zsh
-  export _Z_DATA="/home/armaa/.local/share/z"
-  zpe-source z/z.sh
+  bind[email] = MOD+Control+1
+  bind[irc] = MOD+Control+2
+  bind[firefox] = MOD+Control+3
+  bind[emacs-anywhere] = MOD+Control+4
+  bind[calc] = MOD+Control+5
+  bind[emacs] = MOD+Control+Return
 #+end_src
-*** Functions
-**** Alert after long command
-#+begin_src shell :tangle ~/.config/zsh/zshrc
-  alert() {
-      notify-send --urgency=low -i ${(%):-%(?.terminal.error)} \
-                  ${history[$HISTCMD]%[;&|][[:space:]]##alert}
-  }
+**** Quirks
+#+begin_src conf :tangle ~/.spectrwm.conf
+  quirk[Castle Menu] = FLOAT
+  quirk[momen] = FLOAT
 #+end_src
-**** Time Zsh startup
-#+begin_src shell :tangle ~/.config/zsh/zshrc
-  timezsh() {
-      for i in $(seq 1 10); do
-          time "zsh" -i -c exit;
-      done
-  }
+** Ash
+*** Options
+#+begin_src conf :tangle ~/.config/ash/ashrc
+  set -o vi
 #+end_src
+*** Functions
 **** Update all packages
-#+begin_src shell :tangle ~/.config/zsh/zshrc
+#+begin_src shell :tangle ~/.config/ash/ashrc
   color=$(tput setaf 5)
   reset=$(tput sgr0)
 
   apu() {
-      sudo echo "${color}== upgrading with yay ==${reset}"
+      doas echo "${color}== upgrading with yay ==${reset}"
       yay
       echo ""
       echo "${color}== checking for pacnew files ==${reset}"
-      sudo pacdiff
+      doas pacdiff
       echo
       echo "${color}== upgrading flatpaks ==${reset}"
       flatpak update
@@ -973,10 +804,10 @@ I manage plugins using my own plugin manager, ZPE. https://git.sr.ht/~armaan/zpe
   }
 #+end_src
 **** Clean all packages
-#+begin_src shell :tangle ~/.config/zsh/zshrc
+#+begin_src shell :tangle ~/.config/ash/ashrc
   apap() {
-      sudo echo "${color}== cleaning pacman orphans ==${reset}"
-      (pacman -Qtdq | sudo pacman -Rns - 2> /dev/null) || echo "No orphans"
+      doas echo "${color}== cleaning pacman orphans ==${reset}"
+      (pacman -Qtdq | doas pacman -Rns - 2> /dev/null) || echo "No orphans"
       echo ""
       echo "${color}== cleaning flatpaks ==${reset}"
       flatpak remove --unused
@@ -991,112 +822,126 @@ I manage plugins using my own plugin manager, ZPE. https://git.sr.ht/~armaan/zpe
       echo "${color}All orphans cleaned!${reset}"
   }
 #+end_src
-**** ls every cd
-#+begin_src shell :tangle ~/.config/zsh/zshrc
-  chpwd() {
-      emulate -L zsh
-      exa -lh --icons --git --group-directories-first
+**** Interact with 0x0
+#+begin_src shell :tangle ~/.config/ash/ashrc
+  zxz="https://envs.sh"
+  ufile() { curl -F"file=@$1" "$zxz" ; }
+  upb() { curl -F"file=@-;" "$zxz" ; }
+  uurl() { curl -F"url=$1" "$zxz" ; }
+  ushort() { curl -F"shorten=$1" "$zxz" ; }
+  uclip() { xclip -out | curl -F"file=@-;" "$zxz" ; }
+#+end_src
+**** Finger
+#+begin_src shell :tangle ~/.config/ash/ashrc
+  finger() {
+      user=$(echo "$1" | cut -f 1 -d '@')
+      host=$(echo "$1" | cut -f 2 -d '@')
+      echo $user | nc "$host" 79 -N
   }
 #+end_src
-**** Setup anaconda
-#+begin_src shell :tangle ~/.config/zsh/zshrc
-  zconda() {
-      __conda_setup="$('/opt/anaconda/bin/conda' 'shell.zsh' 'hook' 2> /dev/null)"
-      if [ $? -eq 0 ]; then
-          eval "$__conda_setup"
-      else
-          if [ -f "/opt/anaconda/etc/profile.d/conda.sh" ]; then
-              . "/opt/anaconda/etc/profile.d/conda.sh"
-          else
-              export PATH="/opt/anaconda/bin:$PATH"
-          fi
-      fi
-      unset __conda_setup
+**** Upload to ftp.armaanb.net
+#+begin_src shell :tangle ~/.config/ash/ashrc
+  pubup() {
+      rsync "$1" "root@armaanb.net:/var/ftp/pub/${2}"
+      echo "https://ftp.armaanb.net/pub/"$(basename "$1") | tee /dev/tty | xclip -sel c
   }
 #+end_src
-**** Interact with 0x0
-#+begin_src shell :tangle ~/.config/zsh/zshrc
-  zxz="https://envs.sh"
-  0file() { curl -F"file=@$1" "$zxz" ; }
-  0pb() { curl -F"file=@-;" "$zxz" ; }
-  0url() { curl -F"url=$1" "$zxz" ; }
-  0short() { curl -F"shorten=$1" "$zxz" ; }
-  0clip() { xclip -out | curl -F"file=@-;" "$zxz" ; }
-#+end_src
-**** Swap two files
-#+begin_src shell :tangle ~/.config/zsh/zshrc
-  sw() {
-      mv $1 $1.tmp
-      mv $2 $1
-      mv $1.tmp $2
-  }
+*** Exports
+#+begin_src shell :tangle ~/.config/ash/ashrc
+  export EDITOR="emacsclient -c"
+  export VISUAL="$EDITOR"
+  export TERM=xterm-256color # for compatability
+
+  export GPG_TTY="$(tty)"
+  export MANPAGER='nvim +Man!'
+  export PAGER='less'
+
+  export GTK_USE_PORTAL=1
+
+  export PATH="/home/armaa/.local/bin:$PATH" # prioritize .local/bin
+  export PATH="/home/armaa/Code/scripts:$PATH" # prioritize my scripts
+  export PATH="/home/armaa/Code/scripts/bin:$PATH" # prioritize my bins
+  export PATH="$PATH:/home/armaa/.cargo/bin"
+  export PATH="$PATH:/home/armaa/.local/share/gem/ruby/2.7.0/bin"
+  export PATH="$PATH:/usr/sbin"
+  export PATH="$PATH:/opt/FreeTube/freetube"
+
+  export LC_ALL="en_US.UTF-8"
+  export LC_CTYPE="en_US.UTF-8"
+  export LANGUAGE="en_US.UTF-8"
+
+  export KISS_PATH="/home/armaa/Virtual/kiss/home/armaa/kiss-repo"
+  export KISS_PATH="$KISS_PATH:/home/armaa/Clone/repo-main/core"
+  export KISS_PATH="$KISS_PATH:/home/armaa/Clone/repo-main/extra"
+  export KISS_PATH="$KISS_PATH:/home/armaa/Clone/repo-main/xorg"
+  export KISS_PATH="$KISS_PATH:/home/armaa/Clone/repo-main/testing"
+  export KISS_PATH="$KISS_PATH:/home/armaa/Clone/repo-community/community"
 #+end_src
 *** Aliases
 **** SSH
-#+begin_src shell :tangle ~/.config/zsh/zshrc
+#+begin_src shell :tangle ~/.config/ash/ashrc
   alias bhoji-drop='ssh -p 23 root@armaanb.net'
-  alias weechat='ssh -p 23 -t root@armaanb.net tmux attach-session -t weechat'
+  alias irc='ssh root@armaanb.net -t abduco -A irc catgirl freenode'
+  alias union='ssh 192.168.1.18'
+  alias mine='ssh -p 23 root@pickupserver.cc'
   alias tcf='ssh root@204.48.23.68'
   alias ngmun='ssh root@157.245.89.25'
   alias prox='ssh root@192.168.1.224'
-  alias dock='ssh root@192.168.1.225'
-  alias jenkins='ssh root@192.168.1.226'
+  alias ncq='ssh root@143.198.123.17'
   alias envs='ssh acheam@envs.net'
 #+end_src
 **** File management
-#+begin_src shell :tangle ~/.config/zsh/zshrc
+#+begin_src shell :tangle ~/.config/ash/ashrc
   alias ls='exa -lh --icons --git --group-directories-first'
   alias la='exa -lha --icons --git --group-directories-first'
   alias df='df -h / /boot'
   alias du='du -h'
   alias free='free -h'
   alias cp='cp -riv'
-  alias rm='rm -Iv'
+  alias rm='rm -iv'
   alias mv='mv -iv'
   alias ln='ln -iv'
   alias grep='grep -in --exclude-dir=.git --color=auto'
+  alias fname='find -name'
   alias mkdir='mkdir -pv'
   alias unar='atool -x'
   alias wget='wget -e robots=off'
   alias lanex='~/.local/share/lxc/lxc'
-#+end_src
-**** Dotfiles
-#+begin_src shell :tangle ~/.config/zsh/zshrc
-  alias padm='yadm --yadm-repo ~/Code/dotfiles/repo.git'
-  alias yadu='yadm add -u && yadm commit -m "Updated `date -Iseconds`" && \
-    yadm push'
-  alias padu='padm add -u && padm commit && padm push && yadu'
-#+end_src
-**** Editing
-#+begin_src shell :tangle ~/.config/zsh/zshrc
-  alias v='nvim'
-  alias vim='nvim'
-  alias vw="nvim ~/Documents/vimwiki/index.md"
+  alias vim=$EDITOR
+  alias emacs=$EDITOR
 #+end_src
 **** System management
-#+begin_src shell :tangle ~/.config/zsh/zshrc
+#+begin_src shell :tangle ~/.config/ash/ashrc
   alias jctl='journalctl -p 3 -xb'
   alias pkill='pkill -i'
   alias cx='chmod +x'
-  alias please='sudo $(fc -ln -1)'
-  alias sudo='sudo ' # allows aliases to be run with sudo
+  alias redoas='doas $(fc -ln -1)'
+  alias crontab='crontab-argh'
+  alias sudo='doas ' # allows aliases to be run with doas
+  alias pasu='git -C ~/.password-store push'
+  alias yadu='yadm add -u && yadm commit -m "Updated `date -Iseconds`" && \
+    yadm push'
 #+end_src
 **** Networking
-#+begin_src shell :tangle ~/.config/zsh/zshrc
+#+begin_src shell :tangle ~/.config/ash/ashrc
   alias ping='ping -c 10'
   alias speed='speedtest-cli'
   alias ip='ip --color=auto'
   alias cip='curl https://armaanb.net/ip'
   alias gps='gpg --keyserver keyserver.ubuntu.com --search-keys'
   alias gpp='gpg --keyserver keyserver.ubuntu.com --recv-key'
-#+end_src
-**** Docker
-#+begin_src shell :tangle ~/.config/zsh/zshrc
-  alias dc='docker-compose'
-  alias dcdu='docker-compose down && docker-compose up -d'
+  alias plan='T=$(mktemp) && \
+        rsync root@armaanb.net:/etc/finger/plan.txt "$T" && \
+        TT=$(mktemp) && \
+        head -n -2 $T > $TT && \
+        vim $TT && \
+        echo "\nLast updated: $(date -R)" >> "$TT" && \
+        fold -sw 72 "$TT" > "$T"| \
+        rsync "$T" root@armaanb.net:/etc/finger/plan.txt'
+  alias wttr='curl -s "wttr.in/02445?n" | head -n -3'
 #+end_src
 **** Other
-#+begin_src shell :tangle ~/.config/zsh/zshrc
+#+begin_src shell :tangle ~/.config/ash/ashrc
   alias bigrandomfile='dd if=/dev/urandom of=1GB-urandom bs=1M count=1024 \
     iflag=fullblock status=progress'
   alias bigboringfile='dd if=/dev/zero of=1GB-zero bs=1M count=1024 \
@@ -1109,11 +954,12 @@ I manage plugins using my own plugin manager, ZPE. https://git.sr.ht/~armaan/zpe
   alias ytmusic="youtube-dl -x --add-metadata  --audio-format aac \
     --restrict-filenames -o '%(title)s.%(ext)s'"
   alias cal="cal -3 --color=auto"
+  alias bc='bc -l'
 #+end_src
 **** Virtual machines, chroots
-#+begin_src shell :tangle ~/.config/zsh/zshrc
-  alias ckiss="sudo chrooter ~/Virtual/kiss"
-  alias cdebian="sudo chrooter ~/Virtual/debian bash"
+#+begin_src shell :tangle ~/.config/ash/ashrc
+  alias ckiss="doas chrooter ~/Virtual/kiss"
+  alias cdebian="doas chrooter ~/Virtual/debian bash"
   alias cwindows='devour qemu-system-x86_64 \
     -smp 3 \
     -cpu host \
@@ -1127,7 +973,7 @@ I manage plugins using my own plugin manager, ZPE. https://git.sr.ht/~armaan/zpe
     -drive format=qcow2,file=/home/armaa/Virtual/windows.qcow2'
 #+end_src
 **** Python
-#+begin_src shell :tangle ~/.config/zsh/zshrc
+#+begin_src shell :tangle ~/.config/ash/ashrc
   alias ipy="ipython"
   alias zpy="zconda && ipython"
   alias math="ipython --profile=math"
@@ -1136,12 +982,12 @@ I manage plugins using my own plugin manager, ZPE. https://git.sr.ht/~armaan/zpe
   alias black="black -l 79"
 #+end_src
 **** Latin
-#+begin_src shell :tangle ~/.config/zsh/zshrc
+#+begin_src shell :tangle ~/.config/ash/ashrc
   alias words='gen-shell -c "words"'
   alias words-e='gen-shell -c "words ~E"'
 #+end_src
 **** Devour
-#+begin_src shell :tangle ~/.config/zsh/zshrc
+#+begin_src shell :tangle ~/.config/ash/ashrc
   alias zathura='devour zathura'
   alias mpv='devour mpv'
   alias sql='devour sqlitebrowser'
@@ -1149,9 +995,10 @@ I manage plugins using my own plugin manager, ZPE. https://git.sr.ht/~armaan/zpe
   alias feh='devour feh'
 #+end_src
 **** Package management (Pacman)
-#+begin_src shell :tangle ~/.config/zsh/zshrc
+#+begin_src shell :tangle ~/.config/ash/ashrc
   alias aps='yay -Ss'
   alias api='yay -Syu'
+  alias apii='doas pacman -S'
   alias app='yay -Rns'
   alias apc='yay -Sc'
   alias apo='yay -Qttd'
@@ -1159,40 +1006,12 @@ I manage plugins using my own plugin manager, ZPE. https://git.sr.ht/~armaan/zpe
   alias favorites='pacman -Qe | cut -d " " -f 1 > ~/Documents/favorites'
   alias ufetch='ufetch-arch'
   alias reflect='reflector --verbose --sort rate --save \
-    ~/.local/etc/pacman.d/mirrorlist --download-timeout 60' # Takes ~45m to run
+     ~/.local/etc/pacman.d/mirrorlist --download-timeout 60' # Takes ~45m to run
 #+end_src
-*** Exports
-#+begin_src shell :tangle ~/.config/zsh/zshrc
-  export EDITOR="emacsclient -c"                  # $EDITOR opens in terminal
-  export VISUAL="emacsclient -c -a emacs"         # $VISUAL opens in GUI mode
-  export TERM=xterm-256color # for compatability
-
-  export GPG_TTY="$(tty)"
-  export MANPAGER='nvim +Man!'
-  export PAGER='less'
-
-  # generated with "vivid generate gruvbox"
-  export LS_COLORS="$(cat ~/.local/share/zsh/gruvbox)"
-
-  export GTK_USE_PORTAL=1
-
-  export PATH="/home/armaa/.local/bin:$PATH" # prioritize .local/bin
-  export PATH="$PATH:/home/armaa/Code/scripts"
-  export PATH="$PATH:/home/armaa/.cargo/bin"
-  export PATH="$PATH:/home/armaa/.local/share/gem/ruby/2.7.0/bin"
-  export PATH="$PATH:/usr/sbin"
-  export PATH="$PATH:/opt/FreeTube/freetube"
-
-  export LC_ALL="en_US.UTF-8"
-  export LC_CTYPE="en_US.UTF-8"
-  export LANGUAGE="en_US.UTF-8"
-
-  export KISS_PATH="/home/armaa/kiss/home/armaa/kiss-repo"
-  export KISS_PATH="$KISS_PATH:/home/armaa/Clone/repo-main/core"
-  export KISS_PATH="$KISS_PATH:/home/armaa/Clone/repo-main/extra"
-  export KISS_PATH="$KISS_PATH:/home/armaa/Clone/repo-main/xorg"
-  export KISS_PATH="$KISS_PATH:/home/armaa/Clone/repo-main/testing"
-  export KISS_PATH="$KISS_PATH:/home/armaa/Clone/repo-community/community"
+**** Package management (KISS)
+#+begin_src shell :tangle ~/.config/ash/ashrc
+  alias kzf="kiss s \* | xargs -l basename | \
+    fzf --preview 'kiss search {} | xargs -l dirname'"
 #+end_src
 ** Alacritty
 *** Appearance
@@ -1213,53 +1032,53 @@ window:
     x: 5
     y: 5
 
-background_opacity: 0.6
-#+end_src
-*** Keybindings
-Send <RET> + modifier through
-#+begin_src yml :tangle ~/.config/alacritty/alacritty.yml
-key_bindings:
-  - {
-    key: Return,
-    mods: Shift,
-    chars: "\x1b[13;2u"
-  }
-  - {
-    key: Return,
-    mods: Control,
-    chars: "\x1b[13;5u"
-  }
+background_opacity: 1
 #+end_src
 *** Color scheme
-Gruvbox
+Modus vivendi. Source: https://github.com/ishan9299/Nixos/blob/d4bbb7536be95b59466bb9cca4d671be46e04e81/user/alacritty/alacritty.yml#L30-L118
 #+begin_src yml :tangle ~/.config/alacritty/alacritty.yml
 colors:
   # Default colors
   primary:
     background: '#000000'
-    foreground: '#ebdbb2'
+    foreground: '#ffffff'
 
-  # Normal colors
-  normal:
-    black:   '#282828'
-    red:     '#cc241d'
-    green:   '#98971a'
-    yellow:  '#d79921'
-    blue:    '#458588'
-    magenta: '#b16286'
-    cyan:    '#689d6a'
-    white:   '#a89984'
+  cursor:
+    text: '#000000'
+    background: '#ffffff'
 
-  # Bright colors
+  # Normal colors (except green it is from intense colors)
+  normal:
+    black:   '#000000'
+    red:     '#ff8059'
+    green:   '#00fc50'
+    yellow:  '#eecc00'
+    blue:    '#29aeff'
+    magenta: '#feacd0'
+    cyan:    '#00d3d0'
+    white:   '#eeeeee'
+
+  # Bright colors [all the faint colors in the modus theme]
   bright:
-    black:   '#928374'
-    red:     '#fb4934'
-    green:   '#b8bb26'
-    yellow:  '#fabd2f'
-    blue:    '#83a598'
-    magenta: '#d3869b'
-    cyan:    '#8ec07c'
-    white:   '#ebdbb2'
+    black:   '#555555'
+    red:     '#ffa0a0'
+    green:   '#88cf88'
+    yellow:  '#d2b580'
+    blue:    '#92baff'
+    magenta: '#e0b2d6'
+    cyan:    '#a0bfdf'
+    white:   '#ffffff'
+
+  # dim [all the intense colors in modus theme]
+  dim:
+    black:   '#222222'
+    red:     '#fb6859'
+    green:   '#00fc50'
+    yellow:  '#ffdd00'
+    blue:    '#00a2ff'
+    magenta: '#ff8bd4'
+    cyan:    '#30ffc0'
+    white:   '#dddddd'
 #+end_src
 ** IPython
 *** General
@@ -1297,172 +1116,32 @@ Make MPV play a little bit smoother.
   ytdl-format="bestvideo[height<=?1080]+bestaudio/best"
   hwdec=auto-copy
 #+end_src
-** Picom
-*** Shadows
-#+begin_src conf :tangle ~/.config/picom/picom.conf
-  shadow = true;
-  shadow-radius = 10;
-  shadow-offset-x = -5;
-  shadow-offset-y = -5;
-#+end_src
-*** Fading
-#+begin_src conf :tangle ~/.config/picom/picom.conf
-  fading = true
-  fade-delta = 5
-#+end_src
-*** Blur
-#+begin_src conf :tangle ~/.config/picom/picom.conf
-  blur:
-  {
-  method = "gaussian";
-  size = 5;
-  deviation = 5;
-  };
-#+end_src
-*** Backend
-Needs picom to be run with "--experimental-backends"
-#+begin_src conf :tangle ~/.config/picom/picom.conf
-  backend = "glx";
-#+end_src
 ** Inputrc
 For any GNU Readline programs
-#+begin_src plain :tangle ~/.inputrc
-  set editing-mode vi
-#+end_src
-** Vivid
-https://github.com/sharkdp/vivid
-*** Colors
-#+begin_src yml :tangle ~/.config/vivid/gruvbox.yml
-  colors:
-    background_color: '282A36'
-    black: '21222C'
-    orange: 'd65d0e'
-    purple: 'b16286'
-    red: 'cc241d'
-    blue: '458588'
-    pink: 'd3869b'
-    lime: '689d6a'
-
-    gray: '928374'
-#+end_src
-*** Core
-#+begin_src yml :tangle ~/.config/vivid/gruvbox.yml
-  core:
-    regular_file: {}
-
-    directory:
-      foreground: blue
-
-    executable_file:
-      foreground: red
-      font-style: bold
-
-    symlink:
-      foreground: pink
-
-    broken_symlink:
-      foreground: black
-      background: red
-    missing_symlink_target:
-      foreground: black
-      background: red
-
-    fifo:
-      foreground: black
-      background: blue
-
-    socket:
-      foreground: black
-      background: pink
-
-    character_device:
-      foreground: black
-      background: lime
-
-    block_device:
-      foreground: black
-      background: red
-
-    normal_text:
-      {}
-
-    sticky:
-      {}
-
-    sticky_other_writable:
-      {}
-
-    other_writable:
-      {}
-
-  text:
-    special:
-      foreground: black
-      background: orange
-
-    todo:
-      font-style: bold
-
-    licenses:
-      foreground: gray
-
-    configuration:
-      foreground: orange
-
-    other:
-      foreground: orange
-
-  markup:
-    foreground: orange
-
-  programming:
-    source:
-      foreground: purple
-
-    tooling:
-      foreground: purple
-
-      continuous-integration:
-        foreground: purple
-
-  media:
-    foreground: pink
-
-  office:
-    foreground: red
-
-  archives:
-    foreground: lime
-    font-style: underline
-
-  executable:
-    foreground: red
-    font-style: bold
-
-  unimportant:
-    foreground: gray
+#+begin_src conf :tangle ~/.inputrc
+  set editing-mode emacs
 #+end_src
 ** Git
 *** User
-#+begin_src plain :tangle ~/.gitconfig
-[user]
+#+begin_src conf :tangle ~/.gitconfig
+  [user]
   name = Armaan Bhojwani
   email = me@armaanb.net
   signingkey = 0FEB9471E19C49C60CFBEB133C9ED82FFE788E4A
 #+end_src
 *** Init
-#+begin_src plain :tangle ~/.gitconfig
-[init]
+#+begin_src conf :tangle ~/.gitconfig
+  [init]
   defaultBranch = main
 #+end_src
 *** GPG
-#+begin_src plain :tangle ~/.gitconfig
-[gpg]
+#+begin_src conf :tangle ~/.gitconfig
+  [gpg]
   program = gpg
 #+end_src
 *** Sendemail
-#+begin_src plain :tangle ~/.gitconfig
-[sendemail]
+#+begin_src conf :tangle ~/.gitconfig
+  [sendemail]
   smtpserver = smtp.mailbox.org
   smtpuser = me@armaanb.net
   smtpencryption = ssl
@@ -1470,31 +1149,33 @@ https://github.com/sharkdp/vivid
   confirm = auto
 #+end_src
 *** Submodules
-#+begin_src plain :tangle ~/.gitconfig
-[submodule]
+#+begin_src conf :tangle ~/.gitconfig
+  [submodule]
   recurse = true
 #+end_src
 *** Aliases
-#+begin_src plain :tangle ~/.gitconfig
-[alias]
+#+begin_src conf :tangle ~/.gitconfig
+  [alias]
   stat = diff --stat
   sclone = clone --depth 1
   sclean = clean -dfX
   a = add
   aa = add .
   c = commit
+  quickfix = commit . --amend --no-edit
   p = push
   subup = submodule update --remote
   loc = diff --stat 4b825dc642cb6eb9a060e54bf8d69288fbee4904 # Empty hash
-  mirror = git config --global alias.mirrormirror
+  pushnc = push -o skip-ci
 #+end_src
 *** Commits
-#+begin_src plain :tangle ~/.gitconfig
-[commit]
+#+begin_src conf :tangle ~/.gitconfig
+  [commit]
   gpgsign = true
+  verbose = true
 #+end_src
 ** Dunst
-Lightweight notification daemon. Gruvbox colors, based on https://github.com/a-schaefers/i3-wm-gruvbox-theme/
+Lightweight notification daemon.
 *** General
 #+begin_src conf :tangle ~/.config/dunst/dunstrc
   [global]
@@ -1508,24 +1189,24 @@ Lightweight notification daemon. Gruvbox colors, based on https://github.com/a-s
   show_age_threshold = 60
   word_wrap = yes
   ignore_newline = no
-  geometry = "400x5-20+20"
+  geometry = "400x5-10+10"
   transparency = 0
   idle_threshold = 120
   monitor = 0
   sticky_history = yes
   line_height = 0
-  separator_height = 4
+  separator_height = 1
   padding = 8
   horizontal_padding = 8
   max_icon_size = 32
-  separator_color = "#585858"
+  separator_color = "#ffffff"
   startup_notification = false
 #+end_src
 *** Modes
 #+begin_src conf :tangle ~/.config/dunst/dunstrc
   [frame]
-  width = 4
-  color = "#585858"
+  width = 1
+  color = "#ffffff"
 
   [shortcuts]
   close = mod4+c
@@ -1533,20 +1214,148 @@ Lightweight notification daemon. Gruvbox colors, based on https://github.com/a-s
   history = mod4+ctrl+c
 
   [urgency_low]
-  background = "#282828"
-  foreground = "#ebdbb2"
-  highlight = "#ebdbb2"
+  background = "#222222"
+  foreground = "#ffffff"
+  highlight = "#ffffff"
   timeout = 5
 
   [urgency_normal]
-  background = "#282828"
-  foreground = "#ebdbb2"
-  highlight = "#ebdbb2"
+  background = "#222222"
+  foreground = "#ffffff"
+  highlight = "#ffffff"
   timeout = 15
 
   [urgency_critical]
-  background = "#282828"
-  foreground = "#cc241d"
-  highlight = "#ebdbb2"
+  background = "#222222"
+  foreground = "#a60000"
+  highlight = "#ffffff"
   timeout = 0
 #+end_src
+** Zathura
+*** Options
+#+begin_src conf :tangle ~/.config/zathura/zathurarc
+  map <C-i> recolor
+  map <A-b> toggle_statusbar
+  set selection-clipboard clipboard
+  set scroll-step 200
+
+  set window-title-basename "true"
+  set selection-clipboard "clipboard"
+#+end_src
+*** Colors
+#+begin_src conf :tangle ~/.config/zathura/zathurarc
+  set default-bg         "#000000"
+  set default-fg         "#ffffff"
+  set render-loading     true
+  set render-loading-bg  "#000000"
+  set render-loading-fg  "#ffffff"
+
+  set recolor-lightcolor "#000000" # bg
+  set recolor-darkcolor  "#ffffff" # fg
+  set recolor            "true"
+#+end_src
+** Firefox
+*** Swap tab and URL bars
+#+begin_src css :tangle ~/.mozilla/firefox/armaan-release/chrome/userChrome.css
+  #nav-bar {
+      -moz-box-ordinal-group: 1 !important;
+  }
+
+  #PersonalToolbar {
+      -moz-box-ordinal-group: 2 !important;
+  }
+
+  #titlebar {
+      -moz-box-ordinal-group: 3 !important;
+  }
+#+end_src
+*** Hide URL bar when not focused.
+#+begin_src css :tangle ~/.mozilla/firefox/armaan-release/chrome/userChrome.css
+  #navigator-toolbox:not(:focus-within):not(:hover) {
+      margin-top: -30px;
+  }
+
+  #navigator-toolbox {
+      transition: 0.1s margin-top ease-out;
+  }
+#+end_src
+** Black screen by default
+#+begin_src css :tangle ~/.mozilla/firefox/armaan-release/chrome/userChrome.css
+  #main-window,
+  #browser,
+  #browser vbox#appcontent tabbrowser,
+  #content,
+  #tabbrowser-tabpanels,
+  #tabbrowser-tabbox,
+  browser[type="content-primary"],
+  browser[type="content"] > html,
+  .browserContainer {
+      background: black !important;
+      color: #fff !important;
+  }
+#+end_src
+#+begin_src css :tangle ~/.mozilla/firefox/armaan-release/chrome/userContent.css
+  @-moz-document url("about:home"), url("about:blank"), url("about:newtab") {
+      body {
+          background: black !important;
+      }
+  }
+#+end_src
+** Xresources
+*** Color scheme
+Modus operandi.
+#+begin_src conf :tangle ~/.Xresources
+  ! special
+  ,*.foreground:   #ffffff
+  ,*.background:   #000000
+  ,*.cursorColor:  #ffffff
+
+  ! black
+  ,*.color0:       #000000
+  ,*.color8:       #555555
+
+  ! red
+  ,*.color1:       #ff8059
+  ,*.color9:       #ffa0a0
+
+  ! green
+  ,*.color2:       #00fc50
+  ,*.color10:      #88cf88
+
+  ! yellow
+  ,*.color3:       #eecc00
+  ,*.color11:      #d2b580
+
+  ! blue
+  ,*.color4:       #29aeff
+  ,*.color12:      #92baff
+
+  ! magenta
+  ,*.color5:       #feacd0
+  ,*.color13:      #e0b2d6
+
+  ! cyan
+  ,*.color6:       #00d3d0
+  ,*.color14:      #a0bfdf
+
+  ! white
+  ,*.color7:       #eeeeee
+  ,*.color15:      #dddddd
+#+end_src
+*** Copy paste
+#+begin_src conf :tangle ~/.Xresources
+  xterm*VT100.Translations: #override \
+  Shift <KeyPress> Insert: insert-selection(CLIPBOARD) \n\
+  Ctrl Shift <Key>V:    insert-selection(CLIPBOARD) \n\
+  Ctrl Shift <Key>C:    copy-selection(CLIPBOARD) \n\
+  Ctrl <Btn1Up>: exec-formatted("xdg-open '%t'", PRIMARY)
+#+end_src
+*** Blink cursor
+#+begin_src conf :tangle ~/.Xresources
+  xterm*cursorBlink: true
+#+end_src
+*** Alt keys
+#+begin_src conf :tangle ~/.Xresources
+  XTerm*eightBitInput:   false
+  XTerm*eightBitOutput:  true
+#+end_src