Repository navigation
Releases: Percius04/omafiles
Release list
v1.2.0
Omafiles v1.2.0 — Centered Grid/Icon View, Native Duplicate Finder, Git Status Badges, Native Properties & Performance Optimizations.
Grid & List view modes
- Centered Grid/Icon View (
Ctrl+G): Seamlessly switch between the classic list and a centered grid view mode, with smooth 160ms crossfade animation. View preference is saved in~/.local/state/omafiles/ui-prefs.json. - Dynamic Grid Zoom:
Ctrl+ mouse wheel scales cell, icon, and thumbnail sizes dynamically without extra backend overhead. - 2D Grid Navigation & Selection: Full keyboard navigation across columns and rows, plus 2D rectangular marquee selection in grid mode.
Duplicate file finder
- Native
DuplicateFinder: High-performance background duplicate detector using a two-stage fdupes-style pruning pipeline (exact byte size -> 64 KB SHA-256 pre-hash -> full SHA-256 validation). - Duplicate Cleanup Dialog: Interactive modal with live progress, "Select all but first per group" (retaining oldest copy by creation/mtime), and direct deletion to trash with full
Ctrl+ZUndo support. - Menu Integration: Accessible from the command palette (
:) and folder context menus ("Find duplicates here...").
Git status integration
- Asynchronous Git Badges: Non-blocking background detection via
git rev-parseandgit status --porcelain=v1 -z. - File & Directory Badges: Color-coded badges for modified (
M, amber), added (A, green), deleted (D, red), conflict (U, red), and untracked (?, muted) files, with aggregate status propagation on folder items in both List and Grid views.
Properties & sidebar polish
- Native
statInfo()&requestDirSize(): Eliminated shell subprocess invocations (stat/du) in the Properties panel in favor of native C++ implementations inFileOperations. - Sidebar Disk Usage Bars: Live storage usage bars for mounted drives powered by native
LocalMounts(QStorageInfousedFraction). - Sidebar UI Polish: Slightly widened sidebar, improved font sizes and icon hierarchy.
Performance & architectural improvements
- Instant Startup via Lazy Loading: Deferred instantiation of video/audio playback loaders in
PreviewPanel. - Burst Coalescing in
FolderCountState: 16ms timer debounce for folder item counts, avoiding O(N) cascading binding re-evaluations. - Native Mount Enumeration (
LocalMounts): Replacedlist-mounts.shshell pipeline with native C++ enumeration and 4-tier device sorting. - Bounded Video Thumbnail Pool: 3 concurrent thumbnailer slots to prevent CPU/IO saturation on video-heavy folders.
Bug fixes
- Search Bar Auto-Collapse: Fixed search bar remaining open when clicking away with an empty search query.
- Preview Panel Layout Fix: Fixed overlap between "No preview available" status text and the filename heading.
- Torrent Files: Added dedicated magnet-glyph icon for
.torrentfiles. - Background Panel Deduping: Avoided redundant rescans on already current paths.
Regression coverage
- Headless
--selfchecksuite expanded from 146 to 160 automated checks, covering duplicate discovery, cancellation, git status, grid navigation, and performance paths.
Full details in CHANGELOG.md.
v1.1.0
Undo/redo, transfer queue, bulk rename regex/preview, drag-and-drop coverage, and several new integrations on top of v1.0.1's stability work.
File transfers & archives
- Transfers queue instead of rejecting. A second copy/move/compress/extract issued while one is already running used to be flatly rejected ("still busy — try again"). It's now queued (FIFO) and starts automatically once its turn comes, shown as a dimmed "Pending" row (with its own Cancel) above the active operation. Quick, effectively-instant actions (rename, chmod, mkdir, trash, restore…) deliberately keep the old reject-on-busy behavior — queueing wouldn't be noticeable there.
- Compress to
.tar.gzand.7z, alongside the existing.zip— plus live progress bars for archive extract/compress (previously only copy/move had one)..zst/.tar.zstand.tbz/.tbz2are now consistently recognized as browsable/extractable archives.
Bulk rename
- Regex Find/Replace, applied to the base name before the
{name}/{ext}/{n}pattern — supports capture-group backreferences ($1); an invalid regex while typing is treated as a no-op instead of breaking the dialog. - Zero-padded sequence numbers:
{n:3}→001,002… ({n}alone stays unpadded, unchanged). - Live preview: every resulting name is shown, row by row, before confirming — driven by the exact same function the real rename uses, so the preview can never diverge from what actually happens.
Preview
- Inline video/audio playback (Qt Multimedia) in Quick Look — play/pause, auto-stops when you move to another item — instead of a thumbnail/metadata-only view.
Network locations
- Reactive GVfs mount watcher: a network drive mounted or unmounted from another app is now picked up live, the same gap
UDisksWatcheralready closed for local devices. - Saved connection profiles (URI only, never a password) for one-click reconnecting to previously used servers.
Notifications
- Migrated from
notify-sendto real desktop notifications (org.freedesktop.Notificationsover D-Bus), plus anAlt+Nrecent-notifications panel (session-only history) in case you missed one.
Undo / Redo
- Closed a real, previously-documented gap:
undoLast()/redoLast()used to move an entry to the opposite stack (and show "Undoing:"/"Redoing:") as soon as the underlying operation started, not once it had genuinely completed — a redo pressed right after an undo could fire while that undo was still in flight. Now deferred until real completion; regression-tested against the exact race.
Bug fixes
- A real, empirically-reproduced ~10% flake in the
.7zcompress/extract selfcheck, root-caused to a guessed fixed-duration settle instead of a deterministic check. main.cpp's import-path priority was backwards: a dev build could silently load the stale installed backend instead of its own.- A selfcheck testing its own background-panel refresh logic was polling a bounded (8-entry) LRU cache shared by every background panel in the app — real activity from unrelated tabs could evict its entry within milliseconds under a long test run, a genuine ~15-25% flake unrelated to any real bug. Fixed by observing the panel's own listing state directly instead.
- Dead code removed (
Persistence.saveRecent/saveBulkRenameHistory,TabOps.closeTabAt,FileMeta.parseAudioInfo), a 4×-duplicated busy guard inActionEngineconsolidated, twotoLowerCase()-in-comparator hot paths hoisted to match an existing C++-side fix.
Regression coverage
- The headless
--selfchecksuite grew from 92 to 146, adding dedicated coverage for the transfer queue (including cross-kind queueing and mid-queue cancellation), bulk rename's regex/padding/preview, drag-and-drop (move+undo/redo, conflict handling, the self-drop guard), and the undo/redo completion-timing fix.
Full details in CHANGELOG.md.
OmaFiles 1.0.0
A forensic-audit-driven hardening release on top of v0.9.0: a full concurrency/security pass verified with AddressSanitizer, an architectural cleanup pass, a new custom-keybindings system, and a much wider automated regression suite. No new user-facing features beyond custom keybindings and alternating row colors — this release is about correctness and stability on the foundation v0.9.0 already built.
Filesystem operations & concurrency safety
- Fixed use-after-free bugs in
FileOperations,SearchWorker, andThumbnailProvider, reproduced and verified clean with AddressSanitizer (not just code review). - Per-operation cancellation tokens for file operations, so two overlapping copy/move/trash actions can no longer interfere with each other's cancellation state.
- Fixed a missing build dependency (
qt6-webengine, required for PDF support) and a symlink-based vulnerability in archive file opening.
Archive handling
- Archive browsing extracted into its own component for a cleaner, more maintainable codebase.
- Archive-open path hardened against the symlink vulnerability above, with new regression tests.
Custom keybindings
- Every keyboard shortcut (except 5 fixed ones: Ctrl+C/X/V/Z, Ctrl+Tab) can now be remapped via
~/.config/omafiles/keybindings.toml— built for alternative keyboard layouts like Colemak and Dvorak. - The in-app help overlay and the README's shortcut table now always match what's actually configured.
- Conflicting or invalid config entries fall back to their defaults with a clear warning, never an ambiguous binding.
UI
- Alternating row background colors for file lists (opt-in, doesn't change any existing behavior by default).
Bug fixes
- Bulk rename could produce an invalid empty filename from certain patterns; now rejected upfront with a clear message.
- A misleading error message ("Couldn't restore from trash") was shown for several unrelated failures; now reports an accurate message.
- The "set as default file manager" self-registration had been silently broken for several days due to an internal path bug — found and fixed.
Regression coverage
- The automated test suite grew from 85 to 124 checks, covering archive browsing, alternating rows, custom keybindings, bulk rename, permission changes with undo, and a full compress/extract round-trip, among others.
Packaging
zipandunzipadded as required dependencies for the Arch package (needed by Compress/Extract, with no fallback).- Packaging verified end to end: built and installed exactly as the Arch package would, then the installed binary itself was tested against the full suite.
Full changelog: see CHANGELOG.md in this release for the complete entry.
OmaFiles v0.9.0-rc1 is now available
This is the first public release candidate of OmaFiles v0.9.0.
RC1 focuses on performance, stability, and native Linux integration after a major architectural cleanup.
What's new
- Native C++ audio/video metadata extraction (no ffprobe subprocesses)
- Native multithreaded content search (content: queries)
- Native filesystem watching (legacy inotifywait fallback removed)
- Native trash emptying and restore pipeline
- Fixed Undo/Redo across symlinked directories and multiple mounted drives
- Automated performance regression gate
- Expanded self-check suite to 82 automated tests
What I'm looking for
I'm mainly looking for testers on Arch Linux, CachyOS, Hyprland, KDE Plasma, GNOME, and Sway.
Please test:
- previews (images, PDFs, audio, video, code)
- content: search
- Undo/Redo
- external drives
- network locations
- desktop and portal integration
Bug reports and feedback are greatly appreciated before the stable v0.9.0 release.
Thanks to everyone helping test RC1.