Fika is a lightweight Rust + Slint file manager prototype aimed at modern Wayland desktops. The current implementation focuses on a small, usable core:
- browse local directories
- jump to home, parent, filesystem root, and directory history
- refresh the current directory, including debounced directory monitoring
- switch between light and dark UI modes
- resize the window with guarded minimum dimensions to avoid content overflow
- open files through the desktop default application without shelling out to
xdg-open - run file operations asynchronously, including copy, move, link, trash, rename, conflict handling, and one-step undo
- run as a lightweight chooser with
--chooser, and as an experimentalxdg-desktop-portalFileChooser backend
cargo run
cargo run -- --chooser ~/Downloads
cargo run -- --diagnose-devicesPackaged desktop integration installs D-Bus, Polkit, and portal metadata in addition to the binaries. The metadata can be staged and checked without root:
DESTDIR=/tmp/fika-root PREFIX=/usr BINDIR=/usr/lib/fika scripts/install-data.sh
DESTDIR=/tmp/fika-root PREFIX=/usr BINDIR=/usr/lib/fika \
scripts/check-runtime-integration.sh --metadata-onlyAfter a real install, run scripts/check-runtime-integration.sh to verify the
installed system-bus helper, Polkit action, and portal backend metadata. The
script also prints a runtime context summary for distro/desktop comparison and
reports which portals.conf file currently controls FileChooser backend
selection. Add --activate-system-helper to confirm D-Bus activation of the
privileged helper without invoking a privileged file-operation method.
The Fika portal backend is independent of GNOME/KDE/COSMIC/GTK portal
backends. Installing fika.portal only registers the backend; it does not make
Fika the active FileChooser. To validate the backend, opt in through
xdg-desktop-portal configuration, for example by copying the shape shown in
docs/examples/fika-portals.conf into an appropriate user or system
portals.conf.
For Devices sidebar validation without starting the GUI, run
fika --diagnose-devices. It prints the same Rust-discovered device rows and
Mount/Unmount/Eject capabilities used by the UI, without performing any device
operation.
The UI is defined in ui/app.slint and compiled from build.rs with
slint-build. Both slint and slint-build are pinned to 1.16.1.
Default application launching is implemented locally: Fika guesses the MIME
type, reads XDG mimeapps.list files, resolves the matching .desktop file,
and expands its Exec= command.
In chooser mode, selecting an item and pressing Choose prints the selected
path to stdout and exits. The fika-xdp-filechooser binary exposes the
experimental org.freedesktop.impl.portal.FileChooser backend and launches
fika --chooser as its UI frontend.
The GUI process is intentionally non-privileged. Protected operations go through a constrained D-Bus helper on the system bus; the helper performs per-method Polkit checks before running fixed file operations or protected external-editor writeback.
Detailed planning lives in:
docs/DESIGN.mdfor architecture and subsystem designdocs/TODO.mdfor the implementation roadmap and acceptance criteria