Command-line tool to mirror installed software on multiple machines

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

emplace

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




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 | | | 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 | | | Zsh | | | Fish | | | Nu |

Installation

Getting Started

  1. Install the emplace binary:

    Windows

    Scoop

    NixOS

    Linux, MacOS, Windows

    Rust

    Binary

    Download the latest binary from 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:

    Zsh

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

    Fish

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

    Nu

    Run the following in your shell:

  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:

Synchronizing On Another Machine

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

History Analysis

You can also parse history files, this will try to extract installation commands from each line.

Bash & Zsh

Fish

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):


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 specification. Contributions of any kind welcome!

Issues

Collection of the latest Issues

jtagcat

jtagcat

enhancement
0

What is the name of the package manager you would like to see support for? Flatpak

What operating systems or derivative does this package manager support?

  • Linux

If Linux, is it only for a specific distro?

What type of package manager is this?

  • General purpose

Are administrator privileges required? (sudo, etc.)

  • Yes(ish)
jayvdb

jayvdb

enhancement
0

What is the name of the package manager you would like to see support for? MacPorts https://www.macports.org/

What operating systems or derivative does this package manager support?

  • Windows
  • Mac
  • Linux
  • BSD
  • Redox
  • iOS
  • Android
  • Other, namely:

If Linux, is it only for a specific distro?

  • Yes, namely:
  • No

What type of package manager is this?

  • Programming language specific (e.g. Cargo for Rust)
  • General purpose (e.g. APT on Debian)
  • Other, namely:

Are administrator priviliges required? (sudo, etc.)

  • Yes
  • No
jayvdb

jayvdb

enhancement
0

What is the name of the package manager you would like to see support for? pipx. If not as a manager, it should be an alias for the pip3 manager

What operating systems or derivative does this package manager support?

  • Windows
  • Mac
  • Linux
  • BSD
  • Redox
  • iOS
  • Android
  • Other, namely:

If Linux, is it only for a specific distro?

  • Yes, namely:
  • No

What type of package manager is this?

  • Programming language specific: Python
  • General purpose (e.g. APT on Debian)
  • Other, namely:

Are administrator priviliges required? (sudo, etc.)

  • Yes
  • No
jayvdb

jayvdb

bug
0

Describe the bug I manually added files to my emplace repo. emplace didnt detect its workarea is out of sync, and didnt report that it had failed to push the changes.

To Reproduce Steps to reproduce the behavior:

  1. Go to Github repo, add files manually
  2. Install something locally that emplace will try to submit to repo
  3. Check repo for new emplace addition

Expected behavior emplace should either automatically detect that master has new changes, or fail so the user can manually rectify the conflict.

jayvdb

jayvdb

enhancement
4

What is the name of the package manager you would like to see support for? antigen

What operating systems or derivative does this package manager support?

  • Windows
  • Mac
  • Linux
  • BSD
  • Redox
  • iOS
  • Android
  • Other, namely:

If Linux, is it only for a specific distro?

  • Yes, namely:
  • No

What type of package manager is this?

  • Programming language specific (e.g. Cargo for Rust)
  • General purpose (e.g. APT on Debian)
  • Other, namely: zsh plugins

Are administrator priviliges required? (sudo, etc.)

  • Yes
  • No
jayvdb

jayvdb

bug
4

Describe the bug A failed attempt to install a package with brew should not initiate emplace.

To Reproduce

Expected behavior If the install was unsuccessful, it shouldnt be mirrored to other machines.

Machine information

Software version

emplace 1.2.2

Operating system

Darwin 20.3.0

Command-line

Environment variables

Git version

Compile time information

  • Profile: release
  • Target triple: x86_64-apple-darwin
  • Family: unix
  • OS: macos
  • Architecture: x86_64
  • Pointer width: 64
  • Endian: little
  • CPU features: fxsr,sse,sse2,sse3,ssse3
  • Host: x86_64-apple-darwin
Versions

Find the latest versions by id

v1.4.2 - Nov 14, 2021

Added

  • Support for OpenSuse (#187) @cryolithic

Changed

  • Updated many dependencies

v1.4.1 - Mar 22, 2021

Fixed

  • Pip commands with the -r flag such as pip install -r requirements.txt are ignored (#173)
  • Cargo commands with the --path flag such as cargo install --path path are ignored

v1.4.0 - Mar 18, 2021

Added

  • -y/--yes flag to emplace history which will automatically select all and sync all found packages without prompting the user (#165)

Changed

  • Package names beginning with special characters are now ignored (#169)

Fixed

  • Remove duplicate packages when using emplace history (#170)
  • emplace history multiselect theme is now consistent with emplace install (#165)

v1.3.0 - Mar 16, 2021

Added

  • -y/--yes flag to emplace install which will automatically install all synced changes without prompting the user

Changed

  • Bump console from 0.13.0 to 0.14.1 (#162) @dependabot
  • Bump dialoguer from 0.7.1 to 0.8.0 (#163) @dependabot

v1.2.2 - Mar 13, 2021

Fixed

  • Bug in init when canonicalization of a path fails for an empty configuration directory (#154)

v1.2.1 - Mar 11, 2021

Fixed

  • Package name with prefix being matched, for example bpkg being seen as pkg (#156)

Changed

  • Bump run_script from 0.6.4 to 0.7.0 (#155) @dependabot-preview
  • Bump serde from 1.0.123 to 1.0.124 (#153) @dependabot-preview

v1.2.0 - Feb 25, 2021

Added

  • Pkg package manager (#149)

Changed

  • Bump run_script from 0.6.3 to 0.6.4 (#150) @dependabot-preview

v1.1.0 - Feb 19, 2021

Added

  • Go package manager (#146)
  • Ruby Gem package manager (#147)

v1.0.0 - Feb 08, 2021

Major version release 🎉

The command line options and the file format have been stabilized at this point

v0.4.4 - Feb 04, 2021

Added

  • GNU Guix package manager

Fixed

  • Pacman: added known flags with values

v0.4.3 - Jan 28, 2021

Added

  • Cargo: catch +nightly, +beta & +stable flags

Changed

  • Set EMPLACE_CONFIG environment variable to path passed with emplace -c PATH init ... (#88)
  • Bump log from 0.4.13 to 0.4.14 (#145) @dependabot-preview
  • Bump serde from 1.0.119 to 1.0.123 (#142) @dependabot-preview

v0.4.2 - Jan 18, 2021

Fixed

  • emplace history <PATH> subcommand not properly taking path argument (#140)

Changed

  • Bump log from 0.4.11 to 0.4.13 (#138) @dependabot-preview
  • Bump serde from 1.0.118 to 1.0.119 (#139) @dependabot-preview
  • Bump anyhow from 1.0.37 to 1.0.38 (#137) @dependabot-preview

v0.4.1 - Jan 07, 2021

Added

  • emplace bugreport subcommand that will print information that can be copied to bug reports
  • Colored help when using emplace -h

Changed

  • Ordering of subcommands in help isn't alphabetic anymore
  • Bump enum_dispatch from 0.3.4 to 0.3.5 (#136) @dependabot-preview

v0.4.0 - Jan 02, 2021

Breaking Change

  • Removed emplace link command. After some deliberation I've come to the conclusion that this feature is outside the scope for this application. Other software like gnu stow is better suited for this task.

v0.3.10 - Jan 02, 2021

Fixed

  • Sub command mismatch in package names, for example apt install test-install would match test- (#131)

Changed

  • Bump anyhow from 1.0.34 to 1.0.37 (#134) @dependabot-preview
  • Bump itertools from 0.9.0 to 0.10.0 (#132) @dependabot-preview
  • Bump ron from 0.6.2 to 0.6.4 (#128) @dependabot-preview
  • Bump shellexpand from 2.0.0 to 2.1.0 (#129) @dependabot-preview
  • Bump simplelog from 0.8.0 to 0.9.0 (#126) @dependabot-preview
  • Bump toml from 0.5.7 to 0.5.8 (#127) @dependabot-preview
  • Bump serde from 1.0.117 to 1.0.118 (#123) @dependabot-preview
  • Bump strum_macros from 0.19.4 to 0.20.1 (#120) @dependabot-preview
  • Bump strum from 0.19.5 to 0.20.0 (#121) @dependabot-preview

v0.3.9 - Nov 18, 2020

Added

  • DNF package manager (#118) @l1a

Changed

  • Bump anyhow from 1.0.33 to 1.0.34 (#117) @dependabot-preview
  • Bump enum_dispatch from 0.3.3 to 0.3.4 (#116) @dependabot-preview

v0.3.8 - Oct 21, 2020

Added

  • Support for Nu shell (#10)

Fixed

  • Subcommands with prefix aren't triggered anymore, "... uninstall" was wrongly detected as "... install"

Changed

  • Bump dialoguer from 0.6.0 to 0.7.1 (#115) @dependabot-preview
  • Bump serde from 1.0.116 to 1.0.117 (#112) @dependabot-preview
  • Bump toml from 0.5.6 to 0.5.7 (#111) @dependabot-preview
  • Bump strum from 0.19.2 to 0.19.5 (#110) @dependabot-preview
  • Bump strum_macros from 0.19.2 to 0.19.4 (#109) @dependabot-preview
  • Bump anyhow from 1.0.32 to 1.0.33 (#108) @dependabot-preview
  • Bump serde from 1.0.115 to 1.0.116 (#107) @dependabot-preview

v0.3.7 - Sep 11, 2020

Fixed

  • Scoop installation (#106)
  • Package managers with extensions (.exe & .cmd) not being detected on Windows (#105)
  • Wrong use of 'sudo' on Windows (#105)
  • Non-executable package managers not being detected (#105)

Changed

  • Bump ron from 0.6.0 to 0.6.2 @dependabot-preview
  • Bump enum_dispatch from 0.3.21 to 0.3.3 @dependabot-preview
  • Bump clap from 2.33.1 to 2.33.3 @dependabot-preview
  • Bump serde from 1.0.114 to 1.0.115 @dependabot-preview
  • Bump strum from 0.18.0 to 0.19.2 @dependabot-preview
  • Bump strum_macros from 0.18.0 to 0.19.2 @dependabot-preview

v0.3.6 - Jul 30, 2020

Added

  • emplace link subcommand, which allows you to create a symlink from the repository
  • Support for Homebrew package manager (#87)

Fixed

  • Committing typos (#90) @bensleveritt

v0.3.5 - Jun 23, 2020

Fixed

  • Mistakes introduced with previous release (#80) @x0f5c3

Changed

  • Bump serde from 1.0.112 to 1.0.114 (#82) @dependabot-preview
  • Bump dirs from 2.0.2 to 3.0.0 (#81) @dependabot-preview
  • Bump serde from 1.0.111 to 1.0.112 (#79) @dependabot-preview

v0.3.4 - Jun 14, 2020

Added

  • Config subcommand (#77) @x0f5c3
  • Prompt to select what to do when cloning a repository (#77) @x0f5c3

Changed

  • Bump enum_dispatch from 0.3.0 to 0.3.1 (#76) @dependabot-preview
  • Bump serde from 1.0.110 to 1.0.111 (#75) @dependabot-preview
  • Bump console from 0.11.2 to 0.11.3 (#72) @dependabot-preview
  • Bump simplelog from 0.7.6 to 0.8.0 (#69) @dependabot-preview
  • Bump anyhow from 1.0.30 to 1.0.31 (#70) @dependabot-preview
  • Bump run_script from 0.6.2 to 0.6.3 (#68) @dependabot-preview
  • Bump anyhow from 1.0.28 to 1.0.30 (#67) @dependabot-preview

v0.3.3 - May 12, 2020

Added

  • Symbolic link is created if emplace.toml is detected in target repository
  • --target .. & --toolchain .. are captured in Rustup Component

Fixed

  • Polling of installation program (#56) @0xd34b33f
  • Yay package manager bug (#56) @0xd34b33f
  • Performance increase of catch mechanism

Changed

  • Bump clap from 2.33.0 to 2.33.1 (#66) @dependabot-preview
  • Bump serde from 1.0.106 to 1.0.110 (#65) @dependabot-preview

v0.3.2 - May 08, 2020

Added

  • Optional [[symlink]] entry to emplace.toml which will automatically create a symlink for your dotfiles for you, see the wiki for more information

v0.3.1 - May 06, 2020

Fixed

  • Error displayed in terminal with Bash

v0.3.0 - May 05, 2020

Breaking Change

  • .emplace format is slightly different, it's automatically migrated to the new version though

Changed

  • The timestamp and [INFO] box isn't shown in the console anymore

Fixed

  • Invisible pointer problem (#54) @0xd34b33f
  • Many argument handling discrepancies are now handled correctly
  • More unused tags are ignored

v0.2.21 - Apr 30, 2020

Added

  • Nix support (#52) @filalex77

v0.2.20 - Apr 30, 2020

Added

  • History analysis (#47) @0xd34b33f

Changed

  • Update dialoguer dependency

v0.2.19 - Apr 28, 2020

Fixed

  • Missing emplace file is created in repository on clone (#43)

Changed

  • Failed clone will give the user manual instructions (#43)

v0.2.18 - Apr 26, 2020

Added

  • Yay support (#42) @0xd34b33f

Changed

  • Bump regex from 1.3.6 to 1.3.7 (#41) @dependabot-preview

v0.2.17 - Apr 12, 2020

Fixed

  • APT detection/installation not working (#40)

Changed

  • Bump serde from 1.0.105 to 1.0.106 (#39) @dependabot-preview

Information - Updated Apr 20, 2022

Stars: 171
Forks: 15
Issues: 11

Repositories & Extras

rust-clipboard is a cross-platform library for getting and setting the contents of the OS-level clipboard

It has been tested on Windows, Mac OSX, GNU/Linux, and FreeBSD

rust-clipboard is a cross-platform library for getting and setting the contents of the OS-level clipboard

EventStoreDB Rust Client

EventStoreDB rust gRPC gRPC Client

EventStoreDB Rust Client

Rust CLI template

A quick and dirty CLI boilerplate template for Rust

Rust CLI template

Roctogen: a rust client library for the GitHub v3 API

This client API is generated from the Isahc HTTP client

Roctogen: a rust client library for the GitHub v3 API

Rust CLI Template

Template for creating Rust-based CLI tools

Rust CLI Template

Pure Rust client for YubiHSM 2 devices from Yubico

YubiHSM 2 devices from Documentation

Pure Rust client for YubiHSM 2 devices from Yubico

Google Cloud Rust Client

This repository contains Google Cloud Platform services

Google Cloud Rust Client

Parsec Rust Client

When using the JWT-SVID authentication method, the client will expect the SPIFFE_ENDPOINT_SOCKET environment variable to contain the path of the Workload API endpoint

Parsec Rust Client

A Rust client for connecting to OmniSciDB via its RPC protocol of Thrift

OmniSciDB via its RPC protocol of Cargo, using cargo build

A Rust client for connecting to OmniSciDB via its RPC protocol of Thrift

Cardano Rust CLI

com/clemenshorn/cardano-rust-cli

Cardano Rust CLI

Godot Rust CLI is an easy to incorporate Rust modules into your Godot project

Also keep in mind that the main branch will usually be ahead of the version on GitHub repo

Godot Rust CLI is an easy to incorporate Rust modules into your Godot project
Facebook Instagram Twitter GitHub Dribbble
Privacy