Package: atuin Version: 18.8.0-1.4 I hope to update crossterm and ratatui to versions 0.29 and 0.30 respectively soon. I have backported the upstream changes to allow atuin to build with the new versions.
diff -Nru atuin-18.8.0/debian/changelog atuin-18.8.0/debian/changelog --- atuin-18.8.0/debian/changelog 2026-04-10 05:16:11.000000000 +0000 +++ atuin-18.8.0/debian/changelog 2026-05-04 18:42:19.000000000 +0000 @@ -1,3 +1,17 @@ +atuin (18.8.0-1.5) UNRELEASED; urgency=medium + + * Non-maintainer upload. + * Relax dependency on ratauti. + * Rework patches for easier testing. + + Move prost change to it's own patch at the end of the quilt series + so it's possible to test with upstream crates. + + Set autobenches=false in disable-benches.patch so the beches are + actually disabled. + * Add patch based on upstream commit for crossterm 0.29 and ratatui 0.30. + * Stop patching listenfd dependency. + + -- Peter Michael Green <[email protected]> Mon, 04 May 2026 18:42:19 +0000 + atuin (18.8.0-1.4) unstable; urgency=medium * Non-maintainer upload. diff -Nru atuin-18.8.0/debian/control atuin-18.8.0/debian/control --- atuin-18.8.0/debian/control 2026-04-09 20:04:46.000000000 +0000 +++ atuin-18.8.0/debian/control 2026-05-04 18:42:19.000000000 +0000 @@ -16,7 +16,7 @@ librust-clap-complete-dev, librust-colored-dev, librust-config-dev, - librust-crossterm+use-dev-tty-dev, + librust-crossterm-0.29+use-dev-tty-dev, librust-crypto-secretbox-dev, librust-dashmap-dev, librust-directories-dev, @@ -45,7 +45,7 @@ librust-prost-types-dev, librust-protox-dev, librust-rand-dev, - librust-ratatui-dev, + librust-ratatui-0.30-dev, librust-regex-dev, librust-reqwest-dev, librust-rmp-dev, diff -Nru atuin-18.8.0/debian/patches/disable-benches.patch atuin-18.8.0/debian/patches/disable-benches.patch --- atuin-18.8.0/debian/patches/disable-benches.patch 2026-02-18 01:22:27.000000000 +0000 +++ atuin-18.8.0/debian/patches/disable-benches.patch 2026-05-04 18:42:19.000000000 +0000 @@ -1,9 +1,21 @@ Description: Disable benches thus used unavailable dep divan Forwarded: not-needed Last-Update: 2024-12-29 ---- a/crates/atuin-history/Cargo.toml -+++ b/crates/atuin-history/Cargo.toml -@@ -24,6 +24,6 @@ +Index: atuin-18.8.0/crates/atuin-history/Cargo.toml +=================================================================== +--- atuin-18.8.0.orig/crates/atuin-history/Cargo.toml ++++ atuin-18.8.0/crates/atuin-history/Cargo.toml +@@ -3,6 +3,7 @@ name = "atuin-history" + description = "The history crate for Atuin" + edition = "2024" + version = { workspace = true } ++autobenches = false + + authors.workspace = true + rust-version.workspace = true +@@ -22,9 +23,9 @@ crossterm = { version = "0.28.1", featur + unicode-segmentation = "1.11.0" + [dev-dependencies] -divan = "0.1.14" +#divan = "0.1.14" @@ -12,3 +24,4 @@ -[[bench]] +[[disabled.bench]] name = "smart_sort" + harness = false diff -Nru atuin-18.8.0/debian/patches/prost-0.12.patch atuin-18.8.0/debian/patches/prost-0.12.patch --- atuin-18.8.0/debian/patches/prost-0.12.patch 1970-01-01 00:00:00.000000000 +0000 +++ atuin-18.8.0/debian/patches/prost-0.12.patch 2026-05-04 18:42:19.000000000 +0000 @@ -0,0 +1,15 @@ +Index: atuin-18.8.0/crates/atuin-daemon/Cargo.toml +=================================================================== +--- atuin-18.8.0.orig/crates/atuin-daemon/Cargo.toml ++++ atuin-18.8.0/crates/atuin-daemon/Cargo.toml +@@ -29,8 +29,8 @@ tracing-subscriber = { workspace = true + dashmap = "6.1" + tonic-types = "0.12.0" + tonic = "0.12" +-prost = "0.13" +-prost-types = "0.13" ++prost = "0.12" ++prost-types = "0.12" + tokio-stream = {version="0.1.14", features=["net"]} + hyper-util = "0.1" + diff -Nru atuin-18.8.0/debian/patches/ratatui-0.30.patch atuin-18.8.0/debian/patches/ratatui-0.30.patch --- atuin-18.8.0/debian/patches/ratatui-0.30.patch 1970-01-01 00:00:00.000000000 +0000 +++ atuin-18.8.0/debian/patches/ratatui-0.30.patch 2026-05-04 18:42:19.000000000 +0000 @@ -0,0 +1,292 @@ +This patch is based on the upstream commit describe below, adapted +for use in the Debian package by Peter Michael Green. + +commit bc85ede020e99fa3de5477e31d9a9fa8bd32fbcd +Author: Tobias Genannt <[email protected]> +Date: Tue Jan 27 21:12:34 2026 +0100 + + chore(deps): Update to ratatui 0.30.0 (#3104) + + <!-- Thank you for making a PR! Bug fixes are always welcome, but if + you're adding a new feature or changing an existing one, we'd really + appreciate if you open an issue, post on the forum, or drop in on + Discord --> + + ## Checks + - [x] I am happy for maintainers to push small adjustments to this PR, + to speed up the review cycle + - [x] I have checked that there are no existing pull requests for the + same thing + +Index: atuin-18.8.0/crates/atuin-client/Cargo.toml +=================================================================== +--- atuin-18.8.0.orig/crates/atuin-client/Cargo.toml ++++ atuin-18.8.0/crates/atuin-client/Cargo.toml +@@ -68,7 +68,7 @@ indicatif = "0.17" + tiny-bip39 = "=1.0.0" + + # theme +-crossterm = { version = "0.28", features = ["serde"] } ++crossterm = { version = "0.29.0", features = ["serde"] } + palette = { version = "0.7.5", features = ["serializing"] } + lazy_static = "1.4.0" + strum_macros = "0.26.3" +Index: atuin-18.8.0/crates/atuin-history/Cargo.toml +=================================================================== +--- atuin-18.8.0.orig/crates/atuin-history/Cargo.toml ++++ atuin-18.8.0/crates/atuin-history/Cargo.toml +@@ -19,7 +19,7 @@ atuin-client = { path = "../atuin-client + + time = { workspace = true } + serde = { workspace = true } +-crossterm = { version = "0.28", features = ["use-dev-tty"] } ++crossterm = { version = "0.29.0", features = ["use-dev-tty"] } + unicode-segmentation = "1.11.0" + + [dev-dependencies] +Index: atuin-18.8.0/crates/atuin/Cargo.toml +=================================================================== +--- atuin-18.8.0.orig/crates/atuin/Cargo.toml ++++ atuin-18.8.0/crates/atuin/Cargo.toml +@@ -65,7 +65,7 @@ eyre = { workspace = true } + indicatif = "0.17" + serde = { workspace = true } + serde_json = { workspace = true } +-crossterm = { version = "0.28", features = ["use-dev-tty"] } ++crossterm = { version = "0.29.0", features = ["use-dev-tty"] } + unicode-width = "0.2" + itertools = { workspace = true } + tokio = { workspace = true } +@@ -83,7 +83,7 @@ tiny-bip39 = "1" + futures-util = "0.3" + fuzzy-matcher = "0.3.7" + colored = "3" +-ratatui = "0.29.0" ++ratatui = "0.30.0" + tracing = "0.1" + tracing-subscriber = { workspace = true } + uuid = { workspace = true } +Index: atuin-18.8.0/crates/atuin/src/command/client/search/history_list.rs +=================================================================== +--- atuin-18.8.0.orig/crates/atuin/src/command/client/search/history_list.rs ++++ atuin-18.8.0/crates/atuin/src/command/client/search/history_list.rs +@@ -6,6 +6,7 @@ use atuin_client::{ + }; + use atuin_common::utils::Escapable as _; + use ratatui::{ ++ backend::FromCrossterm, + buffer::Buffer, + crossterm::style, + layout::Rect, +@@ -176,7 +177,7 @@ impl DrawState<'_> { + Meaning::AlertError + }); + let duration = Duration::from_nanos(u64::try_from(h.duration).unwrap_or(0)); +- self.draw(&format_duration(duration), status.into()); ++ self.draw(&format_duration(duration), Style::from_crossterm(status)); + } + + #[allow(clippy::cast_possible_truncation)] // we know that time.len() will be <6 +@@ -197,8 +198,8 @@ impl DrawState<'_> { + usize::from(PREFIX_LENGTH).saturating_sub(usize::from(self.x) + 4 + time.len()); + self.draw(&SPACES[..padding], Style::default()); + +- self.draw(&time, style.into()); +- self.draw(" ago", style.into()); ++ self.draw(&time, Style::from_crossterm(style)); ++ self.draw(" ago", Style::from_crossterm(style)); + } + + fn command(&mut self, h: &History) { +@@ -211,13 +212,13 @@ impl DrawState<'_> { + } + + for section in h.command.escape_control().split_ascii_whitespace() { +- self.draw(" ", style.into()); ++ self.draw(" ", Style::from_crossterm(style)); + if self.x > self.list_area.width { + // Avoid attempting to draw a command section beyond the width + // of the list + return; + } +- self.draw(section, style.into()); ++ self.draw(section, Style::from_crossterm(style)); + } + } + +Index: atuin-18.8.0/crates/atuin/src/command/client/search/inspector.rs +=================================================================== +--- atuin-18.8.0.orig/crates/atuin/src/command/client/search/inspector.rs ++++ atuin-18.8.0/crates/atuin/src/command/client/search/inspector.rs +@@ -7,6 +7,7 @@ use atuin_client::{ + }; + use ratatui::{ + Frame, ++ backend::FromCrossterm, + crossterm::event::{KeyCode, KeyEvent, KeyModifiers}, + layout::Rect, + prelude::{Constraint, Direction, Layout}, +@@ -44,7 +45,7 @@ pub fn draw_commands( + Block::new() + .borders(Borders::ALL) + .title("Command") +- .style(theme.as_style(Meaning::Base)) ++ .style(Style::from_crossterm(theme.as_style(Meaning::Base))) + .padding(Padding::horizontal(1)), + ); + +@@ -58,7 +59,7 @@ pub fn draw_commands( + Block::new() + .borders(Borders::ALL) + .title("Previous command") +- .style(theme.as_style(Meaning::Annotation)) ++ .style(Style::from_crossterm(theme.as_style(Meaning::Annotation))) + .padding(Padding::horizontal(1)), + ); + +@@ -72,7 +73,7 @@ pub fn draw_commands( + Block::new() + .borders(Borders::ALL) + .title("Next command") +- .style(theme.as_style(Meaning::Annotation)) ++ .style(Style::from_crossterm(theme.as_style(Meaning::Annotation))) + .padding(Padding::horizontal(1)), + ); + +@@ -113,7 +114,7 @@ pub fn draw_stats_table( + Block::default() + .title("Command stats") + .borders(Borders::ALL) +- .style(theme.as_style(Meaning::Base)) ++ .style(Style::from_crossterm(theme.as_style(Meaning::Base))) + .padding(Padding::vertical(1)), + ); + +@@ -166,7 +167,7 @@ fn draw_stats_charts(f: &mut Frame<'_>, + .iter() + .map(|(exit, count)| { + Bar::default() +- .label(exit.to_string().into()) ++ .label(exit.to_string()) + .value(u64_or_zero(*count)) + }) + .collect(); +@@ -175,7 +176,7 @@ fn draw_stats_charts(f: &mut Frame<'_>, + .block( + Block::default() + .title("Exit code distribution") +- .style(theme.as_style(Meaning::Base)) ++ .style(Style::from_crossterm(theme.as_style(Meaning::Base))) + .borders(Borders::ALL), + ) + .bar_width(3) +@@ -190,7 +191,7 @@ fn draw_stats_charts(f: &mut Frame<'_>, + .iter() + .map(|(day, count)| { + Bar::default() +- .label(num_to_day(day.as_str()).into()) ++ .label(num_to_day(day.as_str())) + .value(u64_or_zero(*count)) + }) + .collect(); +@@ -199,7 +200,7 @@ fn draw_stats_charts(f: &mut Frame<'_>, + .block( + Block::default() + .title("Runs per day") +- .style(theme.as_style(Meaning::Base)) ++ .style(Style::from_crossterm(theme.as_style(Meaning::Base))) + .borders(Borders::ALL), + ) + .bar_width(3) +@@ -215,7 +216,7 @@ fn draw_stats_charts(f: &mut Frame<'_>, + .map(|(date, duration)| { + let d = Duration::from_nanos(u64_or_zero(*duration)); + Bar::default() +- .label(date.clone().into()) ++ .label(date.clone()) + .value(u64_or_zero(*duration)) + .text_value(format_duration(d)) + }) +@@ -225,7 +226,7 @@ fn draw_stats_charts(f: &mut Frame<'_>, + .block( + Block::default() + .title("Duration over time") +- .style(theme.as_style(Meaning::Base)) ++ .style(Style::from_crossterm(theme.as_style(Meaning::Base))) + .borders(Borders::ALL), + ) + .bar_width(5) +Index: atuin-18.8.0/crates/atuin/src/command/client/search/interactive.rs +=================================================================== +--- atuin-18.8.0.orig/crates/atuin/src/command/client/search/interactive.rs ++++ atuin-18.8.0/crates/atuin/src/command/client/search/interactive.rs +@@ -29,7 +29,7 @@ use crate::{VERSION, command::client::se + + use ratatui::{ + Frame, Terminal, TerminalOptions, Viewport, +- backend::CrosstermBackend, ++ backend::{CrosstermBackend, FromCrossterm}, + crossterm::{ + cursor::SetCursorStyle, + event::{ +@@ -43,7 +43,7 @@ use ratatui::{ + prelude::*, + style::{Modifier, Style}, + text::{Line, Span, Text}, +- widgets::{Block, BorderType, Borders, Padding, Paragraph, Tabs, block::Title}, ++ widgets::{Block, BorderType, Borders, Padding, Paragraph, Tabs}, + }; + + const TAB_TITLES: [&str; 2] = ["Search", "Inspect"]; +@@ -744,7 +744,7 @@ impl State { + let message = Paragraph::new("Nothing to inspect") + .block( + Block::new() +- .title(Title::from(" Info ".to_string())) ++ .title(Line::from(" Info ".to_string())) + .title_alignment(Alignment::Center) + .borders(Borders::ALL) + .padding(Padding::vertical(2)), +@@ -807,13 +807,13 @@ impl State { + + fn build_title(&self, theme: &Theme) -> Paragraph { + let title = if self.update_needed.is_some() { +- let error_style: Style = theme.get_error().into(); ++ let error_style: Style = Style::from_crossterm(theme.get_error()); + Paragraph::new(Text::from(Span::styled( + format!("Atuin v{VERSION} - UPGRADE"), + error_style.add_modifier(Modifier::BOLD), + ))) + } else { +- let style: Style = theme.as_style(Meaning::Base).into(); ++ let style: Style = Style::from_crossterm(theme.as_style(Meaning::Base).into()); + Paragraph::new(Text::from(Span::styled( + format!("Atuin v{VERSION}"), + style.add_modifier(Modifier::BOLD), +@@ -857,7 +857,7 @@ impl State { + + _ => unreachable!("invalid tab index"), + } +- .style(theme.as_style(Meaning::Annotation)) ++ .style(Style::from_crossterm(theme.as_style(Meaning::Annotation))) + .alignment(Alignment::Center) + } + +@@ -866,7 +866,7 @@ impl State { + "history count: {}", + self.history_count, + )))) +- .style(theme.as_style(Meaning::Annotation)) ++ .style(Style::from_crossterm(theme.as_style(Meaning::Annotation))) + .alignment(Alignment::Right) + } + +@@ -963,7 +963,7 @@ impl State { + }; + + if compact { +- Paragraph::new(command).style(theme.as_style(Meaning::Annotation)) ++ Paragraph::new(command).style(Style::from_crossterm(theme.as_style(Meaning::Annotation))) + } else { + Paragraph::new(command).block( + Block::default() diff -Nru atuin-18.8.0/debian/patches/relax-deps.patch atuin-18.8.0/debian/patches/relax-deps.patch --- atuin-18.8.0/debian/patches/relax-deps.patch 2026-02-18 01:37:25.000000000 +0000 +++ atuin-18.8.0/debian/patches/relax-deps.patch 2026-05-04 18:42:19.000000000 +0000 @@ -1,5 +1,3 @@ -Forwarded: not-needed -Last-Update: 2025-08-17 --- a/Cargo.toml +++ b/Cargo.toml @@ -27 +27 @@ @@ -35,7 +33,7 @@ +crossterm = { version = "0.28", features = ["serde"] } --- a/crates/atuin-history/Cargo.toml +++ b/crates/atuin-history/Cargo.toml -@@ -21 +21 @@ +@@ -22 +22 @@ -crossterm = { version = "0.28.1", features = ["use-dev-tty"] } +crossterm = { version = "0.28", features = ["use-dev-tty"] } --- a/crates/atuin/Cargo.toml @@ -54,14 +52,6 @@ @@ -29 +29 @@ -dashmap = "5.5.3" +dashmap = "6.1" -@@ -32,2 +32,2 @@ --prost = "0.13" --prost-types = "0.13" -+prost = "0.12" -+prost-types = "0.12" -@@ -40 +40 @@ --listenfd = "1.0.1" -+listenfd = "1.0" @@ -43 +43 @@ -protox = "0.8.0" +protox = "0.9.0" diff -Nru atuin-18.8.0/debian/patches/relax-ratatui.patch atuin-18.8.0/debian/patches/relax-ratatui.patch --- atuin-18.8.0/debian/patches/relax-ratatui.patch 1970-01-01 00:00:00.000000000 +0000 +++ atuin-18.8.0/debian/patches/relax-ratatui.patch 2026-05-04 18:42:16.000000000 +0000 @@ -0,0 +1,13 @@ +Index: atuin-18.8.0/crates/atuin/Cargo.toml +=================================================================== +--- atuin-18.8.0.orig/crates/atuin/Cargo.toml ++++ atuin-18.8.0/crates/atuin/Cargo.toml +@@ -83,7 +83,7 @@ tiny-bip39 = "1" + futures-util = "0.3" + fuzzy-matcher = "0.3.7" + colored = "3" +-ratatui = "0.29.0" ++ratatui = ">= 0.29.0" + tracing = "0.1" + tracing-subscriber = { workspace = true } + uuid = { workspace = true } diff -Nru atuin-18.8.0/debian/patches/series atuin-18.8.0/debian/patches/series --- atuin-18.8.0/debian/patches/series 2026-04-09 20:04:46.000000000 +0000 +++ atuin-18.8.0/debian/patches/series 2026-05-04 18:42:19.000000000 +0000 @@ -10,3 +10,7 @@ sysinfo-0.37.patch relax-axum.patch getrandom-0.4.patch +ratatui-0.30.patch +#the patch below requires debian patched crates +prost-0.12.patch +

