Tourmaline is a (planned) agnostic, asynchronous and awesome installer framework
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
Go to file
Michal Stopyra 29a12c5e5e Merge branch 'config-extension' into 'main'
Rewrite to allow for dynamic config extension and task definitions

See merge request crystal/software/tourmaline!3
2 years ago
configs/crystal Add order field for a task execution order 2 years ago
src Update README and make config_key optional 2 years ago
.gitignore Move os config to different directory 2 years ago
.gitlab-ci.yml Add `.gitlab-ci.yml` 2 years ago
Cargo.lock Improve error reporting 2 years ago
Cargo.toml Improve error reporting 2 years ago
LICENSE Manual merge 0-0 2 years ago
README.md Update README and make config_key optional 2 years ago
build.rs Add cli 2 years ago

README.md

tourmaline

Tourmaline is a (planned) agnostic, asynchronous and awesome installer framework

Usage

Just run cargo run -- help or trm help for now.

Distro Config

Scripts and config files for all supported distros are stored in the config folder of this repository. Each distro has its own folder with several subfolders corresponding to all integration tasks.

<distro>
  | distro.toml
  | config.schema.json
  | <task>
      | up.nu
      | down.nu 
  | <task>
      | up.nu
      | down.nu

Distro config

The distro.toml file contains config options of the distro and allows one to define additional tasks to perform on install. The basic schema of this config file looks like this:

# Distro metadata
[distro]

# Name of the distro
name = "Distro Name"

# Website of the distro
website = "https://mydistro.com"


# Configuration of the OSConfig file
[config]

# Reference to the JSON Schema describing the config extension of that distro
#[default: "config.schema.json"]
schema = "config.schema.json"


# Task-related configuration
[tasks]

# The key correspons to the name of the task on the file system.
# In this case the scripts `custom-task/up.nu` and `custom-task/down.nu` must
# exist in the distro's config folder
[tasks.custom-task]

# The key inside the extended config that is used to pass the config
# value to this task
# If this key is empty no value is passed to the task
# [default: none]
config_key = "enable_flatpak"

# If set to true, the task will be skipped if the value of the task's config 
# (indexed by config_key) is null or false. This setting is ignored when
# no config_key is defined for this task
# [default: false]
skip_on_false = true

# The order in which the task(s) should be executed. Note that
# custom tasks alsways get executed after the base task.
# [default: usize::MAX]
order = 10

Config Schema

The config schema describing the extended OSConfig for that distro can be configured in the distro.toml and defaults to config.schema.json. This file is a JSON Schema describing the additional fields required in the config. Make sure to mark required values as such so that the config get's properly validated.

Scripts

The up.nu scripts contain the required steps to apply the change described by the task. This can include installing packages, creating configuration files and starting systemd units.

The down.nu scripts contain the steps to revert the change applied by a task. These scripts will later be used to offer functionalities like reinstalling grub or changing installed kernels.

License

GPL v3

See LICENSE.