7.3 KiB
Emacs Custom Configuration File
- Preface
- Doom Startup Configuration
- General Configuration
- Theme Configuration
- Org Mode Configuration
- Remote Aliases
Preface
This document contains the fundamental elements of my Emacs configuration. Changes made to this file will reflect in init.el.
Doom Startup Configuration
I need to test that I can remove this still.
;; Some functionality uses this to identify you, e.g. GPG configuration, email
;; clients, file templates and snippets.
(setq user-full-name "John Doe"
user-mail-address "john@doe.com")
;; There are two ways to load a theme. Both assume the theme is installed and
;; available. You can either set `doom-theme' or manually load a theme with the
;; `load-theme' function. This is the default:
(setq doom-theme 'modus-vivendi)
;; If you use `org' and don't want your org files in the default location below,
;; change `org-directory'. It must be set before org loads!
(setq org-directory "~/org/")
;; This determines the style of line numbers in effect. If set to `nil', line
;; numbers are disabled. For relative line numbers, set this to `relative'.
(setq display-line-numbers-type t)
General Configuration
User Interface
;; Set visible bell
(setq visible-bell t)
(dolist (mode '(org-mode-hook
term-mode-hook
shell-mode-hook
eshell-mode-hook))
(add-hook mode (lambda () (display-line-numbers-mode 0))))
Theme Configuration
I am using Modus Themes, by Protesilaos Stavrou as they are minimal, pleasant to the eye, and conform to accessibility standards as outlined in WCAG AAA.
Modus Theme Configuration
;; Configure Modus theme
(use-package modus-themes
:init
(setq modus-themes-italic-constructs t
modus-themes-bold-constructs nil
modus-themes-region '(accented bg-only no-extend)
modus-themes-org-blocks 'greyscale
modus-themes-paren-match 'intense
modus-themes-mixed-fonts t)
;; Load the theme files before enabling a theme
(modus-themes-load-themes)
:config
(modus-themes-load-vivendi) ;; OR (modus-themes-load-vivendi)
:bind ("<f5>" . modus-themes-toggle))
Font Configuration
Using Fira Code + Fira Code Retina.
;; Set fonts
(set-face-attribute 'default nil :font "Fira Code" :height 125 :weight 'medium)
(set-face-attribute 'variable-pitch nil :font "Fira Sans" :height 1.0 :weight 'regular)
(set-face-attribute 'fixed-pitch nil :font "Fira Code" :height 1.0 :weight 'medium)
Org Mode Configuration
Org Directory
;; Set agenda files
(setq org-agenda-files
'("~/org/planner.org"))
General Configuration
(defun rymacs/org-mode-setup ()
(org-indent-mode)
(variable-pitch-mode 1)
(visual-line-mode 1))
Center Org Buffers
(defun rymacs/org-mode-visual-fill ()
(setq visual-fill-column-width 100
visual-fill-column-center-text t)
(visual-fill-column-mode 1))
(use-package visual-fill-column
:hook (org-mode . rymacs/org-mode-visual-fill))
Set Fonts and Symbols
Here we are setting general font configuration in order to make editing in org mode a bit more streamlined to look at.
;; Change dashes to dots
(defun rymacs/org-font-setup ()
(font-lock-add-keywords 'org-mode
'(("^ *\\([-]\\) "
(0 (prog1 () (compose-region (match-beginning 1) (match-end 1) "•"))))))
;; Set faces for heading levels
(dolist (face '((org-level-1 . 1.2)
(org-level-2 . 1.1)
(org-level-3 . 1.05)
(org-level-4 . 1.0)
(org-level-5 . 1.1)
(org-level-6 . 1.1)
(org-level-7 . 1.1)
(org-level-8 . 1.1)))
(set-face-attribute (car face) nil :font "Cantarell" :weight 'regular :height (cdr face)))
;; Ensure that anything that should be fixed-pitch in Org files appears that way
(set-face-attribute 'org-block nil :foreground nil :inherit 'fixed-pitch)
(set-face-attribute 'org-code nil :inherit '(shadow fixed-pitch))
(set-face-attribute 'org-table nil :inherit '(shadow fixed-pitch))
(set-face-attribute 'org-verbatim nil :inherit '(shadow fixed-pitch))
(set-face-attribute 'org-special-keyword nil :inherit '(font-lock-comment-face fixed-pitch))
(set-face-attribute 'org-meta-line nil :inherit '(font-lock-comment-face fixed-pitch))
(set-face-attribute 'org-checkbox nil :inherit 'fixed-pitch))
;; Change ellipsis to triangles
(use-package org
:hook (org-mode . rymacs/org-mode-setup)
:config
(setq org-ellipsis " ▾")
(rymacs/org-font-setup))
;; Change default pretty bullets to circles
(use-package org-bullets
:after org
:hook (org-mode . org-bullets-mode)
:custom
(org-bullets-bullet-list '("◉" "○" "●" "○" "●" "○" "●")))
Visual Fill Mode
(defun rymacs/org-mode-visual-fill ()
(setq visual-fill-column-width 100
visual-fill-column-center-text t)
(visual-fill-column-mode 1))
(use-package visual-fill-column
:hook (org-mode . rymacs/org-mode-visual-fill))
Org Babel
Org Babel allows us to evaluate source code blocks within org mode. With this functionality, we can tell org babel to insert the content of the source block codes into any file specified by using the org-babel-tangle function.
Babel Languages
;; Load languages for babel code blocks.
(with-eval-after-load 'org
(org-babel-do-load-languages
'org-babel-load-languages
'((emacs-lisp . t)
(python .t)))
(push '("conf-unix" . conf-unix) org-src-lang-modes))
Soure Block Creation Shortcuts
Here we use a package called org-tempo.
;; Make shortcuts to easily create babel source code blocks.
(with-eval-after-load 'org
(require 'org-tempo)
(add-to-list 'org-structure-template-alist '("sh" . "src shell"))
(add-to-list 'org-structure-template-alist '("el" . "src emacs-lisp"))
(add-to-list 'org-structure-template-alist '("py" . "src python")))
Babel => Configuration File Automation Hook
TODO: This needs to be fixed, or find an equiv. Since we don't want to have to manually use the org-babel-tangle function everytime we make changes to the corresponding .org file, we create an automation hook that executes the function every time we save.
;; ;; Define a function that automatically executes rymacs/org-babel-tangle-config (a wrapper around org-babel-tangle) when saving this file.
;; (defun rymacs/org-babel-tangle-config ()
;; (when (string-equal (file-name-directory (buffer-file-name))
;; (expand-file-name "~/.dotfiles/.config/doom"))
;; (let ((org-confirm-babel-evaluate nil))
;; (org-babel-tangle))))
;; (add-hook 'org-mode-hook (lambda () (add-hook 'after-save-hook #'rymacs/org-babel-tangle-config)))
Remote Aliases
(defun connect-borg ()
(interactive)
(dired "/ssh:root@207.66.177.26#46668:/"))