A GTK4-based mod manager for Daggerfall Unity, written in Rust.
- Modern GTK4 Interface - Native Linux support with Wayland compatibility
- Profile Management - Multiple mod configurations with auto-detection of game folders
- Mod List Display - Drag-and-drop reordering with virtual filesystem deployment
- Mod Sections - Organize mods into collapsible categories with drag-and-drop
- Auto-Sorting - Rule-based load order sorting with transitive inference
- Conflict Detection - Visual file tree showing conflicts between mods
- DFMods Support - View and manage .dfmod asset bundles with cached extraction
- Nexus Mods Integration - Download mods directly via NXM protocol links
- Downloads Manager - Download queue with progress tracking, resume support, and archive extraction
- Backup & Restore - Save and restore mod configurations per profile
- Game Launcher - Launch Daggerfall Unity directly with log viewing
Download the latest release from GitHub Releases.
Extract and run:
tar xzf vmod-linux-x86_64.tar.gz
./vmodSystem Dependencies:
Fedora/RHEL:
sudo dnf install gtk4-devel glib2-develUbuntu/Debian:
sudo apt install libgtk-4-dev libglib2.0-devArch:
sudo pacman -S gtk4Build:
# Compile GSettings schema (required for development)
glib-compile-schemas resources/
# Build release binary
cargo build --release
# Run
./target/release/vmodRun the installation script to add VMOD to your application menu and register it as the NXM protocol handler:
./scripts/install-nxm-handler.shThis will:
- Install
vmod.desktopto~/.local/share/applications/ - Register VMOD to handle
nxm://links from Nexus Mods - Update the desktop database
If you prefer manual setup or installed from a release:
-
Copy the desktop file:
cp resources/vmod.desktop ~/.local/share/applications/ -
Edit the
Exec=line to point to your vmod binary:sed -i "s|Exec=vmod|Exec=/path/to/vmod|" ~/.local/share/applications/vmod.desktop
-
Register as NXM handler:
xdg-mime default vmod.desktop x-scheme-handler/nxm
-
Update desktop database:
update-desktop-database ~/.local/share/applications
Test that the handler works:
xdg-open 'nxm://daggerfallunity/mods/1/files/1'VMOD should launch and begin downloading the mod.
- Create a Profile - Select your Daggerfall Unity game folder
- Add Mods - Place mod folders in the profile's mods directory or download via Nexus
- Reorder - Drag mods to set load order (lower = higher priority)
- Check Conflicts - Use the conflict panel to review file overwrites
- Apply Changes - Deploy to the game's virtual filesystem
Right-click mods to move them into sections. Create custom sections to group mods by type (textures, gameplay, UI, etc.).
VMOD can automatically sort mods based on predefined rules. Place a sorting_rules.json file in ~/.config/vmod/ with load order constraints:
{
"rules": [
{ "first": "mod_a", "then": "mod_b" },
{ "first": "mod_b", "then": "mod_c" }
]
}Each rule specifies that first should load before then. The sorting system uses transitive inference - if you have rules A→B→C and mod B is missing, A will still be placed before C.
Generating Rules from a Mod List
Use the included Python script to generate sorting rules from a text file containing your desired mod order:
python scripts/generate_sorting_rules.py ~/Documents/modorder.txt sorting_rules.jsonThe script parses a bulleted list of mod names and generates consecutive pair rules. This is useful for converting community-recommended load orders into VMOD sorting rules.
Create named backups before experimenting with load order. Restore anytime from the backup manager.
Use the Running Panel to launch Daggerfall Unity and view game logs directly in VMOD.
The Running Panel provides:
- Executable Path - Auto-detected from your profile's game folder (looks for
DaggerfallUnity.x86_64orDaggerfallUnity), or browse to select manually - Environment Variables - Custom env vars passed to the game process (default:
TERM=xtermfor proper terminal output handling) - Tabbed Log Viewing - View game output, Player.log, and VMOD logs in separate tabs
- Process Control - Run/Stop buttons with status indicator
Configuration persisted to ~/.config/vmod/running_config.json.
VMOD registers as an NXM protocol handler. Click "Download with Manager" on Nexus Mods to automatically download and queue mods for installation.
VMOD uses XDG-compliant directories for all data storage.
| File/Directory | Description |
|---|---|
profiles.json |
List of game profiles |
profiles/<name>/ |
Per-profile directory |
profiles/<name>/mods/ |
Mods for this profile |
profiles/<name>/mod_state.json |
Enabled/disabled state and load order |
profiles/<name>/sections.json |
Custom section organization |
profiles/<name>/backups/ |
Profile backups |
sorting_rules.json |
Auto-sorting load order rules (see Auto-Sorting) |
nexus.json |
Nexus Mods API credentials |
running_config.json |
Game launcher settings |
| File/Directory | Description |
|---|---|
dfmod_cache.json |
Parsed .dfmod asset cache |
downloads/ |
Downloaded mod archives from Nexus |
vmod.log |
Application log file |
| Directory | Description |
|---|---|
| Game folder | Selected when creating a profile (contains DaggerfallUnity.x86_64) |
~/.config/unity3d/Daggerfall Workshop/Daggerfall Unity/ |
Unity player settings and save data |
vmod/
├── src/
│ ├── main.rs # Entry point
│ ├── application.rs # App lifecycle, NXM handling
│ ├── window/ # Main window
│ ├── mod_list/ # Mod list view and UI
│ ├── conflict_panel/ # Conflict detection UI
│ ├── preferences/ # Settings dialog
│ ├── nexus_api.rs # Nexus Mods API client
│ ├── dfmod_cache.rs # DFMod asset caching
│ └── tree_filter.rs # Reusable tree search
└── resources/
├── window.ui # GTK templates
└── *.gschema.xml # Settings schema
MIT
