#+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!
:config
(ligature-set-ligatures
'(prog-mode text-mode)
- '("-|" "-~" "---" "-<<" "-<" "--" "->" "->>" "-->" "///" "/=" "/=="
+ '("-|" "-~" "---" "-<<" "-<" "--" "->" "->>" "-->" "/=" "/=="
"/>" "//" "/*" "*>" "*/" "<-" "<<-" "<=>" "<=" "<|" "<||"
- "<|||" "<|>" "<:" "<>" "<-<" "<<<" "<==" "<<=" "<=<" "<==>" "<-|"
- "<<" "<~>" "<=|" "<~~" "<~" "<$>" "<$" "<+>" "<+" "</>" "</" "<*"
- "<*>" "<->" "<!--" ":>" ":<" ":::" "::" ":?" ":?>" ":=" "::=" "=>>"
- "==>" "=/=" "=!=" "=>" "===" "=:=" "==" "!==" "!!" "!=" ">]" ">:"
- ">>-" ">>=" ">=>" ">>>" ">-" ">=" "&&&" "&&" "|||>" "||>" "|>" "|]"
- "|}" "|=>" "|->" "|=" "||-" "|-" "||=" "||" ".." ".?" ".=" ".-" "..<"
- "..." "+++" "+>" "++" "[||]" "[<" "[|" "{|" "??" "?." "?=" "?:" "##"
- "###" "####" "#[" "#{" "#=" "#!" "#:" "#_(" "#_" "#?" "#(" ";;" "_|_"
- "__" "~~" "~~>" "~>" "~-" "~@" "$>" "^=" "]#"))
+ "<|||" "<|>" "<:" "<>" "<-<" "<<<" "<==" "<<=" "<=<" "<==>"
+ "<-|" "<<" "<~>" "<=|" "<~~" "<~" "<$>" "<$" "<+>" "<+" "</>"
+ "</" "<*" "<*>" "<->" "<!--" ":>" ":<" ":::" "::" ":?" ":?>"
+ ":=" "::=" "=>>" "==>" "=/=" "=!=" "=>" "===" "=:=" "==" "!=="
+ "!!" "!=" ">]" ">:" ">>-" ">>=" ">=>" ">>>" ">-" ">=" "&&&"
+ "&&" "|||>" "||>" "|>" "|]" "|}" "|=>" "|->" "|=" "||-" "|-"
+ "||=" "||" ".." ".?" ".=" ".-" "..<" "..." "+++" "+>" "++"
+ "[||]" "[<" "[|" "{|" "??" "?." "?=" "?:" "##" "###" "####"
+ "#[" "#{" "#=" "#!" "#:" "#_(" "#_" "#?" "#(" ";;" "_|_" "__"
+ "~~" "~~>" "~>" "~-" "~@" "$>" "^=" "]#"))
(global-ligature-mode t))
#+end_src
*** Emoji
(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
: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
("gc" . evilnc-comment-or-uncomment-lines))
:custom (evilnc-invert-comment-line-by-line nil))
#+end_src
-** Undo tree
-Fix the oopsies! Maybe replace with undo-fu or Emacs 28 built in undo-redo.
+** Undo redo
+Fix the oopsies!
#+begin_src emacs-lisp
- (use-package undo-tree
- :custom
- (undo-tree-auto-save-history t)
- (undo-tree-history-directory-alist '(("." . "~/.emacs.d/undo-tree")))
- :config
- (global-undo-tree-mode)
- (evil-set-undo-system 'undo-tree))
+ (evil-set-undo-system 'undo-redo)
#+end_src
** Number incrementing
Add back C-a/C-x
(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")))
+#+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
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"
: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"))
: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")
(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
#+begin_src emacs-lisp
(use-package emacs-everywhere)
#+end_src
-* Emacs IDE
-** LSP
-*** General
-#+begin_src emacs-lisp
- (use-package lsp-mode
- :commands (lsp lsp-deferred)
- :custom (lsp-keymap-prefix "C-c l")
- :hook ((lsp-mode . lsp-enable-which-key-integration)))
-
- (use-package lsp-ivy)
-
- (use-package lsp-ui
- :commands lsp-ui-mode
- :custom (lsp-ui-doc-position 'bottom))
- (use-package lsp-ui-flycheck
- :after lsp-ui
- :straight (:type built-in))
-#+end_src
-*** Company
-Company-box adds icons.
-#+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))
-#+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
#+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.
warp_pointer = 1
modkey = Mod4
border_width = 4
- tile_gap = 10
autorun = ws[1]:/home/armaa/Code/scripts/autostart
#+end_src
-*** Apprearance
-Gruvbox colors
+*** Appearance
#+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
+ 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
program[k] = xdotool keyup k key --clearmodifiers Up
program[l] = xdotool keyup l key --clearmodifiers Right
- bind[h] = Mod1 + Tab + h
- bind[j] = Mod1 + Tab + j
- bind[k] = Mod1 + Tab + k
- bind[l] = Mod1 + Tab + l
+ bind[h] = MOD + Control + h
+ bind[j] = MOD + Control + j
+ bind[k] = MOD + Control + k
+ bind[l] = MOD + Control + l
#+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[emacs] = emacsclient -c
program[emacs-anywhere] = emacsclient --eval "(emacs-everywhere)"
program[firefox] = firefox
program[thunderbird] = thunderbird
program[slack] = slack
- bind[aerc] = MOD+Control+s
- bind[weechat] = MOD+Control+d
+ bind[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[emacs] = MOD+Control+Return
- bind[emacs-anywhere] = MOD+Control+f
- bind[firefox] = MOD+Control+u
- bind[thunderbird] = MOD+Control+i
- bind[slack] = MOD+Control+o
#+end_src
** Zsh
*** Settings
*** Plugins
I manage plugins using my own plugin manager, ZPE. https://git.sr.ht/~armaan/zpe
**** ZPE
-#+begin_src plain :tangle ~/.config/zpe/repositories
+#+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
#+begin_src shell :tangle ~/.config/zsh/zshrc
chpwd() {
emulate -L zsh
- exa -lh --icons --git --group-directories-first
+ exa -h --icons --git --group-directories-first
}
#+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() {
#+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 -p 23 -t root@armaanb.net tmux attach-session -t catgirl'
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'
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
#+end_src
**** Networking
#+begin_src shell :tangle ~/.config/zsh/zshrc
*** Exports
#+begin_src shell :tangle ~/.config/zsh/zshrc
export EDITOR="emacsclient -c"
- export VISUAL="$VISUAL"
+ export VISUAL="$EDITOR"
export TERM=xterm-256color # for compatability
export GPG_TTY="$(tty)"
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"
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'
+ black: '#000000'
+ red: '#ff8059'
+ green: '#00fc50'
+ yellow: '#eecc00'
+ blue: '#29aeff'
+ magenta: '#feacd0'
+ cyan: '#00d3d0'
+ white: '#eeeeee'
- # Bright colors
+ # 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
#+end_src
** Inputrc
For any GNU Readline programs
-#+begin_src plain :tangle ~/.inputrc
+#+begin_src conf :tangle ~/.inputrc
set editing-mode vi
#+end_src
** Git
#+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]
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
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 = 3
+ color = "#ffffff"
[shortcuts]
close = mod4+c
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 % );
+ }
+
+ window {
+ border: 3;
+ }
+#+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