https://github.com/tversteeg/emplace
๐ฉโโค๏ธโ๐โ๐ฉ Synchronize installed packages on multiple machines
https://github.com/tversteeg/emplace
cli configuration dotfiles git multiple-machines package-manager-tool rust synchronization-service
Last synced: 7 months ago
JSON representation
๐ฉโโค๏ธโ๐โ๐ฉ Synchronize installed packages on multiple machines
- Host: GitHub
- URL: https://github.com/tversteeg/emplace
- Owner: tversteeg
- License: agpl-3.0
- Created: 2019-09-08T13:04:33.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2025-04-12T02:38:51.000Z (7 months ago)
- Last Synced: 2025-04-12T03:30:03.340Z (7 months ago)
- Topics: cli, configuration, dotfiles, git, multiple-machines, package-manager-tool, rust, synchronization-service
- Language: Rust
- Homepage:
- Size: 996 KB
- Stars: 273
- Watchers: 5
- Forks: 26
- Open Issues: 17
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
- awesome-rust - tversteeg/emplace
- awesome-rust-cn - tversteeg/emplace - ๅจๅคๅฐๆบๅจไธๅๆญฅๅฎ่ฃ ่ฝฏไปถๅ (ๅบ็จ็จๅบ Applications / ๅ ฌ็จไบไธๅ ฌๅธ Utilities)
- awesome-rust - tversteeg/emplace - Synchronize installed packages on multiple machines (Applications / Utilities)
- fucking-awesome-rust - tversteeg/emplace - Synchronize installed packages on multiple machines (Applications / Utilities)
- fucking-awesome-rust - tversteeg/emplace - Synchronize installed packages on multiple machines (Applications / Utilities)
- jimsghstars - tversteeg/emplace - ๐ฉโโค๏ธโ๐โ๐ฉ Synchronize installed packages on multiple machines (Rust)
README
emplace
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) |
### 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)):

Logan Magee
๐ป ๐

Vladimir
๐ฆ ๐ป ๐ ๐ง ๐

Jozef Hollรฝ
๐ค

Oleksii Filonenko
๐ป ๐ฆ ๐

x0f5c3
๐ป

Benjamin S. Leveritt
๐ค ๐ง

Michael Borejdo
๐ค

Ken Tobias
๐ฆ

Adam Stephens
๐

omar
๐

5c0tt-b0t
๐ค ๐

Modded Gamers
๐

John Vandenberg
๐ ๐ค

cryolithic
๐ฆ

Jeremy Smart
๐ฆ

Rui Chen
๐ง

Alexander Zaitsev
๐ง
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!