Compare commits

..

95 Commits

Author SHA1 Message Date
lashman 6b41f63d12 Add app icons, screenshots, and complete AppStream metainfo 2026-03-01 14:46:41 +02:00
lashman 91efff75bc Rewrite README with better header and project framing 2026-03-01 13:12:45 +02:00
lashman fd0393bf7b Rewrite README with feature documentation 2026-03-01 12:54:55 +02:00
lashman 6b939db37b Change license to CC0-1.0 2026-03-01 12:49:17 +02:00
lashman 4743c3eb8e Remove archived plan documents from tracking 2026-03-01 12:44:35 +02:00
lashman 5c99f3eb77 Add WCAG 2.2 AAA compliance and automated AT-SPI audit tool 2026-03-01 12:44:21 +02:00
lashman 817ecf67be Add tags, export/import, and changelog features 2026-03-01 01:01:43 +02:00
lashman 1da3c08bbe Add design doc for tags, export/import, and changelog improvements 2026-03-01 00:47:14 +02:00
lashman 5112338c0f Add UX enhancements: carousel, filter chips, command palette, and more 2026-03-01 00:39:43 +02:00
lashman 960eab965d Add AppImageHub.com OCS API as primary catalog source 2026-02-28 20:33:40 +02:00
lashman 848f4e7de7 Add GitHub metadata enrichment for catalog apps 2026-02-28 16:49:13 +02:00
lashman f22438d960 Add Launch and Uninstall buttons to detail view header 2026-02-28 01:56:21 +02:00
lashman 174d10772d Use relative time for update_checked in detail view 2026-02-28 01:54:51 +02:00
lashman badffe9b8d Use relative timestamps everywhere instead of raw date strings 2026-02-28 01:52:56 +02:00
lashman 5a4e11a459 Use undo toast for integration removal instead of immediate action 2026-02-28 01:51:40 +02:00
lashman 45b878545a Consolidate preferences into General and Updates pages 2026-02-28 01:50:38 +02:00
lashman d5e8fdcaaa Show updates-available banner in Installed view 2026-02-28 01:48:50 +02:00
lashman 38bac5b8e6 Add Ctrl+1/2/3 keyboard shortcuts for view switching 2026-02-28 01:45:32 +02:00
lashman e07a24c7c8 Default to Catalog tab when library is empty on first launch 2026-02-28 01:44:41 +02:00
lashman ea2354fad5 Replace technical jargon with user-friendly labels in detail view 2026-02-28 01:44:09 +02:00
lashman ba64cb53fa Consolidate detail view from 4 tabs to 2 (About + Details) 2026-02-28 01:42:35 +02:00
lashman 3622243271 Simplify app card badges, remove colored status borders 2026-02-28 01:41:28 +02:00
lashman 67e5c1ed7a Show update count badge on Updates tab in ViewSwitcherBar 2026-02-28 01:40:22 +02:00
lashman 218afbb998 Slim down hamburger menu, move Preferences to bottom section 2026-02-28 01:38:40 +02:00
lashman d2e82caf54 Improve catalog view with relative timestamps, auto-refresh, and installed badges 2026-02-28 01:38:01 +02:00
lashman 1cde1e63d9 Add scan button, sort dropdown, and improved empty state to library view 2026-02-28 01:36:47 +02:00
lashman cbc3463643 Replace single NavigationView with ViewSwitcher (Installed, Catalog, Updates) 2026-02-28 01:33:43 +02:00
lashman 3d349f05b6 Add dedicated Updates view with check-now and update-all 2026-02-28 01:26:10 +02:00
lashman 36ce1ed451 Add relative_time() helper for human-readable timestamps 2026-02-28 01:24:08 +02:00
lashman a4a7464354 Fix catalog refresh: handle null fields in AppImageHub feed JSON 2026-02-28 00:46:39 +02:00
lashman 5e1c10cea3 Clean up unused catalog function and wire source info into catalog view 2026-02-28 00:25:05 +02:00
lashman c82c9ad9e9 Add AppImageHub in-app catalog browser with search, categories, and install 2026-02-28 00:23:36 +02:00
lashman 294420ed65 Add similar app recommendations from shared categories 2026-02-28 00:17:55 +02:00
lashman 10cd5c6a1b Add portable mode with removable media detection and scanning 2026-02-28 00:16:52 +02:00
lashman cb205fa9ee Add update-all, autostart, purge, and verify CLI commands 2026-02-28 00:13:31 +02:00
lashman 9125f7f6f3 Add system-wide installation via pkexec with polkit policy 2026-02-28 00:11:57 +02:00
lashman 4d8e882735 Add default application selector for browsers, email, and file managers 2026-02-28 00:10:39 +02:00
lashman d60fd6bb5e Add first-run permission summary dialog before launch 2026-02-28 00:07:49 +02:00
lashman 557dc6c900 Add download verification with signature and SHA256 support 2026-02-28 00:05:43 +02:00
lashman fe353e1c5d Extract and apply StartupWMClass for proper taskbar icons 2026-02-28 00:02:44 +02:00
lashman a61f976546 Add file type association manager with MIME type support 2026-02-28 00:00:42 +02:00
lashman 05391ea1fe Add FUSE fix wizard with pkexec installation 2026-02-27 23:59:26 +02:00
lashman 5884453c42 Add icon preview to drag-and-drop dialog 2026-02-27 23:58:09 +02:00
lashman d896bfb720 Add full uninstall dialog with data cleanup options 2026-02-27 23:56:56 +02:00
lashman 96832608b0 Add one-click Update All with batch progress dialog 2026-02-27 23:55:04 +02:00
lashman ecb4057e99 Add background update checks with configurable interval 2026-02-27 23:52:28 +02:00
lashman 1490be467c Add per-app storage breakdown to detail view 2026-02-27 23:48:21 +02:00
lashman b1fddbbcad Add system notification support for crashes and updates 2026-02-27 23:47:19 +02:00
lashman 7e7887d1f2 Add autostart manager with XDG autostart support 2026-02-27 23:45:58 +02:00
lashman 665b6fa736 Add batch selection and bulk operations to library view 2026-02-27 23:45:01 +02:00
lashman 1cf605e5db Wire auto-integrate setting to scan pipeline 2026-02-27 23:42:22 +02:00
lashman 542a854612 Add launch statistics to dashboard 2026-02-27 23:41:22 +02:00
lashman f8e7773e4c Add source URL tracking and display for AppImages 2026-02-27 23:40:18 +02:00
lashman 832176866b Add version rollback support for AppImage updates 2026-02-27 23:38:36 +02:00
lashman fab2dfce4a Add keep-in-place option for drag-and-drop imports 2026-02-27 23:37:03 +02:00
lashman d3f32fc053 Auto-fix executable permissions on discovered AppImages 2026-02-27 23:36:14 +02:00
lashman 2aa141b410 Add system modification tracking for reversible installs 2026-02-27 23:35:27 +02:00
lashman eea3d2af8a Add detailed implementation plan for 26-task feature roadmap 2026-02-27 23:30:18 +02:00
lashman f3dafb451d Add feature roadmap design for 25 new features 2026-02-27 23:24:34 +02:00
lashman 1da69dd44e Fix second audit findings and restore crash detection dialog 2026-02-27 22:48:43 +02:00
lashman df8606251f Fix 29 audit findings across all severity tiers 2026-02-27 22:08:53 +02:00
lashman bfd91104f7 Remove module-wide dead_code allows, annotate individual items instead 2026-02-27 21:05:56 +02:00
lashman 6eb50998fa Wire backup, notification, report export, and file watcher modules into UI 2026-02-27 21:03:19 +02:00
lashman 1372d42350 Switch crash dialog from AlertDialog to Dialog for proper sizing 2026-02-27 20:31:03 +02:00
lashman 500fa45c73 Enlarge crash error dialog for better readability 2026-02-27 20:25:09 +02:00
lashman 0d24ea7795 Add launch crash detection with detailed error dialog, fix all warnings 2026-02-27 20:23:10 +02:00
lashman d4ac469ac0 Rewrite detail view copy for beginners, add tab transitions and lightbox fixes 2026-02-27 19:48:59 +02:00
lashman f649b8eb9f Stop executing AppImages during analysis, add screenshot lightbox and favicons 2026-02-27 18:58:12 +02:00
lashman 0ef4c239f8 Fix performance, add screenshots, make banner scrollable 2026-02-27 18:44:50 +02:00
lashman e69c5f7a7c Add AppImage metadata extraction, display, and bug fixes 2026-02-27 18:31:07 +02:00
lashman abf61f5c32 Add implementation plan for AppImage metadata extraction 2026-02-27 18:12:33 +02:00
lashman b72398d090 Add AppImage metadata extraction design document 2026-02-27 18:08:24 +02:00
lashman a9ccc91090 Fix icon extraction, drop overlay styling, and card padding 2026-02-27 17:49:04 +02:00
lashman 40f7f12834 Add Phase 5 enhancements: security, i18n, analysis, backup, notifications 2026-02-27 17:16:41 +02:00
lashman 870ef2a739 Fix GTK CSS warnings and popover cleanup on widget destroy 2026-02-27 11:14:14 +02:00
lashman 539a570bd0 Implement UI/UX overhaul - cards, list, tabbed detail, context menu 2026-02-27 11:10:23 +02:00
lashman 5b8c9d76cf Add UI/UX overhaul design document 2026-02-27 10:56:02 +02:00
lashman 9e086b8a4b Suppress unused warning on announce() accessibility helper 2026-02-27 10:10:21 +02:00
lashman ee5de0ff47 Update window title dynamically for WCAG 2.4.8 Location compliance 2026-02-27 10:09:31 +02:00
lashman 2604e35a8c Add WCAG accessible labels and confirmation dialog to duplicate removal 2026-02-27 10:07:34 +02:00
lashman 4969d0638d Add WCAG accessible labels and confirmation dialog to cleanup wizard 2026-02-27 10:07:17 +02:00
lashman 0a200c22bd Add WCAG accessible labels to preferences buttons and directory list 2026-02-27 10:06:37 +02:00
lashman 4a9de759b9 Add WCAG accessible labels to integration dialog list boxes 2026-02-27 10:06:33 +02:00
lashman 718fd88351 Rewrite update dialog text to plain language for WCAG readability 2026-02-27 10:06:30 +02:00
lashman 76209c9cad Add WCAG tooltips and expanded abbreviations to security report 2026-02-27 10:06:21 +02:00
lashman 905f5987fd Add WCAG tooltips, plain language, busy states, and banner role to detail view 2026-02-27 10:04:46 +02:00
lashman 5077b35068 Add WCAG accessible labels to library view buttons, list box, and search bar 2026-02-27 10:03:28 +02:00
lashman 784415834e Add WCAG tooltips for technical terms on dashboard 2026-02-27 10:03:16 +02:00
lashman 19e4844a8e Add accessible label to integration emblem overlay in app cards 2026-02-27 10:02:53 +02:00
lashman 7d4a9d9c95 Add WCAG accessibility helpers: labeled badges, live announcements, copy button label 2026-02-27 10:01:37 +02:00
lashman c43c2b73ba Add WCAG AAA focus indicators, high-contrast mode, and reduced-motion coverage 2026-02-27 09:59:44 +02:00
lashman 682ae73ab7 Add WCAG 2.2 AAA compliance design document 2026-02-27 09:35:35 +02:00
lashman 667f0eb1c2 Implement Driftwood AppImage manager - Phases 1 and 2 2026-02-26 23:04:27 +02:00
lashman d256c008f4 Remove design document from tracking 2026-02-26 20:53:41 +02:00
lashman e5d1bd8590 Add Driftwood design document - modern AppImage manager for Wayland-era Linux desktops 2026-02-26 20:51:46 +02:00
4 changed files with 4 additions and 141 deletions
-137
View File
@@ -1,137 +0,0 @@
# Contributing to Driftwood
## Building from source
### Dependencies
- Rust 1.75+ and Cargo
- GTK 4.16+ development headers (`libgtk-4-dev` or `gtk4-devel`)
- libadwaita 1.6+ development headers (`libadwaita-1-dev` or `libadwaita-devel`)
- SQLite 3 development headers
- gettext development headers
- `glib-compile-resources` and `glib-compile-schemas` (from `libglib2.0-dev-bin`)
### Quick start
```sh
git clone https://github.com/driftwood-app/driftwood
cd driftwood
cargo build
cargo run
```
### Running tests
```sh
cargo test
```
## Project structure
```
driftwood/
Cargo.toml # Rust package manifest
build.rs # GResource and GSettings compilation
meson.build # Meson build system for installation
src/
main.rs # Entry point, GResource init, CLI dispatch
application.rs # GtkApplication subclass, CSS loading, app actions
window.rs # Main window, navigation, scanning orchestration
config.rs # App ID and version constants
cli.rs # Command-line interface (clap)
i18n.rs # Internationalization (gettext wrappers)
core/ # Backend logic (no GTK dependencies)
database.rs # SQLite database (rusqlite), all queries
discovery.rs # Filesystem scanning, AppImage detection, SHA256
inspector.rs # AppImage metadata extraction (icon, desktop entry)
integrator.rs # Desktop integration (.desktop files, icons)
launcher.rs # AppImage launching with FUSE/sandbox support
updater.rs # Update checking and applying (GitHub, zsync)
fuse.rs # FUSE status detection
wayland.rs # Wayland compatibility analysis
security.rs # CVE scanning via OSV.dev API
duplicates.rs # Duplicate and multi-version detection
footprint.rs # Disk footprint analysis (config/data/cache)
orphan.rs # Orphaned desktop entry detection and cleanup
ui/ # GTK4/libadwaita UI components
library_view.rs # Main grid/list view of AppImages
app_card.rs # Individual AppImage card widget
detail_view.rs # Full detail page for a single AppImage
dashboard.rs # System health dashboard
preferences.rs # Preferences dialog
update_dialog.rs # Update check and apply dialog
duplicate_dialog.rs # Duplicate resolution dialog
cleanup_wizard.rs # Disk space reclamation wizard
security_report.rs # Security scan results view
integration_dialog.rs # Desktop integration confirmation
widgets.rs # Shared utility widgets (badges, sections)
data/
app.driftwood.Driftwood.gschema.xml # GSettings schema
app.driftwood.Driftwood.desktop # Desktop entry for Driftwood itself
app.driftwood.Driftwood.metainfo.xml # AppStream metadata
resources.gresource.xml # GResource manifest
resources/style.css # Application CSS
po/ # Translation files
POTFILES.in # Files with translatable strings
LINGUAS # Available translations
build-aux/ # Build helpers
app.driftwood.Driftwood.json # Flatpak manifest
build-appimage.sh # AppImage build script
packaging/
PKGBUILD # Arch Linux AUR package
```
## Architecture
The codebase is split into three layers:
1. **core/** - Pure Rust business logic. No GTK dependencies. Can be tested
independently. Each module handles one concern.
2. **ui/** - GTK4/libadwaita widgets. Each view is a function that builds a
widget tree. Uses `Rc<Database>` for shared database access.
3. **window.rs / application.rs** - Orchestration layer. Connects UI to core,
handles navigation, spawns background threads for scanning.
Background work (scanning, update checks, security scans) runs on
`gio::spawn_blocking` threads. Results are sent back to the main thread
via `glib::spawn_future_local`.
## Coding conventions
- Follow standard Rust formatting (`cargo fmt`)
- All new code must compile with zero warnings
- Add tests for core/ modules (81+ tests currently)
- Use `log::info!`, `log::warn!`, `log::error!` for diagnostics
- User-facing strings should be wrapped in `i18n()` for translation
- Use `adw::` widgets over raw `gtk::` when an Adwaita equivalent exists
- Status badges use CSS classes: `badge-success`, `badge-warning`, `badge-error`
## Database
SQLite database stored at `~/.local/share/driftwood/driftwood.db`. Schema
migrates automatically (v1 through v4). All queries are in `core/database.rs`.
## Testing
```sh
# Run all tests
cargo test
# Run tests for a specific module
cargo test core::database
cargo test core::updater
# Run with output
cargo test -- --nocapture
```
Tests use `Database::open_in_memory()` for isolation.
+1 -1
View File
@@ -5,7 +5,7 @@
<policyconfig>
<vendor>Driftwood</vendor>
<vendor_url>https://github.com/driftwood-appimage</vendor_url>
<vendor_url>https://git.lashman.live/lashman/driftwood</vendor_url>
<action id="app.driftwood.Driftwood.system-install">
<description>Install AppImage system-wide</description>
+2 -2
View File
@@ -5,8 +5,8 @@ pkgver=0.1.0
pkgrel=1
pkgdesc='Modern AppImage manager for GNOME desktops'
arch=('x86_64')
url='https://github.com/driftwood-app/driftwood'
license=('GPL-3.0-or-later')
url='https://git.lashman.live/lashman/driftwood'
license=('CC0-1.0')
depends=(
'gtk4'
'libadwaita'
+1 -1
View File
@@ -51,7 +51,7 @@ pub struct AppImageRecord {
pub tags: Option<String>,
pub pinned: bool,
pub avg_startup_ms: Option<i64>,
// Phase 9 fields - comprehensive metadata
// Phase 9 fields - extended metadata
pub appstream_id: Option<String>,
pub appstream_description: Option<String>,
pub generic_name: Option<String>,