From 598f8dc146e444028d9496221c91beb604f418a4 Mon Sep 17 00:00:00 2001 From: OneNoted Date: Thu, 19 Feb 2026 21:00:10 +0100 Subject: [PATCH 1/2] feat: add separate instances_dir config option --- src/data/app_config.rs | 7 +++++++ src/data/config.rs | 19 +++++++++++++++++-- src/main.rs | 2 +- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/data/app_config.rs b/src/data/app_config.rs index ddca2c5..827cebf 100644 --- a/src/data/app_config.rs +++ b/src/data/app_config.rs @@ -11,6 +11,8 @@ pub struct AppConfig { pub sort_ascending: bool, #[serde(default, skip_serializing_if = "Option::is_none")] pub data_dir: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub instances_dir: Option, } fn default_true() -> bool { @@ -27,6 +29,7 @@ impl Default for AppConfig { default_sort: default_sort(), sort_ascending: true, data_dir: None, + instances_dir: None, } } } @@ -72,6 +75,10 @@ impl AppConfig { self.data_dir.as_ref().map(|p| expand_tilde(p)) } + pub fn resolved_instances_dir(&self) -> Option { + self.instances_dir.as_ref().map(|p| expand_tilde(p)) + } + pub fn default_sort_mode(&self) -> SortMode { match self.default_sort.as_str() { "Name" => SortMode::Name, diff --git a/src/data/config.rs b/src/data/config.rs index a6951e0..dfc2477 100644 --- a/src/data/config.rs +++ b/src/data/config.rs @@ -5,12 +5,22 @@ use std::path::{Path, PathBuf}; pub struct PrismConfig { pub data_dir: PathBuf, + instances_dir_override: Option, #[allow(dead_code)] pub selected_instance: Option, } impl PrismConfig { - pub fn load(data_dir: &Path) -> Result { + pub fn load(data_dir: &Path, instances_dir_override: Option) -> Result { + if let Some(ref dir) = instances_dir_override + && !dir.exists() + { + return Err(PrismError::Config(format!( + "Configured instances_dir does not exist: {}", + dir.display() + ))); + } + let config_path = data_dir.join("prismlauncher.cfg"); let mut config = Ini::new(); @@ -25,12 +35,17 @@ impl PrismConfig { Ok(Self { data_dir: data_dir.to_path_buf(), + instances_dir_override, selected_instance, }) } pub fn instances_dir(&self) -> PathBuf { - self.data_dir.join("instances") + if let Some(ref dir) = self.instances_dir_override { + dir.clone() + } else { + self.data_dir.join("instances") + } } pub fn accounts_path(&self) -> PathBuf { diff --git a/src/main.rs b/src/main.rs index a9bf142..4c50e20 100644 --- a/src/main.rs +++ b/src/main.rs @@ -21,7 +21,7 @@ async fn main() -> Result<()> { let app_config = AppConfig::load(); let data_dir = find_prism_data_dir(app_config.resolved_data_dir())?; - let config = PrismConfig::load(&data_dir)?; + let config = PrismConfig::load(&data_dir, app_config.resolved_instances_dir())?; let mut app = App::new(config, app_config)?; let mut terminal = Terminal::new()?; let mut events = EventStream::new(Duration::from_millis(250)); From 6ef7df49e6582ec0e90a031b2d2adc66a861cab1 Mon Sep 17 00:00:00 2001 From: OneNoted Date: Thu, 19 Feb 2026 21:02:40 +0100 Subject: [PATCH 2/2] docs: document instances_dir config option in README --- README.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e51bfb7..9edf487 100644 --- a/README.md +++ b/README.md @@ -127,10 +127,14 @@ prism-tui stores its settings in a TOML config file: ```toml default_sort = "Last Played" sort_ascending = true -data_dir = "~/Games/PrismLauncher" # optional, overrides auto-detection +data_dir = "~/Games/PrismLauncher" # optional, overrides auto-detection +instances_dir = "/mnt/ssd/mc-instances" # optional, overrides instances path ``` -Sort and sort-direction preferences are saved automatically. The `data_dir` option supports `~` tilde expansion. +Sort and sort-direction preferences are saved automatically. Both `data_dir` and `instances_dir` support `~` tilde expansion. + +- `data_dir` overrides the root PrismLauncher directory (affects accounts, logs, launcher config, and instances). +- `instances_dir` overrides only the instances path, useful when instances live on a separate drive or non-standard location. When unset, defaults to `/instances`. ## Architecture