Antoine Martin
772d3e4e69
The previous solution worked but it would sometimes reset to its default value of 4, surely because of another mode loading and resetting it. This should fix it for good. |
||
---|---|---|
.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 "Input Mono Narrow" :size 12 :style 'regular))
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)
Battery indicator
I'm on a laptop, so let's display my battery in the modeline:
(display-battery-mode 1)
Current line
Always highlight the current line:
(global-hl-line-mode +1)
Programming
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.
(add-hook! (c-mode c++-mode)
(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"
:immediate-finish t))))
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")))
(todo "TODO"
((org-agenda-files '("~/org/project.org"))
(org-agenda-overriding-header "Personal projects")))
)))))
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))
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))