X-Git-Url: https://git.shemshak.org/gitweb.cgi/~bandali/configs/blobdiff_plain/0c6e40cb03d8071b50c5906a6ae0a9d4cafed822..408330027b47c21acc9717c9e01d9ffa438cbbba:/init.org diff --git a/init.org b/init.org index 684bbf1..3021933 100644 --- a/init.org +++ b/init.org @@ -32,6 +32,46 @@ anyway. So, I've opted to use =straight.el=. I also used Borg for a few months, but decided to try =straight.el= which allows direct use of the various package archives. +** Installation + +To use this config for your Emacs, first you need to clone this repo, +then tangle =init.org= into =init.el=, and optionally byte-compile +=init.el=. + +First, clone the repository and =cd= into it: + +#+begin_src sh :tangle no +git clone https://git.sr.ht/~bandali/dotfiles ~/.emacs.d +cd ~/.emacs.d +#+end_src + +Then, decide if you would like to use a byte-compiled init file, and +set the following variable accordingly: + +#+begin_src emacs-lisp +(defvar a/byte-compiled-init t + "If non-nil, byte-(re)compile init.el on successful tangles.") +#+end_src + +Now, first tangle =init.org=, and only if you chose to have a +byte-compiled init, build init as well: + +#+begin_src sh :tangle no +make tangle-init +make build-init +#+end_src + +If you'd like to use a byte-compiled init, it's important that it be +recompiled whenever =init.el= is generated from an updated =init.org=. +Not only does my setup automatically and asynchronously tangle +=init.org= to =init.el= every time you edit and save =init.org= in GNU +Emacs, it will also invoke =make build-init= if you set +=a/byte-compiled-init= to =t= above, so you wouldn't have to worry +about manually tangling and compiling your init file whenever you +change it. The output of the last byte-compilation in the current +session is kept in a =*compilation*= buffer, which will automatically +be displayed if compilation fails. + * Contents :toc_1:noexport: - [[#about][About]] @@ -256,11 +296,13 @@ and without compromising on performance. #+begin_src emacs-lisp (straight-use-package 'use-package) -(if nil ; set to t when need to debug init - (setq use-package-verbose t - use-package-expand-minimally nil - use-package-compute-statistics t - debug-on-error t) +(if nil ; set to t when need to debug init + (progn + (setq use-package-verbose t + use-package-expand-minimally nil + use-package-compute-statistics t + debug-on-error t) + (require 'use-package)) (setq use-package-verbose nil use-package-expand-minimally t)) @@ -282,8 +324,8 @@ database, low-level functions for querying the database, and a (use-package epkg :commands (epkg-list-packages epkg-describe-package) :bind - (("C-c P e d" . epkg-describe-package) - ("C-c P e p" . epkg-list-packages)) + (("C-c p e d" . epkg-describe-package) + ("C-c p e p" . epkg-list-packages)) :config (setq epkg-repository "~/.emacs.d/straight/repos/epkgs/") (eval-when-compile (defvar ivy-initial-inputs-alist)) @@ -347,7 +389,8 @@ in my shell. (use-package exec-path-from-shell :defer 1 :init - (setq exec-path-from-shell-check-startup-files nil) + (setq exec-path-from-shell-arguments nil + exec-path-from-shell-check-startup-files nil) :config (exec-path-from-shell-initialize) ;; while we're at it, let's fix access to our running ssh-agent @@ -696,6 +739,8 @@ for this. ** Bindings +Some bindings for functions from built-in GNU Emacs packages: + #+begin_src emacs-lisp (bind-keys ("C-c a i" . ielm) @@ -720,6 +765,35 @@ for this. ("s-n" . end-of-buffer)) #+end_src +While at it, let's bind a few for some =straight-*= functions too: + +#+begin_src emacs-lisp +(bind-keys + :prefix-map a/straight-prefix-map + :prefix "C-c p s" + ("u" . straight-use-package) + ("f" . straight-freeze-versions) + ("t" . straight-thaw-versions) + ("P" . straight-prune-build) + ("r" . straight-get-recipe) + ;; M-x ^straight-.*-all$ + ("a c" . straight-check-all) + ("a f" . straight-fetch-all) + ("a m" . straight-merge-all) + ("a n" . straight-normalize-all) + ("a F" . straight-pull-all) + ("a P" . straight-push-all) + ("a r" . straight-rebuild-all) + ;; M-x ^straight-.*-package$ + ("p c" . straight-check-package) + ("p f" . straight-fetch-package) + ("p m" . straight-merge-package) + ("p n" . straight-normalize-package) + ("p F" . straight-pull-package) + ("p P" . straight-push-package) + ("p r" . straight-rebuild-package)) +#+end_src + ** Packages The packages in this section are absolutely essential to my everyday @@ -853,9 +927,13 @@ file. (defvar a/show-async-tangle-time nil "Show the time spent tangling the file.") - (defvar a/async-tangle-post-compile "make bi" + (defvar a/async-tangle-post-compile + (when a/byte-compiled-init "make build-init") "If non-nil, pass to `compile' after successful tangle.") + ;; TODO: look into why directly byte-compiling init.el causes a + ;; number of problems, including magit-status not loading (busy + ;; waiting). (defvar a/async-tangle-byte-recompile nil "If non-nil, byte-recompile the file on successful tangle.") @@ -990,7 +1068,6 @@ There's no way I could top that, so I won't attempt to. #+begin_src emacs-lisp (use-package counsel - :defer 0.6 :after ivy :bind (([remap execute-extended-command] . counsel-M-x) ([remap find-file] . counsel-find-file) @@ -1237,6 +1314,7 @@ Highlight matching parens. #+begin_src emacs-lisp (use-feature paren + :demand :config (show-paren-mode)) #+end_src @@ -1762,19 +1840,21 @@ Emacs package that displays available keybindings in popup ;; prefixes for my personal bindings "C-c a" "applications" "C-c a s" "shells" - "C-c P" "package-management" - "C-c P e" "package-management/epkg" - "C-c P s" "package-management/straight.el" + "C-c p" "package-management" + "C-c p e" "package-management/epkg" + "C-c p s" "straight.el" + "C-c psa" "all" + "C-c psp" "package" "C-c c" "compile-and-comments" "C-c e" "eval" "C-c f" "files" "C-c F" "frames" "C-S-h" "help(ful)" "C-c m" "multiple-cursors" - "C-c p" "projectile" - "C-c p s" "projectile/search" - "C-c p x" "projectile/execute" - "C-c p 4" "projectile/other-window" + "C-c P" "projectile" + "C-c P s" "projectile/search" + "C-c P x" "projectile/execute" + "C-c P 4" "projectile/other-window" "C-c q" "boxquote" "s-g" "magit" "s-o" "outline" @@ -1792,7 +1872,10 @@ Emacs package that displays available keybindings in popup "C-c C-e" "web/element" "C-c C-t" "web/tags") - (which-key-mode)) + (which-key-mode) + :custom + (which-key-add-column-padding 5) + (which-key-max-description-length 32)) #+end_src ** theme @@ -1879,7 +1962,7 @@ Emacs package that displays available keybindings in popup #+begin_src emacs-lisp (use-package projectile - :bind-keymap ("C-c p" . projectile-command-map) + :bind-keymap ("C-c P" . projectile-command-map) :config (projectile-mode) @@ -2140,7 +2223,11 @@ Also see [[https://www.emacswiki.org/emacs/rebox2][rebox2]]. gnus-save-newsrc-file nil gnus-read-newsrc-file nil gnus-interactive-exit nil - gnus-gcc-mark-as-read t)) + gnus-gcc-mark-as-read t) + :config + (require 'ebdb) + (require 'ebdb-mua) + (require 'ebdb-gnus)) (use-feature gnus-art :config @@ -2256,6 +2343,7 @@ Also see [[https://www.emacswiki.org/emacs/rebox2][rebox2]]. message-dont-reply-to-names "\\(\\(.*@aminb\\.org\\)\\|\\(amin@bandali\\.me\\)\\|\\(\\(aminb?\\|mab\\|bandali\\)@gnu\\.org\\)\\|\\(\\(m\\|a\\(min\\.\\)?\\)bandali@uwaterloo\\.ca\\)\\)" message-user-fqdn "aminb.org") + (require 'company-ebdb) :hook (;; (message-setup . mml-secure-message-sign-pgpmime) (message-mode . flyspell-mode) (message-mode . (lambda () @@ -2303,7 +2391,6 @@ Convenient footnotes in =message-mode=. #+begin_src emacs-lisp (use-package ebdb :straight (:host github :repo "girzel/ebdb") - :defer 2 :after gnus :bind (:map gnus-group-mode-map ("e" . ebdb)) :config @@ -2320,14 +2407,11 @@ Convenient footnotes in =message-mode=. ;; (ebdb-complete-enable)) (use-package company-ebdb - :defer 2 :config (defun company-ebdb--post-complete (_) nil)) (use-feature ebdb-gnus - :defer 3 :after ebdb - :demand :custom (ebdb-gnus-window-configuration '(article @@ -2338,9 +2422,7 @@ Convenient footnotes in =message-mode=. (ebdb-gnus 0.3)))))) (use-feature ebdb-mua - :defer 3 :after ebdb - :demand ;; :custom (ebdb-mua-pop-up nil) ) @@ -2352,9 +2434,13 @@ Convenient footnotes in =message-mode=. ;; :after ebdb) #+end_src -** COMMENT message-x +** message-x #+begin_src emacs-lisp +(use-package message-x) +#+end_src + +#+begin_src emacs-lisp :tangle no (use-package message-x :custom (message-x-completion-alist