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 | bashUsing Cargo :
cargo install envhubUsing Nix :
cachix use tsirysndr
nix profile install --experimental-features "nix-command flakes" github:tsirysndr/envhubCompile 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 --helpUsing Homebrew :
brew install tsirysndr/tap/envhubOr download the latest release for your platform here.
Initialize a new environment :
envhub initIt 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 useThe 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
