使用 chezmoi & vscode, 管理你的 dotfiles

声明式开发
• 阅读 109

什么是 dotfiles

In Unix-like operating systems, any file or folder that starts with a dot character (for example, /home/user/.config), commonly called a dot file or dotfile.
任何以 . 开头去命名的文件或者目录都可以称为 dotfile, 在 Unix-like 系统一般用的比较多, 但现在 dotfile 一般用于管理应用/软件的配置, 所以 Windows 平台上也可以看到 dotfile 的身影.

什么是 chezmoi

chezmoi 是使用 Go 编写的跨平台 dotfiles 管理工具, 使用同一的 Git 仓库进行配置同步, 可以很方便的帮助我们在多个开发环境共用一套配置, 免去一些同一工具链需要手工重新在多个机器配置的工作量.

开源社区流行的 dotfiles 管理工具很多, 我们可以在这个网站上可以看到: https://dotfiles.github.io/utilities/.

本篇文章主要介绍使用 chezmoi 进行 dotfiles 管理的一些基本流程, 还会介绍如何使用 vscode 配置 chezmoi 让配置管理体验更好的一些小技巧.

chezmoi 管理 dotfile 工作流

# 在使用 chezmoi 时, 需要先安装 chezmoi, 可以参考: https://www.chezmoi.io/install
sh -c "$(curl -fsLS get.chezmoi.io)"
# 安装完后初始化 chezmoi 的工作目录
chezmoi init
# 使用 chezmoi cd 可以直接切换到工作目录
chezmoi cd 
# 然后使用 git 将工作目录和代码仓库关联起来即可
git init
git remote add origin <your-git-repo>

官方文档也给出了使用 chezmoi 管理 dotfile 的工作流大概是怎么样的, 这里稍作解释:

使用 chezmoi & vscode, 管理你的 dotfiles

我们以 .bashrc 文件的管理为例子:

# Step 1、将 .bashrc 文件纳入 chezmoi 管控范围
# chezmoi 会将该文件拷贝到 chezmoi 工作目录下, 会重命名为 dot_bashrc, 使用 dot 替换 .
chezmoi add .bashrc
# .bashrc 文件纳入管控之后, 就不应该在修改配置的时候编辑 .bashrc 文件了, 而是编辑 chezmoi 工作目录下的 dot_bashrc 文件
# 可以切换去工作目录查看下
chezmoi cd
ls -al
# Step 2、配置的修改我们可以使用如下命令去修改, chezmoi 会使用文本编辑器打开对应的 dot_bashrc 文件
chezmoi edit ~/.bashrc
# Step 3、配置修改后是还没有应用到 .bashrc 文件的, diff 命令可以用来查看修改情况
chezmoi diff ~/.bashrc
# Step 4、想应用修改后的配置可以使用 apply 命令
chezmoi apply ~/.bashrc
# 至此已经基本完成一次 dotfile 的管理, 但为了想要在其他机器也使用这此改动, 是需要使用 git 做一次配置同步的

chezmoi 使用的一些小技巧与配置建议

1、替换 chezmoi edit 使用的默认编辑器为 vscode

chezmoi edit 默认根据 $VISUAL 或 $EDITOR 环境变量决定使用什么编辑器打开文件, 我们可以修改 chezmoi 的配置文件改变 chezmoi 文件的行为, 配置文件一般在 ~/.config/chezmoi 目录下, 参考配置如下:

# 控制 chezmoi edit 命令使用的编辑器, code --wait 会确保文件关闭再继续
# 配置文件在:  ~/.config/chezmoi/chezmoi.toml
[edit]
    command = "code"
    args = ["--wait"]
tips: chezmoi apply 应用修改后的配置时, 会根据 chezmoi 工作目录的层级去覆盖 HOME 目录对应的文件

2、替换 chezmoi diff 使用的 diff 工具为 vscode

万物皆可 vscode, 如果你想使用 vscode 的 dif 能力怎么办, 这里直接给出 chemoi 的参考配置:

# https://github.com/twpayne/chezmoi/discussions/2424
[diff]
command = "code"
args = ["--wait", "--diff", "{{ .Destination }}", "{{ .Target }}"]

[merge]
command = "bash"

3、敏感数据存储

如果你想用 chezmoi 管理你的密钥(例如: id_rsa ssh 密钥),同时又想把你的 dotfiles 配置在 GitHub 共享出来,chezmoi 自带了敏感数据存储的方案,可以使用 GPG、AGE 等对配置文件进行加密, 参考: https://www.chezmoi.io/user-guide/encryption/

本文由博客一文多发平台 OpenWrite 发布!
点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
3年前
VBox 启动虚拟机失败
在Vbox(5.0.8版本)启动Ubuntu的虚拟机时,遇到错误信息:NtCreateFile(\\Device\\VBoxDrvStub)failed:0xc000000034STATUS\_OBJECT\_NAME\_NOT\_FOUND(0retries) (rc101)Makesurethekern
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Stella981 Stella981
3年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Easter79 Easter79
3年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Wesley13 Wesley13
3年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表:时辰时间24时制子时深夜11:00凌晨01:0023:0001:00丑时上午01:00上午03:0001:0003:00寅时上午03:00上午0
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究