oxwm

https://git.tonybtw.com/oxwm.git git://git.tonybtw.com/oxwm.git

updated rebuild function to be smart about existing file.

Commit
15bb7a7cf0961a18f51a87f9594b4b9c36c7ae95
Parent
4001329
Author
tonybtw <tonybtw@tonybtw.com>
Date
2025-10-11 04:29:10

Diff

diff --git a/src/bin/main.rs b/src/bin/main.rs
index 296f74f..ea23340 100644
--- a/src/bin/main.rs
+++ b/src/bin/main.rs
@@ -32,7 +32,6 @@ fn main() -> Result<()> {
         let err = Command::new(&cache_binary).args(&args[1..]).exec();
         anyhow::bail!("Failed to exec user binary: {}", err);
     } else {
-        // No user config - use built-in defaults
         eprintln!("╔════════════════════════════════════════╗");
         eprintln!("║  OXWM: Running with default config    ║");
         eprintln!("╚════════════════════════════════════════╝");
@@ -41,6 +40,7 @@ fn main() -> Result<()> {
         eprintln!();
 
         let config = oxwm::Config::default();
+
         let mut wm = oxwm::window_manager::WindowManager::new(config)?;
         let should_restart = wm.run()?;
 
@@ -198,7 +198,16 @@ fn recompile_config() -> Result<()> {
     let dest = get_cache_binary_path();
 
     std::fs::create_dir_all(dest.parent().unwrap())?;
-    std::fs::copy(&source, &dest)?;
+
+    match std::fs::copy(&source, &dest) {
+        Ok(_) => {}
+        Err(e) if e.raw_os_error() == Some(26) => {
+            let temp_dest = dest.with_extension("new");
+            std::fs::copy(&source, &temp_dest)?;
+            std::fs::rename(&temp_dest, &dest)?;
+        }
+        Err(e) => return Err(e.into()),
+    }
 
     println!("✓ Compiled successfully");
 
diff --git a/src/main.rs b/src/main.rs
deleted file mode 100644
index 2e3a92e..0000000
--- a/src/main.rs
+++ /dev/null
@@ -1,23 +0,0 @@
-use anyhow::Result;
-mod bar;
-mod config;
-mod keyboard;
-mod layout;
-mod window_manager;
-
-fn main() -> Result<()> {
-    let args: Vec<String> = std::env::args().collect();
-
-    let mut window_manager = window_manager::WindowManager::new()?;
-    let should_restart = window_manager.run()?;
-
-    drop(window_manager);
-
-    if should_restart {
-        use std::os::unix::process::CommandExt;
-        let err = std::process::Command::new(&args[0]).args(&args[1..]).exec();
-        eprintln!("Failed to restart: {}", err);
-    }
-
-    Ok(())
-}