Files
neon-mod-manager/README.md
T

219 lines
7.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🎮 Neon Mod Manager
A Cyberpunk 2077 mod manager for Linux. Built with PyQt6.
## Why?
Because existing mod managers (Mod Organizer 2 / Fluorine) have problems on Linux:
- **REDmod deployment fails** with permission errors on FUSE mounts
- **FUSE VFS** blocks file access and causes crashes
- **Wine prefix** management is fragile and complex
Neon Mod Manager takes a simpler approach: **directly manage files in the game directory**. No VFS, no staging, no REDmod, no FUSE.
## Features
### v0.2 — Current
| Feature | How it works |
|---|---|
| **Enable/Disable Mods** | Renames `.archive``.archive.disabled` — no staging, no VFS |
| **Load Order** | Numeric filename prefixes (`000_`, `010_`, `020_`...) — higher number = loaded later = overrides earlier |
| **Add Mods** | Copy files directly, or drag & drop onto the window |
| **Archive Parsing** | Reads internal file paths from `.archive` files (RDAR format) |
| **Deep Conflict Scan** | Compares internal file paths across all enabled mods — finds *real* conflicts, not just name matches |
| **Quick Conflict Scan** | Fast name-based conflict detection |
| **Script Mod Support** | Manages redscript, TweakXL, CET, red4ext, ArchiveXL mods |
| **Auto-Extract Downloads** | `.7z` / `.zip` / `.rar` files are extracted and contents installed to correct paths automatically |
| **Drag & Drop** | Drop mod files (.archive, .zip, .7z) onto the window to install |
| **Internal File Viewer** | Right-click a mod → "Show Internal Files" to see what's inside the .archive |
| **Profiles** | Save/load mod configurations (e.g. "NSFW", "Vanilla+", "Minimal") |
| **Nexus Mods Integration** | Paste `nxm://` URLs to download + auto-install, or register as browser protocol handler |
| **No Wine needed** | Pure Python + Qt, runs natively on Linux |
### Auto-Extract Install Paths
When you add a `.zip` or `.7z` mod, files are automatically routed to the correct location:
| File Type | Destination | Mod Framework |
|---|---|---|
| `.archive` | `archive/pc/mod/` | Base game textures/meshes |
| `.xl` | `archive/pc/mod/` | ArchiveXL |
| `.yaml` / `.yml` | `r6/tweaks/` | TweakXL |
| `.reds` | `r6/scripts/` | redscript |
| `.dll` | `red4ext/plugins/<modname>/` | red4ext |
| `.lua` | `bin/x64/plugins/cyber_engine_tweaks/mods/<modname>/` | Cyber Engine Tweaks |
| `.ini` | `engine/config/` | Engine configuration |
### Script Mods Tab
The **📜 Script Mods** tab automatically scans your game directory and shows all installed script-based mods, grouped by type:
- 🔴 **REDSCRIPT**`.reds` files in `r6/scripts/`
- ⚙️ **TWEAKXL**`.yaml` files in `r6/tweaks/`
- 🔧 **CET** — Lua mods in `bin/x64/plugins/cyber_engine_tweaks/mods/`
- 📦 **RED4EXT**`.dll` plugins in `red4ext/plugins/`
- 🗂️ **ARCHIVEXL**`.xl` files in `archive/pc/mod/`
## Installation
### Prerequisites
```bash
# Arch Linux / EndeavourOS
sudo pacman -S python-pyqt6 p7zip unrar
# Ubuntu / Debian
sudo apt install python3-pyqt6 p7zip unrar
# Fedora
sudo dnf install python3-pyqt6 p7zip unrar
# Or via pip (PyQt6 only)
pip install PyQt6
```
> **Note:** `p7zip` and `unrar` are needed for auto-extracting `.7z` and `.rar` downloads. The Settings tab shows which tools are installed.
### Download
```bash
git clone https://gitea.die-heimatlosen.eu/arch_agent/neon-mod-manager.git
cd neon-mod-manager
```
### Run
```bash
# Wayland (most common on modern Linux)
QT_QPA_PLATFORM=wayland python3 mod_manager.py
# X11
python3 mod_manager.py
```
## Usage
### Adding Mods
1. Click ** Add Mod** and select files (`.archive`, `.zip`, `.7z`, `.rar`, `.yaml`, `.reds`, `.xl`), **OR**
2. **Drag & drop** mod files onto the window, **OR**
3. Download from **Nexus Mods** (see below)
### Load Order
- Mods are sorted by numeric prefix: `000_` loads first, `999_` loads last
- Later mods **override** earlier ones (same internal file = last one wins)
- Click **🔢 Auto-Sort** to auto-assign prefixes based on current list order
- Right-click a mod → **Move Up/Down** to reorder manually
### Enabling / Disabling
- **Checkbox** in the mod list to toggle on/off
- **Enable All / Disable All** buttons for bulk actions
- Disabled mods get `.archive.disabled` extension (not deleted!)
### Conflict Detection
- **⚡ Quick Scan** — fast name-based check for duplicate mod names
- **🔍 Deep Scan** — parses all `.archive` files and compares internal file paths
- Shows which internal files (textures, meshes, etc.) are overridden by multiple mods
- Files in 3+ mods are highlighted red, 2 mods in orange
- Progress bar shows scan status
### Viewing Internal Files
- Right-click any mod → **📋 Show Internal Files**
- Shows version, file count, and up to 50 internal file paths from the .archive
### Profiles
1. Set up your mods the way you want them
2. Go to **💾 Profile** tab
3. Enter a name (e.g. "NSFW Full", "Vanilla+") and click **Save Profile**
4. Switch between profiles anytime from the dropdown at the top
### Nexus Mods Integration
1. Get your API key from [Nexus Mods](https://www.nexusmods.com/users/myaccount?tab=api%20keys)
2. Go to **🌐 Nexus Mods** tab and paste your key
3. **Option A:** Paste `nxm://` URLs manually and click **Download & Install**
- Downloads the mod, auto-extracts if needed, and installs to correct paths
4. **Option B:** Click **🔗 Register nxm:// Protocol Handler**
- Then clicking "Download" on Nexus Mods website automatically sends the mod to Neon Mod Manager
- Downloads and installs silently in the background
## How It Works (Technical)
### No VFS / No Staging
Unlike MO2/Fluorine which use a virtual filesystem (FUSE on Linux), Neon Mod Manager copies files directly to the game directory. This avoids:
- FUSE mount permission issues
- REDmod deployment failures
- Wine prefix corruption
### Load Order via Filename
Cyberpunk 2077 loads `.archive` files in alphabetical order. Neon Mod Manager uses numeric prefixes:
```
000_MyBodyMod.archive → loads first
010_MyTextureMod.archive → loads second
020_MyAdMod.archive → loads third (overrides earlier)
```
### Enable/Disable
Mods are renamed in-place:
- **Enable:** `MyMod.archive.disabled``MyMod.archive`
- **Disable:** `MyMod.archive``MyMod.archive.disabled`
The game ignores `.disabled` files completely.
### Archive Parsing
`.archive` files use the RDAR format:
- Magic: `RDAR` (4 bytes)
- Version (uint32)
- File table offset (uint64)
- File count (uint32)
The file table contains entries with hash, offset, size, and null-terminated UTF-8 path strings. Neon Mod Manager reads these to detect which internal files (textures, meshes) are overridden by multiple mods.
### Auto-Extract
When a `.zip` or `.7z` is added:
1. File is extracted to `/tmp/neon-mod-extract/`
2. Files are scanned and routed to correct game paths based on extension
3. Directory structure from the archive is preserved (e.g. `r6/scripts/MyMod/` stays intact)
4. Temporary extraction directory is cleaned up
## Configuration
Config is stored at `~/.config/neon-mod-manager/config.json`:
```json
{
"game_path": "/mnt/Spiele/Heroic/Cyberpunk 2077",
"mod_dir": "archive/pc/mod",
"last_profile": "Default",
"nexus_api_key": "",
"auto_prefix": true
}
```
Profiles are stored at `~/.config/neon-mod-manager/profiles/*.json`.
## License
MIT — do whatever you want.
## Roadmap
- [x] ~~Archive file parsing (read internal file list for real conflict detection)~~ ✅ v0.2
- [x] ~~REDmod script mod support (r6/tweaks)~~ ✅ v0.2
- [x] ~~Auto-extract `.7z` / `.zip` downloads~~ ✅ v0.2
- [ ] Nexus Mods search (browse mods without leaving the app)
- [ ] Mod update detection (compare versions)
- [ ] Mod categories and tags
- [ ] Dark/light theme switcher
- [ ] Backup/restore vanilla files
- [ ] Mod dependency checker