# NixDefinitions

NixDefinitions is a layer of NixOS modules that exposes a simple interface of a few options (e.g. what services to run, domain names), and turns that into a full description of all the systems that need to be running.

## Where it's situated

![](./architecture.png)

### [NixConfigs](./NixConfigs.md)

 NixConfigs sets the few options exposed by NixDefinitions.

### [NixOS Instances](./NixOS_Instances.md) & [Services](./Services.md)

The combination of NixConfigs and NixDefintions produces a detailed description of the Services and other system setup that should be running on the NixOS instances.

### [NixOps](./NixOps.md)

NixOps consumes the combined NixConfigs/NixDefintions system description to know what the system should look like when deployed.

### [NixGuard](./NixGuard.md)

NixGuard compares the state of NixConfigs/NixDefinitions to the running state to detect inconsistent state and either fix or report it.

## Purpose

NixDefinitions...
- simplifies the job of NixPanel, allowing it to not worry at all about **how** machines work, but simply produce a machine-readable translation of the options set by Administrators.
- factors out the system configuration that is common between any Fediversity system, defining a simple set of parameters that might differ between them.