]> git.armaanb.net Git - config.org.git/blobdiff - config.org
Remove emacs-anywhere
[config.org.git] / config.org
index 5c68592d2fa3726872710a0563b4d279511d2094..612c02050b133f7f626a7d64a3129db685b1b3f9 100644 (file)
@@ -15,9 +15,7 @@ Another important choice has been to integrate Emacs into a large part of my com
 Lastly, I use Evil mode. I think modal keybindings are simple and more ergonomic than standard Emacs style, and Vim keybindings are what I'm comfortable with and are pervasive throughout computing.
 ** TODOs
 *** TODO Turn keybinding and hook declarations into use-package declarations where possible
-*** TODO Put configs with passwords in here with some kind of authentication
-- Offlineimap
-- irc.el
+*** TODO Include offlineimap config
 ** License
 Released under the [[https://opensource.org/licenses/MIT][MIT license]] by Armaan Bhojwani, 2021. Note that many snippets are taken from online, and other sources, who are credited for their work at the snippet.
 * Package management
@@ -50,10 +48,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
@@ -79,25 +75,11 @@ Great programming font with ligatures.
        "!!" "!=" ">]" ">:" ">>-" ">>=" ">=>" ">>>" ">-" ">=" "&&&"
        "&&" "|||>" "||>" "|>" "|]" "|}" "|=>" "|->" "|=" "||-" "|-"
        "||=" "||" ".." ".?" ".=" ".-" "..<" "..." "+++" "+>" "++"
-       "[||]" "[<" "[|" "{|" "??" "?." "?=" "?:" "##" "###" "####"
-       "#[" "#{" "#=" "#!" "#:" "#_(" "#_" "#?" "#(" ";;" "_|_" "__"
-       "~~" "~~>" "~>" "~-" "~@" "$>" "^=" "]#"))
+       "[||]" "[<" "[|" "{|" "?." "?=" "?:" "##" "###" "####" "#["
+       "#{" "#=" "#!" "#:" "#_(" "#_" "#?" "#(" ";;" "_|_" "__" "~~"
+       "~~>" "~>" "~-" "~@" "$>" "^=" "]#"))
     (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,15 +114,10 @@ Show current column and file size.
   (use-package minions
     :config (minions-mode))
 #+end_src
-** Word count
-#+begin_src emacs-lisp
- (use-package wc-mode
-   :straight (wc-mode :type git :host github :repo "bnbeckwith/wc-mode")
-   :hook (text-mode-hook . wc-mode))
-#+end_src
 ** 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
@@ -163,7 +140,7 @@ Whenever starting a key chord, show possible future steps.
 ** 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
@@ -174,10 +151,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
@@ -246,8 +222,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
@@ -284,19 +259,18 @@ 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 '("al" . "src yml :tangle ~/.config/alacritty/alacritty.yml"))
+    (add-to-list 'org-structure-template-alist '("ash" . "src shell :tangle ~/.config/ash/ashrc"))
     (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 '("ro" . "src javascript :tangle ~/.config/rofi/config.rasi"))
-    (add-to-list 'org-structure-template-alist '("za" . "src conf :tangle ~/.config/zathura/zathurarc")))
-#+end_src
-** Presentations
-#+begin_src emacs-lisp
-  (use-package org-present
-    :straight (org-present :type git :host github :repo "rlister/org-present"))
+    (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"))
+    (add-to-list 'org-structure-template-alist '("tm" . "src conf :tangle ~/.tmux.conf"))
+    (add-to-list 'org-structure-template-alist '("gp" . "src conf :tangle ~/.gnupg/gpg.conf"))
+    (add-to-list 'org-structure-template-alist '("ag" . "src conf :tangle ~/.gnupg/gpg-agent.conf")))
 #+end_src
 * Autocompletion
 ** Ivy
@@ -330,8 +304,7 @@ Ivy everywhere.
 #+begin_src emacs-lisp
   (use-package ivy-prescient
     :after counsel
-    :custom
-    (ivy-prescient-enable-filtering nil)
+    :custom (ivy-prescient-enable-filtering nil)
     :config
     (prescient-persist-mode)
     (ivy-prescient-mode))
@@ -369,6 +342,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"
@@ -381,6 +355,7 @@ Contexts are a not very well known feature of mu4e that makes it super easy to m
           message-citation-line-function 'message-insert-formatted-citation-line
           mu4e-completing-read-function 'ivy-completing-read
           mu4e-confirm-quit nil
+          mu4e-view-use-gnus t
           mail-user-agent 'mu4e-user-agent
           mu4e-contexts
           `( ,(make-mu4e-context
@@ -395,6 +370,7 @@ Contexts are a not very well known feature of mu4e that makes it super easy to m
                        (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")))
@@ -410,49 +386,23 @@ Contexts are a not very well known feature of mu4e that makes it super easy to m
                        (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))
     :hook ((mu4e-compose-mode . flyspell-mode)
+           (mu4e-compose-mode . auto-fill-mode)
            (mu4e-view-mode-hook . turn-on-visual-line-mode)))
-#+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.
+Discourage Gnus from displaying HTML emails
 #+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)
+  (with-eval-after-load "mm-decode"
+    (add-to-list 'mm-discouraged-alternatives "text/html")
+    (add-to-list 'mm-discouraged-alternatives "text/richtext"))
 #+end_src
 ** Default browser
 Set EWW as default browser except for videos.
@@ -464,6 +414,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
@@ -474,70 +427,66 @@ 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
+*** Keybinding
 #+begin_src emacs-lisp
-  ;; From https://protesilaos.com/dotemacs/
-  (defun prot-eww-browse-dwim (url &optional arg)
-    "Visit a URL, maybe from `eww-prompt-history', with completion.
-
-  With optional prefix ARG (\\[universal-argument]) open URL in a
-  new eww buffer.
+  (global-set-key (kbd "C-c w") 'eww)
+#+end_src
+** IRC
+#+begin_src emacs-lisp
+  (use-package circe
+    :config
+    (enable-lui-track)
+    (enable-circe-color-nicks))
 
-  If URL does not look like a valid link, run a web query using
-  `eww-search-prefix'.
+  (defun fetch-password (&rest params)
+    (require 'auth-source)
+    (let ((match (car (apply 'auth-source-search params))))
+      (if match
+          (let ((secret (plist-get match :secret)))
+            (if (functionp secret)
+                (funcall secret)
+              secret))
+        (error "Password not found for %S" params))))
 
-  When called from an eww buffer, provide the current link as
-  initial input."
-    (interactive
-     (list
-      (completing-read "Query:" eww-prompt-history
-                       nil nil (plist-get eww-data :url) 'eww-prompt-history)
-      current-prefix-arg))
-    (eww url (if arg 4 nil)))
+  (setq circe-network-options
+        '(("pounce"
+           :host "irc.armaanb.net"
+           :nick "emacs"
+           :use-tls t
+           :port "6697"
+           :pass (lambda (fetch-password
+                          :login "emacs"
+                          :machine "irc.armaanb.net"
+                          :port 6697))))
 
-  (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
-** Eshell
-#+begin_src emacs-lisp
-  (setq eshell-prompt-function
-        (lambda nil
-          (propertize (concat
-                       "\n" (eshell/pwd) " ➤ ")
-                      'face '(:foreground "cyan")))
-        eshell-highlight-prompt nil)
+        (circe "pounce")
 #+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
@@ -561,19 +510,17 @@ Use Emacs globally. Use the Emacs daemon and bind a key in your wm to
     :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)
@@ -595,6 +542,32 @@ Use Emacs globally. Use the Emacs daemon and bind a key in your wm to
            (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
+** Java
+*** Evaluate current buffer
+Stolen from https://stackoverflow.com/questions/19953924/how-do-you-run-java-codes-in-emacs
+#+begin_src emacs-lisp
+  (defun java-eval-buffer ()
+    "run current program (that requires no input)"
+    (interactive)
+    (let* ((source (file-name-nondirectory buffer-file-name))
+           (out    (file-name-sans-extension source))
+           (class  (concat out ".class")))
+      (save-buffer)
+      (shell-command (format "rm -f %s && javac %s" class source))
+      (if (file-exists-p class)
+          (shell-command (format "java %s" out) "*scratch*")
+        (progn
+          (set (make-local-variable 'compile-command)
+               (format "javac %s" source))
+          (command-execute 'compile)))))
+#+end_src
 * General text editing
 ** Indentation
 Indent after every change.
@@ -623,10 +596,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
@@ -642,7 +611,7 @@ 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
@@ -654,42 +623,27 @@ Abbreviate things!
 #+begin_src emacs-lisp
   (setq vc-follow-symlinks t)
 #+end_src
-* Functions
-** Easily convert splits
-Converts splits from horizontal to vertical and vice versa. Lifted from EmacsWiki.
+** Don't ask to save custom dictionary
 #+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 ispell-silently-savep t)
 #+end_src
-** Insert date
+** Open file as root
 #+begin_src emacs-lisp
-  (defun insert-date ()
-    (interactive)
-    (insert (format-time-string "%Y-%m-%d")))
+  (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
@@ -704,13 +658,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.
@@ -771,15 +720,8 @@ No more clogging up init.el.
   workspace_limit = 5
   warp_pointer = 1
   modkey = Mod4
-  border_width = 4
   autorun = ws[1]:/home/armaa/Code/scripts/autostart
 #+end_src
-*** Appearance
-#+begin_src conf :tangle ~/.spectrwm.conf
-  color_focus = rgb:ff/ff/ff
-  color_focus_maximized = rgb:ee/cc/00
-  color_unfocus = rgb:55/55/55
-#+end_src
 *** Bar
 #+begin_src conf :tangle ~/.spectrwm.conf
   bar_enabled = 0
@@ -788,15 +730,13 @@ No more clogging up init.el.
 *** Keybindings
 **** WM actions
 #+begin_src conf :tangle ~/.spectrwm.conf
-  program[lock] = i3lock -c 000000 -ef
-  program[term] = alacritty
+  program[term] = st -e tmux
   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
@@ -832,118 +772,44 @@ No more clogging up init.el.
 #+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[catgirl] = alacritty --hold -e sh -c "while : ; do ssh -p 23 -t root@armaanb.net tmux attach-session -t catgirl; 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
+  program[calc] = st -e because -l
 
-  bind[aerc] = MOD+Control+1
-  # bind[weechat] = MOD+Control+2
-  bind[catgirl] = MOD+Control+2
-  bind[emacs-anywhere] = MOD+Control+3
-  bind[firefox] = MOD+Control+4
-  bind[thunderbird] = MOD+Control+5
-  bind[slack] = MOD+Control+6
+  bind[email] = MOD+Control+1
+  bind[irc] = MOD+Control+2
+  bind[firefox] = MOD+Control+3
+  bind[calc] = MOD+Control+5
   bind[emacs] = MOD+Control+Return
 #+end_src
-** Zsh
-*** Settings
-**** Completions
-#+begin_src shell :tangle ~/.config/zsh/zshrc
-  autoload -Uz compinit
-  compinit
-
-  setopt no_case_glob
-  unsetopt glob_complete
+**** Quirks
+#+begin_src conf :tangle ~/.spectrwm.conf
+  quirk[Castle Menu] = FLOAT
+  quirk[momen] = FLOAT
 #+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 conf :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
-
-  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
+** Ash
+*** Options
+#+begin_src conf :tangle ~/.config/ash/ashrc
+  set -o vi
 #+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}
-  }
-#+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
-  }
-#+end_src
 **** 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
       echo ""
-      echo "${color}== upgrading zsh plugins ==${reset}"
-      zpe-pull
-      echo ""
       echo "${color}== updating nvim plugins ==${reset}"
       nvim +PlugUpdate +PlugUpgrade +qall
       echo "Updated nvim plugins"
@@ -952,17 +818,14 @@ 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
       echo ""
-      echo "${color}== cleaning zsh plugins ==${reset}"
-      zpe-clean
-      echo ""
       echo "${color}== cleaning nvim plugins ==${reset}"
       nvim +PlugClean +qall
       echo "Cleaned nvim plugins"
@@ -970,146 +833,118 @@ 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 -h --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
   }
 #+end_src
-**** Change default enter behavior
-If no command given, =ls=, if in a Git repo, =git status= as well.
-#+begin_src shell :tangle ~/.config/zsh/zshrc
-  acheam-accept-line () {
-      if [ ${#${(z)BUFFER}} -eq 0 ]; then
-          echo
-          [ git rev-parse --git-dir > /dev/null 2>&1 ] && git status
-          exa -h --icons --git --group-directories-first
-      fi
-      zle accept-line
-  }
-  zle -N acheam-accept-line
-  bindkey '^M' acheam-accept-line
-#+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 catgirl='ssh -p 23 -t root@armaanb.net tmux attach-session -t catgirl'
+  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 ncq='ssh root@143.198.123.17'
-  alias dock='ssh root@192.168.1.225'
-  alias jenkins='ssh root@192.168.1.226'
   alias envs='ssh acheam@envs.net'
 #+end_src
 **** File management
-#+begin_src shell :tangle ~/.config/zsh/zshrc
-  alias ls='exa -lh --icons --git --group-directories-first'
-  alias la='exa -lha --icons --git --group-directories-first'
+#+begin_src shell :tangle ~/.config/ash/ashrc
+  alias ls='ls -lh --group-directories-first'
+  alias la='ls -A'
   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 ln='ln -v'
+  alias grep='grep -in --color=auto'
   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 lanex='java -jar ~/.local/share/lxc/lanxchange.jar'
+  alias vim=$EDITOR
+  alias emacs=$EDITOR
 #+end_src
 **** System management
-#+begin_src shell :tangle ~/.config/zsh/zshrc
-  alias jctl='journalctl -p 3 -xb'
+#+begin_src shell :tangle ~/.config/ash/ashrc
   alias pkill='pkill -i'
-  alias cx='chmod +x'
-  alias redoas='doas $(fc -ln -1)'
   alias crontab='crontab-argh'
-  alias sudo='doas ' # allows aliases to be run with doas
+  alias sudo='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'
-#+end_src
-**** Other
-#+begin_src shell :tangle ~/.config/zsh/zshrc
-  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 \
-    iflag=fullblock status=progress'
-  alias ts='gen-shell -c task'
-  alias ts='gen-shell -c task'
-  alias tetris='autoload -Uz tetriscurses && tetriscurses'
-  alias news='newsboat'
-  alias tilderadio="\mpv https://radio.tildeverse.org/radio/8000/radio.ogg"
-  alias ytmusic="youtube-dl -x --add-metadata  --audio-format aac \
-    --restrict-filenames -o '%(title)s.%(ext)s'"
-  alias cal="cal -3 --color=auto"
+  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'
 #+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 \
@@ -1123,169 +958,47 @@ If no command given, =ls=, if in a Git repo, =git status= as well.
     -drive format=qcow2,file=/home/armaa/Virtual/windows.qcow2'
 #+end_src
 **** Python
-#+begin_src shell :tangle ~/.config/zsh/zshrc
-  alias ipy="ipython"
-  alias zpy="zconda && ipython"
-  alias math="ipython --profile=math"
-  alias pypi="python setup.py sdist && twine upload dist/*"
+#+begin_src shell :tangle ~/.config/ash/ashrc
   alias pip="python -m pip"
   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'
   alias cad='devour openscad'
   alias feh='devour feh'
 #+end_src
-**** Package management (Pacman)
-#+begin_src shell :tangle ~/.config/zsh/zshrc
+**** Pacman
+#+begin_src shell :tangle ~/.config/ash/ashrc
   alias aps='yay -Ss'
   alias api='yay -Syu'
-  alias apii='sudo pacman -S'
+  alias apii='doas pacman -S'
   alias app='yay -Rns'
-  alias apc='yay -Sc'
-  alias apo='yay -Qttd'
   alias azf='pacman -Q | fzf'
   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
-#+end_src
-*** Exports
-#+begin_src shell :tangle ~/.config/zsh/zshrc
-  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/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
-** Alacritty
-*** Appearance
-#+begin_src yml :tangle ~/.config/alacritty/alacritty.yml
-font:
-  normal:
-    family: JetBrains Mono Nerd Font
-    style: Medium
-  italic:
-    style: Italic
-  Bold:
-    style: Bold
-  size: 7
-  ligatures: true # Requires ligature patch
-
-window:
-  padding:
-    x: 5
-    y: 5
-
-background_opacity: 1
-#+end_src
-*** Color scheme
-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: '#ffffff'
-
-  cursor:
-    text: '#000000'
-    background: '#ffffff'
-
-  # 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:   '#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'
+**** Other
+#+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 \
+    iflag=fullblock status=progress'
+  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
 ** IPython
-*** General
-Symlink profile_default/ipython_config.py to profile_math/ipython_config.py
 #+begin_src python :tangle ~/.ipython/profile_default/ipython_config.py
   c.TerminalInteractiveShell.editing_mode = 'vi'
   c.InteractiveShell.colors = 'linux'
   c.TerminalInteractiveShell.confirm_exit = False
 #+end_src
-*** Math
-#+begin_src python :tangle ~/.ipython/profile_math/startup.py
-  from math import *
-
-  def deg(x):
-      return x * (180 /  pi)
-
-  def rad(x):
-      return x * (pi / 180)
-
-  def rad(x, unit):
-      return (x * (pi / 180)) / unit
-
-  def csc(x):
-      return 1 / sin(x)
-
-  def sec(x):
-      return 1 / cos(x)
-
-  def cot(x):
-      return 1 / tan(x)
-#+end_src
 ** MPV
 Make MPV play a little bit smoother.
 #+begin_src conf :tangle ~/.config/mpv/mpv.conf
@@ -1295,29 +1008,29 @@ Make MPV play a little bit smoother.
 ** Inputrc
 For any GNU Readline programs
 #+begin_src conf :tangle ~/.inputrc
-  set editing-mode vi
+  set editing-mode emacs
 #+end_src
 ** Git
 *** User
 #+begin_src conf :tangle ~/.gitconfig
-[user]
+  [user]
   name = Armaan Bhojwani
   email = me@armaanb.net
   signingkey = 0FEB9471E19C49C60CFBEB133C9ED82FFE788E4A
 #+end_src
 *** Init
 #+begin_src conf :tangle ~/.gitconfig
-[init]
+  [init]
   defaultBranch = main
 #+end_src
 *** GPG
 #+begin_src conf :tangle ~/.gitconfig
-[gpg]
+  [gpg]
   program = gpg
 #+end_src
 *** Sendemail
 #+begin_src conf :tangle ~/.gitconfig
-[sendemail]
+  [sendemail]
   smtpserver = smtp.mailbox.org
   smtpuser = me@armaanb.net
   smtpencryption = ssl
@@ -1326,26 +1039,27 @@ For any GNU Readline programs
 #+end_src
 *** Submodules
 #+begin_src conf :tangle ~/.gitconfig
-[submodule]
+  [submodule]
   recurse = true
 #+end_src
 *** Aliases
 #+begin_src conf :tangle ~/.gitconfig
-[alias]
+  [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 conf :tangle ~/.gitconfig
-[commit]
+  [commit]
   gpgsign = true
   verbose = true
 #+end_src
@@ -1370,7 +1084,7 @@ Lightweight notification daemon.
   monitor = 0
   sticky_history = yes
   line_height = 0
-  separator_height = 4
+  separator_height = 1
   padding = 8
   horizontal_padding = 8
   max_icon_size = 32
@@ -1380,7 +1094,7 @@ Lightweight notification daemon.
 *** Modes
 #+begin_src conf :tangle ~/.config/dunst/dunstrc
   [frame]
-  width = 3
+  width = 1
   color = "#ffffff"
 
   [shortcuts]
@@ -1406,22 +1120,6 @@ Lightweight notification daemon.
   highlight = "#ffffff"
   timeout = 0
 #+end_src
-** Rofi
-Modus vivendi theme that extends DarkBlue.
-#+begin_src javascript :tangle ~/.config/rofi/config.rasi
-  @import "/usr/share/rofi/themes/DarkBlue.rasi"
-      ,* {
-          white:                        rgba ( 255, 255, 255, 100 % );
-          foreground:                   @white;
-          selected-normal-background:   @white;
-          separatorcolor:               @white;
-          background:                   rgba ( 34, 34, 34, 100 % );
-      }
-
-  window {
-      border: 3;
-  }
-#+end_src
 ** Zathura
 *** Options
 #+begin_src conf :tangle ~/.config/zathura/zathurarc
@@ -1445,3 +1143,112 @@ Modus vivendi theme that extends DarkBlue.
   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
+userChrome.css:
+#+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
+
+userContent.css:
+#+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
+Modus operandi theme.
+#+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
+** Tmux
+#+begin_src conf :tangle ~/.tmux.conf
+  set -g status off
+  set -g mouse on
+  set-window-option -g mode-keys vi
+#+end_src
+** GPG
+*** Config
+#+begin_src conf :tangle ~/.gnupg/gpg.conf
+  default-key 3C9ED82FFE788E4A
+  use-agent
+#+end_src
+*** Agent
+#+begin_src conf :tangle ~/.gnupg/gpg-agent.conf
+  pinentry-program /sbin/pinentry-gnome3
+  max-cache-ttl 600
+  default-cache-ttl 600
+  allow-emacs-pinentry
+#+end_src