#!/usr/bin/python3 import os from pathlib import Path class PathManager: @staticmethod def system_data(*relative_paths): xdg_data_dirs = os.getenv('XDG_DATA_DIRS', '/usr/local/share:/usr/share').split(':') for data_dir in xdg_data_dirs: path = Path(data_dir).joinpath(*relative_paths) if path.exists(): return str(path) return str(Path(xdg_data_dirs[0]).joinpath(*relative_paths)) @staticmethod def user_data(*relative_paths): xdg_data_home = Path(os.getenv('XDG_DATA_HOME', Path.home() / '.local/share')) return str(xdg_data_home.joinpath(*relative_paths)) @staticmethod def user_config(*relative_paths): xdg_config_home = Path(os.getenv('XDG_CONFIG_HOME', Path.home() / '.config')) return str(xdg_config_home.joinpath(*relative_paths)) @staticmethod def find_binary(binary_name): paths = os.getenv('PATH', '').split(':') for path in paths: binary_path = Path(path) / binary_name if binary_path.exists(): return str(binary_path) return f'/usr/bin/{binary_name}' # Fallback @staticmethod def get_icon(icon_name): icon_paths = [ PathManager.user_data('icons', icon_name), PathManager.system_data('icons/hicolor/256x256/apps', icon_name), PathManager.system_data('icons', icon_name) ] for path in icon_paths: if Path(path).exists(): return path return icon_paths[-1] # Fallback