269 lines
7.2 KiB
Org Mode
269 lines
7.2 KiB
Org Mode
#+title: Emacs Custom Configuration File
|
|
#+PROPERTY: header-args:emacs-lisp :tangle /home/ry/.dotfiles/.config/emacs/init.el
|
|
|
|
* Preface
|
|
|
|
This document contains the fundamental elements of my Emacs configuration. Changes made to this file will reflect in init.el.
|
|
|
|
* Table of Contents
|
|
:PROPERTIES:
|
|
:TOC: :include all :ignore this
|
|
:END:
|
|
|
|
* General Configuration
|
|
|
|
** Keep Folders Clean
|
|
|
|
Emacs package configuration files aren't standardized and as a result sometimes packages litter the emacs config folder. no-littering ensures that packages are kept organized.
|
|
|
|
#+begin_src emacs-lisp
|
|
|
|
;; Keep emacs folder tidy.
|
|
(use-package no-littering)
|
|
|
|
#+end_src
|
|
|
|
** User Interface
|
|
|
|
#+begin_src emacs-lisp
|
|
|
|
;; Disables the doom splash screen
|
|
(setq inhibit-startup-message t)
|
|
(set-fringe-mode 10)
|
|
|
|
;; scroll 1 line at a time
|
|
(setq scroll-step 1)
|
|
|
|
;; Set visible bell
|
|
(setq visible-bell t)
|
|
|
|
(dolist (mode '(org-mode-hook
|
|
shell-mode-hook))
|
|
(add-hook mode (lambda () (display-line-numbers-mode 0))))
|
|
|
|
#+end_src
|
|
|
|
* Theme Configuration
|
|
|
|
I am using [[https://protesilaos.com/modus-themes/][Modus Themes]], by [[https://protesilaos.com/][Protesilaos Stavrou]] as they are minimal, pleasant to the eye, and conform to accessibility standards as outlined in [[https://www.w3.org/WAI/WCAG2AAA-Conformance][WCAG AAA]].
|
|
|
|
** Modus Theme Configuration
|
|
|
|
#+begin_src emacs-lisp
|
|
|
|
;; 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))
|
|
|
|
#+end_src
|
|
|
|
** Font Configuration
|
|
|
|
Using [[https://github.com/tonsky/FiraCode][Fira Code]] + Fira Code Retina.
|
|
|
|
#+begin_src emacs-lisp
|
|
|
|
;; 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)
|
|
|
|
#+end_src
|
|
|
|
* Org Mode Configuration
|
|
|
|
** Org Directory
|
|
|
|
#+begin_src emacs-lisp
|
|
|
|
;; Set agenda files
|
|
(setq org-agenda-files
|
|
'("~/org/planner.org"))
|
|
|
|
|
|
#+end_src
|
|
|
|
#+RESULTS:
|
|
| ~/org/planner.org |
|
|
|
|
** General Configuration
|
|
|
|
#+begin_src emacs-lisp
|
|
|
|
(defun rymacs/org-mode-setup ()
|
|
(org-indent-mode)
|
|
(variable-pitch-mode 1)
|
|
(visual-line-mode 1))
|
|
|
|
#+end_src
|
|
|
|
|
|
** Center Org Buffers
|
|
|
|
#+begin_src emacs-lisp
|
|
|
|
(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))
|
|
|
|
#+end_src
|
|
|
|
** 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.
|
|
|
|
#+begin_src emacs-lisp
|
|
|
|
;; 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 '("◉" "○" "●" "○" "●" "○" "●")))
|
|
|
|
#+end_src
|
|
|
|
** Visual Fill Mode
|
|
|
|
#+begin_src emacs-lisp
|
|
|
|
(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))
|
|
|
|
#+end_src
|
|
|
|
** 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
|
|
|
|
#+begin_src emacs-lisp
|
|
|
|
;; 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))
|
|
|
|
#+end_src
|
|
|
|
|
|
*** Soure Block Creation Shortcuts
|
|
|
|
Here we use a package called org-tempo.
|
|
|
|
#+begin_src emacs-lisp
|
|
|
|
;; 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")))
|
|
|
|
#+end_src
|
|
|
|
|
|
*** 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.
|
|
|
|
#+begin_src emacs-lisp
|
|
|
|
;; ;; 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)))
|
|
|
|
#+end_src
|
|
|
|
* Remote Aliases
|
|
|
|
#+begin_src emacs-lisp
|
|
|
|
(defun connect-borg ()
|
|
(interactive)
|
|
(dired "/ssh:root@207.66.177.26#46668:/"))
|
|
|
|
#+end_src
|
|
|
|
|
|
* Change Auto-Save Directory
|
|
|
|
#+begin_src emacs-lisp
|
|
|
|
(add-to-list 'backup-directory-alist
|
|
(cons "." "~/.dotfiles/.config/emacs/backup/"))
|
|
(customize-set-variable
|
|
'tramp-backup-directory-alist backup-directory-alist)
|
|
|
|
(setq tramp-auto-save-directory "~/.dotfiles/.config/emacs/remote-backups/")
|
|
|
|
#+end_src
|