A modern wallpaper management application for π§ Linux/GNOME desktop environments. ChromaDesk automatically fetches and applies beautiful images from Bing's daily wallpapers πΌοΈ or your own custom sources.
- Daily Bing Wallpapers: Automatically fetch and apply the Bing image of the day π
- Custom Image Sources: Add your own URLs or local directories π
- Scheduling: Configure automatic updates using systemd timers β±οΈ
- History Management: Browse and reapply previously downloaded wallpapers πΎ
- Localization: Set your preferred Bing region for region-specific images π
- Modern UI: Clean, intuitive Qt-based interface β¨
- Minimal Resource Usage: Efficient background operation βοΈ
- AppImage Support: Easy to run, no installation needed! π¦
| Bing Today | History | Custom Sources |
|---|---|---|
![]() |
![]() |
![]() |
- FUSE is required for running AppImages and other filesystem-related operations.
To install FUSE on Ubuntu (22.04 or later), run the following commands:For detailed installation instructions, refer to thesudo add-apt-repository universe sudo apt install libfuse2
fuseInstallation Guide. - If you don't have
sudoaccess or unable to installfusefollow below commands to extract the appimage manually and run../chromadesk-*.AppImage --appimage-extract ./squashfs-root/usr/bin/chromadesk
The easiest way to get started with ChromaDesk is by using the official AppImage. This is a single file containing the application and all its dependencies, requiring no complex installation.
- Download the latest
chromadesk-*.AppImagefrom the Releases Page. - Make the AppImage executable:
chmod +x chromadesk-*.AppImage - Run it! π
./chromadesk-*.AppImage
For seamless integration with your desktop environment (application menus, icons, file associations), we highly recommend using AppImageLauncher.
AppImageLauncher makes running and managing AppImages incredibly simple:
- When you first run an AppImage, it asks if you want to integrate it into your system.
- Choose "Yes" β , and it automatically moves the AppImage, adds it to your application menu, and sets up icons/associations.
- Handles updates and removals cleanly. π§Ό
Install AppImageLauncher, then just double-click the ChromaDesk AppImage!
While the AppImage is recommended, other installation methods are available:
Requires Python >= 3.8 and pip installed.
# Install from PyPI (if published)
# pip install chromadesk
# Or install in development mode from source
git clone https://github.com/anantdark/chromadesk.git
cd chromadesk
pip install -e .
# Optional: Install notification support
# pip install -e ".[notifications]"Requires Python >= 3.8, pip, venv, and potentially build tools.
# Clone the repository
git clone https://github.com/anantdark/chromadesk.git
cd chromadesk
# Create a virtual environment (recommended)
python -m venv .venv
source .venv/bin/activate
# Install dependencies
pip install -e .
# Optional: Install notification support
# pip install -e ".[notifications]"
# Run the application
python -m chromadesk- If you integrated with AppImageLauncher, find ChromaDesk in your application menu. Easy! β¨
- Otherwise, navigate to where you saved the
chromadesk-*.AppImagefile and run it from the terminal:./chromadesk-*.AppImage
Launch ChromaDesk from your terminal:
chromadeskOnce launched, the main interface allows you to:
- View and apply the current Bing wallpaper πΌοΈ
- Browse your wallpaper history πΎ
- Configure automatic updates (scheduling) β±οΈ
- Set up custom image sources π
- Manage application settings βοΈ
ChromaDesk also supports headless operation, primarily for the scheduled timer:
# Run the headless update (used by the timer service)
# (Replace with actual path if not installed/integrated)
~/.local/bin/io.github.anantdark.chromadesk --headless
# Get help on available options
# (Replace with actual path or python -m chromadesk.main --help if running from source)
./chromadesk-*.AppImage --helpChromaDesk integrates with systemd for scheduled operations:
- Timer Service:
chromadesk-daily.timer- Controls when updates occur β±οΈ - Service Unit:
chromadesk-daily.service- Performs the actual update βοΈ
The application will install and configure these units automatically when you enable scheduled updates via the GUI.
The project includes a build script (build.sh) that simplifies the process of creating a standalone executable or AppImage:
# Make the build script executable (if not already)
chmod +x build.sh
# Run the build script (builds executable)
./build.sh
# Build an AppImage (Recommended for distribution!)
./build.sh --appimage
# Get help on available options
./build.sh --helpThe script handles:
- Virtual environment setup β
- Dependency installation β
- Building with PyInstaller β
- AppImage creation (optional) β
- Desktop integration setup within the AppImage β
Built artifacts are placed in the dist/ directory.
Available options for ./build.sh:
--helpor-h: Show help information β--version-update VER: Update version numbers toVERπ·οΈ--build-only: Update version numbers without building π«--appimage: Create an AppImage after building the executable π¦
# Update to 0.2.0 and build AppImage
./build.sh --version-update 0.2.0 --appimageThis updates the version in chromadesk/__init__.py and pyproject.toml.
ChromaDesk includes a test suite:
# Run all tests
python -m unittest discover tests
# Run a specific test file
python -m unittest tests.test_basicspip install isort black flake8 pylint mypy
# Run all checks
isort chromadesk
black chromadesk
flake8 --color auto --verbose --count --indent 4 --ignore=E501,F841,W503 --exclude .venv .- Python 3.8+ π
- PySide6 (Qt for Python) π¨
- Requests π
- Pillow πΌοΈ
- GNOME desktop environment (for wallpaper setting) π₯οΈ
- Optional for notifications:
notify2,dbus-pythonπ
Contributions are welcome! Please feel free to submit a Pull Request.
See CONTRIBUTING.md for detailed guidelines. π
This project is licensed under the GPL-3.0 License - see the LICENSE file for details.
Anant Patel - GitHub


