diff --git a/.packwizignore b/.packwizignore
new file mode 100644
index 0000000..bb13250
--- /dev/null
+++ b/.packwizignore
@@ -0,0 +1,3 @@
+README.pre
+modinfo.toml
+make-list.py
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..970dfce
--- /dev/null
+++ b/README.md
@@ -0,0 +1,37 @@
+
+MISSING texture packs:
+ - xali's Bushy Leaves - haven't been updated for 1.21
+ - VanillaTweaks - replaced with VTDownloader
+ - Crops 3D - replaced with Fancy Crops
+# Mods list
+## Optimization
+Various performance optimizations and fixes
+ * [CO] **[Distant Horizons](https://modrinth.com/mod/distanthorizons)** - See farther without turning your game into a slide show
+ * [CO] **[Indium](https://modrinth.com/mod/indium)** - Sodium addon providing support for the Fabric Rendering API, based on Indigo
+ * [CO] **[Iris Shaders](https://modrinth.com/mod/iris)** - A modern shader pack loader for Minecraft intended to be compatible with existing OptiFine shader packs
+ * [CO] **[Sodium](https://modrinth.com/mod/sodium)** - The fastest and most compatible rendering optimization mod for Minecraft
+## Core mods and libraries
+Dependencies for other mods or configuration things
+ * [CS] **[Cloth Config API](https://modrinth.com/mod/cloth-config)** - Configuration Library for Minecraft Mods
+ * [CS] **[CreativeCore](https://modrinth.com/mod/creativecore)** - A core mod
+ * [CO] **[[EMF] Entity Model Features](https://modrinth.com/mod/entity-model-features)** - EMF is an, OptiFine format, Custom Entity Model replacement mod available for Fabric and Forge.
+ * [CO] **[[ETF] Entity Texture Features](https://modrinth.com/mod/entitytexturefeatures)** - Emissive, Random & Custom texture support for entities in resourcepacks just like Optifine but for Fabric
+ * [CS] **[Fabric API](https://modrinth.com/mod/fabric-api)** - Lightweight and modular API providing common hooks and intercompatibility measures utilized by mods using the Fabric toolchain.
+ * [CO] **[Mod Menu](https://modrinth.com/mod/modmenu)** - Adds a mod menu to view the list of mods you have installed.
+ * [CS] **[M.R.U](https://modrinth.com/mod/mru)** - Mineblock's Repeated Utilities
+ * [CS] **[Text Placeholder API](https://modrinth.com/mod/placeholder-api)** - Placeholder and Text manipulation library for your Minecraft mods.
+ * [CO] **[VTDownloader](https://modrinth.com/mod/vtdownloader)** - Pick and download Vanilla Tweaks resource packs directly from your Minecraft client!
+## Visuals
+Visual changes and improvements
+ * [CO] **[3D Skin Layers](https://modrinth.com/mod/3dskinlayers)** - Render the player skin layer in 3d!
+ * [CO] **[Cave Dust](https://modrinth.com/mod/cave-dust)** - Dust is a Minecraft mod that adds the white ash particle from the Basalt Deltas biome to the underground to simulate dust!
+ * [CO] **[Continuity](https://modrinth.com/mod/continuity)** - A Fabric mod that allows for efficient connected textures
+ * [CO] **[Falling Leaves](https://modrinth.com/mod/fallingleaves)** - Adds a neat little particle effect to leaf blocks
+ * [CO] **[Not Enough Animations](https://modrinth.com/mod/not-enough-animations)** - Bringing first-person animations to the third-person
+ * [SO] **[Snow Under Trees (Fabric)](https://modrinth.com/mod/snow-under-trees-remastered)** - Adds snow under trees in snowy biomes, making the biomes more immersive.
+ * [CS] **[Vanilla Fireflies](https://modrinth.com/mod/vanilla-fireflies)** - Adds fireflies (particles) to Minecraft
+ * [CO] **[Visuality](https://modrinth.com/mod/visuality)** - Little visual improvements by adding a bunch of new particles.
+## Immersion
+Makes gameplay more immersive
+ * [CO] **[AmbientSounds](https://modrinth.com/mod/ambientsounds)** - #listentonature
+ * [CO] **[Presence Footsteps](https://modrinth.com/mod/presence-footsteps)** - ..An Overly complicated Sound Mod...
diff --git a/README.pre b/README.pre
new file mode 100644
index 0000000..db05cc1
--- /dev/null
+++ b/README.pre
@@ -0,0 +1,5 @@
+
+MISSING texture packs:
+ - xali's Bushy Leaves - haven't been updated for 1.21
+ - VanillaTweaks - replaced with VTDownloader
+ - Crops 3D - replaced with Fancy Crops
diff --git a/index.toml b/index.toml
index 6b2764f..2a8711d 100644
--- a/index.toml
+++ b/index.toml
@@ -1,2 +1,150 @@
hash-format = "sha256"
-files = []
+
+[[files]]
+file = "README.md"
+hash = "362d9fd7b5d699116a9acdd0446d0393b45606135654d5af00fd415188854bcb"
+
+[[files]]
+file = "mods/3dskinlayers.pw.toml"
+hash = "6e4a1ad878793ab3c3b7df30ea8e4177a65c3632d1b35277683d6f6b333cb073"
+metafile = true
+
+[[files]]
+file = "mods/ambientsounds.pw.toml"
+hash = "0543bf0e7d7ac48e221c7e97b55ca7add1c8a1a4b9c5d487688782472fe287b9"
+metafile = true
+
+[[files]]
+file = "mods/cave-dust.pw.toml"
+hash = "73b49e93bdc437c2cd86133b5cfb0a04f80264f785ee660ce002bb24e14286c1"
+metafile = true
+
+[[files]]
+file = "mods/cloth-config.pw.toml"
+hash = "98f5b3f3a7f8955be1888cafff86619bbb1fa66fe23a5b280878040e30cb7e77"
+metafile = true
+
+[[files]]
+file = "mods/continuity.pw.toml"
+hash = "0f24f7bd2057b70b6816de4e66922b64f8b6635dc603e40cc45d62646dc7221d"
+metafile = true
+
+[[files]]
+file = "mods/creativecore.pw.toml"
+hash = "f8a561f0ac371a33d5e5c4f3a525b5aaca4161b391f46505eac4e1a1d4895902"
+metafile = true
+
+[[files]]
+file = "mods/distanthorizons.pw.toml"
+hash = "bcd6ab63410cedbf87e7056337ddf50059655c59a23189520a22eab8419b8415"
+metafile = true
+
+[[files]]
+file = "mods/entity-model-features.pw.toml"
+hash = "86e971b1f82d63c791f7e7574c0ebfc9d1e4b6a23085257599ded29ed365ce6c"
+metafile = true
+
+[[files]]
+file = "mods/entitytexturefeatures.pw.toml"
+hash = "b2af1699d567294bf20e80fd62069f65aca68746a78655984d30332b65ebd5a4"
+metafile = true
+
+[[files]]
+file = "mods/fabric-api.pw.toml"
+hash = "a8800671ba62afc0a0a2bcbf4330ba7a5906f5fba7ec88b6d5afac2572ecd617"
+metafile = true
+
+[[files]]
+file = "mods/fallingleaves.pw.toml"
+hash = "9b561d57bf92aa8005e567e4bb95a2b65c8ed9c3ab30de09ea6c7e66f2e4d2da"
+metafile = true
+
+[[files]]
+file = "mods/indium.pw.toml"
+hash = "a36870bfbbd57ea241255c6573a4d129509f5e50dbdcaf12d3a78c57f864bbde"
+metafile = true
+
+[[files]]
+file = "mods/iris.pw.toml"
+hash = "315648c1b6910b274d4a16bda8eba7ddf380d928edb20c0c36f3ff9776e30fe5"
+metafile = true
+
+[[files]]
+file = "mods/modmenu.pw.toml"
+hash = "e37792db4c4b69e11243c7470f0f2a791dc016381e460cd5616eccb6b567b5ab"
+metafile = true
+
+[[files]]
+file = "mods/mru.pw.toml"
+hash = "4b42d246142aabef3c1aeb75e1401ca82c3e76b6467993ff3991dc976e7166e4"
+metafile = true
+
+[[files]]
+file = "mods/not-enough-animations.pw.toml"
+hash = "8221d0376bdd5c13684d44ce2dcfc994f4aeea8d21546b9a562e71517ba1ce80"
+metafile = true
+
+[[files]]
+file = "mods/placeholder-api.pw.toml"
+hash = "d0311de4c47e48ba0c1769253c7bd8fd541ed81c60823c539116a963e58c9128"
+metafile = true
+
+[[files]]
+file = "mods/presence-footsteps.pw.toml"
+hash = "5bef9a443c12a13d5eeefa60bbb0a40ef99ab8a0675cd335a6cc2520dc5ba33b"
+metafile = true
+
+[[files]]
+file = "mods/snow-under-trees-remastered.pw.toml"
+hash = "4e45e9bc5b0784d646c7b4e5b5c688f10713fbce7101efccfe06e42bebf99966"
+metafile = true
+
+[[files]]
+file = "mods/sodium.pw.toml"
+hash = "280cf7ad4ec95bd95eef81a7f327095c5f40e1b8aa45cea91284bfd19395d69e"
+metafile = true
+
+[[files]]
+file = "mods/vanilla-fireflies.pw.toml"
+hash = "bdbfd6482c443f461cc2840f5becc6b491dd5e8ea233c38a43f1cd9ba54299e8"
+metafile = true
+
+[[files]]
+file = "mods/visuality.pw.toml"
+hash = "6cb2a4cd4eb40eaf19bbb54a6d8fa23643470147e86e19fe04b820e170998ed3"
+metafile = true
+
+[[files]]
+file = "mods/vtdownloader.pw.toml"
+hash = "de1065d9e684cad0c41a896634f823551966c39236bddc8add5766ba1aa69ae4"
+metafile = true
+
+[[files]]
+file = "resourcepacks/3d-default.pw.toml"
+hash = "35479839b438811bf6d4339af5bd301be2cd75da6d87bf5e948b2eef370cd856"
+metafile = true
+
+[[files]]
+file = "resourcepacks/fancy-crops.pw.toml"
+hash = "8610fecce726a9ffcb10755d9c136a3e07211157484c5df92c066d5ab574dd31"
+metafile = true
+
+[[files]]
+file = "resourcepacks/fresh-animations.pw.toml"
+hash = "256b67c869770482657d4dd31124bf705c780c5c798206af522bcd5392c7ded9"
+metafile = true
+
+[[files]]
+file = "resourcepacks/nautilus3d.pw.toml"
+hash = "e6594ab0d556105c5a6d54d1d170c19853ed9942bb1f578598bd371f2ad1fc7c"
+metafile = true
+
+[[files]]
+file = "resourcepacks/xalis-enhanced-vanilla.pw.toml"
+hash = "7ea46e054b0915e6534ffd28e718cba6edcece22c9829213d58eb3c12d0d36f7"
+metafile = true
+
+[[files]]
+file = "shaderpacks/bsl-shaders.pw.toml"
+hash = "4670d7c2b967ab6c7c2c0b4b46f9cd32698267bdb78a4af985f962c4c5338fbe"
+metafile = true
diff --git a/make-list.py b/make-list.py
new file mode 100644
index 0000000..eb18cb1
--- /dev/null
+++ b/make-list.py
@@ -0,0 +1,126 @@
+import toml
+import glob
+from typing import Optional
+from httpx import AsyncClient
+import asyncio
+
+try:
+ with open("modinfo.toml", "r") as fp:
+ modinfo = toml.load(fp)
+except OSError:
+ modinfo = { "mods": {}, "categories": {} }
+
+
+mods = {}
+name_list: list[str] = []
+for filename in glob.glob("mods/*.pw.toml"):
+ modname = filename.removesuffix(".pw.toml").split("/", 1)[1]
+ with open(filename, "r") as fp:
+ mod = mods[modname] = toml.load(fp)
+
+ modinfo["mods"].setdefault(modname, {})
+
+ link: Optional[str] = None
+ if "modrinth" in mod["update"]:
+ link = f"https://modrinth.com/mod/{modname}"
+
+ for k, v in {
+ "name": mod["name"],
+ "description": "XXX: update",
+ "link": link,
+ "side": mod.get("side", "unknown"),
+ "optional": mod.get("option", {}).get("optional", False)
+ }.items():
+ modinfo["mods"][modname].setdefault(k, v)
+
+ if modinfo["mods"][modname]["description"] == "XXX: update" or modinfo["mods"][modname].get("icon") is None:
+ name_list.append(modname)
+
+async def fetch_description(modname: str) -> tuple[str, dict]:
+ async with AsyncClient(headers={
+ "User-Agent": "Packwiz-Description-Generator/1.0 (hatkidchan@gmail.com)"
+ }) as c:
+ print(f"[ + ] GET {modname}")
+ try:
+ d = await c.get(f"https://api.modrinth.com/v2/project/{modname}")
+ data = d.json()
+ except Exception:
+ return modname, {}
+ return modname, data
+
+async def update_descriptions():
+ result = await asyncio.gather(*[
+ fetch_description(modname) for modname in name_list
+ ])
+ for modname, data in result:
+ modinfo["mods"][modname]["description"] = data.get("description", "")
+ modinfo["mods"][modname]["icon"] = data.get("icon_url", "")
+
+asyncio.run(update_descriptions())
+
+categories: dict[str, list] = {}
+
+for modname in modinfo["mods"]:
+ if modname not in mods:
+ modinfo["mods"][modname]["removed"] = True
+ info = modinfo["mods"][modname]
+ if info.get("icon", "") == "":
+ print(f"[W] No icon set for {modname}")
+ category = info.get("category", "unset")
+ categories.setdefault(category, [])
+ categories[category].append(modname)
+
+modinfo.setdefault("categories", {})
+for catname, category in categories.items():
+ modinfo["categories"].setdefault(catname, {})
+ for k, v in {
+ "title": catname,
+ "description": ""
+ }.items():
+ modinfo["categories"][catname].setdefault(k, v)
+
+with open("modinfo.toml", "w") as fp:
+ toml.dump(modinfo, fp)
+
+
+with open("README.md", "w") as fp:
+ try:
+ with open("README.pre", "r") as fp_in:
+ for line in fp_in:
+ fp.write(line)
+ except Exception as e:
+ pass
+
+ fp.write("# Mods list\n")
+ for catname, modlist in categories.items():
+ catinfo = modinfo["categories"][catname]
+ fp.write(f"## {catinfo['title']}\n")
+ fp.write(catinfo["description"] + "\n")
+
+ for modname in sorted(modlist):
+ info = modinfo["mods"][modname]
+ if info.get("removed"):
+ continue
+ tags = []
+ if info.get("optional", False):
+ tags.append(("O", "optional"))
+ side = info.get("side", "unknown")
+ if side == "client":
+ tags.append(("CO", "side:client"))
+ elif side == "server":
+ tags.append(("SO", "side:server"))
+ elif side == "both":
+ tags.append(("CS", "side:both"))
+
+ try:
+ fp.write(" * ")
+ fp.write(f'')
+ fp.write(str.join("", [
+ f"[{tag[0]}]"
+ for tag in tags
+ ]))
+ fp.write(f" **[{info['name']}]({info['link']})**")
+ fp.write(f" - {info['description']}\n")
+ except Exception as e:
+ print(f"Err: {e!r} for {modname = }")
+ raise
diff --git a/modinfo.toml b/modinfo.toml
new file mode 100644
index 0000000..e9c0b48
--- /dev/null
+++ b/modinfo.toml
@@ -0,0 +1,222 @@
+[categories.optimization]
+title = "Optimization"
+description = "Various performance optimizations and fixes"
+
+[categories.immersion]
+title = "Immersion"
+description = "Makes gameplay more immersive"
+
+[categories.core]
+title = "Core mods and libraries"
+description = "Dependencies for other mods or configuration things"
+
+[categories.visuals]
+title = "Visuals"
+description = "Visual changes and improvements"
+
+[mods.sodium]
+name = "Sodium"
+description = "The fastest and most compatible rendering optimization mod for Minecraft"
+link = "https://modrinth.com/mod/sodium"
+side = "client"
+optional = false
+icon = "https://cdn.modrinth.com/data/AANobbMI/icon.png"
+category = "optimization"
+
+[mods.iris]
+name = "Iris Shaders"
+description = "A modern shader pack loader for Minecraft intended to be compatible with existing OptiFine shader packs"
+link = "https://modrinth.com/mod/iris"
+side = "client"
+optional = false
+icon = "https://cdn.modrinth.com/data/YL57xq9U/dc558eece920db435f9823ce86de0c4cde89800b.png"
+category = "optimization"
+
+[mods.cloth-config]
+name = "Cloth Config API"
+description = "Configuration Library for Minecraft Mods"
+link = "https://modrinth.com/mod/cloth-config"
+side = "both"
+optional = false
+icon = "https://cdn.modrinth.com/data/9s6osm5g/icon.png"
+category = "core"
+
+[mods.vtdownloader]
+name = "VTDownloader"
+description = "Pick and download Vanilla Tweaks resource packs directly from your Minecraft client!"
+link = "https://modrinth.com/mod/vtdownloader"
+side = "client"
+optional = false
+icon = "https://cdn.modrinth.com/data/1E2sq1cp/a7448d74edaab6765df36604082ecaaeb4f44615.png"
+category = "core"
+
+[mods.entity-model-features]
+name = "[EMF] Entity Model Features"
+description = "EMF is an, OptiFine format, Custom Entity Model replacement mod available for Fabric and Forge."
+link = "https://modrinth.com/mod/entity-model-features"
+side = "client"
+optional = false
+icon = "https://cdn.modrinth.com/data/4I1XuqiY/7a6acd528931a1a0d1b60fd0925b88227fb345cc.png"
+category = "core"
+
+[mods.modmenu]
+name = "Mod Menu"
+description = "Adds a mod menu to view the list of mods you have installed."
+link = "https://modrinth.com/mod/modmenu"
+side = "client"
+optional = false
+icon = "https://cdn.modrinth.com/data/mOgUt4GM/1b6bcdef5a3d92572f517122650716be7ec6458b.webp"
+category = "core"
+
+[mods.placeholder-api]
+name = "Text Placeholder API"
+description = "Placeholder and Text manipulation library for your Minecraft mods."
+link = "https://modrinth.com/mod/placeholder-api"
+side = "both"
+optional = false
+icon = "https://cdn.modrinth.com/data/eXts2L7r/e9c9990896e6422bffc5f73d2c41b8f077348f83.png"
+category = "core"
+
+[mods.continuity]
+name = "Continuity"
+description = "A Fabric mod that allows for efficient connected textures"
+link = "https://modrinth.com/mod/continuity"
+side = "client"
+optional = false
+icon = "https://cdn.modrinth.com/data/1IjD5062/icon.png"
+category = "visuals"
+
+[mods.snow-under-trees-remastered]
+name = "Snow Under Trees (Fabric)"
+description = "Adds snow under trees in snowy biomes, making the biomes more immersive."
+link = "https://modrinth.com/mod/snow-under-trees-remastered"
+side = "server"
+optional = false
+icon = "https://cdn.modrinth.com/data/XVnUIUAQ/8165a80ccd1c58a9a0fd7505b4d27235a759bf28.png"
+category = "visuals"
+
+[mods.creativecore]
+name = "CreativeCore"
+description = "A core mod"
+link = "https://modrinth.com/mod/creativecore"
+side = "both"
+optional = false
+icon = "https://cdn.modrinth.com/data/OsZiaDHq/icon.png"
+category = "core"
+
+[mods.mru]
+name = "M.R.U"
+description = "Mineblock's Repeated Utilities"
+link = "https://modrinth.com/mod/mru"
+side = "both"
+optional = false
+icon = "https://cdn.modrinth.com/data/SNVQ2c0g/cd0ac6b474ae39a347364a62a39ea04ce0e146d9.png"
+category = "core"
+
+[mods.indium]
+name = "Indium"
+description = "Sodium addon providing support for the Fabric Rendering API, based on Indigo"
+link = "https://modrinth.com/mod/indium"
+side = "client"
+optional = false
+icon = "https://cdn.modrinth.com/data/Orvt0mRa/icon.png"
+category = "optimization"
+
+[mods.presence-footsteps]
+name = "Presence Footsteps"
+description = "..An Overly complicated Sound Mod..."
+link = "https://modrinth.com/mod/presence-footsteps"
+side = "client"
+optional = false
+icon = "https://cdn.modrinth.com/data/rcTfTZr3/icon.png"
+category = "immersion"
+
+[mods.entitytexturefeatures]
+name = "[ETF] Entity Texture Features"
+description = "Emissive, Random & Custom texture support for entities in resourcepacks just like Optifine but for Fabric"
+link = "https://modrinth.com/mod/entitytexturefeatures"
+side = "client"
+optional = false
+icon = "https://cdn.modrinth.com/data/BVzZfTc1/fa03aea7027f38b272a249d26cbe4cb7e94becf1.png"
+category = "core"
+
+[mods.fabric-api]
+name = "Fabric API"
+description = "Lightweight and modular API providing common hooks and intercompatibility measures utilized by mods using the Fabric toolchain."
+link = "https://modrinth.com/mod/fabric-api"
+side = "both"
+optional = false
+icon = "https://cdn.modrinth.com/data/P7dR8mSH/icon.png"
+category = "core"
+
+[mods.distanthorizons]
+name = "Distant Horizons"
+description = "See farther without turning your game into a slide show"
+link = "https://modrinth.com/mod/distanthorizons"
+side = "client"
+optional = false
+icon = "https://cdn.modrinth.com/data/uCdwusMi/icon.png"
+category = "optimization"
+
+[mods.ambientsounds]
+name = "AmbientSounds"
+description = "#listentonature"
+link = "https://modrinth.com/mod/ambientsounds"
+side = "client"
+optional = false
+icon = "https://cdn.modrinth.com/data/fM515JnW/icon.png"
+category = "immersion"
+
+[mods.visuality]
+name = "Visuality"
+description = "Little visual improvements by adding a bunch of new particles."
+link = "https://modrinth.com/mod/visuality"
+side = "client"
+optional = false
+icon = "https://cdn.modrinth.com/data/rI0hvYcd/5c866549318e907bbfe0d525afe43cb17a36a481.png"
+category = "visuals"
+
+[mods.3dskinlayers]
+name = "3D Skin Layers"
+description = "Render the player skin layer in 3d!"
+link = "https://modrinth.com/mod/3dskinlayers"
+side = "client"
+optional = false
+icon = "https://cdn.modrinth.com/data/zV5r3pPn/icon.png"
+category = "visuals"
+
+[mods.vanilla-fireflies]
+name = "Vanilla Fireflies"
+description = "Adds fireflies (particles) to Minecraft"
+link = "https://modrinth.com/mod/vanilla-fireflies"
+side = "both"
+optional = false
+icon = "https://cdn.modrinth.com/data/dxiyDLYV/4c6fa7a808ba918e81e18c995027404caf34c1f3.png"
+category = "visuals"
+
+[mods.fallingleaves]
+name = "Falling Leaves"
+description = "Adds a neat little particle effect to leaf blocks"
+link = "https://modrinth.com/mod/fallingleaves"
+side = "client"
+optional = false
+icon = "https://cdn.modrinth.com/data/WhbRG4iK/icon.gif"
+category = "visuals"
+
+[mods.not-enough-animations]
+name = "Not Enough Animations"
+description = "Bringing first-person animations to the third-person"
+link = "https://modrinth.com/mod/not-enough-animations"
+side = "client"
+optional = false
+icon = "https://cdn.modrinth.com/data/MPCX6s5C/icon.png"
+category = "visuals"
+
+[mods.cave-dust]
+name = "Cave Dust"
+description = "Dust is a Minecraft mod that adds the white ash particle from the Basalt Deltas biome to the underground to simulate dust!"
+link = "https://modrinth.com/mod/cave-dust"
+side = "client"
+optional = false
+icon = "https://cdn.modrinth.com/data/jawg7zT1/2e6beb501657efee1b3c42d11541656912abad32.png"
+category = "visuals"
diff --git a/mods/3dskinlayers.pw.toml b/mods/3dskinlayers.pw.toml
new file mode 100644
index 0000000..7b53ea9
--- /dev/null
+++ b/mods/3dskinlayers.pw.toml
@@ -0,0 +1,13 @@
+name = "3D Skin Layers"
+filename = "skinlayers3d-fabric-1.6.6-mc1.21.jar"
+side = "client"
+
+[download]
+url = "https://cdn.modrinth.com/data/zV5r3pPn/versions/8YK20yhu/skinlayers3d-fabric-1.6.6-mc1.21.jar"
+hash-format = "sha1"
+hash = "5076f095787940451063f647c1228934b17f5286"
+
+[update]
+[update.modrinth]
+mod-id = "zV5r3pPn"
+version = "8YK20yhu"
diff --git a/mods/ambientsounds.pw.toml b/mods/ambientsounds.pw.toml
new file mode 100644
index 0000000..91e2ec0
--- /dev/null
+++ b/mods/ambientsounds.pw.toml
@@ -0,0 +1,13 @@
+name = "AmbientSounds"
+filename = "AmbientSounds_FABRIC_v6.0.4_mc1.21.jar"
+side = "client"
+
+[download]
+url = "https://cdn.modrinth.com/data/fM515JnW/versions/R5ocwPul/AmbientSounds_FABRIC_v6.0.4_mc1.21.jar"
+hash-format = "sha1"
+hash = "2b8d8f0ed48782ee4fcc1ae10c044c900f6dcdc8"
+
+[update]
+[update.modrinth]
+mod-id = "fM515JnW"
+version = "R5ocwPul"
diff --git a/mods/cave-dust.pw.toml b/mods/cave-dust.pw.toml
new file mode 100644
index 0000000..a02bbfd
--- /dev/null
+++ b/mods/cave-dust.pw.toml
@@ -0,0 +1,13 @@
+name = "Cave Dust"
+filename = "cave_dust-3.0.0.jar"
+side = "client"
+
+[download]
+url = "https://cdn.modrinth.com/data/jawg7zT1/versions/YS7mMAIj/cave_dust-3.0.0.jar"
+hash-format = "sha1"
+hash = "2913ba88e5f72b8ffc94b1182c395c9f0e948db3"
+
+[update]
+[update.modrinth]
+mod-id = "jawg7zT1"
+version = "YS7mMAIj"
diff --git a/mods/cloth-config.pw.toml b/mods/cloth-config.pw.toml
new file mode 100644
index 0000000..693b846
--- /dev/null
+++ b/mods/cloth-config.pw.toml
@@ -0,0 +1,13 @@
+name = "Cloth Config API"
+filename = "cloth-config-15.0.130-fabric.jar"
+side = "both"
+
+[download]
+url = "https://cdn.modrinth.com/data/9s6osm5g/versions/7jtvrmVP/cloth-config-15.0.130-fabric.jar"
+hash-format = "sha1"
+hash = "4b1283fad1e4f8c9bcdb2a7767a0a468d0ac4cc5"
+
+[update]
+[update.modrinth]
+mod-id = "9s6osm5g"
+version = "7jtvrmVP"
diff --git a/mods/continuity.pw.toml b/mods/continuity.pw.toml
new file mode 100644
index 0000000..76c1786
--- /dev/null
+++ b/mods/continuity.pw.toml
@@ -0,0 +1,13 @@
+name = "Continuity"
+filename = "continuity-3.0.0-beta.5+1.21.jar"
+side = "client"
+
+[download]
+url = "https://cdn.modrinth.com/data/1IjD5062/versions/NksUpFjf/continuity-3.0.0-beta.5%2B1.21.jar"
+hash-format = "sha1"
+hash = "16d31a39e85dc10cdff4e06198a1bb26b4b82427"
+
+[update]
+[update.modrinth]
+mod-id = "1IjD5062"
+version = "NksUpFjf"
diff --git a/mods/creativecore.pw.toml b/mods/creativecore.pw.toml
new file mode 100644
index 0000000..ed9c20a
--- /dev/null
+++ b/mods/creativecore.pw.toml
@@ -0,0 +1,13 @@
+name = "CreativeCore"
+filename = "CreativeCore_FABRIC_v2.12.6_mc1.21.jar"
+side = "both"
+
+[download]
+url = "https://cdn.modrinth.com/data/OsZiaDHq/versions/HXHXexC5/CreativeCore_FABRIC_v2.12.6_mc1.21.jar"
+hash-format = "sha1"
+hash = "1ef8042d7d4dc19a234a0bfd6957480de1343f34"
+
+[update]
+[update.modrinth]
+mod-id = "OsZiaDHq"
+version = "HXHXexC5"
diff --git a/mods/distanthorizons.pw.toml b/mods/distanthorizons.pw.toml
new file mode 100644
index 0000000..8522eca
--- /dev/null
+++ b/mods/distanthorizons.pw.toml
@@ -0,0 +1,13 @@
+name = "Distant Horizons"
+filename = "DistantHorizons-2.1.2-a-1.21-neo-fabric.jar"
+side = "client"
+
+[download]
+url = "https://cdn.modrinth.com/data/uCdwusMi/versions/NCz4yZ3v/DistantHorizons-2.1.2-a-1.21-neo-fabric.jar"
+hash-format = "sha1"
+hash = "4f417abb5ada24f83e2a817b27541384e4ea98a2"
+
+[update]
+[update.modrinth]
+mod-id = "uCdwusMi"
+version = "NCz4yZ3v"
diff --git a/mods/entity-model-features.pw.toml b/mods/entity-model-features.pw.toml
new file mode 100644
index 0000000..01e7827
--- /dev/null
+++ b/mods/entity-model-features.pw.toml
@@ -0,0 +1,13 @@
+name = "[EMF] Entity Model Features"
+filename = "entity_model_features_fabric_1.21-2.1.3.jar"
+side = "client"
+
+[download]
+url = "https://cdn.modrinth.com/data/4I1XuqiY/versions/hX4kT2fu/entity_model_features_fabric_1.21-2.1.3.jar"
+hash-format = "sha1"
+hash = "de8d74b91b9616923921dd0e25b01ca972d6ccf1"
+
+[update]
+[update.modrinth]
+mod-id = "4I1XuqiY"
+version = "hX4kT2fu"
diff --git a/mods/entitytexturefeatures.pw.toml b/mods/entitytexturefeatures.pw.toml
new file mode 100644
index 0000000..da5f82d
--- /dev/null
+++ b/mods/entitytexturefeatures.pw.toml
@@ -0,0 +1,13 @@
+name = "[ETF] Entity Texture Features"
+filename = "entity_texture_features_fabric_1.21-6.1.3.jar"
+side = "client"
+
+[download]
+url = "https://cdn.modrinth.com/data/BVzZfTc1/versions/O3jDICoH/entity_texture_features_fabric_1.21-6.1.3.jar"
+hash-format = "sha1"
+hash = "f2c9e292b9582a02903f1886f8f9f0313299d91f"
+
+[update]
+[update.modrinth]
+mod-id = "BVzZfTc1"
+version = "O3jDICoH"
diff --git a/mods/fabric-api.pw.toml b/mods/fabric-api.pw.toml
new file mode 100644
index 0000000..a4187a6
--- /dev/null
+++ b/mods/fabric-api.pw.toml
@@ -0,0 +1,13 @@
+name = "Fabric API"
+filename = "fabric-api-0.102.0+1.21.jar"
+side = "both"
+
+[download]
+url = "https://cdn.modrinth.com/data/P7dR8mSH/versions/oGwyXeEI/fabric-api-0.102.0%2B1.21.jar"
+hash-format = "sha1"
+hash = "43035a1c6f506285a9910bc8038d1b1b925f8dd1"
+
+[update]
+[update.modrinth]
+mod-id = "P7dR8mSH"
+version = "oGwyXeEI"
diff --git a/mods/fallingleaves.pw.toml b/mods/fallingleaves.pw.toml
new file mode 100644
index 0000000..b1c25b5
--- /dev/null
+++ b/mods/fallingleaves.pw.toml
@@ -0,0 +1,13 @@
+name = "Falling Leaves"
+filename = "fallingleaves-1.16.2+1.21.jar"
+side = "client"
+
+[download]
+url = "https://cdn.modrinth.com/data/WhbRG4iK/versions/ue2maFEp/fallingleaves-1.16.2%2B1.21.jar"
+hash-format = "sha1"
+hash = "7acacdf2450425d19cb3900354ab49b69c754ea8"
+
+[update]
+[update.modrinth]
+mod-id = "WhbRG4iK"
+version = "ue2maFEp"
diff --git a/mods/indium.pw.toml b/mods/indium.pw.toml
new file mode 100644
index 0000000..85800c3
--- /dev/null
+++ b/mods/indium.pw.toml
@@ -0,0 +1,13 @@
+name = "Indium"
+filename = "indium-1.0.35+mc1.21.jar"
+side = "client"
+
+[download]
+url = "https://cdn.modrinth.com/data/Orvt0mRa/versions/Z8VpxxGh/indium-1.0.35%2Bmc1.21.jar"
+hash-format = "sha1"
+hash = "1bf4b5db91f4e6d7a4f94fe2e96525d22df1cacb"
+
+[update]
+[update.modrinth]
+mod-id = "Orvt0mRa"
+version = "Z8VpxxGh"
diff --git a/mods/iris.pw.toml b/mods/iris.pw.toml
new file mode 100644
index 0000000..3ea7667
--- /dev/null
+++ b/mods/iris.pw.toml
@@ -0,0 +1,13 @@
+name = "Iris Shaders"
+filename = "iris-1.7.3+mc1.21.jar"
+side = "client"
+
+[download]
+url = "https://cdn.modrinth.com/data/YL57xq9U/versions/kuOV4Ece/iris-1.7.3%2Bmc1.21.jar"
+hash-format = "sha1"
+hash = "1b4e44a74c850d407518bc5cbe33eec9577ad9e9"
+
+[update]
+[update.modrinth]
+mod-id = "YL57xq9U"
+version = "kuOV4Ece"
diff --git a/mods/modmenu.pw.toml b/mods/modmenu.pw.toml
new file mode 100644
index 0000000..0b76efc
--- /dev/null
+++ b/mods/modmenu.pw.toml
@@ -0,0 +1,13 @@
+name = "Mod Menu"
+filename = "modmenu-11.0.1.jar"
+side = "client"
+
+[download]
+url = "https://cdn.modrinth.com/data/mOgUt4GM/versions/xhN1IvHi/modmenu-11.0.1.jar"
+hash-format = "sha1"
+hash = "e4ba66f6036a4902433bb517d55120c4237c512f"
+
+[update]
+[update.modrinth]
+mod-id = "mOgUt4GM"
+version = "xhN1IvHi"
diff --git a/mods/mru.pw.toml b/mods/mru.pw.toml
new file mode 100644
index 0000000..feaa3bf
--- /dev/null
+++ b/mods/mru.pw.toml
@@ -0,0 +1,13 @@
+name = "M.R.U"
+filename = "MRU-1.0.2+1.21+fabric.jar"
+side = "both"
+
+[download]
+url = "https://cdn.modrinth.com/data/SNVQ2c0g/versions/s99KEPTF/MRU-1.0.2%2B1.21%2Bfabric.jar"
+hash-format = "sha1"
+hash = "6ecfc84df73acea97d7a601e655fa07619cd6045"
+
+[update]
+[update.modrinth]
+mod-id = "SNVQ2c0g"
+version = "s99KEPTF"
diff --git a/mods/not-enough-animations.pw.toml b/mods/not-enough-animations.pw.toml
new file mode 100644
index 0000000..e9299e3
--- /dev/null
+++ b/mods/not-enough-animations.pw.toml
@@ -0,0 +1,13 @@
+name = "Not Enough Animations"
+filename = "notenoughanimations-fabric-1.7.4-mc1.21.jar"
+side = "client"
+
+[download]
+url = "https://cdn.modrinth.com/data/MPCX6s5C/versions/WaI2x21x/notenoughanimations-fabric-1.7.4-mc1.21.jar"
+hash-format = "sha1"
+hash = "cc8fa2d8cbdd04283b5c74feead453145ccab69c"
+
+[update]
+[update.modrinth]
+mod-id = "MPCX6s5C"
+version = "WaI2x21x"
diff --git a/mods/placeholder-api.pw.toml b/mods/placeholder-api.pw.toml
new file mode 100644
index 0000000..21aedbd
--- /dev/null
+++ b/mods/placeholder-api.pw.toml
@@ -0,0 +1,13 @@
+name = "Text Placeholder API"
+filename = "placeholder-api-2.4.1+1.21.jar"
+side = "both"
+
+[download]
+url = "https://cdn.modrinth.com/data/eXts2L7r/versions/cE5TczQr/placeholder-api-2.4.1%2B1.21.jar"
+hash-format = "sha1"
+hash = "5f61f50e36f1f957dbb87eda02da95d847b4a943"
+
+[update]
+[update.modrinth]
+mod-id = "eXts2L7r"
+version = "cE5TczQr"
diff --git a/mods/presence-footsteps.pw.toml b/mods/presence-footsteps.pw.toml
new file mode 100644
index 0000000..93905c6
--- /dev/null
+++ b/mods/presence-footsteps.pw.toml
@@ -0,0 +1,13 @@
+name = "Presence Footsteps"
+filename = "PresenceFootsteps-1.10.0+1.21.jar"
+side = "client"
+
+[download]
+url = "https://cdn.modrinth.com/data/rcTfTZr3/versions/4CjXUG8M/PresenceFootsteps-1.10.0%2B1.21.jar"
+hash-format = "sha1"
+hash = "bb166be2790dbcd57427534c8fed18c305d2fd6b"
+
+[update]
+[update.modrinth]
+mod-id = "rcTfTZr3"
+version = "4CjXUG8M"
diff --git a/mods/snow-under-trees-remastered.pw.toml b/mods/snow-under-trees-remastered.pw.toml
new file mode 100644
index 0000000..f2d8f5c
--- /dev/null
+++ b/mods/snow-under-trees-remastered.pw.toml
@@ -0,0 +1,13 @@
+name = "Snow Under Trees (Fabric)"
+filename = "SnowUnderTrees-2.5.2+1.21.jar"
+side = "server"
+
+[download]
+url = "https://cdn.modrinth.com/data/XVnUIUAQ/versions/UpkCTTEf/SnowUnderTrees-2.5.2%2B1.21.jar"
+hash-format = "sha1"
+hash = "d115416d70928c9398abb364b9ea355e49dcf0cf"
+
+[update]
+[update.modrinth]
+mod-id = "XVnUIUAQ"
+version = "UpkCTTEf"
diff --git a/mods/sodium.pw.toml b/mods/sodium.pw.toml
new file mode 100644
index 0000000..80ebb2a
--- /dev/null
+++ b/mods/sodium.pw.toml
@@ -0,0 +1,13 @@
+name = "Sodium"
+filename = "sodium-fabric-0.5.11+mc1.21.jar"
+side = "client"
+
+[download]
+url = "https://cdn.modrinth.com/data/AANobbMI/versions/RncWhTxD/sodium-fabric-0.5.11%2Bmc1.21.jar"
+hash-format = "sha1"
+hash = "d67e66ea4bb2409997b636dae4203d33764cdcc8"
+
+[update]
+[update.modrinth]
+mod-id = "AANobbMI"
+version = "RncWhTxD"
diff --git a/mods/vanilla-fireflies.pw.toml b/mods/vanilla-fireflies.pw.toml
new file mode 100644
index 0000000..63a511b
--- /dev/null
+++ b/mods/vanilla-fireflies.pw.toml
@@ -0,0 +1,13 @@
+name = "Vanilla Fireflies"
+filename = "vanilla-fireflies-1.1.jar"
+side = "both"
+
+[download]
+url = "https://cdn.modrinth.com/data/dxiyDLYV/versions/XOfokGf5/vanilla-fireflies-1.1.jar"
+hash-format = "sha1"
+hash = "a4fe4df95b535f5b112fd94b23cd36fe88e3c4b9"
+
+[update]
+[update.modrinth]
+mod-id = "dxiyDLYV"
+version = "XOfokGf5"
diff --git a/mods/visuality.pw.toml b/mods/visuality.pw.toml
new file mode 100644
index 0000000..c7f80df
--- /dev/null
+++ b/mods/visuality.pw.toml
@@ -0,0 +1,13 @@
+name = "Visuality"
+filename = "visuality-0.7.7+1.21.jar"
+side = "client"
+
+[download]
+url = "https://cdn.modrinth.com/data/rI0hvYcd/versions/dhKbgdIb/visuality-0.7.7%2B1.21.jar"
+hash-format = "sha1"
+hash = "8d239710c1c1983d780ad04686c3c3d0d1b1585e"
+
+[update]
+[update.modrinth]
+mod-id = "rI0hvYcd"
+version = "dhKbgdIb"
diff --git a/mods/vtdownloader.pw.toml b/mods/vtdownloader.pw.toml
new file mode 100644
index 0000000..9e945e4
--- /dev/null
+++ b/mods/vtdownloader.pw.toml
@@ -0,0 +1,13 @@
+name = "VTDownloader"
+filename = "vt-downloader-2.3.0+1.21.jar"
+side = "client"
+
+[download]
+url = "https://cdn.modrinth.com/data/1E2sq1cp/versions/7WhLxXgq/vt-downloader-2.3.0%2B1.21.jar"
+hash-format = "sha1"
+hash = "7e595b92360604c282efd0984c60da8e8c7e6e7d"
+
+[update]
+[update.modrinth]
+mod-id = "1E2sq1cp"
+version = "7WhLxXgq"
diff --git a/pack.toml b/pack.toml
index 185f17c..b294f78 100644
--- a/pack.toml
+++ b/pack.toml
@@ -6,8 +6,8 @@ pack-format = "packwiz:1.1.0"
[index]
file = "index.toml"
hash-format = "sha256"
-hash = "7b81c9e9d9e6e21a9865a2dded0dfd77e7683d679b98fe5b0114eaed9a31f17e"
+hash = "f686d509bbecb7c13fc9a1506bdaf105f5f6fdb901f7fab9770f4418b3a1a5b7"
[versions]
fabric = "0.16.2"
-minecraft = "1.21.1"
+minecraft = "1.21"
diff --git a/resourcepacks/3d-default.pw.toml b/resourcepacks/3d-default.pw.toml
new file mode 100644
index 0000000..07d8e57
--- /dev/null
+++ b/resourcepacks/3d-default.pw.toml
@@ -0,0 +1,13 @@
+name = "3D Default"
+filename = "3D Default 1.20+ v1.10.2.zip"
+side = "client"
+
+[download]
+url = "https://cdn.modrinth.com/data/5aPp18Lx/versions/H2ccvlo4/3D%20Default%201.20%2B%20v1.10.2.zip"
+hash-format = "sha1"
+hash = "70d6c1a70b018d4b8f5581a20b2d3f31366088ae"
+
+[update]
+[update.modrinth]
+mod-id = "5aPp18Lx"
+version = "H2ccvlo4"
diff --git a/resourcepacks/fancy-crops.pw.toml b/resourcepacks/fancy-crops.pw.toml
new file mode 100644
index 0000000..6a82c24
--- /dev/null
+++ b/resourcepacks/fancy-crops.pw.toml
@@ -0,0 +1,13 @@
+name = "Fancy Crops"
+filename = "Fancy Crops v1.0 f5-34.zip"
+side = "client"
+
+[download]
+url = "https://cdn.modrinth.com/data/UGEVQ6t9/versions/aPjGJwCA/Fancy%20Crops%20v1.0%20f5-34.zip"
+hash-format = "sha1"
+hash = "2eabf00cd21ade16d132a656cdddf240f5214c56"
+
+[update]
+[update.modrinth]
+mod-id = "UGEVQ6t9"
+version = "aPjGJwCA"
diff --git a/resourcepacks/fresh-animations.pw.toml b/resourcepacks/fresh-animations.pw.toml
new file mode 100644
index 0000000..19bff42
--- /dev/null
+++ b/resourcepacks/fresh-animations.pw.toml
@@ -0,0 +1,13 @@
+name = "Fresh Animations"
+filename = "FreshAnimations_v1.9.2.zip"
+side = "client"
+
+[download]
+url = "https://cdn.modrinth.com/data/50dA9Sha/versions/8vtPih5h/FreshAnimations_v1.9.2.zip"
+hash-format = "sha1"
+hash = "ff18e6a762b87d7e8bad0726ac7d9c153306c6d2"
+
+[update]
+[update.modrinth]
+mod-id = "50dA9Sha"
+version = "8vtPih5h"
diff --git a/resourcepacks/nautilus3d.pw.toml b/resourcepacks/nautilus3d.pw.toml
new file mode 100644
index 0000000..f381b01
--- /dev/null
+++ b/resourcepacks/nautilus3d.pw.toml
@@ -0,0 +1,13 @@
+name = "Nautilus 3D"
+filename = "Nautilus3D-V2.0.2.zip"
+side = "client"
+
+[download]
+url = "https://cdn.modrinth.com/data/1MyOrwfu/versions/ZNGGvKXx/Nautilus3D-V2.0.2.zip"
+hash-format = "sha1"
+hash = "bd559091f029ceddcbf062d850bd3fc96846d768"
+
+[update]
+[update.modrinth]
+mod-id = "1MyOrwfu"
+version = "ZNGGvKXx"
diff --git a/resourcepacks/xalis-enhanced-vanilla.pw.toml b/resourcepacks/xalis-enhanced-vanilla.pw.toml
new file mode 100644
index 0000000..290b86e
--- /dev/null
+++ b/resourcepacks/xalis-enhanced-vanilla.pw.toml
@@ -0,0 +1,13 @@
+name = "xali's Enhanced Vanilla"
+filename = "xali's Enhanced Vanilla -1.11.2b-rev.54d51d4.zip"
+side = "client"
+
+[download]
+url = "https://cdn.modrinth.com/data/Srw5RQ6k/versions/dEGWry22/xali%27s%20Enhanced%20Vanilla%20-1.11.2b-rev.54d51d4.zip"
+hash-format = "sha1"
+hash = "4eabdbc6ee1c7f8f197d346438dc9dc48f34fe88"
+
+[update]
+[update.modrinth]
+mod-id = "Srw5RQ6k"
+version = "dEGWry22"
diff --git a/shaderpacks/bsl-shaders.pw.toml b/shaderpacks/bsl-shaders.pw.toml
new file mode 100644
index 0000000..2bd396d
--- /dev/null
+++ b/shaderpacks/bsl-shaders.pw.toml
@@ -0,0 +1,13 @@
+name = "BSL Shaders - Original"
+filename = "BSLOriginal_v8.3.zip"
+side = "client"
+
+[download]
+url = "https://cdn.modrinth.com/data/Q1vvjJYV/versions/WngcIzt8/BSLOriginal_v8.3.zip"
+hash-format = "sha1"
+hash = "f30ed3fde3b8d7f303fe8caab0a21730de9e2d8c"
+
+[update]
+[update.modrinth]
+mod-id = "Q1vvjJYV"
+version = "WngcIzt8"