literate-dotfiles/dotfiles/rofi.org
2019-01-31 09:41:03 +01:00

12 KiB

Rofi Configuration

Rofi

! Base16 Solarized Light
! Author: Ethan Schoonover (http://ethanschoonover.com/solarized)

! base00: #fdf6e3
! base01: #eee8d5
! base02: #93a1a1
! base03: #839496
! base04: #657b83
! base05: #586e75
! base06: #073642
! base07: #002b36
! base08: #dc322f
! base09: #cb4b16
! base0A: #b58900
! base0B: #859900
! base0C: #2aa198
! base0D: #268bd2
! base0E: #6c71c4
! base0F: #d33682

! Enable the extended coloring options
rofi.color-enabled: true

! Property Name     BG       Border   Separator
rofi.color-window:  #eee8d5, #eee8d5, #fdf6e3

! Property Name     BG       FG       BG-alt   Head-BG  Head-FG
rofi.color-normal:  #eee8d5, #586e75, #eee8d5, #eee8d5, #002b36
rofi.color-active:  #eee8d5, #268bd2, #eee8d5, #eee8d5, #268bd2
rofi.color-urgent:  #eee8d5, #dc322f, #eee8d5, #eee8d5, #dc322f

! Set the desired separator style
rofi.separator-style: solid

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