Project | Exogenesis |
---|---|
Homepage | https://github.com/moonglum/exogenesis |
CI | |
Code Metrics | |
Gem Version | |
Dependencies |
A collection of classes that help you install, update and teardown package managers and other things useful for your dotfiles. It's something like a meta package manager (package manager is the wrong word... still searching for a better one). After setting it up you can do the following:
rake up
: Setup, install and update your softwarerake down
: Remove everything installed by Exogenesisrake clean
: Run cleanup tasksIt creates a beautiful output if you want it to (see Configuration). For a little demonstration (a little updated) see this asciinema recording of my rake install
running on my (already installed :wink:) system.
Please read the source code of this gem before you use it. I give no guarantee that this will not destroy your computer entirely.
The current best practice is to create a Rakefile in your dotfile repo that looks something like this:
#!/usr/bin/env rake
require "yaml"
require "exogenesis"
Output.fancy
packages_file = YAML.load_file("packages.yml")
ship = Ship.new(packages_file)
[:up, :down, :clean].each do |task_name|
desc "#{task_name.capitalize} the Dotfiles"
task task_name do
ship.public_send task_name
end
end
You can find a list of real-world usage of this gem here. There are links to the actual install files there, so you can see how they did it.
...and you really like it, you can add the exogenesis badge to the title of your dotfile's README and link to this project:
[![badge](http://img.shields.io/badge/%F0%9F%9A%80-Created_with_Exogenesis-be1d77.svg)](https://github.com/moonglum/exogenesis)
Every class has the following methods (with the exception of initialize
they all take no arguments):
initialize
: The arguments are arbitrary, please see the individual files for itup
: Installs the package manager itself, all packages and updates the package manager itself and all packagesclean
: Starts a clean-up processdown
: Uninstalls all packages and the package manager itselfNot all package managers will need all of the methods. Just do not implement them.
Additions of new classes are more than welcome, even if they are complimentary to the ones already provided. If you want to contribute a new class, please see the interface section and inherit from Passenger
. Please use the Executor singleton for communicating the status with the user and for executing shell scripts.
So far, the following people have contributed to the project: