aboutsummaryrefslogtreecommitdiffstats
path: root/crates/atuin-client/src
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/atuin-client/src
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 '')
-rw-r--r--crates/turtle/src/atuin_client/api_client.rs (renamed from crates/atuin-client/src/api_client.rs)7
-rw-r--r--crates/turtle/src/atuin_client/auth.rs (renamed from crates/atuin-client/src/auth.rs)29
-rw-r--r--crates/turtle/src/atuin_client/database.rs (renamed from crates/atuin-client/src/database.rs)9
-rw-r--r--crates/turtle/src/atuin_client/distro.rs (renamed from crates/atuin-client/src/distro.rs)0
-rw-r--r--crates/turtle/src/atuin_client/encryption.rs (renamed from crates/atuin-client/src/encryption.rs)2
-rw-r--r--crates/turtle/src/atuin_client/history.rs (renamed from crates/atuin-client/src/history.rs)26
-rw-r--r--crates/turtle/src/atuin_client/history/builder.rs (renamed from crates/atuin-client/src/history/builder.rs)0
-rw-r--r--crates/turtle/src/atuin_client/history/store.rs (renamed from crates/atuin-client/src/history/store.rs)9
-rw-r--r--crates/turtle/src/atuin_client/import/bash.rs (renamed from crates/atuin-client/src/import/bash.rs)9
-rw-r--r--crates/turtle/src/atuin_client/import/fish.rs (renamed from crates/atuin-client/src/import/fish.rs)4
-rw-r--r--crates/turtle/src/atuin_client/import/mod.rs (renamed from crates/atuin-client/src/import/mod.rs)2
-rw-r--r--crates/turtle/src/atuin_client/import/nu.rs (renamed from crates/atuin-client/src/import/nu.rs)4
-rw-r--r--crates/turtle/src/atuin_client/import/nu_histdb.rs (renamed from crates/atuin-client/src/import/nu_histdb.rs)4
-rw-r--r--crates/turtle/src/atuin_client/import/powershell.rs (renamed from crates/atuin-client/src/import/powershell.rs)4
-rw-r--r--crates/turtle/src/atuin_client/import/replxx.rs (renamed from crates/atuin-client/src/import/replxx.rs)4
-rw-r--r--crates/turtle/src/atuin_client/import/resh.rs (renamed from crates/atuin-client/src/import/resh.rs)6
-rw-r--r--crates/turtle/src/atuin_client/import/xonsh.rs (renamed from crates/atuin-client/src/import/xonsh.rs)4
-rw-r--r--crates/turtle/src/atuin_client/import/xonsh_sqlite.rs (renamed from crates/atuin-client/src/import/xonsh_sqlite.rs)4
-rw-r--r--crates/turtle/src/atuin_client/import/zsh.rs (renamed from crates/atuin-client/src/import/zsh.rs)4
-rw-r--r--crates/turtle/src/atuin_client/import/zsh_histdb.rs (renamed from crates/atuin-client/src/import/zsh_histdb.rs)8
-rw-r--r--crates/turtle/src/atuin_client/login.rs (renamed from crates/atuin-client/src/login.rs)4
-rw-r--r--crates/turtle/src/atuin_client/logout.rs (renamed from crates/atuin-client/src/logout.rs)2
-rw-r--r--crates/turtle/src/atuin_client/meta.rs (renamed from crates/atuin-client/src/meta.rs)7
-rw-r--r--crates/turtle/src/atuin_client/mod.rs (renamed from crates/atuin-client/src/lib.rs)5
-rw-r--r--crates/turtle/src/atuin_client/ordering.rs (renamed from crates/atuin-client/src/ordering.rs)0
-rw-r--r--crates/turtle/src/atuin_client/plugin.rs (renamed from crates/atuin-client/src/plugin.rs)0
-rw-r--r--crates/turtle/src/atuin_client/record/encryption.rs (renamed from crates/atuin-client/src/record/encryption.rs)4
-rw-r--r--crates/turtle/src/atuin_client/record/mod.rs (renamed from crates/atuin-client/src/record/mod.rs)0
-rw-r--r--crates/turtle/src/atuin_client/record/sqlite_store.rs (renamed from crates/atuin-client/src/record/sqlite_store.rs)7
-rw-r--r--crates/turtle/src/atuin_client/record/store.rs (renamed from crates/atuin-client/src/record/store.rs)2
-rw-r--r--crates/turtle/src/atuin_client/record/sync.rs (renamed from crates/atuin-client/src/record/sync.rs)15
-rw-r--r--crates/turtle/src/atuin_client/register.rs (renamed from crates/atuin-client/src/register.rs)4
-rw-r--r--crates/turtle/src/atuin_client/secrets.rs (renamed from crates/atuin-client/src/secrets.rs)0
-rw-r--r--crates/turtle/src/atuin_client/settings.rs (renamed from crates/atuin-client/src/settings.rs)46
-rw-r--r--crates/turtle/src/atuin_client/settings/meta.rs (renamed from crates/atuin-client/src/settings/meta.rs)2
-rw-r--r--crates/turtle/src/atuin_client/settings/watcher.rs (renamed from crates/atuin-client/src/settings/watcher.rs)4
-rw-r--r--crates/turtle/src/atuin_client/sync.rs (renamed from crates/atuin-client/src/sync.rs)5
-rw-r--r--crates/turtle/src/atuin_client/theme.rs (renamed from crates/atuin-client/src/theme.rs)4
-rw-r--r--crates/turtle/src/atuin_client/utils.rs (renamed from crates/atuin-client/src/utils.rs)0
39 files changed, 121 insertions, 129 deletions
diff --git a/crates/atuin-client/src/api_client.rs b/crates/turtle/src/atuin_client/api_client.rs
index ca2fc661..7955c2da 100644
--- a/crates/atuin-client/src/api_client.rs
+++ b/crates/turtle/src/atuin_client/api_client.rs
@@ -7,13 +7,14 @@ use reqwest::{
Response, StatusCode, Url,
header::{AUTHORIZATION, HeaderMap, USER_AGENT},
};
+use tracing::debug;
-use atuin_common::{
+use crate::atuin_common::{
api::{ATUIN_CARGO_VERSION, ATUIN_HEADER_VERSION, ATUIN_VERSION},
record::{EncryptedData, HostId, Record, RecordIdx},
tls::ensure_crypto_provider,
};
-use atuin_common::{
+use crate::atuin_common::{
api::{
AddHistoryRequest, ChangePasswordRequest, CountResponse, DeleteHistoryRequest,
ErrorResponse, LoginRequest, LoginResponse, MeResponse, RegisterResponse, StatusResponse,
@@ -26,7 +27,7 @@ use semver::Version;
use time::OffsetDateTime;
use time::format_description::well_known::Rfc3339;
-use crate::{history::History, sync::hash_str, utils::get_host_user};
+use crate::atuin_client::{history::History, sync::hash_str, utils::get_host_user};
static APP_USER_AGENT: &str = concat!("atuin/", env!("CARGO_PKG_VERSION"),);
diff --git a/crates/atuin-client/src/auth.rs b/crates/turtle/src/atuin_client/auth.rs
index 1031c11f..b770c488 100644
--- a/crates/atuin-client/src/auth.rs
+++ b/crates/turtle/src/atuin_client/auth.rs
@@ -2,12 +2,15 @@ use async_trait::async_trait;
use eyre::{Context, Result, bail};
use reqwest::{Url, header::USER_AGENT};
-use atuin_common::{
- api::{ATUIN_CARGO_VERSION, ATUIN_HEADER_VERSION, ChangePasswordRequest, LoginRequest},
- tls::ensure_crypto_provider,
+use crate::{
+ atuin_client::api_client,
+ atuin_common::{
+ api::{ATUIN_CARGO_VERSION, ATUIN_HEADER_VERSION, ChangePasswordRequest, LoginRequest},
+ tls::ensure_crypto_provider,
+ },
};
-use crate::settings::Settings;
+use crate::atuin_client::settings::Settings;
static APP_USER_AGENT: &str = concat!("atuin/", env!("CARGO_PKG_VERSION"));
@@ -42,12 +45,7 @@ pub enum MutateResponse {
#[async_trait]
pub trait AuthClient: Send + Sync {
/// Log in with username + password, optionally providing a TOTP code.
- async fn login(
- &self,
- username: &str,
- password: &str,
- totp_code: Option<&str>,
- ) -> Result<AuthResponse>;
+ async fn login(&self, username: &str, password: &str) -> Result<AuthResponse>;
/// Register a new account.
async fn register(&self, username: &str, email: &str, password: &str) -> Result<AuthResponse>;
@@ -129,14 +127,9 @@ impl LegacyAuthClient {
#[async_trait]
impl AuthClient for LegacyAuthClient {
- async fn login(
- &self,
- username: &str,
- password: &str,
- _totp_code: Option<&str>,
- ) -> Result<AuthResponse> {
+ async fn login(&self, username: &str, password: &str) -> Result<AuthResponse> {
// The legacy server has no 2FA support; totp_code is ignored.
- let resp = crate::api_client::login(
+ let resp = api_client::login(
&self.address,
LoginRequest {
username: username.to_string(),
@@ -152,7 +145,7 @@ impl AuthClient for LegacyAuthClient {
}
async fn register(&self, username: &str, email: &str, password: &str) -> Result<AuthResponse> {
- let resp = crate::api_client::register(&self.address, username, email, password).await?;
+ let resp = api_client::register(&self.address, username, email, password).await?;
Ok(AuthResponse::Success {
session: resp.session,
auth_type: resp.auth.or(Some("cli".into())),
diff --git a/crates/atuin-client/src/database.rs b/crates/turtle/src/atuin_client/database.rs
index 946c1eb0..75b1200c 100644
--- a/crates/atuin-client/src/database.rs
+++ b/crates/turtle/src/atuin_client/database.rs
@@ -5,9 +5,9 @@ use std::{
time::Duration,
};
-use crate::history::{AUTHOR_FILTER_ALL_AGENT, AUTHOR_FILTER_ALL_USER, KNOWN_AGENTS};
+use crate::atuin_client::history::{AUTHOR_FILTER_ALL_AGENT, AUTHOR_FILTER_ALL_USER, KNOWN_AGENTS};
+use crate::atuin_common::utils;
use async_trait::async_trait;
-use atuin_common::utils;
use fs_err as fs;
use itertools::Itertools;
use rand::{Rng, distributions::Alphanumeric};
@@ -20,9 +20,10 @@ use sqlx::{
},
};
use time::OffsetDateTime;
+use tracing::debug;
use uuid::Uuid;
-use crate::{
+use crate::atuin_client::{
history::{HistoryId, HistoryStats},
utils::get_host_user,
};
@@ -969,7 +970,7 @@ impl SqlBuilderExt for SqlBuilder {
#[cfg(test)]
mod test {
- use crate::settings::test_local_timeout;
+ use crate::atuin_client::settings::test_local_timeout;
use super::*;
use std::time::{Duration, Instant};
diff --git a/crates/atuin-client/src/distro.rs b/crates/turtle/src/atuin_client/distro.rs
index dead8355..dead8355 100644
--- a/crates/atuin-client/src/distro.rs
+++ b/crates/turtle/src/atuin_client/distro.rs
diff --git a/crates/atuin-client/src/encryption.rs b/crates/turtle/src/atuin_client/encryption.rs
index f2032482..20a0cd90 100644
--- a/crates/atuin-client/src/encryption.rs
+++ b/crates/turtle/src/atuin_client/encryption.rs
@@ -22,7 +22,7 @@ use rmp::{Marker, decode::Bytes};
use serde::{Deserialize, Serialize};
use time::{OffsetDateTime, format_description::well_known::Rfc3339, macros::format_description};
-use crate::{history::History, settings::Settings};
+use crate::atuin_client::{history::History, settings::Settings};
#[derive(Debug, Serialize, Deserialize)]
pub struct EncryptedHistory {
diff --git a/crates/atuin-client/src/history.rs b/crates/turtle/src/atuin_client/history.rs
index aa0d84d5..cef65115 100644
--- a/crates/atuin-client/src/history.rs
+++ b/crates/turtle/src/atuin_client/history.rs
@@ -5,14 +5,14 @@ use rmp::{Marker, decode::Bytes};
use std::env;
use std::fmt::Display;
-use atuin_common::record::DecryptedData;
-use atuin_common::utils::uuid_v7;
+use crate::atuin_common::record::DecryptedData;
+use crate::atuin_common::utils::uuid_v7;
use eyre::{Result, bail, eyre};
-use crate::secrets::SECRET_PATTERNS_RE;
-use crate::settings::Settings;
-use crate::utils::get_host_user;
+use crate::atuin_client::secrets::SECRET_PATTERNS_RE;
+use crate::atuin_client::settings::Settings;
+use crate::atuin_client::utils::get_host_user;
use time::OffsetDateTime;
mod builder;
@@ -381,7 +381,7 @@ impl History {
///
/// ## Examples
/// ```
- /// use atuin_client::history::History;
+ /// use crate::atuin_client::history::History;
///
/// let history: History = History::import()
/// .timestamp(time::OffsetDateTime::now_utc())
@@ -392,7 +392,7 @@ impl History {
///
/// If shell history contains more information, it can be added to the builder:
/// ```
- /// use atuin_client::history::History;
+ /// use crate::atuin_client::history::History;
///
/// let history: History = History::import()
/// .timestamp(time::OffsetDateTime::now_utc())
@@ -408,7 +408,7 @@ impl History {
/// is forced at compile time:
///
/// ```compile_fail
- /// use atuin_client::history::History;
+ /// use crate::atuin_client::history::History;
///
/// // this will not compile because timestamp is missing
/// let history: History = History::import()
@@ -428,7 +428,7 @@ impl History {
///
/// ## Examples
/// ```rust
- /// use atuin_client::history::History;
+ /// use crate::atuin_client::history::History;
///
/// let history: History = History::capture()
/// .timestamp(time::OffsetDateTime::now_utc())
@@ -441,7 +441,7 @@ impl History {
/// Command without any required info cannot be captured, which is forced at compile time:
///
/// ```compile_fail
- /// use atuin_client::history::History;
+ /// use crate::atuin_client::history::History;
///
/// // this will not compile because `cwd` is missing
/// let history: History = History::capture()
@@ -466,7 +466,7 @@ impl History {
///
/// ## Examples
/// ```rust
- /// use atuin_client::history::History;
+ /// use crate::atuin_client::history::History;
///
/// let history: History = History::daemon()
/// .timestamp(time::OffsetDateTime::now_utc())
@@ -481,7 +481,7 @@ impl History {
/// Command without any required info cannot be captured, which is forced at compile time:
///
/// ```compile_fail
- /// use atuin_client::history::History;
+ /// use crate::atuin_client::history::History;
///
/// // this will not compile because `hostname` is missing
/// let history: History = History::daemon()
@@ -501,7 +501,7 @@ impl History {
/// All fields are required, as they are all present in the database.
///
/// ```compile_fail
- /// use atuin_client::history::History;
+ /// use crate::atuin_client::history::History;
///
/// // this will not compile because `id` field is missing
/// let history: History = History::from_db()
diff --git a/crates/atuin-client/src/history/builder.rs b/crates/turtle/src/atuin_client/history/builder.rs
index 72a505fd..72a505fd 100644
--- a/crates/atuin-client/src/history/builder.rs
+++ b/crates/turtle/src/atuin_client/history/builder.rs
diff --git a/crates/atuin-client/src/history/store.rs b/crates/turtle/src/atuin_client/history/store.rs
index ce7b43a1..66d9db47 100644
--- a/crates/atuin-client/src/history/store.rs
+++ b/crates/turtle/src/atuin_client/history/store.rs
@@ -3,12 +3,13 @@ use std::{collections::HashSet, fmt::Write, time::Duration};
use eyre::{Result, bail, eyre};
use indicatif::{ProgressBar, ProgressState, ProgressStyle};
use rmp::decode::Bytes;
+use tracing::debug;
-use crate::{
+use crate::atuin_client::{
database::{Database, current_context},
record::{encryption::PASETO_V4, sqlite_store::SqliteStore, store::Store},
};
-use atuin_common::record::{DecryptedData, Host, HostId, Record, RecordId, RecordIdx};
+use crate::atuin_common::record::{DecryptedData, Host, HostId, Record, RecordId, RecordIdx};
use super::{HISTORY_TAG, HISTORY_VERSION, HISTORY_VERSION_V0, History, HistoryId};
@@ -361,10 +362,10 @@ impl HistoryStore {
#[cfg(test)]
mod tests {
- use atuin_common::record::DecryptedData;
+ use crate::atuin_common::record::DecryptedData;
use time::macros::datetime;
- use crate::history::{HISTORY_VERSION, store::HistoryRecord};
+ use crate::atuin_client::history::{HISTORY_VERSION, store::HistoryRecord};
use super::History;
diff --git a/crates/atuin-client/src/import/bash.rs b/crates/turtle/src/atuin_client/import/bash.rs
index 99a44a58..d92fdfa0 100644
--- a/crates/atuin-client/src/import/bash.rs
+++ b/crates/turtle/src/atuin_client/import/bash.rs
@@ -5,10 +5,11 @@ use directories::UserDirs;
use eyre::{Result, eyre};
use itertools::Itertools;
use time::{Duration, OffsetDateTime};
+use tracing::warn;
use super::{Importer, Loader, get_histfile_path, unix_byte_lines};
-use crate::history::History;
-use crate::import::read_to_end;
+use crate::atuin_client::history::History;
+use crate::atuin_client::import::read_to_end;
#[derive(Debug)]
pub struct Bash {
@@ -130,7 +131,7 @@ mod test {
use itertools::{Itertools, assert_equal};
- use crate::import::{Importer, tests::TestLoader};
+ use crate::atuin_client::import::{Importer, tests::TestLoader};
use super::Bash;
@@ -183,7 +184,7 @@ cd ../
);
assert_equal(
loader.buf.iter().map(|h| h.timestamp.unix_timestamp()),
- [1672918999, 1672919006, 1672919020],
+ [1_672_918_999, 1_672_919_006, 1_672_919_020],
)
}
diff --git a/crates/atuin-client/src/import/fish.rs b/crates/turtle/src/atuin_client/import/fish.rs
index 9fcf624c..1375bdd6 100644
--- a/crates/atuin-client/src/import/fish.rs
+++ b/crates/turtle/src/atuin_client/import/fish.rs
@@ -9,8 +9,8 @@ use eyre::{Result, eyre};
use time::OffsetDateTime;
use super::{Importer, Loader, unix_byte_lines};
-use crate::history::History;
-use crate::import::read_to_end;
+use crate::atuin_client::history::History;
+use crate::atuin_client::import::read_to_end;
#[derive(Debug)]
pub struct Fish {
diff --git a/crates/atuin-client/src/import/mod.rs b/crates/turtle/src/atuin_client/import/mod.rs
index 4a1c6af6..7726ead7 100644
--- a/crates/atuin-client/src/import/mod.rs
+++ b/crates/turtle/src/atuin_client/import/mod.rs
@@ -6,7 +6,7 @@ use async_trait::async_trait;
use eyre::{Result, bail};
use memchr::Memchr;
-use crate::history::History;
+use crate::atuin_client::history::History;
pub mod bash;
pub mod fish;
diff --git a/crates/atuin-client/src/import/nu.rs b/crates/turtle/src/atuin_client/import/nu.rs
index cae90ac4..c93789b8 100644
--- a/crates/atuin-client/src/import/nu.rs
+++ b/crates/turtle/src/atuin_client/import/nu.rs
@@ -9,8 +9,8 @@ use eyre::{Result, eyre};
use time::OffsetDateTime;
use super::{Importer, Loader, unix_byte_lines};
-use crate::history::History;
-use crate::import::read_to_end;
+use crate::atuin_client::history::History;
+use crate::atuin_client::import::read_to_end;
#[derive(Debug)]
pub struct Nu {
diff --git a/crates/atuin-client/src/import/nu_histdb.rs b/crates/turtle/src/atuin_client/import/nu_histdb.rs
index a13cb2b4..7de18369 100644
--- a/crates/atuin-client/src/import/nu_histdb.rs
+++ b/crates/turtle/src/atuin_client/import/nu_histdb.rs
@@ -10,8 +10,8 @@ use sqlx::{Pool, sqlite::SqlitePool};
use time::{Duration, OffsetDateTime};
use super::Importer;
-use crate::history::History;
-use crate::import::Loader;
+use crate::atuin_client::history::History;
+use crate::atuin_client::import::Loader;
#[derive(sqlx::FromRow, Debug)]
pub struct HistDbEntry {
diff --git a/crates/atuin-client/src/import/powershell.rs b/crates/turtle/src/atuin_client/import/powershell.rs
index 86fd007d..8adcc850 100644
--- a/crates/atuin-client/src/import/powershell.rs
+++ b/crates/turtle/src/atuin_client/import/powershell.rs
@@ -5,8 +5,8 @@ use std::path::PathBuf;
use time::{Duration, OffsetDateTime};
use super::{Importer, Loader, count_lines, unix_byte_lines};
-use crate::history::History;
-use crate::import::read_to_end;
+use crate::atuin_client::history::History;
+use crate::atuin_client::import::read_to_end;
#[derive(Debug)]
pub struct PowerShell {
diff --git a/crates/atuin-client/src/import/replxx.rs b/crates/turtle/src/atuin_client/import/replxx.rs
index 47d566cf..42f84df5 100644
--- a/crates/atuin-client/src/import/replxx.rs
+++ b/crates/turtle/src/atuin_client/import/replxx.rs
@@ -6,8 +6,8 @@ use eyre::{Result, eyre};
use time::{OffsetDateTime, PrimitiveDateTime, macros::format_description};
use super::{Importer, Loader, get_histfile_path, unix_byte_lines};
-use crate::history::History;
-use crate::import::read_to_end;
+use crate::atuin_client::history::History;
+use crate::atuin_client::import::read_to_end;
#[derive(Debug)]
pub struct Replxx {
diff --git a/crates/atuin-client/src/import/resh.rs b/crates/turtle/src/atuin_client/import/resh.rs
index df15f5b4..c5980c44 100644
--- a/crates/atuin-client/src/import/resh.rs
+++ b/crates/turtle/src/atuin_client/import/resh.rs
@@ -5,12 +5,12 @@ use directories::UserDirs;
use eyre::{Result, eyre};
use serde::Deserialize;
-use atuin_common::utils::uuid_v7;
+use crate::atuin_common::utils::uuid_v7;
use time::OffsetDateTime;
use super::{Importer, Loader, get_histfile_path, unix_byte_lines};
-use crate::history::History;
-use crate::import::read_to_end;
+use crate::atuin_client::history::History;
+use crate::atuin_client::import::read_to_end;
#[derive(Deserialize, Debug)]
#[serde(rename_all = "camelCase")]
diff --git a/crates/atuin-client/src/import/xonsh.rs b/crates/turtle/src/atuin_client/import/xonsh.rs
index 6f38de68..a7217826 100644
--- a/crates/atuin-client/src/import/xonsh.rs
+++ b/crates/turtle/src/atuin_client/import/xonsh.rs
@@ -11,8 +11,8 @@ use uuid::Uuid;
use uuid::timestamp::{Timestamp, context::NoContext};
use super::{Importer, Loader, get_histdir_path};
-use crate::history::History;
-use crate::utils::get_host_user;
+use crate::atuin_client::history::History;
+use crate::atuin_client::utils::get_host_user;
// Note: both HistoryFile and HistoryData have other keys present in the JSON, we don't
// care about them so we leave them unspecified so as to avoid deserializing unnecessarily.
diff --git a/crates/atuin-client/src/import/xonsh_sqlite.rs b/crates/turtle/src/atuin_client/import/xonsh_sqlite.rs
index 7d50ac84..ceedf7e9 100644
--- a/crates/atuin-client/src/import/xonsh_sqlite.rs
+++ b/crates/turtle/src/atuin_client/import/xonsh_sqlite.rs
@@ -11,8 +11,8 @@ use uuid::Uuid;
use uuid::timestamp::{Timestamp, context::NoContext};
use super::{Importer, Loader, get_histfile_path};
-use crate::history::History;
-use crate::utils::get_host_user;
+use crate::atuin_client::history::History;
+use crate::atuin_client::utils::get_host_user;
#[derive(Debug, FromRow)]
struct HistDbEntry {
diff --git a/crates/atuin-client/src/import/zsh.rs b/crates/turtle/src/atuin_client/import/zsh.rs
index 11e2f371..e1fd813a 100644
--- a/crates/atuin-client/src/import/zsh.rs
+++ b/crates/turtle/src/atuin_client/import/zsh.rs
@@ -10,8 +10,8 @@ use eyre::{Result, eyre};
use time::OffsetDateTime;
use super::{Importer, Loader, get_histfile_path, unix_byte_lines};
-use crate::history::History;
-use crate::import::read_to_end;
+use crate::atuin_client::history::History;
+use crate::atuin_client::import::read_to_end;
#[derive(Debug)]
pub struct Zsh {
diff --git a/crates/atuin-client/src/import/zsh_histdb.rs b/crates/turtle/src/atuin_client/import/zsh_histdb.rs
index bf44c3ad..f61bb74f 100644
--- a/crates/atuin-client/src/import/zsh_histdb.rs
+++ b/crates/turtle/src/atuin_client/import/zsh_histdb.rs
@@ -36,16 +36,16 @@ use std::collections::HashMap;
use std::path::{Path, PathBuf};
use async_trait::async_trait;
-use atuin_common::utils::uuid_v7;
+use crate::atuin_common::utils::uuid_v7;
use directories::UserDirs;
use eyre::{Result, eyre};
use sqlx::{Pool, sqlite::SqlitePool};
use time::PrimitiveDateTime;
use super::Importer;
-use crate::history::History;
-use crate::import::Loader;
-use crate::utils::{get_hostname, get_username};
+use crate::atuin_client::history::History;
+use crate::atuin_client::import::Loader;
+use crate::atuin_client::utils::{get_hostname, get_username};
#[derive(sqlx::FromRow, Debug)]
pub struct HistDbEntryCount {
diff --git a/crates/atuin-client/src/login.rs b/crates/turtle/src/atuin_client/login.rs
index 2545e890..ca4e16fe 100644
--- a/crates/atuin-client/src/login.rs
+++ b/crates/turtle/src/atuin_client/login.rs
@@ -1,11 +1,11 @@
use std::path::PathBuf;
-use atuin_common::api::LoginRequest;
+use crate::atuin_common::api::LoginRequest;
use eyre::{Context, Result, bail};
use tokio::fs::File;
use tokio::io::AsyncWriteExt;
-use crate::{
+use crate::atuin_client::{
api_client,
encryption::{decode_key, load_key},
record::{sqlite_store::SqliteStore, store::Store},
diff --git a/crates/atuin-client/src/logout.rs b/crates/turtle/src/atuin_client/logout.rs
index f720b302..343934b9 100644
--- a/crates/atuin-client/src/logout.rs
+++ b/crates/turtle/src/atuin_client/logout.rs
@@ -1,6 +1,6 @@
use eyre::Result;
-use crate::settings::Settings;
+use crate::atuin_client::settings::Settings;
pub async fn logout() -> Result<()> {
let meta = Settings::meta_store().await?;
diff --git a/crates/atuin-client/src/meta.rs b/crates/turtle/src/atuin_client/meta.rs
index 870f36d0..1eea7061 100644
--- a/crates/atuin-client/src/meta.rs
+++ b/crates/turtle/src/atuin_client/meta.rs
@@ -2,11 +2,12 @@ use std::path::Path;
use std::str::FromStr;
use std::time::Duration;
-use atuin_common::record::HostId;
+use crate::atuin_common::record::HostId;
use eyre::{Result, eyre};
use sqlx::sqlite::{SqliteConnectOptions, SqliteJournalMode, SqlitePool, SqlitePoolOptions};
use time::{OffsetDateTime, format_description::well_known::Rfc3339};
use tokio::sync::OnceCell;
+use tracing::{debug, warn};
use uuid::Uuid;
// Filenames for the legacy plain-text files that we migrate from.
@@ -125,7 +126,7 @@ impl MetaStore {
return Ok(HostId(parsed));
}
- let uuid = atuin_common::utils::uuid_v7();
+ let uuid = crate::atuin_common::utils::uuid_v7();
self.set(KEY_HOST_ID, uuid.as_simple().to_string().as_ref())
.await?;
@@ -197,7 +198,7 @@ impl MetaStore {
return Ok(());
}
- let data_dir = crate::settings::Settings::effective_data_dir();
+ let data_dir = crate::atuin_client::settings::Settings::effective_data_dir();
// host_id — validate as UUID
let host_id_path = data_dir.join(LEGACY_HOST_ID_FILENAME);
diff --git a/crates/atuin-client/src/lib.rs b/crates/turtle/src/atuin_client/mod.rs
index cd7785e1..7f07f2e2 100644
--- a/crates/atuin-client/src/lib.rs
+++ b/crates/turtle/src/atuin_client/mod.rs
@@ -1,8 +1,3 @@
-#![deny(unsafe_code)]
-
-#[macro_use]
-extern crate log;
-
#[cfg(feature = "sync")]
pub mod api_client;
#[cfg(feature = "sync")]
diff --git a/crates/atuin-client/src/ordering.rs b/crates/turtle/src/atuin_client/ordering.rs
index 4e5ec84c..4e5ec84c 100644
--- a/crates/atuin-client/src/ordering.rs
+++ b/crates/turtle/src/atuin_client/ordering.rs
diff --git a/crates/atuin-client/src/plugin.rs b/crates/turtle/src/atuin_client/plugin.rs
index 6f351bf1..6f351bf1 100644
--- a/crates/atuin-client/src/plugin.rs
+++ b/crates/turtle/src/atuin_client/plugin.rs
diff --git a/crates/atuin-client/src/record/encryption.rs b/crates/turtle/src/atuin_client/record/encryption.rs
index 1e94d967..22dcdec3 100644
--- a/crates/atuin-client/src/record/encryption.rs
+++ b/crates/turtle/src/atuin_client/record/encryption.rs
@@ -1,4 +1,4 @@
-use atuin_common::record::{
+use crate::atuin_common::record::{
AdditionalData, DecryptedData, EncryptedData, Encryption, HostId, RecordId, RecordIdx,
};
use base64::{Engine, engine::general_purpose};
@@ -197,7 +197,7 @@ impl Assertions<'_> {
#[cfg(test)]
mod tests {
- use atuin_common::{
+ use crate::atuin_common::{
record::{Host, Record},
utils::uuid_v7,
};
diff --git a/crates/atuin-client/src/record/mod.rs b/crates/turtle/src/atuin_client/record/mod.rs
index c40fd395..c40fd395 100644
--- a/crates/atuin-client/src/record/mod.rs
+++ b/crates/turtle/src/atuin_client/record/mod.rs
diff --git a/crates/atuin-client/src/record/sqlite_store.rs b/crates/turtle/src/atuin_client/record/sqlite_store.rs
index ed51f3fd..5fab999d 100644
--- a/crates/atuin-client/src/record/sqlite_store.rs
+++ b/crates/turtle/src/atuin_client/record/sqlite_store.rs
@@ -13,11 +13,12 @@ use sqlx::{
Row,
sqlite::{SqliteConnectOptions, SqliteJournalMode, SqlitePool, SqlitePoolOptions, SqliteRow},
};
+use tracing::debug;
-use atuin_common::record::{
+use crate::atuin_common::record::{
EncryptedData, Host, HostId, Record, RecordId, RecordIdx, RecordStatus,
};
-use atuin_common::utils;
+use crate::atuin_common::utils;
use uuid::Uuid;
use super::encryption::PASETO_V4;
@@ -371,7 +372,7 @@ impl Store for SqliteStore {
#[cfg(test)]
mod tests {
- use atuin_common::{
+ use crate::atuin_common::{
record::{DecryptedData, EncryptedData, Host, HostId, Record},
utils::uuid_v7,
};
diff --git a/crates/atuin-client/src/record/store.rs b/crates/turtle/src/atuin_client/record/store.rs
index 49ca4968..f99085d0 100644
--- a/crates/atuin-client/src/record/store.rs
+++ b/crates/turtle/src/atuin_client/record/store.rs
@@ -1,7 +1,7 @@
use async_trait::async_trait;
use eyre::Result;
-use atuin_common::record::{EncryptedData, HostId, Record, RecordId, RecordIdx, RecordStatus};
+use crate::atuin_common::record::{EncryptedData, HostId, Record, RecordId, RecordIdx, RecordStatus};
/// A record store stores records
/// In more detail - we tend to need to process this into _another_ format to actually query it.
diff --git a/crates/atuin-client/src/record/sync.rs b/crates/turtle/src/atuin_client/record/sync.rs
index b785b5dc..f831570b 100644
--- a/crates/atuin-client/src/record/sync.rs
+++ b/crates/turtle/src/atuin_client/record/sync.rs
@@ -3,11 +3,12 @@ use std::{cmp::Ordering, fmt::Write};
use eyre::Result;
use thiserror::Error;
+use tracing::error;
use super::{encryption::PASETO_V4, store::Store};
-use crate::{api_client::Client, settings::Settings};
+use crate::atuin_client::{api_client::Client, settings::Settings};
-use atuin_common::record::{Diff, HostId, RecordId, RecordIdx, RecordStatus};
+use crate::atuin_common::record::{Diff, HostId, RecordId, RecordIdx, RecordStatus};
use indicatif::{ProgressBar, ProgressState, ProgressStyle};
#[derive(Error, Debug)]
@@ -372,10 +373,10 @@ pub async fn sync(
#[cfg(test)]
mod tests {
- use atuin_common::record::{Diff, EncryptedData, HostId, Record};
+ use crate::atuin_common::record::{Diff, EncryptedData, HostId, Record};
use pretty_assertions::assert_eq;
- use crate::{
+ use crate::atuin_client::{
record::{
encryption::PASETO_V4,
sqlite_store::SqliteStore,
@@ -387,11 +388,11 @@ mod tests {
fn test_record() -> Record<EncryptedData> {
Record::builder()
- .host(atuin_common::record::Host::new(HostId(
- atuin_common::utils::uuid_v7(),
+ .host(crate::atuin_common::record::Host::new(HostId(
+ crate::atuin_common::utils::uuid_v7(),
)))
.version("v1".into())
- .tag(atuin_common::utils::uuid_v7().simple().to_string())
+ .tag(crate::atuin_common::utils::uuid_v7().simple().to_string())
.data(EncryptedData {
data: String::new(),
content_encryption_key: String::new(),
diff --git a/crates/atuin-client/src/register.rs b/crates/turtle/src/atuin_client/register.rs
index ad077dd1..4b14c233 100644
--- a/crates/atuin-client/src/register.rs
+++ b/crates/turtle/src/atuin_client/register.rs
@@ -1,6 +1,6 @@
use eyre::Result;
-use crate::{api_client, settings::Settings};
+use crate::atuin_client::{api_client, settings::Settings};
pub async fn register_classic(
settings: &Settings,
@@ -14,7 +14,7 @@ pub async fn register_classic(
let meta = Settings::meta_store().await?;
meta.save_session(&session.session).await?;
- let _key = crate::encryption::load_key(settings)?;
+ let _key = crate::atuin_client::encryption::load_key(settings)?;
Ok(session.session)
}
diff --git a/crates/atuin-client/src/secrets.rs b/crates/turtle/src/atuin_client/secrets.rs
index e8a6ab62..e8a6ab62 100644
--- a/crates/atuin-client/src/secrets.rs
+++ b/crates/turtle/src/atuin_client/secrets.rs
diff --git a/crates/atuin-client/src/settings.rs b/crates/turtle/src/atuin_client/settings.rs
index 5fb65c17..b0ffc7c1 100644
--- a/crates/atuin-client/src/settings.rs
+++ b/crates/turtle/src/atuin_client/settings.rs
@@ -1,8 +1,8 @@
use std::{collections::HashMap, fmt, io::prelude::*, path::PathBuf, str::FromStr, sync::OnceLock};
use tokio::sync::OnceCell;
-use atuin_common::record::HostId;
-use atuin_common::utils;
+use crate::atuin_common::record::HostId;
+use crate::atuin_common::utils;
use clap::ValueEnum;
use config::{
Config, ConfigBuilder, Environment, File as ConfigFile, FileFormat, builder::DefaultState,
@@ -16,11 +16,10 @@ use serde_with::DeserializeFromStr;
use time::{OffsetDateTime, UtcOffset, format_description::FormatItem, macros::format_description};
pub const HISTORY_PAGE_SIZE: i64 = 100;
-static EXAMPLE_CONFIG: &str = include_str!("../config.toml");
static DATA_DIR: OnceLock<PathBuf> = OnceLock::new();
static META_CONFIG: OnceLock<(String, f64)> = OnceLock::new();
-static META_STORE: OnceCell<crate::meta::MetaStore> = OnceCell::const_new();
+static META_STORE: OnceCell<crate::atuin_client::meta::MetaStore> = OnceCell::const_new();
pub(crate) mod meta;
pub mod watcher;
@@ -374,8 +373,8 @@ impl SyncAuth {
/// Convert into the auth token type used by the API client.
///
/// Returns an error with an actionable message for `NotLoggedIn`.
- pub fn into_auth_token(self) -> Result<crate::api_client::AuthToken> {
- use crate::api_client::AuthToken;
+ pub fn into_auth_token(self) -> Result<crate::atuin_client::api_client::AuthToken> {
+ use crate::atuin_client::api_client::AuthToken;
match self {
SyncAuth::Legacy { token } => Ok(AuthToken::Token(token)),
SyncAuth::NotLoggedIn { reason } => Err(eyre!(reason)),
@@ -1038,7 +1037,6 @@ pub struct Settings {
pub timezone: Timezone,
pub style: Style,
pub auto_sync: bool,
- pub update_check: bool,
/// The sync address for atuin.
pub sync_address: String,
@@ -1144,18 +1142,18 @@ impl Settings {
DATA_DIR
.get()
.cloned()
- .unwrap_or_else(atuin_common::utils::data_dir)
+ .unwrap_or_else(crate::atuin_common::utils::data_dir)
}
// -- Meta store: lazily initialized on first access --
- pub async fn meta_store() -> Result<&'static crate::meta::MetaStore> {
+ pub async fn meta_store() -> Result<&'static crate::atuin_client::meta::MetaStore> {
META_STORE
.get_or_try_init(|| async {
let (db_path, timeout) = META_CONFIG.get().ok_or_else(|| {
eyre!("meta store config not set — Settings::new() has not been called")
})?;
- crate::meta::MetaStore::new(db_path, *timeout).await
+ crate::atuin_client::meta::MetaStore::new(db_path, *timeout).await
})
.await
}
@@ -1240,7 +1238,7 @@ impl Settings {
/// `AuthToken`. Callers that need to distinguish between auth states
/// (e.g. to show different UI) should call `resolve_sync_auth` directly.
#[cfg(feature = "sync")]
- pub async fn sync_auth_token(&self) -> Result<crate::api_client::AuthToken> {
+ pub async fn sync_auth_token(&self) -> Result<crate::atuin_client::api_client::AuthToken> {
self.resolve_sync_auth().await.into_auth_token()
}
@@ -1262,7 +1260,7 @@ impl Settings {
}
pub fn builder() -> Result<ConfigBuilder<DefaultState>> {
- Self::builder_with_data_dir(&atuin_common::utils::data_dir())
+ Self::builder_with_data_dir(&crate::atuin_common::utils::data_dir())
}
fn builder_with_data_dir(data_dir: &std::path::Path) -> Result<ConfigBuilder<DefaultState>> {
@@ -1271,9 +1269,9 @@ impl Settings {
let kv_path = data_dir.join("kv.db");
let scripts_path = data_dir.join("scripts.db");
let ai_sessions_path = data_dir.join("ai_sessions.db");
- let socket_path = atuin_common::utils::runtime_dir().join("atuin.sock");
+ let socket_path = crate::atuin_common::utils::runtime_dir().join("atuin.sock");
let pidfile_path = data_dir.join("atuin-daemon.pid");
- let logs_dir = atuin_common::utils::logs_dir();
+ let logs_dir = crate::atuin_common::utils::logs_dir();
let key_path = data_dir.join("key");
let meta_path = data_dir.join("meta.db");
@@ -1286,7 +1284,6 @@ impl Settings {
.set_default("dialect", "us")?
.set_default("timezone", "local")?
.set_default("auto_sync", true)?
- .set_default("update_check", cfg!(feature = "check-update"))?
.set_default("sync_address", "https://api.atuin.sh")?
.set_default("sync_frequency", "5m")?
.set_default("search_mode", "fuzzy")?
@@ -1390,7 +1387,7 @@ impl Settings {
}
pub fn get_config_path() -> Result<PathBuf> {
- let config_dir = atuin_common::utils::config_dir();
+ let config_dir = crate::atuin_common::utils::config_dir();
create_dir_all(&config_dir)
.wrap_err_with(|| format!("could not create dir {config_dir:?}"))?;
@@ -1447,10 +1444,10 @@ impl Settings {
.map_err(|e| eyre!("failed to expand data_dir path: {}", e))?;
PathBuf::from(expanded.as_ref())
}
- None => atuin_common::utils::data_dir(),
+ None => crate::atuin_common::utils::data_dir(),
}
} else {
- atuin_common::utils::data_dir()
+ crate::atuin_common::utils::data_dir()
};
DATA_DIR.set(effective_data_dir.clone()).ok();
@@ -1467,7 +1464,10 @@ impl Settings {
config_builder.add_source(ConfigFile::new(config_file_str, FileFormat::Toml))
} else {
let mut file = File::create(config_file).wrap_err("could not create config file")?;
- file.write_all(EXAMPLE_CONFIG.as_bytes())
+
+ let config = config_builder.build_cloned()?;
+ // TODO(@bpeetz): Not so sure about this <2026-06-10>
+ file.write_all(config.cache.to_string().as_bytes())
.wrap_err("could not write default config file")?;
config_builder
@@ -1590,10 +1590,6 @@ impl Settings {
.map_err(|e| eyre!("failed to expand path: {}", e))
}
- pub fn example_config() -> &'static str {
- EXAMPLE_CONFIG
- }
-
pub fn paths_ok(&self) -> bool {
let paths = [
&self.db_path,
@@ -1766,7 +1762,7 @@ mod tests {
assert_eq!(meta_db_path, custom_dir.join("meta.db").to_str().unwrap());
assert_eq!(
daemon_socket_path,
- atuin_common::utils::runtime_dir()
+ crate::atuin_common::utils::runtime_dir()
.join("atuin.sock")
.to_str()
.unwrap()
@@ -1783,7 +1779,7 @@ mod tests {
#[test]
fn effective_data_dir_returns_default_when_not_set() {
let effective = super::Settings::effective_data_dir();
- let default = atuin_common::utils::data_dir();
+ let default = crate::atuin_common::utils::data_dir();
assert!(effective.to_str().is_some());
assert!(effective.ends_with("atuin") || effective == default);
diff --git a/crates/atuin-client/src/settings/meta.rs b/crates/turtle/src/atuin_client/settings/meta.rs
index 108d74ec..450d0432 100644
--- a/crates/atuin-client/src/settings/meta.rs
+++ b/crates/turtle/src/atuin_client/settings/meta.rs
@@ -7,7 +7,7 @@ pub struct Settings {
impl Default for Settings {
fn default() -> Self {
- let dir = atuin_common::utils::data_dir();
+ let dir = crate::atuin_common::utils::data_dir();
let path = dir.join("meta.db");
Self {
diff --git a/crates/atuin-client/src/settings/watcher.rs b/crates/turtle/src/atuin_client/settings/watcher.rs
index 740b8d12..7548573e 100644
--- a/crates/atuin-client/src/settings/watcher.rs
+++ b/crates/turtle/src/atuin_client/settings/watcher.rs
@@ -6,7 +6,7 @@
//! # Example
//!
//! ```no_run
-//! use atuin_client::settings::watcher::global_settings_watcher;
+//! use crate::atuin_client::settings::watcher::global_settings_watcher;
//!
//! async fn example() -> eyre::Result<()> {
//! let watcher = global_settings_watcher()?;
@@ -103,7 +103,7 @@ impl SettingsWatcher {
let config_dir = if let Ok(p) = std::env::var("ATUIN_CONFIG_DIR") {
PathBuf::from(p)
} else {
- atuin_common::utils::config_dir()
+ crate::atuin_common::utils::config_dir()
};
config_dir.join("config.toml")
}
diff --git a/crates/atuin-client/src/sync.rs b/crates/turtle/src/atuin_client/sync.rs
index 2c902794..361b6636 100644
--- a/crates/atuin-client/src/sync.rs
+++ b/crates/turtle/src/atuin_client/sync.rs
@@ -2,12 +2,13 @@ use std::collections::HashSet;
use std::iter::FromIterator;
use eyre::Result;
+use tracing::{debug, info};
-use atuin_common::api::AddHistoryRequest;
+use crate::atuin_common::api::AddHistoryRequest;
use crypto_secretbox::Key;
use time::OffsetDateTime;
-use crate::{
+use crate::atuin_client::{
api_client,
database::Database,
encryption::{decrypt, encrypt, load_key},
diff --git a/crates/atuin-client/src/theme.rs b/crates/turtle/src/atuin_client/theme.rs
index a277ac13..1d9c0b9e 100644
--- a/crates/atuin-client/src/theme.rs
+++ b/crates/turtle/src/atuin_client/theme.rs
@@ -395,7 +395,7 @@ impl ThemeManager {
}
PathBuf::from(p)
} else {
- let config_dir = atuin_common::utils::config_dir();
+ let config_dir = crate::atuin_common::utils::config_dir();
let mut theme_file = if let Ok(p) = std::env::var("ATUIN_CONFIG_DIR") {
PathBuf::from(p)
} else {
@@ -407,7 +407,7 @@ impl ThemeManager {
theme_file
};
- let theme_toml = format!["{name}.toml"];
+ let theme_toml = format!("{name}.toml");
theme_file.push(theme_toml);
let mut config_builder = Config::builder();
diff --git a/crates/atuin-client/src/utils.rs b/crates/turtle/src/atuin_client/utils.rs
index 35d7db26..35d7db26 100644
--- a/crates/atuin-client/src/utils.rs
+++ b/crates/turtle/src/atuin_client/utils.rs