https://github.com/nexvlif/nuripaper
A straightforward wallpaper tool for dynamic and static backgrounds
https://github.com/nexvlif/nuripaper
cpp23 wallpaper wayland
Last synced: 8 days ago
JSON representation
A straightforward wallpaper tool for dynamic and static backgrounds
- Host: GitHub
- URL: https://github.com/nexvlif/nuripaper
- Owner: nexvlif
- Created: 2026-06-05T09:09:17.000Z (11 days ago)
- Default Branch: main
- Last Pushed: 2026-06-05T16:31:36.000Z (10 days ago)
- Last Synced: 2026-06-05T18:30:38.768Z (10 days ago)
- Topics: cpp23, wallpaper, wayland
- Language: C++
- Homepage:
- Size: 111 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# nuripaper
A Vulkan-based wallpaper player for videos and static images on Wayland. Zero-lag, CPU & RAM efficient.
> [!TIP]
> Supports **static images** (PNG, JPG), **animated GIFs**, and **video files** (MP4, WebM).
> Use `--memory-mode performance` for minimal resource usage.
---
### NixOS (declarative module)
Add to your flake:
```nix
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
nuripaper = {
url = "github:nexvlif/nuripaper";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = { self, nixpkgs, nuripaper, ... }: {
nixosConfigurations.my-machine = nixpkgs.lib.nixosSystem {
modules = [
nuripaper.nixosModules.default
({ pkgs, ... }: {
services.nuripaper = {
enable = true;
image = ./wallpapers/forest.png;
fillMode = "cover";
output = "eDP-1";
memoryMode = "balanced";
transition = {
enable = true;
type = "crossfade";
durationMs = 300;
};
};
})
];
};
};
}
```
All options:
| Option | Type | Default | Description |
|--------|------|---------|-------------|
| `enable` | bool | false | Enable nuripaper daemon |
| `image` | path (nullable) | null | Wallpaper file path |
| `fillMode` | enum | `"cover"` | `cover`, `fit`, `stretch`, `tile` |
| `output` | string (nullable) | null | Wayland output name (e.g. `eDP-1`) |
| `fps` | int | 0 | Target FPS (0 = source) |
| `vsync` | bool | true | Enable vsync |
| `decodeHeight` | int | 0 | Max decode height (0 = source) |
| `logLevel` | enum | `"info"` | `trace`, `debug`, `info`, `warn`, `error` |
| `memoryMode` | enum | `"balanced"` | `balanced`, `minimal`, `performance` |
| `transition.enable` | bool | true | Enable wallpaper transitions |
| `transition.type` | enum | `"crossfade"` | `crossfade`, `fade`, `none` |
| `transition.durationMs` | int | 300 | Transition duration in ms |
| `extraArgs` | list of string | [] | Extra CLI flags |
### Home-manager
```nix
{
home-manager.users.my-user = { pkgs, ... }: {
imports = [ nuripaper.homeManagerModules.default ];
services.nuripaper = {
enable = true;
image = ./wallpapers/forest.png;
fillMode = "cover";
};
};
}
```
### Usage
```fish
nuripaper --help
```
```
Usage: nuripaper --image [options]
Options:
--image Wallpaper image path (png/jpg/gif/mp4/webm)
--output Wayland output name
--fill-mode Fill mode: stretch, fit, cover, tile
--fps Target FPS for video (0 = source fps)
--vsync Enable/disable vsync
--decode-height Max decode height (e.g. 720), 0 = source
--log-level Log level: trace, debug, info, warn, error
--daemon Run as background daemon with IPC
--memory-mode Memory mode: balanced, minimal, performance
--transition-type Transition type: crossfade, fade, none
--transition-duration Transition duration in milliseconds
--help Show this help
```
#### Daemon mode + IPC
```fish
nuripaper --daemon --image ~/Pictures/wallpaper.jpg
# control:
nuripaper-ctl status
nuripaper-ctl set-image ~/Pictures/new.jpg
nuripaper-ctl quit
```
### Ad-hoc (no module)
```fish
nix run github:nexvlif/nuripaper -- --image ~/wallpaper.png
```
### Arch Linux (AUR)
```fish
paru -S nuripaper
```
### Build from source
```fish
git clone https://github.com/nexvlif/nuripaper.git
cd nuripaper
cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Release
ninja -C build
sudo cp build/nuripaper build/nuripaper-ctl /usr/local/bin/
```
### License
MIT