A fast, simple hard link manager
  • Rust 86%
  • Nix 14%
Find a file
2026-04-19 21:16:21 +02:00
src init 2026-04-19 21:16:21 +02:00
.gitignore init 2026-04-19 21:16:21 +02:00
Cargo.lock init 2026-04-19 21:16:21 +02:00
Cargo.toml init 2026-04-19 21:16:21 +02:00
flake.lock init 2026-04-19 21:16:21 +02:00
flake.nix init 2026-04-19 21:16:21 +02:00
LICENSE init 2026-04-19 21:16:21 +02:00
package.nix init 2026-04-19 21:16:21 +02:00
README.md init 2026-04-19 21:16:21 +02:00
treefmt.toml init 2026-04-19 21:16:21 +02:00

Weave

A fast, simple hard link manager. Weave serves a similar purpose to GNU Stow, but using hard links rather than symlinks.

Usage

By default, Weave uses the weave.toml in the current working directory as its configuration file. This can be overridden with the --config option.

A typical weave.toml might look like this:

from = "my-dotfiles"
to = "~"

The my-dotfiles directory should follow this structure: my-dotfiles/<choice>/path/to/file. For example, if you intend to configure a program like Helix, you could have this path to the Helix configuration file: my-dotfiles/helix/.config/helix/config.toml. By default, Weave will simply link all directories in my-dotfiles, but if you want to just link your Helix configuration files, you can just run weave helix. You don't need to split these up, but it turns out to be useful in some scenarios.

Example

This is what it looks like when I run Weave on my dotfiles repository:

$ weave --verbose --force
 INFO weave: weaving from home to /home/helvetica
 INFO weave: choices are ["nix", "fish", "helix", "qutebrowser", "ssh", "git", "bash", "mpv", "bottom"]
 INFO weave: /home/helvetica/.config/nix/nix.conf already links to home/nix/.config/nix/nix.conf
 INFO weave: /home/helvetica/.config/fish/config.fish already links to home/fish/.config/fish/config.fish
 INFO weave: /home/helvetica/.config/helix/languages.toml already links to home/helix/.config/helix/languages.toml
 INFO weave: /home/helvetica/.config/helix/themes/revontuli_transparent.toml already links to home/helix/.config/helix/themes/revontuli_transparent.toml
 INFO weave: /home/helvetica/.config/helix/themes/revontuli_night_transparent.toml already links to home/helix/.config/helix/themes/revontuli_night_transparent.toml
 INFO weave: /home/helvetica/.config/helix/themes/revontuli_night.toml already links to home/helix/.config/helix/themes/revontuli_night.toml
 INFO weave: /home/helvetica/.config/helix/themes/github_dark_high_contrast_transparent.toml already links to home/helix/.config/helix/themes/github_dark_high_contrast_transparent.toml
 INFO weave: /home/helvetica/.config/helix/themes/revontuli.toml already links to home/helix/.config/helix/themes/revontuli.toml
 INFO weave: /home/helvetica/.config/helix/config.toml already links to home/helix/.config/helix/config.toml
 INFO weave: /home/helvetica/.config/qutebrowser/config.py already links to home/qutebrowser/.config/qutebrowser/config.py
 INFO weave: /home/helvetica/.ssh/config already links to home/ssh/.ssh/config
 INFO weave: /home/helvetica/.config/git/config already links to home/git/.config/git/config
 INFO weave: /home/helvetica/.config/git/ignore already links to home/git/.config/git/ignore
 INFO weave: /home/helvetica/.bashrc already links to home/bash/.bashrc
 INFO weave: /home/helvetica/.config/mpv/input.conf already links to home/mpv/.config/mpv/input.conf
 INFO weave: linked /home/helvetica/.config/mpv/mpv.conf to home/mpv/.config/mpv/mpv.conf
 INFO weave: linked /home/helvetica/.config/bottom/bottom.toml to home/bottom/.config/bottom/bottom.toml
 INFO weave: 2 linked, 0 overwritten, 15 skipped

Run weave --help for more information.