90 lines
2.9 KiB
Nix
90 lines
2.9 KiB
Nix
{ pkgs }:
|
|
|
|
let
|
|
themeBuilder = import ./theme_builder.nix { inherit pkgs; };
|
|
in
|
|
pkgs.writeText "paperd.py" /* python */ ''
|
|
import tomllib
|
|
import sys
|
|
import time
|
|
from pathlib import Path
|
|
from collections import deque
|
|
import subprocess
|
|
from pynvim import attach
|
|
|
|
|
|
config = None
|
|
|
|
with open(Path("~/.config/paperd/config.toml").expanduser(), "rb") as f:
|
|
config = tomllib.load(f)
|
|
|
|
interval = config["interval"]
|
|
paper_dir = Path(config["wallpaper_dir"])
|
|
transition = config.get("transition", {})
|
|
transition_type = transition.get("type")
|
|
transition_fps = transition.get("fps")
|
|
transition_duration = transition.get("duration")
|
|
transition_angle = transition.get("angle")
|
|
transition_step = transition.get("step")
|
|
|
|
exts = {".jpg", ".jpeg", ".png", ".webp"}
|
|
images = deque([f for f in Path(paper_dir).iterdir() if f.suffix.lower() in exts])
|
|
|
|
if len(images) == 0:
|
|
print("No images found in the specified directory.")
|
|
sys.exit(1)
|
|
|
|
def get_command():
|
|
command = ["${pkgs.swww}/bin/swww", "img"]
|
|
if transition_type:
|
|
command.append("--transition-type")
|
|
command.append(transition_type)
|
|
if transition_fps:
|
|
command.append("--transition-fps")
|
|
command.append(str(transition_fps))
|
|
if transition_duration:
|
|
command.append("--transition-duration")
|
|
command.append(str(transition_duration))
|
|
if transition_angle:
|
|
command.append("--transition-angle")
|
|
command.append(str(transition_angle))
|
|
if transition_step:
|
|
command.append("--transition-step")
|
|
command.append(str(transition_step))
|
|
command.append(str(images[0]))
|
|
return command
|
|
|
|
|
|
print(f"Found {len(images)} images. Starting wallpaper rotation every {interval} seconds.")
|
|
current_time = int(time.time())
|
|
|
|
initial_idx = (current_time // interval) % len(images)
|
|
|
|
command = get_command()
|
|
subprocess.run(command)
|
|
subprocess.run(["${pkgs.myPython}/bin/python3", "${themeBuilder}", str(images[0])])
|
|
|
|
print(f"Setting wallpaper to {images[0]} with transition {transition_type} (fps: {transition_fps}, duration: {transition_duration}, angle: {transition_angle}, step: {transition_step})")
|
|
|
|
images.rotate(-1)
|
|
last_check = current_time % interval
|
|
time.sleep(5)
|
|
|
|
while True:
|
|
current_time = int(time.time())
|
|
if (current_time % interval) >= last_check:
|
|
last_check = current_time % interval
|
|
time.sleep(5)
|
|
continue
|
|
|
|
command = get_command()
|
|
|
|
print(f"Setting wallpaper to {images[0]} with transition {transition_type} (fps: {transition_fps}, duration: {transition_duration}, angle: {transition_angle}, step: {transition_step})")
|
|
|
|
subprocess.run(command)
|
|
subprocess.run(["${pkgs.myPython}/bin/python3", "${themeBuilder}", str(images[0])])
|
|
images.rotate(-1)
|
|
last_check = current_time % interval
|
|
time.sleep(5)
|
|
''
|