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 次下载

MIT/Apache

150KB
4K SLoC

Rust 3K SLoC // 0.0% comments BASH 325 SLoC PowerShell 135 SLoC Elvish 122 SLoC Shell 12 SLoC

Machine Setup

Tests Builds Crates.io

想法是能够在重置您的机器或使用全新的机器时复制特定的设置。此外,在需要时,还应能够轻松更新设置,例如更新您的 vim 配置文件。因此,它将有助于管理 dotfiles、符号链接等。

一个现实世界的示例可以在我的 .dotfiles 仓库 中找到。

您还可以使用它来完成其他任务,例如通过提供安装特定依赖项和检出重要仓库的配置来简化新同事的入职流程。

安装

通过 cargo 安装或从 发布页面 下载二进制文件。

cargo install machine_setup

安装 Shell 完成脚本

zsh

这可能会因您的设置而异。

  1. 下载 shell 完成脚本并将它们放入您的 fpath 中的适当文件夹
sudo wget -P /usr/local/share/zsh/site-functions/ https://raw.githubusercontent.com/timopruesse/machine_setup/main/completions/_machine_setup
  1. 重新加载 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 的文件,该文件具有支持的文件格式。
支持的文件格式是:yamlymljson

命令行参数

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

支持的配置文件格式

支持的格式有 YAMLJSON

配置

任务可以在 tasks 根键下定义。每个任务可以包含任意数量的命令。

描述 默认
tasks 所有任务的根键
default_shell 当命令未指定时使用的 shell bash, zsh bash
temp_dir 定义临时文件存储的位置 ~/.machine_setup
parallel 并行运行所有任务 truefalse false
num_threads 并行运行时的线程数 数字 > 1 物理处理器数量 - 1

特定任务的配置

描述 示例
os 仅在指定的操作系统上运行 可能的值 "linux" 或 ["linux", "macos"]
parallel 并行运行所有命令(每个命令一个线程) truefalse 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"

此命令将源目录中的所有文件符号链接到目标目录。

参数 必需 示例
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