多台机器共用一份配置

因为在多台机器上用Emacs,想要共享配置,之前是在init.el里加载local-config.el,然后这个文件不放在git里。但这样机器之间不一样的配置还要单拿出来放loca-config.el里,感觉挺麻烦。现在换成了用macro:

(defmacro luna-on (host &rest body)
  "Evaluate BODY when running on HOST.
HOST can be a string or a list of strings.
You can see your host name by

    $ hostname

and change it with

    $ hostname <new name>"
  (declare (indent 1))
  `(when (if (stringp ,host)
             (equal ,host (system-name))
           (member (system-name) ,host))
     ,@body))

有这么用的吗?你们怎么共用配置的?

我只有字体需要对每个显示器、笔记本屏幕单独设置,其他的都一样。

我的是在配置文件的最后判断计算机的名字,加载一个同名el文件,不过也就只在两台电脑上用emacs,开始是屏幕大小分辨率不同才分开写,后来一致了都是一样的显示器分辨率,一样的系统,这段代码就没用了,楼主电脑很多吗

(cond 
   ((string-equal (downcase system-name) "computer-lenovo")
     (progn (load-file "~/.emacs.d/init/computer-lenove.el")))
  ;;else写法
  (t (progn (load-file "~/.emacs.d/init/computer-amd.el"))))

还可以对显示器单独设置配置?

只有两台,但是有些配置和包只在一台电脑上有,另一台用的少就懒得装

  1. emacs在启动时根据屏幕的物理尺寸判断是什么型号的显示器,用不同的字体。
(if (eq (display-mm-width) 309)
        (albert-notebook-font))
  1. 如果用use-package的话,ensure的package自动下载,就是时间有点长。
2 个赞

用的doom,把.doom.d的配置文件放在云上,不放在~/ 下,然后用软链接到 ~/ ,不知道这样做对不对

(if (string= (system-name) "DESKTOP-DMGKG0I");;PC at work
    (progn (set-font "Sarasa Term SC" "Sarasa Term SC" 24 24)
  (setq desktop-dirname "~/.emacs.d/DMGKG0I")
  (setq desktop-path '("~/.emacs.d/DMGKG0I"))))

(if (string= (system-name) "DESKTOP-439OGGP");;Mini PC
    (progn (set-font "Sarasa Term SC" "Sarasa Term SC" 40 40)
  (setq desktop-dirname "~/.emacs.d/439OGGP")
  (setq desktop-path '("~/.emacs.d/439OGGP"))))

(if (string= (system-name) "DESKTOP-FR36SPM");;PC at home
    (progn (set-font "Sarasa Term SC" "Sarasa Term SC" 38 38)
  (setq desktop-dirname "~/.emacs.d/FR36SPM")
  (setq desktop-path '("~/.emacs.d/FR36SPM"))))
1 个赞

可以用systemd machine

学到了

主要是一些本地的包,网络发布的包都是自动装,没啥问题,本地包就没这么方便了ww

我是用git管理, 一个主分支, 所有机器同步. 然后某机器上定制多的话, 可以基于主分支再创建个针对该机器的分支.

所有非emacs内置的的lisp文件都放在这个仓库里, 包括自己的包和网络上的包. 网上的包一般也需要在某台机器上试用一段时间没问题之后, 才提交到仓库.

git分支管理很硬核啊,分支之间merge/rebase不会很麻烦么。

主分支里放通用的东西, 其他分支都是一些针对某台机器的定制, 比如针对显示器颜色修改下主题等, 基本不会合并到主分支.

极少数情况下需要移动到主分支, 就手工操作, 一般都是三五行代码, 或者连续的整块代码, 不会很分散.

git cherry-pick 也很方便啊