diff options
-rw-r--r-- | README.md | 15 | ||||
-rw-r--r-- | src/config.rs | 27 |
2 files changed, 32 insertions, 10 deletions
@@ -138,9 +138,18 @@ cp Alacritty.desktop ~/.local/share/applications ### Configuration Although it's possible the default configuration would work on your system, -you'll probably end up wanting to customize it anyhow. There is an -`alacritty.yml` at the git repository root. Copy this to either -`$HOME/.alacritty.yml` or `$XDG_CONFIG_HOME/alacritty.yml` and run Alacritty. +you'll probably end up wanting to customize it anyhow. There is a default +`alacritty.yml` at the git repository root. Alacritty looks for the configuration +file as the following paths: + +1. `$XDG_CONFIG_HOME/alacritty/alacritty.yml` +2. `$XDG_CONFIG_HOME/alacritty.yml` +3. `$HOME/.config/alacritty/alacritty.yml` +4. `$HOME/.alacritty.yml` + +If neither of these paths are found then `$XDG_CONFIG_HOME/alacritty/alacritty.yml` +is created once alacritty is first run. On most systems this often defaults +to `$HOME/.config/alacritty/alacritty.yml`. Many configuration options will take effect immediately upon saving changes to the config file. The only exception is the `font` and `dpi` section which diff --git a/src/config.rs b/src/config.rs index 4511b227..e9cd505a 100644 --- a/src/config.rs +++ b/src/config.rs @@ -811,27 +811,40 @@ impl Config { /// /// The config file is loaded from the first file it finds in this list of paths /// - /// 1. `$HOME/.config/alacritty.yml` - /// 2. `$HOME/.alacritty.yml` + /// 1. $XDG_CONFIG_HOME/alacritty/alacritty.yml + /// 2. $XDG_CONFIG_HOME/alacritty.yml + /// 3. $HOME/.config/alacritty/alacritty.yml + /// 4. $HOME/.alacritty.yml pub fn load() -> Result<Config> { let home = env::var("HOME")?; // Try using XDG location by default - let path = ::xdg::BaseDirectories::new() + let path = ::xdg::BaseDirectories::with_prefix("alacritty") .ok() .and_then(|xdg| xdg.find_config_file("alacritty.yml")) + .or_else(|| { + ::xdg::BaseDirectories::new().ok().and_then(|fallback| { + fallback.find_config_file("alacritty.yml") + }) + }) + .or_else(|| { + // Fallback path: $HOME/.config/alacritty/alacritty.yml + let fallback = PathBuf::from(&home).join(".config/alacritty/alacritty.yml"); + match fallback.exists() { + true => Some(fallback), + false => None + } + }) .unwrap_or_else(|| { // Fallback path: $HOME/.alacritty.yml - let mut alt_path = PathBuf::from(&home); - alt_path.push(".alacritty.yml"); - alt_path + PathBuf::from(&home).join(".alacritty.yml") }); Config::load_from(path) } pub fn write_defaults() -> io::Result<PathBuf> { - let path = ::xdg::BaseDirectories::new() + let path = ::xdg::BaseDirectories::with_prefix("alacritty") .map_err(|err| io::Error::new(io::ErrorKind::NotFound, ::std::error::Error::description(&err))) .and_then(|p| p.place_config_file("alacritty.yml"))?; File::create(&path)?.write_all(DEFAULT_ALACRITTY_CONFIG.as_bytes())?; |