Merge branch 'straight-next'
[~bandali/configs] / init.org
index 56a439a..684bbf1 100644 (file)
--- a/init.org
+++ b/init.org
@@ -9,10 +9,10 @@
 :END:
 
 This org file is my literate configuration for GNU Emacs, and is
-tangled to [[./init.el][init.el]]. Packages are installed and managed using
-[[https://github.com/emacscollective/borg][Borg]]. Over the years, I've taken inspiration from configurations of
-many different people. Some of the configurations that I can remember
-off the top of my head are:
+tangled to [[./init.el][init.el]].  Packages are installed and managed using
+[[https://github.com/raxod502/straight.el][straight.el]].  Over the years, I've taken inspiration from
+configurations of many different people.  Some of the configurations
+that I can remember off the top of my head are:
 
 - [[https://github.com/dieggsy/dotfiles][dieggsy/dotfiles]]: literate Emacs and dotfiles configuration, uses
   straight.el for managing packages
@@ -28,25 +28,9 @@ off the top of my head are:
 I'd like to have a fully reproducible Emacs setup (part of the reason
 why I store my configuration in this repository) but unfortunately out
 of the box, that's not achievable with =package.el=, not currently
-anyway. So, I've opted to use Borg. For what it's worth, I briefly
-experimented with [[https://github.com/raxod502/straight.el][straight.el]], but found that it added about 2 seconds
-to my init time; which is unacceptable for me: I use Emacs as my
-window manager (via EXWM) and coming from bspwm, I'm too used to
-having fast startup times.
-
-** Installation
-
-To use this config for your Emacs, first you need to clone this repo,
-then bootstrap Borg, tell Borg to retrieve package submodules, and
-byte-compiled the packages. Something along these lines should work:
-
-#+begin_src sh :tangle no
-git clone https://github.com/aminb/dotfiles ~/.emacs.d
-cd ~/.emacs.d
-make bootstrap-borg
-make bootstrap
-make build
-#+end_src
+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.
 
 * Contents                                                   :toc_1:noexport:
 
@@ -215,20 +199,34 @@ hacker.
 =straight.el= allows me to have a fully reproducible Emacs setup.
 
 #+begin_src emacs-lisp
-(setq straight-repository-branch "develop")
+;; Main engine start...
+
+(setq straight-repository-branch "develop"
+      straight-check-for-modifications '(check-on-save find-when-checking))
+
+(defun a/bootstrap-straight ()
+  (defvar bootstrap-version)
+  (let ((bootstrap-file
+         (expand-file-name "straight/repos/straight.el/bootstrap.el" user-emacs-directory))
+        (bootstrap-version 5))
+    (unless (file-exists-p bootstrap-file)
+      (with-current-buffer
+          (url-retrieve-synchronously
+           "https://raw.githubusercontent.com/raxod502/straight.el/develop/install.el"
+           'silent 'inhibit-cookies)
+        (goto-char (point-max))
+        (eval-print-last-sexp)))
+    (load bootstrap-file nil 'nomessage)))
+
+;; Solid rocket booster ignition...
+
+(defun a/build-init ()
+  (a/bootstrap-straight)
+  (byte-compile-file "init.el"))
 
-(defvar bootstrap-version)
-(let ((bootstrap-file
-       (expand-file-name "straight/repos/straight.el/bootstrap.el" user-emacs-directory))
-      (bootstrap-version 5))
-  (unless (file-exists-p bootstrap-file)
-    (with-current-buffer
-        (url-retrieve-synchronously
-         "https://raw.githubusercontent.com/raxod502/straight.el/develop/install.el"
-         'silent 'inhibit-cookies)
-      (goto-char (point-max))
-      (eval-print-last-sexp)))
-  (load bootstrap-file nil 'nomessage))
+(a/bootstrap-straight)
+
+;; We have lift off!
 
 (setq straight-use-package-by-default t)
 #+end_src
@@ -243,38 +241,7 @@ integration, we will define a =use-feature= for plain ole
   (declare (indent defun))
   `(use-package ,name
      :straight nil
-,@args))
-#+end_src
-
-*** COMMENT Borg
-
-#+begin_quote
-Assimilate Emacs packages as Git submodules
-#+end_quote
-
-[[https://github.com/emacscollective/borg][Borg]] is at the heart of package management of my Emacs setup. In
-short, it creates a git submodule in =lib/= for each package, which
-can then be managed with the help of Magit or other tools.
-
-#+begin_src emacs-lisp
-(setq user-init-file (or load-file-name buffer-file-name)
-      user-emacs-directory (file-name-directory user-init-file))
-(add-to-list 'load-path
-             (expand-file-name "lib/borg" user-emacs-directory))
-(require 'borg)
-(borg-initialize)
-
-;; (require 'borg-nix-shell)
-;; (setq borg-build-shell-command 'borg-nix-shell-build-command)
-
-(with-eval-after-load 'bind-key
-  (bind-keys
-   :package borg
-   ("C-c b A" . borg-activate)
-   ("C-c b a" . borg-assimilate)
-   ("C-c b b" . borg-build)
-   ("C-c b c" . borg-clone)
-   ("C-c b r" . borg-remove)))
+     ,@args))
 #+end_src
 
 *** =use-package=
@@ -300,7 +267,7 @@ and without compromising on performance.
 (setq use-package-always-defer t)
 #+end_src
 
-*** COMMENT Epkg
+*** Epkg
 
 #+begin_quote
 Browse the Emacsmirror package database
@@ -311,13 +278,14 @@ database, low-level functions for querying the database, and a
 =package.el=-like user interface for browsing the available packages.
 
 #+begin_src emacs-lisp
+(require 'bind-key)
 (use-package epkg
-  :defer t
+  :commands (epkg-list-packages epkg-describe-package)
   :bind
-  (("C-c b d" . epkg-describe-package)
-   ("C-c b p" . epkg-list-packages)
-   ("C-c b u" . epkg-update))
+  (("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))
   (with-eval-after-load 'ivy
     (add-to-list
@@ -729,7 +697,6 @@ for this.
 ** Bindings
 
 #+begin_src emacs-lisp
-(require 'bind-key)
 (bind-keys
  ("C-c a i" . ielm)
 
@@ -832,7 +799,7 @@ And here's where my actual Org configurations begin:
 
 #+begin_src emacs-lisp
 (use-feature org
-  :defer 0.5
+  :defer 2
   :config
   (setq org-src-tab-acts-natively t
         org-src-preserve-indentation nil
@@ -844,13 +811,6 @@ And here's where my actual Org configurations begin:
         org-catch-invisible-edits 'show-and-error
         org-log-done 'time)
   (add-to-list 'org-structure-template-alist '("L" . "src emacs-lisp") t)
-  (font-lock-add-keywords
-   'org-mode
-   '(("[ \t]*\\(#\\+\\(BEGIN\\|END\\|begin\\|end\\)_\\(\\S-+\\)\\)[ \t]*\\([^\n:]*\\)"
-      (1 '(:foreground "#5a5b5a" :background "#292b2b") t) ; directive
-      (3 '(:foreground "#81a2be" :background "#292b2b") t) ; kind
-      (4 '(:foreground "#c5c8c6") t))) ; title
-   t)
   :bind (:map org-mode-map ("M-L" . org-insert-last-stored-link))
   :hook ((org-mode . org-indent-mode)
          (org-mode . auto-fill-mode)
@@ -868,20 +828,15 @@ And here's where my actual Org configurations begin:
   (setq org-latex-listings 'listings
         ;; org-latex-prefer-user-labels t
         )
-  (add-to-list 'org-latex-packages-alist '("" "listings"))
-  (add-to-list 'org-latex-packages-alist '("" "color"))
   (add-to-list 'org-latex-classes
                '("IEEEtran" "\\documentclass[11pt]{IEEEtran}"
-                 ("\\section{%s}" . "\\section*{%s}")
-                 ("\\subsection{%s}" . "\\subsection*{%s}")
+                 ("\\section{%s}"       . "\\section*{%s}")
+                 ("\\subsection{%s}"    . "\\subsection*{%s}")
                  ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
-                 ("\\paragraph{%s}" . "\\paragraph*{%s}")
-                 ("\\subparagraph{%s}" . "\\subparagraph*{%s}"))
-               t))
-
-(use-feature ox-beamer
-  :demand
-  :after ox)
+                 ("\\paragraph{%s}"     . "\\paragraph*{%s}")
+                 ("\\subparagraph{%s}"  . "\\subparagraph*{%s}"))
+               t)
+  (require 'ox-beamer))
 #+end_src
 
 **** asynchronous tangle
@@ -898,10 +853,10 @@ file.
   (defvar a/show-async-tangle-time nil
     "Show the time spent tangling the file.")
 
-  (defvar a/async-tangle-post-compile nil
+  (defvar a/async-tangle-post-compile "make bi"
     "If non-nil, pass to `compile' after successful tangle.")
 
-  (defvar a/async-tangle-byte-recompile t
+  (defvar a/async-tangle-byte-recompile nil
     "If non-nil, byte-recompile the file on successful tangle.")
 
   (defun a/async-babel-tangle ()
@@ -920,7 +875,7 @@ file.
          `(lambda (result)
             (if result
                 (progn
-                  (setq byte-compile-warnings '(not noruntime unresolved))
+                  ;; (setq byte-compile-warnings '(not noruntime unresolved))
                   (message "Tangled %s%s"
                            ,file-nodir
                            (if a/show-async-tangle-time
@@ -949,7 +904,7 @@ Not just how I do git, but /the/ way to do git.
 
 #+begin_src emacs-lisp
 (use-package magit
-  :defer 1
+  :defer 2
   :bind (("C-x g" . magit-status)
          ("s-g s" . magit-status)
          ("s-g l" . magit-log-buffer-file))
@@ -1035,6 +990,7 @@ 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)
@@ -1052,7 +1008,7 @@ There's no way I could top that, so I won't attempt to.
 
 #+begin_src emacs-lisp
 (use-feature eshell
-  :defer 1
+  :defer 2
   :commands eshell
   :bind ("C-c a s e" . eshell)
   :config
@@ -1284,6 +1240,13 @@ Highlight matching parens.
   :config (show-paren-mode))
 #+end_src
 
+** simple (for column numbers)
+
+#+begin_src emacs-lisp
+(use-feature simple
+  :config (column-number-mode))
+#+end_src
+
 ** =savehist=
 
 Save minibuffer history.
@@ -1325,7 +1288,7 @@ Automatically save place in each file.
 
 #+begin_src emacs-lisp
 (use-package company
-  :defer 1
+  :defer 3
   :bind
   (:map company-active-map
         ([tab]    . company-complete-common-or-cycle)
@@ -1412,7 +1375,7 @@ Automatically save place in each file.
 ** [[https://coq.inria.fr][Coq]] (with [[https://github.com/ProofGeneral/PG][Proof General]])
 
 #+begin_src emacs-lisp
-(use-package proof-site
+(use-package proof-site  ; Proof General
   :straight proof-general)
 #+end_src
 
@@ -1746,7 +1709,7 @@ treemacs
   :after (treemacs))
 #+end_src
 
-** COMMENT geiser
+** geiser
 
 #+begin_src emacs-lisp
 (use-package geiser)
@@ -1756,7 +1719,7 @@ treemacs
   (setq geiser-guile-load-path "~/src/git/guix"))
 #+end_src
 
-** COMMENT guix
+** guix
 
 #+begin_src emacs-lisp
 (use-package guix)
@@ -1799,7 +1762,9 @@ Emacs package that displays available keybindings in popup
     ;; prefixes for my personal bindings
     "C-c a"   "applications"
     "C-c a s" "shells"
-    "C-c b"   "borg"
+    "C-c P"   "package-management"
+    "C-c P e" "package-management/epkg"
+    "C-c P s" "package-management/straight.el"
     "C-c c"   "compile-and-comments"
     "C-c e"   "eval"
     "C-c f"   "files"
@@ -1842,6 +1807,7 @@ Emacs package that displays available keybindings in popup
 #+begin_src emacs-lisp
 (use-package smart-mode-line
   :commands (sml/apply-theme)
+  :demand
   :config
   (sml/setup))
 #+end_src
@@ -1855,19 +1821,29 @@ Emacs package that displays available keybindings in popup
 ** theme helper functions
 
 #+begin_src emacs-lisp
+(defvar a/org-mode-font-lock-keywords
+  '(("[ \t]*\\(#\\+\\(BEGIN\\|END\\|begin\\|end\\)_\\(\\S-+\\)\\)[ \t]*\\([^\n:]*\\)"
+      (1 '(:foreground "#5a5b5a" :background "#292b2b") t) ; directive
+      (3 '(:foreground "#81a2be" :background "#292b2b") t) ; kind
+      (4 '(:foreground "#c5c8c6") t))))                    ; title
+
 (defun a/lights-on ()
   "Enable my favourite light theme."
   (interactive)
   (mapc #'disable-theme custom-enabled-themes)
   (load-theme 'tangomod t)
-  (sml/apply-theme 'automatic))
+  (sml/apply-theme 'automatic)
+  (font-lock-remove-keywords
+   'org-mode a/org-mode-font-lock-keywords))
 
 (defun a/lights-off ()
   "Go dark."
   (interactive)
   (mapc #'disable-theme custom-enabled-themes)
   (load-theme 'doom-tomorrow-night t)
-  (sml/apply-theme 'automatic))
+  (sml/apply-theme 'automatic)
+  (font-lock-add-keywords
+   'org-mode a/org-mode-font-lock-keywords t))
 
 (bind-keys
  ("s-t d" . a/lights-off)
@@ -1924,7 +1900,7 @@ Emacs package that displays available keybindings in popup
 
 #+begin_src emacs-lisp
 (use-package helpful
-  :defer 1
+  :defer 3
   :bind
   (("C-S-h c" . helpful-command)
    ("C-S-h f" . helpful-callable)        ; helpful-function
@@ -1943,7 +1919,6 @@ Make =*scratch*= and =*Messages*= unkillable.
   :config
   (unkillable-scratch 1)
   :custom
-  (unkillable-scratch-behavior 'do-nothing)
   (unkillable-buffers '("^\\*scratch\\*$" "^\\*Messages\\*$")))
 #+end_src
 
@@ -2017,10 +1992,8 @@ Also see [[https://www.emacswiki.org/emacs/rebox2][rebox2]].
 #+begin_src emacs-lisp
 (use-package shrink-path
   :defer 2
+  :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)
@@ -2040,22 +2013,24 @@ Also see [[https://www.emacswiki.org/emacs/rebox2][rebox2]].
                              collect match))))
       (if (not (eq branch nil))
           (concat " " (substring branch 2))
-        ""))))
+        "")))
+  (setq eshell-prompt-regexp "\\(.*\n\\)*λ "
+                         eshell-prompt-function #'+eshell/prompt))
 #+end_src
 
 ** [[https://github.com/peterwvj/eshell-up][eshell-up]]
 
 #+begin_src emacs-lisp
 (use-package eshell-up
-  :commands eshell-up
-  :after eshell)
+  :after eshell
+  :commands eshell-up)
 #+end_src
 
 ** multi-term
 
 #+begin_src emacs-lisp
 (use-package multi-term
-  :defer 1
+  :defer 3
   :bind (("C-c a s m" . multi-term-dedicated-toggle)
          :map term-mode-map
          ("C-c C-j" . term-char-mode)
@@ -2328,6 +2303,7 @@ 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
@@ -2344,15 +2320,12 @@ Convenient footnotes in =message-mode=.
 ;;   (ebdb-complete-enable))
 
 (use-package company-ebdb
-  :after (:all company message)
+  :defer 2
   :config
-  (defun company-ebdb--post-complete (_) nil)
-  :hook
-  (message-mode . (lambda ()
-                    (add-to-list (make-local-variable 'company-backends)
-                                 'company-ebdb))))
+  (defun company-ebdb--post-complete (_) nil))
 
 (use-feature ebdb-gnus
+  :defer 3
   :after ebdb
   :demand
   :custom
@@ -2365,6 +2338,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)
@@ -2445,5 +2419,5 @@ Display how long it took to load the init file.
 * COMMENT Local Variables                                           :ARCHIVE:
 # Local Variables:
 # eval: (add-hook 'after-save-hook #'a/async-babel-tangle 'append 'local)
-# eval: (typo-mode -1)
+# eval: (when (featurep 'typo (typo-mode -1)))
 # End: