
### A file manager for the dux desktop
Built with [Quickshell](https://quickshell.org/) and [Go](https://go.dev/)
Dux Files is a standalone file manager for Wayland. A small Go daemon does the file work and a Quickshell UI sits on top of it. It looks and feels like the rest of the dux desktop and picks up Dux Shell's colors when DMS is running, but it works fine on its own.
## Features
**Tabs, panes and views**
Tabs, a split view with two panes, and list, grid and column views. Sort and view can be remembered per folder.
**Fast navigation**
Type to jump to a name or filter the folder, jump to any folder you have visited before, and reopen closed tabs.
**Search**
Recursive search by name with filters. Uses [danksearch](https://github.com/duxlabs-dev/dux-search) when it is running and walks the tree when it isn't.
**File operations**
Copy, move, rename, trash and delete run as jobs with progress and conflict handling, and most of them can be undone. Denied operations offer Retry as administrator through polkit.
**Archives**
Opening an archive extracts it next to itself, like Nautilus. Compress to zip, tar.gz, tar.xz and tar.zst. All pure Go, no external tools.
**Devices and network**
Mount, unmount and eject drives through udisks2. Connect to sftp, smb, ftp, WebDAV, nfs and afp shares through gvfs.
**Trash, recent files and bookmarks**
Browse and restore the trash, see recently used files, and keep bookmarks in the sidebar.
**Open and save dialogs**
Can serve the desktop portal's file chooser, so other apps get the same window, sidebar and keys when they open or save a file.
**Desktop integration**
Owns `org.freedesktop.FileManager1`, so "show in folder" from browsers and other apps lands here.
## Installation
### From source
You need Go and `quickshell`.
```bash
git clone --recurse-submodules https://github.com/duxlabs-dev/dux-files.git
cd dux-files
make
sudo make install
```
`make install` puts the `dfiles` binary (UI included), the desktop entry, icon, metainfo, polkit policy and the D-Bus activation files under `/usr/local`. `sudo make uninstall` removes them.
To keep it running in the background so windows open instantly:
```bash
make install-systemd
systemctl --user enable --now dfiles
```
### NixOS / home-manager
```nix
{
inputs.dux-files.url = "github:duxlabs-dev/dux-files";
# home-manager or NixOS
imports = [ inputs.dux-files.homeModules.dux-files ];
programs.dux-files.enable = true;
}
```
Use `nixosModules.dux-files` for a NixOS configuration. `programs.dux-files.systemd.enable` starts it with the session, and `programs.dux-files.portal.enable` registers the open and save dialogs.
### Flatpak
See [distro/flatpak/README.md](distro/flatpak/README.md).
### Optional dependencies
Picked up from `PATH` when the daemon starts:
| package | enables |
| --- | --- |
| `bubblewrap` | runs external thumbnailers in a sandbox, like gnome-desktop does |
| `ffmpegthumbnailer` | video thumbnails |
| `poppler` (`poppler-utils` on Debian) | pdf thumbnails |
| `gvfs` | network shares and the trash on removable drives |
| `udisks2` | the devices sidebar |
Images in png, jpeg, gif, bmp, tiff and webp are decoded in-process. Anything else uses the freedesktop thumbnailers installed on the system, so packages that ship one (glycin, gsf, evince, totem) just work. `dfiles ipc system.capabilities` shows what was found.
## Usage
```bash
dfiles show # Show the window, starting dfiles if needed
dfiles open ~/Downloads # Open folders, one tab each
dfiles open --new-window ~/src # Same, in a new window
dfiles select ~/notes.txt # Open the folder with the file selected
dfiles properties ~/notes.txt # Properties dialog
```
`dfiles open` accepts plain paths and these locations:
| location | opens |
| --- | --- |
| `/path`, `relative/path`, `file:///path` | that path |
| `trash:///` | the trash |
| `computer:///` | `/` |
| `network:///` | the Connect to Server dialog |
| `admin:///path` | the path, with Retry as administrator on denied operations |
| `sftp:// ssh:// smb:// ftp:// ftps:// dav:// davs:// nfs:// afp://` | mounted through gvfs, then opened in a new tab |
Started by the systemd unit, closing the window just hides it. Started any other way, closing the last window quits unless Settings, Close behavior says otherwise.
### Command line
The CLI talks to the running dfiles when there is one and does the work itself when there isn't. `--json` gives machine-readable output.
```bash
dfiles trash put|list|count|restore|empty
dfiles mime query|default|set
dfiles devices list|mount|unmount|eject
dfiles search