From bc74fb496829d1c15684c08b13cd8ddab794d55d Mon Sep 17 00:00:00 2001 From: Jack O'Sullivan Date: Mon, 24 Mar 2025 15:00:28 +0000 Subject: [PATCH] home-manager/gui: Add brainrot screensavers --- home-manager/modules/gui/default.nix | 12 ++++++++++++ home-manager/modules/gui/screensaver.py | 19 +++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/home-manager/modules/gui/default.nix b/home-manager/modules/gui/default.nix index cf50f56..1190cf9 100644 --- a/home-manager/modules/gui/default.nix +++ b/home-manager/modules/gui/default.nix @@ -2,6 +2,7 @@ let inherit (lib) genAttrs mkIf mkMerge mkForce mapAttrs mkOptionDefault; inherit (lib.my) mkBoolOpt'; + inherit (lib.my.c) pubDomain; cfg = config.my.gui; @@ -15,13 +16,24 @@ let url = "https://distro.ibiblio.org/slitaz/sources/packages/d/doom1.wad"; hash = "sha256-HX1DvlAeZ9kn5BXguPPinDvzMHXoWXIYFvZSpSbKx3E="; }; + subwaySurfers = pkgs.fetchurl { + url = "https://p.${pubDomain}/video/subway-surfers.mkv"; + hash = "sha256-apn/0DPeihXj+nP6ytVkH/SlZRelxIpRXOUOfxHczl8="; + }; + minecraftParkour = pkgs.fetchurl { + url = "https://p.${pubDomain}/video/minecraft-parkour.mkv"; + hash = "sha256-1fJZyi9N4g/QyoL1Pk7akL0jTDjxReYmN31EOUHhHXk="; + }; doomsaver = pkgs.runCommand "doomsaver" { inherit (pkgs) windowtolayer; chocoDoom = pkgs.chocolate-doom2xx; + ffmpeg = pkgs.ffmpeg-full; python = pkgs.python3.withPackages (ps: [ ps.filelock ]); + inherit doomWad; enojy = ./enojy.jpg; + inherit subwaySurfers minecraftParkour; } '' mkdir -p "$out"/bin substituteAll ${./screensaver.py} "$out"/bin/doomsaver diff --git a/home-manager/modules/gui/screensaver.py b/home-manager/modules/gui/screensaver.py index aa28a1a..5d702fe 100755 --- a/home-manager/modules/gui/screensaver.py +++ b/home-manager/modules/gui/screensaver.py @@ -86,6 +86,22 @@ class TTESaver(Screensaver): self.running = False self.proc.terminate() +class FFmpegCACASaver(Screensaver): + def __init__(self, video, weight=1.5): + super().__init__( + ['@ffmpeg@/bin/ffmpeg', '-hide_banner', '-loglevel', 'error', + '-i', video, + '-pix_fmt', 'rgb24', '-window_size', '80x80', + '-f', 'caca', '-'], + env={ + 'CACA_DRIVER': 'ncurses', + }, + weight=weight, + ) + + def stop(self): + super().stop(kill=True) + class MultiSaver: savers = [ DoomSaver(0), @@ -100,6 +116,9 @@ class MultiSaver: TTESaver('ss -nltu'), TTESaver('ss -ntu'), TTESaver('jp2a --width=100 @enojy@'), + + FFmpegCACASaver('@subwaySurfers@'), + FFmpegCACASaver('@minecraftParkour@'), ] state_filename = 'screensaver.json'