// SPDX-License-Identifier: GPL-3.0-only mod args; use std::fs; use std::env; use std::process::exit; use clap::Parser; use crate::args::Cli; fn main() { let cli = Cli::parse(); let args: Vec = env::args().collect(); let xdg_data_dirs = std::env::var("XDG_DATA_DIRS").unwrap(); let data_dirs = xdg_data_dirs.split(":"); let mut found = false; let home = match env::var("HOME") { Ok(var) => var, Err(_) => exit(1), }; for dirs in data_dirs { if (dirs.starts_with(&home) && cli.skip_home) || (dirs.starts_with(".") && cli.skip_dot) { continue } let files = match fs::read_dir(format!("{}/applications",dirs)) { Ok(file) => file, Err(_) => continue, }; for file in files { let desktop_file = format!("{}", file.as_ref().unwrap().file_name().into_string().unwrap()); if desktop_file.contains(&cli.search) { let path = file.as_ref().unwrap().path(); let out = if cli.show_tilde { format!("{}", path.display().to_string().replace(&home, "~")) } else { path.display().to_string() }; println!("{}", out); found = true; if !cli.all { return } } } } if !found { eprintln!("No {} in ({})", args[1], xdg_data_dirs); exit(1); } }