diff options
author | Ellie Huxtable <ellie@elliehuxtable.com> | 2024-03-05 14:50:42 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-05 14:50:42 +0000 |
commit | 14be7e048eea118f93a624c754d5d1ab05b1831b (patch) | |
tree | 8703740d802098f4911326a114763a2faefe9168 | |
parent | 60a09f9465d046ab8df6d074939efb2cfb522845 (diff) |
feat(dotfiles): add enable setting to dotfiles, disable by default (#1829)
-rw-r--r-- | atuin-client/src/settings.rs | 5 | ||||
-rw-r--r-- | atuin-client/src/settings/dotfiles.rs | 6 | ||||
-rw-r--r-- | atuin/src/command/client/dotfiles/alias.rs | 6 | ||||
-rw-r--r-- | atuin/src/command/client/init.rs | 32 | ||||
-rw-r--r-- | atuin/src/command/client/init/bash.rs | 14 | ||||
-rw-r--r-- | atuin/src/command/client/init/fish.rs | 6 | ||||
-rw-r--r-- | atuin/src/command/client/init/xonsh.rs | 6 | ||||
-rw-r--r-- | atuin/src/command/client/init/zsh.rs | 6 |
8 files changed, 72 insertions, 9 deletions
diff --git a/atuin-client/src/settings.rs b/atuin-client/src/settings.rs index 3b34381c..487e61b7 100644 --- a/atuin-client/src/settings.rs +++ b/atuin-client/src/settings.rs @@ -33,6 +33,8 @@ pub const LATEST_VERSION_FILENAME: &str = "latest_version"; pub const HOST_ID_FILENAME: &str = "host_id"; static EXAMPLE_CONFIG: &str = include_str!("../config.toml"); +mod dotfiles; + #[derive(Clone, Debug, Deserialize, Copy, ValueEnum, PartialEq)] pub enum SearchMode { #[serde(rename = "prefix")] @@ -393,6 +395,9 @@ pub struct Settings { #[serde(default)] pub keys: Keys, + #[serde(default)] + pub dotfiles: dotfiles::Settings, + // This is automatically loaded when settings is created. Do not set in // config! Keep secrets and settings apart. #[serde(skip)] diff --git a/atuin-client/src/settings/dotfiles.rs b/atuin-client/src/settings/dotfiles.rs new file mode 100644 index 00000000..dd852781 --- /dev/null +++ b/atuin-client/src/settings/dotfiles.rs @@ -0,0 +1,6 @@ +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Serialize, Deserialize, Clone, Default)] +pub struct Settings { + pub enabled: bool, +} diff --git a/atuin/src/command/client/dotfiles/alias.rs b/atuin/src/command/client/dotfiles/alias.rs index 5d067d47..60de1f84 100644 --- a/atuin/src/command/client/dotfiles/alias.rs +++ b/atuin/src/command/client/dotfiles/alias.rs @@ -54,6 +54,12 @@ impl Cmd { } pub async fn run(&self, settings: &Settings, store: SqliteStore) -> Result<()> { + if !settings.dotfiles.enabled { + eprintln!("Dotfiles are not enabled. Add\n\n[dotfiles]\nenabled = true\n\nto your configuration file to enable them.\n"); + eprintln!("The default configuration file is located at ~/.config/atuin/config.toml."); + return Ok(()); + } + let encryption_key: [u8; 32] = encryption::load_key(settings) .context("could not load encryption key")? .into(); diff --git a/atuin/src/command/client/init.rs b/atuin/src/command/client/init.rs index ded6e712..bfda75be 100644 --- a/atuin/src/command/client/init.rs +++ b/atuin/src/command/client/init.rs @@ -83,7 +83,27 @@ $env.config = ( } } - pub async fn run(self, settings: &Settings) -> Result<()> { + fn static_init(&self) { + match self.shell { + Shell::Zsh => { + zsh::init_static(self.disable_up_arrow, self.disable_ctrl_r); + } + Shell::Bash => { + bash::init_static(self.disable_up_arrow, self.disable_ctrl_r); + } + Shell::Fish => { + fish::init_static(self.disable_up_arrow, self.disable_ctrl_r); + } + Shell::Nu => { + self.init_nu(); + } + Shell::Xonsh => { + xonsh::init_static(self.disable_up_arrow, self.disable_ctrl_r); + } + }; + } + + async fn dotfiles_init(&self, settings: &Settings) -> Result<()> { let record_store_path = PathBuf::from(settings.record_store_path.as_str()); let sqlite_store = SqliteStore::new(record_store_path, settings.local_timeout).await?; @@ -112,4 +132,14 @@ $env.config = ( Ok(()) } + + pub async fn run(self, settings: &Settings) -> Result<()> { + if settings.dotfiles.enabled { + self.dotfiles_init(settings).await?; + } else { + self.static_init(); + } + + Ok(()) + } } diff --git a/atuin/src/command/client/init/bash.rs b/atuin/src/command/client/init/bash.rs index 40f8adc6..2fd7c195 100644 --- a/atuin/src/command/client/init/bash.rs +++ b/atuin/src/command/client/init/bash.rs @@ -1,13 +1,9 @@ use atuin_dotfiles::store::AliasStore; use eyre::Result; -pub async fn init(store: AliasStore, disable_up_arrow: bool, disable_ctrl_r: bool) -> Result<()> { +pub fn init_static(disable_up_arrow: bool, disable_ctrl_r: bool) { let base = include_str!("../../../shell/atuin.bash"); - let aliases = store.aliases().await?; - - let aliases = atuin_dotfiles::shell::bash::build(&aliases[..]); - let (bind_ctrl_r, bind_up_arrow) = if std::env::var("ATUIN_NOBIND").is_ok() { (false, false) } else { @@ -17,6 +13,14 @@ pub async fn init(store: AliasStore, disable_up_arrow: bool, disable_ctrl_r: boo println!("__atuin_bind_ctrl_r={bind_ctrl_r}"); println!("__atuin_bind_up_arrow={bind_up_arrow}"); println!("{base}"); +} + +pub async fn init(store: AliasStore, disable_up_arrow: bool, disable_ctrl_r: bool) -> Result<()> { + init_static(disable_up_arrow, disable_ctrl_r); + + let aliases = store.aliases().await?; + let aliases = atuin_dotfiles::shell::bash::build(&aliases[..]); + println!("{aliases}"); Ok(()) diff --git a/atuin/src/command/client/init/fish.rs b/atuin/src/command/client/init/fish.rs index 01f5d2bd..83bf0500 100644 --- a/atuin/src/command/client/init/fish.rs +++ b/atuin/src/command/client/init/fish.rs @@ -1,7 +1,7 @@ use atuin_dotfiles::store::AliasStore; use eyre::Result; -pub async fn init(store: AliasStore, disable_up_arrow: bool, disable_ctrl_r: bool) -> Result<()> { +pub fn init_static(disable_up_arrow: bool, disable_ctrl_r: bool) { let base = include_str!("../../../shell/atuin.fish"); println!("{base}"); @@ -32,6 +32,10 @@ bind -M insert \e\[A _atuin_bind_up"; } println!("end"); } +} + +pub async fn init(store: AliasStore, disable_up_arrow: bool, disable_ctrl_r: bool) -> Result<()> { + init_static(disable_up_arrow, disable_ctrl_r); let aliases = store.aliases().await?; let aliases = atuin_dotfiles::shell::fish::build(&aliases[..]); diff --git a/atuin/src/command/client/init/xonsh.rs b/atuin/src/command/client/init/xonsh.rs index ffac7fec..75ab4a1a 100644 --- a/atuin/src/command/client/init/xonsh.rs +++ b/atuin/src/command/client/init/xonsh.rs @@ -1,7 +1,7 @@ use atuin_dotfiles::store::AliasStore; use eyre::Result; -pub async fn init(store: AliasStore, disable_up_arrow: bool, disable_ctrl_r: bool) -> Result<()> { +pub fn init_static(disable_up_arrow: bool, disable_ctrl_r: bool) { let base = include_str!("../../../shell/atuin.xsh"); let (bind_ctrl_r, bind_up_arrow) = if std::env::var("ATUIN_NOBIND").is_ok() { @@ -18,6 +18,10 @@ pub async fn init(store: AliasStore, disable_up_arrow: bool, disable_ctrl_r: boo if bind_up_arrow { "True" } else { "False" } ); println!("{base}"); +} + +pub async fn init(store: AliasStore, disable_up_arrow: bool, disable_ctrl_r: bool) -> Result<()> { + init_static(disable_up_arrow, disable_ctrl_r); let aliases = store.aliases().await?; let aliases = atuin_dotfiles::shell::xonsh::build(&aliases[..]); diff --git a/atuin/src/command/client/init/zsh.rs b/atuin/src/command/client/init/zsh.rs index 9c4dbe43..574047a4 100644 --- a/atuin/src/command/client/init/zsh.rs +++ b/atuin/src/command/client/init/zsh.rs @@ -1,7 +1,7 @@ use atuin_dotfiles::store::AliasStore; use eyre::Result; -pub async fn init(store: AliasStore, disable_up_arrow: bool, disable_ctrl_r: bool) -> Result<()> { +pub fn init_static(disable_up_arrow: bool, disable_ctrl_r: bool) { let base = include_str!("../../../shell/atuin.zsh"); println!("{base}"); @@ -26,6 +26,10 @@ bindkey -M vicmd 'k' atuin-up-search-vicmd"; println!("{BIND_UP_ARROW}"); } } +} + +pub async fn init(store: AliasStore, disable_up_arrow: bool, disable_ctrl_r: bool) -> Result<()> { + init_static(disable_up_arrow, disable_ctrl_r); let aliases = store.aliases().await?; let aliases = atuin_dotfiles::shell::zsh::build(&aliases[..]); |