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
+

Reply via email to