summaryrefslogtreecommitdiff
path: root/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'README.md')
-rw-r--r--README.md99
1 files changed, 99 insertions, 0 deletions
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..703985f
--- /dev/null
+++ b/README.md
@@ -0,0 +1,99 @@
+# packwiz2nix
+
+packwiz2nix brings all of the benefits of Nix to [packwiz](https://packwiz.infra.link/), helping you create
+[fixed-output derivations](https://nixos.org/manual/nix/stable/language/advanced-attributes.html#adv-attr-outputHash) from
+your already existing packwiz modpack!
+
+## Getting started
+
+### For users
+
+It is recommended to use [misterio77's](https://github.com/Misterio77) [nix-minecraft](https://github.com/misterio77/nix-minecraft)
+module as it allows you to symlink packages into a minecraft server's directory.
+
+There is a convenience function called `mkModLinks` that can automate the creation of symlinks for a server like so:
+
+```nix
+{
+ nix-minecraft,
+ packwiz2nix,
+ pkgs,
+ yourModpack,
+ ...
+}: let
+ inherit (packwiz2nix.lib) mkPackwizPackages mkModLinks;
+ # replace "/checksums.json" with the path to the modpack's checksums file
+ mods = mkPackwizPackages pkgs (yourModpack + "/checksums.json");
+in {
+ imports = [
+ nix-minecraft.nixosModules.minecraft-servers
+ ];
+
+ nixpkgs.overlays = [nix-minecraft.overlay];
+
+ services.minecraft-servers = {
+ enable = true;
+ eula = true;
+
+ servers.my_server = {
+ enable = true;
+ package = pkgs.quiltServers.quilt-1_19_4-0_18_10;
+ symlinks = mkModLinks mods;
+ };
+ };
+}
+```
+
+### For modpack developers
+
+packwiz2nix is quick to set up, all you have to do is add this to the `apps` attribute of a flake:
+
+```nix
+{
+ inputs = {
+ nixpkgs.url = "nixpkgs/nixos-unstable";
+ flake-utils.url = "github:numtide/flake-utils";
+ packwiz2nix.url = "github:getchoo/packwiz2nix";
+ };
+
+ outputs = {
+ nixpkgs,
+ flake-utils,
+ packwiz2nix,
+ ...
+ }:
+ flake-utils.lib.eachDefaultSystem (system: let
+ pkgs = import nixpkgs {inherit system;};
+ in {
+ apps = {
+ # replace ./mods with the path to your .pw.toml files
+ generate-checksums = packwiz2nix.lib.mkChecksumsApp pkgs ./mods;
+ };
+ });
+}
+```
+
+An example of this can be found in my [personal modpack](https://github.com/getchoo/modpack/blob/main/flake.nix)
+
+## Gotchas!
+
+There are two main things you should keep in mind with this project currently:
+
+- No Curseforge support
+
+ - Packwiz does not keep the download URL to mods from Curseforge in it's TOML files,
+ which is not acceptable in the current method used to generate checksums and create
+ the final derivations for mods. This may be changed in the future
+
+ - This is the biggest concern as it affects end users the most
+
+- Checksums must be generated (**modpack developers, make sure you read this**)
+ - Packwiz uses SHA1 to verify mod files, which fetchers in nix such as `builtins.fetchurl`
+ and `pkgs.fetchurl` do not support. This prevents us from using them, and requires a separate
+ checksum file (using SHA256) to be generated and updated along with the modpack. I don't see
+ how this can be resolved in the foreseeable future unless SHA256 is adopted by Packwiz.
+
+## Related Projects
+
+- [misterio77/nix-minecraft](https://github.com/misterio77/nix-minecraft)
+- [nix-community/mineflake](https://github.com/nix-community/mineflake)