{ config, pkgs, lib, ... }: { programs.rofi = { enable = true; font = "Lilex Nerd Font"; plugins = with pkgs; [ rofi-emoji ]; theme = "~/.config/rofi/themes/config.rasi"; }; # custom scripts home.packages = [ pkgs.rofi-power-menu (pkgs.writeShellScriptBin "wall-picker" '' WALL_DIR="$HOME/Pictures/Wallpapers" list_wallpapers() { for wall in "$WALL_DIR"/*.{jpg,jpeg,png,webp}; do if [ -f "$wall" ]; then echo -en "$(basename "$wall")\0icon\x1f$wall\n" fi done } SELECTED=$(list_wallpapers | rofi -dmenu -i -p "Wallpaper" \ -show-icons \ -theme-str 'element { orientation: vertical; padding: 15px; }' \ -theme-str 'element-icon { size: 10em; horizontal-align: 0.5; }' \ -theme-str 'element-text { horizontal-align: 0.5; }' \ -theme-str 'listview { columns: 3; lines: 2; }' \ -theme-str 'window { width: 50%; }') if [ -n "$SELECTED" ]; then FULL_PATH="$WALL_DIR/$SELECTED" if [ -n "$WAYLAND_DISPLAY" ]; then if command -v swaybg >/dev/null 2>&1; then pkill swaybg echo "swaybg -i \"$FULL_PATH\" -m fill &" > "$HOME/.swaybg" sh "$HOME/.swaybg" elif command -v swww >/dev/null 2>&1; then swww img "$FULL_PATH" --transition-type grow --transition-fps 120 --transition-step 60 --transition-duration 1.5 else dunstify "Error: No Wayland wallpaper tool found" fi echo "feh --no-fehbg --bg-fill '$FULL_PATH'" > ~/.fehbg else feh --bg-fill "$FULL_PATH" echo "swaybg -i \"$FULL_PATH\" -m fill &" > "$HOME/.swaybg" fi matugen image "$FULL_PATH" --source-color-index 0 2>/dev/null && wallust -q -s run "$FULL_PATH" 2>/dev/null if [ -z "$WAYLAND_DISPLAY" ] && [ -n "$DISPLAY" ]; then xrdb -merge "$HOME/.Xresources" fi sh ~/.config/sequences fi '') ]; xdg.configFile = { "rofi/shared/default-colors.rasi" = { enable = !config.beeMods.matugen.enable; text = # rasi '' * { background: #000000FF; background-alt: #101010FF; foreground: #FFFFFFFF; selected: #62AEEFFF; active: #98C379FF; urgent: #E06B74FF; } ''; }; }; # Dont scroll its just rofi theme xdg.configFile = { "rofi/themes/config.rasi" = { enable = true; text = # rasi '' /** * * Author : Aditya Shakya (adi1090x) * Github : @adi1090x * * Rofi Theme File * Rofi Version: 1.7.3 **/ /*****----- Configuration -----*****/ configuration { modi: "drun"; show-icons: true; display-drun: "drun"; display-run: ""; display-filebrowser: ""; display-window: ""; font: "monospace 12"; drun-display-format: "{name} [({generic})]"; window-format: "{w} · {c} · {t}"; } /*****----- Global Properties -----*****/ ${ if config.beeMods.matugen.enable then ''@import "shared/colors.rasi"'' else ''@import "shared/default-colors.rasi"'' } * { border-colour: var(selected); handle-colour: var(selected); background-colour: var(background); foreground-colour: var(foreground); alternate-background: var(background-alt); normal-background: var(background); normal-foreground: var(foreground); urgent-background: var(urgent); urgent-foreground: var(background); active-background: var(active); active-foreground: var(background); selected-normal-background: var(selected); selected-normal-foreground: var(background); selected-urgent-background: var(active); selected-urgent-foreground: var(background); selected-active-background: var(urgent); selected-active-foreground: var(background); alternate-normal-background: var(background); alternate-normal-foreground: var(foreground); alternate-urgent-background: var(urgent); alternate-urgent-foreground: var(background); alternate-active-background: var(active); alternate-active-foreground: var(background); } /*****----- Main Window -----*****/ window { /* properties for window widget */ transparency: "real"; location: center; anchor: center; fullscreen: false; width: 600px; x-offset: 0px; y-offset: 0px; /* properties for all widgets */ enabled: true; margin: 0px; padding: 0px; border: 0px solid; border-radius: 0px; border-color: @border-colour; cursor: "default"; background-color: @background-colour; } /*****----- Main Box -----*****/ mainbox { enabled: true; spacing: 0px; margin: 0px; padding: 0px; border: 0px solid; border-radius: 0px 0px 0px 0px; border-color: @border-colour; background-color: transparent; children: [ "inputbar", "listview" ]; } /*****----- Inputbar -----*****/ inputbar { enabled: true; spacing: 0px; margin: 0px; padding: 0px; border: 0px 0px 1px 0px; border-radius: 0px; border-color: @alternate-background; background-color: @background-colour; text-color: @foreground-colour; children: [ "prompt", "entry" ]; } prompt { enabled: true; padding: 15px; border: 0px 1px 0px 0px; border-radius: 0px; border-color: @alternate-background; background-color: inherit; text-color: inherit; } textbox-prompt-colon { enabled: true; expand: false; str: "::"; background-color: inherit; text-color: inherit; } entry { enabled: true; padding: 15px; background-color: inherit; text-color: inherit; cursor: text; placeholder: ""; placeholder-color: inherit; } /*****----- Listview -----*****/ listview { enabled: true; columns: 1; lines: 8; cycle: true; dynamic: true; scrollbar: false; layout: vertical; reverse: false; fixed-height: true; fixed-columns: true; spacing: 0px; margin: 0px; padding: 0px; border: 0px solid; border-radius: 0px; border-color: @border-colour; background-color: transparent; text-color: @foreground-colour; cursor: "default"; } scrollbar { handle-width: 5px ; handle-color: @handle-colour; border-radius: 0px; background-color: @alternate-background; } /*****----- Elements -----*****/ element { enabled: true; spacing: 10px; margin: 0px; padding: 8px 15px; border: 0px 0px 1px 0px; border-radius: 0px; border-color: @alternate-background; background-color: transparent; text-color: @foreground-colour; cursor: pointer; } element normal.normal { background-color: var(normal-background); text-color: var(normal-foreground); } element normal.urgent { background-color: var(urgent-background); text-color: var(urgent-foreground); } element normal.active { background-color: var(active-background); text-color: var(active-foreground); } element selected.normal { background-color: var(alternate-background); text-color: var(foreground-colour); } element selected.urgent { background-color: var(selected-urgent-background); text-color: var(selected-urgent-foreground); } element selected.active { background-color: var(selected-active-background); text-color: var(selected-active-foreground); } element alternate.normal { background-color: var(alternate-normal-background); text-color: var(alternate-normal-foreground); } element alternate.urgent { background-color: var(alternate-urgent-background); text-color: var(alternate-urgent-foreground); } element alternate.active { background-color: var(alternate-active-background); text-color: var(alternate-active-foreground); } element-icon { background-color: transparent; text-color: inherit; size: 32px; cursor: inherit; } element-text { background-color: transparent; text-color: inherit; highlight: inherit; cursor: inherit; vertical-align: 0.5; horizontal-align: 0.0; } /*****----- Mode Switcher -----*****/ mode-switcher{ enabled: true; spacing: 10px; margin: 0px; padding: 0px; border: 0px solid; border-radius: 0px; border-color: @border-colour; background-color: transparent; text-color: @foreground-colour; } button { padding: 10px; border: 0px solid; border-radius: 0px; border-color: @border-colour; background-color: @alternate-background; text-color: inherit; cursor: pointer; } button selected { background-color: var(selected-normal-background); text-color: var(selected-normal-foreground); } /*****----- Message -----*****/ message { enabled: true; margin: 0px; padding: 0px; border: 0px solid; border-radius: 0px 0px 0px 0px; border-color: @border-colour; background-color: transparent; text-color: @foreground-colour; } textbox { padding: 10px; border: 0px solid; border-radius: 0px; border-color: @border-colour; background-color: @alternate-background; text-color: @foreground-colour; vertical-align: 0.5; horizontal-align: 0.0; highlight: none; placeholder-color: @foreground-colour; blink: true; markup: true; } error-message { padding: 0px; border: 0px solid; border-radius: 0px; border-color: @border-colour; background-color: @background-colour; text-color: @foreground-colour; } ''; }; }; }