# Dynamic Profiles

> Switch Edit Mode layouts, UI scale, and AddOn Sets in one tap - built for people who play WoW on more than one device.

**Author:** TeoDaTank · **Version:** 2.1.5

---

## Why this exists 🎮

I play World of Warcraft at a competitive level on a **4K PC**, a **Legion Go**, a **Steam Deck**, those handhelds **docked**, and when streaming from the PC to a Shield / another handheld.

Some setups have unique resolutions - Auto mode handles those fine. The problem is when they *don’t*.

Docked Legion Go / Steam Deck and the desktop PC can both report **the same 4K resolution**. Resolution-only matching can’t tell “I’m at my desk” from “I’m on the couch with a controller.” I needed profiles I could **name** (`4kPC`, `4KHandheld`, `Deck`, …), tie to **different addon sets**, and switch **quickly without a keyboard or mouse**.

That’s Dynamic Profiles.

---



## What it does


| Piece                | What you get                                                            |
| -------------------- | ----------------------------------------------------------------------- |
| **Named profiles**   | Multiple profiles per resolution (e.g. two different 4K setups)         |
| **On-screen picker** | Controller-friendly button; open Edit Mode to move / resize / anchor it |
| **Data broker**      | LibDataBroker plugin — certified with Titan Panel and Bazooka |
| **Edit Mode layout** | One layout per profile                                                  |
| **UI scale**         | Applied with the profile                                                |
| **AddOn Sets**       | Named lists of enabled addons - applied when the profile activates      |


**Auto mode** picks the profile marked for the current resolution.  
**Manual mode** sticks to whatever you choose until you go back to Auto — survives reloads and logins.

---



## Quick start ⚡

1. Open **Settings → AddOns → Dynamic Profiles**
2. Create **AddOn Sets** for each setup (which addons should be on)
3. Open **Profiles** → create profiles (PC, Handheld, Deck, …)
4. On each profile: set layout, scale, and **Pick Set**
5. Mark one profile as **Automatic for this resolution** (optional)
6. Use the **on-screen picker** (or Activate in Settings) to switch - especially useful when two setups share the same resolution

Slash commands:

- `/dp` or `/dynamicprofiles` - open options
- `/dp auto` - return to Auto (by resolution)
- `/dp use 4kPC` - select a profile by name

---



## AddOn Sets 🧩

Sets answer: *“In this profile, which addons should be enabled?”*

Applying a set is **authoritative** - members are enabled, everything else (except protected addons like Dynamic Profiles itself) is disabled. You’ll get a reload prompt only when something actually changed.

Dynamic Profiles also protects itself in the **in-game AddOn List**: its checkbox is replaced with a lock and **Disable All** leaves it enabled. You can still disable it normally from the character-select AddOns screen.

### Without BetterAddonList

- **Settings → AddOn Sets** - checkbox editor with collapsible groups (e.g. EllesmereUI modules under one header)
- Blizzard **Addon List → Sets** - **Select** a set (checks boxes, no reload nag), tweak, then **Save**; or **New set…**



### With [BetterAddonList](https://www.curseforge.com/wow/addons/betteraddonlist)

If BAL is installed, Dynamic Profiles **defers to it**:

- Profile **Pick Set** lists BAL’s sets
- Edit members in BAL’s Addon List UI (DP won’t duplicate that workflow)
- Native DP Sets button stays hidden so you aren’t managing two systems

You can still keep local DP sets alongside BAL if you want; the picker labels them clearly.

---

## AdHoc mods (hard-coded grouping)

Most AddOn suites group cleanly from TOC metadata (`## Group`) or dependencies. A few don’t — their expansion modules declare the wrong parent (or none), so Dynamic Profiles would otherwise list each module as its own one-item group.

For those edge cases we keep a small **hard-coded exception list** so sets UI and reload tooltips still collapse them into one pack.

### Certified exceptions

| Suite | Behavior |
| ----- | -------- |
| **LittleWigs** | All `LittleWigs` / `LittleWigs_*` modules are forced into one **LittleWigs** group (their TOCs only depend on BigWigs, so they’d otherwise scatter or nest under BigWigs) |

Hit a similar suite — every expansion as its own group, or children nesting under the wrong parent? Leave a **CurseForge comment**, open a **GitHub Issue**, or ping **TeoDaTank** on Discord and we’ll add an exception.

---



## Profile picker

- Shows the active profile (`Auto: 4kPC` or `4KHandheld`)
- **Pending reload `*`** — a red asterisk appears on the picker (and data broker) when AddOn changes still need `/reload`. Hover it to see what will enable or disable; large packs collapse (e.g. `BigWigs (+12 dependencies)`). Middle-click reloads immediately.
- Menu: **Auto (by resolution)** + every named profile
- Remains usable in combat
- Edit Mode: drag, resize, or anchor to Minimap / Chat / any named frame (**Pick Anchor Frame**)
- **Left-click** choose profile · **Right-click** Profiles settings · **Middle-click** reload UI

On the Overview page you can also:

- Toggle the on-screen picker
- **Mute chat log output (Dynamic Profiles only)** if login messages are too noisy

---

## Data Broker

Dynamic Profiles ships a built-in **LibDataBroker** data source so you can put the active profile on your data bar — no extra addon required beyond a display like **Titan Panel**, **Bazooka**, or ChocolateBar.

**Directly tested / certified with Titan Panel and Bazooka:**

- **Titan Panel** — shows under **Interface**, supports **Show Label** (`Dynamic Profiles: …`), dedicated broker icon
- **Bazooka** — clean plugin title (no duplicated name), same click behavior

Clicks match the on-screen picker:

- **Left** — choose a profile
- **Right** — open Profiles settings
- **Middle** — reload UI

Enable the plugin in your bar’s addon list if it doesn’t appear automatically.

### Broker Config

Open **Settings → Dynamic Profiles → Broker Config** to customize the bar text with tokens:

| Token | Result |
| ----- | ------ |
| `%profile%` | Active profile label (`4kPC`, `Auto: 4kPC`, or `Auto`) |
| `%icon%` | Inline 16px broker icon |
| `%shortname%` | `DP` |
| `%fullname%` | `Dynamic Profiles` |

Default format is `%profile%`. Examples: `%icon% %profile%`, `%shortname%: %profile%`, `%fullname% — %profile%`.

Your bar addon can still show/hide its own icon separately from `%icon%`.

The broker text also gains a red `*` when AddOn changes need a UI reload. Hover it for the affected AddOn names.

---

## Tips for multi-device play 💡

- Give profiles names you’ll recognize on a tiny screen: `4kPC`, `4KDock`, `Deck`, `Go`
- Put heavy / desktop-only addons in the PC set; keep handheld sets lean
- When PC and docked share 4K, **don’t rely on Auto alone** - switch with the picker once you’re on that device
- After changing sets, reload when prompted so enable states finish applying

---



## Feedback & contact

Found a bug or have a feature request? Leave a **comment** on CurseForge or open a **GitHub Issue** - both are welcome.

Want to reach me directly? Discord: **TeoDaTank**

---



## Links

- CurseForge project ID: `1615362`
- GitHub: https://github.com/Random-Stack-Random-Day/dynamic-profiles-wow
- Changelog: see `CHANGELOG.md`
- Optional companion: **BetterAddonList** (sets / protect)

