.gitignore | ||
config.org | ||
init.el | ||
packages.el | ||
README.org |
Table of Contents TOC
Misc
Enable lexical binding, of course…
;;; -*- lexical-binding: t; -*-
(setq enable-dir-local-variables nil)
Appearance
Font
Doom exposes five (optional) variables for controlling fonts in Doom. Here are the three important ones:
doom-font
doom-variable-pitch-font
doom-big-font
– used fordoom-big-font-mode
; use this for presentations or streaming.
They all accept either a font-spec, font string (Input Mono-12
), or xlfd font
string. You generally only need these two:
(setq doom-font (font-spec :family "Fira Mono Medium" :size 12))
Theme
A list of all doom themes can be found here:
https://github.com/hlissner/emacs-doom-themes
(setq doom-theme 'doom-one)
Line numbers
Possible values of display-line-numbers-type
are nil
, t
, and 'relative
.
(setq display-line-numbers-type 'relative)
Programming
LSP
Doom disables documentation display in child frames by default; I like those, so re-enable them, and reset the defaults.
(after! lsp-ui
(setq lsp-ui-doc-max-width 150)
(setq lsp-ui-doc-max-height 30)
(setq lsp-ui-doc-enable t))
Rust
By default rustic-mode
uses rls
, I want to use rust-analyzer
instead.
(setq rustic-lsp-server 'rust-analyzer)
I don't want to enable format-on-save globally in Doom, but having it in rust is nice.
(after! rustic
(setq rustic-format-trigger 'on-save))
C/C++
Setup the default format for C/C++ editing.
(setq c-default-style "gnu")
(setq c-basic-offset 2)
Flycheck never works well for C / C++ without configuration or a CMake build system. Let's disable it.
(after! flycheck
(setq flycheck-global-modes '(not c-mode c++-mode)))
Org mode
Agenda setup
Here are the keywords I'm using to track task progress. I'm also making use of some automatic state changes.
keyword | meaning |
---|---|
TODO |
Self explanatory |
WAITING |
I'm probably waiting on someone to do something before I can act on this |
DONE |
This task is finished, no longer displayed in the agenda |
CANCELLED |
This task isn't finished but is no longer relevant |
(after! org
(setq org-todo-keywords
'((sequence
"TODO(t)"
"WAITING(w@/!)"
"|"
"DONE(d!)"
"CANCELLED(c@/!)")
(sequence
"[ ](T)"
"[-](S)"
"[?](W)"
"|"
"[X](D)"))))
Of course I also need to setup capture templates:
The first one just prompts me for a new task to add to my inbox, I can then refile them where I want later.
The second one exists because I like to keep a separate list of articles / papers / books to read.
(after! org
(setq org-capture-templates
'(("t" "Task" entry (file "inbox.org")
"* TODO %?")
("r" "Reading" entry (file "reading.org")
"* TODO %x"))))
All these tasks, once captured, are then centralized in my agenda view.
I'm using multiple categories to organize tasks, depending on their triage / status (inspired by https://blog.jethro.dev/posts/org_mode_workflow_preview/).
(after! org-agenda
(setq org-agenda-custom-commands
'((" " "Agenda"
((agenda ""
((org-agenda-span 'day)
(org-agenda-start-day nil)
(org-deadline-warning-days 365)))
(todo "TODO"
((org-agenda-overriding-header "Triage")
(org-agenda-files '("~/org/inbox.org"))))
(todo "TODO"
((org-agenda-overriding-header "School")
(org-agenda-files '(
"~/org/image.org"
"~/org/rdi.org"
))))
(todo "TODO"
((org-agenda-overriding-header "Tasks")
(org-agenda-files '("~/org/tasks.org"))
(org-agenda-skip-function '(org-agenda-skip-entry-if 'deadline
'scheduled))))
(todo "TODO"
((org-agenda-files '("~/org/reading.org"))
(org-agenda-overriding-header "To Read")))
)))))
I want the default agenda view to be a weekly view, with a log of what I've done during the day.
(after! org-agenda
(setq org-agenda-span 'week)
(setq org-agenda-start-on-weekday 1)
(setq org-agenda-start-with-log-mode '(clock)))
I also remove the block separators in the agenda view:
(after! org-agenda
(setq org-agenda-block-separator ""))
Journal
For org-journal I want weekly entries (the default is 'daily
).
(after! org-journal
(setq org-journal-date-format "%A (%d/%m/%Y)")
(setq org-journal-file-type 'weekly)
(setq org-journal-file-format "%Y-%m-%d.org")
;; see `org-journal-dir-and-format->regex' documentation
(setq org-journal-file-pattern (org-journal-dir-and-format->regex
org-journal-dir org-journal-file-format))
(add-to-list 'auto-mode-alist (cons org-journal-file-pattern 'org-journal-mode)))
Org IDs
Org can link to entries using UUIDs, but we need the module to be loaded for links to work:
(add-to-list 'org-modules 'org-id)
Roam
Setup for org-roam.
First, set a directory where org-roam
will index things.
(setq org-roam-directory (expand-file-name "notes/" org-directory))
Customize the capture templates:
- the first one is the default one, I just removed the timestamp from the file title.
- the second one I use to create new entries about website links, blog posts,
articles… The
%x
in the template is replaced by the content of my X clipboard, so I just have to copy the website URL before capturing it.
(after! org-roam
(set-face-attribute 'org-roam-link nil :foreground "#CCCC60")
(setq org-roam-capture-templates
'(("d" "default" plain (function org-roam-capture--get-point)
"%?"
:file-name "${slug}"
:head "#+TITLE: ${title}\n"
:unnarrowed t)
("w" "website" plain (function org-roam-capture--get-point)
""
:file-name "websites/${slug}"
:head "#+TITLE: ${title}\n#+ROAM_KEY: %x\n"
:unnarrowed t))))
Doom specific
Doom replaces the default tab behavior on headings, this restores the default one. Taken from here.
(after! evil-org
(remove-hook 'org-tab-first-hook #'+org-cycle-only-current-subtree-h))