aboutsummaryrefslogtreecommitdiffstats
path: root/crates/turtle/src/command
diff options
context:
space:
mode:
authorBenedikt Peetz <benedikt.peetz@b-peetz.de>2026-06-11 00:54:30 +0200
committerBenedikt Peetz <benedikt.peetz@b-peetz.de>2026-06-11 00:54:30 +0200
commit5c39e7cf284a1f6e9a1657f2deb44e359fc47eb8 (patch)
treec64baa8d5866c8e339eaf660dd3f94f30a3f7d8a /crates/turtle/src/command
parentchore: Somewhat simplify sync code (diff)
downloadatuin-5c39e7cf284a1f6e9a1657f2deb44e359fc47eb8.zip
chore: Move everything into one big crate
That helps remove duplicated code and rustc/cargo will now also show dead code correctly.
Diffstat (limited to '')
l---------crates/turtle/src/command/CONTRIBUTORS (renamed from crates/atuin/src/command/CONTRIBUTORS)0
-rw-r--r--crates/turtle/src/command/client.rs (renamed from crates/atuin/src/command/client.rs)9
-rw-r--r--crates/turtle/src/command/client/account.rs (renamed from crates/atuin/src/command/client/account.rs)4
-rw-r--r--crates/turtle/src/command/client/account/change_password.rs (renamed from crates/atuin/src/command/client/account/change_password.rs)2
-rw-r--r--crates/turtle/src/command/client/account/delete.rs (renamed from crates/atuin/src/command/client/account/delete.rs)2
-rw-r--r--crates/turtle/src/command/client/account/login.rs (renamed from crates/atuin/src/command/client/account/login.rs)4
-rw-r--r--crates/turtle/src/command/client/account/logout.rs (renamed from crates/atuin/src/command/client/account/logout.rs)2
-rw-r--r--crates/turtle/src/command/client/account/register.rs (renamed from crates/atuin/src/command/client/account/register.rs)6
-rw-r--r--crates/turtle/src/command/client/config.rs (renamed from crates/atuin/src/command/client/config.rs)2
-rw-r--r--crates/turtle/src/command/client/daemon.rs (renamed from crates/atuin/src/command/client/daemon.rs)27
-rw-r--r--crates/turtle/src/command/client/default_config.rs4
-rw-r--r--crates/turtle/src/command/client/doctor.rs (renamed from crates/atuin/src/command/client/doctor.rs)10
-rw-r--r--crates/turtle/src/command/client/history.rs (renamed from crates/atuin/src/command/client/history.rs)21
-rw-r--r--crates/turtle/src/command/client/import.rs (renamed from crates/atuin/src/command/client/import.rs)2
-rw-r--r--crates/turtle/src/command/client/info.rs (renamed from crates/atuin/src/command/client/info.rs)4
-rw-r--r--crates/turtle/src/command/client/init.rs (renamed from crates/atuin/src/command/client/init.rs)2
-rw-r--r--crates/turtle/src/command/client/init/bash.rs (renamed from crates/atuin/src/command/client/init/bash.rs)2
-rw-r--r--crates/turtle/src/command/client/init/fish.rs (renamed from crates/atuin/src/command/client/init/fish.rs)2
-rw-r--r--crates/turtle/src/command/client/init/powershell.rs (renamed from crates/atuin/src/command/client/init/powershell.rs)2
-rw-r--r--crates/turtle/src/command/client/init/xonsh.rs (renamed from crates/atuin/src/command/client/init/xonsh.rs)2
-rw-r--r--crates/turtle/src/command/client/init/zsh.rs (renamed from crates/atuin/src/command/client/init/zsh.rs)2
-rw-r--r--crates/turtle/src/command/client/search.rs (renamed from crates/atuin/src/command/client/search.rs)4
-rw-r--r--crates/turtle/src/command/client/search/cursor.rs (renamed from crates/atuin/src/command/client/search/cursor.rs)2
-rw-r--r--crates/turtle/src/command/client/search/duration.rs (renamed from crates/atuin/src/command/client/search/duration.rs)0
-rw-r--r--crates/turtle/src/command/client/search/engines.rs (renamed from crates/atuin/src/command/client/search/engines.rs)2
-rw-r--r--crates/turtle/src/command/client/search/engines/daemon.rs (renamed from crates/atuin/src/command/client/search/engines/daemon.rs)13
-rw-r--r--crates/turtle/src/command/client/search/engines/db.rs (renamed from crates/atuin/src/command/client/search/engines/db.rs)2
-rw-r--r--crates/turtle/src/command/client/search/engines/skim.rs (renamed from crates/atuin/src/command/client/search/engines/skim.rs)2
-rw-r--r--crates/turtle/src/command/client/search/history_list.rs (renamed from crates/atuin/src/command/client/search/history_list.rs)4
-rw-r--r--crates/turtle/src/command/client/search/inspector.rs (renamed from crates/atuin/src/command/client/search/inspector.rs)4
-rw-r--r--crates/turtle/src/command/client/search/interactive.rs (renamed from crates/atuin/src/command/client/search/interactive.rs)82
-rw-r--r--crates/turtle/src/command/client/search/keybindings/actions.rs (renamed from crates/atuin/src/command/client/search/keybindings/actions.rs)0
-rw-r--r--crates/turtle/src/command/client/search/keybindings/conditions.rs (renamed from crates/atuin/src/command/client/search/keybindings/conditions.rs)0
-rw-r--r--crates/turtle/src/command/client/search/keybindings/defaults.rs (renamed from crates/atuin/src/command/client/search/keybindings/defaults.rs)28
-rw-r--r--crates/turtle/src/command/client/search/keybindings/key.rs (renamed from crates/atuin/src/command/client/search/keybindings/key.rs)0
-rw-r--r--crates/turtle/src/command/client/search/keybindings/keymap.rs (renamed from crates/atuin/src/command/client/search/keybindings/keymap.rs)0
-rw-r--r--crates/turtle/src/command/client/search/keybindings/mod.rs (renamed from crates/atuin/src/command/client/search/keybindings/mod.rs)0
-rw-r--r--crates/turtle/src/command/client/server.rs61
-rw-r--r--crates/turtle/src/command/client/setup.rs (renamed from crates/atuin/src/command/client/setup.rs)2
-rw-r--r--crates/turtle/src/command/client/stats.rs (renamed from crates/atuin/src/command/client/stats.rs)4
-rw-r--r--crates/turtle/src/command/client/store.rs (renamed from crates/atuin/src/command/client/store.rs)2
-rw-r--r--crates/turtle/src/command/client/store/pull.rs (renamed from crates/atuin/src/command/client/store/pull.rs)2
-rw-r--r--crates/turtle/src/command/client/store/purge.rs (renamed from crates/atuin/src/command/client/store/purge.rs)2
-rw-r--r--crates/turtle/src/command/client/store/push.rs (renamed from crates/atuin/src/command/client/store/push.rs)4
-rw-r--r--crates/turtle/src/command/client/store/rebuild.rs (renamed from crates/atuin/src/command/client/store/rebuild.rs)4
-rw-r--r--crates/turtle/src/command/client/store/rekey.rs (renamed from crates/atuin/src/command/client/store/rekey.rs)2
-rw-r--r--crates/turtle/src/command/client/store/verify.rs (renamed from crates/atuin/src/command/client/store/verify.rs)2
-rw-r--r--crates/turtle/src/command/client/sync.rs (renamed from crates/atuin/src/command/client/sync.rs)4
-rw-r--r--crates/turtle/src/command/client/sync/status.rs (renamed from crates/atuin/src/command/client/sync/status.rs)2
-rw-r--r--crates/turtle/src/command/client/wrapped.rs (renamed from crates/atuin/src/command/client/wrapped.rs)12
-rw-r--r--crates/turtle/src/command/contributors.rs (renamed from crates/atuin/src/command/contributors.rs)0
-rw-r--r--crates/turtle/src/command/external.rs (renamed from crates/atuin/src/command/external.rs)2
-rw-r--r--crates/turtle/src/command/gen_completions.rs (renamed from crates/atuin/src/command/gen_completions.rs)0
-rw-r--r--crates/turtle/src/command/mod.rs (renamed from crates/atuin/src/command/mod.rs)26
54 files changed, 189 insertions, 196 deletions
diff --git a/crates/atuin/src/command/CONTRIBUTORS b/crates/turtle/src/command/CONTRIBUTORS
index 1ca4115a..1ca4115a 120000
--- a/crates/atuin/src/command/CONTRIBUTORS
+++ b/crates/turtle/src/command/CONTRIBUTORS
diff --git a/crates/atuin/src/command/client.rs b/crates/turtle/src/command/client.rs
index 6c1bac29..20d85303 100644
--- a/crates/atuin/src/command/client.rs
+++ b/crates/turtle/src/command/client.rs
@@ -4,7 +4,7 @@ use std::path::{Path, PathBuf};
use clap::Subcommand;
use eyre::{Result, WrapErr};
-use atuin_client::{
+use crate::atuin_client::{
database::Sqlite, record::sqlite_store::SqliteStore, settings::Settings, theme,
};
use tracing_appender::rolling::{RollingFileAppender, Rotation};
@@ -57,6 +57,7 @@ mod import;
mod info;
mod init;
mod search;
+mod server;
mod setup;
mod stats;
mod store;
@@ -87,6 +88,10 @@ pub enum Cmd {
#[command(flatten)]
Sync(sync::Cmd),
+ /// Manage the atuin server
+ #[command(subcommand)]
+ Server(server::Cmd),
+
/// Manage your sync account
#[cfg(feature = "sync")]
Account(account::Cmd),
@@ -341,6 +346,8 @@ impl Cmd {
Self::Store(store) => store.run(&settings, &db, sqlite_store).await,
+ Self::Server(server) => server.run().await,
+
Self::Info => {
info::run(&settings);
Ok(())
diff --git a/crates/atuin/src/command/client/account.rs b/crates/turtle/src/command/client/account.rs
index fc1c9343..898f1ac4 100644
--- a/crates/atuin/src/command/client/account.rs
+++ b/crates/turtle/src/command/client/account.rs
@@ -1,8 +1,8 @@
use clap::{Args, Subcommand};
use eyre::Result;
-use atuin_client::record::sqlite_store::SqliteStore;
-use atuin_client::settings::Settings;
+use crate::atuin_client::record::sqlite_store::SqliteStore;
+use crate::atuin_client::settings::Settings;
pub mod change_password;
pub mod delete;
diff --git a/crates/atuin/src/command/client/account/change_password.rs b/crates/turtle/src/command/client/account/change_password.rs
index 234d4dc0..6112b0df 100644
--- a/crates/atuin/src/command/client/account/change_password.rs
+++ b/crates/turtle/src/command/client/account/change_password.rs
@@ -1,7 +1,7 @@
use clap::Parser;
use eyre::{Result, bail};
-use atuin_client::{
+use crate::atuin_client::{
auth::{self, MutateResponse},
settings::Settings,
};
diff --git a/crates/atuin/src/command/client/account/delete.rs b/crates/turtle/src/command/client/account/delete.rs
index a5e7f0dd..bcb40bc3 100644
--- a/crates/atuin/src/command/client/account/delete.rs
+++ b/crates/turtle/src/command/client/account/delete.rs
@@ -1,4 +1,4 @@
-use atuin_client::{
+use crate::atuin_client::{
auth::{self, MutateResponse},
settings::Settings,
};
diff --git a/crates/atuin/src/command/client/account/login.rs b/crates/turtle/src/command/client/account/login.rs
index e320e80b..0c5b66f5 100644
--- a/crates/atuin/src/command/client/account/login.rs
+++ b/crates/turtle/src/command/client/account/login.rs
@@ -4,7 +4,7 @@ use clap::Parser;
use eyre::{Context, Result, bail};
use tokio::{fs::File, io::AsyncWriteExt};
-use atuin_client::{
+use crate::atuin_client::{
auth::{self, AuthResponse},
encryption::{decode_key, load_key},
record::sqlite_store::SqliteStore,
@@ -65,7 +65,7 @@ impl Cmd {
self.prompt_and_store_key(settings, store).await?;
let client = auth::auth_client(settings).await;
- let response = client.login(&username, &password, None).await?;
+ let response = client.login(&username, &password).await?;
match response {
AuthResponse::Success { session, .. } => {
diff --git a/crates/atuin/src/command/client/account/logout.rs b/crates/turtle/src/command/client/account/logout.rs
index b958e65a..6150a52b 100644
--- a/crates/atuin/src/command/client/account/logout.rs
+++ b/crates/turtle/src/command/client/account/logout.rs
@@ -1,5 +1,5 @@
use eyre::Result;
pub async fn run() -> Result<()> {
- atuin_client::logout::logout().await
+ crate::atuin_client::logout::logout().await
}
diff --git a/crates/atuin/src/command/client/account/register.rs b/crates/turtle/src/command/client/account/register.rs
index bd836e7b..548c2739 100644
--- a/crates/atuin/src/command/client/account/register.rs
+++ b/crates/turtle/src/command/client/account/register.rs
@@ -2,7 +2,7 @@ use clap::Parser;
use eyre::{Result, bail};
use super::login::or_user_input;
-use atuin_client::settings::{Settings, SyncAuth};
+use crate::atuin_client::settings::{Settings, SyncAuth};
#[derive(Parser, Debug)]
pub struct Cmd {
@@ -42,7 +42,7 @@ impl Cmd {
bail!("please provide a password");
}
- let session = atuin_client::api_client::register(
+ let session = crate::atuin_client::api_client::register(
settings.sync_address.as_str(),
&username,
&email,
@@ -53,7 +53,7 @@ impl Cmd {
let meta = Settings::meta_store().await?;
meta.save_session(&session.session).await?;
- let _key = atuin_client::encryption::load_key(settings)?;
+ let _key = crate::atuin_client::encryption::load_key(settings)?;
println!(
"Registration successful! Please make a note of your key (run 'atuin key') and keep it safe."
diff --git a/crates/atuin/src/command/client/config.rs b/crates/turtle/src/command/client/config.rs
index 5ec5f7f3..1597a8d6 100644
--- a/crates/atuin/src/command/client/config.rs
+++ b/crates/turtle/src/command/client/config.rs
@@ -1,4 +1,4 @@
-use atuin_client::settings::Settings;
+use crate::atuin_client::settings::Settings;
use clap::{Args, Subcommand, ValueEnum};
use eyre::Result;
use toml_edit::{Document, DocumentMut, Item, Table, TableLike, Value};
diff --git a/crates/atuin/src/command/client/daemon.rs b/crates/turtle/src/command/client/daemon.rs
index c3dcf9d0..2ee9b759 100644
--- a/crates/atuin/src/command/client/daemon.rs
+++ b/crates/turtle/src/command/client/daemon.rs
@@ -6,11 +6,13 @@ use std::path::{Path, PathBuf};
use std::process::{Command, Stdio};
use std::time::{Duration, Instant};
-use atuin_client::{
+use crate::atuin_client::{
database::Sqlite, history::History, record::sqlite_store::SqliteStore, settings::Settings,
};
-use atuin_daemon::DaemonEvent;
-use atuin_daemon::client::{ControlClient, DaemonClientErrorKind, HistoryClient, classify_error};
+use crate::atuin_daemon::DaemonEvent;
+use crate::atuin_daemon::client::{
+ ControlClient, DaemonClientErrorKind, HistoryClient, classify_error,
+};
use clap::Subcommand;
#[cfg(unix)]
use daemonize::Daemonize;
@@ -218,8 +220,6 @@ async fn wait_for_pidfile_available(path: &Path, timeout: Duration) -> Result<()
async fn connect_client(settings: &Settings) -> Result<HistoryClient> {
HistoryClient::new(
- #[cfg(not(unix))]
- settings.daemon.tcp_port,
#[cfg(unix)]
settings.daemon.socket_path.clone(),
)
@@ -339,8 +339,6 @@ fn ensure_autostart_supported(settings: &Settings) -> Result<()> {
"daemon autostart is incompatible with `daemon.systemd_socket = true`; use systemd to manage the daemon"
);
}
- #[cfg(not(unix))]
- let _ = settings;
Ok(())
}
@@ -546,8 +544,6 @@ async fn status_cmd(settings: &Settings) -> Result<()> {
println!(" Healthy: {}", status.healthy);
#[cfg(unix)]
println!(" Socket: {}", settings.daemon.socket_path);
- #[cfg(not(unix))]
- println!(" Port: {}", settings.daemon.tcp_port);
}
Probe::NeedsRestart(reason) => {
println!("Daemon running (needs restart)");
@@ -648,7 +644,7 @@ async fn run(
let pidfile_path = PathBuf::from(&settings.daemon.pidfile_path);
let _pidfile_guard = PidfileGuard::acquire(&pidfile_path)?;
- atuin_daemon::boot(settings, store, history_db).await?;
+ crate::atuin_daemon::boot(settings, store, history_db).await?;
Ok(())
}
@@ -700,17 +696,6 @@ fn kill_process(pid: u32) {
.status();
}
-/// Kill a process by PID.
-#[cfg(not(unix))]
-fn kill_process(pid: u32) {
- // On Windows, use taskkill
- let _ = Command::new("taskkill")
- .args(["/PID", &pid.to_string(), "/F"])
- .stdout(Stdio::null())
- .stderr(Stdio::null())
- .status();
-}
-
#[cfg(test)]
mod tests {
use super::*;
diff --git a/crates/turtle/src/command/client/default_config.rs b/crates/turtle/src/command/client/default_config.rs
new file mode 100644
index 00000000..e8cc15f9
--- /dev/null
+++ b/crates/turtle/src/command/client/default_config.rs
@@ -0,0 +1,4 @@
+pub fn run() {
+ // TODO(@bpeetz): Re-add the default settings option back (Settings::example_config()) <2026-06-11>
+ println!("TODO");
+}
diff --git a/crates/atuin/src/command/client/doctor.rs b/crates/turtle/src/command/client/doctor.rs
index 1bf003db..09fa6e77 100644
--- a/crates/atuin/src/command/client/doctor.rs
+++ b/crates/turtle/src/command/client/doctor.rs
@@ -1,10 +1,10 @@
use std::process::Command;
use std::{env, str::FromStr};
-use atuin_client::database::Sqlite;
-use atuin_client::settings::Settings;
-use atuin_common::shell::{Shell, shell_name};
-use atuin_common::utils;
+use crate::atuin_client::database::Sqlite;
+use crate::atuin_client::settings::Settings;
+use crate::atuin_common::shell::{Shell, shell_name};
+use crate::atuin_common::utils;
use colored::Colorize;
use eyre::Result;
use serde::Serialize;
@@ -168,7 +168,7 @@ impl ShellInfo {
}
pub fn new() -> Self {
- // TODO: rework to use atuin_common::Shell
+ // TODO: rework to use crate::atuin_common::Shell
let sys = System::new_all();
diff --git a/crates/atuin/src/command/client/history.rs b/crates/turtle/src/command/client/history.rs
index abf39cc2..0c61392c 100644
--- a/crates/atuin/src/command/client/history.rs
+++ b/crates/turtle/src/command/client/history.rs
@@ -5,7 +5,7 @@ use std::{
time::Duration,
};
-use atuin_common::utils::{self, Escapable as _};
+use crate::atuin_common::utils::{self, Escapable as _};
use clap::Subcommand;
use eyre::{Context, Result, bail};
use runtime_format::{FormatKey, FormatKeyError, ParseSegment, ParsedFmt};
@@ -18,9 +18,9 @@ use colored::Colorize;
use serde::Serialize;
#[cfg(feature = "daemon")]
-use atuin_daemon::history::{HistoryEventKind, TailHistoryReply};
+use crate::atuin_daemon::history::{HistoryEventKind, TailHistoryReply};
-use atuin_client::{
+use crate::atuin_client::{
database::{Database, Sqlite, current_context},
encryption,
history::{History, store::HistoryStore},
@@ -32,7 +32,7 @@ use atuin_client::{
};
#[cfg(feature = "sync")]
-use atuin_client::{record, sync};
+use crate::atuin_client::record;
use log::{debug, warn};
use time::{OffsetDateTime, macros::format_description};
@@ -924,7 +924,7 @@ impl Cmd {
async fn handle_list(
db: &impl Database,
settings: &Settings,
- context: atuin_client::database::Context,
+ context: crate::atuin_client::database::Context,
session: bool,
cwd: bool,
mode: ListMode,
@@ -967,7 +967,7 @@ impl Cmd {
db: &impl Database,
settings: &Settings,
store: SqliteStore,
- context: atuin_client::database::Context,
+ context: crate::atuin_client::database::Context,
dry_run: bool,
) -> Result<()> {
// Grab all executed commands and filter them using History::should_save.
@@ -1011,7 +1011,7 @@ impl Cmd {
}
#[cfg(feature = "daemon")]
- daemon_cmd::emit_event(settings, atuin_daemon::DaemonEvent::HistoryPruned).await;
+ daemon_cmd::emit_event(settings, crate::atuin_daemon::DaemonEvent::HistoryPruned).await;
}
Ok(())
}
@@ -1068,8 +1068,11 @@ impl Cmd {
}
#[cfg(feature = "daemon")]
- daemon_cmd::emit_event(settings, atuin_daemon::DaemonEvent::HistoryDeleted { ids })
- .await;
+ daemon_cmd::emit_event(
+ settings,
+ crate::atuin_daemon::DaemonEvent::HistoryDeleted { ids },
+ )
+ .await;
}
Ok(())
}
diff --git a/crates/atuin/src/command/client/import.rs b/crates/turtle/src/command/client/import.rs
index 21ac76b4..363e6405 100644
--- a/crates/atuin/src/command/client/import.rs
+++ b/crates/turtle/src/command/client/import.rs
@@ -5,7 +5,7 @@ use clap::Parser;
use eyre::Result;
use indicatif::ProgressBar;
-use atuin_client::{
+use crate::atuin_client::{
database::Database,
history::History,
import::{
diff --git a/crates/atuin/src/command/client/info.rs b/crates/turtle/src/command/client/info.rs
index a69f9b2f..ee24c419 100644
--- a/crates/atuin/src/command/client/info.rs
+++ b/crates/turtle/src/command/client/info.rs
@@ -1,9 +1,9 @@
-use atuin_client::settings::Settings;
+use crate::atuin_client::settings::Settings;
use crate::{SHA, VERSION};
pub fn run(settings: &Settings) {
- let config = atuin_common::utils::config_dir();
+ let config = crate::atuin_common::utils::config_dir();
let mut config_file = config.clone();
config_file.push("config.toml");
let mut sever_config = config;
diff --git a/crates/atuin/src/command/client/init.rs b/crates/turtle/src/command/client/init.rs
index 39cd1247..bf9747bb 100644
--- a/crates/atuin/src/command/client/init.rs
+++ b/crates/turtle/src/command/client/init.rs
@@ -1,4 +1,4 @@
-use atuin_client::settings::{Settings, Tmux};
+use crate::atuin_client::settings::{Settings, Tmux};
use clap::{Parser, ValueEnum};
mod bash;
diff --git a/crates/atuin/src/command/client/init/bash.rs b/crates/turtle/src/command/client/init/bash.rs
index 2280dc3d..fd17e37e 100644
--- a/crates/atuin/src/command/client/init/bash.rs
+++ b/crates/turtle/src/command/client/init/bash.rs
@@ -1,4 +1,4 @@
-use atuin_client::settings::Tmux;
+use crate::atuin_client::settings::Tmux;
fn print_tmux_config(tmux: &Tmux) {
if tmux.enabled {
diff --git a/crates/atuin/src/command/client/init/fish.rs b/crates/turtle/src/command/client/init/fish.rs
index 07c6a5ba..8a046bfa 100644
--- a/crates/atuin/src/command/client/init/fish.rs
+++ b/crates/turtle/src/command/client/init/fish.rs
@@ -1,4 +1,4 @@
-use atuin_client::settings::Tmux;
+use crate::atuin_client::settings::Tmux;
fn print_tmux_config(tmux: &Tmux) {
if tmux.enabled {
diff --git a/crates/atuin/src/command/client/init/powershell.rs b/crates/turtle/src/command/client/init/powershell.rs
index f92f1cbe..10c0c461 100644
--- a/crates/atuin/src/command/client/init/powershell.rs
+++ b/crates/turtle/src/command/client/init/powershell.rs
@@ -1,4 +1,4 @@
-use atuin_client::settings::Tmux;
+use crate::atuin_client::settings::Tmux;
pub fn init_static(disable_up_arrow: bool, disable_ctrl_r: bool, _tmux: &Tmux) {
let base = include_str!("../../../shell/atuin.ps1");
diff --git a/crates/atuin/src/command/client/init/xonsh.rs b/crates/turtle/src/command/client/init/xonsh.rs
index 9fb5730d..a17d85d8 100644
--- a/crates/atuin/src/command/client/init/xonsh.rs
+++ b/crates/turtle/src/command/client/init/xonsh.rs
@@ -1,4 +1,4 @@
-use atuin_client::settings::Tmux;
+use crate::atuin_client::settings::Tmux;
pub fn init_static(disable_up_arrow: bool, disable_ctrl_r: bool, _tmux: &Tmux) {
let base = include_str!("../../../shell/atuin.xsh");
diff --git a/crates/atuin/src/command/client/init/zsh.rs b/crates/turtle/src/command/client/init/zsh.rs
index 3f325167..38c3086b 100644
--- a/crates/atuin/src/command/client/init/zsh.rs
+++ b/crates/turtle/src/command/client/init/zsh.rs
@@ -1,4 +1,4 @@
-use atuin_client::settings::Tmux;
+use crate::atuin_client::settings::Tmux;
fn print_tmux_config(tmux: &Tmux) {
if tmux.enabled {
diff --git a/crates/atuin/src/command/client/search.rs b/crates/turtle/src/command/client/search.rs
index a9dc9a68..4a2114d5 100644
--- a/crates/atuin/src/command/client/search.rs
+++ b/crates/turtle/src/command/client/search.rs
@@ -1,11 +1,11 @@
use std::fs::File;
use std::io::{IsTerminal as _, Write, stderr, stdout};
-use atuin_common::utils::{self, Escapable as _};
+use crate::atuin_common::utils::{self, Escapable as _};
use clap::Parser;
use eyre::Result;
-use atuin_client::{
+use crate::atuin_client::{
database::Database,
database::{OptFilters, current_context},
encryption,
diff --git a/crates/atuin/src/command/client/search/cursor.rs b/crates/turtle/src/command/client/search/cursor.rs
index c1cdfee4..84f94082 100644
--- a/crates/atuin/src/command/client/search/cursor.rs
+++ b/crates/turtle/src/command/client/search/cursor.rs
@@ -1,4 +1,4 @@
-use atuin_client::settings::WordJumpMode;
+use crate::atuin_client::settings::WordJumpMode;
pub struct Cursor {
source: String,
diff --git a/crates/atuin/src/command/client/search/duration.rs b/crates/turtle/src/command/client/search/duration.rs
index 54856c87..54856c87 100644
--- a/crates/atuin/src/command/client/search/duration.rs
+++ b/crates/turtle/src/command/client/search/duration.rs
diff --git a/crates/atuin/src/command/client/search/engines.rs b/crates/turtle/src/command/client/search/engines.rs
index 886f0171..0f92b4c7 100644
--- a/crates/atuin/src/command/client/search/engines.rs
+++ b/crates/turtle/src/command/client/search/engines.rs
@@ -1,5 +1,5 @@
use async_trait::async_trait;
-use atuin_client::{
+use crate::atuin_client::{
database::{Context, Database, OptFilters},
history::{AUTHOR_FILTER_ALL_USER, History, HistoryId},
settings::{FilterMode, SearchMode, Settings},
diff --git a/crates/atuin/src/command/client/search/engines/daemon.rs b/crates/turtle/src/command/client/search/engines/daemon.rs
index 8b15c180..b1299c02 100644
--- a/crates/atuin/src/command/client/search/engines/daemon.rs
+++ b/crates/turtle/src/command/client/search/engines/daemon.rs
@@ -1,10 +1,10 @@
-use async_trait::async_trait;
-use atuin_client::{
+use crate::atuin_client::{
database::{Database, OptFilters},
history::{AUTHOR_FILTER_ALL_USER, History},
settings::{SearchMode, Settings},
};
-use atuin_daemon::client::{DaemonClientErrorKind, SearchClient, classify_error};
+use crate::atuin_daemon::client::{DaemonClientErrorKind, SearchClient, classify_error};
+use async_trait::async_trait;
use atuin_nucleo_matcher::{
Config, Matcher, Utf32Str,
pattern::{CaseMatching, Normalization, Pattern},
@@ -22,8 +22,6 @@ pub struct Search {
settings: Settings,
#[cfg(unix)]
socket_path: String,
- #[cfg(not(unix))]
- tcp_port: u64,
}
impl Search {
@@ -34,8 +32,6 @@ impl Search {
settings: settings.clone(),
#[cfg(unix)]
socket_path: settings.daemon.socket_path.clone(),
- #[cfg(not(unix))]
- tcp_port: settings.daemon.tcp_port,
}
}
@@ -51,9 +47,6 @@ impl Search {
#[cfg(unix)]
let client = SearchClient::new(self.socket_path.clone()).await?;
- #[cfg(not(unix))]
- let client = SearchClient::new(self.tcp_port).await?;
-
self.client = Some(client);
Ok(())
}
diff --git a/crates/atuin/src/command/client/search/engines/db.rs b/crates/turtle/src/command/client/search/engines/db.rs
index b15aabd8..2765faf5 100644
--- a/crates/atuin/src/command/client/search/engines/db.rs
+++ b/crates/turtle/src/command/client/search/engines/db.rs
@@ -1,6 +1,6 @@
use super::{SearchEngine, SearchState};
use async_trait::async_trait;
-use atuin_client::{
+use crate::atuin_client::{
database::Database,
database::OptFilters,
database::{QueryToken, QueryTokenizer},
diff --git a/crates/atuin/src/command/client/search/engines/skim.rs b/crates/turtle/src/command/client/search/engines/skim.rs
index fe05fd09..96a6574d 100644
--- a/crates/atuin/src/command/client/search/engines/skim.rs
+++ b/crates/turtle/src/command/client/search/engines/skim.rs
@@ -1,7 +1,7 @@
use std::path::Path;
use async_trait::async_trait;
-use atuin_client::{
+use crate::atuin_client::{
database::Database,
history::{History, is_known_agent},
settings::FilterMode,
diff --git a/crates/atuin/src/command/client/search/history_list.rs b/crates/turtle/src/command/client/search/history_list.rs
index 7af324b4..4c83d7eb 100644
--- a/crates/atuin/src/command/client/search/history_list.rs
+++ b/crates/turtle/src/command/client/search/history_list.rs
@@ -2,12 +2,12 @@ use std::time::Duration;
use super::duration::format_duration;
use super::engines::SearchEngine;
-use atuin_client::{
+use crate::atuin_client::{
history::History,
settings::{UiColumn, UiColumnType},
theme::{Meaning, Theme},
};
-use atuin_common::utils::Escapable as _;
+use crate::atuin_common::utils::Escapable as _;
use itertools::Itertools;
use ratatui::{
backend::FromCrossterm,
diff --git a/crates/atuin/src/command/client/search/inspector.rs b/crates/turtle/src/command/client/search/inspector.rs
index e2cdabe5..1ebc4383 100644
--- a/crates/atuin/src/command/client/search/inspector.rs
+++ b/crates/turtle/src/command/client/search/inspector.rs
@@ -1,7 +1,7 @@
use std::time::Duration;
use time::macros::format_description;
-use atuin_client::{
+use crate::atuin_client::{
history::{History, HistoryStats},
settings::{Settings, Timezone},
};
@@ -338,7 +338,7 @@ pub fn draw_full(
#[cfg(test)]
mod tests {
use super::draw_ultracompact;
- use atuin_client::{
+ use crate::atuin_client::{
history::{History, HistoryId, HistoryStats},
theme::ThemeManager,
};
diff --git a/crates/atuin/src/command/client/search/interactive.rs b/crates/turtle/src/command/client/search/interactive.rs
index 4efba803..a3d2cb79 100644
--- a/crates/atuin/src/command/client/search/interactive.rs
+++ b/crates/turtle/src/command/client/search/interactive.rs
@@ -6,7 +6,7 @@ use std::{
#[cfg(unix)]
use std::io::Read as _;
-use atuin_common::{shell::Shell, utils::Escapable as _};
+use crate::atuin_common::{shell::Shell, utils::Escapable as _};
use eyre::Result;
use time::OffsetDateTime;
use unicode_width::{UnicodeWidthChar, UnicodeWidthStr};
@@ -16,7 +16,7 @@ use super::{
engines::{SearchEngine, SearchState},
history_list::{HistoryList, ListState},
};
-use atuin_client::{
+use crate::atuin_client::{
database::{Context, Database, current_context},
history::{History, HistoryId, HistoryStats, store::HistoryStore},
settings::{
@@ -50,9 +50,6 @@ use ratatui::crossterm::event::{
KeyboardEnhancementFlags, PopKeyboardEnhancementFlags, PushKeyboardEnhancementFlags,
};
-#[cfg(windows)]
-use windows_sys::Win32::System::Console::{GetConsoleOutputCP, SetConsoleOutputCP};
-
const TAB_TITLES: [&str; 2] = ["Search", "Inspect"];
pub enum InputAction {
@@ -97,9 +94,9 @@ impl InspectingState {
pub fn to_compactness(f: &Frame, settings: &Settings) -> Compactness {
if match settings.style {
- atuin_client::settings::Style::Auto => f.area().height < 14,
- atuin_client::settings::Style::Compact => true,
- atuin_client::settings::Style::Full => false,
+ crate::atuin_client::settings::Style::Auto => f.area().height < 14,
+ crate::atuin_client::settings::Style::Compact => true,
+ crate::atuin_client::settings::Style::Full => false,
} {
if settings.auto_hide_height != 0 && f.area().height <= settings.auto_hide_height {
Compactness::Ultracompact
@@ -166,7 +163,7 @@ impl State {
self.results_len = results.len();
if smart_sort {
- Ok(atuin_history::sort::sort(
+ Ok(crate::atuin_history::sort::sort(
self.search.input.as_str(),
results,
))
@@ -1275,14 +1272,9 @@ enum TerminalWriter {
Stdout(std::io::Stdout),
#[cfg(unix)]
Tty(std::fs::File),
- #[cfg(windows)]
- ConOut(std::io::LineWriter<std::fs::File>, u32),
}
impl TerminalWriter {
- #[cfg(windows)]
- const CP_UTF8: u32 = 65001;
-
fn new() -> std::io::Result<Self> {
let stdout = stdout();
if stdout.is_terminal() {
@@ -1301,35 +1293,6 @@ impl TerminalWriter {
.open("/dev/tty")?,
))
}
-
- // On Windows, use CONOUT$ which is the equivalent of /dev/tty, but this
- // requires setting the current console output code page to UTF-8 for the
- // TUI to render properly. We'll set it back to its previous value upon exit.
- #[cfg(windows)]
- {
- let file = std::fs::File::options()
- .read(true)
- .write(true)
- .open("CONOUT$")?;
-
- let initial_console_output_cp = unsafe { GetConsoleOutputCP() };
- if initial_console_output_cp != Self::CP_UTF8 {
- unsafe {
- SetConsoleOutputCP(Self::CP_UTF8);
- }
- }
-
- Ok(TerminalWriter::ConOut(
- std::io::LineWriter::new(file),
- initial_console_output_cp,
- ))
- }
-
- #[cfg(not(any(unix, windows)))]
- Err(std::io::Error::new(
- std::io::ErrorKind::Unsupported,
- "Interactive mode requires a terminal",
- ))
}
}
@@ -1339,8 +1302,6 @@ impl Write for TerminalWriter {
TerminalWriter::Stdout(stdout) => stdout.write(buf),
#[cfg(unix)]
TerminalWriter::Tty(file) => file.write(buf),
- #[cfg(windows)]
- TerminalWriter::ConOut(writer, _) => writer.write(buf),
}
}
@@ -1349,21 +1310,6 @@ impl Write for TerminalWriter {
TerminalWriter::Stdout(stdout) => stdout.flush(),
#[cfg(unix)]
TerminalWriter::Tty(file) => file.flush(),
- #[cfg(windows)]
- TerminalWriter::ConOut(writer, _) => writer.flush(),
- }
- }
-}
-
-impl Drop for TerminalWriter {
- fn drop(&mut self) {
- #[cfg(windows)]
- if let TerminalWriter::ConOut(_, initial_console_output_cp) = self
- && *initial_console_output_cp != Self::CP_UTF8
- {
- unsafe {
- SetConsoleOutputCP(*initial_console_output_cp);
- }
}
}
}
@@ -1668,10 +1614,6 @@ pub async fn history(
}
};
- #[cfg(not(unix))]
- let (saved_screen, popup_rect, _popup_scroll_offset): (Option<()>, Rect, u16) =
- (None, Rect::default(), 0);
-
let popup_mode = saved_screen.is_some();
let stdout = Stdout::new(inline_height > 0, settings.no_mouse)?;
@@ -2053,9 +1995,9 @@ fn set_clipboard(_s: String) {}
#[cfg(test)]
mod tests {
- use atuin_client::database::Context;
- use atuin_client::history::History;
- use atuin_client::settings::{
+ use crate::atuin_client::database::Context;
+ use crate::atuin_client::history::History;
+ use crate::atuin_client::settings::{
FilterMode, KeymapMode, Preview, PreviewStrategy, SearchMode, Settings,
};
use time::OffsetDateTime;
@@ -2264,7 +2206,7 @@ mod tests {
#[test]
fn test_accept_keybindings() {
- use atuin_client::settings::Keys;
+ use crate::atuin_client::settings::Keys;
use ratatui::crossterm::event::{KeyCode, KeyEvent, KeyModifiers};
let mut settings = Settings::utc();
@@ -2870,8 +2812,8 @@ mod tests {
#[test]
fn execute_exit_returns_based_on_exit_mode() {
+ use crate::atuin_client::settings::ExitMode;
use crate::command::client::search::keybindings::Action;
- use atuin_client::settings::ExitMode;
let mut state = make_executor_state(100, 0);
let mut settings = Settings::utc();
@@ -3043,7 +2985,7 @@ mod tests {
#[test]
fn keymap_config_return_query() {
- use atuin_client::settings::KeyBindingConfig;
+ use crate::atuin_client::settings::KeyBindingConfig;
use ratatui::crossterm::event::{KeyCode, KeyEvent, KeyModifiers};
use std::collections::HashMap;
diff --git a/crates/atuin/src/command/client/search/keybindings/actions.rs b/crates/turtle/src/command/client/search/keybindings/actions.rs
index ff2ef7de..ff2ef7de 100644
--- a/crates/atuin/src/command/client/search/keybindings/actions.rs
+++ b/crates/turtle/src/command/client/search/keybindings/actions.rs
diff --git a/crates/atuin/src/command/client/search/keybindings/conditions.rs b/crates/turtle/src/command/client/search/keybindings/conditions.rs
index 055ae905..055ae905 100644
--- a/crates/atuin/src/command/client/search/keybindings/conditions.rs
+++ b/crates/turtle/src/command/client/search/keybindings/conditions.rs
diff --git a/crates/atuin/src/command/client/search/keybindings/defaults.rs b/crates/turtle/src/command/client/search/keybindings/defaults.rs
index a76cd4a9..c8401e37 100644
--- a/crates/atuin/src/command/client/search/keybindings/defaults.rs
+++ b/crates/turtle/src/command/client/search/keybindings/defaults.rs
@@ -1,6 +1,6 @@
use std::collections::HashMap;
-use atuin_client::settings::{KeyBindingConfig, Settings};
+use crate::atuin_client::settings::{KeyBindingConfig, Settings};
use tracing::warn;
use super::actions::Action;
@@ -354,7 +354,7 @@ pub fn default_vim_insert_keymap(settings: &Settings) -> Keymap {
/// bindings. We respect the user's `keymap_mode` to provide vim-style j/k
/// navigation for vim users.
pub fn default_inspector_keymap(settings: &Settings) -> Keymap {
- use atuin_client::settings::KeymapMode;
+ use crate::atuin_client::settings::KeymapMode;
let mut km = Keymap::new();
@@ -495,7 +495,7 @@ impl KeymapSet {
/// - If `[keymap]` is empty/absent, `[keys]` customizes the defaults
/// (current behavior for backward compatibility).
pub fn from_settings(settings: &Settings) -> Self {
- use atuin_client::settings::Keys;
+ use crate::atuin_client::settings::Keys;
if settings.keymap.is_empty() {
// No [keymap] section → use [keys] to customize defaults
@@ -975,7 +975,7 @@ mod tests {
#[test]
fn parse_simple_binding_config() {
- use atuin_client::settings::KeyBindingConfig;
+ use crate::atuin_client::settings::KeyBindingConfig;
let cfg = KeyBindingConfig::Simple("accept".to_string());
let binding = super::parse_binding_config(&cfg).unwrap();
assert_eq!(binding.rules.len(), 1);
@@ -985,7 +985,7 @@ mod tests {
#[test]
fn parse_conditional_binding_config() {
- use atuin_client::settings::{KeyBindingConfig, KeyRuleConfig};
+ use crate::atuin_client::settings::{KeyBindingConfig, KeyRuleConfig};
let cfg = KeyBindingConfig::Rules(vec![
KeyRuleConfig {
when: Some("cursor-at-start".to_string()),
@@ -1006,14 +1006,14 @@ mod tests {
#[test]
fn parse_binding_config_invalid_action() {
- use atuin_client::settings::KeyBindingConfig;
+ use crate::atuin_client::settings::KeyBindingConfig;
let cfg = KeyBindingConfig::Simple("not-a-real-action".to_string());
assert!(super::parse_binding_config(&cfg).is_err());
}
#[test]
fn parse_binding_config_invalid_condition() {
- use atuin_client::settings::{KeyBindingConfig, KeyRuleConfig};
+ use crate::atuin_client::settings::{KeyBindingConfig, KeyRuleConfig};
let cfg = KeyBindingConfig::Rules(vec![KeyRuleConfig {
when: Some("not-a-real-condition".to_string()),
action: "exit".to_string(),
@@ -1023,7 +1023,7 @@ mod tests {
#[test]
fn config_override_replaces_key() {
- use atuin_client::settings::KeyBindingConfig;
+ use crate::atuin_client::settings::KeyBindingConfig;
use std::collections::HashMap;
let mut settings = default_settings();
@@ -1048,7 +1048,7 @@ mod tests {
#[test]
fn config_override_preserves_unoverridden_keys() {
- use atuin_client::settings::KeyBindingConfig;
+ use crate::atuin_client::settings::KeyBindingConfig;
use std::collections::HashMap;
let mut settings = default_settings();
@@ -1072,7 +1072,7 @@ mod tests {
#[test]
fn config_conditional_override() {
- use atuin_client::settings::{KeyBindingConfig, KeyRuleConfig};
+ use crate::atuin_client::settings::{KeyBindingConfig, KeyRuleConfig};
use std::collections::HashMap;
let mut settings = default_settings();
@@ -1131,7 +1131,7 @@ mod tests {
#[test]
fn keymap_overrides_ignore_keys_section() {
- use atuin_client::settings::KeyBindingConfig;
+ use crate::atuin_client::settings::KeyBindingConfig;
// Set up: [keys] disables scroll_exits, but [keymap] is present
let mut settings = default_settings();
@@ -1172,7 +1172,7 @@ mod tests {
#[test]
fn keymap_present_resets_to_standard_keys_defaults() {
- use atuin_client::settings::KeyBindingConfig;
+ use crate::atuin_client::settings::KeyBindingConfig;
let mut settings = default_settings();
// Disable all [keys] behaviors
@@ -1214,7 +1214,7 @@ mod tests {
#[test]
fn keys_has_non_default_values_detection() {
- use atuin_client::settings::Keys;
+ use crate::atuin_client::settings::Keys;
let standard = Keys::standard_defaults();
assert!(!standard.has_non_default_values());
@@ -1230,7 +1230,7 @@ mod tests {
#[test]
fn original_input_empty_condition_in_config() {
- use atuin_client::settings::{KeyBindingConfig, KeyRuleConfig};
+ use crate::atuin_client::settings::{KeyBindingConfig, KeyRuleConfig};
use std::collections::HashMap;
let mut settings = default_settings();
diff --git a/crates/atuin/src/command/client/search/keybindings/key.rs b/crates/turtle/src/command/client/search/keybindings/key.rs
index c2eb31c6..c2eb31c6 100644
--- a/crates/atuin/src/command/client/search/keybindings/key.rs
+++ b/crates/turtle/src/command/client/search/keybindings/key.rs
diff --git a/crates/atuin/src/command/client/search/keybindings/keymap.rs b/crates/turtle/src/command/client/search/keybindings/keymap.rs
index 0d362863..0d362863 100644
--- a/crates/atuin/src/command/client/search/keybindings/keymap.rs
+++ b/crates/turtle/src/command/client/search/keybindings/keymap.rs
diff --git a/crates/atuin/src/command/client/search/keybindings/mod.rs b/crates/turtle/src/command/client/search/keybindings/mod.rs
index 3b6eb2b2..3b6eb2b2 100644
--- a/crates/atuin/src/command/client/search/keybindings/mod.rs
+++ b/crates/turtle/src/command/client/search/keybindings/mod.rs
diff --git a/crates/turtle/src/command/client/server.rs b/crates/turtle/src/command/client/server.rs
new file mode 100644
index 00000000..7de27551
--- /dev/null
+++ b/crates/turtle/src/command/client/server.rs
@@ -0,0 +1,61 @@
+use std::net::SocketAddr;
+
+use crate::atuin_server::{Settings, launch, launch_metrics_server};
+use crate::atuin_server_database::DbType;
+use crate::atuin_server_postgres::Postgres;
+use crate::atuin_server_sqlite::Sqlite;
+
+use clap::Subcommand;
+use eyre::{Context, Result, eyre};
+
+#[derive(Subcommand, Clone, Debug)]
+#[command(infer_subcommands = true)]
+pub enum Cmd {
+ /// Start the server
+ Start {
+ /// The host address to bind
+ #[clap(long)]
+ host: Option<String>,
+
+ /// The port to bind
+ #[clap(long, short)]
+ port: Option<u16>,
+ },
+
+ /// Print server example configuration
+ DefaultConfig,
+}
+
+impl Cmd {
+ #[expect(clippy::too_many_lines)]
+ pub async fn run(self) -> Result<()> {
+ match self {
+ Cmd::Start { host, port } => {
+ let settings = Settings::new().wrap_err("could not load server settings")?;
+ let host = host.as_ref().unwrap_or(&settings.host).clone();
+ let port = port.unwrap_or(settings.port);
+ let addr = SocketAddr::new(host.parse()?, port);
+
+ if settings.metrics.enable {
+ tokio::spawn(launch_metrics_server(
+ settings.metrics.host.clone(),
+ settings.metrics.port,
+ ));
+ }
+
+ match settings.db_settings.db_type() {
+ DbType::Postgres => launch::<Postgres>(settings, addr).await,
+ DbType::Sqlite => launch::<Sqlite>(settings, addr).await,
+ DbType::Unknown => {
+ Err(eyre!("db_uri must start with postgres:// or sqlite://"))
+ }
+ }
+ }
+ Cmd::DefaultConfig => {
+ // TODO(@bpeetz): Add this back <2026-06-11>
+ println!("TODO");
+ Ok(())
+ }
+ }
+ }
+}
diff --git a/crates/atuin/src/command/client/setup.rs b/crates/turtle/src/command/client/setup.rs
index 8de73d62..b32ceb97 100644
--- a/crates/atuin/src/command/client/setup.rs
+++ b/crates/turtle/src/command/client/setup.rs
@@ -1,4 +1,4 @@
-use atuin_client::settings::Settings;
+use crate::atuin_client::settings::Settings;
use colored::Colorize;
use eyre::Result;
diff --git a/crates/atuin/src/command/client/stats.rs b/crates/turtle/src/command/client/stats.rs
index a7fc00ac..fc10e949 100644
--- a/crates/atuin/src/command/client/stats.rs
+++ b/crates/turtle/src/command/client/stats.rs
@@ -3,13 +3,13 @@ use eyre::Result;
use interim::parse_date_string;
use time::{Duration, OffsetDateTime, Time};
-use atuin_client::{
+use crate::atuin_client::{
database::{Database, current_context},
settings::Settings,
theme::Theme,
};
-use atuin_history::stats::{compute, pretty_print};
+use crate::atuin_history::stats::{compute, pretty_print};
fn parse_ngram_size(s: &str) -> Result<usize, String> {
let value = s
diff --git a/crates/atuin/src/command/client/store.rs b/crates/turtle/src/command/client/store.rs
index 513c404a..dfa3b66c 100644
--- a/crates/atuin/src/command/client/store.rs
+++ b/crates/turtle/src/command/client/store.rs
@@ -1,7 +1,7 @@
use clap::Subcommand;
use eyre::Result;
-use atuin_client::{
+use crate::atuin_client::{
database::Database,
record::{sqlite_store::SqliteStore, store::Store},
settings::Settings,
diff --git a/crates/atuin/src/command/client/store/pull.rs b/crates/turtle/src/command/client/store/pull.rs
index 25b925c7..c9c9c379 100644
--- a/crates/atuin/src/command/client/store/pull.rs
+++ b/crates/turtle/src/command/client/store/pull.rs
@@ -1,7 +1,7 @@
use clap::Args;
use eyre::Result;
-use atuin_client::{
+use crate::atuin_client::{
database::Database,
encryption::load_key,
record::store::Store,
diff --git a/crates/atuin/src/command/client/store/purge.rs b/crates/turtle/src/command/client/store/purge.rs
index ad2369ce..f7996c4b 100644
--- a/crates/atuin/src/command/client/store/purge.rs
+++ b/crates/turtle/src/command/client/store/purge.rs
@@ -1,7 +1,7 @@
use clap::Args;
use eyre::Result;
-use atuin_client::{
+use crate::atuin_client::{
encryption::load_key,
record::{sqlite_store::SqliteStore, store::Store},
settings::Settings,
diff --git a/crates/atuin/src/command/client/store/push.rs b/crates/turtle/src/command/client/store/push.rs
index d8569e1e..724dfbef 100644
--- a/crates/atuin/src/command/client/store/push.rs
+++ b/crates/turtle/src/command/client/store/push.rs
@@ -1,9 +1,9 @@
-use atuin_common::record::HostId;
+use crate::atuin_common::record::HostId;
use clap::Args;
use eyre::Result;
use uuid::Uuid;
-use atuin_client::{
+use crate::atuin_client::{
api_client::Client,
encryption::load_key,
record::sync::Operation,
diff --git a/crates/atuin/src/command/client/store/rebuild.rs b/crates/turtle/src/command/client/store/rebuild.rs
index b9f2837b..80e201c2 100644
--- a/crates/atuin/src/command/client/store/rebuild.rs
+++ b/crates/turtle/src/command/client/store/rebuild.rs
@@ -4,7 +4,7 @@ use eyre::{Result, bail};
#[cfg(feature = "daemon")]
use crate::command::client::daemon as daemon_cmd;
-use atuin_client::{
+use crate::atuin_client::{
database::Database, encryption, history::store::HistoryStore,
record::sqlite_store::SqliteStore, settings::Settings,
};
@@ -51,7 +51,7 @@ impl Rebuild {
history_store.build(database).await?;
#[cfg(feature = "daemon")]
- daemon_cmd::emit_event(settings, atuin_daemon::DaemonEvent::HistoryRebuilt).await;
+ daemon_cmd::emit_event(settings, crate::atuin_daemon::DaemonEvent::HistoryRebuilt).await;
Ok(())
}
diff --git a/crates/atuin/src/command/client/store/rekey.rs b/crates/turtle/src/command/client/store/rekey.rs
index c92d2555..e63be447 100644
--- a/crates/atuin/src/command/client/store/rekey.rs
+++ b/crates/turtle/src/command/client/store/rekey.rs
@@ -2,7 +2,7 @@ use clap::Args;
use eyre::Result;
use tokio::{fs::File, io::AsyncWriteExt};
-use atuin_client::{
+use crate::atuin_client::{
encryption::{decode_key, generate_encoded_key, load_key},
record::sqlite_store::SqliteStore,
record::store::Store,
diff --git a/crates/atuin/src/command/client/store/verify.rs b/crates/turtle/src/command/client/store/verify.rs
index 84bec96a..5aa1dc70 100644
--- a/crates/atuin/src/command/client/store/verify.rs
+++ b/crates/turtle/src/command/client/store/verify.rs
@@ -1,7 +1,7 @@
use clap::Args;
use eyre::Result;
-use atuin_client::{
+use crate::atuin_client::{
encryption::load_key,
record::{sqlite_store::SqliteStore, store::Store},
settings::Settings,
diff --git a/crates/atuin/src/command/client/sync.rs b/crates/turtle/src/command/client/sync.rs
index 5b8c2cb7..a4839b5f 100644
--- a/crates/atuin/src/command/client/sync.rs
+++ b/crates/turtle/src/command/client/sync.rs
@@ -1,7 +1,7 @@
use clap::Subcommand;
use eyre::{Result, WrapErr};
-use atuin_client::{
+use crate::atuin_client::{
database::Database,
encryption,
history::store::HistoryStore,
@@ -53,7 +53,7 @@ impl Cmd {
Self::Register(r) => r.run(&settings).await,
Self::Status => status::run(&settings).await,
Self::Key {} => {
- use atuin_client::encryption::{encode_key, load_key};
+ use crate::atuin_client::encryption::{encode_key, load_key};
let key = load_key(&settings).wrap_err("could not load encryption key")?;
let encode = encode_key(&key).wrap_err("could not encode encryption key")?;
diff --git a/crates/atuin/src/command/client/sync/status.rs b/crates/turtle/src/command/client/sync/status.rs
index c992eb3e..00088b59 100644
--- a/crates/atuin/src/command/client/sync/status.rs
+++ b/crates/turtle/src/command/client/sync/status.rs
@@ -1,5 +1,5 @@
use crate::{SHA, VERSION};
-use atuin_client::{api_client, settings::Settings};
+use crate::atuin_client::{api_client, settings::Settings};
use colored::Colorize;
use eyre::{Result, bail};
diff --git a/crates/atuin/src/command/client/wrapped.rs b/crates/turtle/src/command/client/wrapped.rs
index 0e0c9f14..694157c2 100644
--- a/crates/atuin/src/command/client/wrapped.rs
+++ b/crates/turtle/src/command/client/wrapped.rs
@@ -3,9 +3,9 @@ use eyre::Result;
use std::collections::{HashMap, HashSet};
use time::{Date, Duration, Month, OffsetDateTime, Time};
-use atuin_client::{database::Database, settings::Settings, theme::Theme};
+use crate::atuin_client::{database::Database, settings::Settings, theme::Theme};
-use atuin_history::stats::{Stats, compute};
+use crate::atuin_history::stats::{Stats, compute};
#[derive(Debug)]
struct WrappedStats {
@@ -20,7 +20,11 @@ struct WrappedStats {
impl WrappedStats {
#[expect(clippy::too_many_lines, clippy::cast_precision_loss)]
- fn new(settings: &Settings, stats: &Stats, history: &[atuin_client::history::History]) -> Self {
+ fn new(
+ settings: &Settings,
+ stats: &Stats,
+ history: &[crate::atuin_client::history::History],
+ ) -> Self {
let nav_commands = stats
.top
.iter()
@@ -313,7 +317,7 @@ pub async fn run(
);
println!("Your Top Commands:");
- atuin_history::stats::pretty_print(stats.clone(), 1, theme);
+ crate::atuin_history::stats::pretty_print(stats.clone(), 1, theme);
println!();
print_fun_facts(&wrapped_stats, &stats, year);
diff --git a/crates/atuin/src/command/contributors.rs b/crates/turtle/src/command/contributors.rs
index 452fd335..452fd335 100644
--- a/crates/atuin/src/command/contributors.rs
+++ b/crates/turtle/src/command/contributors.rs
diff --git a/crates/atuin/src/command/external.rs b/crates/turtle/src/command/external.rs
index 5d875e9d..e1f0cddd 100644
--- a/crates/atuin/src/command/external.rs
+++ b/crates/turtle/src/command/external.rs
@@ -3,7 +3,7 @@ use std::process::Command;
use std::{io, process};
#[cfg(feature = "client")]
-use atuin_client::plugin::{OfficialPluginRegistry, PluginContext};
+use crate::atuin_client::plugin::{OfficialPluginRegistry, PluginContext};
use clap::CommandFactory;
use clap::builder::{StyledStr, Styles};
use eyre::Result;
diff --git a/crates/atuin/src/command/gen_completions.rs b/crates/turtle/src/command/gen_completions.rs
index 10d4f689..10d4f689 100644
--- a/crates/atuin/src/command/gen_completions.rs
+++ b/crates/turtle/src/command/gen_completions.rs
diff --git a/crates/atuin/src/command/mod.rs b/crates/turtle/src/command/mod.rs
index 8aac4062..e58bfe72 100644
--- a/crates/atuin/src/command/mod.rs
+++ b/crates/turtle/src/command/mod.rs
@@ -24,7 +24,7 @@ pub enum AtuinCmd {
/// PTY proxy for atuin
#[cfg(feature = "pty-proxy")]
#[command(alias = "hex")]
- PtyProxy(atuin_pty_proxy::PtyProxy),
+ PtyProxy(crate::atuin_pty_proxy::PtyProxy),
/// Generate a UUID
Uuid,
@@ -63,7 +63,7 @@ impl AtuinCmd {
Ok(())
}
Self::Uuid => {
- println!("{}", atuin_common::utils::uuid_v7().as_simple());
+ println!("{}", crate::atuin_common::utils::uuid_v7().as_simple());
Ok(())
}
Self::GenCompletions(gen_completions) => gen_completions.run(),
@@ -73,7 +73,7 @@ impl AtuinCmd {
}
#[cfg(all(feature = "pty-proxy", unix))]
-fn run_pty_proxy(proxy: atuin_pty_proxy::PtyProxy) {
+fn run_pty_proxy(proxy: crate::atuin_pty_proxy::PtyProxy) {
#[cfg(feature = "daemon")]
proxy.run(semantic_command_capture_sink());
@@ -81,14 +81,8 @@ fn run_pty_proxy(proxy: atuin_pty_proxy::PtyProxy) {
proxy.run(None);
}
-#[cfg(all(feature = "pty-proxy", not(unix)))]
-fn run_pty_proxy(_proxy: atuin_pty_proxy::PtyProxy) {
- eprintln!("atuin pty-proxy currently supports unix platforms");
- std::process::exit(1);
-}
-
#[cfg(all(feature = "daemon", feature = "pty-proxy", unix))]
-fn semantic_command_capture_sink() -> Option<atuin_pty_proxy::CommandCaptureSink> {
+fn semantic_command_capture_sink() -> Option<crate::atuin_pty_proxy::CommandCaptureSink> {
use std::sync::mpsc;
use std::time::Duration;
@@ -96,8 +90,8 @@ fn semantic_command_capture_sink() -> Option<atuin_pty_proxy::CommandCaptureSink
return None;
}
- let settings = atuin_client::settings::Settings::new().ok()?;
- let (tx, rx) = mpsc::sync_channel::<atuin_pty_proxy::CommandCapture>(128);
+ let settings = crate::atuin_client::settings::Settings::new().ok()?;
+ let (tx, rx) = mpsc::sync_channel::<crate::atuin_pty_proxy::CommandCapture>(128);
std::thread::spawn(move || {
let Ok(runtime) = tokio::runtime::Builder::new_current_thread()
@@ -139,12 +133,12 @@ fn is_truthy_env(name: &str) -> bool {
#[cfg(all(feature = "daemon", feature = "pty-proxy", unix))]
async fn send_semantic_command_captures(
- settings: &atuin_client::settings::Settings,
- batch: Vec<atuin_pty_proxy::CommandCapture>,
+ settings: &crate::atuin_client::settings::Settings,
+ batch: Vec<crate::atuin_pty_proxy::CommandCapture>,
) {
let captures = batch
.into_iter()
- .map(|capture| atuin_daemon::semantic::CommandCapture {
+ .map(|capture| crate::atuin_daemon::semantic::CommandCapture {
prompt: capture.prompt,
command: capture.command,
output: capture.output,
@@ -156,7 +150,7 @@ async fn send_semantic_command_captures(
})
.collect();
- if let Ok(mut client) = atuin_daemon::SemanticClient::from_settings(settings).await {
+ if let Ok(mut client) = crate::atuin_daemon::SemanticClient::from_settings(settings).await {
let _ = client.record_commands(captures).await;
}
}