# defaultoptions

`keybindings.txt` ships pack keybind defaults via the Default Options mod. Only
binds that need changing are listed — anything absent keeps its mod's own
default. The file deliberately contains no comments: it is parsed with the same
reader as `options.txt`, which has no comment syntax.

Resolved from a real `options.txt` on 2026-08-18, not from guesswork.

| Bind | Was | Now | Why |
|---|---|---|---|
| `key.cobblemon.summary` | keypad 6 | **Y** | Laptops without a numpad could not reach it, and Summary is a core player action |
| `create.keyinfo.toolmenu` | Left Alt | **G** | Freed Alt for Cobblemon |
| `create.keyinfo.toolbelt` | Left Alt | **G** | Shares G with toolmenu — the two cannot be active at once by Create's design |
| `key.map_atlases.place_pin` | B | **N** | B collided with Sophisticated Backpacks' Open Backpack, used far more often |
| `key.ftbchunks.minimap.zoomIn` | `=` | unbound | FTB mapping is disabled server-side; the key did nothing |
| `key.ftbchunks.minimap.zoomOut` | `-` | unbound | same |

## Deliberately NOT changed

- **Left Alt** keeps `key.cobblemon.ridingfreelook` and `create.keyinfo.alt_modifier`.
  HANDOFF.md: where Cobblemon and Create conflict, protect the player experience.
  Create is operator-only here, so Create moved. `alt_modifier` is a modifier and
  is meant to share.
- **Tab** keeps both `key.playerlist` and `simulated.keyinfo.rotate_mode`. Not a
  conflict: rotate_mode suppresses the playerlist while it is open.
- **`key.ftbchunks.claim_manager`** stays unbound. Chunk claiming is not wanted on
  a small friends server, and leaving it unbound means nobody claims by accident.
  Claiming still works via `/chunks` if it is ever needed.
- Roughly a dozen apparent clashes are context-scoped and were left alone: JEI's
  binds fire only over its overlay, Create's shift/ctrl modifiers are designed to
  sit on Sneak/Sprint, Jade's Show Details on Shift is standard, and Ponder on W
  only triggers while hovering an item.

## `extra/` — seed-once files

`extra/` is read by Default Options' `ExtraDefaultOptionsHandler`. It walks the
folder and, for each file, copies it to the same relative path under
`.minecraft/` **only if nothing is there already**:

    Files.walk(extra/) -> isFile? -> target.exists()
        yes -> "Extra defaults skipping {} because it already exists"
        no  -> FileUtils.copyFile(...)  "Populated {} with default options from {}"

So `extra/config/DistantHorizons.toml` lands at `.minecraft/config/DistantHorizons.toml`
on first launch and is never touched again. A player who then tunes the mod keeps
their changes.

**Use this, not `pack-config/config/`, for anything a player may reasonably want
to change.** Files under `pack-config/config/` are packwiz-managed and get
rewritten on EVERY launch, which silently reverts player tuning.

`pack-config/defaultconfigs/` does the same seed-once job but ONLY for configs
registered through NeoForge's `ModConfigSpec` — those are the `<modid>-<type>.toml`
files. A mod that manages its own config file (Distant Horizons writes a bare
`DistantHorizons.toml`) is invisible to that mechanism, which is why it lives here.

### Currently seeded

| File | Why |
|---|---|
| `config/DistantHorizons.toml` | Tuned 2026-08-31 against LOD aliasing. `serverId` and `numberOfThreads` are deliberately ABSENT so DH regenerates them per machine — the first is an autogenerated collision guard, the second is sized to the tuner's CPU. |
