我在不同的地方拥有数万台机器(家庭网络,云端......),我在每个机器上使用fish
。问题是我每次更改内容时都必须同步它们的配置。
有没有办法从远程存储库加载配置? (=存储它的地方,不一定是git
但理想情况下我会在GitHub中管理它们。在这种情况下,我到处都会有一个班轮。
答案 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