# In home.nix or a separate module { pkgs, lib, ... }: let # Define the script package hakase-cmd-screensaver = pkgs.writeShellScriptBin "hakase-cmd-screensaver" '' export PATH="${lib.makeBinPath [ pkgs.coreutils pkgs.procps # pkill, pgrep pkgs.jq pkgs.hyprland # hyprctl pkgs.terminaltexteffects # tte ]}:$PATH" screensaver_in_focus() { hyprctl activewindow -j | jq -e '.class == "org.hakase.screensaver"' >/dev/null 2>&1 } exit_screensaver() { hyprctl keyword cursor:invisible false pkill -x tte 2>/dev/null pkill -f org.hakase.screensaver 2>/dev/null exit 0 } trap exit_screensaver SIGINT SIGTERM SIGHUP SIGQUIT printf '\e[?1000h\e[?1003h' while read -rsn1 -t 0.1; do :; done printf '\033]11;rgb:00/00/00\007' # Black background hyprctl keyword cursor:invisible true &>/dev/null # Note: ''${variable} is how we escape bash variables in Nix tty=$(tty 2>/dev/null) while true; do tte -i "$HOME/.config/hakase/branding/screensaver.txt" \ --frame-rate 120 \ --canvas-width 0 \ --canvas-height 0 \ --reuse-canvas \ --anchor-canvas c \ --anchor-text c \ --random-effect \ --exclude-effects dev_worm \ --no-eol \ --no-restore-cursor & while pgrep -t "''${tty#/dev/}" -x tte >/dev/null; do if read -rsn1 -t 1 || ! screensaver_in_focus; then exit_screensaver fi done done ''; hakase-launch-screensaver = pkgs.writeShellScriptBin "hakase-launch-screensaver" '' # 1. Path Setup # We include necessary utils. # NOTE: We assume 'hakase-cmd-screensaver', 'walker', and your terminals # are already installed in your system/home profile. export PATH="${lib.makeBinPath [ pkgs.coreutils pkgs.procps # pgrep pkgs.jq pkgs.hyprland # hyprctl pkgs.libnotify # notify-send pkgs.xdg-terminal-exec pkgs.terminaltexteffects # tte ]}:$PATH" if ! command -v tte &>/dev/null; then exit 1 fi pgrep -f org.hakase.screensaver && exit 0 if [[ -f "$HOME/.local/state/hakase/toggles/screensaver-off" ]] && [[ "$1" != "force" ]]; then exit 1 fi if command -v walker &>/dev/null; then walker -q fi focused=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true).name') terminal=$(xdg-terminal-exec --print-id) # 4. Launch loop for m in $(hyprctl monitors -j | jq -r '.[] | .name'); do hyprctl dispatch focusmonitor "$m" case "$terminal" in *Alacritty*) hyprctl dispatch exec -- \ alacritty --class=org.hakase.screensaver \ --config-file "$HOME/.config/alacritty/screensaver.toml" \ -e hakase-cmd-screensaver ;; *ghostty*) hyprctl dispatch exec -- \ ghostty --class=org.hakase.screensaver \ --config-file="$HOME/.config/ghostty/screensaver" \ --font-size=18 \ -e hakase-cmd-screensaver ;; *kitty*) hyprctl dispatch exec -- \ kitty --class=org.hakase.screensaver \ --override font_size=18 \ --override window_padding_width=0 \ -e hakase-cmd-screensaver ;; *) notify-send "✋ Screensaver only runs in Alacritty, Ghostty, or Kitty" ;; esac done # 5. Restore focus hyprctl dispatch focusmonitor "$focused" ''; hakase-toggle-screensaver = pkgs.writeShellScriptBin "hakase-toggle-screensaver" '' STATE_FILE="$HOME/.local/state/omarchy/toggles/screensaver-off" if [[ -f "$STATE_FILE" ]]; then rm -f "$STATE_FILE" ${pkgs.libnotify}/bin/notify-send "󱄄 Screensaver enabled" else mkdir -p "$(dirname "$STATE_FILE")" touch "$STATE_FILE" ${pkgs.libnotify}/bin/notify-send "󱄄 Screensaver disabled" fi ''; in { environment.systemPackages = with pkgs; [ hakase-launch-screensaver hakase-cmd-screensaver hakase-toggle-screensaver ]; }