]> git.armaanb.net Git - config.org.git/blobdiff - config.org
build: update .build.yml
[config.org.git] / config.org
index 83e1ba1dae246b27aa3facfa6c1730903f75dbbf..372b6b07d2a087b5a262139c831fc6fedfe2e196 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,13 +50,20 @@ 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 'rainbow
+        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.
@@ -68,17 +77,18 @@ Great programming font with ligatures.
     :config
     (ligature-set-ligatures
      '(prog-mode text-mode)
-     '("-|" "-~" "---" "-<<" "-<" "--" "->" "->>" "-->" "///" "/=" "/=="
-       "/>" "//" "/*" "*>" "***" "*/" "<-" "<<-" "<=>" "<=" "<|" "<||"
-       "<|||" "<|>" "<:" "<>" "<-<" "<<<" "<==" "<<=" "<=<" "<==>" "<-|"
-       "<<" "<~>" "<=|" "<~~" "<~" "<$>" "<$" "<+>" "<+" "</>" "</" "<*"
-       "<*>" "<->" "<!--" ":>" ":<" ":::" "::" ":?" ":?>" ":=" "::=" "=>>"
-       "==>" "=/=" "=!=" "=>" "===" "=:=" "==" "!==" "!!" "!=" ">]" ">:"
-       ">>-" ">>=" ">=>" ">>>" ">-" ">=" "&&&" "&&" "|||>" "||>" "|>" "|]"
-       "|}" "|=>" "|->" "|=" "||-" "|-" "||=" "||" ".." ".?" ".=" ".-" "..<"
-       "..." "+++" "+>" "++" "[||]" "[<" "[|" "{|" "??" "?." "?=" "?:" "##"
-       "###" "####" "#[" "#{" "#=" "#!" "#:" "#_(" "#_" "#?" "#(" ";;" "_|_"
-       "__" "~~" "~~>" "~>" "~-" "~@" "$>" "^=" "]#"))
+     '("-|" "-~" "---" "-<<" "-<" "--" "->" "->>" "-->" "/=" "/=="
+       "/>" "//" "/*" "*>" "*/" "<-" "<<-" "<=>" "<=" "<|" "<||"
+       "<|||" "<|>" "<:" "<>" "<-<" "<<<" "<==" "<<=" "<=<" "<==>"
+       "<-|" "<<" "<~>" "<=|" "<~~" "<~" "<$>" "<$" "<+>" "<+" "</>"
+       "</" "<*" "<*>" "<->" "<!--" ":>" ":<" ":::" "::" ":?" ":?>"
+       ":=" "::=" "=>>" "==>" "=/=" "=!=" "=>" "===" "=:=" "==" "!=="
+       "!!" "!=" ">]" ">:" ">>-" ">>=" ">=>" ">>>" ">-" ">=" "&&&"
+       "&&" "|||>" "||>" "|>" "|]" "|}" "|=>" "|->" "|=" "||-" "|-"
+       "||=" "||" ".." ".?" ".=" ".-" "..<" "..." "+++" "+>" "++"
+       "[||]" "[<" "[|" "{|" "?." "?=" "?:" "##" "###" "####" "#["
+       "#{" "#=" "#!" "#:" "#_(" "#_" "#?" "#(" ";;" "_|_" "__" "~~"
+       "~~>" "~>" "~-" "~@" "$>" "^=" "]#"))
     (global-ligature-mode t))
 #+end_src
 *** Emoji
@@ -129,6 +139,12 @@ 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
@@ -141,13 +157,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
@@ -219,16 +228,10 @@ tpope prevails!
                 ("gc" . evilnc-comment-or-uncomment-lines))
     :custom (evilnc-invert-comment-line-by-line nil))
 #+end_src
-** Undo tree
+** 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
@@ -269,13 +272,15 @@ Add back C-a/C-x
     :custom
     (org-ellipsis " ▾")
     (org-agenda-start-with-log-mode t)
+    (org-agenda-files (quote ("~/Org/tasks.org" "~/Org/break.org")))
     (org-log-done 'time)
     (org-log-into-drawer t)
     (org-src-tab-acts-natively t)
     (org-src-fontify-natively t)
     (org-startup-indented t)
     (org-hide-emphasis-markers t)
-    (org-fontify-whole-block-delimiter-line nil))
+    (org-fontify-whole-block-delimiter-line nil)
+    :bind ("C-c a" . org-agenda))
 #+end_src
 ** Tempo
 #+begin_src emacs-lisp
@@ -291,7 +296,16 @@ Add back C-a/C-x
     (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 '("ro" . "src javascript :tangle ~/.config/rofi/config.rasi"))
+    (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")))
+#+end_src
+** Presentations
+#+begin_src emacs-lisp
+  (use-package org-present
+    :straight (org-present :type git :host github :repo "rlister/org-present"))
 #+end_src
 * Autocompletion
 ** Ivy
@@ -371,11 +385,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"
@@ -384,14 +399,14 @@ 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")
+                       (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"))
@@ -399,8 +414,7 @@ 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")
@@ -412,7 +426,9 @@ Contexts are a not very well known feature of mu4e that makes it super easy to m
     (add-to-list 'mu4e-bookmarks
                  '(:name "Unified inbox"
                          :query "maildir:\"/personal/INBOX\" or maildir:\"/school/INBOX\""
-                         :key ?b)))
+                         :key ?b))
+    :hook ((mu4e-compose-mode . flyspell-mode)
+           (mu4e-view-mode-hook . turn-on-visual-line-mode)))
 #+end_src
 ** Calendar
 #+begin_src emacs-lisp
@@ -457,60 +473,66 @@ 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
-** Emacs Anywhere
-Use Emacs globally. Use the Emacs daemon and bind a key in your wm to
-"emacsclient --eval "(emacs-everywhere)".
+** EWW
+Some EWW enhancements.
+*** Give buffer a useful name
 #+begin_src emacs-lisp
-  (use-package emacs-everywhere)
+  ;; 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'."
+    (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)
 #+end_src
-* Emacs IDE
-** LSP
-*** General
+*** Better entrypoint
 #+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)))
+  ;; From https://protesilaos.com/dotemacs/
+  (defun prot-eww-browse-dwim (url &optional arg)
+    "Visit a URL, maybe from `eww-prompt-history', with completion.
 
-  (use-package lsp-ivy)
+  With optional prefix ARG (\\[universal-argument]) open URL in a
+  new eww buffer.
 
-  (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))
+  If URL does not look like a valid link, run a web query using
+  `eww-search-prefix'.
+
+  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)))
+
+  (global-set-key (kbd "C-c w") 'prot-eww-browse-dwim)
 #+end_src
-*** Company
-Company-box adds icons.
+** 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 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 company-box
-    :hook (company-mode . company-box-mode))
+  (use-package emacs-everywhere)
 #+end_src
-*** Language servers
-**** Python
+** Eshell
 #+begin_src emacs-lisp
-  (use-package lsp-pyright
-    :hook (python-mode . (lambda ()
-                           (use-package lsp-pyright
-                             :straight (:type built-in))
-                           (lsp-deferred))))
+  (setq eshell-prompt-function
+        (lambda nil
+          (propertize (concat
+                       "\n" (eshell/pwd) " ➤ ")
+                      'face '(:foreground "cyan")))
+        eshell-highlight-prompt nil)
 #+end_src
+* Emacs IDE
 ** Code cleanup
 #+begin_src emacs-lisp
   (use-package blacken
@@ -573,9 +595,9 @@ Company-box adds icons.
 #+end_src
 ** Git
 *** 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
@@ -636,6 +658,14 @@ Abbreviate things!
   (setq save-abbrevs 'silent)
   (setq-default abbrev-mode t)
 #+end_src
+** TRAMP
+#+begin_src emacs-lisp
+  (setq tramp-default-method "ssh")
+#+end_src
+** Don't ask about following symlinks in vc
+#+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.
@@ -725,12 +755,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
@@ -751,17 +783,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
@@ -815,20 +838,20 @@ Gruvbox colors
 **** 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 root@armaanb.net -t abduco -A irc catgirl freenode; sleep 2; done"
   program[emacs] = emacsclient -c
-  program[emacs-anywhere] = emacsclient --eval "(emacs-everywhere)"
   program[firefox] = firefox
-  program[thunderbird] = thunderbird
-  program[slack] = slack
+  program[calc] = alacritty -e bc
+  program[emacs-anywhere] = emacsclient --eval "(emacs-everywhere)"
+  program[pass] = rofi-pass
 
-  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
+  bind[aerc] = MOD+Control+1
+  bind[catgirl] = MOD+Control+2
+  bind[firefox] = MOD+Control+3
+  bind[emacs-anywhere] = MOD+Control+4
+  bind[calc] = MOD+Control+5
+  bind[emacs] = MOD+Control+Return
+  bind[pass] = MOD+Shift+P
 #+end_src
 ** Zsh
 *** Settings
@@ -839,6 +862,16 @@ Gruvbox colors
 
   setopt no_case_glob
   unsetopt glob_complete
+
+  # Fragment completions
+  zstyle ':completion:*' list-suffixes
zstyle ':completion:*' expand prefix suffix
+
+  # Menu completions
+  zstyle ':completion:*' menu select
+  zmodload zsh/complist
+  bindkey -M menuselect '^n' expand-or-complete
+  bindkey -M menuselect '^p' reverse-menu-complete
+
 #+end_src
 **** Vim bindings
 #+begin_src shell :tangle ~/.config/zsh/zshrc
@@ -861,17 +894,17 @@ Gruvbox colors
   setopt hist_ignore_dups
   setopt hist_reduce_blanks
 
-  HISTSIZE=10000
-  SAVEHIST=10000
+  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
+
+Right now, I'm only using fast-syntax-highlighting. It's a really nice visual addition.
 **** 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
+#+begin_src conf :tangle ~/.config/zpe/repositories
+  https://github.com/zdharma/fast-syntax-highlighting
 #+end_src
 **** Zshrc
 #+begin_src shell :tangle ~/.config/zsh/zshrc
@@ -879,31 +912,13 @@ I manage plugins using my own plugin manager, ZPE. https://git.sr.ht/~armaan/zpe
   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
 #+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
+  timer() {
+      for i in $(seq 1 10); do time "$1" -i -c exit; done
   }
 #+end_src
 **** Update all packages
@@ -950,13 +965,6 @@ 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
-  }
-#+end_src
 **** Setup anaconda
 #+begin_src shell :tangle ~/.config/zsh/zshrc
   zconda() {
@@ -982,22 +990,25 @@ I manage plugins using my own plugin manager, ZPE. https://git.sr.ht/~armaan/zpe
   0short() { curl -F"shorten=$1" "$zxz" ; }
   0clip() { xclip -out | curl -F"file=@-;" "$zxz" ; }
 #+end_src
-**** Swap two files
+**** Finger
 #+begin_src shell :tangle ~/.config/zsh/zshrc
-  sw() {
-      mv $1 $1.tmp
-      mv $2 $1
-      mv $1.tmp $2
+  finger() {
+      user=$(echo "$1" | cut -f 1 -d '@')
+      host=$(echo "$1" | cut -f 2 -d '@')
+      echo $user | nc "$host" 79 -N
   }
 #+end_src
 *** Aliases
 **** SSH
 #+begin_src shell :tangle ~/.config/zsh/zshrc
   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 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'
@@ -1014,18 +1025,11 @@ I manage plugins using my own plugin manager, ZPE. https://git.sr.ht/~armaan/zpe
   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'
@@ -1037,8 +1041,13 @@ I manage plugins using my own plugin manager, ZPE. https://git.sr.ht/~armaan/zpe
   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 pasc='pass -c'
+  alias pasu='\pass git push'
+  alias yadu='yadm add -u && yadm commit -m "Updated `date -Iseconds`" && \
+    yadm push'
 #+end_src
 **** Networking
 #+begin_src shell :tangle ~/.config/zsh/zshrc
@@ -1048,11 +1057,14 @@ I manage plugins using my own plugin manager, ZPE. https://git.sr.ht/~armaan/zpe
   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" && \
+        rsync "$TT" 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
@@ -1068,6 +1080,7 @@ 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
@@ -1111,6 +1124,7 @@ I manage plugins using my own plugin manager, ZPE. https://git.sr.ht/~armaan/zpe
 #+begin_src shell :tangle ~/.config/zsh/zshrc
   alias aps='yay -Ss'
   alias api='yay -Syu'
+  alias apii='sudo pacman -S'
   alias app='yay -Rns'
   alias apc='yay -Sc'
   alias apo='yay -Qttd'
@@ -1118,25 +1132,28 @@ 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
+**** Package management (KISS)
+#+begin_src shell :tangle ~/.config/zsh/zshrc
+  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"                  # $EDITOR opens in terminal
-  export VISUAL="emacsclient -c -a emacs"         # $VISUAL opens in GUI mode
+  export EDITOR="emacsclient -c"
+  export VISUAL="$EDITOR"
   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="/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"
@@ -1146,7 +1163,7 @@ I manage plugins using my own plugin manager, ZPE. https://git.sr.ht/~armaan/zpe
   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="/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"
@@ -1172,53 +1189,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'
+
+  cursor:
+    text: '#000000'
+    background: '#ffffff'
 
-  # Normal colors
+  # Normal colors (except green it is from intense colors)
   normal:
-    black:   '#282828'
-    red:     '#cc241d'
-    green:   '#98971a'
-    yellow:  '#d79921'
-    blue:    '#458588'
-    magenta: '#b16286'
-    cyan:    '#689d6a'
-    white:   '#a89984'
-
-  # Bright colors
+    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
@@ -1256,171 +1273,31 @@ 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
+#+begin_src conf :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
-#+end_src
 ** Git
 *** User
-#+begin_src plain :tangle ~/.gitconfig
+#+begin_src conf :tangle ~/.gitconfig
 [user]
   name = Armaan Bhojwani
   email = me@armaanb.net
   signingkey = 0FEB9471E19C49C60CFBEB133C9ED82FFE788E4A
 #+end_src
 *** Init
-#+begin_src plain :tangle ~/.gitconfig
+#+begin_src conf :tangle ~/.gitconfig
 [init]
   defaultBranch = main
 #+end_src
 *** GPG
-#+begin_src plain :tangle ~/.gitconfig
+#+begin_src conf :tangle ~/.gitconfig
 [gpg]
   program = gpg
 #+end_src
 *** Sendemail
-#+begin_src plain :tangle ~/.gitconfig
+#+begin_src conf :tangle ~/.gitconfig
 [sendemail]
   smtpserver = smtp.mailbox.org
   smtpuser = me@armaanb.net
@@ -1429,12 +1306,12 @@ https://github.com/sharkdp/vivid
   confirm = auto
 #+end_src
 *** Submodules
-#+begin_src plain :tangle ~/.gitconfig
+#+begin_src conf :tangle ~/.gitconfig
 [submodule]
   recurse = true
 #+end_src
 *** Aliases
-#+begin_src plain :tangle ~/.gitconfig
+#+begin_src conf :tangle ~/.gitconfig
 [alias]
   stat = diff --stat
   sclone = clone --depth 1
@@ -1448,12 +1325,13 @@ https://github.com/sharkdp/vivid
   mirror = git config --global alias.mirrormirror
 #+end_src
 *** Commits
-#+begin_src plain :tangle ~/.gitconfig
+#+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]
@@ -1467,24 +1345,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
@@ -1492,20 +1370,102 @@ 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
+** 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 % );
+      }
+#+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