A tiny utility for hyprland that makes windows titled "DVD" float and bounce around like the classic DVD logo — now with a screensaver mode that temporarily animates all windows on the current workspace and restores them when the cursor moves.
- Animates windows titled "DVD" by making them floating and moving them with collision detection.
- Screensaver mode: captures the current workspace windows, makes them float and animate, and restores their original state when the cursor moves.
- Restore behavior attempts to faithfully restore original size/position and then tiles windows.
yay -S hyprdvdAdd the input to your flake.nix:
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
hyprdvd = {
url = "github:nevimmu/hyprdvd";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = { nixpkgs, home-manager, hyprdvd, ... }: {
homeConfigurations.youruser = home-manager.lib.homeManagerConfiguration {
pkgs = nixpkgs.legacyPackages.x86_64-linux;
modules = [
hyprdvd.homeManagerModules.default
./home.nix
];
};
};
}Then in your home.nix:
{ config, pkgs, ... }:
{
services.hyprdvd = {
enable = true;
autoStart = true; # Automatically start with Hyprland
};
}All configuration is done via command-line arguments. See the Usage section below for available options.
git clone https://github.com/nevimmu/hyprdvd
cd hyprdvd
# Install into your environment (pipx recommended)
pipx install .Basic usage runs the event-driven mode that listens to Hyprland events and animates any newly opened window whose title is exactly DVD:
hyprdvd
kitty --title DVDScreensaver mode — animate all windows on the current workspace until the cursor moves. You can add it to your idle daemon (ex: hypridle)
hyprdvd --screensaver
# or
hyprdvd -sYou can customize the size of bouncing windows using the --size flag with the width and height you want
# Make windows 200x150 pixels
hyprdvd --size 200x150hyprdvd can animate all visible workspaces (i.e., one per monitor) without switching focus or warping the cursor. It restores windows cleanly when asked to stop.
-
--workspaces <id,id,...>
Animate only the specified workspace IDs. If omitted, all visible workspaces are used (one per monitor). -
--exit-on {pointer,signal}
Choose how the screensaver exits:pointer(default): stop when the cursor moves.signal: ignore pointer motion; exit only onSIGINT(e.g., via your idle daemon).
Run on all visible workspaces, ignore pointer until signaled:
hyprdvd --screensaver --size 200x150 --exit-on signal
# later:
pkill -INT hyprdvd