2 releases

0.1.1 Mar 19, 2021
0.1.0 Mar 12, 2021

#442 in Operating systems

38 downloads per month

MIT license

2.5K SLoC

Crate rust-mcfg

Machine configurator, a cross-platform meta-package manager.

MIT License Minimum Rust Version crates.io docs.rs travis.ci GitHub stars

The mcfg crate and command-line tool, implements a simple Machine Configurator or meta-package manager to keep desktop environments the same across machines and wherever possible across operating systems. The tool makes use of existing package managers such as homebrew, apt, or yum. It allows for packages to be grouped into package sets which are the units of management and then package sets into groups for simple organization.

The tool keeps all of it's package sets organized in a repository which just happens to be a Git repo and so can be versioned and easily shared between machines. It allows for the specification of different installer tools that will be used to do actual package management, so the user doesn't need to remember specific command-lines or other details. This repo can also include any additional scripts or tools the user needs, and the execution of the package set includes a set of environment variables to allow scripts to run without knowing any O/S or machine specific paths or other details.

More information is found in the User Guide.

The tool

$ mcfg help
mcfg 0.1.0
Machine configurator.


    -h, --help       Prints help information
    -V, --version    Prints version information
    -v, --verbose    The level of logging to perform; from off to trace

    add            Add a new package-set to the local repository
    edit           Add an existing package-set in the local repository
    help           Prints this message or the help of the given subcommand(s)
    history        Show a history of install actions on the local machine
    init           Initialize a repository to manage package-set installs
    install        Install package-sets as described in the local repository
    installers     Edit the current installer registry file
    link-files     Link any files specified in package-sets as described in the local repository
    list           List package-sets in the local repository
    paths          Show current path locations
    refresh        Refresh the current repository
    remove         Remove an existing package-set from the local repository
    shell          Run a shell in the repository directory, with a basic script environment
    uninstall      Uninstall package-sets as described in the local repository
    update         Update package-sets as described in the local repository
    update-self    Show the current configuration

These can be grouped into those that 1) act on the package repository, 2) those that act on package sets, and 3) those that act on the installer registry.


Version 0.1.1

  • Close to ready, a lot of refactoring completed.
  • Added crate documentation, and some of the book.

Version 0.1.0

  • Initial commit.


  • More tests!


~877K SLoC