#shell #cli #mirror #sync

app emplace

Command-line tool to mirror installed software on multiple machines

59 releases

0.3.9 Nov 18, 2020
0.3.7 Sep 11, 2020
0.3.6 Jul 30, 2020
0.2.14 Mar 12, 2020
0.2.7 Nov 30, 2019

#58 in Command line utilities

Download history 116/week @ 2020-08-11 60/week @ 2020-08-18 62/week @ 2020-08-25 118/week @ 2020-09-01 132/week @ 2020-09-08 12/week @ 2020-09-15 24/week @ 2020-09-22 17/week @ 2020-09-29 1/week @ 2020-10-06 7/week @ 2020-10-13 88/week @ 2020-10-20 6/week @ 2020-10-27 23/week @ 2020-11-03 9/week @ 2020-11-10 81/week @ 2020-11-17 65/week @ 2020-11-24

206 downloads per month

AGPL-3.0-or-later

110KB
2.5K SLoC

emplace

Command-line tool to mirror installed software on multiple machines.

Build Status Downloads Version


Features

  • Outputs a human-readable (RON) file to sync between machines: .emplace

  • Version control with git to automatically push & pull updates

  • Automatic prompt after installing a package

  • Integrates well with dotfiles repositories

  • Parses history file

  • Package managers supported:

    OS Package Manager
    Apt
    Nix
    Pacman
    RUA
    Yay
    Snap
    DNF/YUM
    Homebrew
    Chocolatey
    Scoop
    Cargo
    Rustup Component
    Python Pip
    Python Pip 3
    Node Package Manager
  • Shells supported:

    Shell
    Bash
    Zsh
    Fish
    Nu

Installation Packaging status

Getting Started

  1. Install the emplace binary:

    Windows

    Scoop

    scoop install emplace
    

    Source

    Rust

    cargo install emplace
    
  2. Add the init script to your shell's config file:

    Bash

    Add the following to the end of ~/.bashrc:

    # ~/.bashrc
    
    source <(emplace init bash)
    

    Zsh

    Add the following to the end of ~/.zshrc:

    # ~/.zshrc
    
    eval "$(emplace init zsh)"
    

    Fish

    Add the following to the end of ~/.config/fish/config.fish:

    # ~/.config/fish/config.fish
    
    emplace init fish | source
    

    Nu

    Run the following in your shell:

    emplace init nu | config set_into prompt
    

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:

cargo install topgrade
# -- or --
rustup component add rustfmt
# -- or --
sudo apt install meld
# -- or --
pacman -S zsh
# -- 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

Synchronizing On Another Machine

Just invoke emplace install, and you will be prompted with the packages to install:

emplace install

History Analysis

Invoke emplace history $HISTFILE or emplace history /path/to/history/file.
It will parse your history and prompt to select, which packages you want to synchronize.

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.

Contributors

Thanks goes to these wonderful people (emoji key):


Logan Magee

💻 🐛

Vladimir

📦 💻 🐛 🚧 👀

Jozef Hollý

🤔

Oleksii Filonenko

💻 📦 👀

x0f5c3

💻

Benjamin S. Leveritt

🤔 🚧

Michael Borejdo

🤔

Ken Tobias

📦

This project follows the all-contributors specification. Contributions of any kind welcome!

Dependencies

~7MB
~100K SLoC