{ config, pkgs, ... }: let palettes = import ../../themes/nomarchy-palettes.nix; themeNames = builtins.attrNames palettes; themeList = builtins.concatStringsSep "\\n" themeNames; nomarchy-theme-selector = pkgs.writeShellScriptBin "nomarchy-theme-selector" '' STATE_DIR="$HOME/.config/home-manager" THEME_STATE_FILE="$STATE_DIR/theme-state.nix" WALLPAPER_STATE_FILE="$STATE_DIR/wallpaper-state.nix" if [ -d "/etc/nixos/nomarchy/themes" ]; then THEMES_DIR="/etc/nixos/nomarchy/themes" elif [ -d "/etc/nomarchy/themes" ]; then THEMES_DIR="/etc/nomarchy/themes" else THEMES_DIR="/etc/nixos/themes" fi # This depends on where the repo is cloned mkdir -p "$STATE_DIR" SELECTED_THEME=$(echo -e "${themeList}" | walker --dmenu) if [ -n "$SELECTED_THEME" ]; then echo "$SELECTED_THEME" > "$THEME_STATE_FILE" # Try to find a background for this theme BG_DIR="$THEMES_DIR/$SELECTED_THEME/backgrounds" if [ -d "$BG_DIR" ]; then BG=$(ls "$BG_DIR" | head -n 1) if [ -n "$BG" ]; then echo "$BG_DIR/$BG" > "$WALLPAPER_STATE_FILE" swww img "$BG_DIR/$BG" --transition-type outer --transition-pos 0.85,0.97 --transition-step 90 & fi fi env-update fi ''; nomarchy-font-selector = pkgs.writeShellScriptBin "nomarchy-font-selector" '' STATE_DIR="$HOME/.config/home-manager" STATE_FILE="$STATE_DIR/font-state.nix" mkdir -p "$STATE_DIR" # 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 echo "$SELECTED_FONT" > "$STATE_FILE" env-update fi ''; nomarchy-wallpaper-selector = pkgs.writeShellScriptBin "nomarchy-wallpaper-selector" '' STATE_DIR="$HOME/.config/home-manager" WALLPAPER_STATE_FILE="$STATE_DIR/wallpaper-state.nix" if [ -d "/etc/nixos/nomarchy/themes" ]; then THEMES_DIR="/etc/nixos/nomarchy/themes" elif [ -d "/etc/nomarchy/themes" ]; then THEMES_DIR="/etc/nomarchy/themes" else THEMES_DIR="/etc/nixos/themes" fi mkdir -p "$STATE_DIR" # List all images in all themes backgrounds WALLPAPERS=$(find "$THEMES_DIR" -type f \( -name "*.jpg" -o -name "*.png" \)) SELECTED_WP=$(echo -e "$WALLPAPERS" | walker --dmenu) if [ -n "$SELECTED_WP" ]; then echo "$SELECTED_WP" > "$WALLPAPER_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 ]; }