8f860a8ec3
- All DLLs now output to lib\[Configuration]\[TargetFramework]\ at repo root (see Directory.Build.props) - .gitignore updated to exclude /lib/ - On first run, startup.json is auto-generated with OS-appropriate default paths (Windows, Linux, macOS, or portable) - Removes null/example config; generated config is immediately usable and clearly documented - Extensive new documentation: build output, startup.json logic, visual guides, and code proofs - Publish profile now deletes existing files for clean deploys - No breaking changes: existing startup.json files are preserved - Improves first-run UX, deployment, and cross-platform consistency
238 lines
6.8 KiB
Markdown
238 lines
6.8 KiB
Markdown
# Summary: Auto-Generated startup.json Configuration
|
|
|
|
## ✅ Feature Implemented!
|
|
|
|
**Yes!** Jellyfin now automatically creates a `startup.json` configuration file on first startup if it doesn't already exist.
|
|
|
|
## 🎯 What Was Implemented
|
|
|
|
### Automatic File Creation
|
|
- **When**: On first startup, if no `startup.json` file is found
|
|
- **Where**: Current working directory (usually application root)
|
|
- **What**: Complete template with examples for Linux, Windows, and portable setups
|
|
|
|
### File Contents
|
|
The auto-generated `startup.json` includes:
|
|
- ✅ All configurable path properties (set to `null` for defaults)
|
|
- ✅ Inline documentation and comments
|
|
- ✅ Example configurations for different platforms
|
|
- ✅ Priority explanation
|
|
- ✅ Link to full documentation
|
|
|
|
## 📝 Code Changes
|
|
|
|
### Modified File
|
|
**Jellyfin.Server/Helpers/StartupHelpers.cs**
|
|
|
|
#### Added Methods:
|
|
|
|
1. **CreateDefaultStartupConfiguration()**
|
|
- Creates default `startup.json` file
|
|
- Uses `System.Text.Json` for JSON generation
|
|
- Includes examples and documentation
|
|
- Handles write errors gracefully
|
|
|
|
2. **Updated LoadStartupConfiguration()**
|
|
- Now calls `CreateDefaultStartupConfiguration()` if no file found
|
|
- Logs file creation to console
|
|
|
|
## 🔍 Implementation Details
|
|
|
|
```csharp
|
|
private static void CreateDefaultStartupConfiguration()
|
|
{
|
|
const string ConfigFileName = "startup.json";
|
|
var configPath = Path.Combine(Directory.GetCurrentDirectory(), ConfigFileName);
|
|
|
|
try
|
|
{
|
|
var defaultConfig = new
|
|
{
|
|
_comment = "Jellyfin Startup Configuration...",
|
|
_documentation = "See FILE_BASED_STARTUP_CONFIG.md...",
|
|
_priority = "Command-line > Environment > File > Defaults",
|
|
Paths = new
|
|
{
|
|
DataDir = (string?)null,
|
|
ConfigDir = (string?)null,
|
|
CacheDir = (string?)null,
|
|
LogDir = (string?)null,
|
|
TempDir = (string?)null,
|
|
WebDir = (string?)null
|
|
},
|
|
Examples = new
|
|
{
|
|
Linux = { /* ... */ },
|
|
Windows = { /* ... */ },
|
|
Portable = { /* ... */ }
|
|
}
|
|
};
|
|
|
|
var json = JsonSerializer.Serialize(defaultConfig,
|
|
new JsonSerializerOptions { WriteIndented = true });
|
|
|
|
File.WriteAllText(configPath, json);
|
|
Console.WriteLine($"Created default startup configuration at: {configPath}");
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine($"Warning: Could not create default startup configuration: {ex.Message}");
|
|
}
|
|
}
|
|
```
|
|
|
|
## 📋 Generated File Structure
|
|
|
|
```json
|
|
{
|
|
"_comment": "Jellyfin Startup Configuration - Configure path locations...",
|
|
"_documentation": "See FILE_BASED_STARTUP_CONFIG.md for complete documentation",
|
|
"_priority": "Command-line options > Environment variables > This file > Defaults",
|
|
|
|
"Paths": {
|
|
"DataDir": null,
|
|
"ConfigDir": null,
|
|
"CacheDir": null,
|
|
"LogDir": null,
|
|
"TempDir": null,
|
|
"WebDir": null
|
|
},
|
|
|
|
"Examples": {
|
|
"_comment": "Example configurations below - remove when customizing",
|
|
"Linux": {
|
|
"DataDir": "/var/lib/jellyfin",
|
|
"ConfigDir": "/etc/jellyfin",
|
|
"CacheDir": "/var/cache/jellyfin",
|
|
"LogDir": "/var/log/jellyfin",
|
|
"TempDir": "/var/tmp/jellyfin",
|
|
"WebDir": "/usr/share/jellyfin/web"
|
|
},
|
|
"Windows": {
|
|
"DataDir": "C:\\ProgramData\\Jellyfin\\data",
|
|
"ConfigDir": "C:\\ProgramData\\Jellyfin\\config",
|
|
"CacheDir": "D:\\Cache\\Jellyfin",
|
|
"LogDir": "C:\\ProgramData\\Jellyfin\\logs",
|
|
"TempDir": "D:\\Temp\\Jellyfin",
|
|
"WebDir": "C:\\Program Files\\Jellyfin\\web"
|
|
},
|
|
"Portable": {
|
|
"DataDir": "./data",
|
|
"ConfigDir": "./config",
|
|
"CacheDir": "./cache",
|
|
"LogDir": "./logs",
|
|
"TempDir": "./temp",
|
|
"WebDir": "./web"
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
## 🎬 User Experience
|
|
|
|
### First Startup
|
|
```
|
|
Starting Jellyfin...
|
|
Created default startup configuration at: C:\Projects\pgsql-jellyfin\startup.json
|
|
You can customize this file to set default paths for Jellyfin.
|
|
[INF] Program data path: C:\Users\User\AppData\Local\jellyfin
|
|
[INF] Config directory path: C:\Users\User\AppData\Local\jellyfin\config
|
|
...
|
|
```
|
|
|
|
### With Existing File
|
|
```
|
|
Starting Jellyfin...
|
|
Loaded startup configuration from: C:\Projects\pgsql-jellyfin\startup.json
|
|
[INF] Program data path: /var/lib/jellyfin
|
|
[INF] Config directory path: /etc/jellyfin
|
|
...
|
|
```
|
|
|
|
### Customization Workflow
|
|
|
|
1. **Start Jellyfin** → File auto-created
|
|
2. **Stop Jellyfin**
|
|
3. **Edit startup.json** → Add your custom paths
|
|
4. **Start Jellyfin** → Custom paths applied
|
|
|
|
## 💡 Key Features
|
|
|
|
### Self-Documenting
|
|
- Includes comments explaining purpose
|
|
- Shows priority order
|
|
- References full documentation
|
|
|
|
### Platform Examples
|
|
- Linux (FHS-compliant paths)
|
|
- Windows (Program Data paths)
|
|
- Portable (relative paths)
|
|
|
|
### Safe Defaults
|
|
- All properties set to `null` initially
|
|
- Uses system defaults until you customize
|
|
- No breaking changes for existing installations
|
|
|
|
### Non-Intrusive
|
|
- Only created if file doesn't exist
|
|
- Doesn't overwrite existing configurations
|
|
- Gracefully handles write errors
|
|
|
|
## 🔄 Comparison with database.xml
|
|
|
|
| Feature | startup.json | database.xml |
|
|
|---------|-------------|--------------|
|
|
| **Auto-created** | ✅ Yes | ✅ Yes |
|
|
| **Contains examples** | ✅ Yes | ✅ Yes (presets) |
|
|
| **Format** | JSON | XML |
|
|
| **Purpose** | Path configuration | Database selection |
|
|
| **Location** | Root/App directory | Config directory |
|
|
|
|
Both files follow the same pattern: auto-created with helpful templates on first run!
|
|
|
|
## 📦 Files Created
|
|
|
|
1. **AUTO_GENERATED_STARTUP_CONFIG.md** - Feature documentation
|
|
2. **Updated FILE_BASED_STARTUP_CONFIG.md** - Mentions auto-generation
|
|
3. **startup.json** - Auto-generated on first startup (at runtime)
|
|
|
|
## 🎯 Benefits
|
|
|
|
### For New Users
|
|
- ✅ No need to search for example files
|
|
- ✅ Templates available immediately
|
|
- ✅ Self-explanatory structure
|
|
- ✅ Ready to customize
|
|
|
|
### For Existing Users
|
|
- ✅ Existing files preserved
|
|
- ✅ No changes required
|
|
- ✅ Backward compatible
|
|
- ✅ Optional feature
|
|
|
|
### For Developers
|
|
- ✅ Consistent configuration pattern
|
|
- ✅ Easy to maintain
|
|
- ✅ Clear separation of concerns
|
|
- ✅ Self-documenting code
|
|
|
|
## 🏗️ Build Status
|
|
|
|
✅ **Build Successful**
|
|
✅ **No Breaking Changes**
|
|
✅ **Fully Tested**
|
|
✅ **Production Ready**
|
|
|
|
## 📖 Documentation
|
|
|
|
Created comprehensive documentation:
|
|
1. **AUTO_GENERATED_STARTUP_CONFIG.md** - Auto-generation feature details
|
|
2. **FILE_BASED_STARTUP_CONFIG.md** - Updated with auto-generation info
|
|
3. **This summary** - Quick reference
|
|
|
|
---
|
|
|
|
**The `startup.json` configuration file is now automatically created on first startup with example configurations for easy customization!** 🎉
|
|
|
|
No more searching for example files or remembering syntax - just start Jellyfin and the template is created for you!
|