From 5555c3c787c346723715939a219d3685701d03c5 Mon Sep 17 00:00:00 2001 From: Kenny Levinsen Date: Tue, 3 Sep 2019 17:18:07 +0200 Subject: [PATCH] Use XDG vars to find desktop files --- README.md | 1 + src/desktop.rs | 22 ++++++++++++---------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index faa1d05..b7ac3c6 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,7 @@ Configuration currently happen through environment variables: - WLDASH_APP_OPENER: The command used to open normal applications. For sway, the recommended value is "swaymsg exec". - WLDASH_TERM_OPENER: The command used to open terminal applications. - WLDASH_URL_OPENER: The command used to open a URL. +- XDG_DATA_DIRS and XDG_DATA_HOME: Used to find the many `applications` folders that contain `desktop` files. ## Features diff --git a/src/desktop.rs b/src/desktop.rs index 641435a..10b0bc4 100644 --- a/src/desktop.rs +++ b/src/desktop.rs @@ -73,17 +73,19 @@ impl PartialEq for Desktop { pub fn load_desktop_files() -> Vec { let home = env::var_os("HOME").unwrap().into_string().unwrap(); - let paths = [ - "/usr/share/applications".to_string(), - "/usr/local/share/applications".to_string(), - "/var/lib/flatpak/exports/share/applications".to_string(), - format!("{}/.local/share/applications", home).to_string(), - format!("{}/.local/share/flatpak/exports/share/applications", home).to_string(), - ]; - paths - .into_iter() - .map(|p| Desktop::parse_dir(&p)) + let xdg_data_home = match env::var_os("XDG_DATA_HOME") { + Some(s) => s.into_string().unwrap(), + None => format!("{}/.local/share", home).to_string(), + }; + let xdg_data_dirs = match env::var_os("XDG_DATA_DIRS") { + Some(s) => s.into_string().unwrap(), + None => "/usr/local/share:/usr/share".to_string(), + }; + + std::iter::once(xdg_data_home.as_str()) + .chain(xdg_data_dirs.split(":")) + .map(|p| Desktop::parse_dir(&format!("{}/applications", p))) .filter_map(Result::ok) .flatten() .filter(|d| {