#+TITLE: Rofi Configuration * Rofi :PROPERTIES: :header-args: :tangle ~/.config/rofi/config.rasi :header-args+: :comments no :mkdirp yes :END: #+BEGIN_SRC conf configuration { /* modi: "window,run,ssh";*/ /* width: 50;*/ /* lines: 15;*/ /* columns: 1;*/ font: "Hack Nerd Font 12"; /* bw: 1;*/ /* location: 0;*/ /* padding: 5;*/ /* yoffset: 0;*/ /* xoffset: 0;*/ /* fixed-num-lines: true;*/ /* show-icons: false;*/ /* terminal: "rofi-sensible-terminal";*/ /* ssh-client: "ssh";*/ /* ssh-command: "{terminal} -e {ssh-client} {host}";*/ /* run-command: "{cmd}";*/ /* run-list-command: "";*/ /* run-shell-command: "{terminal} -e {cmd}";*/ /* window-command: "xkill -id {window}";*/ /* window-match-fields: "all";*/ /* icon-theme: ;*/ /* drun-match-fields: "name,generic,exec,categories";*/ /* drun-show-actions: false;*/ /* drun-display-format: "{name} [({generic})]";*/ /* disable-history: false;*/ /* sort: false;*/ /* sorting-method: ;*/ /* case-sensitive: false;*/ /* cycle: true;*/ /* sidebar-mode: false;*/ /* eh: 1;*/ /* auto-select: false;*/ /* parse-hosts: false;*/ /* parse-known-hosts: true;*/ /* combi-modi: "window,run";*/ /* matching: "normal";*/ /* tokenize: true;*/ /* m: "-5";*/ /* line-margin: 2;*/ /* line-padding: 1;*/ /* filter: ;*/ /* separator-style: "dash";*/ /* hide-scrollbar: false;*/ /* fullscreen: false;*/ /* fake-transparency: false;*/ /* dpi: -1;*/ /* threads: 0;*/ /* scrollbar-width: 8;*/ /* scroll-method: 0;*/ /* fake-background: "screenshot";*/ /* window-format: "{w} {i}{c} {t}";*/ /* click-to-exit: true;*/ /* show-match: true;*/ theme: "gruvbox-dark-soft"; /* color-normal: ;*/ /* color-urgent: ;*/ /* color-active: ;*/ /* color-window: ;*/ /* max-history-size: 25;*/ /* combi-hide-mode-prefix: false;*/ /* matching-negate-char: '-' /* unsupported */;*/ /* pid: "/run/user/1000/rofi.pid";*/ /* display-window: ;*/ /* display-windowcd: ;*/ /* display-run: ;*/ /* display-ssh: ;*/ /* display-drun: ;*/ /* display-combi: ;*/ /* display-keys: ;*/ /* kb-primary-paste: "Control+V,Shift+Insert";*/ /* kb-secondary-paste: "Control+v,Insert";*/ /* kb-clear-line: "Control+w";*/ /* kb-move-front: "Control+a";*/ /* kb-move-end: "Control+e";*/ /* kb-move-word-back: "Alt+b,Control+Left";*/ /* kb-move-word-forward: "Alt+f,Control+Right";*/ /* kb-move-char-back: "Left,Control+b";*/ /* kb-move-char-forward: "Right,Control+f";*/ /* kb-remove-word-back: "Control+Alt+h,Control+BackSpace";*/ /* kb-remove-word-forward: "Control+Alt+d";*/ /* kb-remove-char-forward: "Delete,Control+d";*/ /* kb-remove-char-back: "BackSpace,Shift+BackSpace,Control+h";*/ /* kb-remove-to-eol: "Control+k";*/ /* kb-remove-to-sol: "Control+u";*/ /* kb-accept-entry: "Control+j,Control+m,Return,KP_Enter";*/ /* kb-accept-custom: "Control+Return";*/ /* kb-accept-alt: "Shift+Return";*/ /* kb-delete-entry: "Shift+Delete";*/ /* kb-mode-next: "Shift+Right,Control+Tab";*/ /* kb-mode-previous: "Shift+Left,Control+ISO_Left_Tab";*/ /* kb-row-left: "Control+Page_Up";*/ /* kb-row-right: "Control+Page_Down";*/ /* kb-row-up: "Up,Control+p,ISO_Left_Tab";*/ /* kb-row-down: "Down,Control+n";*/ /* kb-row-tab: "Tab";*/ /* kb-page-prev: "Page_Up";*/ /* kb-page-next: "Page_Down";*/ /* kb-row-first: "Home,KP_Home";*/ /* kb-row-last: "End,KP_End";*/ /* kb-row-select: "Control+space";*/ /* kb-screenshot: "Alt+S";*/ /* kb-toggle-case-sensitivity: "grave,dead_grave";*/ /* kb-toggle-sort: "Alt+grave";*/ /* kb-cancel: "Escape,Control+g,Control+bracketleft";*/ /* kb-custom-1: "Alt+1";*/ /* kb-custom-2: "Alt+2";*/ /* kb-custom-3: "Alt+3";*/ /* kb-custom-4: "Alt+4";*/ /* kb-custom-5: "Alt+5";*/ /* kb-custom-6: "Alt+6";*/ /* kb-custom-7: "Alt+7";*/ /* kb-custom-8: "Alt+8";*/ /* kb-custom-9: "Alt+9";*/ /* kb-custom-10: "Alt+0";*/ /* kb-custom-11: "Alt+exclam";*/ /* kb-custom-12: "Alt+at";*/ /* kb-custom-13: "Alt+numbersign";*/ /* kb-custom-14: "Alt+dollar";*/ /* kb-custom-15: "Alt+percent";*/ /* kb-custom-16: "Alt+dead_circumflex";*/ /* kb-custom-17: "Alt+ampersand";*/ /* kb-custom-18: "Alt+asterisk";*/ /* kb-custom-19: "Alt+parenleft";*/ /* kb-select-1: "Super+1";*/ /* kb-select-2: "Super+2";*/ /* kb-select-3: "Super+3";*/ /* kb-select-4: "Super+4";*/ /* kb-select-5: "Super+5";*/ /* kb-select-6: "Super+6";*/ /* kb-select-7: "Super+7";*/ /* kb-select-8: "Super+8";*/ /* kb-select-9: "Super+9";*/ /* kb-select-10: "Super+0";*/ /* ml-row-left: "ScrollLeft";*/ /* ml-row-right: "ScrollRight";*/ /* ml-row-up: "ScrollUp";*/ /* ml-row-down: "ScrollDown";*/ /* me-select-entry: "MousePrimary";*/ /* me-accept-entry: "MouseDPrimary";*/ /* me-accept-custom: "Control+MouseDPrimary";*/ } #+END_SRC * Rofi Menu Config :PROPERTIES: :header-args: :tangle ~/.config/rofimenu/rofimenu.config :header-args+: :comments none :mkdirp yes :END: #+BEGIN_SRC conf #!/bin/bash # ============================================================= # Configuration file for rofimenu script # # Top level menu consists of modi names from modilist. # Modilist is a comma separated list of default modi (drun,run...) and/or custom modi. # Names of default modi can be set as rofi options (e.g. -display-drun Applications). # Custom modi format: "modi_name:modi_script". # Menu functions from this script can be used as modi like this ":$thisscript -menu " # ============================================================= # pause needed for smooth transition when menu command refers to other modi DELAY=0.06 delay() { sleep $DELAY } # define modi labels for menu FAV=" Favourites" DRUN=" Applications" CAT=" Categories" RUN=" Run" MENU=" Edit Menu" EXIT=" Exit" modilist="\ $FAV:$thisscript -menu ${FAV#* },\ drun,\ $CAT:$thisscript -menu ${CAT#* },\ run,\ $MENU:$thisscript -menu Menu_settings,\ $EXIT:$thisscript -menu ${EXIT#* }" # Menu functions print lines in format "label:command". Menu_settings() { echo " Edit config:$GUI_EDITOR $ROFIMENU_CONFIG && $thisscript -show \'$MENU\'" echo " Reset config:rm $ROFIMENU_CONFIG && delay; $thisscript -show \'$MENU\'" echo "──────────────:true" echo " Edit theme:$GUI_EDITOR $ROFIMENU_THEME && $thisscript -show \'$MENU\'" echo " Reset theme:rm $ROFIMENU_THEME && delay; $thisscript -show \'$MENU\'" } Favourites() { echo " Terminal:default-terminal" echo " File Manager:xdg-open ~" echo " Browser:default-browser" echo " Settings:default-terminal -e bmenu" echo " Search:rofi-finder.sh" # echo "$EXIT: delay; delay; $thisscript -show \'$EXIT\'" # This refers to modi from the same script; needs delay } Exit() { echo " lock:screenlock" echo " suspend:systemctl suspend" echo " hibernate:systemctl hibernate" echo " logout:xdotool key --clearmodifiers super+shift+q" echo " reboot:systemctl reboot" echo " poweroff:systemctl poweroff" } Categories() { SUBMENU_MARK="" IFS=' ' # Newline separated list, each line has format "[symbol ][alias:]category" # Category with alias will be shown in menu under that alias # The first entry below is an alias for " " so it shows all applications desired="\  Applications:  Favorites  Accessories:Utility  Development  Documentation  Education  Graphics  Internet:Network  Multimedia:AudioVideo  Office  Settings  System" # determine max line length and set tab position for subcategory mark maxlength=0 for line in $desired ; do label="${line%:*}" if [ ${#label} -gt $maxlength ] ; then maxlength=${#label} fi done submenu_tab=$(($maxlength+3)) present="$(grep Categories /usr/share/applications/*.desktop \ | cut -d'=' -f2 \ | sed 's/;/\n/g' \ | LC_COLLATE=POSIX sort --ignore-case --unique)" linenumber=0 for line in $desired ; do category="${line##*[ :]}" label="$(echo -e ${line%:*}\\t${SUBMENU_MARK} | expand -t $submenu_tab)" ## add submenu mark if [ $(echo "$present"|grep -w -c "$category") -gt 0 ] ; then echo "$label:activate_category \"$label\" \"$category\" $linenumber" linenumber=$(($linenumber+1)) fi done } # Desktop menu parameters DT_MODI="Desktop:$thisscript -menu Desktop" Desktop() { echo " Terminal:default-terminal" echo " File Manager:xdg-open ~" echo " Browser:default-browser" #TODO determine number of lines before categories addlinenumber=3 eval $(xdotool search --class rofi getwindowgeometry --shell) Categories|sed "s/\$/ $addlinenumber $X $Y/" # pass additional lines number, X, Y echo " Search:rofi-finder.sh" } DT_WIDTH=200 # pixels ##TODO determine desktop menu line height according to theme DT_LINE_HEIGHT=23 # pixels DT_THEME=" *{ lines: 20; scrollbar: false; dynamic: true; } #window { width: ${DT_WIDTH}px; children: [ dt-mainbox ]; } #sidebar { enabled: false; } #button { width: ${DT_WIDTH}px; padding: 2px 1ch; } #inputbar { enabled: false; }" activate_category() { # shows drun modi filtered with category. If no command selected, returns to categories modi label="${1% *}" # remove submenu mark category="$2" linenumber="$3" theme="" goback="$thisscript -show \"$CAT\"" if [ $# -gt 3 ] ; then # that means categories for desktop menu, number of lines before categories, X, Y addlinenumber=$4 X=$5 Y=$6 linenumber=$(($linenumber+$addlinenumber)) if [ $linenumber -gt 0 ] ; then i=$linenumber dummy="true" dummyline="textboxdummy" while [ $i -gt 1 ] ; do dummyline="textboxdummy,$dummyline" i=$(($i-1)) done else dummy="false" fi # adjust X if too close to the right side of the screen MAX_X=$(wattr w $(lsw -r) ) anchor="north" if [ $X -gt $((${MAX_X}-${DT_WIDTH}*2)) ] ; then anchor="${anchor}east" X=$MAX_X else anchor="${anchor}west" fi theme="$DT_THEME * { x-offset: $X; y-offset: $Y; anchor: $anchor; } #window { width: $((${DT_WIDTH}*2)); } #sidebar { enabled: true; } #boxdummy { enabled: $dummy; children: [ $dummyline ]; }" goback="$thisscript -desktop $X $Y" fi command=$(delay; $thisscript \ -only drun \ -drun-match-fields categories,name \ -display-drun "$label" \ -filter "$category " \ -run-command "echo {cmd}" \ -run-shell-command "echo {terminal} -e {cmd}" \ -theme-str "$theme") if [ -n "$command" ] ; then eval "$command" & exit fi # return to categories modi. No delay needed eval $goback & if [ $linenumber -eq 0 ] ; then # if the category is on the top line exit fi # move rofi selection down by linenumber keys="" while [ $linenumber -gt 0 ] ; do keys="$keys Tab" linenumber=$(($linenumber-1)) done ##TODO wait until rofi can take input delay delay xdotool search --class rofi key --delay 0 $keys } ## rofi theme file can be set here # ROFIMENU_THEME="$HOME/.config/rofimenu/rofimenu.rasi" #+END_SRC * Theme :PROPERTIES: :header-args: :tangle ~/.config/rofimenu/rofimenu.rasi :header-args+: :comments none :mkdirp yes :END: #+BEGIN_SRC conf configuration { me-select-entry: "MouseSecondary"; me-accept-entry: "MousePrimary"; scroll-method: 1; show-icons: true; sidebar-mode: true; kb-custom-1: ""; kb-custom-2: ""; kb-custom-3: ""; kb-custom-4: ""; kb-custom-5: ""; kb-custom-6: ""; kb-custom-7: ""; kb-custom-8: ""; kb-custom-9: ""; kb-custom-10: ""; kb-select-1: "Alt+1"; kb-select-2: "Alt+2"; kb-select-3: "Alt+3"; kb-select-4: "Alt+4"; kb-select-5: "Alt+5"; kb-select-6: "Alt+6"; kb-select-7: "Alt+7"; kb-select-8: "Alt+8"; kb-select-9: "Alt+9"; kb-select-10: "Alt+0"; } * { //// COLORS //// //// uncomment to match bspwm edition theme background: #292f34FF; background-color: #292f3400; foreground: #F6F9FFFF; selected: #1ABB9BFF; selected-foreground: @foreground; //// uncomment to match Adapta Nokto theme // background: #222D32E8; // background-color: #00000000; // foreground: #CFD8DCFF; // selected: #00BCD4FF; // selected-foreground: #FFFFFFFF; //// common - active and urgent active-background: #3A464BFF; urgent-background: #800000FF; urgent-foreground: @foreground; selected-urgent-background: @urgent-foreground; selected-urgent-foreground: @urgent-background; //// TEXT //// font: "xos4 Terminus 18px"; // font: "Knack Nerd Font 16px"; text-color: @foreground; //// PADDING ETC //// margin: 0px; border: 0px; padding: 0px; spacing: 0px; elementpadding: 2px 0px; elementmargin: 0px 2px; listmargin: 0px 2px 0px 0px; //// SIZE //// windowwidth: 40ch; buttonwidth: 18ch; lines: 12; fixed-height: false; //// POSITION //// location: northwest; anchor: northwest; x-offset: 0px; y-offset: 24px; //// LAYOUT //// scrollbar: true; //// uncomment to get submenu-like style menustyle: [ sb-mainbox ]; buttonpadding: 2px 1ch; button-bg: @background; dynamic: true; //// uncomment to get tabs-like style // menustyle: [ tb-mainbox ]; // buttonpadding: 14px 1ch; // dynamic: false; } ////////////////////////////////////////// window { width: @windowwidth; children: @menustyle; } //submenu-style sb-mainbox { orientation: horizontal; children: [ sidebar, vertibox ]; } //tabs-style tb-mainbox { orientation: vertical; children: [ inputbar, horibox ]; background-color: @background; } //desktop-submenu dt-mainbox { orientation: vertical; children: [ boxdummy, sb-mainbox ]; } horibox { orientation: horizontal; children: [ listview, sidebar ]; } sidebar { orientation: vertical; } button { horizontal-align: 0; padding: @buttonpadding; width: @buttonwidth; background-color: @button-bg; expand: false; } vertibox { orientation: vertical; children: [ inputbar, listview ]; background-color: @background; } prompt { enabled: false; } listview { margin: @listmargin; } scrollbar { handle-width: 0.5ch; handle-color: @selected; } boxdummy { enabled: false; orientation: vertical; expand: false; children: [ textboxdummy ]; } textboxdummy { str: " "; } element, inputbar, textboxdummy { padding: @elementpadding; margin: @elementmargin; width: @elementwidth; } element.normal.active, element.alternate.active { background-color: @active-background; text-color: @selected-foreground; } element.selected, button.selected { background-color: @selected; text-color: @selected-foreground; } element.normal.urgent, element.alternate.urgent { background-color: @urgent-background; text-color: @urgent-foreground; } element.selected.urgent { background-color: @selected-urgent-background; text-color: @selected-urgent-foreground; } #+END_SRC