Expand description
Cross-platform configuration path discovery following XDG and platform conventions.
This crate provides a platform-agnostic way to discover configuration directories following the conventions of each operating system:
- Unix/Linux: XDG Base Directory Specification
- macOS CLI: XDG (same as Unix)
- macOS GUI: Application Support directories
- Windows: Known Folder IDs (
AppData,ProgramData)
§Quick Start
use cfgmatic_paths::PathsBuilder;
// Create a path finder for your application
let finder = PathsBuilder::new("myapp").build();
// Get user config directories
let user_dirs = finder.user_dirs();
println!("User config dirs: {:?}", user_dirs);
// Ensure the primary user config directory exists
if let Ok(config_dir) = finder.ensure_user_config_dir() {
println!("Config dir: {}", config_dir.display());
}§Configuration Tiers
Configuration directories are organized into three tiers:
-
User (
ConfigTier::User): User-specific configs in home directory. Highest priority, typically writable. -
Local (
ConfigTier::Local): Machine-specific configs. Medium priority, may be writable. -
System (
ConfigTier::System): System-wide configs. Lowest priority, typically read-only.
§Platform Details
§Unix/Linux (XDG)
Uses the XDG Base Directory Specification:
- User:
$XDG_CONFIG_HOME/<app>/(default:~/.config/<app>/) - Legacy:
~/.<app>rc(optional, enabled by default) - System:
$XDG_CONFIG_DIRS/<app>/(default:/etc/xdg/<app>/)
§macOS
§CLI Applications
Uses XDG (same as Unix/Linux).
§GUI Applications (with macos-gui feature)
Uses macOS conventions:
- User:
~/Library/Application Support/<bundle-id>/ - System:
/Library/Application Support/<bundle-id>/
§Windows
Uses Windows Known Folder IDs:
- User Roaming:
%APPDATA%\<Company>\<App>\ - User Local:
%LOCALAPPDATA%\<Company>\<App>\ - System:
%PROGRAMDATA%\<Company>\<App>\
§Testing
The crate provides abstractions for testing:
These allow testing without modifying the actual environment or filesystem.
Modules§
- finders
- Platform-specific directory finder implementations.
Structs§
- Config
Candidate - Information about a configuration path candidate.
- Config
Discovery - Result of a configuration discovery operation.
- Config
File Rule - Rule for finding a single configuration file.
- Config
Rule Set - Set of configuration file rules.
- Directory
Info - Information about a configuration directory.
- Discovery
Options - Options for configuration file discovery.
- Fragment
Rule - Rule for configuration fragment directories (conf.d style).
- Path
Finder - Path finder for discovering configuration directories.
- Paths
Builder - Builder for creating platform-specific path finders.
- Rule
Based Discovery - Result of rule-based configuration discovery.
- Rule
Match Result - Result of searching for files by a single rule.
- StdEnv
- Standard environment using
std::env. - StdFs
- Standard filesystem using
std::fs. - Tier
Iterator - Iterator over configuration tiers in priority order.
Enums§
- AppType
- Type of application determines directory conventions.
- Config
Tier - Configuration tier represents the priority level of a configuration source.
- File
Pattern - Pattern for matching configuration files.
- Path
Status - Status of a configuration path.
- Source
Type - Type of configuration source.
- Tier
Search Mode - How to search tiers for configuration files.
Traits§
- Directory
Finder - Trait for finding configuration directories on a specific platform.
- Env
- Abstraction over environment variables for testing.
- Fs
- Abstraction over filesystem operations for testing.
Functions§
- config_
file_ path - Get the preferred configuration file path.
- config_
path - Get the preferred configuration path (without checking existence).
- discover_
config - Discover configuration with full diagnostics.
- ensure_
config_ dir - Find or create the user configuration directory.
- find_
existing_ dir - Find the first existing configuration directory.
- get_
all_ dirs - Get all configuration directories with their metadata.