From 45ecc615473161c9ccf52f25c71ed15afdcdd642 Mon Sep 17 00:00:00 2001 From: foglar Date: Sun, 13 Apr 2025 14:15:23 +0200 Subject: [PATCH] rofi wallpaper select --- nixos/home/desktop/hyprland/hyprland.nix | 4 +- .../hyprland/{ => rofi}/clipboard-rofi.nix | 2 +- .../home/desktop/hyprland/{ => rofi}/rofi.nix | 3 +- .../desktop/hyprland/rofi/wallpapers-rofi.nix | 47 +++++++++++++++++++ nixos/system/settings/style.nix | 4 +- 5 files changed, 56 insertions(+), 4 deletions(-) rename nixos/home/desktop/hyprland/{ => rofi}/clipboard-rofi.nix (99%) rename nixos/home/desktop/hyprland/{ => rofi}/rofi.nix (97%) create mode 100644 nixos/home/desktop/hyprland/rofi/wallpapers-rofi.nix diff --git a/nixos/home/desktop/hyprland/hyprland.nix b/nixos/home/desktop/hyprland/hyprland.nix index 8bed274..bd3cf22 100644 --- a/nixos/home/desktop/hyprland/hyprland.nix +++ b/nixos/home/desktop/hyprland/hyprland.nix @@ -14,7 +14,7 @@ imports = [ ./dependencies.nix ./waybar.nix - ./rofi.nix + ./rofi/rofi.nix ./wlogout.nix ./hyprlock.nix ./hypridle.nix @@ -27,6 +27,7 @@ rofi = { enable = lib.mkDefault true; clipboard.enable = lib.mkDefault true; + wallpaper.enable = lib.mkDefault true; }; hyprlock.enable = lib.mkDefault true; hypridle.enable = lib.mkDefault true; @@ -201,6 +202,7 @@ bindd = [ "$mod SHIFT, P, Color Picker, exec, ${pkgs.hyprpicker}/bin/hyprpicker -a" "$mod SHIFT, R, Random Background, exec, background-switch-random" + "$mod SHIFT, W, Select Background, exec, wallswitch-rofi" ]; bindl = [ diff --git a/nixos/home/desktop/hyprland/clipboard-rofi.nix b/nixos/home/desktop/hyprland/rofi/clipboard-rofi.nix similarity index 99% rename from nixos/home/desktop/hyprland/clipboard-rofi.nix rename to nixos/home/desktop/hyprland/rofi/clipboard-rofi.nix index 2baffc8..a37d090 100644 --- a/nixos/home/desktop/hyprland/clipboard-rofi.nix +++ b/nixos/home/desktop/hyprland/rofi/clipboard-rofi.nix @@ -11,7 +11,7 @@ config = lib.mkIf config.desktop.hyprland.rofi.clipboard.enable { home.file = { - ".config/rofi/clip_bg.png".source = ../../../../config/backgrounds/${userSettings.background}; + ".config/rofi/clip_bg.png".source = ../../../../../config/backgrounds/${userSettings.background}; ".config/rofi/cliboard.rasi".text = let main-bg = config.lib.stylix.colors.base01; main-fg = config.lib.stylix.colors.base02; diff --git a/nixos/home/desktop/hyprland/rofi.nix b/nixos/home/desktop/hyprland/rofi/rofi.nix similarity index 97% rename from nixos/home/desktop/hyprland/rofi.nix rename to nixos/home/desktop/hyprland/rofi/rofi.nix index b699f2f..3ae74cd 100644 --- a/nixos/home/desktop/hyprland/rofi.nix +++ b/nixos/home/desktop/hyprland/rofi/rofi.nix @@ -11,6 +11,7 @@ imports = [ ./clipboard-rofi.nix + ./wallpapers-rofi.nix ]; config = lib.mkIf config.desktop.hyprland.rofi.enable { @@ -69,7 +70,7 @@ padding = mkLiteral "5em"; children = ["entry"]; background-color = mkLiteral "transparent"; - background-image = mkLiteral "url(\"~/Pictures/config/backgrounds/${userSettings.background}\", WIDTH)"; + background-image = mkLiteral "url(\"~/Pictures/backgrounds/${userSettings.background}\", WIDTH)"; }; # Entry field settings diff --git a/nixos/home/desktop/hyprland/rofi/wallpapers-rofi.nix b/nixos/home/desktop/hyprland/rofi/wallpapers-rofi.nix new file mode 100644 index 0000000..2cee972 --- /dev/null +++ b/nixos/home/desktop/hyprland/rofi/wallpapers-rofi.nix @@ -0,0 +1,47 @@ +{ + lib, + config, + pkgs, + ... +}: { + options = { + desktop.hyprland.rofi.wallpaper.enable = lib.mkEnableOption "enable Rofi wallpaper module"; + }; + + config = lib.mkIf config.desktop.hyprland.rofi.wallpaper.enable { + home.packages = with pkgs; [ + (writeShellScriptBin "wallswitch-rofi" '' + WALLPAPER_DIR="$HOME/Pictures/backgrounds" + TMP_DIR="/tmp/rofi-wallpapers" + mkdir -p "$TMP_DIR" + + # Generate preview list with image name and icon path + WALLPAPERS=$(find "$WALLPAPER_DIR" -type f \( -iname "*.jpg" -o -iname "*.png" -o -iname "*.jpeg" \)) + + ROFI_LIST="" + for wp in $WALLPAPERS; do + filename=$(basename "$wp") + # Generate thumbnail using imagemagick or copy if small + thumb_path="$TMP_DIR/''${filename}.png" + if [[ ! -f "$thumb_path" ]]; then + convert "$wp" -resize 100x100 "$thumb_path" + fi + ROFI_LIST+="$filename\x00icon\x1f$thumb_path\n" + done + + SELECTED=$(echo -e "$ROFI_LIST" | rofi -dmenu "Select Wallpaper") + + [[ -z "$SELECTED" ]] && exit 1 + + # Set the selected wallpaper + SELECTED_PATH="$WALLPAPER_DIR/$SELECTED" + + # Update hyprpaper config (if needed) and reload + sleep 0.5 # Give it a moment to start + hyprctl hyprpaper unload all + hyprctl hyprpaper preload "$SELECTED_PATH" + hyprctl hyprpaper wallpaper "eDP-1,$SELECTED_PATH" + '') + ]; + }; +} diff --git a/nixos/system/settings/style.nix b/nixos/system/settings/style.nix index 37cfa42..4e880a4 100644 --- a/nixos/system/settings/style.nix +++ b/nixos/system/settings/style.nix @@ -140,9 +140,11 @@ then ../../../config/nerv.png else if (userSettings.theme == "tokyo-night-dark") then ../../../config/copeland.png + else if (userSettings.theme == "purple-dawn") + then ../../../config/ram.png else ../../../config/mars.png; logoAnimated = - if "evangelion-blood" == userSettings.theme || "tokyo-night-dark" == userSettings.theme + if "evangelion-blood" == userSettings.theme || "tokyo-night-dark" == userSettings.theme || "purple-dawn" == userSettings.theme then false else true; };