--- Begin Message ---
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
+
--- End Message ---