diff --git a/.github/README.md b/.github/README.md index 50abdbf455fb..cff954557507 100644 --- a/.github/README.md +++ b/.github/README.md @@ -15,32 +15,88 @@ Files is created and maintained by the [Files Community](https://github.com/file This fork runs Files natively on Linux (Uno Platform, Skia, X11). The shell, Settings, file operations, trash, archives, clipboard and drag and drop, UDisks2 volumes and desktop integration are in place. See the [showcase](../docs/linux-port/SHOWCASE.md) for the full feature checklist and what is not working yet. -## Installing LinuxFiles +## Install -Packages are coming soon; until then, install from a local build: +[![Latest release](https://img.shields.io/github/v/release/MemerGamer/LinuxFiles?include_prereleases&filter=linux-v*&label=release)](https://github.com/MemerGamer/LinuxFiles/releases/tag/linux-v0.1.0-alpha1) -| Method | Status | -|---|---| -| AppImage | coming soon | -| Flatpak (`io.github.memergamer.LinuxFiles`) | coming soon | -| AUR `linuxfiles-bin` | coming soon | -| `scripts/linux/install-local.sh` | available now | +> [!NOTE] +> **0.1.0-alpha1 is the first public release and an alpha.** Expect rough edges and missing features, and keep backups of anything you care about. Please report problems in the [issue tracker](https://github.com/MemerGamer/LinuxFiles/issues). + +Grab the assets from the [0.1.0-alpha1 release page](https://github.com/MemerGamer/LinuxFiles/releases/tag/linux-v0.1.0-alpha1). Requirements: x86_64 Linux with an X11 session or XWayland (Wayland desktops work through XWayland); the packages are self-contained, so no .NET install is needed. + +### Arch Linux (AUR) + +```sh +yay -S linuxfiles-bin # or: paru -S linuxfiles-bin +``` + +This is the only format that also installs the polkit helper for the optional [root actions](#root-actions). + +### AppImage + +```sh +curl -LO https://github.com/MemerGamer/LinuxFiles/releases/download/linux-v0.1.0-alpha1/Files-x86_64.AppImage +chmod +x Files-x86_64.AppImage +./Files-x86_64.AppImage +``` + +### Flatpak bundle + +```sh +flatpak install --user Files-x86_64.flatpak +flatpak run io.github.memergamer.LinuxFiles +``` + +The bundle needs the `org.freedesktop.Platform//25.08` runtime; Flatpak offers to install it from Flathub. + +### Tarball + +```sh +tar xzf files-linux-x64.tar.gz +./linux-x64/Files # run it in place +``` + +To install it for your user (menu entry, icons, `files` launcher in `~/.local`), use the script from a clone of this repository, which also supplies the desktop entry and icons: ```sh git clone https://github.com/MemerGamer/LinuxFiles.git cd LinuxFiles -scripts/linux/install-local.sh +scripts/linux/install-local.sh --from /path/to/linux-x64 +``` + +`files-packaging.tar.gz` holds only the desktop entry, metainfo, icons, launcher and licence, for packagers (the AUR package consumes it together with the tarball above). `scripts/linux/uninstall-local.sh` reverses a local install. + +### Root actions + +Optional. **Open in terminal as root** works everywhere (it asks your terminal elevation tool: run0, sudo or pkexec). The polkit-authenticated Delete/Rename/Paste-as-root actions need the root helper, which only the AUR package installs; they are off in the AppImage and Flatpak. Start a root-mode window with: + +```sh +files --root +``` + +or pick **Open in Root Mode** from the launcher's desktop actions. Each action asks for authentication for that exact operation, and the GUI itself stays unprivileged. See the [elevation threat model](../docs/linux-port/threat-model-elevation.md). + +### Verify downloads + +Download `SHA256SUMS` next to the files you fetched and check them (missing files are reported, not fatal, with `--ignore-missing`): + +```sh +sha256sum -c --ignore-missing SHA256SUMS ``` ### Nightly builds -Every merge to `main` publishes a tarball and AppImage to the rolling [nightly pre-release](https://github.com/MemerGamer/LinuxFiles/releases/tag/nightly). Run it with: +Every merge to `main` publishes a tarball and AppImage to the rolling [nightly pre-release](https://github.com/MemerGamer/LinuxFiles/releases/tag/nightly). It is untested bleeding edge. Run it with: ```sh curl -LO https://github.com/MemerGamer/LinuxFiles/releases/download/nightly/LinuxFiles-nightly-x86_64.AppImage && chmod +x LinuxFiles-nightly-x86_64.AppImage && ./LinuxFiles-nightly-x86_64.AppImage ``` -See [docs/linux-port/packaging.md](../docs/linux-port/packaging.md) for packaging details and [docs/linux-port/PLAN.md](../docs/linux-port/PLAN.md) for the roadmap. +### More + +- [CHANGELOG.md](../CHANGELOG.md): what is in each release +- [Showcase](../docs/linux-port/SHOWCASE.md): screenshots and the feature checklist +- [Packaging details](../docs/linux-port/packaging.md) and the [roadmap](../docs/linux-port/PLAN.md) ## Reporting bugs diff --git a/CHANGELOG.md b/CHANGELOG.md index 4f765b6c411c..c10e16acf0f6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,43 +5,100 @@ Community. This changelog covers the fork only. ## 0.1.0-alpha1 - 2026-10-06 -First alpha. Expect rough edges; please report issues at https://github.com/MemerGamer/LinuxFiles/issues. +First public alpha. Expect rough edges and do not rely on it for data you cannot afford to lose. Please report +issues at https://github.com/MemerGamer/LinuxFiles/issues. Downloads and install instructions are on the +[release page](https://github.com/MemerGamer/LinuxFiles/releases/tag/linux-v0.1.0-alpha1). -### Platform +### Highlights + +- Files runs natively on Linux (X11 / XWayland) on the Uno Platform Skia desktop head instead of WinUI 3. +- Grouped views are virtualized: a 10,000-file folder grouped in the Grid went from 90 s to 1.7 s, and grouping + in Downloads works again. +- KDE service menus appear under "Show more options", filtered per action by the current shell. +- Root actions through a polkit-authenticated helper, with the prompt bound to the exact operation, plus a root + mode (`files --root`) and "Open in terminal as root". +- Native file pickers, opening files inside archives, tabs in a client-side title bar and the Win11 icon theme. +- Packages for Arch (AUR `linuxfiles-bin`), AppImage, Flatpak and a self-contained tarball. + +### Features + +Platform -- The app now runs natively on Linux (x11 / XWayland) on the Uno Platform Skia desktop head instead of WinUI 3. - The Windows-only code paths are kept but are not built or tested. - Linux-specific services replace the Win32/COM layer: XDG paths and settings store, folder watching, freedesktop trash, XDG thumbnails and icon themes, MIME types and `.desktop` launchers, drives via UDisks2, GVfs network and MTP locations, Secret Service credentials, D-Bus notifications and recent files. +- The Windows-only code paths are kept but are not built or tested. -### File management +File management -- Browsing, copy/move/delete/rename and undo-friendly file operations on Linux, with fd-relative, symlink-safe - recursive operations and special-file handling. +- Browsing, copy/move/delete/rename and undo-friendly file operations, with fd-relative, symlink-safe recursive + operations and special-file handling. - Trash: move to trash, restore and empty, with containment and ownership checks. -- Archives (zip, tar, 7z, rar and more) via SharpCompress, with extraction hardening. -- Search, tags (extended attributes) and a Linux Properties window with POSIX permissions. +- Archives (zip, tar, 7z, rar and more) via SharpCompress with hardened extraction. Browse inside archives, open + files from them (read-only) and use the Extract actions. +- Search, tags (extended attributes), file previews and a Linux Properties window with POSIX permissions. - Clipboard and drag and drop with other Linux applications (X11 file clipboard, XDND). -- Native file and folder pickers. +- Native file and folder pickers through the desktop portal. -### Desktop integration +Desktop integration +- KDE service menus under "Show more options", with per-action shell filtering. - Context menus: Open with, New from templates, Open in terminal. -- Confirmation before running binaries or untrusted launchers; launch arguments are exact-argv, never shell - interpolated. +- Root mode: `files --root`, the "Open in Root Mode" desktop action, or simply running as root (the tab and title + show "(Root mode)" or "(Running as root)"). +- "Open in terminal as root" using run0, sudo or pkexec, starting root's login shell. - Single instance, and `org.freedesktop.FileManager1` (ShowFolders, ShowItems, ShowItemProperties) so other applications can reveal files in LinuxFiles. - Can be set as the default file manager for `inode/directory`; nothing changes automatically. -- System theme, fonts, SVG icons, folder icons and native window decorations. + +Look and feel + +- A client-side title bar with tabs, a live window title and a Home-rooted breadcrumb. +- The Win11 icon theme is supported; folder icons always show with Win11-style themes. +- HiDPI scale detection from the desktop settings, labelled Sort and Layout toolbar buttons, accessibility names + on controls and a translation fallback to English for missing strings. +- System theme, bundled UI font, SVG icons and window decorations. +- Settings changed in one window are merged with the other windows instead of overwriting them. + +### Fixes + +- Grouped file lists render and scroll quickly in the Grid, List and Cards layouts. +- A slow second click on a file no longer starts a rename by mistake. +- Column widths in Details are persisted correctly. +- Large folders with many PDFs load faster. +- Renames work on NFS/FUSE filesystems without hardlinks, and cross-device trash restores are staged safely. +- Toolbar icons and the toolbar row, Sort/Group/View buttons, status bar sizes and Recycle Bin columns. +- Keyboard shortcuts, Enter in the address bar and typed paths; layout shortcuts and Settings tab reuse. +- Light-theme grid selection, list row height, Grid labels and Details alignment. +- Flatpak: XDG user folders (Desktop, Downloads, ...) are found reliably, also without a `user-dirs.dirs` file. ### Packaging -- Self-contained tarball, AppImage, Flatpak bundle (`io.github.memergamer.LinuxFiles`) and an AUR binary package - (`linuxfiles-bin`). Rolling `nightly` builds are published for every push to `main`. +- Self-contained tarball (`files-linux-x64.tar.gz`), AppImage (`Files-x86_64.AppImage`), Flatpak bundle + (`Files-x86_64.flatpak`, app id `io.github.memergamer.LinuxFiles`) and the AUR binary package `linuxfiles-bin`. + `SHA256SUMS`, `PKGBUILD` and `SRCINFO` are attached to the release. +- The launcher command is `files`. +- Tagged-release CI is idempotent (re-running replaces the assets) and the AUR recipe generation was fixed. +- A rolling `nightly` pre-release is published for every push to `main`. + +### Security + +- Root actions run through a root-owned, non-setuid helper behind a polkit action that requires administrator + authentication every time; the prompt names the exact operation. The GUI stays unprivileged. +- AppImage and Flatpak never include the helper, so root actions are disabled there. +- Confirmation before running binaries or untrusted launchers; launch arguments are exact-argv, never shell + interpolated. +- The preview pane never opens device files, even under a path-swap race. +- Archive extraction, trash and recursive file operations are hardened against symlink and path-swap tricks. -### Known limitations +### Known issues +- In the light theme, toolbar buttons can fade when they have focus. +- The Grid context menu acrylic can show an olive smear. +- The Properties dialog has no backdrop. +- Long file names wrap in the Details layout. +- The length of the polkit prompt depends on your authentication agent. +- Wayland sessions run through XWayland; there is no native Wayland support or AT-SPI accessibility yet. +- The Windows build has not been restored (planned for phase 8). - x86_64 only; arm64 is wired but untested. -- Wayland sessions run through XWayland. - Windows-only features (Windows integrations, cloud drive and Store specifics) are not available. diff --git a/docs/linux-port/SHOWCASE.md b/docs/linux-port/SHOWCASE.md index e269d77fa155..f58a7ff1200f 100644 --- a/docs/linux-port/SHOWCASE.md +++ b/docs/linux-port/SHOWCASE.md @@ -7,6 +7,8 @@ The shots use the public "Win11" icon theme, selected the way the app does on a Last updated: commit `e1eaca8dc`, 2026-10-06 (see `showcase/captured.txt` for the exact shot list). +Install instructions for the 0.1.0-alpha1 release (AUR, AppImage, Flatpak, tarball) are in the [README](../../.github/README.md#install). + ## What works today Taken from the merged state of `main` and [PLAN.md](PLAN.md). diff --git a/docs/linux-port/packaging.md b/docs/linux-port/packaging.md index 47a5be3a539b..334f0241cc0f 100644 --- a/docs/linux-port/packaging.md +++ b/docs/linux-port/packaging.md @@ -1,4 +1,4 @@ -# Linux packaging (Phase 6 groundwork) +# Linux packaging App id (used everywhere): `io.github.memergamer.LinuxFiles`. Binary/launcher: `files`. Assembly: `Files.dll` (apphost `Files`). @@ -127,7 +127,7 @@ unbuilt. ### Publishing a release (exact procedure) -The draft release `linux-vX.Y.Z[-pre]` already holds hand-uploaded assets; CI replaces them with its own build. +First used for `linux-v0.1.0-alpha1` (prerelease; install instructions are in `.github/README.md`, the release body is kept in `docs/linux-port/release-notes/.md`). Create a draft release `linux-vX.Y.Z[-pre]` with the notes, optionally with hand-uploaded assets; CI replaces them with its own build. 1. Undraft the release (GitHub UI, or `gh release edit linux-vX.Y.Z-pre -R MemerGamer/LinuxFiles --draft=false`). Publishing creates the tag, which triggers `package-linux.yml`. The `release` job finds the existing release diff --git a/docs/linux-port/release-notes/0.1.0-alpha1.md b/docs/linux-port/release-notes/0.1.0-alpha1.md new file mode 100644 index 000000000000..2fca3093f7fb --- /dev/null +++ b/docs/linux-port/release-notes/0.1.0-alpha1.md @@ -0,0 +1,69 @@ +# LinuxFiles 0.1.0-alpha1 + +First public alpha of LinuxFiles, an unofficial native Linux port of [Files](https://github.com/files-community/Files) by the Files Community. Expect rough edges and keep backups of anything you care about. + +## Highlights + +- Files running natively on Linux (X11 / XWayland), no Wine or Windows needed. +- Fast grouped views: 10,000 files grouped in the Grid went from 90 s to 1.7 s. +- KDE service menus under "Show more options". +- Optional root actions through a polkit-authenticated helper (the prompt names the exact operation), root mode (`files --root`) and "Open in terminal as root". +- Native file pickers, opening files inside archives, tabs in a client-side title bar, Win11 icon theme, HiDPI scale detection. +- Fixes for slow-click rename, Details column widths and multi-window settings. + +Full notes: [CHANGELOG.md](https://github.com/MemerGamer/LinuxFiles/blob/main/CHANGELOG.md). + +## Install + +Requires x86_64 Linux with X11 or XWayland. Packages are self-contained. + +**Arch (AUR)**, which also installs the optional polkit root helper: + +```sh +yay -S linuxfiles-bin # or paru -S linuxfiles-bin +``` + +**AppImage**: + +```sh +chmod +x Files-x86_64.AppImage && ./Files-x86_64.AppImage +``` + +**Flatpak bundle** (root actions are off in the sandbox): + +```sh +flatpak install --user Files-x86_64.flatpak +flatpak run io.github.memergamer.LinuxFiles +``` + +**Tarball**: + +```sh +tar xzf files-linux-x64.tar.gz && ./linux-x64/Files +``` + +To install the tarball for your user, run `scripts/linux/install-local.sh --from ` from a clone of the repository. `files-packaging.tar.gz` is for packagers. + +## Checksums + +Download `SHA256SUMS` into the same folder as your download and run: + +```sh +sha256sum -c --ignore-missing SHA256SUMS +``` + +## Known issues + +- Light-theme toolbar buttons can fade when focused. +- The Grid context-menu acrylic can show an olive smear. +- The Properties dialog has no backdrop. +- Long file names wrap in Details. +- The polkit prompt length depends on your authentication agent. +- Wayland runs through XWayland. +- The Windows build is not restored yet (phase 8). + +Report problems at https://github.com/MemerGamer/LinuxFiles/issues. + +## Credits + +LinuxFiles is built on [Files](https://github.com/files-community/Files) by the [Files Community](https://github.com/files-community) and its contributors, used under the MIT licence. This port is not affiliated with or endorsed by the Files Community; the supported Files for Windows is at [files.community](https://files.community/). Thanks also to the Uno Platform and SkiaSharp projects that make the Linux port possible. See [NOTICE.md](https://github.com/MemerGamer/LinuxFiles/blob/main/NOTICE.md). diff --git a/packaging/linux/io.github.memergamer.LinuxFiles.metainfo.xml b/packaging/linux/io.github.memergamer.LinuxFiles.metainfo.xml index 872a8a69c80d..237717174258 100644 --- a/packaging/linux/io.github.memergamer.LinuxFiles.metainfo.xml +++ b/packaging/linux/io.github.memergamer.LinuxFiles.metainfo.xml @@ -28,6 +28,11 @@ - + + https://github.com/MemerGamer/LinuxFiles/releases/tag/linux-v0.1.0-alpha1 + +

First public alpha of LinuxFiles. Faster grouped views, KDE service menus, optional root actions and root mode, native file pickers, opening files inside archives and a client-side title bar with tabs.

+
+