diff --git a/README.md b/README.md index c1d158e..4408098 100644 --- a/README.md +++ b/README.md @@ -68,17 +68,14 @@ Liberapay](https://liberapay.com/assets/widgets/donate.svg)](https://liberapay.c - A `man(1)` entry ### Low Priority: -- `fish(1)` autocomplete -- `bash(1)` autocomplete -- `zsh(1)` autocomplete -- [Nushell](https://www.nushell.sh/) autocomplete +- Shell autocomplete - Configurable search result display like [Starship](https://starship.rs) -- Versioning system repository package management & compilation +- Version-control system repository package management & compilation -## External-Dependent: +### External-Dependent: - Conflict resolution - Dependency resolution -- Integration into [PolyMC](https://polymc.org/) and/or +- Integration into [Prism Launcher](https://prismlauncher.org/) and/or [theseus](https://github.com/modrinth/theseus) - Integration into `topgrade(1)` - Graphical frontend with notifications @@ -86,142 +83,195 @@ Liberapay](https://liberapay.com/assets/widgets/donate.svg)](https://liberapay.c [Modrinth REST API docs](https://docs.modrinth.com/api-spec/) -# File Architecture +# File Structure ``` -~/.hopper/ -├── hopper.conf -├── cache/ +├── "$XDG_CONFIG_HOME"/hopper.toml +├── "$XDG_CACHE_HOME"/hopper/ │ ├── 1.19.1/ │ │ └── fabric/ │ └── 1.18.2/ │ ├── forge/ │ └── plugin/ -└── templates/ +└── "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, the name -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. +Hopfiles will contain a Minecraft version number, a list of packages, and any +references to other hopfiles on which it's 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 - -type = fabric +template = "example-template" +mc-version = "1.19.2" [packages] -sodium +fabric-mod = [ "sodium", "lithium" ] +resource = "alacrity" ``` # Hopper Configuration File Structure 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. +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] -file = ~/.minecraft/mods/1.19.1.hop +hopfiles = [ + "~/.minecraft/mods/template.hop", + "~/.minecraft/1.91.1/mods/1.19.1.hop" +] -# Mod Hosts - -[Modrinth] -api = https://api.modrinth.com/ - -[CurseForge] -api = https://api.curseforge.com/ - -# Git Repositories - -[Iris Shaders] -source = git+https://github.com/IrisShaders/Iris.git +[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" +] ``` # Docs +## Types + +There are multiple types of packages hopper can manage. + +### Mods +- `fabric-mod` +- `forge-mod` +- `quilt-mod` + +### Plugins +- `bukkit-plugin` +- `paper-plugin` +- `purpur-plugin` +- `spigot-plugin` +- `sponge-plugin` + +### Other +- `data-pack` +- `fabric-pack` +- `forge-pack` +- `resource-pack` +- `quilt-pack` + +These types are specified in various hopper subcommands and in its configuration. + ## Usage -`hopper [SUBCOMMAND] [OPTIONS]` - -## Common OPTIONS: - -`-d`, `--dir [FILE]` - - Specifies the path for the hopfile being utilized - -`-f`, `--filename [FILE]` - - Saves to a specific file name. - -`-m`, `--mc-version [VERSION]` - - Specifies for what VERSION of Minecraft PACKAGES are being managed - -`-t`, `--type [TYPE]` - - Specifies what TYPE of PACKAGEs is being referenced. TYPEs include -modloader names like `fabric`, `forge`, and `quilt`, as well as `resource` packs -and mod`pack`s. +`hopper [options...] [subcommand...]` +## OPTIONS `-v`, `--verbose` - Includes debug information in the output of `hopper` commands. + Includes debug information in the output of `hopper` subcommands. -## SUBCOMMANDs +## SUBCOMMANDS -`get [OPTIONS] PACKAGE` +`get [options...] [targets...]` - Searches for a PACKAGE, displays the results, and downloads any selected -PACKAGES to the local cache. + 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_CACHE_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. -`init [OPTIONS] --mc-version VERSION --type TYPE TEMPLATE` + `-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 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. +hopfiles list. OPTIONS - `--template [TEMPLATE1,TEMPLATE2...]` + `-d`, `--dir [directory...]` -  Specifies TEMPLATE hopfiles' names upon which to base the new -hopfile. +  Specifies the directory in which the hopfile is being created. -`install [OPTIONS] PACKAGE` + `-f`, `--hopfile [hopfiles...]` - Adds a PACKAGE to the current hopfile and runs `hopper update`. If the -PACKAGE cannot be found in the package cache, it runs `hopper get` first. +  Specifies templates upon which to base the new hopfile. + + `-m`, `--mc-version [version]` + +  Specifies for what version of Minecraft packages are being managed. + + `-t`, `--type [type...]` + +  Specifies what type of packages will be listed in this hopfile. + +`install [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 - `--template [TEMPLATE1,TEMPLATE2...]` +  `-f`, `--hopfile [hopfiles...]` -  Specifies a template hopfile to which to install mods +  Specifies hopfiles to which mods will be added. -`list [OPTIONS]` +`list [options...]`  Lists all installed packages. -`update [OPTIONS] PACKAGE` +OPTIONS - Updates installed PACKAGEs and adds mods if they're missing to directories -with known hopfiles. If a PACKAGE is passed, `--type` must be specified so that -hopper `update`s the correct package. \ No newline at end of file +  `-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. + +`update [options...]` + + Updates installed packages and adds mods if they're missing to directories +with known hopfiles. + +OPTIONS + + `-f`, `--hopfile [hopfiles...]` + +  Updates only packages in the specified hopfile. Note that this +option creates a new file and symlink as it does not update the packages for +other hopfiles. + + `-m`, `--mc-version [version]` + +  Specifies for what version of Minecraft packages are being updated. + + `-t`, `--type [types...] [packages...]` + +  Updates only packages of a specified type. Optionally takes a list +of packages as an argument.