2020-04-10 17:40:46 +02:00
* Table of Contents :TOC:
- [[#misc ][Misc ]]
- [[#appearance ][Appearance ]]
- [[#font ][Font ]]
- [[#theme ][Theme ]]
- [[#line-numbers ][Line numbers ]]
2020-04-15 09:52:00 +02:00
- [[#battery-indicator ][Battery indicator ]]
2020-04-10 17:40:46 +02:00
- [[#programming ][Programming ]]
- [[#rust ][Rust ]]
- [[#cc ][C/C++ ]]
2020-04-10 18:35:06 +02:00
- [[#org-mode ][Org mode ]]
2020-04-27 23:41:49 +02:00
- [[#directory ][Directory ]]
2020-04-11 16:59:02 +02:00
- [[#agenda-setup ][Agenda setup ]]
2020-04-12 20:51:22 +02:00
- [[#org-ids ][Org IDs ]]
2020-04-12 22:50:39 +02:00
- [[#roam ][Roam ]]
2020-05-14 00:52:30 +02:00
- [[#export-backends ][Export backends ]]
2020-04-11 16:59:02 +02:00
- [[#doom-specific ][Doom specific ]]
2020-04-10 17:40:46 +02:00
2020-04-10 17:40:18 +02:00
* Misc
Enable lexical binding, of course...
#+BEGIN_SRC emacs-lisp
;;; -*- lexical-binding: t; -* -
#+END_SRC
#+BEGIN_SRC emacs-lisp
(setq enable-dir-local-variables nil)
#+END_SRC
2020-04-10 16:57:07 +02:00
* 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 for =doom-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:
#+BEGIN_SRC emacs-lisp
2020-04-21 22:03:44 +02:00
(setq doom-font
(font-spec :family "Input Mono Narrow" :size 12 :style 'regular))
2020-04-10 16:57:07 +02:00
#+END_SRC
** Theme
A list of all doom themes can be found here:
https://github.com/hlissner/emacs-doom-themes
#+BEGIN_SRC emacs-lisp
2020-05-15 21:12:51 +02:00
(setq doom-theme 'doom-one)
2020-04-10 16:57:07 +02:00
#+END_SRC
** Line numbers
Possible values of =display-line-numbers-type= are =nil= , =t= , and ='relative= .
#+BEGIN_SRC emacs-lisp
2020-05-10 00:28:43 +02:00
(setq display-line-numbers-type nil)
2020-04-10 16:57:07 +02:00
#+END_SRC
2020-04-15 09:52:00 +02:00
** Battery indicator
I'm on a laptop, so let's display my battery in the modeline:
#+BEGIN_SRC emacs-lisp
(display-battery-mode 1)
#+END_SRC
2020-04-10 16:57:07 +02:00
* Programming
** Rust
By default =rustic-mode= uses =rls= , I want to use =rust-analyzer= instead.
#+BEGIN_SRC emacs-lisp
(setq rustic-lsp-server 'rust-analyzer)
#+END_SRC
I don't want to enable format-on-save globally in Doom, but having it in rust is
nice.
#+BEGIN_SRC emacs-lisp
(after! rustic
(setq rustic-format-trigger 'on-save))
#+END_SRC
** C/C++
Setup the default format for C/C++ editing.
#+BEGIN_SRC emacs-lisp
2020-04-21 23:01:10 +02:00
(add-hook! (c-mode c++-mode)
(setq c-default-style "gnu")
(setq c-basic-offset 2))
2020-04-10 16:57:07 +02:00
#+END_SRC
2020-04-10 20:13:44 +02:00
Flycheck never works well for C / C++ without configuration or a CMake build
system. Let's disable it.
#+BEGIN_SRC emacs-lisp
(after! flycheck
(setq flycheck-global-modes '(not c-mode c++-mode)))
#+END_SRC
2020-04-10 18:35:06 +02:00
* Org mode
2020-04-27 23:41:49 +02:00
** Directory
Set a default directory for all my org-mode files.
#+BEGIN_SRC emacs-lisp
(setq org-directory "~/org/ ")
#+END_SRC
2020-04-11 16:59:02 +02:00
** Agenda setup
2020-04-11 23:03:07 +02:00
Here are the [[https://orgmode.org/manual/TODO-Extensions.html#TODO-Extensions ][keywords ]] I'm using to track task progress. I'm also making use of
some automatic [[https://orgmode.org/manual/Tracking-TODO-state-changes.html#Tracking-TODO-state-changes ][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 |
#+BEGIN_SRC emacs-lisp
(after! org
(setq org-todo-keywords
'((sequence
"TODO(t)"
"WAITING(w@/!)"
"|"
"DONE(d!)"
"CANCELLED(c@/!)")
(sequence
"[ ](T)"
"[-](S)"
"[?](W)"
"|"
"[X](D)"))))
#+END_SRC
Of course I also need to setup [[https://orgmode.org/manual/Capture-templates.html ][capture templates ]]:
The first one just prompts me for a new task to add to my inbox, I can then
[[https://orgmode.org/guide/Refile-and-Copy.html ][refile ]] them where I want later.
The second one exists because I like to keep a separate list of articles /
papers / books to read.
2020-04-10 18:35:06 +02:00
#+BEGIN_SRC emacs-lisp
2020-04-11 16:59:02 +02:00
(after! org
2020-04-11 23:03:07 +02:00
(setq org-capture-templates
'(("t" "Task" entry (file "inbox.org")
"* TODO %?")
("r" "Reading" entry (file "reading.org")
2020-04-16 23:25:23 +02:00
"* TODO %x"
:immediate-finish t))))
2020-04-11 23:03:07 +02:00
#+END_SRC
All these tasks, once captured, are then centralized in my [[https://orgmode.org/guide/Agenda-Views.html ][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/ ]]).
#+BEGIN_SRC emacs-lisp
(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"
2020-05-19 16:01:30 +02:00
))
(org-agenda-skip-function '(org-agenda-skip-entry-if 'deadline
'scheduled))))
2020-04-11 23:03:07 +02:00
(todo "TODO"
((org-agenda-overriding-header "Tasks")
(org-agenda-files '("~/org/tasks.org"))
(org-agenda-skip-function '(org-agenda-skip-entry-if 'deadline
'scheduled))))
2020-04-13 18:19:44 +02:00
(todo "TODO"
((org-agenda-files '("~/org/reading.org"))
(org-agenda-overriding-header "To Read")))
2020-04-13 23:32:30 +02:00
(todo "TODO"
((org-agenda-files '("~/org/project.org"))
(org-agenda-overriding-header "Personal projects")))
2020-04-11 23:03:07 +02:00
)))))
#+END_SRC
I want the default agenda view to be a weekly view, with a log of what I've done
during the day.
#+BEGIN_SRC emacs-lisp
(after! org-agenda
(setq org-agenda-span 'week)
(setq org-agenda-start-on-weekday 1)
(setq org-agenda-start-with-log-mode '(clock)))
#+END_SRC
I also remove the block separators in the agenda view:
#+BEGIN_SRC emacs-lisp
(after! org-agenda
(setq org-agenda-block-separator ""))
2020-04-10 18:35:06 +02:00
#+END_SRC
2020-04-10 18:52:52 +02:00
2020-05-12 10:48:34 +02:00
Let's enable the =org-habit= module:
#+BEGIN_SRC emacs-lisp
(add-to-list 'org-modules 'org-habit)
#+END_SRC
2020-04-12 20:51:22 +02:00
** Org IDs
Org can link to entries using UUIDs, but we need the module to be loaded for
links to work:
#+BEGIN_SRC emacs-lisp
(add-to-list 'org-modules 'org-id)
#+END_SRC
2020-04-12 22:50:39 +02:00
** Roam
Setup for [[https://github.com/jethrokuan/org-roam ][org-roam ]].
First, set a directory where =org-roam= will index things.
#+BEGIN_SRC emacs-lisp
(setq org-roam-directory (expand-file-name "notes/" org-directory))
#+END_SRC
2020-04-30 23:20:44 +02:00
Instruct =org-roam= to use =firefox-developer-edition= to open the graph:
#+BEGIN_SRC emacs-lisp
(setq org-roam-graph-viewer (executable-find "firefox-developer-edition"))
#+END_SRC
2020-05-03 15:01:32 +02:00
Change link color for =org-roam= links, to distinguish them from standard Org
links:
#+BEGIN_SRC emacs-lisp
(after! org-roam
(set-face-attribute 'org-roam-link nil :foreground "#FF8860"))
#+END_SRC
2020-04-12 22:50:39 +02:00
Customize the capture templates:
- the first one is [[https://github.com/jethrokuan/org-roam/blob/772505ba70c073ebc7905c4fcb8b9cc3759c775a/org-roam-capture.el#L81 ][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.
#+BEGIN_SRC emacs-lisp
(after! org-roam
(setq org-roam-capture-templates
'(("d" "default" plain (function org-roam-capture--get-point)
"%?"
:file-name "${slug}"
:head "#+TITLE: ${title}\n"
:unnarrowed t)
2020-05-06 00:22:51 +02:00
("i" "instant" plain (function org-roam-capture--get-point)
"%?"
:file-name "${slug}"
:head "#+TITLE: ${title}\n"
:unnarrowed t
:immediate-finish t)
2020-04-12 22:50:39 +02:00
("w" "website" plain (function org-roam-capture--get-point)
""
:file-name "websites/${slug}"
2020-04-13 18:56:12 +02:00
:head "#+TITLE: ${title}\n#+ROAM_KEY: %x\n"
2020-05-04 16:35:58 +02:00
:unnarrowed t)
("p" "paper" plain (function org-roam-capture--get-point)
"%?"
2020-05-06 00:22:36 +02:00
:file-name "papers/${slug}"
2020-05-04 16:35:58 +02:00
:head "#+TITLE: ${title}\n"
2020-04-12 22:50:39 +02:00
:unnarrowed t))))
#+END_SRC
2020-05-06 00:23:23 +02:00
Also setup daily captures templates:
#+BEGIN_SRC emacs-lisp
(after! org-roam
(setq org-roam-dailies-capture-templates
'(("d" "daily" plain (function org-roam-capture--get-point)
""
:immediate-finish t
:file-name "journal/%<%Y-%m-%d >"
:head "#+TITLE: %<%Y-%m-%d >"))))
#+END_SRC
2020-05-16 01:44:26 +02:00
*** Org Roam Server
#+BEGIN_SRC emacs-lisp
(use-package! simple-httpd)
2020-05-18 23:59:50 +02:00
(use-package! org-roam-server)
2020-05-16 01:44:26 +02:00
#+END_SRC
2020-05-14 00:52:30 +02:00
** Export backends
Sometimes I need to export an Org subtree to a file, which is quite easy with
the =org= export backend. It doesn't seem to be enabled by default, so let's add
it to the list:
#+BEGIN_SRC emacs-lisp
(after! org
(add-to-list 'org-export-backends 'org))
#+END_SRC
2020-04-11 16:59:02 +02:00
** Doom specific
Doom replaces the default tab behavior on headings, this restores the default
one. Taken from [[https://github.com/hlissner/doom-emacs/tree/develop/modules/lang/org#hacks ][here ]].
2020-04-10 18:52:52 +02:00
#+BEGIN_SRC emacs-lisp
2020-04-11 16:59:02 +02:00
(after! evil-org
(remove-hook 'org-tab-first-hook #'+org-cycle-only-current-subtree-h))
2020-04-10 18:52:52 +02:00
#+END_SRC
2020-05-10 00:29:17 +02:00
Disable fancy stars:
#+BEGIN_SRC emacs-lisp
(remove-hook 'org-mode-hook #'org-superstar-mode)
#+END_SRC
2020-05-10 11:08:54 +02:00
Don't hide leading stars:
#+BEGIN_SRC emacs-lisp
(after! org
(setq org-hide-leading-stars nil
2020-05-10 11:22:09 +02:00
org-startup-indented nil
org-adapt-indentation nil))
2020-05-10 11:08:54 +02:00
#+END_SRC