10个版本 (5个重大变更)
0.6.0 | 2024年3月27日 |
---|---|
0.5.0 | 2024年3月2日 |
0.4.1 | 2024年2月28日 |
0.4.0 | 2024年1月16日 |
0.1.3 | 2024年1月16日 |
#169 in 配置
每月55次下载
49KB
1K SLoC
存储库
存储库是一个支持模板的配置文件管理器。
安装
目前,存储库只能通过克隆存储库并运行以下命令手动安装:
用法
创建存储库
首先创建一个存储库
silo --repo /path/to/repo init
这将创建存储库目录并初始化git存储库。如果没有传递--repo
参数,则默认为$HOME/.local/share/silo
或$HOME/AppData/Roaming/silo
。
如果您在某处有一个现有的存储库,您可以进行以下操作
silo --repo /path/to/repo init <remote-url>
这将克隆远程存储库到指定的路径。
添加配置文件
现在添加一些您想要跟踪的配置文件。存储库使用元数据文件来跟踪哪些文件属于哪里。例如,如果您希望所有文件都复制到您的存储库根目录中,您将添加一个silo.dir.lua
条目,如下所示
local silo = require 'silo'
return {
path = silo.dirs.home,
-- defaults to "exclude". Can be "include" to only look at included paths
mode = "exclude",
-- excluded glob patterns if mode is "exclude"
exclude = {},
-- included glob patterns if mode is "include"
include = {}
}
存储库模块提供了可以在配置文件中使用的实用函数和值。您可以通过使用log
模块来在评估配置文件时打印这些值。
local silo = require 'silo'
local log = require 'log'
log.debug(silo) -- debug prints the input value serialized as json
return {
path = silo.dirs.home,
}
现在将一些文件添加到存储库中的目录content
。普通文件将被直接复制。子目录将被创建并复制,除非它们自身包含一个指定不同位置的dirs.toml
文件。
以.tmpl
结尾的文件被视为handlebars模板,并在写入目标位置之前进行处理。.tmpl
扩展名将被从文件名中删除。您可以使用silo context
检查系统上可用的上下文变量及其值。
应用配置
一旦您有一个想要应用的存储库,您可以运行以下命令
silo --repo /path/to/repo apply
这将处理并复制该仓库中所有配置文件。
配置Silo
Silo有几个配置文件,按照以下顺序应用
~/.config/silo.config.lua
(或Windows上的等效文件)silo.config.lua
在仓库文件夹中- 以前缀
SILO_
开始的环境变量
配置文件看起来像这样(带有所有默认值)
local silo = require 'silo'
local config = silo.default_config
-- The diff tool that is being used when displaying changes and prompting for confirmation
config.diff_tool = "diff"
-- Additional context that is available in all handlebar templates under the `ctx` variable
config.hello = "world"
return config
高级
文件权限
文件权限以git存储的方式持久化。这也适用于模板。因此,具有执行权限的模板将导致渲染的文件具有相同的权限。
钩子
在仓库根目录的hooks
文件夹中的所有.hook.lua
文件都被解释为钩子脚本。目前,这些脚本可以定义四个函数,对应于同名的事件
before_apply_all
after_apply_all
before_apply_each
after_apply_each
这些函数将用一个参数调用,即事件上下文,可以用来更改文件的某些属性或检查即将写入的文件列表。例如,可以使用以下钩子更改脚本文件的属性
local utils = require 'utils'
local chmod = utils.ext 'chmod'
return {
-- Make `test-2/main` executable
after_apply_each = function(ctx)
local fname = "test-2/main"
if string.sub(ctx.dst, -#fname) == fname then
chmod {"+x", ctx.dst}
end
end
}
许可证
CNPL-v7+
依赖关系
~27–44MB
~812K SLoC