*** =straight.el=
+#+begin_quote
+Next-generation, purely functional package manager for the Emacs
+hacker.
+#+end_quote
+
+=straight.el= allows me to have a fully reproducible Emacs setup.
+
#+begin_src emacs-lisp
(setq straight-repository-branch "develop")
(setq straight-use-package-by-default t)
#+end_src
+Since we enable =straight.el='s =straight-use-package-by-default=
+integration, we will define a =use-feature= for plain ole
+=use-package= without any of the =straight.el= stuff.
+
+#+begin_src emacs-lisp
+(defmacro use-feature (name &rest args)
+ "Like `use-package', but with `straight-use-package-by-default' disabled."
+ (declare (indent defun))
+ `(use-package ,name
+ :straight nil
+,@args))
+#+end_src
+
*** COMMENT Borg
#+begin_quote
it it's own file. While at it, treat themes as safe.
#+begin_src emacs-lisp
-(use-package custom
- :straight nil
+(use-feature custom
:no-require t
:config
(setq custom-file (no-littering-expand-etc-file-name "custom.el"))
See [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Emacs-Server.html#Emacs-Server][Using Emacs as a Server]].
#+begin_src emacs-lisp
-(use-package server
- :straight nil
+(use-feature server
:defer 1
:config (or (server-running-p) (server-mode)))
#+end_src
'auto-compile-inhibit-compile-detached-git-head))
#+end_src
-*** Org
+*** [[https://orgmode.org/][Org]]
+
+#+begin_quote
+Org mode is for keeping notes, maintaining TODO lists, planning
+projects, and authoring documents with a fast and effective plain-text
+system.
+#+end_quote
+
+In short, my favourite way of life.
+
+First, we have to resort to a [[https://github.com/raxod502/straight.el#installing-org-with-straightel][hack]] to be able to use the correct
+latest version of Org from upstream.
#+begin_src emacs-lisp
(use-package git)
"--abbrev=0"
"HEAD")))))
- (provide 'org-version)
-
- (use-package org
- :defer 0.8) ; or org-plus-contrib if desired
+(provide 'org-version)
#+end_src
-*** COMMENT [[https://orgmode.org/][Org mode]]
+We will use the =org-plus-contrib= package to get the whole deal:
-#+begin_quote
-Org mode is for keeping notes, maintaining TODO lists, planning
-projects, and authoring documents with a fast and effective plain-text
-system.
-#+end_quote
+#+begin_src emacs-lisp
+(straight-use-package 'org-plus-contrib)
+#+end_src
-In short, my favourite way of life.
+And here's where my actual Org configurations begin:
#+begin_src emacs-lisp
-(use-package org
- :defer 1
+(use-feature org
+ :defer 0.5
:config
(setq org-src-tab-acts-natively t
org-src-preserve-indentation nil
'(org-block ((t (:background "#1d1f21"))))
'(org-latex-and-related ((t (:foreground "#b294bb")))))
-(use-package ox-latex
+(use-feature ox-latex
:after ox
:config
(setq org-latex-listings 'listings
("\\subparagraph{%s}" . "\\subparagraph*{%s}"))
t))
-(use-package ox-beamer
+(use-feature ox-beamer
:after ox)
-
-(use-package orgalist
- :after message
- :hook (message-mode . orgalist-mode))
#+end_src
**** asynchronous tangle
:custom-face (magit-diff-file-heading ((t (:weight normal)))))
#+end_src
-*** COMMENT [[https://github.com/abo-abo/swiper][Ivy]] (and friends)
+*** recentf
+
+Recently opened files.
+
+#+begin_src emacs-lisp
+(use-feature recentf
+ :defer 0.5
+ :config
+ (add-to-list 'recentf-exclude "^/\\(?:ssh\\|su\\|sudo\\)?:")
+ (setq recentf-max-saved-items 40))
+#+end_src
+
+*** [[https://github.com/abo-abo/swiper][Ivy]] (and friends)
#+begin_quote
Ivy - a generic completion frontend for Emacs, Swiper - isearch with
#+begin_src emacs-lisp
(use-package ivy
- :defer 1
+ :defer 0.6
:bind
(:map ivy-minibuffer-map
([escape] . keyboard-escape-quit)
#+begin_src emacs-lisp
(use-package swiper
+ :after ivy
:bind (("C-s" . swiper)
("C-r" . swiper)
("C-S-s" . isearch-forward)))
#+begin_src emacs-lisp
(use-package counsel
- :defer 1
+ :after ivy
:bind (([remap execute-extended-command] . counsel-M-x)
([remap find-file] . counsel-find-file)
("s-r" . counsel-recentf)
(defalias 'locate #'counsel-locate))
#+end_src
-*** COMMENT eshell
+*** eshell
#+begin_src emacs-lisp
-(use-package eshell
+(use-feature eshell
:defer 1
:commands eshell
:bind ("C-c a s e" . eshell)
(eshell-input-filter 'eshell-input-filter-initial-space))
#+end_src
-*** COMMENT Ibuffer
+*** Ibuffer
#+begin_src emacs-lisp
-(use-package ibuffer
+(use-feature ibuffer
:defer t
:bind
(("C-x C-b" . ibuffer-other-window)
:hook (ibuffer . (lambda () (ibuffer-switch-to-saved-filter-groups "default"))))
#+end_src
-*** COMMENT Outline
+*** Outline
#+begin_src emacs-lisp
-(use-package outline
+(use-feature outline
:defer t
:hook (prog-mode . outline-minor-mode)
:bind
("s" . outline-show-subtree)))
#+end_src
-* COMMENT Borg's =layer/essentials=
-:PROPERTIES:
-:CUSTOM_ID: borg-essentials
-:END:
-
-TODO: break this giant source block down into individual org sections.
+*** Dired
#+begin_src emacs-lisp
-(use-package dash
- :config (dash-enable-font-lock))
-
-(use-package diff-hl
- :config
- (setq diff-hl-draw-borders nil)
- (global-diff-hl-mode)
- (add-hook 'magit-post-refresh-hook 'diff-hl-magit-post-refresh t))
-
-(use-package ls-lisp
+(use-feature ls-lisp
:custom (ls-lisp-dirs-first t))
-(use-package dired
+(use-feature dired
:defer t
:config
(setq dired-listing-switches "-alh"
(interactive)
(a/dired-start-process "zathura"))))
:hook (dired-mode . dired-hide-details-mode))
+#+end_src
+
+*** Borg's =layer/essentials=
+:PROPERTIES:
+:CUSTOM_ID: borg-essentials
+:END:
+
+TODO: break this giant source block down into individual org sections.
+
+#+begin_src emacs-lisp
+(use-package dash
+ :config (dash-enable-font-lock))
-(use-package eldoc
+(use-feature eldoc
:when (version< "25" emacs-version)
:config (global-eldoc-mode))
-(use-package help
+(use-feature help
:defer t
:config
(temp-buffer-resize-mode)
(progn ; `isearch'
(setq isearch-allow-scroll t))
-(use-package lisp-mode
+(use-feature lisp-mode
:config
(add-hook 'emacs-lisp-mode-hook 'outline-minor-mode)
(add-hook 'emacs-lisp-mode-hook 'reveal-mode)
(setq indent-tabs-mode nil))
(add-hook 'lisp-interaction-mode-hook #'indent-spaces-mode))
-(use-package man
+(use-feature man
:defer t
:config (setq Man-width 80))
-(use-package paren
+(use-feature paren
:config (show-paren-mode))
-(use-package prog-mode
+(use-feature prog-mode
:config (global-prettify-symbols-mode)
(defun indicate-buffer-boundaries-left ()
(setq indicate-buffer-boundaries 'left))
(add-hook 'prog-mode-hook #'indicate-buffer-boundaries-left))
-(use-package recentf
- :defer 0.5
- :config
- (add-to-list 'recentf-exclude "^/\\(?:ssh\\|su\\|sudo\\)?:")
- (setq recentf-max-saved-items 40))
-
-(use-package savehist
- :config (savehist-mode))
-
-(use-package saveplace
- :when (version< "25" emacs-version)
- :config (save-place-mode))
-
-(use-package simple
+(use-feature simple
:config (column-number-mode))
(progn ; `text-mode'
(add-hook 'text-mode-hook #'indicate-buffer-boundaries-left)
(add-hook 'text-mode-hook #'abbrev-mode))
-(use-package tramp
+(use-feature tramp
:defer t
:config
(add-to-list 'tramp-default-proxies-alist '(nil "\\`root\\'" "/ssh:%h:"))
#+end_src
-* COMMENT Editing
+* Editing
:PROPERTIES:
:CUSTOM_ID: editing
:END:
-** Company
+** =diff-hl=
+
+Highlight uncommitted changes in the left fringe.
+
+#+begin_src emacs-lisp
+(use-package diff-hl
+ :config
+ (setq diff-hl-draw-borders nil)
+ (global-diff-hl-mode)
+ :hook (magit-post-refresh . diff-hl-magit-post-refresh))
+#+end_src
+
+** =savehist=
+
+Save minibuffer history.
+
+#+begin_src emacs-lisp
+(use-feature savehist
+ :config (savehist-mode))
+#+end_src
+
+** =saveplace=
+
+Automatically save place in each file.
+
+#+begin_src emacs-lisp
+(use-feature saveplace
+ :when (version< "25" emacs-version)
+ :config (save-place-mode))
+#+end_src
+
+** COMMENT Company
#+begin_src emacs-lisp
(use-package company
Also see [[https://www.emacswiki.org/emacs/rebox2][rebox2]].
+** orgalist
+
+#+begin_src emacs-lisp
+(use-package orgalist
+ :after message
+ :hook (message-mode . orgalist-mode))
+#+end_src
+
** typo.el
#+begin_src emacs-lisp