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 配置

Download history 3/week @ 2024-06-27 42/week @ 2024-07-04 11/week @ 2024-07-25

每月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