aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2024-01-18 11:02:15 +0400
committerIvan Molodetskikh <yalterz@gmail.com>2024-01-18 11:13:36 +0400
commit0f85c7954888b436359af1f76e3eb800817c085e (patch)
treec09a0b6ea50fb867889dd9c5a6f616003bea126b /src
parent6beef26662e4aab28bc7928ad5f3e2878a2199bd (diff)
downloadniri-0f85c7954888b436359af1f76e3eb800817c085e.tar.gz
niri-0f85c7954888b436359af1f76e3eb800817c085e.tar.bz2
niri-0f85c7954888b436359af1f76e3eb800817c085e.zip
Watch config path even if it didn't exist at startup
Diffstat (limited to 'src')
-rw-r--r--src/main.rs37
-rw-r--r--src/niri.rs4
2 files changed, 31 insertions, 10 deletions
diff --git a/src/main.rs b/src/main.rs
index b4de4656..8a8096b6 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -28,6 +28,7 @@ use std::process::Command;
use std::{env, mem};
use clap::{Parser, Subcommand};
+use directories::ProjectDirs;
#[cfg(not(feature = "xdp-gnome-screencast"))]
use dummy_pw_utils as pw_utils;
use git_version::git_version;
@@ -132,7 +133,10 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
if let Some(subcommand) = cli.subcommand {
match subcommand {
Sub::Validate { config } => {
- Config::load(config)?;
+ let path = config
+ .or_else(default_config_path)
+ .expect("error getting config path");
+ Config::load(&path)?;
info!("config is valid");
return Ok(());
}
@@ -151,13 +155,19 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
);
// Load the config.
- let (mut config, path) = match Config::load(cli.config) {
- Ok((config, path)) => (config, Some(path)),
- Err(err) => {
- warn!("{err:?}");
- (Config::default(), None)
- }
- };
+ let path = cli.config.or_else(default_config_path);
+
+ let mut config = path
+ .as_deref()
+ .and_then(|path| match Config::load(path) {
+ Ok(config) => Some(config),
+ Err(err) => {
+ warn!("{err:?}");
+ None
+ }
+ })
+ .unwrap_or_default();
+
animation::ANIMATION_SLOWDOWN.store(config.debug.animation_slowdown, Ordering::Relaxed);
let spawn_at_startup = mem::take(&mut config.spawn_at_startup);
@@ -264,3 +274,14 @@ fn import_env_to_systemd() {
}
}
}
+
+fn default_config_path() -> Option<PathBuf> {
+ let Some(dirs) = ProjectDirs::from("", "", "niri") else {
+ warn!("error retrieving home directory");
+ return None;
+ };
+
+ let mut path = dirs.config_dir().to_owned();
+ path.push("config.kdl");
+ Some(path)
+}
diff --git a/src/niri.rs b/src/niri.rs
index d0a7490f..e0762ae7 100644
--- a/src/niri.rs
+++ b/src/niri.rs
@@ -536,8 +536,8 @@ impl State {
pub fn reload_config(&mut self, path: PathBuf) {
let _span = tracy_client::span!("State::reload_config");
- let config = match Config::load(Some(path)) {
- Ok((config, _)) => config,
+ let config = match Config::load(&path) {
+ Ok(config) => config,
Err(err) => {
warn!("{:?}", err.context("error loading config"));
return;