X-Git-Url: https://git.shemshak.org/gitweb.cgi/~bandali/configs/blobdiff_plain/5a343a2103c211c95ed918d5df176b7bd6ced0be..6e9d8a2b6d4b998de8aae4a2b694af3d1dff97db:/init.org?ds=sidebyside diff --git a/init.org b/init.org index 5b0aac6..76b7b0c 100644 --- a/init.org +++ b/init.org @@ -355,7 +355,7 @@ in my shell. (mapc #'disable-theme custom-enabled-themes)) #+end_src -** Server +** COMMENT Server Start server if not already running. Alternatively, can be done by issuing =emacs --daemon= in the terminal, which can be automated with @@ -367,10 +367,11 @@ See [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Emacs-Server.htm #+begin_src emacs-lisp (use-package server + :defer 1 :config (or (server-running-p) (server-mode))) #+end_src -** Unicode support +** COMMENT Unicode support Font stack with better unicode support, around =Ubuntu Mono= and =Hack=. @@ -700,12 +701,14 @@ In short, my favourite way of life. #+begin_src emacs-lisp (use-package org + :defer 3 :config (setq org-src-tab-acts-natively t org-src-preserve-indentation nil org-edit-src-content-indentation 0 org-email-link-description-format "Email %c: %s" ; %.30s org-log-done 'time) + (add-to-list 'org-structure-template-alist '("L" . "src emacs-lisp") t) :bind (:map org-mode-map ("M-L" . org-insert-last-stored-link)) :hook ((org-mode . org-indent-mode) (org-mode . auto-fill-mode) @@ -714,6 +717,7 @@ In short, my favourite way of life. (org-latex-packages-alist '(("" "listings") ("" "color")))) (use-package ox-latex + :after ox :config (setq org-latex-listings 'listings ;; org-latex-prefer-user-labels t @@ -729,9 +733,11 @@ In short, my favourite way of life. ("\\subparagraph{%s}" . "\\subparagraph*{%s}")) t)) -(use-package ox-beamer) +(use-package ox-beamer + :after ox) (use-package orgalist + :after message :hook (message-mode . orgalist-mode)) #+end_src @@ -793,7 +799,7 @@ Not just how I do git, but /the/ way to do git. #+begin_src emacs-lisp (use-package magit - :defer t + :defer 2 :bind (("s-g" . magit-status) :prefix-map amin--magit-prefix-map @@ -867,7 +873,6 @@ There's no way I could top that, so I won't attempt to. ("s-r" . counsel-recentf) ("C-c x" . counsel-M-x) ("C-c f ." . counsel-find-file) - ("C-c f r" . counsel-recentf) :map minibuffer-local-map ("C-r" . counsel-minibuffer-history)) :config @@ -879,6 +884,7 @@ There's no way I could top that, so I won't attempt to. #+begin_src emacs-lisp (use-package eshell + :defer t :commands eshell :config (eval-when-compile (defvar eshell-prompt-regexp)) @@ -906,6 +912,7 @@ There's no way I could top that, so I won't attempt to. #+begin_src emacs-lisp (use-package ibuffer + :defer t :bind (("C-x C-b" . ibuffer-other-window) ("C-c b B" . ibuffer-other-window) @@ -969,6 +976,7 @@ There's no way I could top that, so I won't attempt to. #+begin_src emacs-lisp (use-package outline + :defer t :hook (prog-mode . outline-minor-mode) :bind (:map @@ -1037,7 +1045,7 @@ TODO: break this giant source block down into individual org sections. (add-hook 'prog-mode-hook #'indicate-buffer-boundaries-left)) (use-package recentf - :demand t + :defer 0.5 :config (add-to-list 'recentf-exclude "^/\\(?:ssh\\|su\\|sudo\\)?:") (setq recentf-max-saved-items 40)) @@ -1078,7 +1086,7 @@ TODO: break this giant source block down into individual org sections. #+begin_src emacs-lisp (use-package company - :defer 5 + :defer 2 :bind (:map company-active-map ([tab] . company-complete-common-or-cycle) @@ -1097,6 +1105,7 @@ TODO: break this giant source block down into individual org sections. * Syntax and spell checking #+begin_src emacs-lisp (use-package flycheck + :defer 3 :hook (prog-mode . flycheck-mode) :bind (:map flycheck-mode-map @@ -1111,6 +1120,7 @@ TODO: break this giant source block down into individual org sections. ;; http://endlessparentheses.com/ispell-and-apostrophes.html (use-package ispell + :defer 3 :config ;; ’ can be part of a word (setq ispell-local-dictionary-alist @@ -1140,6 +1150,7 @@ TODO: break this giant source block down into individual org sections. #+begin_src emacs-lisp (use-package alloy-mode + :defer t :config (setq alloy-basic-offset 2)) #+end_src @@ -1147,6 +1158,7 @@ TODO: break this giant source block down into individual org sections. #+begin_src emacs-lisp (use-package proof-site ; Proof General + :defer t :load-path "lib/proof-site/generic/") #+end_src @@ -1155,12 +1167,17 @@ TODO: break this giant source block down into individual org sections. #+begin_src emacs-lisp (eval-when-compile (defvar lean-mode-map)) (use-package lean-mode - :defer 2 + :defer 1 :bind (:map lean-mode-map ("S-SPC" . company-complete)) :config (require 'lean-input) - (setq default-input-method "Lean")) + (setq default-input-method "Lean" + lean-input-tweak-all '(lean-input-compose + (lean-input-prepend "/") + (lean-input-nonempty)) + lean-input-user-translations '(("/" "/"))) + (lean-input-setup)) #+end_src ** Haskell @@ -1169,6 +1186,7 @@ TODO: break this giant source block down into individual org sections. #+begin_src emacs-lisp (use-package haskell-mode + :defer t :config (setq haskell-indentation-layout-offset 4 haskell-indentation-left-offset 4 @@ -1192,6 +1210,7 @@ executable from [[https://github.com/mpickering/apply-refact][apply-refact]]. #+begin_src emacs-lisp (use-package hlint-refactor + :after haskell-mode :bind (:map hlint-refactor-mode-map ("C-c l b" . hlint-refactor-refactor-buffer) ("C-c l r" . hlint-refactor-refactor-at-point)) @@ -1201,7 +1220,8 @@ executable from [[https://github.com/mpickering/apply-refact][apply-refact]]. *** [[https://github.com/flycheck/flycheck-haskell][flycheck-haskell]] #+begin_src emacs-lisp -(use-package flycheck-haskell) +(use-package flycheck-haskell + :after haskell-mode) #+end_src *** [[https://github.com/ndmitchell/hlint/blob/20e116a043f2073c57b17b24ae6364b5e433ba7e/data/hs-lint.el][hs-lint.el]] @@ -1355,6 +1375,7 @@ instead. #+begin_src emacs-lisp (use-package sgml-mode + :defer t :config (setq sgml-basic-offset 2)) #+end_src @@ -1363,6 +1384,7 @@ instead. #+begin_src emacs-lisp (use-package css-mode + :defer t :config (setq css-indent-offset 2)) #+end_src @@ -1371,6 +1393,7 @@ instead. #+begin_src emacs-lisp (use-package web-mode + :defer t :mode "\\.html\\'" :config (setq-every! 2 @@ -1383,6 +1406,7 @@ instead. #+begin_src emacs-lisp (use-package emmet-mode + :after (:any web-mode css-mode sgml-mode) :bind* (("C-)" . emmet-next-edit-point) ("C-(" . emmet-prev-edit-point)) :config @@ -1395,6 +1419,7 @@ instead. #+begin_src emacs-lisp (use-package nix-mode + :defer t :mode "\\.nix\\'") #+end_src @@ -1493,30 +1518,25 @@ Emacs package that displays available keybindings in popup :config (which-key-mode)) #+end_src -** [[https://github.com/seagle0128/doom-modeline][doom-modeline]] - -#+begin_src emacs-lisp -(use-package doom-modeline - :demand t - :config (setq doom-modeline-height 32) - :hook (after-init . doom-modeline-init)) -#+end_src - -** [[https://github.com/maio/eink-emacs][eink-theme]] +** [[https://github.com/Malabarba/smart-mode-line][smart-mode-line]] #+begin_src emacs-lisp -(setq doom-modeline-bar-width 5) -(load-theme 'eink t) +(use-package smart-mode-line + :config + (sml/setup) + ;; (sml/apply-theme 'light) + (remove-hook 'display-time-hook 'sml/propertize-time-string)) #+end_src ** [[https://github.com/bbatsov/crux][crux]] #+begin_src emacs-lisp (use-package crux + :defer 1 :bind (("C-c d" . crux-duplicate-current-line-or-region) ("C-c M-d" . crux-duplicate-and-comment-current-line-or-region) ("C-c b K" . crux-kill-other-buffers) - ("C-c f c" . crux-copy-file-preserve-attributes) + ("C-c f C" . crux-copy-file-preserve-attributes) ("C-c f D" . crux-delete-file-and-buffer) ("C-c f R" . crux-rename-file-and-buffer) ("C-S-j" . crux-top-join-line) @@ -1537,7 +1557,7 @@ Emacs package that displays available keybindings in popup #+begin_src emacs-lisp (use-package projectile - :defer 5 + :defer 2 :bind-keymap ("C-c p" . projectile-command-map) :config (projectile-mode) @@ -1558,6 +1578,7 @@ Emacs package that displays available keybindings in popup #+begin_src emacs-lisp (use-package helpful + :defer 1 :bind (;; ("C-h F" . helpful-function) ("C-h f" . helpful-callable) @@ -1582,9 +1603,10 @@ Emacs package that displays available keybindings in popup #+begin_src emacs-lisp (use-package shell-pop - :custom - (shell-pop-universal-key "C-c e") - (shell-pop-shell-type '("eshell" "*eshell*" (lambda nil (eshell))))) + :defer 1 + :init + (setq shell-pop-universal-key "C-c e" + shell-pop-shell-type '("eshell" "*eshell*" (lambda nil (eshell))))) #+end_src ** [[https://github.com/EricCrosson/unkillable-scratch][unkillable-scratch]] @@ -1593,6 +1615,7 @@ Make =*scratch*= and =*Messages*= unkillable. #+begin_src emacs-lisp (use-package unkillable-scratch + :defer 3 :config (unkillable-scratch 1) :custom @@ -1609,6 +1632,7 @@ Make =*scratch*= and =*Messages*= unkillable. #+begin_src emacs-lisp (use-package boxquote + :defer 3 :bind (:prefix-map amin--boxquote-prefix-map :prefix "C-c q" @@ -1636,11 +1660,11 @@ Make =*scratch*= and =*Messages*= unkillable. Also see [[https://www.emacswiki.org/emacs/rebox2][rebox2]]. -** [[https://github.com/DarthFennec/highlight-indent-guides][highlight-indent-guides]] +** COMMENT [[https://github.com/DarthFennec/highlight-indent-guides][highlight-indent-guides]] :ARCHIVE: #+begin_src emacs-lisp (use-package highlight-indent-guides - :demand t + :defer 3 :hook ((prog-mode . highlight-indent-guides-mode) ;; (org-mode . highlight-indent-guides-mode) ) @@ -1657,6 +1681,7 @@ Also see [[https://www.emacswiki.org/emacs/rebox2][rebox2]]. #+begin_src emacs-lisp (use-package pdf-tools + :defer t :magic ("%PDF" . pdf-view-mode) :config (setq pdf-view-resize-factor 1.05) @@ -1681,6 +1706,7 @@ Also see [[https://www.emacswiki.org/emacs/rebox2][rebox2]]. #+begin_src emacs-lisp (use-package typo + :defer 2 :config (typo-global-mode 1) :hook (text-mode . typo-mode)) @@ -1748,6 +1774,58 @@ Hopefully temporary. (setq alert-default-style 'notifier)) #+end_src +** hl-todo + +#+begin_src emacs-lisp +(use-package hl-todo + :defer 4 + :config + (global-hl-todo-mode)) +#+end_src + +** shrink-path + +#+begin_src emacs-lisp +(use-package shrink-path + :after eshell + :config + (setq eshell-prompt-regexp "\\(.*\n\\)*λ " + eshell-prompt-function #'+eshell/prompt) + + (defun +eshell/prompt () + (let ((base/dir (shrink-path-prompt default-directory))) + (concat (propertize (car base/dir) + 'face 'font-lock-comment-face) + (propertize (cdr base/dir) + 'face 'font-lock-constant-face) + (propertize (+eshell--current-git-branch) + 'face 'font-lock-function-name-face) + "\n" + (propertize "λ" 'face 'eshell-prompt-face) + ;; needed for the input text to not have prompt face + (propertize " " 'face 'default)))) + + (defun +eshell--current-git-branch () + (let ((branch (car (loop for match in (split-string (shell-command-to-string "git branch") "\n") + when (string-match "^\*" match) + collect match)))) + (if (not (eq branch nil)) + (concat " " (substring branch 2)) + "")))) +#+end_src + +** magithub + +For when I /have to/ use GH. + +#+begin_src emacs-lisp +(use-package magithub + :after magit + :config + (magithub-feature-autoinject t) + (setq magithub-clone-default-directory "~/src/git")) +#+end_src + * Email #+begin_src emacs-lisp @@ -1759,21 +1837,25 @@ Hopefully temporary. ** Gnus #+begin_src emacs-lisp -(setq amin-gnus-init-file (no-littering-expand-etc-file-name "gnus")) +(setq + amin-gnus-init-file (no-littering-expand-etc-file-name "gnus") + mail-user-agent 'gnus-user-agent + read-mail-command 'gnus) (use-package gnus - :bind ("s-m" . gnus) + :bind (("s-m" . gnus) + ("s-M" . gnus-unplugged)) :init (setq - gnus-select-method - '(nnimap "amin" + gnus-select-method '(nnnil "") + gnus-secondary-select-methods + '((nnimap "amin" (nnimap-stream plain) (nnimap-address "127.0.0.1") (nnimap-server-port 143) (nnimap-authenticator plain) (nnimap-user "amin@aminb.org")) - gnus-secondary-select-methods - '((nnimap "uwaterloo" + (nnimap "uwaterloo" (nnimap-stream plain) (nnimap-address "127.0.0.1") (nnimap-server-port 143) @@ -1781,13 +1863,13 @@ Hopefully temporary. (nnimap-user "abandali@uwaterloo.ca"))) gnus-message-archive-group "nnimap:Sent" gnus-parameters - '(("amin" - (display . 20)) - ("uwaterloo" - (display . 20))) + '(("gnu.*" + (gcc-self . t))) + gnus-large-newsgroup 50 gnus-home-directory (no-littering-expand-var-file-name "gnus/") - gnus-directory (no-littering-expand-var-file-name "gnus/News/") - message-directory amin-maildir + gnus-directory (concat gnus-home-directory "news/") + message-directory (concat gnus-home-directory "mail/") + nndraft-directory (concat gnus-home-directory "drafts/") gnus-save-newsrc-file nil gnus-read-newsrc-file nil gnus-interactive-exit nil @@ -1830,19 +1912,12 @@ Hopefully temporary. ("w" . gnus-summary-wide-reply) ("v" . gnus-summary-show-raw-article)) :config - (setq gnus-extra-headers (append gnus-extra-headers - '(List-Id X-RT-Originator))) (bind-keys :map gnus-summary-mode-map ("r" . gnus-summary-reply-with-original) ("R" . gnus-summary-wide-reply-with-original) ("M-L" . org-store-link))) -(use-package nnmail - :config - (setq nnmail-extra-headers (append nnmail-extra-headers - '(List-Id X-RT-Originator)))) - (use-package gnus-msg :config (setq gnus-posting-styles @@ -1854,9 +1929,18 @@ Hopefully temporary. (address "abandali@uwaterloo.ca") (gcc "\"nnimap+uwaterloo:Sent Items\""))))) -(use-package gnus-group +(use-package gnus-topic :hook (gnus-group-mode . gnus-topic-mode)) +(use-package gnus-agent + :config + (setq gnus-agent-synchronize-flags 'ask) + :hook (gnus-group-mode . gnus-agent-mode)) + +(use-package gnus-group + :config + (setq gnus-permanently-visible-groups "\\((INBOX\\|gnu$\\)")) + (use-package mm-decode :config (setq mm-discouraged-alternatives '("text/html" "text/richtext"))) @@ -1881,25 +1965,47 @@ Hopefully temporary. (setq message-kill-buffer-on-exit t message-send-mail-function 'message-send-mail-with-sendmail message-sendmail-envelope-from 'header - ;; message-directory "drafts" + message-dont-reply-to-names + "\\(\\(.*@aminb\\.org\\)\\|\\(\\(aminb?\\|mab\\|bandali\\)@gnu\\.org\\)\\|\\(\\(m\\|a\\(min\\.\\)?\\)bandali@uwaterloo\\.ca\\)\\)" message-user-fqdn "aminb.org") - ;; (add-hook 'message-mode-hook 'electric-quote-local-mode) - (add-hook 'message-mode-hook - (lambda () (setq fill-column 65 - message-fill-column 65))) - (add-hook 'message-mode-hook - #'flyspell-mode) - ;; (add-hook 'message-setup-hook - ;; #'mml-secure-message-sign-pgpmime) + :hook (;; (message-setup . mml-secure-message-sign-pgpmime) + (message-mode . flyspell-mode) + (message-mode . (lambda () (setq fill-column 65 + message-fill-column 65)))) :custom-face - (message-header-subject ((t (:foreground "navy blue" :weight semi-bold)))) - (message-header-to ((t (:foreground "MidnightBlue" :weight semi-bold))))) + (message-header-subject ((t (:foreground "#111" :weight semi-bold)))) + (message-header-to ((t (:foreground "#111" :weight normal)))) + (message-header-cc ((t (:foreground "#333" :weight normal))))) (after! mml-sec (setq mml-secure-openpgp-encrypt-to-self t mml-secure-openpgp-sign-with-sender t)) #+end_src +** footnote + +Convenient footnotes in =message-mode=. + +#+begin_src emacs-lisp +(use-package footnote + :after message + :bind + (:map message-mode-map + :prefix-map amin--footnote-prefix-map + :prefix "C-c f" + ("a" . footnote-add-footnote) + ("b" . footnote-back-to-message) + ("c" . footnote-cycle-style) + ("d" . footnote-delete-footnote) + ("g" . footnote-goto-footnote) + ("r" . footnote-renumber-footnotes) + ("s" . footnote-set-style)) + :config + (setq footnote-start-tag "" + footnote-end-tag "" + footnote-style 'unicode)) +#+end_src + ** supercite #+begin_src emacs-lisp :tangle no