ginst 0.1.3

A generic installation tool, able to read and execute instructions from a json file.
# ginst

**ginst** (short for generic installer) a tool used to install programs according to self written configurations.

The tool takes a `.json` file and tries to execute the commands given.

Note: It's currently only tested on Linux.

## Requirements

-  rust (cargo)
-  bash

## Installation

Ez mode

```bash
cargo install ginst
```

or if you want to build it yourself:

```bash
git clone https://github.com/Sebbito/ginst.git
cd ginst
carbo build -r
cp target/release/ginst ~/.local/bin
```

on the last step you can copy it to any directory that is included in PATH but i suggest you use `.local/bin` for that.

## Usage

`ginst --file path/to/programs.json`

Use
```
   k
h     l
   j
```
or 

```
   ^
<-   ->
   v
```
to move through the menu.

The `l` or `˃` to go a level down and view the dependencies and `h` or `˂` to go one level back up.

Further keybinds are:

-  `i` or `enter` to execute the installation instructions for the program
-  `c` to execute the configuration steps
-  `q` to quit (goes up one level if you're in a submenu)

## Configuring

Right now the only way to configure the tool is through the `programs.json` file (which has to be in the working dir). There you can specify a program with installations per distribution and dependencies.

See the `example.json` on how `ginst` expects the `.json` to look like.

The `.json` file has the following structure:

```json
{
    "programs": [
        ...
    ]
}
```

Where each program has a structure of:

```json
{
    "name": "<name>",
    "installation": {
        "<dist-name1>,<dist-name2>": [
            "<bash-command1>",
            "<bash-command2>"
        ]
    },
    "configuration": {
        "<dist-name1>,<dist-name2>": [
            "<bash-command1>",
            "<bash-command2>"
        ]
    },
    "dependencies": {
        "programs": [
            ...
        ]
    }
}
```

Some things that are worth noting:

-  The dependencies attribute is also just a list of programs, meaning you can add as many dependencies and nest this as deep as you want to.
-  Also there is the option to specify multiple distributions in one line separated by commas **!without spaces!** for which the installation instructions apply
-  You can also use a '\*' instead of a regular distribution name to execute the steps for all distros
-  The distribution will be read out of `/etc/os-release` so make sure you name it like you see it in there

## Troubleshooting

Q: The program doesn't start with the error:

`Could not parse json file. Maybe you forgot a comma somewhere?`

A: Well the answer is right there. The json could not be parsed. Make sure that you follow the outlined structure and have no syntax error.

## Further Help

To get more information, see the [Wiki](https://github.com/Sebbito/ginst/wiki) or see

```bash
ginst --help
```