literate-dotfiles/dotfiles/rofi.org

16 KiB

Rofi Configuration

Rofi

  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} [<span weight='light' size='small'><i>({generic})</i></span>]";*/
  /*	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";*/
  }

Rofi Menu Config

#!/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 "<menu_name>:$thisscript -menu <menu_function>"
# =============================================================

# 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"

Theme

  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;
  }