#+TITLE:Doomed Chicken
This is another attempt at making a decent Emacs configuration for the chicken I am. Having multiple files with a poor consistence or a directed goal always bit me in the back relatively quickly. So this time, I'll try to write something documenting my process to warn my future me about my current configuration mishaps.
Lately, I have been partial towards Gruvbox, for multiple reasons, the first being that I was tired of all those blue themes. It's a warm colorscheme, it has a good contrast in most of the situations and I built my whole's old laptop UI based on Gruvbox. Good thing Doom Emacs has a preset for this specific colorscheme.
(setq doom-theme 'doom-gruvbox)
The other basic configuration I usually do first too is setting a font. PragmataPro has been my newest typographic friend as it's really good for what it's made for: displaying text in a flexible yet consistent way. I really like the small touches like the ligatures
(let ((base-size 12))
(setq doom-font (font-spec
:family "PragmataPro Mono Liga"
:size base-size)
doom-variable-pitch-font (font-spec
:family "PragmataPro Liga"
:size base-size)
doom-unicode-font (font-spec
:family "PragmataPro Liga"
:size base-size)
doom-big-font (font-spec
:family "PragmataPro Liga"
:size (* base-size 2))))
PragmataPro's ligatures have been toggled within init.el though the
pretty-code layer and it's optional specialization for this font. No more
setting is to be done for this font.
Nothing really fancy yet, I'm content with how Doom looks right now. In the
future I might add something to change the windows' border colors. Window
dividers (located in the window-divider group) are inheriting from the
vertical-border face, so editing the later allows me to quickly change the
border color if needed.
;; (set-face-attribute 'vertical-border nil :foreground "red")
red
Org mode is awesome, that's a fact. I tried to look into making org my blog framework/builder but I couldn't. I switched to Hugo and reconverted my blog files into Markdown.
Hugo has a few utilities, notably listing draft posts. I wrote a while ago a function to list drafts and feed them to helm. Doom Emacs seems to use ivy as file browser, so I have to adapt it to feed Ivy. I currently have a version that works pretty well on the blog's project. I have an error risen by Hugo that blocks Ivy from doing its completion when Hugo can't find the blog config.
Here's how it works. First we have a function that calls Hugo's draft listing based on the project's directory
(defun chicken/list-hugo-drafts ()
"Fetches the current drafts in a hugo project when available"
(let
((root (projectile-project-root)))
(counsel--split-string
(counsel--call
(list "hugo" "-s" root "list" "drafts")))))
Then I have an interactive function I can call that will process the list given
by list-hugo-drafts and either opens the file or does nothing if the user
cancels the search. Something to note here is how I have to rebuild the whole
path based on the project's root. If the user was in another folder, which can
happen for instance when opening another file, the action callback would have
tried to open the selected file relatively to the current folder instead of the
project folder.
(defun chicken/hugo-goto-draft ()
(interactive)
(ivy-read "Open a draft: " (chicken/list-hugo-drafts)
:require-match t
:history 'chicken/hugo-goto-history
:action (lambda (file)
(with-ivy-window
(when file
(let*
((root (projectile-project-root))
(full-file (concat root file)))
(find-file full-file)))))
:unwind #'counsel-delete-process
:caller 'chicken))
chicken/hugo-goto-draft