X-Git-Url: https://git.shemshak.org/gitweb.cgi/~bandali/configs/blobdiff_plain/d98421d58e0407f3a08259259f0dd9ab09163874..eea0b674b4a09defe51c50d64a07f308a2f451c7:/init.org?ds=sidebyside diff --git a/init.org b/init.org index 194a4b5..820714c 100644 --- a/init.org +++ b/init.org @@ -444,6 +444,15 @@ compilation." `(after! (:all ,@features) ,@body))))) #+end_src +Convenience macro for =setq='ing multiple variables to the same value: + +#+begin_src emacs-lisp +(defmacro setq-every! (value &rest vars) + "Set all the variables from VARS to value VALUE." + (declare (indent defun) (debug t)) + `(progn ,@(mapcar (lambda (x) (list 'setq x value)) vars))) +#+end_src + * Core :PROPERTIES: :CUSTOM_ID: core @@ -626,8 +635,8 @@ Enable =winner-mode=. #+begin_src emacs-lisp (bind-keys - ("C-c b B" . ibuffer-list-buffers) ("C-c b k" . kill-this-buffer) + ("C-c s s" . save-buffer) ("C-c b s" . save-buffer) ("C-c S" . save-buffer) ("C-c o" . other-window) @@ -673,11 +682,14 @@ In short, my favourite way of life. :config (setq org-src-tab-acts-natively t org-src-preserve-indentation nil - org-edit-src-content-indentation 0) + org-edit-src-content-indentation 0 + org-log-done 'time) :hook (org-mode . org-indent-mode)) (use-package org-notmuch :after (:any org notmuch)) + +(use-package orgalist) #+end_src **** asynchronous tangle @@ -843,6 +855,66 @@ There's no way I could top that, so I won't attempt to. :hook (eshell-mode . amin|eshell-setup)) #+end_src +*** Ibuffer + +#+begin_src emacs-lisp +(use-package ibuffer + :bind + (("C-x C-b" . ibuffer-other-window) + ("C-c b B" . ibuffer-other-window) + :map ibuffer-mode-map + ("P" . ibuffer-backward-filter-group) + ("N" . ibuffer-forward-filter-group) + ("M-p" . ibuffer-do-print) + ("M-n" . ibuffer-do-shell-command-pipe-replace)) + :config + ;; Use human readable Size column instead of original one + (define-ibuffer-column size-h + (:name "Size" :inline t) + (cond + ((> (buffer-size) 1000000) (format "%7.1fM" (/ (buffer-size) 1000000.0))) + ((> (buffer-size) 100000) (format "%7.0fk" (/ (buffer-size) 1000.0))) + ((> (buffer-size) 1000) (format "%7.1fk" (/ (buffer-size) 1000.0))) + (t (format "%8d" (buffer-size))))) + :custom + (ibuffer-saved-filter-groups + '(("default" + ("dired" (mode . dired-mode)) + ("org" (name . "^.*org$")) + ("web" + (or + (mode . web-mode) + (mode . css-mode) + (mode . scss-mode) + (mode . js2-mode))) + ("shell" + (or + (mode . eshell-mode) + (mode . shell-mode))) + ("notmuch" (name . "\*notmuch\*")) + ("programming" + (or + (mode . python-mode) + (mode . c++-mode) + (mode . emacs-lisp-mode))) + ("emacs" + (or + (name . "^\\*scratch\\*$") + (name . "^\\*Messages\\*$")))))) + (ibuffer-formats + '((mark modified read-only locked " " + (name 18 18 :left :elide) + " " + (size-h 9 -1 :right) + " " + (mode 16 16 :left :elide) + " " filename-and-process) + (mark " " + (name 16 -1) + " " filename))) + :hook (ibuffer . (lambda () (ibuffer-switch-to-saved-filter-groups "default")))) +#+end_src + * Borg's =layer/essentials= TODO: break this giant source block down into individual org sections. @@ -895,7 +967,9 @@ TODO: break this giant source block down into individual org sections. (use-package recentf :demand t - :config (add-to-list 'recentf-exclude "^/\\(?:ssh\\|su\\|sudo\\)?:")) + :config + (add-to-list 'recentf-exclude "^/\\(?:ssh\\|su\\|sudo\\)?:") + (setq recentf-max-saved-items 40)) (use-package savehist :config (savehist-mode)) @@ -942,6 +1016,8 @@ TODO: break this giant source block down into individual org sections. (company-minimum-prefix-length 1) (company-selection-wrap-around t) (company-dabbrev-char-regexp "\\sw\\|\\s_\\|[-_]") + (company-dabbrev-downcase nil) + (company-dabbrev-ignore-case nil) :config (global-company-mode t)) #+end_src @@ -1168,32 +1244,55 @@ instead. ("C-c l l" . hs-lint))) #+end_src -** SGML and HTML +** Web dev + +*** SGML and HTML #+begin_src emacs-lisp (use-package sgml-mode :config - (setq sgml-basic-offset 4)) + (setq sgml-basic-offset 2)) +#+end_src + +*** CSS and SCSS + +#+begin_src emacs-lisp +(use-package css-mode + :config + (setq css-indent-offset 2)) #+end_src -** Web mode +*** Web mode #+begin_src emacs-lisp (use-package web-mode - :mode "\\.html\\'") + :mode "\\.html\\'" + :config + (setq-every! 2 + web-mode-code-indent-offset + web-mode-css-indent-offset + web-mode-markup-indent-offset)) #+end_src -** Emmet mode +*** Emmet mode #+begin_src emacs-lisp (use-package emmet-mode :bind* (("C-)" . emmet-next-edit-point) ("C-(" . emmet-prev-edit-point)) - :init + :config + (unbind-key "C-j" emmet-mode-keymap) (setq emmet-move-cursor-between-quotes t) :hook (web-mode css-mode html-mode sgml-mode)) #+end_src +** Nix + +#+begin_src emacs-lisp +(use-package nix-mode + :mode "\\.nix\\'") +#+end_src + * Emacs Enhancements ** [[https://github.com/justbur/emacs-which-key][which-key]] @@ -1347,43 +1446,56 @@ Make =*scratch*= and =*Messages*= unkillable. Also see [[https://www.emacswiki.org/emacs/rebox2][rebox2]]. -* Email -** [[https://notmuchmail.org][notmuch]] +** [[https://github.com/DarthFennec/highlight-indent-guides][highlight-indent-guides]] -See [[notmuch:id:87muuqsvci.fsf@fencepost.gnu.org][bug follow-up]]. +#+begin_src emacs-lisp +(use-package highlight-indent-guides + :demand t + :hook ((prog-mode . highlight-indent-guides-mode) + (org-mode . highlight-indent-guides-mode)) + :config + (setq highlight-indent-guides-character ?\|) + (setq highlight-indent-guides-auto-enabled nil) + (setq highlight-indent-guides-method 'character) + (setq highlight-indent-guides-responsive 'top) + (set-face-foreground 'highlight-indent-guides-character-face "gainsboro") + (set-face-foreground 'highlight-indent-guides-top-character-face "grey40")) ; grey13 is nice too +#+end_src + +* Email #+begin_src emacs-lisp -(defvar amin-maildir "~/mail") +(defvar amin-maildir (expand-file-name "~/mail/")) +(after! recentf + (add-to-list 'recentf-exclude amin-maildir)) +#+end_src + +** sendmail +#+begin_src emacs-lisp (use-package sendmail - ;; :ensure nil :config (setq sendmail-program "/usr/bin/msmtp" - ; message-sendmail-extra-arguments '("-v" "-d") + ;; message-sendmail-extra-arguments '("-v" "-d") mail-specify-envelope-from t mail-envelope-from 'header)) +#+end_src +** message + +#+begin_src emacs-lisp (use-package message - ;; :ensure nil :config (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-directory "drafts" message-user-fqdn "aminb.org") (add-hook 'message-mode-hook (lambda () (setq fill-column 65 message-fill-column 65))) (add-hook 'message-mode-hook #'flyspell-mode) - ;; (add-hook 'notmuch-message-mode-hook #'+doom-modeline|set-special-modeline) - ;; TODO: is there a way to only run this when replying and not composing? - ;; (add-hook 'notmuch-message-mode-hook - ;; (lambda () (progn - ;; (newline) - ;; (newline) - ;; (forward-line -1) - ;; (forward-line -1)))) ;; (add-hook 'message-setup-hook ;; #'mml-secure-message-sign-pgpmime) ) @@ -1391,7 +1503,13 @@ See [[notmuch:id:87muuqsvci.fsf@fencepost.gnu.org][bug follow-up]]. (after! mml-sec (setq mml-secure-openpgp-encrypt-to-self t mml-secure-openpgp-sign-with-sender t)) +#+end_src + +** [[https://notmuchmail.org][notmuch]] +See [[notmuch:id:87muuqsvci.fsf@fencepost.gnu.org][bug follow-up]]. + +#+begin_src emacs-lisp (defun amin/notmuch () "Delete other windows, then launch `notmuch'." (interactive) @@ -1400,7 +1518,7 @@ See [[notmuch:id:87muuqsvci.fsf@fencepost.gnu.org][bug follow-up]]. (use-package notmuch :commands notmuch - :bind ("C-c m" . amin/notmuch) + :bind ("C-c n" . amin/notmuch) :custom (notmuch-always-prompt-for-sender t) :config (setq notmuch-hello-sections @@ -1510,9 +1628,6 @@ See [[notmuch:id:87muuqsvci.fsf@fencepost.gnu.org][bug follow-up]]. (after! notmuch-crypto (setq notmuch-crypto-process-mime t)) - -(after! recentf - (add-to-list 'recentf-exclude (expand-file-name amin-maildir))) #+end_src ** supercite @@ -1572,6 +1687,9 @@ nil)) #+begin_src emacs-lisp (use-package ox-hugo :after ox) + +(use-package ox-hugo-auto-export + :load-path "lib/ox-hugo") #+end_src * Post initialization