From ffeaf344c429ab195160be967a5fb62346f3eed9 Mon Sep 17 00:00:00 2001 From: krolxon Date: Mon, 25 Aug 2025 15:44:14 +0530 Subject: [PATCH] move to fuzzel from rofi rofi is bad when it comes to fuzzy matching and also you cannot execute command as it is, for example you cannot pass arguements to commands like "setwall -m". Fuzzel is way simpler, natively supports wayland and is a drop in replacement for dmenu. --- .config/fuzzel/fuzzel.ini | 29 +++ .config/newsboat/urls | 1 + .config/rofi/config.rasi | 209 ---------------------- .config/shell/profile | 2 +- .config/waybar/scripts/envyswitch.sh | 2 +- .config/yazi/keymap.toml | 5 +- .local/bin/askpass-fuzzel | 12 ++ .local/bin/{rofiunicode => fuzzelunicode} | 2 +- .local/bin/madd | 2 +- .local/bin/mounter | 8 +- .local/bin/movie | 2 +- .local/bin/rofipass | 9 - .local/bin/screenshot | 2 +- .local/bin/sysact | 2 +- .local/bin/unmounter | 4 +- 15 files changed, 58 insertions(+), 233 deletions(-) create mode 100644 .config/fuzzel/fuzzel.ini delete mode 100644 .config/rofi/config.rasi create mode 100755 .local/bin/askpass-fuzzel rename .local/bin/{rofiunicode => fuzzelunicode} (74%) delete mode 100755 .local/bin/rofipass diff --git a/.config/fuzzel/fuzzel.ini b/.config/fuzzel/fuzzel.ini new file mode 100644 index 0000000..5142263 --- /dev/null +++ b/.config/fuzzel/fuzzel.ini @@ -0,0 +1,29 @@ +[main] +dpi-aware=no +lines=10 +filter-desktop=yes +icon-theme=Papirus-Dark +font=Fira Code:size=12 +terminal=foot -e +list-executables-in-path=yes +password-character=* +width=80 +horizontal-pad=10 +vertical-pad=10 +inner-pad=5 + +[colors] +background=1e1e2edd +text=cdd6f4ff +prompt=bac2deff +placeholder=7f849cff +input=cdd6f4ff +match=89b4faff +selection=585b70ff +selection-text=cdd6f4ff +selection-match=89b4faff +counter=7f849cff +border=89b4faff + +[key-bindings] +execute-input=Control+Return Shift+KP_Enter diff --git a/.config/newsboat/urls b/.config/newsboat/urls index e37f992..71e0880 100644 --- a/.config/newsboat/urls +++ b/.config/newsboat/urls @@ -15,3 +15,4 @@ https://lukesmith.xyz/rss.xml https://landchad.net/rss https://togglebit.io/atom.xml https://ben.page/rss +https://albert.nz/rss.xml diff --git a/.config/rofi/config.rasi b/.config/rofi/config.rasi deleted file mode 100644 index 0ce9901..0000000 --- a/.config/rofi/config.rasi +++ /dev/null @@ -1,209 +0,0 @@ -configuration { - modi: "run,drun,window"; - matching: "fuzzy"; - terminal: "foot"; - sort: true; - case-sensitive: false; - disable-history: true; - font: "Fira Code 11"; - window-format: "{w} · {c} · {t}"; -} - -* { - rosewater: #f5e0dc; - flamingo: #f2cdcd; - pink: #f5c2e7; - mauve: #cba6f7; - red: #f38ba8; - maroon: #eba0ac; - peach: #fab387; - yellow: #f9e2af; - green: #a6e3a1; - teal: #94e2d5; - sky: #89dceb; - sapphire: #74c7ec; - blue: #89b4fa; - lavender: #b4befe; - text: #cdd6f4; - subtext1: #bac2de; - subtext0: #a6adc8; - overlay2: #9399b2; - overlay1: #7f849c; - overlay0: #6c7086; - surface2: #585b70; - surface1: #45475a; - surface0: #313244; - base: #1e1e2e; - mantle: #181825; - crust: #11111b; -} - -* { - selected-active-foreground: @background; - lightfg: @text; - separatorcolor: @foreground; - urgent-foreground: @red; - alternate-urgent-background: @lightbg; - lightbg: @mantle; - background-color: transparent; - border-color: @foreground; - normal-background: @background; - selected-urgent-background: @red; - alternate-active-background: @lightbg; - spacing: 2; - alternate-normal-foreground: @foreground; - urgent-background: @background; - selected-normal-foreground: @lightbg; - active-foreground: @blue; - background: @base; - selected-active-background: @blue; - active-background: @background; - selected-normal-background: @lightfg; - alternate-normal-background: @lightbg; - foreground: @text; - selected-urgent-foreground: @background; - normal-foreground: @foreground; - alternate-urgent-foreground: @red; - alternate-active-foreground: @blue; - -} -element { - cursor: pointer; - spacing: 5px ; - border: 0; -} -element normal.normal { - background-color: @normal-background; - text-color: @normal-foreground; -} -element normal.urgent { - background-color: @urgent-background; - text-color: @urgent-foreground; -} -element normal.active { - background-color: @active-background; - text-color: @active-foreground; -} -element selected.normal { - background-color: @selected-normal-background; - text-color: @selected-normal-foreground; -} -element selected.urgent { - background-color: @selected-urgent-background; - text-color: @selected-urgent-foreground; -} -element selected.active { - background-color: @selected-active-background; - text-color: @selected-active-foreground; -} -element alternate.normal { - background-color: @alternate-normal-background; - text-color: @alternate-normal-foreground; -} -element alternate.urgent { - background-color: @alternate-urgent-background; - text-color: @alternate-urgent-foreground; -} -element alternate.active { - background-color: @alternate-active-background; - text-color: @alternate-active-foreground; -} -element-text { - background-color: transparent; - cursor: inherit; - highlight: inherit; - text-color: inherit; -} -element-icon { - background-color: transparent; - size: 1.0000em ; - cursor: inherit; - text-color: inherit; -} -window { - padding: 5; - background-color: @background; - border: 1; - // width: 100%; -} -mainbox { - padding: 0; - border: 0; -} -message { - padding: 1px ; - border-color: @separatorcolor; - border: 2px dash 0px 0px ; -} -textbox { - text-color: @foreground; -} -listview { - padding: 2px 0px 0px ; - scrollbar: true; - border-color: @separatorcolor; - spacing: 2px ; - fixed-height: 0; - border: 2px 0px 0px ; -} -scrollbar { - width: 4px ; - padding: 0; - handle-width: 8px ; - border: 0; - handle-color: @normal-foreground; -} -sidebar { - border-color: @separatorcolor; - border: 2px dash 0px 0px ; -} -button { - cursor: pointer; - spacing: 0; - text-color: @normal-foreground; -} -button selected { - background-color: @selected-normal-background; - text-color: @selected-normal-foreground; -} -num-filtered-rows { - expand: false; - text-color: Gray; -} -num-rows { - expand: false; - text-color: Gray; -} -textbox-num-sep { - expand: false; - str: "/"; - text-color: Gray; -} -inputbar { - padding: 1px ; - spacing: 0px ; - text-color: @normal-foreground; - children: [ "prompt","textbox-prompt-colon","entry","num-filtered-rows","textbox-num-sep","num-rows","case-indicator" ]; -} -case-indicator { - spacing: 0; - text-color: @normal-foreground; -} -entry { - text-color: @normal-foreground; - cursor: text; - spacing: 0; - placeholder-color: Gray; - placeholder: "Type to filter"; -} -prompt { - spacing: 0; - text-color: @normal-foreground; -} -textbox-prompt-colon { - margin: 0px 0.3000em 0.0000em 0.0000em ; - expand: false; - str: ":"; - text-color: inherit; -} - diff --git a/.config/shell/profile b/.config/shell/profile index a3cb026..3901d4a 100644 --- a/.config/shell/profile +++ b/.config/shell/profile @@ -32,7 +32,7 @@ export MYSQL_HISTFILE="$XDG_CACHE_HOME/.mariadb_history" export CUDA_CACHE_PATH="$XDG_CACHE_HOME/nv" # Other program settings -export SUDO_ASKPASS="$HOME/.local/bin/rofipass" +export SUDO_ASKPASS="$HOME/.local/bin/askpass-fuzzel" export FZF_DEFAULT_OPTS="--layout=reverse --height 40%" export ANDROID_SDK_HOME="${XDG_CONFIG_HOME:-$HOME/.config}/android" export ANDROID_HOME="$HOME/Android/Sdk/" diff --git a/.config/waybar/scripts/envyswitch.sh b/.config/waybar/scripts/envyswitch.sh index 60c09a4..e1d9933 100755 --- a/.config/waybar/scripts/envyswitch.sh +++ b/.config/waybar/scripts/envyswitch.sh @@ -1,6 +1,6 @@ #!/bin/env bash -mode="$(printf "Integrated\nHybrid\nNvidia" | rofi -dmenu -case-smart -matching "fuzzy" -p "Select the graphics mode:")" +mode="$(printf "Integrated\nHybrid\nNvidia" | fuzzel --dmenu -p "Select the graphics mode:")" # Exit if no selection was made [ -z "$mode" ] && exit 1 diff --git a/.config/yazi/keymap.toml b/.config/yazi/keymap.toml index 0c09881..4a99125 100644 --- a/.config/yazi/keymap.toml +++ b/.config/yazi/keymap.toml @@ -128,8 +128,9 @@ keymap = [ # Goto { on = [ "g", "h" ], run = "cd ~", desc = "Go home" }, { on = [ "g", "c" ], run = "cd ~/.config", desc = "Go ~/.config" }, - { on = [ "g", "d" ], run = "cd ~/dl", desc = "Go ~/dl" }, - { on = [ "g", "d" ], run = "cd ~/pix", desc = "Go ~/pix" }, + { on = [ "g", "d" ], run = "cd ~/dox", desc = "Go ~/dox" }, + { on = [ "g", "D" ], run = "cd ~/dl", desc = "Go ~/dl" }, + { on = [ "g", "p" ], run = "cd ~/pix", desc = "Go ~/pix" }, { on = [ "g", "C" ], run = "cd ~/.cache", desc = "Go ~/.cache" }, { on = [ "g", "r" ], run = "cd ~/code/repos", desc = "Go ~/code/repos" }, { on = [ "g", "v" ], run = "cd ~/vids", desc = "Go ~/vids" }, diff --git a/.local/bin/askpass-fuzzel b/.local/bin/askpass-fuzzel new file mode 100755 index 0000000..c8941ca --- /dev/null +++ b/.local/bin/askpass-fuzzel @@ -0,0 +1,12 @@ +#!/bin/bash + +prompt="${1:-Password:}" + +password=$(fuzzel --dmenu --password --prompt="" --placeholder="$prompt" --width=60 --lines=0 --keyboard-focus=on-demand --no-exit-on-keyboard-focus-loss) + +if [ $? -eq 0 ]; then + echo "$password" + exit 0 +else + exit 1 +fi diff --git a/.local/bin/rofiunicode b/.local/bin/fuzzelunicode similarity index 74% rename from .local/bin/rofiunicode rename to .local/bin/fuzzelunicode index d6d4239..cc97f19 100755 --- a/.local/bin/rofiunicode +++ b/.local/bin/fuzzelunicode @@ -3,7 +3,7 @@ # The famous "get a menu of emojis to copy" script. # Get user selection via dmenu from emoji file. -chosen=$(cut -d ';' -f1 ~/.local/share/chars/* | rofi -dmenu -i -l 30 | sed "s/ .*//") +chosen=$(cut -d ';' -f1 ~/.local/share/chars/* | fuzzel -d -i -l 30 | sed "s/ .*//") # Exit if none chosen. [ -z "$chosen" ] && exit diff --git a/.local/bin/madd b/.local/bin/madd index d1cb8ef..130fd85 100755 --- a/.local/bin/madd +++ b/.local/bin/madd @@ -14,7 +14,7 @@ madd() { if [ -t 0 ]; then filename=$(mpc listall | fzf) else - filename=$(mpc listall | rofi -dmenu -l 30 -case-smart) + filename=$(mpc listall | fuzzel -d -l 30) fi if [ -n "$filename" ]; then diff --git a/.local/bin/mounter b/.local/bin/mounter index 38d3c9c..949fdce 100755 --- a/.local/bin/mounter +++ b/.local/bin/mounter @@ -1,6 +1,6 @@ #!/bin/sh -# Gives a rofi -dmenu prompt to mount unmounted drives. If +# Gives a dmenu prompt to mount unmounted drives. If # they're in /etc/fstab, they'll be mounted automatically. Otherwise, you'll # be prompted to give a mountpoint from already existsing directories. If you # input a novel directory, it will prompt you to create that directory. @@ -8,16 +8,16 @@ getmount() { \ [ -z "$chosen" ] && exit 1 # shellcheck disable=SC2086 - mp="$(find $1 2>/dev/null | rofi -dmenu -i -p "Type in mount point.")" || exit 1 + mp="$(find $1 2>/dev/null | fuzzel -d -i -p "Type in mount point.")" || exit 1 test -z "$mp" && exit 1 if [ ! -d "$mp" ]; then - mkdiryn=$(printf "No\\nYes" | rofi -dmenu -i -p "$mp does not exist. Create it?") || exit 1 + mkdiryn=$(printf "No\\nYes" | fuzzel -d -i -p "$mp does not exist. Create it?") || exit 1 [ "$mkdiryn" = "Yes" ] && (mkdir -p "$mp" || sudo -A mkdir -p "$mp") fi } mountusb() { \ - chosen="$(echo "$usbdrives" | rofi -dmenu -i -p "Mount which drive?")" || exit 1 + chosen="$(echo "$usbdrives" | fuzzel -d -i -p "Mount which drive?")" || exit 1 chosen="$(echo "$chosen" | awk '{print $1}')" sudo -A mount "$chosen" 2>/dev/null && notify-send "💻 USB mounting" "$chosen mounted." && exit 0 alreadymounted=$(lsblk -nrpo "name,type,mountpoint" | awk '$3!~/\/boot|\/home$|SWAP/&&length($3)>1{printf "-not ( -path *%s -prune ) ",$3}') diff --git a/.local/bin/movie b/.local/bin/movie index 4ceb432..b56828f 100755 --- a/.local/bin/movie +++ b/.local/bin/movie @@ -4,7 +4,7 @@ if [ -t 0 ]; then filename="$(find ~/media/movies/ -type f -regex ".*\.\(mkv\|mp4\|mpeg\|avi\|mov\|webm\)" -printf "%f\n" | sort | fzf)" else - filename="$(find ~/media/movies/ -type f -regex ".*\.\(mkv\|mp4\|mpeg\|avi\|mov\|webm\)" -printf "%f\n" | sort | rofi -case-smart -matching "fuzzy" -dmenu -l 25)" + filename="$(find ~/media/movies/ -type f -regex ".*\.\(mkv\|mp4\|mpeg\|avi\|mov\|webm\)" -printf "%f\n" | sort | fuzzel -d -l 25)" fi filepath="$(find ~/media/movies/ -type f -regex ".*\.\(mkv\|mp4\|mpeg\|avi\|mov\|webm\)")" diff --git a/.local/bin/rofipass b/.local/bin/rofipass deleted file mode 100755 index b1bf6a3..0000000 --- a/.local/bin/rofipass +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh -# -# Take password prompt from STDIN, print password to STDOUT -# the sed piece just removes the colon from the provided -# prompt: rofi -p already gives us a colon -rofi -dmenu \ - -password \ - -no-fixed-num-lines \ - -p "$(printf "$1" | sed s/://)" diff --git a/.local/bin/screenshot b/.local/bin/screenshot index 3cb9b0f..8048bfa 100755 --- a/.local/bin/screenshot +++ b/.local/bin/screenshot @@ -2,7 +2,7 @@ ocr_cmd="wl-copy" -case "$(printf "a selected area (copy)\ncurrent window (copy)\nfull screen (copy)\na selected area\ncurrent window\nfull screen\na selected area (OCR)" | rofi -dmenu -l 7 -i -p "Screenshot which area?")" in +case "$(printf "a selected area (copy)\ncurrent window (copy)\nfull screen (copy)\na selected area\ncurrent window\nfull screen\na selected area (OCR)" | fuzzel -d -l 7 -i -p "Screenshot which area?")" in "a selected area (copy)") hyprshot -m region --clipboard-only ;; "current window (copy)") hyprshot -m window --clipboard-only ;; "full screen (copy)") hyprshot -m output --clipboard-only ;; diff --git a/.local/bin/sysact b/.local/bin/sysact index 5ea92fa..c014639 100755 --- a/.local/bin/sysact +++ b/.local/bin/sysact @@ -10,7 +10,7 @@ wmpid(){ # Get Hyprland process PID pgrep -o hyprland } -case "$(printf " lock\n󰠚 leave $WM\n renew $WM\n󱣻 hibernate\n reboot\n shutdown\n sleep\n display off" | rofi -dmenu -i -l 15 -p 'Action: ')" in +case "$(printf " lock\n󰠚 leave $WM\n renew $WM\n󱣻 hibernate\n reboot\n shutdown\n sleep\n display off" | fuzzel -d -i -l 15 -p 'Action: ')" in ' lock') hyprlock ;; "󰠚 leave $WM") kill -TERM "$(wmpid)" ;; " renew $WM") hyprctl reload ;; diff --git a/.local/bin/unmounter b/.local/bin/unmounter index 184b3ae..796fd76 100755 --- a/.local/bin/unmounter +++ b/.local/bin/unmounter @@ -1,12 +1,12 @@ #!/bin/sh -# A rofi -dmenu prompt to unmount drives. +# A dmenu prompt to unmount drives. # Provides you with mounted partitions, select one to unmount. # Drives mounted at /, /boot and /home will not be options to unmount. unmountusb() { [ -z "$drives" ] && exit - chosen="$(echo "$drives" | rofi -dmenu -i -p "Unmount which drive?")" || exit 1 + chosen="$(echo "$drives" | fuzzel -d -i -p "Unmount which drive?")" || exit 1 chosen="$(echo "$chosen" | awk '{print $1}')" [ -z "$chosen" ] && exit sudo -A umount "$chosen" && notify-send "💻 USB unmounting" "$chosen unmounted."