File karukan-server-static-path.patch of Package karukan

--- a/karukan-cli/src/bin/server.rs
+++ b/karukan-cli/src/bin/server.rs
@@ -13,6 +13,7 @@ use karukan_engine::kanji::{
 use serde::{Deserialize, Serialize};
 use std::collections::HashMap;
 use std::sync::{Arc, RwLock};
+use std::{env, path::Path};
 use tower_http::{
     cors::{Any, CorsLayer},
     services::ServeDir,
@@ -275,9 +276,24 @@ async fn main() {
     if args.debug {
         app = app.route("/api/tokenize", post(tokenize_handler));
     }
+
+    // Prefer packaged static files, but keep local dev fallback.
+    let static_dir = env::var("KARUKAN_STATIC_DIR")
+        .ok()
+        .filter(|v| !v.is_empty())
+        .or_else(|| {
+            if Path::new("/usr/share/karukan/static").is_dir() {
+                Some("/usr/share/karukan/static".to_string())
+            } else if Path::new("static").is_dir() {
+                Some("static".to_string())
+            } else {
+                None
+            }
+        })
+        .unwrap_or_else(|| "/usr/share/karukan/static".to_string());
 
     let app = app
-        .fallback_service(ServeDir::new("static"))
+        .fallback_service(ServeDir::new(static_dir))
         .layer(DefaultBodyLimit::max(256 * 1024)) // 256 KB
         .layer(cors)
         .with_state(state);
openSUSE Build Service is sponsored by