Name: yaft Version: 0.2.9 Release: 20%{?dist} Summary: Yet another framebuffer terminal with Sixel graphics support License: MIT URL: https://github.com/uobikiemukot/yaft Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz Source1: yaft-meslo-nerd-glyph.h Source2: yaft-terminus-nerd-glyph.h Source3: example-shell-init.sh Source4: yaft-drm.1 # DRM backend, mouse, true color, DA suppression, crash handlers, -c cmd Patch0: yaft-drm-backend.patch BuildRequires: gcc BuildRequires: make BuildRequires: ncurses BuildRequires: pkgconfig(libdrm) %description yaft is a simple terminal emulator for the Linux framebuffer console. It supports UTF-8, 256 colors, Sixel graphics, and DRCS (dynamically redefinable character sets). No X11 or Wayland required. The yaft-drm variants use the DRM/KMS API instead of the legacy /dev/fb0 device, with built-in mouse support via /dev/input/mice, arrow cursor, true color approximation, and configurable resolution. Works on modern kernels (Fedora 43+, RHEL 10+) where CONFIG_FB_DEVICE is disabled. yaft-drm uses Terminus font with 3469 Nerd Font icons (8x16 cells). %prep %setup -q -n %{name}-%{version} patch -p1 < %{PATCH0} %build export CFLAGS="%{optflags}" # Build legacy fbdev version with default font %make_build yaft # Build DRM variant with Terminus + Nerd Font icons cp %{SOURCE2} glyph.h cc -o yaft-drm yaft.c %{optflags} -DUSE_DRM $(pkg-config --cflags libdrm) $(pkg-config --libs libdrm) %install %make_install PREFIX=%{buildroot}%{_prefix} MANPREFIX=%{buildroot}%{_mandir} install -m755 yaft-drm %{buildroot}%{_bindir}/yaft-drm install -Dm644 %{SOURCE3} %{buildroot}%{_docdir}/yaft/example-shell-init.sh install -Dm644 %{SOURCE4} %{buildroot}%{_mandir}/man1/yaft-drm.1 %files %license LICENSE %doc README.md ChangeLog %{_bindir}/yaft %{_bindir}/yaft-drm %{_bindir}/yaft_wall %{_mandir}/man1/yaft.1* %{_mandir}/man1/yaft-drm.1* %{_docdir}/yaft/example-shell-init.sh %{_datadir}/terminfo/y/yaft* %changelog * Wed Apr 30 2026 Greg Procunier - 0.2.9-20 - Fix: pass -c command through fallback for Cockpit compatibility - Cockpit exit 71 litmus test passes via bash fallback * Wed Apr 30 2026 Greg Procunier - 0.2.9-19 - Red Hat theme: blue active window, improved pane/session contrast * Wed Apr 30 2026 Greg Procunier - 0.2.9-18 - Add Red Hat tmux theme based on RHDS design tokens - Update example-shell-init.sh to default to Red Hat theme * Wed Apr 30 2026 Greg Procunier - 0.2.9-17 - Fix: drm_parse_config/drm_parse_args were never called in main * Wed Apr 30 2026 Greg Procunier - 0.2.9-16 - Fix: fallback to bash on fb_init failure (VT_GETSTATE passes over SSH on some hosts) * Wed Apr 30 2026 Greg Procunier - 0.2.9-15 - Fix: fallback to bash on fb_init failure (VT_GETSTATE succeeds over SSH on some hosts) * Wed Apr 30 2026 Greg Procunier - 0.2.9-14 - Fix example-shell-init.sh CWD bug after calabi-shell install - Add author email to changelog and man page * Wed Apr 30 2026 Greg Procunier - 0.2.9-13 - Add yaft-drm.1 man page - Add example-shell-init.sh to documentation - Login shell: fix $SHELL recursion, locale for Nerd Font glyphs - Mouse: save/restore cursor, adaptive contrast, QEMU/VMware/Pi-KVM detection - Mouse: wire up xterm SGR 1000/1002/1006 mode reporting - Cursor blink support * Wed Apr 30 2026 Greg Procunier - 0.2.9-12 - --fallback mode: exec shell when no DRM console available - VT console detection prevents DRM takeover from SSH sessions - Global config /etc/yaft-drm.conf with user override ~/.yaft-drm.conf - Remove yaft-drm-meslo variant * Wed Apr 30 2026 Greg Procunier - 0.2.9-11 - Security: drop root privileges in child shell via SUDO_UID/SUDO_GID - Security: config file ownership and permission validation - Security: O_CLOEXEC on all DRM, input, and tty file descriptors - Security: clamp evdev abs_max to prevent division by zero - Security: minimal async-signal-safe crash handler * Tue Apr 29 2026 Greg Procunier - 0.2.9-10 - Restore blink counter pacing for consistent frame timing - Idle 0% CPU, cockpit /system 19-21% on iDRAC Matrox G200eR2 * Tue Apr 29 2026 Greg Procunier - 0.2.9-9 - Fix mouse tracking: full-screen DRM flush (partial flush broken on QXL) - BMC-only evdev absolute detection (Avocent, IPMI, iLO, ATEN, AMI) - PS/2 relative fallback for VMs and physical mice - --mouse evdev|relative|auto argument and mouse= config option - --res list to show available modes - Nerd Font icons from Meslo (3469 glyphs) with Terminus ASCII * Tue Apr 29 2026 Greg Procunier - 0.2.9-8 - --res list to show supported modes - --res with invalid input gives clear error message * Tue Apr 29 2026 Greg Procunier - 0.2.9-7 - Performance: LAZY_DRAW re-enabled with deferred flush on idle timeout - Performance: SELECT_TIMEOUT increased to 50ms for DRM builds - Performance: cursor blink only fires on idle (no fd activity) - Idle CPU 0-2%, active rendering 15-30% on Matrox G200eR2 * Tue Apr 29 2026 Greg Procunier - 0.2.9-6 - Symbols Nerd Font icons from Meslo with proper 10-to-8px scaling - Hand-crafted powerline rounded caps (E0B4, E0B6) - Fix mouse mode detection for SGR 1006 sequences * Tue Apr 29 2026 Greg Procunier - 0.2.9-5 - evdev absolute mouse support for iDRAC, iLO, IPMI, and VM virtual mice - Auto-detect evdev absolute vs PS/2 relative mouse devices - Partial DRM dirty flush for cursor movement (performance) - Proper button state tracking for evdev devices * Tue Apr 29 2026 Greg Procunier - 0.2.9-4 - Terminus font as default yaft-drm (8x16, native BDF with powerline glyphs) - MesloLGL Nerd Font Mono as yaft-drm-meslo alternate (10x23) - Add -c command argument to run a command instead of shell - Add command= config option in ~/.yaft-drm.conf - Invalid --res dumps supported modes and exits cleanly - True color (24-bit RGB) to 256-color approximation in SGR handler - Suppress DA response to prevent tmux escape sequence leaks * Tue Apr 29 2026 Greg Procunier - 0.2.9-3 - DRM/KMS backend with mouse, true color, Nerd Font, crash recovery * Tue Apr 29 2026 Greg Procunier - 0.2.9-2 - Add DRM/KMS backend (yaft-drm) for kernels without CONFIG_FB_DEVICE * Tue Apr 28 2026 Greg Procunier - 0.2.9-1 - Initial RPM package