An open API service indexing awesome lists of open source software.

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

Awesome Lists containing this project

README

          

# nuripaper


Release
Last commit
License
Stars
Issues
Repo size

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