How to have device-specific values in .dir-locals.el
I use [[Emacs]] on my laptop and on my phone (in [[Termux]]), and I use [[org-roam]] on both devices.
I have two org-roam-based projects. One is this public digital garden, one is a private space. Because I have two projects, I have to use the .dir-locals.el
file to set the location of org-roam-directory
and org-roam-db-location
per project.
The locations of the org-roam directories and their DBs are different on my laptop and my phone. So, I need a way to have device-specific values in .dir-locals.el
.
I have one .dir-locals.el
synced between the devices with [[syncthing]]. It sets values other than just these ones.
I was doing this fairly naively for a while, having a line for each and commenting it out each time I was working on a different device:
((nil
(org-mode ngm-journal-mode))
(org-mode
;(org-roam-directory . "/home/neil/org/Personal/")
(org-roam-directory . "~/storage/shared/org/Personal/")
;(org-roam-db-location . "/home/neil/org/Personal/org-roam.db")))
(org-roam-db-location . "~/storage/shared/org/Personal/org-roam.db")))
But that got a bit annoying.
Now I've got a conditional checking for the hostname and setting the variables accordingly:
((nil
(org-mode ngm-journal-mode))
(org-mode
(eval . (cond
;; Laptop configuration
((string= system-name "neil-ThinkPad-T450s")
(setq-local org-roam-directory "/home/neil/org/Personal/")
(setq-local org-roam-db-location "/home/neil/org/Personal/org-roam.db"))
;; Phone configuration
((string= system-name "localhost")
(setq-local org-roam-directory "~/storage/shared/org/Personal/")
(setq-local org-roam-db-location "~/storage/shared/org/Personal/org-roam.db"))))))
That's working, although I'm not totally happy with it. Seems a bit crufty - the duplication doesn't feel great.
When I get chance, I'll investigate making use of .dir-locals-2.el
.
You can also use .dir-locals-2.el; if found in the same directory as .dir-locals.el, Emacs loads it in addition to .dir-locals.el. This is useful when .dir-locals.el is under version control in a shared repository and canβt be used for personal customizations.
I should also double-check whether I could just use relative paths, which would solve this specific problem.
- public document at doc.anagora.org/how-to-have-device-specific-values-in-dir-locals-el
- video call at meet.jit.si/how-to-have-device-specific-values-in-dir-locals-el
(none)
(none)