X-Git-Url: https://git.shemshak.org/gitweb.cgi/~bandali/configs/blobdiff_plain/eb186a5ac60fdb718daed6d4dacdd848086fd134..850dd012bd83fb5d89e31695c4e66df4f1684e87:/init.org?ds=sidebyside diff --git a/init.org b/init.org index 5deade4..b47a513 100644 --- a/init.org +++ b/init.org @@ -105,20 +105,19 @@ file. ** Naming conventions -The conventions below were inspired by [[https://github.com/hlissner/doom-emacs][Doom]]'s conventions, found -[[https://github.com/hlissner/doom-emacs/blob/5dacbb7cb1c6ac246a9ccd15e6c4290def67757c/core/core.el#L3-L17][here]]. Naturally, I use my initials, =ab=, instead of =doom=. +The conventions below were inspired by [[https://github.com/hlissner/doom-emacs][Doom]]'s, found [[https://github.com/hlissner/doom-emacs/blob/5dacbb7cb1c6ac246a9ccd15e6c4290def67757c/core/core.el#L3-L17][here]]. #+begin_src emacs-lisp :comments none ;; Naming conventions: ;; -;; ab-... public variables or non-interactive functions -;; ab--... private anything (non-interactive), not safe for direct use -;; ab/... an interactive function; safe for M-x or keybinding -;; ab:... an evil operator, motion, or command -;; ab|... a hook function -;; ab*... an advising function -;; ab@... a hydra command -;; ...! a macro +;; amin-... public variables or non-interactive functions +;; amin--... private anything (non-interactive), not safe for direct use +;; amin/... an interactive function; safe for M-x or keybinding +;; amin:... an evil operator, motion, or command +;; amin|... a hook function +;; amin*... an advising function +;; amin@... a hydra command +;; ...! a macro #+end_src * Initial setup @@ -137,10 +136,10 @@ let's see how long Emacs takes to start up, before even loading =init.el=, i.e. =user-init-file=: #+begin_src emacs-lisp -(defvar ab--before-user-init-time (current-time) +(defvar amin--before-user-init-time (current-time) "Value of `current-time' when Emacs begins loading `user-init-file'.") (message "Loading Emacs...done (%.3fs)" - (float-time (time-subtract ab--before-user-init-time + (float-time (time-subtract amin--before-user-init-time before-init-time))) #+end_src @@ -150,9 +149,9 @@ frequency. Clearing the ~file-name-handler-alist~ seems to help reduce startup time as well. #+begin_src emacs-lisp -(defvar ab--gc-cons-threshold gc-cons-threshold) -(defvar ab--gc-cons-percentage gc-cons-percentage) -(defvar ab--file-name-handler-alist file-name-handler-alist) +(defvar amin--gc-cons-threshold gc-cons-threshold) +(defvar amin--gc-cons-percentage gc-cons-percentage) +(defvar amin--file-name-handler-alist file-name-handler-alist) (setq gc-cons-threshold (* 400 1024 1024) ; 400 MiB gc-cons-percentage 0.6 file-name-handler-alist nil @@ -167,9 +166,9 @@ done initializing. (add-hook 'after-init-hook (lambda () - (setq gc-cons-threshold ab--gc-cons-threshold - gc-cons-percentage ab--gc-cons-percentage - file-name-handler-alist ab--file-name-handler-alist))) + (setq gc-cons-threshold amin--gc-cons-threshold + gc-cons-percentage amin--gc-cons-percentage + file-name-handler-alist amin--file-name-handler-alist))) #+end_src Increase the number of lines kept in message logs (the =*Messages*= @@ -397,7 +396,7 @@ Font stack with better unicode support, around =Ubuntu Mono= and ** Useful utilities #+begin_src emacs-lisp -(defun ab-enlist (exp) +(defun amin-enlist (exp) "Return EXP wrapped in a list, or as-is if already a list." (if (listp exp) exp (list exp))) @@ -407,7 +406,7 @@ Font stack with better unicode support, around =Ubuntu Mono= and compilation." (declare (indent defun) (debug t)) (list (if (or (not (bound-and-true-p byte-compile-current-file)) - (dolist (next (ab-enlist features)) + (dolist (next (amin-enlist features)) (if (symbolp next) (require next nil :no-error) (load next :no-message :no-error)))) @@ -442,7 +441,9 @@ Enable displaying time and battery in the mode-line, since I'm not using the Xfce panel anymore. Also, I don't need to see the load average on a regular basis, so disable that. -#+begin_src emacs-lisp +Note: using =i3status= on sway at the moment, so disabling this. + +#+begin_src emacs-lisp :tangle no (use-package time :ensure nil :init @@ -565,6 +566,25 @@ variable. version-control t) #+end_src +*** Auto revert + +Enable automatic reloading of changed buffers and files. + +#+begin_src emacs-lisp +(global-auto-revert-mode 1) +(setq auto-revert-verbose nil + global-auto-revert-non-file-buffers t) +#+end_src + +*** Always use space for indentation + +#+begin_src emacs-lisp +(setq-default + indent-tabs-mode nil + require-final-newline t + tab-width 4) +#+end_src + ** Packages The packages in this section are absolutely essential to my everyday @@ -604,11 +624,36 @@ Roll your own modal mode (push '((nil . "ryo:.*:") . (nil . "")) which-key-replacement-alist) (ryo-modal-keys ("," ryo-modal-repeat) - ("q" ryo-modal-mode) ("b" backward-char) ("n" next-line) ("p" previous-line) - ("f" forward-char)) + ("f" forward-char) + ("/" undo) + ("i" ryo-modal-mode) + ("l" recenter-top-bottom) + ("v" scroll-up-command) + ("V" scroll-down-command) + ("x" delete-forward-char) + ("SPC" (("b" (("b" ibuffer-list-buffers) + ("k" kill-this-buffer) + ("o" other-window) + ("s" save-buffer))) + ("B" (("A" borg-activate) + ("a" borg-assimilate) + ("b" borg-build) + ("c" borg-clone) + ("r" borg-remove))) + ("h" (("c" describe-char) + ("f" describe-function) + ("F" describe-face) + ("i" info) + ("k" describe-key) + ("l" view-lossage) + ("v" describe-variable))) + ("q" (("q" save-buffers-kill-terminal))))) + ("d" (("w" kill-word) + ("b" backward-kill-word))) + ("c w" kill-word :exit t)) (ryo-modal-keys ;; First argyment to ryo-modal-keys may be a list of keywords. @@ -639,17 +684,13 @@ system. In short, my favourite way of life. #+begin_src emacs-lisp -(setq org-src-tab-acts-natively t - org-src-preserve-indentation nil - org-edit-src-content-indentation 0 - org-html-divs '((preamble "header" "preamble") - (content "main" "content") - (postamble "footer" "postamble")) - org-html-doctype "html5" - org-html-html5-fancy t - org-html-postamble nil) -(add-hook 'org-mode-hook 'org-indent-mode) -(use-package htmlize) +(use-package org + :ryo ("SPC b t" org-babel-tangle) + :config + (setq org-src-tab-acts-natively t + org-src-preserve-indentation nil + org-edit-src-content-indentation 0) + :hook (org-mode . org-indent-mode)) (use-package org-notmuch :after (:any org notmuch)) #+end_src @@ -708,7 +749,9 @@ There's no way I could top that, so I won't attempt to. #+begin_src emacs-lisp (use-package swiper - :ryo ("/" swiper) + :ryo + ("SPC /" swiper) + ("s" swiper) :bind (([remap isearch-forward] . swiper) ([remap isearch-backward] . swiper))) #+end_src @@ -808,9 +851,15 @@ TODO: break this giant source block down into individual org sections. (list (regexp-quote (system-name)) nil nil))) (use-package undo-tree + :ryo + ("?" undo-tree-undo) + ("_" undo-tree-redo) + :bind (("C-?" . undo-tree-undo) + ("M-_" . undo-tree-redo)) :config (global-undo-tree-mode) - (setq undo-tree-mode-lighter "")) + (setq undo-tree-mode-lighter "" + undo-tree-auto-save-history t)) #+end_src * Editing @@ -832,16 +881,6 @@ TODO: break this giant source block down into individual org sections. (global-company-mode t)) #+end_src -** Customizations - -#+begin_src emacs-lisp -(ryo-modal-key - "SPC" '(("b b" ibuffer-list-buffers) - ("b k" kill-this-buffer) - ("b s" save-buffer) - ("q q" save-buffers-kill-terminal))) -#+end_src - * Syntax and spell checking #+begin_src emacs-lisp (use-package flycheck @@ -1099,13 +1138,55 @@ Emacs package that displays available keybindings in popup (load-theme 'eink t) #+end_src +** [[https://github.com/bbatsov/crux][crux]] + +#+begin_src emacs-lisp +(use-package crux + :bind (("C-c d" . crux-duplicate-current-line-or-region) + ("C-c M-d" . crux-duplicate-and-comment-current-line-or-region)) + :ryo + ("o" crux-smart-open-line :exit t) + ("O" crux-smart-open-line-above :exit t) + ("SPC b K" crux-kill-other-buffers) + ("d d" crux-kill-whole-line) + ("c c" crux-kill-whole-line :then '(crux-smart-open-line-above) :exit t) + ("SPC f" (("c" crux-copy-file-preserve-attributes) + ("D" crux-delete-file-and-buffer) + ("R" crux-rename-file-and-buffer)))) +#+end_src + +** [[https://github.com/alezost/mwim.el][mwim]] + +#+begin_src emacs-lisp +(use-package mwim + :bind (("C-a" . mwim-beginning-of-code-or-line) + ("C-e" . mwim-end-of-code-or-line) + ("" . mwim-beginning-of-line-or-code) + ("" . mwim-end-of-line-or-code)) + :ryo + ("a" mwim-beginning-of-code-or-line) + ("e" mwim-end-of-code-or-line)) +#+end_src + +** [[https://www.emacswiki.org/emacs/KeyChord][key-chord]] + +#+begin_src emacs-lisp +(use-package key-chord + :demand t + :config + (key-chord-mode 1) + (key-chord-define-global "jk" 'ryo-modal-mode) + (setq key-chord-one-key-delay 0 ; i don't need one-key chords for now + key-chord-two-keys-delay 0.005)) +#+end_src + * Email ** [[https://notmuchmail.org][notmuch]] See [[notmuch:id:87muuqsvci.fsf@fencepost.gnu.org][bug follow-up]]. #+begin_src emacs-lisp -(defun ab/notmuch () +(defun amin/notmuch () "Delete other windows, then launch `notmuch'." (interactive) (require 'notmuch) @@ -1114,18 +1195,19 @@ See [[notmuch:id:87muuqsvci.fsf@fencepost.gnu.org][bug follow-up]]. ;; (map! ;; :leader -;; :desc "notmuch" :n "m" #'ab/notmuch +;; :desc "notmuch" :n "m" #'amin/notmuch ;; (:desc "search" :prefix "/" ;; :desc "notmuch" :n "m" #'counsel-notmuch)) #+end_src #+begin_src emacs-lisp -(defvar ab-maildir "~/mail") +(defvar amin-maildir "~/mail") (use-package sendmail ;; :ensure nil :config (setq sendmail-program "/usr/bin/msmtp" + ; message-sendmail-extra-arguments '("-v" "-d") mail-specify-envelope-from t mail-envelope-from 'header)) @@ -1159,7 +1241,7 @@ See [[notmuch:id:87muuqsvci.fsf@fencepost.gnu.org][bug follow-up]]. mml-secure-openpgp-sign-with-sender t)) (use-package notmuch - :ryo ("SPC m" ab/notmuch) + :ryo ("SPC m" amin/notmuch) :config (setq notmuch-hello-sections '(notmuch-hello-insert-header @@ -1173,8 +1255,9 @@ See [[notmuch:id:87muuqsvci.fsf@fencepost.gnu.org][bug follow-up]]. notmuch-hello-thousands-separator "," notmuch-fcc-dirs '(("amin@aminb.org" . "amin/Sent") + ("amin@gnu.org" . "gnu/Sent") ("abandali@uwaterloo.ca" . "\"uwaterloo/Sent Items\"") - ("amin.bandali@uwaterloo.ca" . "\"uwaterloo/Sent Items\"") + ("mab@gnu.org" . "gnu/Sent") ("aminb@gnu.org" . "gnu/Sent") (".*" . "sent")) notmuch-search-result-format @@ -1193,18 +1276,22 @@ See [[notmuch:id:87muuqsvci.fsf@fencepost.gnu.org][bug follow-up]]. :bind (:map notmuch-hello-mode-map ("g" . notmuch-poll-and-refresh-this-buffer) - ("i" . (lambda () - "Search for `inbox' tagged messages" - (interactive) - (notmuch-hello-search "tag:inbox"))) ("u" . (lambda () "Search for `unread' tagged messages" (interactive) (notmuch-hello-search "tag:unread"))) + ("i" . (lambda () + "Search for `inbox' tagged messages" + (interactive) + (notmuch-hello-search "tag:inbox"))) ("l" . (lambda () - "Search for `latest tagged messages" + "Search for `latest' tagged messages" (interactive) (notmuch-hello-search "tag:latest"))) + ("e" . (lambda () + "Search for `encrypted' tagged messages" + (interactive) + (notmuch-hello-search "tag:encrypted"))) ("M" . (lambda () "Compose new mail and prompt for sender" (interactive) @@ -1254,7 +1341,7 @@ See [[notmuch:id:87muuqsvci.fsf@fencepost.gnu.org][bug follow-up]]. ;; (notmuch-tree-mode . emacs)))) (after! recentf - (add-to-list 'recentf-exclude (expand-file-name ab-maildir))) + (add-to-list 'recentf-exclude (expand-file-name amin-maildir))) #+end_src ** supercite @@ -1326,7 +1413,7 @@ Display how long it took to load the init file. #+begin_src emacs-lisp (message "Loading %s...done (%.3fs)" user-init-file (float-time (time-subtract (current-time) - ab--before-user-init-time))) + amin--before-user-init-time))) #+end_src * Footer