Command-line tool to mirror installed software on multiple machines.
## Features - [x] Outputs a human-readable (RON) file to sync between machines: `.emplace` - [x] Version control with git to automatically push & pull updates - [x] Automatic prompt after installing a package - [x] Integrates well with dotfiles repositories - [x] Parses history file - Package managers supported: | OS | Package Manager | | :---: | --- | | | Apt | | | GNU Guix | | | Nix | | | Pacman | | | Paru | | | RUA | | | Yay | | | Zypper | | | Snap | | | DNF/YUM | | | Homebrew | | | Pkg | | | Chocolatey | | | Scoop | | | Cargo | | | Cargo B(inary)Install | | | Rustup Component | | | Python Pip | | | Python Pip 3 | | | Node Package Manager | | | Ruby Gem | | | Go | - Shells supported: | | Shell | | :---: | --- | | | [Bash](#bash) | | | [Zsh](#zsh) | | | [Fish](#fish) | | | [Nu](#nu) | ## Installation ### Getting Started 1. Install the *emplace* binary: ### Windows #### Scoop ```sh scoop install emplace ``` ### NixOS ```sh nix-env -iA nixos.emplace ``` ### Linux, MacOS, Windows #### Rust ```sh cargo install emplace ``` #### Binary Download the latest binary from [releases](https://github.com/tversteeg/emplace/releases) for your OS and put it somewhere in your PATH. 2. Add the init script to your shell's config file: #### Bash Add the following to the end of `~/.bashrc`: ```sh # ~/.bashrc source <(emplace init bash) ``` #### Zsh Add the following to the end of `~/.zshrc`: ```sh # ~/.zshrc eval "$(emplace init zsh)" ``` #### Fish Add the following to the end of `~/.config/fish/config.fish`: ```sh # ~/.config/fish/config.fish emplace init fish | source ``` #### Nu Run the following in your shell: ```sh emplace init nu | config set_into prompt ``` 3. Change the configuration file (optional) When you want to use a different configuration file from the default one you can change `emplace init $SHELL` with `emplace init $SHELL -c path/to/my/config.toml`. This will set the `EMPLACE_CONFIG="path/to/my/config.toml"` environment variable. This can be overwritten with `export EMPLACE_CONFIG="path/to/other/config.toml"` _after_ the init function, except in the Nu shell. ## Usage ### Mirroring Packages Invoke the supported package manager of choice using the command line in a normal way and you will automatically be prompted to mirror the package, for example: ```sh cargo install topgrade # -- or -- cargo binstall zellij # -- or -- rustup component add rustfmt # -- or -- sudo apt install meld # -- or -- pacman -S zsh # -- or -- paru -S ventoy # -- or -- rua install peek # -- or -- yay -S thunar # -- or -- sudo snap install scrcpy # -- or -- npm install -g release # -- or -- pip3 install --user termtosvg # -- or -- choco install neovim # -- or -- scoop install curl # -- or -- nix-env -iA nixpkgs.nixfmt # -- or -- brew install wget # -- or -- sudo dnf install htop # -- or -- guix install 0ad # -- or -- gem install aasm-diagram # -- or -- go get colorgo # -- or -- pkg install nginx ``` ### Synchronizing On Another Machine Just invoke `emplace install`, and you will be prompted with the packages to install: ```sh emplace install ``` ### History Analysis You can also parse history files, this will try to extract installation commands from each line. #### Bash & Zsh ```sh emplace history $HISTFILE ``` #### Fish ```sh emplace history ~/.local/share/fish/fish_history ``` ### Removing Synchronized Packages Run `emplace clean` and select the packages you want to be cleaned, they won't be removed from your system. ### Creating and modifying config files Run `emplace config --new` to create a new config and configure the repository or `emplace config --path` to retrieve the path to the configuration file. ## Development Status This software isn't actively developed on by me anymore, I do however review and accept pull requests. ## Contributors Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):