org-roam 风格的配置文件管理

分享一种基于 org 跨文件 noweb/tangle 的系统配置文件管理方式 个人已经尝试(踩坑)了大半年,觉得还挺顺手。

主要目的是为了能把软件配置和对软件的笔记放在一起,比如把 emacs-rime 的配置和 rime 的笔记放在同一个 org 的不同 header 下,evil 的配置和 vim 的配置也放在同一个 org 下便于对比。把配置当作知识用 roam 来管理查询,同时可以方便导出供软件进行加载。

3 个赞

这种管理最大的缺点就是做了改动之后需要tangle后才能运行, 会有点卡手.

楼主是怎么用 helm 的?可否详细介绍一下你的经验?

这个确实是代价,emacs 本来是直接对 init.el 进行解释,但把代码放在 org 后,org 是无法直接被 emacs 解释的,这就就相当于把 org 当作源代码,tangle/make 是编译构建的过程了。类似从解释型语言换成编译型的代价

但如果是尝试新的包或者做一些实验性的修改,我一般直接改 init.el ,然后启动新的 emacs 验证没问题了再把代码加到对应的 org 文件里。这两个过程目的是不一样的,修改 init.el 是为了使得 emacs 启动后有某个新的功能,但把这个代码放到哪个 org 文件里,实际是思考这个修改和整个 roam 知识库里哪些节点有关,更多是知识管理的层面。

我没有用 helm,minibuffer 补全用的是 ivy, 只是为了能比较方便执行 make, 所以安装了 helm-make (应该是自动依赖了 helm), 我的配置里和 helm 有关的就只有一句:

(use-package helm-make)

樓主你用的那個配置方法,不知道有沒簡單的demo可以參考一下

给配置 org 文件设置个保存时自动 tangle 即可

要能够跨文件调用 elisp src block ,只需要在 org-babel-load-languages 里加上 org 就行:

(org-babel-do-load-languages
    'org-babel-load-languages
    '(
    (emacs-lisp . t)
    (org . t)  #  这一句
    (jupyter . t) 
    ))

如果要在 emacs 里执行 make 就加上:

 (use-package helm-make)

应该没有额外的要写在 init.el 里的配置了。其他都是外部脚本,用来给不同配置(vim, emacs, bash 等)进行 tangle 用的,核心代码在 blog 里都有给出。

有疑问的话,可以问得具体一点,我也更容易回忆起来,好几个月没改过这部分了 :joy:

好的,先謝啦。我自己先研究一番,感謝