2026-01-07 20:22:49 +01:00
|
|
|
# Noctua
|
|
|
|
|
|
|
|
|
|
An image viewer application for the COSMIC™ desktop
|
|
|
|
|
|
2026-01-10 17:53:37 +01:00
|
|
|

|
2026-01-10 17:40:21 +01:00
|
|
|
|
Complete Clean Architecture migration
Phase 1-7: Full migration from src/app/ to Clean Architecture
BREAKING CHANGES:
- Removed src/app/ (old TEA-style implementation)
- Removed src/constant.rs (constants now local to modules)
- Removed deprecated canvas_to_image_coords functions
NEW STRUCTURE:
- src/ui/ - UI Layer (COSMIC interface)
- src/application/ - Application Layer (DocumentManager, Commands)
- src/domain/ - Domain Layer (Document types, Operations)
- src/infrastructure/ - Infrastructure Layer (Loaders, Cache, System)
FEATURES:
- DocumentManager as Single Source of Truth
- Command Pattern for all operations
- Model caching for render data (performance)
- Sync mechanism between DocumentManager and UI Model
- Wallpaper support (COSMIC, KDE, GNOME, feh)
- Thumbnail cache with disk persistence
IMPROVEMENTS:
- Warnings: 62 → 43 (-31%)
- Deprecated warnings: 2 → 0 (-100%)
- Code removed: src/app/ (~2000 lines), constant.rs, deprecated functions
- Better Locality of Reference (constants local to modules)
- Clean separation of concerns
- No circular dependencies
DOCUMENTATION:
- Updated AGENTS.md (100% migration status)
- Updated README.md (architecture section)
- Updated Workflow.md
- Added Migration-Plan.md with full completion summary
TESTS:
- All 41 tests passing
- Build successful (0 errors, 43 warnings)
- Release build verified
Migration Status: ✅ 100% Complete
2026-02-03 08:43:21 +01:00
|
|
|
## Features
|
|
|
|
|
|
|
|
|
|
- **Multi-format support**: Raster images (PNG, JPEG, WebP, etc.), SVG vector graphics, and PDF documents
|
|
|
|
|
- **Navigation**: Browse through folders with keyboard shortcuts
|
|
|
|
|
- **Transformations**: Rotate, flip, and crop images
|
|
|
|
|
- **Zoom & Pan**: Flexible viewing with zoom controls and panning
|
|
|
|
|
- **Multi-page documents**: Navigate PDF pages with thumbnail previews
|
|
|
|
|
- **Metadata display**: View EXIF data and file information
|
|
|
|
|
- **Wallpaper setting**: Set images as desktop wallpaper (multi-DE support)
|
|
|
|
|
|
|
|
|
|
## Architecture
|
|
|
|
|
|
2026-02-05 18:03:59 +01:00
|
|
|
Noctua follows Clean Architecture principles with clear separation of concerns.
|
Complete Clean Architecture migration
Phase 1-7: Full migration from src/app/ to Clean Architecture
BREAKING CHANGES:
- Removed src/app/ (old TEA-style implementation)
- Removed src/constant.rs (constants now local to modules)
- Removed deprecated canvas_to_image_coords functions
NEW STRUCTURE:
- src/ui/ - UI Layer (COSMIC interface)
- src/application/ - Application Layer (DocumentManager, Commands)
- src/domain/ - Domain Layer (Document types, Operations)
- src/infrastructure/ - Infrastructure Layer (Loaders, Cache, System)
FEATURES:
- DocumentManager as Single Source of Truth
- Command Pattern for all operations
- Model caching for render data (performance)
- Sync mechanism between DocumentManager and UI Model
- Wallpaper support (COSMIC, KDE, GNOME, feh)
- Thumbnail cache with disk persistence
IMPROVEMENTS:
- Warnings: 62 → 43 (-31%)
- Deprecated warnings: 2 → 0 (-100%)
- Code removed: src/app/ (~2000 lines), constant.rs, deprecated functions
- Better Locality of Reference (constants local to modules)
- Clean separation of concerns
- No circular dependencies
DOCUMENTATION:
- Updated AGENTS.md (100% migration status)
- Updated README.md (architecture section)
- Updated Workflow.md
- Added Migration-Plan.md with full completion summary
TESTS:
- All 41 tests passing
- Build successful (0 errors, 43 warnings)
- Release build verified
Migration Status: ✅ 100% Complete
2026-02-03 08:43:21 +01:00
|
|
|
|
|
|
|
|
**Key Patterns:**
|
|
|
|
|
- **MVU (Model-View-Update)**: Elm architecture via libcosmic
|
2026-02-05 18:03:59 +01:00
|
|
|
- **Command Pattern**: Domain operations encapsulated in commands
|
Complete Clean Architecture migration
Phase 1-7: Full migration from src/app/ to Clean Architecture
BREAKING CHANGES:
- Removed src/app/ (old TEA-style implementation)
- Removed src/constant.rs (constants now local to modules)
- Removed deprecated canvas_to_image_coords functions
NEW STRUCTURE:
- src/ui/ - UI Layer (COSMIC interface)
- src/application/ - Application Layer (DocumentManager, Commands)
- src/domain/ - Domain Layer (Document types, Operations)
- src/infrastructure/ - Infrastructure Layer (Loaders, Cache, System)
FEATURES:
- DocumentManager as Single Source of Truth
- Command Pattern for all operations
- Model caching for render data (performance)
- Sync mechanism between DocumentManager and UI Model
- Wallpaper support (COSMIC, KDE, GNOME, feh)
- Thumbnail cache with disk persistence
IMPROVEMENTS:
- Warnings: 62 → 43 (-31%)
- Deprecated warnings: 2 → 0 (-100%)
- Code removed: src/app/ (~2000 lines), constant.rs, deprecated functions
- Better Locality of Reference (constants local to modules)
- Clean separation of concerns
- No circular dependencies
DOCUMENTATION:
- Updated AGENTS.md (100% migration status)
- Updated README.md (architecture section)
- Updated Workflow.md
- Added Migration-Plan.md with full completion summary
TESTS:
- All 41 tests passing
- Build successful (0 errors, 43 warnings)
- Release build verified
Migration Status: ✅ 100% Complete
2026-02-03 08:43:21 +01:00
|
|
|
- **Dependency Inversion**: Domain has no dependencies on infrastructure
|
|
|
|
|
- **Type-Erased Documents**: `DocumentContent` enum for unified handling
|
2026-01-07 20:22:49 +01:00
|
|
|
|
|
|
|
|
## Installation
|
|
|
|
|
|
|
|
|
|
A [justfile](./justfile) is included by default for the [casey/just][just] command runner.
|
|
|
|
|
|
|
|
|
|
- `just` builds the application with the default `just build-release` recipe
|
|
|
|
|
- `just run` builds and runs the application
|
|
|
|
|
- `just install` installs the project into the system
|
|
|
|
|
- `just vendor` creates a vendored tarball
|
|
|
|
|
- `just build-vendored` compiles with vendored dependencies from that tarball
|
|
|
|
|
- `just check` runs clippy on the project to check for linter warnings
|
|
|
|
|
- `just check-json` can be used by IDEs that support LSP
|
|
|
|
|
|
2026-01-18 20:35:12 +01:00
|
|
|
### Dependencies
|
|
|
|
|
#### Arch Linux
|
|
|
|
|
```bash
|
|
|
|
|
sudo pacman -S poppler-glib
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
#### Debian/Ubuntu
|
|
|
|
|
```bash
|
|
|
|
|
sudo apt install libpoppler-glib-dev
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
#### Fedora
|
|
|
|
|
```bash
|
|
|
|
|
sudo dnf install poppler-glib-devel
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
#### OpenSUSE
|
|
|
|
|
```bash
|
|
|
|
|
sudo zypper install poppler-glib-devel
|
|
|
|
|
```
|
|
|
|
|
|
2026-01-15 06:20:00 +01:00
|
|
|
## Documentation
|
2026-01-07 20:22:49 +01:00
|
|
|
|
2026-01-15 19:06:32 +01:00
|
|
|
- [Usage](docs/usage.md)
|
2026-01-15 06:20:00 +01:00
|
|
|
- [Features](docs/features.md)
|
2026-01-07 20:22:49 +01:00
|
|
|
|
2026-01-15 06:20:00 +01:00
|
|
|
## License
|
2026-01-07 20:22:49 +01:00
|
|
|
|
2026-01-15 06:20:00 +01:00
|
|
|
GPL-3.0-or-later
|