summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEllie Huxtable <ellie@elliehuxtable.com>2024-03-05 14:50:42 +0000
committerGitHub <noreply@github.com>2024-03-05 14:50:42 +0000
commit14be7e048eea118f93a624c754d5d1ab05b1831b (patch)
tree8703740d802098f4911326a114763a2faefe9168
parent60a09f9465d046ab8df6d074939efb2cfb522845 (diff)
feat(dotfiles): add enable setting to dotfiles, disable by default (#1829)
-rw-r--r--atuin-client/src/settings.rs5
-rw-r--r--atuin-client/src/settings/dotfiles.rs6
-rw-r--r--atuin/src/command/client/dotfiles/alias.rs6
-rw-r--r--atuin/src/command/client/init.rs32
-rw-r--r--atuin/src/command/client/init/bash.rs14
-rw-r--r--atuin/src/command/client/init/fish.rs6
-rw-r--r--atuin/src/command/client/init/xonsh.rs6
-rw-r--r--atuin/src/command/client/init/zsh.rs6
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[..]);