*** =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
(setq-default cursor-type 'bar)
#+end_src
+*** Allow scrolling in Isearch
+
+#+begin_src emacs-lisp
+(setq isearch-allow-scroll t)
+#+end_src
+
** Bindings
#+begin_src emacs-lisp
'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
-(use-package eldoc
- :when (version< "25" emacs-version)
- :config (global-eldoc-mode))
+*** Help
-(use-package help
+#+begin_src emacs-lisp
+(use-feature help
:defer t
:config
(temp-buffer-resize-mode)
(setq help-window-select t))
+#+end_src
-(progn ; `isearch'
- (setq isearch-allow-scroll t))
+*** Tramp
-(use-package lisp-mode
+#+begin_src emacs-lisp
+(use-feature tramp
+ :defer t
:config
- (add-hook 'emacs-lisp-mode-hook 'outline-minor-mode)
- (add-hook 'emacs-lisp-mode-hook 'reveal-mode)
- (defun indent-spaces-mode ()
- (setq indent-tabs-mode nil))
- (add-hook 'lisp-interaction-mode-hook #'indent-spaces-mode))
+ (add-to-list 'tramp-default-proxies-alist '(nil "\\`root\\'" "/ssh:%h:"))
+ (add-to-list 'tramp-default-proxies-alist '("localhost" nil nil))
+ (add-to-list 'tramp-default-proxies-alist
+ (list (regexp-quote (system-name)) nil nil)))
+#+end_src
-(use-package man
+*** Dash
+
+#+begin_src emacs-lisp
+(use-package dash
:defer t
- :config (setq Man-width 80))
+ :config (dash-enable-font-lock))
+#+end_src
-(use-package paren
- :config (show-paren-mode))
+* Editing
+:PROPERTIES:
+:CUSTOM_ID: editing
+:END:
-(use-package 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))
+** =diff-hl=
-(use-package recentf
- :defer 0.5
+Highlight uncommitted changes in the left fringe.
+
+#+begin_src emacs-lisp
+(use-package diff-hl
:config
- (add-to-list 'recentf-exclude "^/\\(?:ssh\\|su\\|sudo\\)?:")
- (setq recentf-max-saved-items 40))
+ (setq diff-hl-draw-borders nil)
+ (global-diff-hl-mode)
+ :hook (magit-post-refresh . diff-hl-magit-post-refresh))
+#+end_src
+
+** ElDoc
+
+Display Lisp objects at point in the echo area.
-(use-package savehist
+#+begin_src emacs-lisp
+(use-feature eldoc
+ :when (version< "25" emacs-version)
+ :config (global-eldoc-mode))
+#+end_src
+
+** paren
+
+Highlight matching parens.
+
+#+begin_src emacs-lisp
+(use-feature paren
+ :config (show-paren-mode))
+#+end_src
+
+** =savehist=
+
+Save minibuffer history.
+
+#+begin_src emacs-lisp
+(use-feature savehist
:config (savehist-mode))
+#+end_src
-(use-package saveplace
+** =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
-(use-package simple
- :config (column-number-mode))
+** =prog-mode=
-(progn ; `text-mode'
- (add-hook 'text-mode-hook #'indicate-buffer-boundaries-left)
- (add-hook 'text-mode-hook #'abbrev-mode))
+#+begin_src emacs-lisp
+(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))
+#+end_src
-(use-package tramp
- :defer t
- :config
- (add-to-list 'tramp-default-proxies-alist '(nil "\\`root\\'" "/ssh:%h:"))
- (add-to-list 'tramp-default-proxies-alist '("localhost" nil nil))
- (add-to-list 'tramp-default-proxies-alist
- (list (regexp-quote (system-name)) nil nil)))
+** =text-mode=
+#+begin_src emacs-lisp
+(use-feature text-mode
+ :hook ((text-mode . indicate-buffer-boundaries-left)
+ (text-mode . abbrev-mode)))
#+end_src
-* COMMENT Editing
-:PROPERTIES:
-:CUSTOM_ID: editing
-:END:
+** =lisp-mode=
+
+#+begin_src emacs-lisp
+(use-feature lisp-mode
+ :config
+ (add-hook 'emacs-lisp-mode-hook 'outline-minor-mode)
+ (add-hook 'emacs-lisp-mode-hook 'reveal-mode)
+ (defun indent-spaces-mode ()
+ (setq indent-tabs-mode nil))
+ (add-hook 'lisp-interaction-mode-hook #'indent-spaces-mode))
+#+end_src
** Company
(global-company-mode t))
#+end_src
-* COMMENT Syntax and spell checking
-:PROPERTIES:
-:CUSTOM_ID: syntax-spell-checking
-:END:
+** Flycheck
#+begin_src emacs-lisp
(use-package flycheck
:CUSTOM_ID: emacs-enhancements
:END:
+** man
+
+#+begin_src emacs-lisp
+(use-feature man
+ :defer t
+ :config (setq Man-width 80))
+#+end_src
+
** [[https://github.com/justbur/emacs-which-key][which-key]]
#+begin_quote
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