工作和个人电脑上的配置同步方案

大家一般怎么在工作和个人电脑之间同步 Emacs 配置?尤其是怎么解决隐私问题?

主要的问题是,工作电脑和服务器上,理论上有 root 权限的用户可以看到自己所有内容,而配置文件中许多内容并不想让人看到,比如自己的私人邮件地址、私人博客地址等。

一个办法是把 Emacs 配置文件拆成两部分,一部分有个人数据,一部分没有。工作电脑上只 clone 后一种。我想这是最安全的方案?当然这需要配合 github repository deploy key,不然的话,如果工作电脑的 ssh key 可以访问自己所有的库,等于白搭。

我目前的办法是:配置文件中不希望管理员看到的内容使用 GPG 加密,每一台机器上创建一对 GPG key,通过控制哪些机器的密钥可以解密该配置文件来控制访问权限。

这样的好处是可以做到很细的粒度:纯干活的电脑;可能收发工作邮件的电脑;可能收发个人邮件的电脑等等。有的文件只有机器 A 和 B 可以访问,有的文件只有机器 B 和 C 可以访问。

另一个优点是所有 Emacs 相关配置可以放在同一个目录下,显得比较整齐。

1 个赞

以前试过 git 同步配置,现在放弃了,因为没提高什么效率,反而造成一些配置冲突

私有配置放到单独的目录,通过坚果云同步

我用公网 VPS 搭 syncthing 同步配置。

NixOS 上启用 syncthing

服务器

{
  services.syncthing.enable = true;
}

PC

{
  services.syncthing = {
    enable = true;
    user = "xinyifly";
    dataDir = "/home/xinyifly";
    settings.devices = {
      nix-sh = {
        addresses = [ "tcp://ip-or-domain-of-your-syncthing-server" ];
        id = "ID-FROM-YOUR-SYNCTHING-SERVER";
      };
    };
    settings.folders = {
      Configs = {
        path = "~/.Configs";
        devices = [ "nix-sh" ];
      };
      Data = {
        path = "~/.Data";
        devices = [ "nix-sh" ];
      };
      Secrets = {
        path = "~/.Secrets";
        devices = [ "nix-sh" ];
      };
    };
  };
}

需要用什么文件就软链接过去

windows上可以把Emacs搞成便携版的然后放在U盘里吧

chemoi支持template,可以把隐私信息用place holder代替,apply的时候再手动输入,让chezmoi把place holder替换了,不过你输入的隐藏字段还是会记录在chezmoi自己的配置文件里面。

最保险的可能是用easygpg加密吧,直接把配置文件用gpg加密了,每次emacs启动的时候解密再读取,不过这个仅限emacs自己。

还得整个 4K 性能不错的 U 盘吧?

我自己是因为 Windows Linux MacOS ChromeOS 的机器都有,就只好同步 Emacs 配置文件本身

第一次听说 chezmoi,有时间的时候去研究一下。

现在我是写了一堆 python 脚本,针对每一个需要同步但又不能直接替换的 dotfile 写了一个从模板同步更改过去的脚本,有点自己造轮子的意思了。不会 emacs lisp 的时候还用 python 写了个半拉子 lisp parser 用来同步 .spacemacs 里的一些配置,现在想想有点太蠢。

原则上来说,用 gpg 加密一些配置的话,并不限于 Emacs。EPA 的主要优点是可以 on the fly 解密,机器上不留明文配置。但对于 .ssh/config 之类的文件,留明文配置也是通行操作。

只需要在自己的配置文件更新脚本里加几行“使用 gpg 解密后更新对应配置文件”就可以了。每台机器只能解密自己机器密钥所能解密的配置文件。

以 .ssh/config 为例,大概可以这么写:

for gpg_file in ssh-config-data-*.gpg; do
    tmp_file=$(mktemp)
    if gpg -d "$gpg_file" > "$tmp_file"; then
        python sync_ssh_config.py "$tmp_file"
    fi
    rm -f "$tmp_file"
done

我猜想配合 chezmoi 也是可以的?写个脚本,先 GPG 解密,再 chezmoi apply

chezmoi支持shell脚本和一些加密/密码管理工具,但是做到完全本地无明文似乎有些困难,比如对于某些程序配置文件里面的密码字段,如果程序本身有gpg支持就可以无明文,否则chezmoi只能做到对于添加的配置文件加密,apply的时候还是要解密的

使用chezmoi 定制 三平台的 dotfiles,初时安装用U盘就可以完成, 同时还安装初始环境。使用syncthing 同步数据

有些公司不让插外存的