]> git.armaanb.net Git - config.org.git/blobdiff - config.org
Add doas-edit function
[config.org.git] / config.org
index 01304fcdac2c155f595919676f3a54384a85b3e0..3d8019686d626433b8c726938d760d8d3a94698c 100644 (file)
@@ -50,20 +50,11 @@ 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
-** Tree-sitter
-#+begin_src emacs-lisp
-  (use-package tree-sitter-langs)
-  (use-package tree-sitter
-    :config (global-tree-sitter-mode)
-    :hook (tree-sitter-after-on-hook . tree-sitter-hl-mode))
-#+end_src
 ** Typography
 *** Font
 Great programming font with ligatures.
@@ -86,25 +77,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
@@ -139,15 +116,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
@@ -170,7 +142,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
@@ -181,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
@@ -253,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
@@ -291,19 +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 '("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")))
 #+end_src
 * Autocompletion
 ** Ivy
@@ -376,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"
@@ -402,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")))
@@ -417,50 +386,17 @@ 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.
-#+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)
-#+end_src
 ** Default browser
 Set EWW as default browser except for videos.
 #+begin_src emacs-lisp
@@ -471,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
@@ -481,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
@@ -512,39 +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)"=.
+** IRC
 #+begin_src emacs-lisp
-  (use-package emacs-everywhere)
+  (use-package erc
+    :straight (:type built-in)
+    :config
+    (load "~/.emacs.d/irc.el")
+    (acheam-irc)
+    (erc-notifications-enable)
+    (erc-smiley-disable))
+
+  (use-package erc-hl-nicks
+    :config (erc-hl-nicks-mode 1))
 #+end_src
-** Eshell
+** 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
-  (setq eshell-prompt-function
-        (lambda nil
-          (propertize (concat
-                       "\n" (eshell/pwd) " ➤ ")
-                      'face '(:foreground "cyan")))
-        eshell-highlight-prompt nil)
+  (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
@@ -568,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)
@@ -602,6 +542,13 @@ 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
 * General text editing
 ** Indentation
 Indent after every change.
@@ -630,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
@@ -649,7 +592,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
@@ -661,42 +604,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
@@ -711,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.
@@ -778,15 +701,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
@@ -795,15 +711,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[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
@@ -839,105 +753,42 @@ No more clogging up init.el.
 #+end_src
 **** Programs
 #+begin_src conf :tangle ~/.spectrwm.conf
-  program[aerc] = alacritty -e aerc
-  program[catgirl] = alacritty --hold -e sh -c "while : ; do ssh root@armaanb.net -t abduco -A irc catgirl freenode; 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[firefox] = firefox
+  program[calc] = alacritty -e because -l
   program[emacs-anywhere] = emacsclient --eval "(emacs-everywhere)"
 
-  bind[aerc] = MOD+Control+1
-  bind[catgirl] = MOD+Control+2
+  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
-** 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=100000
-  SAVEHIST=100000
-  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
@@ -953,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
@@ -971,82 +822,83 @@ 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
-**** 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 () {
-      zle accept-line
-      if [ ${#${(z)BUFFER}} -eq 0 ]; then
-          echo
-          exa -lh --icons --git --group-directories-first
-          [ -d ".git" ] && git status
-      fi
-  }
-  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 catgirl='ssh -p 23 -t root@armaanb.net abduco -a 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
+#+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'
@@ -1055,45 +907,41 @@ If no command given, =ls=, if in a Git repo, =git status= as well.
   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 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 \
@@ -1106,11 +954,12 @@ If no command given, =ls=, if in a Git repo, =git status= as well.
   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 \
@@ -1124,7 +973,7 @@ 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
+#+begin_src shell :tangle ~/.config/ash/ashrc
   alias ipy="ipython"
   alias zpy="zconda && ipython"
   alias math="ipython --profile=math"
@@ -1133,12 +982,12 @@ If no command given, =ls=, if in a Git repo, =git status= as well.
   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'
@@ -1146,10 +995,10 @@ If no command given, =ls=, if in a Git repo, =git status= as well.
   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='sudo pacman -S'
+  alias apii='doas pacman -S'
   alias app='yay -Rns'
   alias apc='yay -Sc'
   alias apo='yay -Qttd'
@@ -1160,41 +1009,10 @@ If no command given, =ls=, if in a Git repo, =git status= as well.
      ~/.local/etc/pacman.d/mirrorlist --download-timeout 60' # Takes ~45m to run
 #+end_src
 **** Package management (KISS)
-#+begin_src shell :tangle ~/.config/zsh/zshrc
+#+begin_src shell :tangle ~/.config/ash/ashrc
   alias kzf="kiss s \* | xargs -l basename | \
     fzf --preview 'kiss search {} | xargs -l dirname'"
 #+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/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
 ** Alacritty
 *** Appearance
 #+begin_src yml :tangle ~/.config/alacritty/alacritty.yml
@@ -1301,29 +1119,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
@@ -1332,26 +1150,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
@@ -1376,7 +1195,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
@@ -1386,7 +1205,7 @@ Lightweight notification daemon.
 *** Modes
 #+begin_src conf :tangle ~/.config/dunst/dunstrc
   [frame]
-  width = 3
+  width = 1
   color = "#ffffff"
 
   [shortcuts]
@@ -1412,22 +1231,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
@@ -1451,3 +1254,108 @@ 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
+#+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