{"id":51587015,"url":"https://github.com/aensley/backdrop","last_synced_at":"2026-07-11T11:32:30.587Z","repository":{"id":364185964,"uuid":"1266688213","full_name":"aensley/backdrop","owner":"aensley","description":"Set a new desktop wallpaper every day from various sources","archived":false,"fork":false,"pushed_at":"2026-06-30T00:55:15.000Z","size":253,"stargazers_count":0,"open_issues_count":2,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-30T02:20:47.983Z","etag":null,"topics":["background-image","bash","bing-wallpaper","desktop-customization","gnome","image-of-the-day","kde","linux","nasa-apod","nasa-astronomy-picture","nasa-astronomy-picture-of-the-day","national-geographic","photo-of-the-day","picture-of-the-day","systemd","wallpaper","wallpaper-changer","wallpaper-downloader","wallpapers","wikimedia-commons"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aensley.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-11T21:29:40.000Z","updated_at":"2026-06-18T20:48:25.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/aensley/backdrop","commit_stats":null,"previous_names":["aensley/backdrop-cli","aensley/backdrop"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/aensley/backdrop","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aensley%2Fbackdrop","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aensley%2Fbackdrop/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aensley%2Fbackdrop/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aensley%2Fbackdrop/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aensley","download_url":"https://codeload.github.com/aensley/backdrop/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aensley%2Fbackdrop/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35361644,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-11T02:00:05.354Z","response_time":104,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["background-image","bash","bing-wallpaper","desktop-customization","gnome","image-of-the-day","kde","linux","nasa-apod","nasa-astronomy-picture","nasa-astronomy-picture-of-the-day","national-geographic","photo-of-the-day","picture-of-the-day","systemd","wallpaper","wallpaper-changer","wallpaper-downloader","wallpapers","wikimedia-commons"],"created_at":"2026-07-11T11:32:29.648Z","updated_at":"2026-07-11T11:32:30.581Z","avatar_url":"https://github.com/aensley.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# backdrop\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"src/icon.svg\" alt=\"backdrop\" width=\"128\"/\u003e\u003cbr/\u003e\n  \u003ca href=\"https://github.com/aensley/backdrop/releases\"\u003e\u003cimg src=\"https://img.shields.io/github/v/release/aensley/backdrop.svg?logo=gnubash\u0026label=backdrop\u0026logoColor=fff\" alt=\"Version\"/\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/aensley/backdrop/blob/main/LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/github/license/aensley/backdrop.svg\" alt=\"License\"/\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/aensley/backdrop/actions/workflows/test.yml\"\u003e\u003cimg src=\"https://github.com/aensley/backdrop/actions/workflows/test.yml/badge.svg?branch=main\"/\u003e\u003c/a\u003e\n  \u003ca href=\"https://qlty.sh/gh/aensley/projects/backdrop\"\u003e\u003cimg src=\"https://qlty.sh/gh/aensley/projects/backdrop/maintainability.svg\" alt=\"Maintainability\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\nSet a new desktop wallpaper every day from various sources.\n\n## What it does\n\nbackdrop fetches a daily image from one of several curated sources and sets it as your desktop wallpaper. It automatically picks the best display mode based on the image dimensions and your screen aspect ratio.\n\nRun it manually or let a background timer handle it on a schedule.\n\n## Quick Install\n\n### Linux\n\n```bash\ncurl -fsSL https://ensl.ee/backdrop | bash\n```\n\n### Windows\n\n```powershell\niex (iwr 'https://ensl.ee/backdrop-w' -UseBasicParsing).Content\n```\n\n## Requirements\n\n### Linux\n\n- A supported desktop environment (see [Desktop Environments](#desktop-environments) below)\n- `curl`, `python3` (standard on most distros)\n- systemd (for the daily timer)\n\n### Windows\n\n- Windows 10 or later\n- PowerShell 5.1 or later (built-in on Windows 10+)\n\n## Desktop Environments\n\n**Windows** uses `SystemParametersInfo` (user32.dll) to set the wallpaper, with fill mode stored in the registry under `HKCU:\\Control Panel\\Desktop`. No additional tools required.\n\n**Linux** supports the following desktop environments:\n\n| Desktop               | Method                        | Notes                                                                           |\n| --------------------- | ----------------------------- | ------------------------------------------------------------------------------- |\n| GNOME                 | `gsettings`                   |                                                                                 |\n| KDE Plasma            | `qdbus6` or `qdbus`           | Sets the wallpaper and fill mode on all desktops                                |\n| KDE Plasma (fallback) | `plasma-apply-wallpaperimage` | Used if qdbus is unavailable; requires Plasma 5.21+, fill mode not configurable |\n| Xfce                  | `xfconf-query`                | Sets wallpaper and fill mode on all monitors; open Display settings once first  |\n| Cinnamon              | `gsettings`                   |                                                                                 |\n| MATE                  | `gsettings`                   |                                                                                 |\n| LXQt                  | `pcmanfm-qt`                  |                                                                                 |\n| COSMIC                | config file                   | Writes `~/.config/cosmic/com.system76.CosmicBackground/v1/all` (RON format)     |\n| Other                 | `gsettings` or `qdbus`        | Tries gsettings first, then qdbus; set `XDG_CURRENT_DESKTOP` if detection fails |\n\n## Installation\n\nUse the [quick install script](#quick-install) or clone the repo and run the installer locally.\n\n### Linux\n\n```bash\ngit clone https://github.com/aensley/backdrop.git \\\n  \u0026\u0026 cd backdrop/src \u0026\u0026 ./install.sh\n```\n\nThe installer:\n\n1. Downloads (or uses local) `backdrop.sh`\n2. Copies `backdrop` to `/usr/local/bin/`\n3. Runs `backdrop enable`, which downloads and installs the systemd unit files and starts the daily timer\n\n**Additional users:** with `backdrop` already installed system-wide, additional users can enable it for their own login with `backdrop enable`. This downloads the matching systemd unit files from GitHub and installs them into `~/.config/systemd/user/`.\n\n### Windows\n\nClone the repo and run the installer from PowerShell:\n\n```powershell\ngit clone https://github.com/aensley/backdrop.git\ncd backdrop/src\n.\\install.ps1\n```\n\nThe installer:\n\n1. Copies `backdrop.psm1` and `backdrop.psd1` to the per-user PowerShell modules directory\n2. Runs `backdrop enable`, which registers the scheduled task and applies the wallpaper immediately\n\nThe module is auto-imported in every new PowerShell session; no `$PROFILE` changes needed.\n\n## Usage\n\n```\nbackdrop \u003ccommand\u003e\n```\n\n| Command                         | Description                                                                        |\n| ------------------------------- | ---------------------------------------------------------------------------------- |\n| `status`                        | Show version, active source, last image, and image metadata (default)              |\n| `update [--force]`              | Refresh wallpaper from the active source                                           |\n| `set \u003csource...\u003e [--force]`     | Switch active source(s) and refresh now; use `all` for all sources                 |\n| `set-time \u003cHH:MM\u003e`              | Set the daily run time (24-hour); restarts timer if active                         |\n| `set-rotate-interval \u003cminutes\u003e` | Set rotation interval in minutes; 0 to disable                                     |\n| `random [--force]`              | Refresh from a randomly chosen source (does not change active)                     |\n| `enable`                        | Enable the background timer (Linux: systemd --user timer; Windows: Task Scheduler) |\n| `disable`                       | Disable the background timer                                                       |\n| `upgrade`                       | Check for and install the latest version from GitHub                               |\n| `uninstall`                     | Remove backdrop from this system                                                   |\n| `help`                          | Show help                                                                          |\n\n## Sources\n\nOne, multiple, or all sources can be active simultaneously.\n\n| Key      | Name                                                                                                          |\n| -------- | ------------------------------------------------------------------------------------------------------------- |\n| `bing`   | Bing Image of the Day\u003cbr\u003ehttps://www.bing.com/                                                                |\n| `earth`  | Earth.com Image of the Day\u003cbr\u003ehttps://www.earth.com/gallery/images-of-the-day/                                |\n| `apod`   | NASA Astronomy Picture of the Day\u003cbr\u003ehttps://apod.nasa.gov/apod/                                              |\n| `eo`     | NASA Earth Observatory Image of the Day\u003cbr\u003ehttps://science.nasa.gov/earth/earth-observatory/image-of-the-day/ |\n| `iotd`   | NASA Image of the Day _(default)_\u003cbr\u003ehttps://www.nasa.gov/image-of-the-day/                                   |\n| `natgeo` | National Geographic Photo of the Day\u003cbr\u003ehttps://www.nationalgeographic.com/photo-of-the-day/                  |\n| `wmc`    | Wikimedia Commons Picture of the Day\u003cbr\u003ehttps://commons.wikimedia.org/wiki/Commons:Picture_of_the_day         |\n\nSwitch to a single source at any time:\n\n```bash\nbackdrop set apod\n```\n\nOr enable multiple sources to rotate between them:\n\n```bash\n# Enable two or more specific sources\nbackdrop set iotd apod bing\n```\n\nTo enable all sources:\n\n```bash\n# Enable all sources\nbackdrop set all\n```\n\nThe wallpaper updates immediately when you run `set`, and the active source is reflected in `backdrop status`.\n\n## Rotation\n\nWith multiple sources enabled, you can rotate between them at a fixed interval. When you set multiple sources, rotation is automatically enabled at 30 minutes:\n\n```bash\n# Rotate between three sources every 30 minutes (auto-set default)\nbackdrop set iotd apod bing\n\n# Rotate through all sources\nbackdrop set all\n\n# Change the rotation interval (e.g. every 2 hours)\nbackdrop set-rotate-interval 120\n\n# Disable rotation and go back to a single source\nbackdrop set iotd\n```\n\nWhen rotation is active, the systemd timer fires at the rotation interval instead of the daily time set by `set-time`. The active source is determined by a time-slot calculation: `slot = (current_minute / interval) % num_sources`, so the same source is always shown for the full duration of its slot.\n\n## Configuration\n\nThe config file is created on first run. You can edit it directly or use the `set` / `set-time` commands.\n\n| Platform | Config file                 | Cached images              |\n| -------- | --------------------------- | -------------------------- |\n| Linux    | `~/.config/backdrop/config` | `~/.local/share/backdrop/` |\n| Windows  | `%APPDATA%\\backdrop\\config` | `%LOCALAPPDATA%\\backdrop\\` |\n\n| Key                   | Default              | Description                                                                                                      |\n| --------------------- | -------------------- | ---------------------------------------------------------------------------------------------------------------- |\n| `source`              | `iotd`               | Active wallpaper source(s); space-separated list or `all`                                                        |\n| `rotate_interval`     | `0`                  | Minutes between source rotations; 0 to disable (uses `timer_time` for daily updates instead)                     |\n| `screen_aspect_ratio` | `1.7778`             | Fallback aspect ratio if auto-detect fails (16:9=1.7778, 16:10=1.6, 21:9=2.3333, 4:3=1.3333)                     |\n| `zoom_min_coverage`   | `0.55`               | Crop tolerance: if zoom-filling would keep less than this fraction of the image visible, use scaled mode instead |\n| `user_agent`          | `backdrop/1.0 (...)` | HTTP User-Agent sent with all requests                                                                           |\n| `timer_time`          | `08:00`              | Time of day to run the daily update (24-hour HH:MM); only applies when `rotate_interval = 0`                     |\n\n## Uninstallation\n\n```\nbackdrop uninstall\n```\n\nTo also remove your config and cached wallpapers:\n\n```\nbackdrop uninstall --purge\n```\n\nOn Linux this removes the script from `/usr/local/bin` and disables the systemd timer. On Windows it unregisters the scheduled task and removes the PowerShell module.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faensley%2Fbackdrop","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faensley%2Fbackdrop","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faensley%2Fbackdrop/lists"}