X-Git-Url: https://git.armaanb.net/?a=blobdiff_plain;f=config.org;h=d3ce9550b490d590b8a4f28e1f487383fcc9ece4;hb=45d7c3f462f9b1495f1b994d8ae3b29a9f048b16;hp=572c1ecc782a261d07b79a7cf54bfa270a85d94c;hpb=148ab7abe6765881d1664baef64db1d7c93b5b9d;p=config.org.git diff --git a/config.org b/config.org index 572c1ec..d3ce955 100644 --- a/config.org +++ b/config.org @@ -6,16 +6,13 @@ * 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! ** Compatability -I am currently using Emacs 28 with native compilation, so some settings and packages may not be available for older versions of Emacs. This is a purely personal configuration, so while I can guarantee that it works on my setup, it might not work for you. +I am currently using Emacs 27.2 on Linux, so some settings and packages may not be available for older versions of Emacs. This is a purely personal configuration, so while I can guarantee that it works on my setup, it might not work for you. ** Choices I chose to create a powerful, yet not overly heavy Emacs configuration. Things like a fancy modeline, icons, or LSP mode do not increase my productivity, and create visual clutter, and thus have been excluded. Another important choice has been to integrate Emacs into a large part of my computing environment (see [[*Emacs OS]]). I use email, IRC, RSS, et cetera, all through Emacs which simplifies my workflow and creates an amazingly integrated environment. Lastly, I use Evil mode. Modal keybindings are simpler 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 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 near their contributions. * Package management @@ -45,12 +42,14 @@ straight.el is really nice for managing package, and it integrates nicely with u ** Theme Use the Modus Operandi theme by Protesilaos Stavrou. Its the best theme for Emacs by far, because how clear and readable it is. It is highly customizable, but I just set a few options here. #+begin_src emacs-lisp - (setq modus-themes-slanted-constructs t - modus-themes-bold-constructs t - modus-themes-mode-line '3d - modus-themes-scale-headings t - modus-themes-diffs 'desaturated) - (load-theme 'modus-vivendi t) + (use-package modus-themes + :custom + (modus-themes-slanted-constructs t) + (modus-themes-bold-constructs t) + (modus-themes-mode-line '3d) + (modus-themes-scale-headings t) + (modus-themes-diffs 'desaturated) + :config (load-theme 'modus-vivendi t)) #+end_src ** Typography *** Font @@ -114,14 +113,16 @@ Show current column and file size. (use-package minions :config (minions-mode)) #+end_src -** Ruler -Show a ruler at a certain number of chars depending on mode. +** Whitespace mode +Highlight whitespace and other bad text practices. #+begin_src emacs-lisp - (setq display-fill-column-indicator-column 80) - (global-display-fill-column-indicator-mode) + (use-package whitespace + :custom (whitespace-style '(face lines-tail))) + (dolist (hook '(prog-mode-hook)) + (add-hook hook (lambda () (whitespace-mode 1)))) #+end_src ** Highlight todo items in comments -#+begin_src emacs-lisp ++begin_src emacs-lisp (use-package hl-todo :straight (hl-todo :type git :host github :repo "tarsius/hl-todo") :config (global-hl-todo-mode 1)) @@ -137,7 +138,13 @@ Soft wrap words and do operations by visual lines in some modes. org-mode-hook markdown-mode-hook mu4e-view-mode-hook)) - (add-hook hook (lambda () (visual-line-mode -1)))) + (add-hook hook (lambda () (visual-line-mode 1)))) +#+end_src +** Auto fill mode +#+begin_src emacs-lisp + (dolist (hook '(scdoc-mode-hook + mu4e-compose-mode-hook)) + (add-hook hook (lambda () (auto-fill-mode 1)))) #+end_src ** Display number of matches in search #+begin_src emacs-lisp @@ -147,6 +154,7 @@ Soft wrap words and do operations by visual lines in some modes. ([remap query-replace] . anzu-query-replace) ([remap query-replace-regexp] . anzu-query-replace-regexp)) #+end_src +*** TODO This config doesn't work right ** Visual bell Invert modeline color instead of audible bell or the standard visual bell. #+begin_src emacs-lisp @@ -193,7 +201,11 @@ Makes commenting super easy ** Undo redo Fix the oopsies! #+begin_src emacs-lisp - (evil-set-undo-system 'undo-redo) + (use-package undo-fu + :config (evil-set-undo-system 'undo-fu)) + + (use-package undo-fu-session + :config (global-undo-fu-session-mode)) #+end_src ** Number incrementing Add back C-a/C-x bindings. @@ -252,14 +264,12 @@ Define templates for lots of common structure elements. Mostly just used within ("ash" . "src shell :tangle ~/.config/ash/ashrc") ("pi" . "src conf :tangle ~/.config/picom/picom.conf") ("git" . "src conf :tangle ~/.gitconfig") - ("du" . "src conf :tangle ~/.config/dunst/dunstrc") ("za" . "src conf :tangle ~/.config/zathura/zathurarc") - ("ff1" . "src css :tangle ~/.mozilla/firefox/armaan-release/chrome/userChrome.css") - ("ff2" . "src css :tangle ~/.mozilla/firefox/armaan-release/chrome/userContent.css") ("xr" . "src conf :tangle ~/.Xresources") ("tm" . "src conf :tangle ~/.tmux.conf") ("gp" . "src conf :tangle ~/.gnupg/gpg.conf") - ("ag" . "src conf :tangle ~/.gnupg/gpg-agent.conf"))) + ("ag" . "src conf :tangle ~/.gnupg/gpg-agent.conf") + ("xm" . "src conf :tangle ~/.config/xmodmap"))) (add-to-list 'org-structure-template-alist addition))) #+end_src * Autocompletion @@ -267,6 +277,10 @@ Define templates for lots of common structure elements. Mostly just used within A well balanced completion framework. #+begin_src emacs-lisp (use-package ivy + :bind (:map ivy-minibuffer-map + ("TAB" . ivy-alt-done)) + (:map ivy-switch-buffer-map + ("M-d" . ivy-switch-buffer-kill)) :config (ivy-mode)) #+end_src ** Ivy-rich @@ -279,6 +293,7 @@ A well balanced completion framework. Ivy everywhere. #+begin_src emacs-lisp (use-package counsel + :bind ("C-M-j" . 'counsel-switch-buffer) :config (counsel-mode)) #+end_src ** Remember frequent commands @@ -300,10 +315,12 @@ Use elfeed for reading RSS. I have another file with all the feeds in it that I' #+end_src ** Email Use mu4e for reading emails. - -I use `offlineimap` to sync my maildirs. It is slower than mbsync, but is fast enough for me, especially when ran with the =-q= option. - Contexts are a not very well known feature of mu4e that makes it super easy to manage multiple accounts. Much better than some of the hacky methods and external packages that I've seen. +*** TODO Switch to mbsync +=offlineimap= really crappy (slow and requires python2), and I need to replace it with =mbsync=. +*** TODO Include mbsync/offlineimap config +*** TODO Split up and document this config a bit +*** Setup #+begin_src emacs-lisp (use-package smtpmail :straight (:type built-in)) @@ -324,7 +341,7 @@ Contexts are a not very well known feature of mu4e that makes it super easy to m mu4e-confirm-quit nil mu4e-view-use-gnus t mail-user-agent 'mu4e-user-agent - mail-context-policy 'pick-first + mu4e-context-policy 'pick-first mu4e-contexts `( ,(make-mu4e-context :name "school" @@ -362,11 +379,10 @@ Contexts are a not very well known feature of mu4e that makes it super easy to m :query "maildir:\"/personal/INBOX\" or maildir:\"/school/INBOX\"" :key ?b)) :hook ((mu4e-compose-mode . flyspell-mode) - (mu4e-compose-mode . auto-fill-mode) (message-send-hook . (lambda () (unless (yes-or-no-p "Ya sure 'bout that?") (signal 'quit nil)))))) #+end_src -Discourage Gnus from displaying HTML emails +*** Discourage Gnus from displaying HTML emails #+begin_src emacs-lisp (with-eval-after-load "mm-decode" (add-to-list 'mm-discouraged-alternatives "text/html") @@ -376,7 +392,7 @@ Discourage Gnus from displaying HTML emails Set EWW as default browser except for multimedia which should open in MPV. #+begin_src emacs-lisp (defun browse-url-mpv (url &optional new-window) - "Open URL in MPV." + "Ask MPV to load URL." (interactive) (start-process "mpv" "*mpv*" "mpv" url)) @@ -469,7 +485,8 @@ Circe is a really nice IRC client that claims to be above RCIRC and below ERC in (interactive) (if (get-buffer "irc.armaanb.net:6696") (switch-to-buffer "irc.armaanb.net:6696") - (progn (circe "libera") + (progn (switch-to-buffer "*scratch*") + (circe "libera") (circe "oftc") (circe "tilde")))) @@ -543,8 +560,8 @@ I never use this, but apparently its very powerful. Another item on my todo list :bind-keymap ("C-c p" . projectile-command-map) :init - (when (file-directory-p "~/Code") - (setq projectile-project-search-path '("~/Code"))) + (when (file-directory-p "~/src") + (setq projectile-project-search-path '("~/src"))) (setq projectile-switch-project-action #'projectile-dired)) (use-package counsel-projectile @@ -578,7 +595,6 @@ The best file manager! #+end_src ** Git *** Magit -**** TODO Write a command that commits hunk, skipping staging step. A very good Git interface. #+begin_src emacs-lisp (use-package magit) @@ -600,7 +616,9 @@ Automatically indent after every change. I'm not sure how much I like this. It s ** Spell checking Spell check in text mode, and in prog-mode comments. #+begin_src emacs-lisp - (dolist (hook '(text-mode-hook)) + (dolist (hook '(text-mode-hook + markdown-mode-hook + scdoc-mode-hook)) (add-hook hook (lambda () (flyspell-mode)))) (dolist (hook '(change-log-mode-hook log-edit-mode-hook)) (add-hook hook (lambda () (flyspell-mode -1)))) @@ -659,6 +677,13 @@ Abbreviate things! I just use this for things like my email address and copyrigh #+begin_src emacs-lisp (use-package markdown-mode) #+end_src +** scdoc mode +Get it for yourself at https://git.armaanb.net/scdoc +#+begin_src emacs-lisp + (add-to-list 'load-path "~/src/scdoc-mode") + (autoload 'scdoc-mode "scdoc-mode" "Major mode for editing scdoc files" t) + (add-to-list 'auto-mode-alist '("\\.scd\\'" . scdoc-mode)) +#+end_src * Keybindings ** Switch windows #+begin_src emacs-lisp @@ -722,6 +747,8 @@ No more clogging up init.el. :straight (0x0 :type git :repo "https://git.sr.ht/~zge/nullpointer-emacs") :custom (0x0-default-service 'envs)) #+end_src +*** TODO Replace this with uploading to my own server +Similar to the ufile alias in my ashrc ** Automatically clean buffers Automatically close unused buffers (except those of Circe) at midnight. #+begin_src emacs-lisp @@ -738,7 +765,7 @@ Spectrwm is a really awesome window manager! Would highly recommend. workspace_limit = 5 warp_pointer = 1 modkey = Mod4 - autorun = ws[1]:/home/armaa/Code/scripts/autostart + autorun = ws[1]:/home/armaa/src/bin/autostart #+end_src *** Bar Disable the bar by default (it can still be brought back up with MOD+b). The font just needs to be set to something that you have installed, otherwise spectrwm won't launch. @@ -751,32 +778,26 @@ I'm not a huge fan of how spectrwm handles keybindings, probably my biggest grip **** WM actions #+begin_src conf :tangle ~/.spectrwm.conf program[term] = st -e tmux - program[screenshot_all] = flameshot gui - program[notif] = /home/armaa/Code/scripts/setter status - program[pass] = /home/armaa/Code/scripts/passmenu + program[notif] = /home/armaa/src/bin/setter status + program[pass] = /home/armaa/src/bin/passmenu + program[lock] = slock bind[notif] = MOD+n bind[pass] = MOD+Shift+p #+end_src **** Media keys #+begin_src conf :tangle ~/.spectrwm.conf - program[paup] = /home/armaa/Code/scripts/setter audio +5 - program[padown] = /home/armaa/Code/scripts/setter audio -5 - program[pamute] = /home/armaa/Code/scripts/setter audio - program[brigup] = /home/armaa/Code/scripts/setter brightness +10% - program[brigdown] = /home/armaa/Code/scripts/setter brightness 10%- - program[next] = playerctl next - program[prev] = playerctl previous - program[pause] = playerctl play-pause + program[paup] = /home/armaa/src/bin/setter audio +5 + program[padown] = /home/armaa/src/bin/setter audio -5 + program[pamute] = /home/armaa/src/bin/setter audio + program[brigup] = /home/armaa/src/bin/setter brightness +10% + program[brigdown] = /home/armaa/src/bin/setter brightness 10%- bind[padown] = XF86AudioLowerVolume bind[paup] = XF86AudioRaiseVolume bind[pamute] = XF86AudioMute bind[brigdown] = XF86MonBrightnessDown bind[brigup] = XF86MonBrightnessUp - bind[pause] = XF86AudioPlay - bind[next] = XF86AudioNext - bind[prev] = XF86AudioPrev #+end_src **** HJKL #+begin_src conf :tangle ~/.spectrwm.conf @@ -792,12 +813,11 @@ I'm not a huge fan of how spectrwm handles keybindings, probably my biggest grip #+end_src **** Programs #+begin_src conf :tangle ~/.spectrwm.conf - program[email] = emacsclient -ce "(mu4e)" + program[email] = emacsclient -ce '(progn (switch-to-buffer "*scratch*") (mu4e))' program[irc] = emacsclient -ce '(acheam-irc)' program[rss] = emacsclient -ce '(elfeed)' program[calendar] = emacsclient -ce '(acheam-calendar)' program[calc] = emacsclient -ce '(progn (calc) (windmove-up) (delete-window))' - program[firefox] = firefox program[emacs] = emacsclient -c bind[email] = MOD+Control+1 @@ -805,7 +825,6 @@ I'm not a huge fan of how spectrwm handles keybindings, probably my biggest grip bind[rss] = MOD+Control+3 bind[calendar] = MOD+Control+4 bind[calc] = MOD+Control+5 - bind[firefox] = MOD+Control+0 bind[emacs] = MOD+Control+Return #+end_src *** Quirks @@ -813,6 +832,7 @@ Float some specific programs by default. #+begin_src conf :tangle ~/.spectrwm.conf quirk[Castle Menu] = FLOAT quirk[momen] = FLOAT + quirk[pinentry-fltk] = FLOAT #+end_src ** Ash *** Options @@ -862,28 +882,40 @@ Use the vi editing mode. I still haven't found a good way to show visual feedbac export GPG_TTY="$(tty)" export MANPAGER='nvim +Man!' export PAGER='less' - export GTK_USE_PORTAL=1 + export CDPATH=:~ 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="/home/armaa/src/bin:$PATH" # prioritize my bin + export PATH="//home/armaa/src/bin/bin:$PATH" # prioritize my bins 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 TZ="America/New_York" - 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" + export KISS_PATH="" + export KISS_PATH="$KISS_PATH:$HOME/repos/personal" + export KISS_PATH="$KISS_PATH:$HOME/repos/bin/bin" + export KISS_PATH="$KISS_PATH:$HOME/repos/main/core" + export KISS_PATH="$KISS_PATH:$HOME/repos/main/extra" + export KISS_PATH="$KISS_PATH:$HOME/repos/main/xorg" + export KISS_PATH="$KISS_PATH:$HOME/repos/main/xorg" + export KISS_PATH="$KISS_PATH:$HOME/repos/community/community" + export KISS_PATH="$KISS_PATH:$HOME/repos/mid/ports" + + export CFLAGS="-O3 -pipe -march=native" + export CXXFLAGS="$CFLAGS" + export MAKEFLAGS="-j$(nproc)" export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig" + + export XDG_DESKTOP_DIR="/dev/null" + export XDG_DOCUMENTS_DIR="$HOME/documents" + export XDG_DOWNLOAD_DIR="$HOME/downloads" + export XDG_MUSIC_DIR="$HOME/music" + export XDG_PICTURES_DIR="$HOME/pictures" + export XDG_VIDEOS_DIR="$HOME/videos" #+end_src *** Aliases **** SSH @@ -900,7 +932,7 @@ Use the vi editing mode. I still haven't found a good way to show visual feedbac #+end_src **** File management #+begin_src shell :tangle ~/.config/ash/ashrc - alias ls='ls -lh --group-directories-first' + alias ls='LC_COLLATE=C ls -lh --group-directories-first' alias la='ls -A' alias df='df -h / /boot' alias du='du -h' @@ -1034,63 +1066,6 @@ This file is used for any GNU Readline programs. I use Emacs editing mode mostly gpgsign = true verbose = true #+end_src -** Dunst -Lightweight notification daemon. Eventually I'd like to replace this with something dbus-less. -*** General -#+begin_src conf :tangle ~/.config/dunst/dunstrc - [global] - font = "JetBrains Mono Medium Nerd Font 11" - allow_markup = yes - format = "%s\n%b" - sort = no - indicate_hidden = yes - alignment = center - bounce_freq = 0 - show_age_threshold = 60 - word_wrap = yes - ignore_newline = no - geometry = "400x5-10+10" - transparency = 0 - idle_threshold = 120 - monitor = 0 - sticky_history = yes - line_height = 0 - separator_height = 1 - padding = 8 - horizontal_padding = 8 - max_icon_size = 32 - separator_color = "#ffffff" - startup_notification = false -#+end_src -*** Modes -#+begin_src conf :tangle ~/.config/dunst/dunstrc - [frame] - width = 1 - color = "#ffffff" - - [shortcuts] - close = mod4+c - close_all = mod4+shift+c - history = mod4+ctrl+c - - [urgency_low] - background = "#222222" - foreground = "#ffffff" - highlight = "#ffffff" - timeout = 5 - - [urgency_normal] - background = "#222222" - foreground = "#ffffff" - highlight = "#ffffff" - timeout = 15 - - [urgency_critical] - background = "#222222" - foreground = "#a60000" - highlight = "#ffffff" - timeout = 0 -#+end_src ** Zathura The best document reader! *** Options @@ -1115,57 +1090,6 @@ The best document reader! set recolor-darkcolor "#ffffff" # fg set recolor "true" #+end_src -** Firefox -Just some basic Firefox CSS. Will probably have to rewrite for the Proton redesign. -*** 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. No program I use checks for anything beyond foreground and background, but hey, it can't hurt to have all the colors in there. #+begin_src conf :tangle ~/.Xresources @@ -1224,8 +1148,34 @@ I use tmux in order to keep my st build light. Still learning how it works. #+end_src *** Agent #+begin_src conf :tangle ~/.gnupg/gpg-agent.conf - pinentry-program /sbin/pinentry-gnome3 + pinentry-program /sbin/pinentry-fltk max-cache-ttl 600 default-cache-ttl 600 allow-emacs-pinentry #+end_src +** Xmodmap +#+begin_src conf :tangle ~/.config/xmodmap + ! + ! Unmap left super + ! + clear mod4 + + ! + ! Turn right alt into super + ! + remove mod1 = Alt_R + add mod4 = Alt_R +#+end_src +#+begin_src conf (if (eq system-name "frost.armaanb.net") ":tangle ~/.config/xmodmap") + ! + ! Swap caps and control + ! + remove Lock = Caps_Lock + remove Control = Control_L + remove Lock = Control_L + remove Control = Caps_Lock + keysym Control_L = Caps_Lock + keysym Caps_Lock = Control_L + add Lock = Caps_Lock + add Control = Control_L +#+end_src