(require 'borg)
(borg-initialize)
-(require 'borg-nix-shell)
-(setq borg-build-shell-command 'borg-nix-shell-build-command)
+;; (require 'borg-nix-shell)
+;; (setq borg-build-shell-command 'borg-nix-shell-build-command)
(with-eval-after-load 'bind-key
(bind-keys
'prepend))
#+end_src
+** Gentler font resizing
+
+#+begin_src emacs-lisp
+(setq text-scale-mode-step 1.05)
+#+end_src
+
** Libraries
#+begin_src emacs-lisp
`(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
#+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)
: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
: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.
(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))
(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
:bind (:map haskell-mode-map
("C-c l l" . hs-lint)))
#+end_src
+
+** Web dev
+
+*** SGML and HTML
+
+#+begin_src emacs-lisp
+(use-package sgml-mode
+ :config
+ (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
+
+#+begin_src emacs-lisp
+(use-package web-mode
+ :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
+
+#+begin_src emacs-lisp
+(use-package emmet-mode
+ :bind* (("C-)" . emmet-next-edit-point)
+ ("C-(" . emmet-prev-edit-point))
+ :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]]
:after #'my-projectile-invalidate-cache))))
#+end_src
-** [[https://github.com/wasamasa/shackle][shackle]]
-
-#+begin_src emacs-lisp
-(use-package shackle
- :demand t
- :commands shackle-mode
- :config
- (shackle-mode 1)
- (setq shackle-rules
- '(("*Help*" :align right :select t :size 0.5)
- ("\\`\\*helm.*?\\*\\'" :regexp t :align t)
- ((compilation-mode "\\`\\*magit-diff: .*?\\'") :regexp t :noselect t)
- ("*magit-dispatch-popup*" :align bottom)
- ((inferior-scheme-mode "*shell*" "*eshell*") :popup t))
- shackle-default-rule '(:select t)
- shackle-default-size 0.4
- shackle-inhibit-window-quit-on-same-windows t))
-#+end_src
-
** [[https://github.com/Wilfred/helpful][helpful]]
#+begin_src emacs-lisp
#+begin_src emacs-lisp
(use-package shell-pop
- :config
- (add-to-list 'shackle-rules '("\\*eshell\\*" :regexp t :same t))
:custom
(shell-pop-universal-key "C-c e")
(shell-pop-shell-type '("eshell" "*eshell*" (lambda nil (eshell)))))
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)
)
(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)
(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
(after! notmuch-crypto
(setq notmuch-crypto-process-mime t))
-
-(after! recentf
- (add-to-list 'recentf-exclude (expand-file-name amin-maildir)))
#+end_src
** supercite
#+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