- Rust 84.4%
- Shell 7.5%
- CSS 4.5%
- Nix 3.2%
- Handlebars 0.4%
| .github | ||
| assets/release | ||
| data | ||
| docs | ||
| legal | ||
| packaging | ||
| src | ||
| tests/fixtures | ||
| tools | ||
| .gitignore | ||
| about.toml | ||
| Cargo.lock | ||
| Cargo.toml | ||
| CHANGELOG.md | ||
| CLA.md | ||
| CODE_OF_CONDUCT.md | ||
| CONTRIBUTING.md | ||
| COPYRIGHT.md | ||
| deny.toml | ||
| flake.lock | ||
| flake.nix | ||
| LICENSE | ||
| README.md | ||
| SECURITY.md | ||
| THIRD_PARTY_LICENSES.txt | ||
| THIRD_PARTY_NOTICES.md | ||
| TODO.md | ||
| TYPEFACE_CREDITS.md | ||
FF00-vwm
FF00-vwm is a graphical per-monitor video and static-image wallpaper manager for Linux X11. Pick an output, choose local media with the system file dialog, select its presentation, and apply it. The wallpaper continues running after the configuration window closes.
Alpha software:
0.2.0-alpha.1is a public preview. It is intended for testing on personal X11 desktops, not unattended or production systems. Configuration and packaging details may change before1.0.0.
Features
- Independent media assignments for connected XRandR outputs.
- Static PNG, JPEG, WebP, and SVG assignments using the package's pinned image loader closure.
- A native GTK4 interface and system file chooser.
- Fit, Fill, Stretch, Center, and static-image Tile display modes.
- Non-destructive image rotation and horizontal or vertical mirroring.
- Detached wallpaper processes using mpv, without xwinwrap.
- Saved assignments and optional restore at X11 login.
- Targeted process ownership checks that leave unrelated mpv processes alone.
- GUI and headless lifecycle controls.
- No telemetry, accounts, network service, or automatic downloads.
Supported environment
The first alpha supports Linux x86_64 in an X11 session. i3 is the primary tested window manager. Wayland, Flatpak, ARM, network videos, audio playback, playlists, and animated-image formats are not supported in this release.
Video playback requires mpv 0.36.0 or newer; static images work without mpv.
Native builds also require the GTK4, GdkPixbuf loader, and X11 runtime libraries
supplied by the operating system. The Nix package provides the tested runtime
dependencies itself.
Try it with Nix
FF00-vwm is published through the crimsonvariable NUR namespace. With NUR configured, open a shell containing the packaged application:
nix-shell -p nur.repos.crimsonvariable.ff00-vwm
Then run ff00-vwm.
The immutable GitHub release flake remains available as a direct fallback that does not use the NUR namespace:
nix run 'github:crimsonvariable/ff00-vwm?ref=v0.2.0-alpha.1'
From a local checkout:
nix --extra-experimental-features 'nix-command flakes' run .
The Nix package includes mpv on the application's runtime path. It does not change system configuration or enable login restoration.
Native archive
Download the archive and SHA256SUMS from the matching prerelease, verify it,
extract it, and run the user-local installer:
sha256sum --check SHA256SUMS
tar -xzf ff00-vwm-0.2.0-alpha.1-x86_64-linux.tar.gz
cd ff00-vwm-0.2.0-alpha.1-x86_64-linux
./install.sh
The default destination is ~/.local. Ensure ~/.local/bin is on PATH, then
run ff00-vwm. The archive does not bundle mpv, GTK4, or image decoder modules
and does not modify the system package manager. Install GTK4 and the PNG, JPEG,
WebP, and SVG GdkPixbuf loaders through the distribution; install mpv when video
playback is needed.
To install under another user-controlled prefix:
./install.sh --prefix /absolute/path
To remove exactly the files recorded by the installer:
~/.local/bin/ff00-vwm-uninstall
The native archive uses Debian 12 as its build baseline. It may not run on an older distribution; use the Nix package or build from source in that case.
Usage
Launch ff00-vwm without arguments for the graphical interface. Choose a video
or static image for each connected output, select its display mode, and apply
it. Image rotation and mirroring alter only presentation; the selected file is
never rewritten. Login restore is opt-in and can be enabled or disabled in the
application.
The headless commands are:
ff00-vwm apply # apply saved assignments to connected outputs
ff00-vwm refresh # rediscover geometry and reapply assignments
ff00-vwm status # show dependency, output, assignment, and renderer state
ff00-vwm stop # stop only renderers owned by FF00-vwm
Configuration follows the XDG base-directory convention. On a typical Linux
desktop it is stored at ~/.config/ff00-vwm/config.toml. Runtime ownership
records are kept below the user runtime directory and are not shared between
users.
Building from source
The reference development environment is the locked Nix flake:
nix --extra-experimental-features 'nix-command flakes' develop
cargo build --locked
A conventional Cargo build needs Rust 1.85 or newer, GTK4 and GdkPixbuf
development files, the WebP and SVG GdkPixbuf loaders, pkg-config, and
X11/XRandR development files. Run the release checks with:
cargo fmt --check
cargo clippy --locked --all-targets --all-features -- -D warnings
cargo test --locked --all-features
cargo audit
cargo deny check
nix --extra-experimental-features 'nix-command flakes' flake check
Development status
The 0.2.0-alpha.1 release adds lifecycle hardening and static images. Work
toward the next alpha remains ordered in the roadmap rather than being promised
without implementation and testing.
See TODO.md for the ordered acceptance checklist and docs/ARCHITECTURE.md for the reasoning and safety boundaries.
Safety and privacy
FF00-vwm passes video paths directly to mpv as arguments and does not interpolate them into a shell command. Image files are decoded locally and are not modified. It serializes lifecycle operations and validates private renderer ownership markers before signalling a process group. It does not send selected filenames, display details, analytics, or other data over the network.
See SECURITY.md for private reporting instructions. As with any alpha release, back up important configuration and review the known limitations in the release notes before use.
Repositories and contributions
Forgejo is the canonical development repository and source of truth. GitHub is a public release mirror. Issues, design discussions, and contributions belong on Forgejo; GitHub pull requests are not merged.
Read CONTRIBUTING.md before proposing a change. Contributions require an executed Contributor Copyright Assignment Agreement.
License
FF00-vwm is licensed under AGPL-3.0-or-later. Copyright and dual-licensing
authority are documented in COPYRIGHT.md. Third-party projects
remain subject to their own terms; see
THIRD_PARTY_NOTICES.md and
THIRD_PARTY_LICENSES.txt. Typeface attribution is
recorded in TYPEFACE_CREDITS.md.
This project is independent and is not affiliated with or endorsed by mpv, GTK, the Rust project, X.Org, i3, NixOS, or any Linux distribution.
