EnvHub is a simple tool to manage dotfiles and packages accross multiple machines.
Written in Rust, internally it uses nix/homebrew/pkgx/devbox to manage packages and home-manager/stow to manage dotfiles.
Using bash :
curl -sSL https://install.envhub.sh | bash
Using Cargo :
cargo install envhub
Using Nix :
cachix use tsirysndr
nix profile install --experimental-features "nix-command flakes" github:tsirysndr/envhub
Compile from source :
git clone https://github.com/tsirysndr/envhub.git
cd envhub
nix develop --experimental-features "nix-command flakes"
cargo install --path crates/cli
envhub --help
Using Homebrew :
brew install tsirysndr/tap/envhub
Or download the latest release for your platform here.
Initialize a new environment :
envhub init
It will create a new envhub.hcl
file and a dotfiles
directory in the current directory.
You can then edit the envhub.hcl
file to add packages and add dotfiles to the dotfiles
directory.
Enable the environment :
envhub use
The following example will install the hello
package, set the EDITOR
environment variable to vim
, and copy the .screenrc
and gradle.properties
files from the current directory to the home directory.
# Path: envhub.hcl
packages = [
"hello"
]
envs {
"EDITOR" = "vim"
}
file ".screenrc" {
source = ".screenrc"
}
file ".gradle/gradle.properties" {
content = "org.gradle.daemon=true"
}
See demo and examples for a more complete example.
Call from the command line:
dagger -m github.com/tsirysndr/daggerverse/envhub call \
use --environment github:tsirysndr/dotfiles-example \
--src .
call from a Fluent CI module:
import { use } from 'jsr:@fx/envhub';
await use(
".",
"github:tsirysndr/dotfiles-example"
);
You can use EnvHub as a GitHub Action to manage your dotfiles and packages in your CI/CD workflow.
- uses: tsirysndr/setup-envhub@v1
with:
version: 'v0.2.18'
- run: envhub --help