42 个版本 (15 个稳定版)
1.3.6 | 2023年11月29日 |
---|---|
1.3.5 | 2023年7月1日 |
1.3.4 | 2023年2月26日 |
1.3.1 | 2022年12月20日 |
0.1.0 | 2022年3月31日 |
#229 in 命令行工具
每月 44 次下载
150KB
4K SLoC
Machine Setup
想法是能够在重置您的机器或使用全新的机器时复制特定的设置。此外,在需要时,还应能够轻松更新设置,例如更新您的 vim 配置文件。因此,它将有助于管理 dotfiles、符号链接等。
一个现实世界的示例可以在我的 .dotfiles 仓库 中找到。
您还可以使用它来完成其他任务,例如通过提供安装特定依赖项和检出重要仓库的配置来简化新同事的入职流程。
安装
通过 cargo
安装或从 发布页面 下载二进制文件。
cargo install machine_setup
安装 Shell 完成脚本
zsh
这可能会因您的设置而异。
- 下载 shell 完成脚本并将它们放入您的
fpath
中的适当文件夹
sudo wget -P /usr/local/share/zsh/site-functions/ https://raw.githubusercontent.com/timopruesse/machine_setup/main/completions/_machine_setup
- 重新加载 zsh
exec zsh
其他
其他壳(如 fish)的 shell 完成脚本可以在 completions 中找到。
您欢迎使用 PR 为您喜欢的 shell 提供安装说明。😇
运行
子命令
command | 描述 | 示例 |
---|---|---|
install | 安装定义的任务 | machine_setup install |
update | 更新定义的任务 | machine_setup update |
uninstall | 卸载定义的任务 | machine_setup uninstall |
list | 列出所有定义的任务 | machine_setup list |
默认情况下,machine_setup
将查找一个名为 machine_setup
的文件,该文件具有支持的文件格式。
支持的文件格式是:yaml
、yml
和 json
。
命令行参数
flag | 值 | 示例 |
---|---|---|
-c --config |
指定配置文件的不同路径 | machine_setup install-c./config/my_setup.yaml |
-t --task |
仅运行指定的任务 | machine_setup install-t my_task2 |
-s --select |
选择要运行的任务 | machine_setup install-s |
-h --help |
显示帮助信息 | machine_setup--help |
-v --version |
显示版本信息 | machine_setup--version |
-d --debug |
打印额外的调试信息 | machine_setup install--调试 |
-l --level |
设置日志级别(info, warn, error, debug, trace) | machine_setup install--级别=info |
支持的配置文件格式
支持的格式有 YAML
和 JSON
。
配置
任务可以在 tasks
根键下定义。每个任务可以包含任意数量的命令。
键 | 描述 | 值 | 默认 |
---|---|---|---|
tasks | 所有任务的根键 | ||
default_shell | 当命令未指定时使用的 shell | bash , zsh |
bash |
temp_dir | 定义临时文件存储的位置 | ~/.machine_setup |
|
parallel | 并行运行所有任务 | true 或 false |
false |
num_threads | 并行运行时的线程数 | 数字 > 1 | 物理处理器数量 - 1 |
特定任务的配置
键 | 描述 | 值 | 示例 |
---|---|---|---|
os | 仅在指定的操作系统上运行 | 可能的值 | "linux" 或 ["linux", "macos"] |
parallel | 并行运行所有命令(每个命令一个线程) | true 或 false |
false |
TODO: 添加 JSON 示例...
查看下面的示例配置
temp_dir: "~/my_temp" # defaults to "~/.machine_setup"
default_shell: "zsh" # defaults to "bash"
parallel: true
num_threads: 2
tasks:
my_task1:
os: ["linux", "windows"]
parallel: true
commands:
- copy:
src: "./src/files"
target: "/tmp/target"
- copy:
src: "./src/files_2"
target: "/tmp/target"
my_task2:
os: ["linux"]
parallel: true
commands:
- shell: "sudo apt-get install git -y"
- symlink:
src: "./src/config"
target: "~/.dotfiles"
扩展配置
可扩展性不是显式构建的。
然而,可以通过 machine_setup 命令从另一个配置中执行任务。
可用的配置命令
copy
此命令将目录内容复制到另一个目录。
参数 | 值 | 必需 | 示例 |
---|---|---|---|
src | 源目录/文件 | ✅ | "./src/files" 或 "./src/test.txt" |
target | 目标目录/文件 | ✅ | "/tmp/target" 或 "/tmp/target/new.txt" |
ignore | 要忽略的文件/目录列表 | ➖ | ["dist", "package-lock.json"] |
示例
copy:
src: "./src/files"
target: "/tmp/target"
ignore: ["dist", "package-lock.json"]
clone
此命令将 git 仓库克隆到指定的目标位置。
参数 | 值 | 必需 | 示例 |
---|---|---|---|
url | git 仓库的 URL | ✅ | "[email protected]:timopruesse/machine_setup.git" |
target | 目标目录 | ✅ | "~/machine_setup" |
示例
clone:
url: "[email protected]:timopruesse/machine_setup.git"
target: "~/machine_setup"
symlink
此命令将源目录中的所有文件符号链接到目标目录。
参数 | 值 | 必需 | 示例 |
---|---|---|---|
src | 源目录/文件 | ✅ | "./src/files" 或 "./src/test.txt" |
target | 目标目录/文件 | ✅ | "/tmp/target" 或 "/tmp/new.txt" |
ignore | 要忽略的文件/目录列表 | ➖ | ["dist", "package-lock.json"] |
force | true/false | ➖ |
如果
force
设置为true
,则现有的文件将被 删除 并用符号链接替换。
示例
symlink:
src: "./src/files"
target: "/tmp/target"
ignore: ["dist", "package-lock.json"]
force: true
run
此命令执行 shell 命令。
提示:尽可能避免使用交互式命令。
参数 | 描述 | 必需 | 默认 | 值 |
---|---|---|---|---|
env | 环境变量 | ➖ | ||
shell | 使用的 shell | ➖ | "bash" | "bash", "zsh" |
默认情况下,在更新或卸载时将跳过 shell 命令。您可以通过提供 update
和/或 uninstall
来更改此设置。
可以将以下参数传递给 commands
参数 | 描述 | 必需 | 示例 |
---|---|---|---|
install | 安装命令 | ➖ | "sudo apt-get -y install git" |
update | 更新命令 | ➖ | "sudo apt-get -y upgrade git" |
uninstall | 卸载命令 | ➖ | "sudo apt-get -y uninstall git" |
示例
inline_command:
run:
commands: "sudo apt-get -y install git"
multiline_command:
run:
commands:
- "sudo apt-get update"
- "sudo apt-get -y install git"
updatable_command:
run:
env:
SOME_TOKEN: "abc123"
commands:
install: "sudo apt-get -y install git"
update: "sudo apt-get -y upgrade git"
uninstall: "sudo apt-get -y uninstall git"
updatable_multiline_command:
run:
env:
SOME_TOKEN: "abc123"
commands:
install:
- "sudo apt update"
- "sudo apt-get -y install git"
update:
- "sudo apt-get -y upgrade git"
- ...
uninstall:
- "sudo apt-get -y uninstall git"
- ...
machine_setup
使用此命令可以包含其他 machine_setup
配置文件。
参数 | 描述 | 必需 | 示例 |
---|---|---|---|
config | 其他配置文件的路径 | ✅ | "./my_other_config.yaml" |
task | 定义应运行的单个任务 | ➖ | "my_other_task" |
示例
machine_setup:
config: "./my_other_config.yaml"
task: "my_other_task" # optional
依赖关系
~9–21MB
~298K SLoC