hopper/README.md

224 lines
6.0 KiB
Markdown
Raw Normal View History

2022-01-24 05:41:03 +00:00
```
___---___
___--- | ---___
--- ___---___ ---
|---___--- ---___---|
| ---___ ___--- |
---___ | ___---
|---___|___---|
--__ - __--
|-_-|
-_-
__ __
/ / / /___ ____ ____ ___ _____
/ /_/ / __ \/ __ \/ __ \/ _ \/ ___/
/ __ / /_/ / /_/ / /_/ / __/ /
/_/ /_/\____/ .___/ .___/\___/_/
/_/ /_/
```
2021-11-29 01:06:23 +00:00
# Hopper
2022-09-04 23:21:36 +00:00
A Minecraft package manager for the terminal.
2021-11-29 01:07:11 +00:00
2022-09-05 08:25:09 +00:00
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.
2021-11-30 23:19:18 +00:00
2022-09-04 23:21:36 +00:00
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.
2022-09-05 08:25:09 +00:00
It's written in [Rust](https://www.rust-lang.org/) and released under the
[AGPLv3](LICENSE).
2021-11-30 23:19:18 +00:00
2022-09-04 23:21:36 +00:00
We're looking for people to help contribute code and write documentation. Please
reach out to us in [our Discord "server"](https://discord.gg/jJutHQjsh9) if
you're interested in helping out. If you have a taste in CLI apps like Hopper,
your input is especially appreciated.
2021-11-30 23:19:18 +00:00
2022-09-04 23:21:36 +00:00
Inspired by applications like [paru](https://github.com/morganamilo/paru), a
2022-09-05 08:25:09 +00:00
feature-packed AUR helper and [topgrade](https://github.com/r-darwish/topgrade),
2022-09-04 23:21:36 +00:00
a tool to upgrade everything
2021-11-30 23:19:18 +00:00
2022-09-05 08:25:09 +00:00
[![Donate using
Liberapay](https://liberapay.com/assets/widgets/donate.svg)](https://liberapay.com/tebibytemedia/donate)
2021-11-29 01:00:46 +00:00
2021-11-21 00:42:50 +00:00
# High-level Goals
2022-09-04 23:21:36 +00:00
## 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:
- `fish(1)` autocomplete
- `bash(1)` autocomplete
- `zsh(1)` autocomplete
- [Nushell](https://www.nushell.sh/) autocomplete
- Configurable search result display like [Starship](https://starship.rs)
2022-09-05 08:25:09 +00:00
- Versioning system repository package management & compilation
2022-09-04 23:21:36 +00:00
## External-Dependent:
- Conflict resolution
- Dependency resolution
- Integration into [PolyMC](https://polymc.org/) and/or
[theseus](https://github.com/modrinth/theseus)
2022-09-05 08:25:09 +00:00
- Integration into `topgrade(1)`
2022-09-04 23:21:36 +00:00
- Graphical frontend with notifications
[Modrinth REST API
docs](https://docs.modrinth.com/api-spec/)
2021-11-21 00:42:50 +00:00
# File Architecture
2022-09-04 23:21:36 +00:00
```
~/.hopper/
├── hopper.conf
├── cache/
│ ├── 1.19.1/
2022-09-05 08:25:09 +00:00
│ │ └── fabric/
2022-09-04 23:21:36 +00:00
│ └── 1.18.2/
2022-09-05 08:25:09 +00:00
│ ├── forge/
│ └── plugin/
2022-09-04 23:21:36 +00:00
└── templates/
2022-09-05 08:25:09 +00:00
└── example-template.hop -> ~/.minecraft/mods/example-template.hop
2021-11-21 00:42:50 +00:00
```
2022-09-04 23:21:36 +00:00
# Hopfile Structure
2021-11-21 00:42:50 +00:00
2022-09-04 23:21:36 +00:00
Hopfiles will contain a Minecraft version number, a list of packages, the name
2022-09-05 08:25:09 +00:00
of the type of package it uses, and any references to other hopfiles it's based
on, 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.
2021-11-21 00:42:50 +00:00
```
2022-09-05 08:25:09 +00:00
template = example-template
2021-11-21 00:42:50 +00:00
2022-09-04 23:21:36 +00:00
mc-version = 1.19.2
type = fabric
[packages]
sodium
2021-11-21 00:42:50 +00:00
```
2022-09-04 23:21:36 +00:00
# Hopper Configuration File Structure
2021-11-21 00:42:50 +00:00
2022-09-05 08:25:09 +00:00
Hopper's configuration will be maintained with a list of all hopfiles known to
hopper. Its config 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.
2021-11-21 00:42:50 +00:00
```
2022-09-04 23:21:36 +00:00
[hopfiles]
file = ~/.minecraft/mods/1.19.1.hop
2021-11-21 00:42:50 +00:00
2022-09-04 23:21:36 +00:00
# Mod Hosts
2021-11-21 00:42:50 +00:00
2022-09-04 23:21:36 +00:00
[Modrinth]
api = https://api.modrinth.com/
2021-11-21 00:42:50 +00:00
2022-09-04 23:21:36 +00:00
[CurseForge]
api = https://api.curseforge.com/
# Git Repositories
[Iris Shaders]
source = git+https://github.com/IrisShaders/Iris.git
2021-11-21 00:42:50 +00:00
```
2022-09-04 23:21:36 +00:00
# Docs
2021-11-21 00:42:50 +00:00
2022-09-04 23:21:36 +00:00
## Usage
2021-11-21 00:42:50 +00:00
2022-09-04 23:21:36 +00:00
`hopper [SUBCOMMAND] [OPTIONS]`
## Common OPTIONS:
2022-09-05 08:25:09 +00:00
`-d`, `--dir [FILE]`
2022-09-04 23:28:13 +00:00
 Specifies the path for the hopfile being utilized
2022-09-04 23:21:36 +00:00
2022-09-05 08:25:09 +00:00
`-f`, `--filename [FILE]`
2022-09-04 23:28:13 +00:00
 Saves to a specific file name.
2022-09-04 23:21:36 +00:00
2022-09-05 08:25:09 +00:00
`-m`, `--mc-version [VERSION]`
2022-09-04 23:28:13 +00:00
 Specifies for what VERSION of Minecraft PACKAGES are being managed
2022-09-04 23:21:36 +00:00
2022-09-05 08:25:09 +00:00
`-t`, `--type [TYPE]`
2022-09-04 23:28:13 +00:00
 Specifies what TYPE of PACKAGEs is being referenced
2022-09-04 23:21:36 +00:00
`-v`, `--verbose`
2022-09-04 23:28:13 +00:00
 Includes debug information in the output of `hopper` commands.
2022-09-04 23:21:36 +00:00
## SUBCOMMANDs
`get [OPTIONS] PACKAGE`
2022-09-04 23:28:13 +00:00
 Searches for a PACKAGE, displays the results, and downloads any selected
2022-09-04 23:33:37 +00:00
PACKAGES to the local cache.
2022-09-04 23:21:36 +00:00
OPTIONS
2022-09-04 23:28:13 +00:00
2022-09-04 23:30:25 +00:00
 `-n`, `--no-confirm`
2022-09-04 23:28:13 +00:00
2022-09-04 23:30:25 +00:00
  Does not display search results and downloads exact matches to the
2022-09-04 23:33:37 +00:00
cache. Requires `--mc-version` and `--type` be specified.
2022-09-04 23:21:36 +00:00
2022-09-05 08:25:09 +00:00
`init [OPTIONS] --mc-version VERSION --type TYPE TEMPLATE`
2022-09-04 23:28:13 +00:00
 Creates a hopfile in the current directory and adds it to the global known
2022-09-04 23:33:37 +00:00
hopfiles list in the configuration file. If a TEMPLATE is passed as an
argument, the hopfile is added as a new template. A name is generated
using the VERSION and TYPE specified unless `--filename` is used.
2022-09-04 23:21:36 +00:00
OPTIONS
2022-09-04 23:28:13 +00:00
2022-09-05 08:25:09 +00:00
 `--template [TEMPLATE1,TEMPLATE2...]`
2022-09-04 23:28:13 +00:00
2022-09-04 23:30:25 +00:00
  Specifies TEMPLATE hopfiles' names upon which to base the new
2022-09-04 23:33:37 +00:00
hopfile.
2022-09-04 23:21:36 +00:00
`install [OPTIONS] PACKAGE`
2022-09-04 23:28:13 +00:00
 Adds a PACKAGE to the current hopfile and runs `hopper update`. If the
2022-09-04 23:33:37 +00:00
PACKAGE cannot be found in the package cache, it runs `hopper get` first.
2022-09-04 23:21:36 +00:00
OPTIONS
2022-09-04 23:28:13 +00:00
2022-09-05 08:25:09 +00:00
 `--template [TEMPLATE1,TEMPLATE2...]`
2022-09-04 23:28:13 +00:00
  Specifies a template hopfile to which to install mods
2021-11-21 00:42:50 +00:00
2022-09-04 23:21:36 +00:00
`list [OPTIONS]`
2022-09-04 23:28:13 +00:00
 Lists all installed packages.
2021-11-21 00:42:50 +00:00
2022-09-04 23:21:36 +00:00
`update [OPTIONS] PACKAGE`
2022-09-04 23:28:13 +00:00
 Updates installed PACKAGEs and adds mods if they're missing to directories
2022-09-04 23:33:37 +00:00
with known hopfiles. If a PACKAGE is passed, `--type` must be specified so that
hopper `update`s the correct package.