From 7cc69a4a400b8479238bf982cfaf343bdcad1b46 Mon Sep 17 00:00:00 2001 From: LGUG2Z Date: Sat, 18 Jun 2022 20:40:20 -0700 Subject: [PATCH] feat(config): add ahk exe override env vars This commit introduces two new environment variables to override the exe name that komorebi uses to verify that AutoHotKey is installed before launching and reloading 'komorebi.ahk' configuration files. resolve #147 --- Cargo.lock | 48 ++++++++++++++++++++++---------------------- README.md | 20 ++++++++++++++++++ komorebi/src/main.rs | 26 ++++++++++++++++++++++-- 3 files changed, 68 insertions(+), 26 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 64452ee9..05fa1739 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -84,9 +84,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "clap" -version = "3.2.4" +version = "3.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d20de3739b4fb45a17837824f40aa1769cc7655d7a83e68739a77fe7b30c87a" +checksum = "d53da17d37dba964b9b3ecb5c5a1f193a2762c700e6829201e645b9381c99dc7" dependencies = [ "atty", "bitflags", @@ -102,9 +102,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "3.2.4" +version = "3.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "026baf08b89ffbd332836002ec9378ef0e69648cbfadd68af7cd398ca5bf98f7" +checksum = "c11d40217d16aee8508cc8e5fde8b4ff24639758608e5374e731b53f85749fb9" dependencies = [ "heck", "proc-macro-error", @@ -157,9 +157,9 @@ checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" [[package]] name = "crossbeam-channel" -version = "0.5.4" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aaa7bd5fb665c6864b5f963dd9097905c54125909c7aa94c9e18507cdbe6c53" +checksum = "4c02a4d71819009c192cf4872265391563fd6a84c81ff2c0f2a7026ca4c1d85c" dependencies = [ "cfg-if 1.0.0", "crossbeam-utils", @@ -178,26 +178,26 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.8" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1145cf131a2c6ba0615079ab6a638f7e1973ac9c2634fcbeaaad6114246efe8c" +checksum = "07db9d94cbd326813772c968ccd25999e5f8ae22f4f8d1b11effa37ef6ce281d" dependencies = [ "autocfg", "cfg-if 1.0.0", "crossbeam-utils", - "lazy_static", "memoffset", + "once_cell", "scopeguard", ] [[package]] name = "crossbeam-utils" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf124c720b7686e3c2663cf54062ab0f68a88af2fb6a030e87e30bf721fcb38" +checksum = "8ff1f980957787286a554052d03c7aee98d99cc32e09f6d45f0a814133c87978" dependencies = [ "cfg-if 1.0.0", - "lazy_static", + "once_cell", ] [[package]] @@ -241,9 +241,9 @@ dependencies = [ [[package]] name = "dyn-clone" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21e50f3adc76d6a43f5ed73b698a87d0760ca74617f60f7c3b879003536fdd28" +checksum = "140206b78fb2bc3edbcfc9b5ccbd0b30699cfe8d348b8b31b330e47df5291a5a" [[package]] name = "either" @@ -363,9 +363,9 @@ checksum = "78cc372d058dcf6d5ecd98510e7fbc9e5aec4d21de70f65fea8fecebcd881bd4" [[package]] name = "hashbrown" -version = "0.11.2" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" +checksum = "db0d4cf898abf0081f964436dc980e96670a0f36863e4b83aaacdb65c9d7ccc3" [[package]] name = "heck" @@ -400,9 +400,9 @@ checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" [[package]] name = "indexmap" -version = "1.8.2" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6012d540c5baa3589337a98ce73408de9b5a25ec9fc2c6fd6be8f0d39e0ca5a" +checksum = "6c6392766afd7964e2531940894cffe4bd8d7d17dbc3c1c4857040fd4b33bdb3" dependencies = [ "autocfg", "hashbrown", @@ -858,9 +858,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.18" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1feb54ed693b93a84e14094943b84b7c4eae204c512b7ccb95ab0c66d278ad1" +checksum = "f53dc8cf16a769a6f677e09e7ff2cd4be1ea0f48754aac39520536962011de0d" dependencies = [ "proc-macro2", ] @@ -1121,9 +1121,9 @@ dependencies = [ [[package]] name = "strum_macros" -version = "0.24.1" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9550962e7cf70d9980392878dfaf1dcc3ece024f4cf3bf3c46b978d0bad61d6c" +checksum = "6878079b17446e4d3eba6192bb0a2950d5b14f0ed8424b852310e5a94345d0ef" dependencies = [ "heck", "proc-macro2", @@ -1134,9 +1134,9 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.96" +version = "1.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0748dd251e24453cb8717f0354206b91557e4ec8703673a4b30208f2abaf1ebf" +checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd" dependencies = [ "proc-macro2", "quote", diff --git a/README.md b/README.md index 26913ae7..d1c40ccb 100644 --- a/README.md +++ b/README.md @@ -155,6 +155,26 @@ the `AutoHotKey64.exe` executable for AutoHotKey v2 is in your `Path`. If both ` exist in your home directory, only `komorebi.ahk` will be loaded. An example of an AutoHotKey v2 configuration file for _komorebi_ can be found [here](https://gist.github.com/crosstyan/dafacc0778dabf693ce9236c57b201cd). +#### Using Different AHK Executables + +The preferred way to install AutoHotKey for use with `komorebi` is to install it via `scoop`: + +```powershell +scoop install autohotkey +``` + +If you install AutoHotKey using a different method, the name of the executable file may differ from the name given by +`scoop`, and thus what is expected by default in `komorebi`. + +You may override the executables that `komorebi` looks for to launch and reload `komorebi.ahk` configuration files using +by setting one of the following two environment variables depending on which version of AutoHotKey you wish to use: + +- `$Env:KOMOREBI_AHK_V1_EXE` +- `$Env:KOMOREBI_AHK_V2_EXE` + +Please keep in mind that even when setting a custom executable name using these environment variables, the executables +are still required to be in your `Path`. + ### Common First-Time Tips #### Generating Common Application-Specific Configurations diff --git a/komorebi/src/main.rs b/komorebi/src/main.rs index db30eb79..0664b276 100644 --- a/komorebi/src/main.rs +++ b/komorebi/src/main.rs @@ -118,6 +118,28 @@ lazy_static! { dirs::home_dir().expect("there is no home directory") } }; + static ref AHK_V1_EXE: String = { + let mut ahk_v1: String = String::from("autohotkey.exe"); + + if let Ok(komorebi_ahk_v1_exe) = std::env::var("KOMOREBI_AHK_V1_EXE") { + if which(&komorebi_ahk_v1_exe).is_ok() { + ahk_v1 = komorebi_ahk_v1_exe; + } + } + + ahk_v1 + }; + static ref AHK_V2_EXE: String = { + let mut ahk_v2: String = String::from("AutoHotkey64.exe"); + + if let Ok(komorebi_ahk_v2_exe) = std::env::var("KOMOREBI_AHK_V2_EXE") { + if which(&komorebi_ahk_v2_exe).is_ok() { + ahk_v2 = komorebi_ahk_v2_exe; + } + } + + ahk_v2 + }; } pub static CUSTOM_FFM: AtomicBool = AtomicBool::new(false); @@ -196,7 +218,7 @@ pub fn load_configuration() -> Result<()> { let mut config_v2 = home; config_v2.push("komorebi.ahk2"); - if config_v1.exists() && which("autohotkey.exe").is_ok() { + if config_v1.exists() && which(&*AHK_V1_EXE).is_ok() { tracing::info!( "loading configuration file: {}", config_v1 @@ -208,7 +230,7 @@ pub fn load_configuration() -> Result<()> { Command::new("autohotkey.exe") .arg(config_v1.as_os_str()) .output()?; - } else if config_v2.exists() && which("AutoHotkey64.exe").is_ok() { + } else if config_v2.exists() && which(&*AHK_V2_EXE).is_ok() { tracing::info!( "loading configuration file: {}", config_v2