#dotfiles #management

bin+lib hm

家庭管理员。比另一个dotfile管理器略多。

27 个版本

0.7.5 2022年11月5日
0.7.3 2021年9月28日
0.6.7 2021年6月2日
0.6.4 2021年3月23日
0.3.5 2020年11月30日

#371文件系统

Download history 1/week @ 2024-03-10 6/week @ 2024-03-31 1/week @ 2024-04-07

每月78 次下载

Apache-2.0

50KB
946

Continuous integration

有一个包含所有东西的dotfiles目录吗?让homemaker把它们都放到正确的位置。

查看 变更日志

homemaker 在行动

hm in action

安装

  • 从crates.io安装: cargo install hm
  • 从github安装(可能处于某种不稳定状态): cargo install --git https://github.com/hlmtre/homemaker
  • 本地克隆: cargo install --path .
  1. 在任意位置创建一个config.toml文件(当你运行hm时指定-c)或者在~/.config/homemaker/
  2. 在文件中输入要执行的事情。示例
## config.toml

[[obj]]
file = 'tmux.conf' # simple things - symlink or copy a file somewhere
source = '~/dotfiles/.tmux.conf'
destination = '~/.tmux.conf'
method = 'symlink'

[[obj]]
task = 'zt' # more complicated - a task.
solution = 'cd ~/dotfiles/zt && git pull'
dependencies = ['maim, slop']
os = 'linux::debian'

[[obj]]
task = 'maim_dependencies'
solution = 'sudo apt install -y libxfixes-dev libglm-dev libxrandr-dev libglew-dev libegl1-mesa-dev libxcomposite-dev'
os = 'linux::debian' # only if the platform matches.
# valid OS values we differentiate between are:
# linux::fedora
# linux::debian
# linux::ubuntu
# windows

[[obj]]
task = 'maim'
source = '~/dotfiles/zt/maim'
solution = 'cd ~/dotfiles/zt/maim; make clean; cmake -DCMAKE_INSTALL_PREFIX="/usr" ./ && make && sudo make install'
method = 'execute'
dependencies = ['maim_dependencies']

[[obj]]
task = 'slop'
source = '~/dotfiles/zt/slop'
solution = 'cd ~/dotfiles/zt/slop; make clean; cmake -DCMAKE_INSTALL_PREFIX="/usr" ./ && make && sudo make install'
method = 'execute'
os = 'linux::debian'

[[obj]]
task = 'slop'
source = '~/dotfiles/zt/slop'
solution = 'cd ~/dotfiles/zt/slop; make clean; cmake -DCMAKE_INSTALL_PREFIX="/usr" ./ && make && sudo make install'
method = 'execute'
os = 'linux::debian'

[[obj]]
task = 'nvim'
method = 'execute'
solution = "test -x /usr/local/bin/nvim || (git clone https://github.com/neovim/nevim.git ~/src/ && cd ~/src/neovim && make CMAKE_BUILD_TYPE=RelWithDebInfo CMAKE_INSTALL_PREFIX=/usr/local/ && sudo make install)" # if nvim is not there and executable, run our solution.
dependencies = ['vim-plug']

[[obj]]
task = 'vim-plug'
method = 'execute'
solution = "sh -c 'curl -fLo ~/.local/share/nvim/site/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'"
  1. hm -c /path/to/your/config.toml
  • 简单的file条目:在某个地方创建符号链接或复制文件 - 通常是一个配置文件。
  • 任务是比较复杂的操作 - 运行脚本、下载/编译软件等。它们可以限制在特定的平台上(在上面的main_dependencies任务中指定了不同的值)。

为什么选择homemaker?

  • 与gns stow相比,homemaker支持的不仅仅是创建镜像的符号链接文件系统。
  • 依赖解析
    • 指定一组要完成的任务,每个任务都有自己的依赖关系,并观察它们以某种满足每个任务依赖关系的顺序完成。
    • 例如,在示例config.toml(我实际使用的那个)中,maim依赖于安装一些图形库。我创建了一个名为maim_dependencies的任务,hm会在尝试完成maim之前完成maim_dependencies
    • zt有两个依赖项:maimslop。hm会在尝试完成zt之前完成zt下的整个依赖树。
    • homemaker 如果依赖树无法解决会发出抱怨,并显示一个希望对你有帮助的解释。![依赖图](https://img.gs/czjpqfbdkz/800/https://raw.githubusercontent.com/hlmtre/homemaker/6364df86b5a8ec59f4e959e334228b826210d949/doc/dep_graph.png) ![依赖图](https://img.gs/czjpqfbdkz/800,2x/https://raw.githubusercontent.com/hlmtre/homemaker/6364df86b5a8ec59f4e959e334228b826210d949/doc/dep_graph.png 2x) 宽度:800 高度:108
  • 允许指定要执行的配置部分(目标任务)。只想运行一个任务?-t <任务名称>

subtree

homemaker 无意中覆盖了之前用 Go 编写的一个现有的 dotfile 管理器。链接 在此

使用 spacemacs 构建 和 neovim。

没有 rust-analyzer 就无法完成。

依赖

~7–17MB
~210K SLoC