boxunbox is a simple symlinker inspired by GNU stow.
In all honesty, I wanted to be able to control where each individual folder got linked and the way stow handles the .stowrc files isn't very intuitive in my opinion. Therefore, boxunbox stores its config files in the packages themselves. For example, unbox zsh would use the config at zsh/.bub.toml, not the current working directory like stow. This means you can also nest config files and they'll be respected by design.
boxunbox |
stow |
|---|---|
| Absolute (default) and relative links | Relative links only |
| Per-package configs | Per-operation config |
| OS-specific configs | N/A |
| Only symlinks files by default, creating directories as needed | Creates as few symlinks as possible |
| Re-creates directory structure in target until nested config is found | Re-creates directory structure in target |
At the time of writing, there are currently two supported installation methods: via the AUR or manually, with cargo. I used to publish to crates.io as well, but after redesigning the codebase to use subcrates, publishing to crates.io has become too convoluted. It requires that I publish all subcrates in order to package the binary, but I cannot publish the subcrates without packaging, making the process circular. I could probably get around this by restructuring my project yet again, but it's not worth it to me.
There are two AUR packages:
- boxunbox: latest tagged release
- boxunbox-git: latest commit on
main
They aren't usually different by much. I recommend installing with an AUR helper:
paru -S boxunbox
# or
paru -S boxunbox-gitFirst, clone the repostiory, then compile/install with one command:
git clone https://github.com/dablenparty/boxunbox.git
cargo install --path boxunboxExplore cargo install --help for more installation options.
For the CLI, read the output of unbox --help. See the example config for an overview of the config file. Alternatively, you can just view the package config struct definition if you're comfortable with Rust.
Package config files are stored as .bub.toml or .bub.<platform>.toml for OS-specific configs. See this doc page for a list of possible values for <platform>, although the CLI has a flag -o that can create one for you automatically. OS-specific configs are always preferred when they exist.