Use literate config

This commit is contained in:
Leni Ven 2023-02-05 01:43:01 -08:00
parent de0fade40f
commit f2d0130fe0
4 changed files with 361 additions and 251 deletions

2
home/doomemacs/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
config.el
packages.el

View File

@ -1,205 +1,16 @@
#+TITLE: Doom Emacs Configuration File
Execute ~doom sync~ after modifying this file to tangle it to ~config.el~.
The following block of comments is from the default configuration.
#+begin_src emacs-lisp :tangle no
;;; $DOOMDIR/config.el -*- lexical-binding: t; -*-
;; Place your private configuration here! Remember, you do not need to run 'doom
;; sync' after modifying this file!
;; Some functionality uses this to identify you, e.g. GPG configuration, email
;; clients, file templates and snippets. It is optional.
(setq user-full-name "Leni Ven"
user-mail-address "leniv@stanford.edu")
;; Key bindings
(setq doom-localleader-key ",") ; Spacemacs like comma major mode
(map! :leader ; "SPC b 0" kills window and buffer
:desc "Kill buffer and window"
"b 0" #'kill-buffer-and-window)
(map! :leader ; "SPC :" executes command
:desc "Execute shell command"
"!" #'shell-command)
(map! :leader ; "SPC SPC" becomes M-x
:desc "Execute extended command (emacs M-x)"
"SPC" #'execute-extended-command)
(map! :leader ; "SPC :" becomes M-:
:desc "Evaluate expression (emacs M-:)"
":" #'eval-expression)
(after! magit
(map! :localleader
(:map git-commit-mode-map
"c" #'with-editor-finish)
(:map git-commit-mode-map
"q" #'with-editor-cancel)
))
(after! org
(map! :localleader
(:map org-mode-map
"X" #'org-latex-preview)
))
(setq
;; Doom exposes five (optional) variables for controlling fonts in Doom:
;;
;; - `doom-font' -- the primary font to use
;; - `doom-variable-pitch-font' -- a non-monospace font (where applicable)
;; - `doom-big-font' -- used for `doom-big-font-mode'; use this for
;; presentations or streaming.
;; - `doom-unicode-font' -- for unicode glyphs
;; - `doom-serif-font' -- for the `fixed-pitch-serif' face
;;
;; See 'C-h v doom-font' for documentation and more examples of what they
;; accept. For example:
;;
default-font "Source Code Pro"
default-font-size 14.0
;; If you or Emacs can't find your font, use 'M-x describe-font' to look
;; them up, `M-x eval-region' to execute elisp code, and 'M-x
;; doom/reload-font' to refresh your font settings. If Emacs still can't
;; find your font, it likely wasn't installed correctly. Font issues are
;; rarely Doom issues!
doom-font (font-spec
:family default-font
:size default-font-size
:weight 'semi-light)
doom-variable-pitch-font (font-spec
:family default-font
:size (+ default-font-size 1.0))
doom-unicode-font (font-spec
:family default-font
:size default-font-size)
;; 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:
doom-theme 'doom-lantern
;; 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'.
display-line-numbers-type 'relative)
;; Splash screen
(defun sun-position-banner ()
(let* (
(sunrise '(
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀"
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀"
"⠀⠀⠀⣤⣄⠀⠀⠀⠀⢾⡀⠀⠀⠸⠇⠀⠀⢀⡷⠀⠀⠀⠀⣠⣤⠀⠀⠀"
"⠀⠀⠀⠈⠻⣷⣄⠀⠀⠈⠁⠀⠀⣀⣀⠀⠀⠈⠁⠀⠀⣠⣾⠟⠁⠀⠀⠀"
"⠀⠀⠀⠀⠀⠈⠁⠀⠀⢀⣴⣾⣿⣿⣿⣿⣷⣦⡀⠀⠀⠈⠁⠀⠀⠀⠀⠀"
"⠀⠀⢠⣤⣀⠀⠀⠀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⠀⠀⠀⣀⣤⡄⠀⠀"
"⠀⠀⠀⠀⠁⠀⠀⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⠀⠀⠈⠀⠀⠀⠀"
"⢠⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⡄"
"⠈⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠁"))
(longest-line (apply #'max (mapcar #'length sunrise))))
(put-text-property
(point)
(dolist (line sunrise (point))
(insert (+doom-dashboard--center
+doom-dashboard--width
(concat line (make-string (max 0 (- longest-line (length line))) 32)))
"\n"))
'face 'doom-dashboard-banner)))
(setq +doom-dashboard-ascii-banner-fn #'sun-position-banner)
(global-display-line-numbers-mode)
;; Whitespace mode
(use-package! whitespace
:config
(setq
whitespace-style '(face tabs tab-mark spaces space-mark trailing newline newline-mark)
whitespace-line-column 80
whitespace-display-mappings
'(
(space-mark 32 [183] [46]) ; 32 SPACE 「 」, 183 MIDDLE DOT 「·」, 46 FULL STOP 「.」
(newline-mark 10 [172 10]) ; 10 LINE FEED, 172 Not Sign「¬」
(tab-mark 9 [10141 9] [92 9]) ; 9 TAB, 10141 Triangle-headed rightwards arrow 「➝」
))
(global-whitespace-mode +1)
)
(defun custom/common-program-hook ()
(setq
whitespace-style '(face spaces tabs newline trailing space-mark tab-mark newline-mark)
whitespace-line-column 80)
(display-fill-column-indicator-mode)
;;(whitespace-mode)
(setq
indent-tabs-mode t
indent-line-function 'tab-to-tab-stop
tab-width 2)
(indent-tabs-mode)
(smart-tabs-mode-enable)
)
(defun custom/common-richtext-hook ()
(setq whitespace-style '(face spaces tabs newline trailing space-mark tab-mark newline-mark))
(setq whitespace-line-column nil)
)
(defun custom/lisp-family-hook ()
(custom/common-program-hook)
(setq
indent-line-function 'tab-to-tab-stop
tab-width 4)
(indent-tabs-mode)
)
(add-hook 'text-mode-hook #'custom/common-richtext-hook)
(add-hook 'lisp-mode-hook #'custom/lisp-family-hook)
(add-hook 'lisp-data-mode-hook #'custom/lisp-family-hook)
(use-package! smart-tabs-mode
:config
(print! "Configuring smart-tabs-mode")
(smart-tabs-insinuate
'c 'c++
'java
'javascript))
(setq-default
indent-tabs-mode t
indent-line-function 'tab-to-tab-stop
tab-width 2)
;; 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/")
(after! format
(print! "Configuring (after! format ...)")
'(not
emacs-lisp-mode
sql-mode
tex-mode
latex-mode))
(after! flyspell
(print! "Configuring (after! flyspell ...)")
(setq flyspell-default-dictionary "english"))
(after! lsp-mode
(print! "Configuring (after! lsp-mode ...)")
(setq
lsp-headerline-breadcrumb-enable t
lsp-headerline-breadcrumb-enable-symbol-numbers nil
lsp-headerline-breadcrumb-segments '(symbols)
))
(use-package! lilypond-mode
:init
(print! "Initializing lilypond-mode")
(add-to-list 'auto-mode-alist '("\\.ly\\'" . LilyPond-mode))
:config
(add-hook 'LilyPond-mode-hook #'custom/common-program-hook)
)
;; LaTeX
(after! latex
(print! "Configuring (after! latex ...)")
(add-hook 'tex-mode-hook #'custom/common-program-hook)
(add-hook 'LaTeX-mode-hook #'custom/common-program-hook)
(setq-default TeX-electric-sub-and-superscript nil)
)
;; Whenever you reconfigure a package, make sure to wrap your config in an
;; `after!' block, otherwise Doom's defaults may override your settings. E.g.
;;
@ -231,3 +42,353 @@
;;
;; You can also try 'gd' (or 'C-c c d') to jump to their definition and see how
;; they are implemented.
#+end_src
* User specific settings
Some functionality uses this to identify you, e.g. GPG configuration, email
clients, file templates and snippets. It is optional. This could be changed to
rely on system environment variables.
#+begin_src emacs-lisp
(setq
user-full-name "Leni Ven"
user-mail-address "leniv@stanford.edu")
#+end_src
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!
#+begin_src emacs-lisp
(setq org-directory "~/org/")
#+end_src
* Interface
** Key Bindings
Modifications to the default key bindings
#+begin_src emacs-lisp
(setq doom-localleader-key ",") ; Spacemacs like comma major mode
(map! :leader ; "SPC b 0" kills window and buffer
:desc "Kill buffer and window"
"b 0" #'kill-buffer-and-window)
(map! :leader ; "SPC :" executes command
:desc "Execute shell command"
"!" #'shell-command)
(map! :leader ; "SPC SPC" becomes M-x
:desc "Execute extended command (emacs M-x)"
"SPC" #'execute-extended-command)
(map! :leader ; "SPC :" becomes M-:
:desc "Evaluate expression (emacs M-:)"
":" #'eval-expression)
(after! magit
(map! :localleader
(:map git-commit-mode-map
"c" #'with-editor-finish)
(:map git-commit-mode-map
"q" #'with-editor-cancel)
))
(after! org
(map! :localleader
(:map org-mode-map
"X" #'org-latex-preview)
))
#+end_src
** Font settings
Doom exposes five (optional) variables for controlling fonts in Doom:
- ~doom-font~ -- the primary font to use
- ~doom-variable-pitch-font~ -- a non-monospace font (where applicable)
- ~doom-big-font~ -- used for ~doom-big-font-mode~; use this for
presentations or streaming.
- ~doom-unicode-font~ -- for unicode glyphs
- ~doom-serif-font~ -- for the ~fixed-pitch-serif~ face
See ~C-h v doom-font~ for documentation and more examples of what they
accept.
If you or Emacs can't find your font, use ~M-x describe-font~ to look them up,
~M-x eval-region~ to execute ELisp code, and ~M-x doom/reload-font~ to refresh
your font settings. If Emacs still can't find your font, it likely wasn't
installed correctly. Font issues are rarely Doom issues!
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.
#+begin_src emacs-lisp
(setq
default-font "Source Code Pro"
default-font-size 14.0
doom-font (font-spec
:family default-font
:size default-font-size
:weight 'semi-light)
doom-variable-pitch-font (font-spec
:family default-font
:size (+ default-font-size 1.0))
doom-unicode-font (font-spec
:family default-font
:size default-font-size)
doom-theme 'doom-lantern)
#+end_src emacs-lisp
** Splash Screen
#+begin_src emacs-lisp
(defun sun-position-banner ()
(let* (
(sunrise '(
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀"
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀"
"⠀⠀⠀⣤⣄⠀⠀⠀⠀⢾⡀⠀⠀⠸⠇⠀⠀⢀⡷⠀⠀⠀⠀⣠⣤⠀⠀⠀"
"⠀⠀⠀⠈⠻⣷⣄⠀⠀⠈⠁⠀⠀⣀⣀⠀⠀⠈⠁⠀⠀⣠⣾⠟⠁⠀⠀⠀"
"⠀⠀⠀⠀⠀⠈⠁⠀⠀⢀⣴⣾⣿⣿⣿⣿⣷⣦⡀⠀⠀⠈⠁⠀⠀⠀⠀⠀"
"⠀⠀⢠⣤⣀⠀⠀⠀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⠀⠀⠀⣀⣤⡄⠀⠀"
"⠀⠀⠀⠀⠁⠀⠀⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⠀⠀⠈⠀⠀⠀⠀"
"⢠⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⡄"
"⠈⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠁"))
(longest-line (apply #'max (mapcar #'length sunrise))))
(put-text-property
(point)
(dolist (line sunrise (point))
(insert (+doom-dashboard--center
+doom-dashboard--width
(concat line (make-string (max 0 (- longest-line (length line))) 32)))
"\n"))
'face 'doom-dashboard-banner)))
(setq +doom-dashboard-ascii-banner-fn #'sun-position-banner)
#+end_src
* Display and Indentation Styles
** Line numbers
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~.
#+begin_src emacs-lisp
(setq display-line-numbers-type 'relative)
(global-display-line-numbers-mode)
#+end_src
** Whitespace mode
#+begin_src emacs-lisp
(use-package! whitespace
:config
(setq
whitespace-style '(face tabs tab-mark spaces space-mark trailing newline newline-mark)
whitespace-line-column 80
whitespace-display-mappings
'(
(space-mark 32 [183] [46]) ; 32 SPACE 「 」, 183 MIDDLE DOT 「·」, 46 FULL STOP 「.」
(newline-mark 10 [172 10]) ; 10 LINE FEED, 172 Not Sign「¬」
(tab-mark 9 [10141 9] [92 9]) ; 9 TAB, 10141 Triangle-headed rightwards arrow 「➝」
))
(global-whitespace-mode +1)
)
#+end_src
** Indentation Style Hooks
#+begin_src emacs-lisp
(defun custom/common-program-hook ()
(setq
whitespace-style '(face spaces tabs newline trailing space-mark tab-mark newline-mark)
whitespace-line-column 80)
(display-fill-column-indicator-mode)
;;(whitespace-mode)
(setq
indent-tabs-mode t
indent-line-function 'tab-to-tab-stop
tab-width 2)
(indent-tabs-mode)
(smart-tabs-mode-enable)
)
(defun custom/common-richtext-hook ()
(setq whitespace-style '(face spaces tabs newline trailing space-mark tab-mark newline-mark))
(setq whitespace-line-column nil)
)
(defun custom/lisp-family-hook ()
(custom/common-program-hook)
(setq
indent-line-function 'tab-to-tab-stop
tab-width 4)
(indent-tabs-mode)
)
(add-hook 'text-mode-hook #'custom/common-richtext-hook)
(add-hook 'lisp-mode-hook #'custom/lisp-family-hook)
(add-hook 'lisp-data-mode-hook #'custom/lisp-family-hook)
#+end_src
* Package-specific Settings
** Smart Tabs
#+begin_src emacs-lisp
(use-package! smart-tabs-mode
:config
(print! "Configuring smart-tabs-mode")
(smart-tabs-insinuate
'c 'c++
'java
'javascript))
(setq-default
indent-tabs-mode t
indent-line-function 'tab-to-tab-stop
tab-width 2)
#+end_src
** Format
#+begin_src emacs-lisp
(after! format
(print! "Configuring (after! format ...)")
'(not
emacs-lisp-mode
sql-mode ; Broken
;; tex related modes are broken
tex-mode
latex-mode
bibtex-mode
))
#+end_src
** Spell
#+begin_src emacs-lisp
(after! flyspell
(print! "Configuring (after! flyspell ...)")
(setq flyspell-default-dictionary "english"))
#+end_src
** LSP
File path is removed from breadcrumb since it is provided by ~doom-modeline~ and
since it clutters the header-line.
#+begin_src emacs-lisp
(after! lsp-mode
(print! "Configuring (after! lsp-mode ...)")
(setq
lsp-headerline-breadcrumb-enable t
lsp-headerline-breadcrumb-enable-symbol-numbers nil
lsp-headerline-breadcrumb-segments '(symbols)
))
#+end_src
** LilyPond
Add the necessary hooks for LilyPond mode.
#+begin_src emacs-lisp
(use-package! lilypond-mode
:init
(print! "Initializing LilyPond-mode")
(add-to-list 'auto-mode-alist '("\\.ly\\'" . LilyPond-mode))
:config
(add-hook 'LilyPond-mode-hook #'custom/common-program-hook)
)
#+end_src
** LaTeX
The target indentation style of ~LaTeX~ is as follows:
#+begin_src tex :tangle no
\begin{enumerate}[1.]
\item Some item 1. Note that item is not indented.
Item 1 continued. 1 level of indentation.
\item
\begin{tikzpicture}[
xscale=2,yscale=3
]
\node[dot] (x) at (0,0);
\node[dot] (y) at (0,1);
\draw (x) -- (y)
\node[midway,fill=white] {$f$};
\end{tikzpicture}
\end{enumerate}
#+end_src
#+begin_src emacs-lisp
(after! latex
(print! "Configuring (after! latex ...)")
(add-hook 'tex-mode-hook #'custom/common-program-hook)
(add-hook 'LaTeX-mode-hook #'custom/common-program-hook)
(setq-default TeX-electric-sub-and-superscript nil))
#+end_src
* Package Loading
These packages are loaded into ~packages.el~. The following comments are provided by default.
#+begin_src emacs-lisp :tangle no
;; -*- no-byte-compile: t; -*-
;;; $DOOMDIR/packages.el
;; To install a package with Doom you must declare them here and run 'doom sync'
;; on the command line, then restart Emacs for the changes to take effect -- or
;; use 'M-x doom/reload'.
;; To install SOME-PACKAGE from MELPA, ELPA or emacsmirror:
;(package! some-package)
;; To install a package directly from a remote git repo, you must specify a
;; `:recipe'. You'll find documentation on what `:recipe' accepts here:
;; https://github.com/radian-software/straight.el#the-recipe-format
;(package! another-package
; :recipe (:host github :repo "username/repo"))
;; If the package you are trying to install does not contain a PACKAGENAME.el
;; file, or is located in a subdirectory of the repo, you'll need to specify
;; `:files' in the `:recipe':
;(package! this-package
; :recipe (:host github :repo "username/repo"
; :files ("some-file.el" "src/lisp/*.el")))
;; If you'd like to disable a package included with Doom, you can do so here
;; with the `:disable' property:
;(package! builtin-package :disable t)
;; You can override the recipe of a built in package without having to specify
;; all the properties for `:recipe'. These will inherit the rest of its recipe
;; from Doom or MELPA/ELPA/Emacsmirror:
;(package! builtin-package :recipe (:nonrecursive t))
;(package! builtin-package-2 :recipe (:repo "myfork/package"))
;; Specify a `:branch' to install a package from a particular branch or tag.
;; This is required for some packages whose default branch isn't 'master' (which
;; our package manager can't deal with; see radian-software/straight.el#279)
;(package! builtin-package :recipe (:branch "develop"))
;; Use `:pin' to specify a particular commit to install.
;(package! builtin-package :pin "1a2b3c4d5e")
;; Doom's packages are pinned to a specific commit and updated from release to
;; release. The `unpin!' macro allows you to unpin single packages...
;(unpin! pinned-package)
;; ...or multiple packages
;(unpin! pinned-package another-pinned-package)
;; ...Or *all* packages (NOT RECOMMENDED; will likely break things)
;(unpin! t)
#+end_src
#+begin_src emacs-lisp :tangle packages.el
(package! whitespace)
(package! smart-tabs-mode)
#+end_src

View File

@ -190,5 +190,5 @@
;;twitter ; twitter client https://twitter.com/vnought
:config
;;literate
literate
(default +bindings +smartparens))

View File

@ -1,53 +0,0 @@
;; -*- no-byte-compile: t; -*-
;;; $DOOMDIR/packages.el
;; To install a package with Doom you must declare them here and run 'doom sync'
;; on the command line, then restart Emacs for the changes to take effect -- or
;; use 'M-x doom/reload'.
;; To install SOME-PACKAGE from MELPA, ELPA or emacsmirror:
;(package! some-package)
;; To install a package directly from a remote git repo, you must specify a
;; `:recipe'. You'll find documentation on what `:recipe' accepts here:
;; https://github.com/radian-software/straight.el#the-recipe-format
;(package! another-package
; :recipe (:host github :repo "username/repo"))
;; If the package you are trying to install does not contain a PACKAGENAME.el
;; file, or is located in a subdirectory of the repo, you'll need to specify
;; `:files' in the `:recipe':
;(package! this-package
; :recipe (:host github :repo "username/repo"
; :files ("some-file.el" "src/lisp/*.el")))
;; If you'd like to disable a package included with Doom, you can do so here
;; with the `:disable' property:
;(package! builtin-package :disable t)
;; You can override the recipe of a built in package without having to specify
;; all the properties for `:recipe'. These will inherit the rest of its recipe
;; from Doom or MELPA/ELPA/Emacsmirror:
;(package! builtin-package :recipe (:nonrecursive t))
;(package! builtin-package-2 :recipe (:repo "myfork/package"))
;; Specify a `:branch' to install a package from a particular branch or tag.
;; This is required for some packages whose default branch isn't 'master' (which
;; our package manager can't deal with; see radian-software/straight.el#279)
;(package! builtin-package :recipe (:branch "develop"))
;; Use `:pin' to specify a particular commit to install.
;(package! builtin-package :pin "1a2b3c4d5e")
;; Doom's packages are pinned to a specific commit and updated from release to
;; release. The `unpin!' macro allows you to unpin single packages...
;(unpin! pinned-package)
;; ...or multiple packages
;(unpin! pinned-package another-pinned-package)
;; ...Or *all* packages (NOT RECOMMENDED; will likely break things)
;(unpin! t)
(package! whitespace)
(package! smart-tabs-mode)