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 命令行工具
每月 55 次下载
8MB
4.5K SLoC
quickcfg
快速将基本配置应用于系统!
它从一个 dotfiles 目录中读取配置和模板结构,并尝试根据此配置规范化运行的机器。
警告:此项目目前正在开发中。我已经尽力使所有操作都是非破坏性的,但请注意潜在的错误!
入门
要开始使用,您可以让 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
将递归复制目录。
link-dir
递归链接目录。
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 是为了唯一标识此系统仅运行过一次。
link
创建符号链接。
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
中加载 name
和 hobbies
变量。hobbies
将作为一个数组加载,这将导致加载该值在层次结构中的所有值。
依赖项
~21-35MB
~631K SLoC