refactor: apply CLAUDE.md code quality improvements and add packaging

- Add #![forbid(unsafe_code)] to main.rs (issue #3)
- Replace raw ANSI escape codes with owo-colors crate (issue #2)
- Replace manual HOME path construction with dirs::home_dir() (issue #5)
- Ship umutray.service as a static file; service::install() substitutes
  the binary path at install time instead of generating the unit at runtime
- Add packaging/PKGBUILD following Arch Rust package guidelines
- Add CLAUDE.md tracking refactor tasks
- setup.rs: clean up downloaded temp files on abort/back, save launcher
  to config only after successful install, auto-start download when a
  preset has an installer_url
- util.rs: add pick_folder() using zenity/kdialog subprocesses (no rfd)
- config.rs: populate installer_url for all 6 built-in presets with
  official download URLs
- Document the Option<Option<Vec<String>>> gamescope pattern at main.rs:307

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
funman300
2026-04-18 19:28:10 -07:00
parent f2f584febf
commit 9b7e474e80
11 changed files with 233 additions and 57 deletions
+7 -7
View File
@@ -1,5 +1,6 @@
use crate::config::{Config, Launcher};
use anyhow::Result;
use owo_colors::OwoColorize;
use std::os::unix::fs::MetadataExt;
use std::path::Path;
use std::process::{Command, Stdio};
@@ -50,18 +51,17 @@ pub fn run(config: &Config, name: Option<&str>) -> Result<()> {
if !c.pass {
issues += 1;
}
let (sym, col, rst) = if c.pass {
("", "\x1b[1;32m", "\x1b[0m")
if c.pass {
println!(" {} {:24} {}", "".green().bold(), c.label, c.detail);
} else {
("", "\x1b[1;31m", "\x1b[0m")
};
println!(" {col}{sym}{rst} {:24} {}", c.label, c.detail);
println!(" {} {:24} {}", "".red().bold(), c.label, c.detail);
}
}
println!();
if issues == 0 {
println!(" \x1b[1;32mAll checks passed.\x1b[0m");
println!(" {}", "All checks passed.".green().bold());
} else {
println!(" \x1b[1;31m{issues} issue(s) found — see ✗ items above.\x1b[0m");
println!(" {}", format!("{issues} issue(s) found — see ✗ items above.").red().bold());
}
println!();
Ok(())