Fix prod-readiness issues flagged in audit

- Fix XDG config dir logic in config/mod.rs (was double-nesting and had /home/user hardcode)
- Replace /home/user hardcodes in breadbar.rs and hyprland.rs with config::config_dir()
- Fix /home/user hardcode in packages.rs (uses /root fallback for .local/state path)
- Remove eprintln! from GTK callback in packages.rs (no stderr at runtime)
- Fix YAML parse error in branding.desc (missing space after sidebarTextHighlight key)
- Add .gitignore (Rust target/, ISO artifacts, editor/OS junk, secrets)
- Delete state.rs (dead code — never mod'd in main.rs)
- Add brightnessctl, grim, slurp to packages.x86_64 (used by keybinds)
- Rename can-you-begin-a-composed-beacon.md → DESIGN.md

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Breadway 2026-06-13 11:29:53 +08:00
parent c744e45c90
commit 8682698402
9 changed files with 56 additions and 23 deletions

37
.gitignore vendored Normal file
View file

@ -0,0 +1,37 @@
# Rust build artifacts
/target/
**/*.pdb
# Editor / IDE
.vscode/
.idea/
*.swp
*.swo
*~
.direnv/
# OS artifacts
.DS_Store
Thumbs.db
desktop.ini
# Environment / secrets
.env
.env.local
*.env.*
secrets/
*.pem
*.key
*.p12
# archiso build artifacts (these are large and reproducible)
/iso-build/
/iso-out/
*.iso
*.img
# Runtime / logs
*.log
logs/
*.pid
*.sock

View file

@ -15,10 +15,13 @@ pub fn save<T: serde::Serialize>(path: &Path, val: &T) -> Result<(), Box<dyn Err
} }
pub fn config_dir() -> PathBuf { pub fn config_dir() -> PathBuf {
let home = std::env::var("HOME").unwrap_or_else(|_| { // Honour XDG_CONFIG_HOME if set; otherwise fall back to $HOME/.config.
std::env::var("XDG_CONFIG_HOME") if let Ok(xdg) = std::env::var("XDG_CONFIG_HOME") {
.map(|p| PathBuf::from(p).parent().unwrap_or(Path::new("/")).to_string_lossy().to_string()) let p = PathBuf::from(xdg);
.unwrap_or_else(|_| "/home/user".to_string()) if p.is_absolute() {
}); return p;
}
}
let home = std::env::var("HOME").unwrap_or_else(|_| "/root".to_string());
PathBuf::from(home).join(".config") PathBuf::from(home).join(".config")
} }

View file

@ -1,11 +0,0 @@
pub struct AppState {
pub current_view: String,
}
impl AppState {
pub fn new() -> Self {
Self {
current_view: "snapshots".to_string(),
}
}
}

View file

@ -3,10 +3,10 @@ use gtk4::{Box as GBox, Button, Label, Orientation, ScrolledWindow, TextView};
use std::path::PathBuf; use std::path::PathBuf;
fn css_path() -> PathBuf { fn css_path() -> PathBuf {
let home = std::env::var("HOME").unwrap_or_else(|_| "/home/user".to_string()); crate::config::config_dir().join("breadbar/style.css")
PathBuf::from(home).join(".config/breadbar/style.css")
} }
pub fn build() -> GBox { pub fn build() -> GBox {
let path = css_path(); let path = css_path();
let existing_css = std::fs::read_to_string(&path).unwrap_or_default(); let existing_css = std::fs::read_to_string(&path).unwrap_or_default();

View file

@ -23,8 +23,7 @@ fn get_monitors() -> Vec<String> {
} }
fn hypr_path(name: &str) -> std::path::PathBuf { fn hypr_path(name: &str) -> std::path::PathBuf {
let home = std::env::var("HOME").unwrap_or_else(|_| "/home/user".to_string()); crate::config::config_dir().join("hypr").join(name)
std::path::PathBuf::from(home).join(".config/hypr").join(name)
} }
pub fn build() -> GBox { pub fn build() -> GBox {

View file

@ -8,7 +8,7 @@ use std::io::{BufRead, BufReader};
use std::process::{Command, Stdio}; use std::process::{Command, Stdio};
fn read_installed() -> HashMap<String, String> { fn read_installed() -> HashMap<String, String> {
let home = std::env::var("HOME").unwrap_or_else(|_| "/home/user".to_string()); let home = std::env::var("HOME").unwrap_or_else(|_| "/root".to_string());
let path = std::path::Path::new(&home) let path = std::path::Path::new(&home)
.join(".local/state/bakery/installed.json"); .join(".local/state/bakery/installed.json");
@ -132,7 +132,7 @@ pub fn build() -> GBox {
Ok(mut child) => { Ok(mut child) => {
std::thread::spawn(move || { let _ = child.wait(); }); std::thread::spawn(move || { let _ = child.wait(); });
} }
Err(e) => eprintln!("bakery update failed: {e}"), Err(_) => {} // bakery not found; button is a no-op
} }
}); });

View file

@ -26,4 +26,4 @@ style:
sidebarBackground: "#3b4252" sidebarBackground: "#3b4252"
sidebarText: "#eceff4" sidebarText: "#eceff4"
sidebarTextSelect: "#5e81ac" sidebarTextSelect: "#5e81ac"
sidebarTextHighlight:"#eceff4" sidebarTextHighlight: "#eceff4"

View file

@ -69,6 +69,11 @@ calamares-qt6
# Bread ecosystem — sourced from [breadway] repo # Bread ecosystem — sourced from [breadway] repo
bakery bakery
# Input / screen utilities
brightnessctl
grim
slurp
# Utilities # Utilities
sudo sudo
git git