X-Git-Url: https://git.shemshak.org/gitweb.cgi/~bandali/configs/blobdiff_plain/f97a01bda8181c0871428ca3bbfbe0381d779224..81ad062de322f5bb378f8a2e7b36ef7cd50ffeb9:/init.org diff --git a/init.org b/init.org index 60708bb..741ad7a 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 @@ -1174,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 @@ -1197,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)) @@ -1206,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]] @@ -1360,6 +1375,7 @@ instead. #+begin_src emacs-lisp (use-package sgml-mode + :defer t :config (setq sgml-basic-offset 2)) #+end_src @@ -1368,6 +1384,7 @@ instead. #+begin_src emacs-lisp (use-package css-mode + :defer t :config (setq css-indent-offset 2)) #+end_src @@ -1376,6 +1393,7 @@ instead. #+begin_src emacs-lisp (use-package web-mode + :defer t :mode "\\.html\\'" :config (setq-every! 2 @@ -1388,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 @@ -1400,6 +1419,7 @@ instead. #+begin_src emacs-lisp (use-package nix-mode + :defer t :mode "\\.nix\\'") #+end_src @@ -1498,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) @@ -1542,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) @@ -1563,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) @@ -1587,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]] @@ -1598,6 +1615,7 @@ Make =*scratch*= and =*Messages*= unkillable. #+begin_src emacs-lisp (use-package unkillable-scratch + :defer 3 :config (unkillable-scratch 1) :custom @@ -1614,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" @@ -1641,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 - :defer 2 + :defer 3 :hook ((prog-mode . highlight-indent-guides-mode) ;; (org-mode . highlight-indent-guides-mode) ) @@ -1662,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) @@ -1686,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)) @@ -1753,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 @@ -1909,55 +1982,130 @@ Hopefully temporary. 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 +#+begin_src emacs-lisp (use-package supercite - :commands sc-cite-original + :after message :init - (add-hook 'mail-citation-hook 'sc-cite-original) + (setq sc-nested-citation-p t + ;; sc-cite-blank-lines-p t + sc-citation-leader "" + sc-auto-fill-region-p t + sc-confirm-always-p nil) + :config + (defun amin--sc-header () + "Hi ,\n\n writes:" + (let ((sc-mumble "") + (whofrom (sc-whofrom))) + (if whofrom + (insert (sc-hdr "Hi " (sc-mail-field "sc-firstname") ", \n\n") + sc-reference-tag-string + whofrom + " writes:\n")))) + (add-to-list 'sc-rewrite-header-list '(amin--sc-header) t) + (setq sc-preferred-header-style (1- (length sc-rewrite-header-list))) + (add-hook 'mail-citation-hook 'sc-cite-original)) +#+end_src - (defun sc-remove-existing-signature () - (save-excursion - (goto-char (region-beginning)) - (when (re-search-forward message-signature-separator (region-end) t) - (delete-region (match-beginning 0) (region-end))))) +** ebdb - (add-hook 'mail-citation-hook 'sc-remove-existing-signature) +#+begin_src emacs-lisp +(use-package ebdb + :defer 1 + :bind (:map gnus-group-mode-map ("e" . ebdb)) + :config + (setq ebdb-sources (no-littering-expand-var-file-name "ebdb"))) - (defun sc-remove-if-not-mailing-list () - (unless (assoc "list-id" sc-mail-info) - (setq attribution sc-default-attribution - citation (concat sc-citation-delimiter - sc-citation-separator)))) +(use-package ebdb-com + :after ebdb) + +(use-package ebdb-complete + :after ebdb + :config + (ebdb-complete-enable)) - (add-hook 'sc-attribs-postselect-hook 'sc-remove-if-not-mailing-list) +(use-package ebdb-gnus + :after ebdb) +(use-package ebdb-message + :after ebdb) + +;; (use-package ebdb-vcard +;; :after ebdb) +#+end_src + +** COMMENT bbdb + +#+begin_comment +[submodule "bbdb"] + path = lib/bbdb + url = https://git.savannah.nongnu.org/git/bbdb.git + load-path = lisp/elisp + info-path = doc + build-step = ./autogen.sh + build-step = ./configure --with-lispdir=elisp + build-step = make + build-step = make install +#+end_comment + +#+begin_src emacs-lisp +(use-package bbdb + :init + (bbdb-mua-auto-update-init 'message) + (setq bbdb-mua-auto-update-p 'query) + (add-hook 'gnus-startup-hook 'bbdb-insinuate-gnus)) +#+end_src + +** COMMENT message-x + +#+begin_src emacs-lisp +(use-package message-x + :custom + (message-x-completion-alist + (quote + (("\\([rR]esent-\\|[rR]eply-\\)?[tT]o:\\|[bB]?[cC][cC]:" . gnus-harvest-find-address) + ((if + (boundp + (quote message-newgroups-header-regexp)) + message-newgroups-header-regexp message-newsgroups-header-regexp) + . message-expand-group))))) +#+end_src + +** COMMENT gnus-harvest + +#+begin_src emacs-lisp +(use-package gnus-harvest + :commands gnus-harvest-install + :demand t :config - (defun sc-fill-if-different (&optional prefix) - "Fill the region bounded by `sc-fill-begin' and point. -Only fill if optional PREFIX is different than -`sc-fill-line-prefix'. If `sc-auto-fill-region-p' is nil, do not -fill region. If PREFIX is not supplied, initialize fill -variables. This is useful for a regi `begin' frame-entry." - (if (not prefix) - (setq sc-fill-line-prefix "" - sc-fill-begin (line-beginning-position)) - (if (and sc-auto-fill-region-p - (not (string= prefix sc-fill-line-prefix))) - (let ((fill-prefix sc-fill-line-prefix)) - (unless (or (string= fill-prefix "") - (save-excursion - (goto-char sc-fill-begin) - (or (looking-at ">+ +") - (< (length - (buffer-substring (point) - (line-end-position))) - 65)))) - (fill-region sc-fill-begin (line-beginning-position))) - (setq sc-fill-line-prefix prefix - sc-fill-begin (line-beginning-position))))) -nil)) + (if (featurep 'message-x) + (gnus-harvest-install 'message-x) + (gnus-harvest-install))) #+end_src ** COMMENT gnus-alias :ARCHIVE: