furnish
A provisioning tool written in go
enabling you to provision your local machine. Currently in alpha and supporting
macOS only.
Getting started
To get started edit the furnish.yaml
file
and add the packages you want to install.
Currently, the supported package manager is brew
and if you don't have brew
installed, we can install it for you
if you're using the binary distribution.
package-managers
field under global
is used to specify the package managers you want to use.
The package manager whose default
field is set to true will be used by default without specifying the manager in
the packages
module.
furnish.yaml
is seperated into something called Stages
. Every can have one or many modules.
Modules themselves can have dependencies on other modules.
Every module can be optional
which prompts the user if they want to apply it or not.
Every module can be mandatory
which stops the script if it fails applying the module.
A module must be enabled with enabled: true
for it to execute. Setting enabled
to false
will skip applying the
module
Currently available modules are:
packages
xcode-select
shell
ssh
xcode-select
can be installed by specifying xcode-select
as a module.
It has the following properties
enabled
- A boolean specifying if we should install xcode-select
. Defaults to true
.
update
- A boolean specifying if we should update the
mandatory
- A boolean specifying if the module is mandatory. Defaults to false
.
Installing packages
To install packages use the packages
module.
Each packages
module is an array of objects, which have the following fields:
name
- The name of the module. You can use --cask <name>
as the name
to install cask packages.
applier
- This is the applier of the package. These three appliers are available.
Excluding the applier will default it to install
install
- Installs the package
delete
- Deletes the package
update
- Updates the package
manager
The manager which will be used to install the package. If not specified, the default manager will be used.
optional
- A boolean field that if set to true
will prompt the user if they want to install the package.
mandatory
- A boolean field that if set to true
will stop the script if it fails to install the package.
dependencies
- An array of modules that are mandatory to finish before this module can be installed.
Executing shell commands
We allow executing shell commands with the shell
module. This module is an array of objects, which have the following
fields:
name
- The name of the module.
cmd
- The command to execute. Piping is supported.
silent
- A boolean field that if set to true
will not print the output of the command.