hopper/README.md

304 lines
7.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

```
___---___
___--- | ---___
--- ___---___ ---
|---___--- ---___---|
| ---___ ___--- |
---___ | ___---
|---___|___---|
--__ - __--
|-_-|
-_-
__ __
/ / / /___ ____ ____ ___ _____
/ /_/ / __ \/ __ \/ __ \/ _ \/ ___/
/ __ / /_/ / /_/ / /_/ / __/ /
/_/ /_/\____/ .___/ .___/\___/_/
/_/ /_/
```
# Hopper
A Minecraft package manager for the terminal.
Hopper can automatically search, download, and update Minecraft mods, modpacks,
resource packs, and plugins from [Modrinth](https://modrinth.com/) so that
keeping your mods up-to-date and compatible with each other is easy. With
Hopper, you won't have to manually visit [CurseForge](https://curseforge.com/)
and download each mod one by one every time you set up a new instance or deal
with the hassle of swapping out different mod versions for hours while trying to
get Minecraft to accept them all at once.
Hopper is still very early in development, but important features are coming
along smoothly, and we'll have lots of progress to show off in the coming weeks.
Its written in [Rust](https://www.rust-lang.org/) and released under the
[GNU AGPLv3](https://www.gnu.org/licenses/agpl-3.0.en.html).
Were looking for people to help contribute code and write documentation. Please
reach out to us in [our Discord “server”](https://discord.gg/jJutHQjsh9) if
youre interested in helping out. If you have a taste in CLI apps like Hopper,
your input is especially appreciated.
Inspired by applications like [paru](https://github.com/morganamilo/paru), a
feature-packed AUR helper and [topgrade](https://github.com/r-darwish/topgrade),
a tool to upgrade everything.
[![Donate using
Liberapay](https://liberapay.com/assets/widgets/donate.svg)](https://liberapay.com/tebibytemedia/donate)
## High-level Goals
### Continuous
- Small binary size
- Minimal compile times
### Features
High Priority:
- Modrinth package searching
- Modrinth package installation
- Parallel package downloading
- Per-instance package management
- Package updating
- Listing installed packages
Medium Priority
- CurseForge package searching
- CurseForge package installation
- A `man(1)` entry
Low Priority:
- Shell autocomplete
- Configurable search result display like [Starship](https://starship.rs)
- Version-control system repository package management & compilation
External-Dependent:
- Conflict resolution
- Dependency resolution
- Integration into [Prism Launcher](https://prismlauncher.org/) and/or
[theseus](https://github.com/modrinth/theseus)
- Integration into `topgrade(1)`
- Graphical frontend with notifications
[Modrinth REST API
documentation](https://docs.modrinth.com/api-spec/)
# File Structure
```
├── "$XDG_CONFIG_HOME"/hopper.toml
├── "$XDG_DATA_HOME"/hopper/
│ ├── 1.19.1/
│ │ └── fabric/
│ └── 1.18.2/
│ ├── forge/
│ └── plugin/
└── "$XDG_DATA_HOME"/templates/
└── example-template.hop -> ~/.minecraft/mods/example-template.hop
```
# Hopfile Structure
Hopfiles will contain a Minecraft version number, a list of packages, and any
references to other hopfiles on which its based, or “templates”. If a hopfile
is based on other template hopfiles, it inherits the packages from them. A
hopfile does not inherit the package or Minecraft version from a template.
```
template = "example-template"
mc-version = "1.19.2"
[packages]
fabric-mod = [ "sodium", "lithium" ]
resource = "alacrity"
```
# Hopper Configuration File Structure
Hoppers configuration will be maintained with a list of all hopfiles known to
hopper. Its config file will also contain a list of mod hosting sites like
Modrinth and CurseForge and a list of (remote or local) version-control
repositories from which to compile mods. The latter will use a (potentially
custom) build file format to be defined at a later date.
```
hopfiles = [
"~/.minecraft/mods/template.hop",
"~/.minecraft/1.91.1/mods/1.19.1.hop"
]
[sources]
modrinth = "https://api.modrinth.com/"
curseforge = "https://api.curseforge.com/"
git = [
"git+https://github.com/IrisShaders/Iris.git"
"git+https://github.com/CaffeineMC/sodium-fabric.git"
]
```
## Documentation
### Types
There are multiple types of packages hopper can manage.
#### Mods
- `fabric-mod`
- `forge-mod`
- `quilt-mod`
#### Modpacks
- `fabric-pack`
- `forge-pack`
- `quilt-pack`
#### Plugins
- `bukkit-plugin`
- `paper-plugin`
- `purpur-plugin`
- `spigot-plugin`
- `sponge-plugin`
#### Other
- `data-pack` (planned)
- `resource-pack`
These types are specified in various hopper subcommands and in its
configuration.
### Usage
`hopper [options...] [subcommand...]`
### Options
`-v`, `--verbose`
 Includes debug information in the output of `hopper` subcommands.
## Subcommands
### `add [options...] [packages...]`
 Adds packages to the current hopfile, symlinking them to its directory. If
the package cannot be found in the package cache, `hopper get` is run first.
OPTIONS
  `-f`, `--hopfile [hopfiles...]`
  Specifies hopfiles to which mods will be added.
 `-m`, `--mc-version [version...]`
  Overrides the version of Minecraft added packages will be for.
### `get [options...] [targets...]`
 Searches for packages, displays the results, and downloads any selected
packages to the local cache. If multiple targets are specified, results are
displayed in order of specification.
OPTIONS
 `-d`, `--dir [directory...]`
  Specifies the directory to download to (default is
`"$XDG_DATA_HOME"/hopper/`).
 `-m`, `--mc-version [version...]`
  Specifies for what version of Minecraft packages are being
retrieved.
 `-n`, `--no-confirm`
  Does not display search results and downloads exact matches to the
cache. Requires `--mc-version` and `--type` be specified.
 `-t`, `--type [types...]`
  Specifies what types of packages are being queried.
### `init [options...]`
 Creates a hopfile in the current directory and adds it to the global known
hopfiles list.
OPTIONS
 `-d`, `--dir [directory...]`
  Specifies the directory in which the hopfile is being created.
 `-f`, `--hopfile [hopfiles...]`
  Specifies templates upon which to base the new hopfile.
 `-m`, `--mc-version [version...]`
  Specifies the version of Minecraft packages are being managed for.
 `-t`, `--type [type...]`
  Specifies what type of packages will be listed in this hopfile.
### `list [options...]`
 Lists all installed packages.
OPTIONS
  `-f` `--hopfile [hopfiles...]`
  Lists packages installed in a specified hopfile.
 `-m`, `--mc-version [version...]`
  Specifies for what version of Minecraft packages are being managed.
 `-t`, `--type [types...]`
  List all packages of a specified type.
### `remove [options...] [packages...]`
 Uninstalls packages.
OPTIONS
 `-f`, `--hopfile [hopfiles...]`
  Removes only packages in the specified hopfile.
 `-m`, `--mc-version [version]`
  Specifies the version of Minecraft the packages are being
uninstalled for.
 `-t`, `--type [types...] [packages...]`
  Removes only packages of a specified type. Optionally takes a list
of packages as an argument.
### `update [options...]`
 Updates installed packages. This command also adds mods to directories
with known hopfiles if the hopfile lists a mod which is not present.
OPTIONS
 `-f`, `--hopfile [hopfiles...]`
  Updates only packages in the specified hopfile.
 `-m`, `--mc-version [version...]`
  Specifies the version of Minecraft packages are being updated for.
 `-t`, `--type [types...] [packages...]`
  Updates only packages of a specified type. Optionally takes a list
of packages as an argument.