aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md15
-rw-r--r--src/config.rs27
2 files changed, 32 insertions, 10 deletions
diff --git a/README.md b/README.md
index 7aa828aa..08700af9 100644
--- a/README.md
+++ b/README.md
@@ -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())?;