如何从远程存储库加载鱼配置?

时间:2017-09-03 19:17:43

标签: fish

我在不同的地方拥有数万台机器(家庭网络,云端......),我在每个机器上使用fish。问题是我每次更改内容时都必须同步它们的配置。

有没有办法从远程存储库加载配置? (=存储它的地方,不一定是git但理想情况下我会在GitHub中管理它们。在这种情况下,我到处都会有一个班轮。

  • 我不太关心启动时间,每次加载配置都是可以接受的
  • 我无法将配置推送到机器上(例如通过Ansible) - 不是可以直接从任何地方访问它们 - 但它们都可以到达Internet

2 个答案:

答案 0 :(得分:3)

您的问题分为两部分。第一部分并非针对鱼类。对于我经常使用的系统,我使用Dropbox。我将〜/ .config / fish目录放在Dropbox目录和符号链接中。对于我不经常使用的机器,例如我用来调查发行版特有的问题的VM,我使用rsync从我的主桌面机器上复制。例如,

rsync --verbose --archive --delete -L --exclude 'fishd.*' krader@macpro:.config .

请注意排除fishd.*模式。这是你问题的第二部分,也是鱼类特有的。使用该模式命名的〜/ .config / fish目录中的文件是通用变量存储,目前每台机器都是唯一的。我们想要改变这一点 - 请参阅https://github.com/fish-shell/fish-shell/issues/1912。问题是该文件包含颜色主题变量。因此,要复制颜色主题,需要在一台计算机上导出这些变量:

set -U | grep fish_color_

然后在新机器上为前一个命令的每一行输出执行set -U。显然,如果你想要同步其他通用变量,你应该set -U并导入所有变量。

答案 1 :(得分:0)

免责声明:我不会自己选择此解决方案。使用云存储客户端作为Kurtis Rader建议或定期的cron作业从git存储库(+符号链接)中提取更改似乎更容易和防止故障。

在那些您不能或不想与云存储同步的系统上,您可以使用curl专门下载配置文件。利用HTTP缓存控制机制可以节省一些宝贵的I / O时间。无论有没有缓存控制,您仍然需要每次创建与远程服务器的连接(或每次X次或每次Y次传递)并且已经浪费了相当长的时间。

以下是对这样一个鱼脚本的建议,让你开始:

#!/usr/bin/fish

set -l TMP_CONFIG /tmp/shared_config.fish

curl -s -o $TMP_CONFIG -D $TMP_CONFIG.headers \
 -H "If-None-Match: \"$SHARED_CONFIG_ETAG\"" \
 https://raw.githubusercontent.com/woj/dotfiles/master/fish/config.fish

if test -s $TMP_CONFIG
  mv $TMP_CONFIG ~/.config/fish/conf.d/shared_config.fish
  set -U SHARED_CONFIG_ETAG (sed -En 's/ETag: "(\w+)"/\1/p' $TMP_CONFIG.headers)
end

备注:

  • 警告:未经过足够的测试
  • 假设fish v2.3或更高版本。
  • sed行为因平台而异。
  • woj/dotfiles/master/fish/config.fish替换为适用于您案例的存储库,分支和路径。

您可以从cron作业运行此命令,但如果您坚持在每个init上更新配置文件,请更改脚本以将配置放置在fish尚未自动加载的路径中,例如:<登记/> mv $TMP_CONFIG ~/.config/fish/shared_config.fish
 并在你的config.fish运行这整个脚本文件,然后是一个
 source ~/.config/fish/shared_config.fish