{ config, pkgs, lib, ... }: let nomarchyLib = import ../../lib { inherit lib; }; themeList = builtins.concatStringsSep "\\n" nomarchyLib.themeNames; nomarchy-theme-selector = pkgs.writeShellScriptBin "nomarchy-theme-selector" '' SELECTED_THEME=$(echo -e "${themeList}" | walker --dmenu) if [ -n "$SELECTED_THEME" ]; then nomarchy-theme-set "$SELECTED_THEME" fi ''; nomarchy-font-selector = pkgs.writeShellScriptBin "nomarchy-font-selector" '' STATE_DIR="${config.home.homeDirectory}/.config/nomarchy" STATE_FILE="$STATE_DIR/state.json" mkdir -p "$STATE_DIR" [[ ! -f $STATE_FILE ]] && echo "{}" > "$STATE_FILE" # Simple list of common nerd fonts, could be expanded FONTS="JetBrainsMono Nerd Font\nRobotoMono Nerd Font\nFiraCode Nerd Font\nUbuntuMono Nerd Font" SELECTED_FONT=$(echo -e "$FONTS" | walker --dmenu) if [ -n "$SELECTED_FONT" ]; then TMP_JSON=$(mktemp) jq --arg font "$SELECTED_FONT" '.font = $font' "$STATE_FILE" > "$TMP_JSON" && mv "$TMP_JSON" "$STATE_FILE" env-update fi ''; nomarchy-wallpaper-selector = pkgs.writeShellScriptBin "nomarchy-wallpaper-selector" '' STATE_DIR="${config.home.homeDirectory}/.config/nomarchy" STATE_FILE="$STATE_DIR/state.json" THEMES_DIR="${config.xdg.dataHome}/nomarchy/themes" mkdir -p "$STATE_DIR" [[ ! -f $STATE_FILE ]] && echo "{}" > "$STATE_FILE" # List all images in all themes backgrounds # We search in the system-wide flake source for distro wallpapers to avoid Nix Store bloat WALLPAPERS=$(find "${config.xdg.dataHome}/nomarchy/themes" -type f \( -name "*.jpg" -o -name "*.png" \) 2>/dev/null) DISTRO_THEMES="/etc/nixos/nomarchy/assets/themes" if [ -d "$DISTRO_THEMES" ]; then WALLPAPERS="$WALLPAPERS\n$(find "$DISTRO_THEMES" -type f \( -name "*.jpg" -o -name "*.png" \))" fi # Include user themes if they exist if [ -d "${config.home.homeDirectory}/.config/nomarchy/themes" ]; then WALLPAPERS="$WALLPAPERS\n$(find "${config.home.homeDirectory}/.config/nomarchy/themes" -type f \( -name "*.jpg" -o -name "*.png" \))" fi SELECTED_WP=$(echo -e "$WALLPAPERS" | walker --dmenu) if [ -n "$SELECTED_WP" ]; then TMP_JSON=$(mktemp) jq --arg wp "$SELECTED_WP" '.wallpaper = $wp' "$STATE_FILE" > "$TMP_JSON" && mv "$TMP_JSON" "$STATE_FILE" swww img "$SELECTED_WP" --transition-type outer --transition-pos 0.85,0.97 --transition-step 90 & env-update fi ''; in { home.packages = [ nomarchy-theme-selector nomarchy-font-selector nomarchy-wallpaper-selector ]; }