cosmix-launcher 1.1.1
A dead simple CLI-based launcher for Cosmic Reach and Cosmic Quilt
Requires Python: >=3.10

# Cosmix

A dead simple CLI-based launcher for Cosmic Reach and Cosmic Quilt.

## Installation

```sh
# From PyPI (recommended)
python3 -m pip install cosmix-launcher

# From source
git clone https://codeberg.org/emmathemartian/cosmix && cd cosmix
python3 -m pip install -r requirements.txt
python3 -m build
python3 -m pip install ./dist/*.whl
```

To makes sure it's installed, run `cosmix version`. You should see `[info]: Cosmix <some version>` in the console.

> If the command is not found, make sure your `~/.local/bin/` is on your `$PATH`.

If you have any issues, see [Troubleshooting](#troubleshooting).

<!--TODO: List the Windows script $PATH here as well.-->

### Updating

```sh
python3 -m pip install --upgrade cosmix-launcher
```

### Uninstallation

```sh
python3 -m pip uninstall cosmix-launcher
# If you also want to delete your instances, delete ~/.local/share/cosmix (or %APPDATA%\cosmix on Windows)
```

### Troubleshooting

**Arch Linux:**

Arch Linux and its derivatives may complain with `error: externally-managed-environment`. To get around this, use the `--user --break-system-packages` options with `pip install`.

> Obviously this has a chance of breaking something, but in my testing I have yet to have that happen. Though be aware and know that I am not responsible if you break your system.

**Maven:**

You may also need to install Maven. On Arch Linux this is just `pacman -S maven`.

> Maven is used to download and resolve all of Cosmic Quilt's dependencies automatically. If you are a developer, you will probably have this downloaded already. You can check by running `mvn -v` in your terminal.

### Dependencies

> `hjson tqdm requests crm1 Send2Trash click click-aliases java-manifest`

To install and/or upgrade all of them at once, just run:

`python3 -m pip install --upgrade hjson tqdm requests crm1 Send2Trash click click-aliases java-manifest`

## Usage

```
Usage: python -m src.cosmix [OPTIONS] COMMAND [ARGS]...

Options:
  -w, --work-dir TEXT  Set a working directory for Cosmix.
  --help               Show this message and exit.

Commands:
  add (new)     Adds a new instance.
  add-crm1-mod  Adds a jar mod via CRM-1.
  add-data-mod  Adds a data mod.
  add-mod       Adds a jar mod.
  debug         Shows debug information.
  info          Gets info about an instance.
  instances     Shows all instances.
  launch        Launches an instance.
  trash         Trashes an instance.
  update        Updates an existing instance.
  version       Shows the current cosmix version.
  whereis       Shows the path to an instance.
```

> You can use `cosmix [command] --help` to get help about a specific command.

**Examples**
```sh
# Create an unmodded instance named `vanilla` on the latest CR version
cosmix new vanilla
# Create a Cosmic Quilt instance named `my-quilt` on the latest CR version with Cosmic Quilt 1.2.7
cosmix new my-quilt --quilt-version 1.2.7
# Create a vanilla instance named `old-version` on CR 0.0.1
cosmix new old-version -v 0.0.1
# Install the latest version of Flux API available on JoJoJux's autorepo to the instance `test`
cosmix add-crm1-mod test dev.crmodders.flux
# Update the `latest` instance to the latest available versions of Cosmic Reach and Cosmic Quilt
cosmix update latest -v latest -q latest
```

## File Structure

Cosmix stores all of its data in your `$XDG_DATA_HOME` (typically `~/.local/share/`) on Linux and `%APPDATA%` on Windows and in the `cosmix` folder.

This folder will contain the following extra folders:
```
cosmix/
    config.hjson - Configs for Cosmix

    deps/
        cosmic-reach/
            Contains JARs for each downloaded Cosmic Reach version.
        cosmic-quilt/
            Contains the JAR dependencies for each downloaded Cosmic Quilt version.

    instances/
        example-instance/
            config.hjson - Configs for the instance.
            deps/
                If the instance is modded, this folder is used to store extra dependencies for the classpath. Typically this will be unused.
```