summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Duerr <contact@christianduerr.com>2020-11-23 21:37:34 +0000
committerGitHub <noreply@github.com>2020-11-24 00:37:34 +0300
commit07cfe8bbba0851ff4989f6aaf082d72130cd0f5b (patch)
treea6b5b40c1b41b1d450bd12957d23283342958984
parentda6f0a505e0d7da181b056c52f42b5a7f0bf29ed (diff)
downloadalacritty-07cfe8bbba0851ff4989f6aaf082d72130cd0f5b.tar.gz
alacritty-07cfe8bbba0851ff4989f6aaf082d72130cd0f5b.zip
Add support for '~/' in config imports
This allows the configuration file imports to start with '~/' and resolve relative to the user's home directory. There is no support for '~user/' or '$HOME/' or any other shell expansion. However since paths relative to the home directory should be sufficient for everything, this provides a very simple solution without any significant drawbacks. Fixes #4157.
-rw-r--r--CHANGELOG.md4
-rw-r--r--Cargo.lock13
-rw-r--r--alacritty.yml9
-rw-r--r--alacritty/Cargo.toml4
-rw-r--r--alacritty/src/config/mod.rs7
5 files changed, 28 insertions, 9 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e655e9f0..a870d9c3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
## 0.7.0-dev
+### Added
+
+- Support for `~/` at the beginning of configuration file imports
+
### Changed
- Nonexistent config imports are ignored instead of raising an error
diff --git a/Cargo.lock b/Cargo.lock
index 1eddd108..9c8c1cf1 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -30,7 +30,7 @@ dependencies = [
"clap",
"copypasta",
"crossfont",
- "dirs",
+ "dirs 3.0.1",
"embed-resource",
"fnv",
"gl_generator",
@@ -596,6 +596,15 @@ dependencies = [
]
[[package]]
+name = "dirs"
+version = "3.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "142995ed02755914747cc6ca76fc7e4583cd18578746716d0508ea6ed558b9ff"
+dependencies = [
+ "dirs-sys",
+]
+
+[[package]]
name = "dirs-sys"
version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2043,7 +2052,7 @@ version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "76971977e6121664ec1b960d1313aacfa75642adc93b9d4d53b247bd4cb1747e"
dependencies = [
- "dirs",
+ "dirs 2.0.2",
"fnv",
"nom",
"phf",
diff --git a/alacritty.yml b/alacritty.yml
index cdad3fe1..3c6d18ec 100644
--- a/alacritty.yml
+++ b/alacritty.yml
@@ -2,9 +2,12 @@
# Import additional configuration files
#
-# These configuration files will be loaded in order, replacing values in files
-# loaded earlier with those loaded later in the chain. The file itself will
-# always be loaded last. If an import path cannot be found it will be skipped.
+# Imports are loaded in order, skipping all missing files, with the importing
+# file being loaded last. If a field is already present in a previous import, it
+# will be replaced.
+#
+# All imports must either be absolute paths starting with `/`, or paths relative
+# to the user's home directory starting with `~/`.
#import:
# - /path/to/alacritty.yml
diff --git a/alacritty/Cargo.toml b/alacritty/Cargo.toml
index 081ea4dc..2c94093d 100644
--- a/alacritty/Cargo.toml
+++ b/alacritty/Cargo.toml
@@ -30,6 +30,7 @@ copypasta = { version = "0.7.0", default-features = false }
libc = "0.2"
unicode-width = "0.1"
bitflags = "1"
+dirs = "2.0.2"
[build-dependencies]
gl_generator = "0.14.0"
@@ -43,9 +44,6 @@ image = { version = "0.23.3", default-features = false, features = ["ico"], opti
[target.'cfg(target_os = "macos")'.dependencies]
objc = "0.2.2"
-[target.'cfg(any(target_os = "macos", windows))'.dependencies]
-dirs = "2.0.2"
-
[target.'cfg(not(any(target_os="windows", target_os="macos")))'.dependencies]
x11-dl = { version = "2", optional = true }
wayland-client = { version = "0.28.0", features = ["dlopen"], optional = true }
diff --git a/alacritty/src/config/mod.rs b/alacritty/src/config/mod.rs
index d24e8519..f9ee3528 100644
--- a/alacritty/src/config/mod.rs
+++ b/alacritty/src/config/mod.rs
@@ -211,7 +211,7 @@ fn load_imports(config: &Value, config_paths: &mut Vec<PathBuf>, recursion_limit
let mut merged = Value::Null;
for import in imports {
- let path = match import {
+ let mut path = match import {
Value::String(path) => PathBuf::from(path),
_ => {
error!(
@@ -222,6 +222,11 @@ fn load_imports(config: &Value, config_paths: &mut Vec<PathBuf>, recursion_limit
},
};
+ // Resolve paths relative to user's home directory.
+ if let (Ok(stripped), Some(home_dir)) = (path.strip_prefix("~/"), dirs::home_dir()) {
+ path = home_dir.join(stripped);
+ }
+
if !path.exists() {
info!(target: LOG_TARGET_CONFIG, "Skipping importing config; not found:");
info!(target: LOG_TARGET_CONFIG, " {:?}", path.display());