#系统 #配置 #dotfiles #模板 #快速 #目录 #基本

bin+lib quickcfg

通过声明性方式快速进行系统基本配置

18 个版本

0.6.3 2023 年 3 月 22 日
0.6.1 2022 年 12 月 8 日
0.6.0 2020 年 11 月 2 日
0.4.0 2020 年 1 月 25 日
0.3.6 2018 年 11 月 24 日

#1051 in 命令行工具

Download history 37/week @ 2024-03-30

每月 55 次下载

MIT/Apache

8MB
4.5K SLoC

quickcfg

github crates.io docs.rs build status

快速将基本配置应用于系统!

它从一个 dotfiles 目录中读取配置和模板结构,并尝试根据此配置规范化运行的机器。

警告:此项目目前正在开发中。我已经尽力使所有操作都是非破坏性的,但请注意潜在的错误!

Example


入门

要开始使用,您可以让 quickcfg 在默认位置克隆配置

qc --init <git-url>

这将为您将检出的配置放置在您平台的默认配置位置。例如

  • Windows - %APPDATA%\quickcfg
  • Linux - $HOME/.config/quickcfg

要查找各种 quickcfg 目录的位置,请使用

qc --paths

特性

无依赖,您需要的只是 quickcfg 可执行文件和您的配置仓库。

极快,多线程,并使用简单的依赖图来确定何时可以并行运行。

灵活但具有意见的清单,有几个强大的原语可用(例如 copy-dir),它们可以非常少的配置完成大量工作。

使用快速校验和,以减少不必要的工作量。仅在必要时应用更改。


自动应用更新

如果您希望 quickcfg 定期检查您的 git 仓库以查找更新,您可以将以下内容添加到您的 .zshrc.bashrc

if command -v qc > /dev/null 2>&1; then
    qc --updates-only
    alias upd="qc"
fi

每次打开 shell 时,quickcfg 都不会检查您的 dotfiles 是否已更新。

您可以通过设置 quickcfg.yml 中的 git_refresh 选项来控制频率。

git_refresh: 3d

配置

在根目录创建一个包含 quickcfg.yml 的仓库

git_refresh: 1d

hierarchy:
  - secrets.yml
  - db/common.yml
  - db/{distro}.yml

systems:
  # System to ensure that a set of packages are installed.
  - type: install

您还希望添加一个类似于以下内容的 .gitignore 文件

/secrets.yml
/.state.yml
/.state

然后使用您的秘密信息填充 secrets.yml - 这您绝对不要提交到git中。您在这里放置的任何变量都可以在未来的模板中使用,因为它们是层次结构的一部分。

hierarchy》指定了一组需要查找的文件。这些可以使用变量,如 {distro},这些变量将根据您正在运行的系统的已知事实进行展开。

您可以以我的 dotfiles 仓库为灵感。

下一节将详细介绍所有可用的系统。


层次结构

层次结构是包含数据的文件集合。

一些系统会查询层次结构以获取信息,例如 install 中的 key 设置。这将确定应安装哪些软件包。

层次结构变量也可以通过在模板顶部添加一个 quickcfg: 标签来在 templates 中提供。


系统


copy-dir

递归复制目录。

type: copy-dir
from: ./some/dir
to: home://some/dir
templates: false

将递归复制目录。


递归链接目录。

type: link-dir
# Directory to link from.
from: ./some/dir
# Directory to link towards.
to: home://some/dir

将创建相应的目录结构,但所有文件都将为符号链接。


git-sync

同步单个git仓库到某个路径的系统。

type: git-sync
# Where to clone.
path: home://.oh-my-zsh
# Remote to clone.
remote: https://github.com/robbyrussell/oh-my-zsh.git
# Refresh once per day.
refresh: 1d

install

比较已安装软件包集与层次结构中的软件包集,并安装任何缺失的软件包。

如果需要,将使用 sudo 安装软件包。

type: install
# The provider of the package manager to use.
provider: pip3
# Hierarchy key to lookup for packages to install.
key: pip3::packages

此系统的最简单示例是使用主要提供者

systems:
  - type: install

这将查找 packages 键下的软件包并使用您当前正在运行的系统的主要提供者进行安装。

这些是支持的提供者

  • debian:用于基于Debian的系统。这是一个主要提供者。
  • pip:Python 2包管理器。
  • pip3:Python 3包管理器。
  • gem:Ruby包管理器。
  • cargo:使用 cargo 安装软件包。
  • rust components:使用 rustup 的Rust组件。
    • 密钥: rust::components
  • rust toolchains:使用 rustup 的Rust工具链。
    • 密钥: rust::toolchains

默认情况下,任何主要提供者都将作为系统的默认提供者,如果可以检测到。

显式配置的提供者将基于层次结构密钥 <provider>::packages 查找软件包。默认提供者使用密钥 packages


download

将单个文件下载到指定的目标路径。

type: download
id: plug-vim
# Url to download the command from.
url: https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
# Path to download to.
path: home://.config/nvim/autoload/plug.vim

id 是为了唯一标识此系统仅运行过一次。


download-and-run

从互联网下载脚本并运行一次。

type: download-and-run
id: install-oh-my-zsh
# Url to download the command from.
url: https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh
# Set to `true` if the downloaded command requires interaction. (default: false)
interactive: true
# Set to `true` if the command must be run through a shell (`/bin/sh`). (default: false).
shell: true

id 是为了唯一标识此系统仅运行过一次。


创建符号链接。

type: link
path: home://.vimrc
link: .vim/vimrc

这将在 path 创建一个符号链接,其中包含 link 中指定的内容。


only-for

基于条件限制系统集。

type: only-for
os: windows
systems:
  # Download and install Rust
  - type: download-and-run
    name: rustup-init.exe
    id: install-rust
    url: https://win.rustup.rs/x86_64
    args: ["-y"]

Templating

某些系统将文件视为模板,例如在启用 templating 选项时,像 copy-dir 这样的文件。此时,任何正在复制的文件都被视为一个 handlebars 模板。

任何模板文件都可以通过在文件顶部指定依赖关系来使用层次数据,例如使用 quickcfg: 标签,如下所示

# quickcfg: name, hobbies:array

Hi, my name is {{name}}

My hobbies are:
{{#each hobbies}}
- {{this}}
{{/#each}}

这将从 hierarchy 中加载 namehobbies 变量。hobbies 将作为一个数组加载,这将导致加载该值在层次结构中的所有值。

依赖项

~21-35MB
~631K SLoC