>Need to automate the setup of your linux server or desktop ? This tool is made for you.
[TOC]
----
### I. Build Format
Your whole setup remains in 1 only build file. Each line contains one instruction, the list of instructions is listed below.
#### 1) package management
These instructions allow you to interact with the package system available on your system.
```
ins <packages>
```
Install the listed packages. If more than one, use spaces to separate package names.
```
upd
```
Update/upgrade your system.
```
del <packages>
```
Remove the listed packages. If more than one, use spaces to separate package names.
#### 3) update configuration files
This instruction allow you to update configuration files without the need of an editor and in a developer-readable manner.
```
cnf <expr><content>
```
Update a configuration file where \<expr\> is a dot-separated human-readable [path expression](#ii-path-expressions) and \<content\> is a string or a file. If a string is given, it will override/add the field ; if a file is given the configuration file will be replaced by it.
```
cnf <expr>
```
Remove a configuration field matching the \<expr\> path.
#### 4) service management
These instructions allow you to interact with the service system (_cf. systemd_).
```
ser [enable|start|stop|restart|reload] <services>
```
Perform the action on services. If more than one, use spaces to separate service names.
----
### II. Path Expressions
The syntax is pretty fast-forward, it uses 3 levels to find your configuration line : `subject@alt.field`.
| `subject` | The name of the program to configure | `sshd`, `httpd`, `nginx` |
| `alt` | Alternative file if there is more than one for a package. If **omitted** it will default to the _main_ configuration file. | `httpd@main`, `http@ports` |
| `field` | Field is a dot-separated chain of strings that match with a configuration field. If **ommited**, the \<value\> will just be added at the end of the configuration file. In the same way if the field does not point to a raw field but a parent or group containing fields, the \<value\> will be added at the end. | `sshd.AllowGroups`, `nginx.http.gzip` |