X-Git-Url: https://git.shemshak.org/~bandali/configs/blobdiff_plain/bc39c78020af68f7f51f4065d27c94b48c4b6179..620ed6895854c0b82e72a9acedd481e5e14cf80a:/init.org diff --git a/init.org b/init.org index 8de259e..d90812e 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,11 +701,15 @@ 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) (org-mode . flyspell-mode)) @@ -712,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 @@ -727,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 @@ -791,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 @@ -865,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 @@ -877,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)) @@ -904,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) @@ -967,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 @@ -1035,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)) @@ -1076,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) @@ -1095,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 @@ -1109,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 @@ -1138,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 @@ -1145,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 @@ -1153,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 @@ -1167,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 @@ -1190,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)) @@ -1199,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]] @@ -1353,6 +1375,7 @@ instead. #+begin_src emacs-lisp (use-package sgml-mode + :defer t :config (setq sgml-basic-offset 2)) #+end_src @@ -1361,6 +1384,7 @@ instead. #+begin_src emacs-lisp (use-package css-mode + :defer t :config (setq css-indent-offset 2)) #+end_src @@ -1369,6 +1393,7 @@ instead. #+begin_src emacs-lisp (use-package web-mode + :defer t :mode "\\.html\\'" :config (setq-every! 2 @@ -1381,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 @@ -1393,6 +1419,7 @@ instead. #+begin_src emacs-lisp (use-package nix-mode + :defer t :mode "\\.nix\\'") #+end_src @@ -1491,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]] +** [[https://github.com/Malabarba/smart-mode-line][smart-mode-line]] #+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]] - -#+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) @@ -1535,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) @@ -1556,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) @@ -1580,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]] @@ -1591,6 +1615,7 @@ Make =*scratch*= and =*Messages*= unkillable. #+begin_src emacs-lisp (use-package unkillable-scratch + :defer 3 :config (unkillable-scratch 1) :custom @@ -1607,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" @@ -1638,7 +1664,7 @@ Also see [[https://www.emacswiki.org/emacs/rebox2][rebox2]]. #+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) ) @@ -1655,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) @@ -1679,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)) @@ -1746,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 @@ -1757,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) @@ -1779,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 @@ -1795,12 +1879,12 @@ Hopefully temporary. :config (setq gnus-visible-headers - (concat gnus-visible-headers "\\|^List-Id:\\|^X-RT-Originator:") + (concat gnus-visible-headers "\\|^List-Id:\\|^X-RT-Originator:\\|^User-Agent:") gnus-sorted-header-list '("^From:" "^Subject:" "^Summary:" "^Keywords:" "^Followup-To:" "^To:" "^Cc:" "X-RT-Originator" "^Newsgroups:" "List-Id:" "^Organization:" - "^Date:") + "^User-Agent:" "^Date:") ;; local-lapsed article dates ;; from https://www.emacswiki.org/emacs/GnusFormatting#toc11 gnus-article-date-headers '(user-defined) @@ -1816,8 +1900,9 @@ Hopefully temporary. (concat local lapsed)))) (bind-keys :map gnus-article-mode-map - ("r" . gnus-article-reply-with-original) - ("R" . gnus-article-wide-reply-with-original))) + ("r" . gnus-article-reply-with-original) + ("R" . gnus-article-wide-reply-with-original) + ("M-L" . org-store-link))) (use-package gnus-sum :bind (:map gnus-summary-mode-map @@ -1827,65 +1912,38 @@ 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))) + ("r" . gnus-summary-reply-with-original) + ("R" . gnus-summary-wide-reply-with-original) + ("M-L" . org-store-link))) -(use-package nnmail +(use-package gnus-msg :config - (setq nnmail-extra-headers (append nnmail-extra-headers - '(List-Id X-RT-Originator)))) - -(use-package gnus-group + (setq gnus-posting-styles + '((".*" + (address "amin@aminb.org")) + ("gnu.*" + (address "bandali@gnu.org")) + ("nnimap\\+uwaterloo:.*" + (address "abandali@uwaterloo.ca") + (gcc "\"nnimap+uwaterloo:Sent Items\""))))) + +(use-package gnus-topic :hook (gnus-group-mode . gnus-topic-mode)) -(use-package mm-decode +(use-package gnus-agent :config - (setq mm-discouraged-alternatives '("text/html" "text/richtext"))) -#+end_src + (setq gnus-agent-synchronize-flags 'ask) + :hook (gnus-group-mode . gnus-agent-mode)) -** gnus-alias +(use-package gnus-group + :config + (setq gnus-permanently-visible-groups "\\((INBOX\\|gnu$\\)")) -#+begin_src emacs-lisp -(use-package gnus-alias - :commands (gnus-alias-determine-identity - gnus-alias-select-identity) - :bind (:map message-mode-map - ("s-i" . gnus-alias-select-identity)) +(use-package mm-decode :config - (setq - gnus-alias-default-identity "amin" - gnus-alias-identity-alist - '(("amin" - nil ;; Does not refer to any other identity - "Amin Bandali " - nil ;; Organization - nil ;; extra headers - nil ;; extra body text - nil) ;; signature file - ("gnu" - nil - "Amin Bandali " - nil - nil - nil - nil) - ("uw" - nil - "Amin Bandali " - nil - (("Gcc" . "\"nnimap+uwaterloo:Sent Items\"")) - nil - nil)) - gnus-alias-identity-rules - '(("amin" ("Delivered-To" "" + nil ;; Organization + nil ;; extra headers + nil ;; extra body text + nil) ;; signature file + ("gnu" + nil + "Amin Bandali " + nil + nil + nil + nil) + ("uw" + nil + "Amin Bandali " + nil + (("Gcc" . "\"nnimap+uwaterloo:Sent Items\"")) + nil + nil)) + gnus-alias-identity-rules + '(("amin" ("Delivered-To" "