Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

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: about 1 month ago
JSON representation

๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ Synchronize installed packages on multiple machines

Lists

README

        

emplace



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


Build Status
Downloads
Version







## 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 |
| | RUA |
| | Yay |
| | Zypper |
| | Snap |
| | DNF/YUM |
| | Homebrew |
| | Pkg |
| | Chocolatey |
| | Scoop |
| | Cargo |
| | 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 Packaging status

### 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 --
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
# -- 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

๐Ÿ“ฆ

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