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

477 lines
12 KiB
Org Mode

#+TITLE: Rofi Configuration
* Rofi
:PROPERTIES:
:header-args: :tangle ~/.config/rofi/config
:header-args+: :comments both :mkdirp yes
:END:
#+BEGIN_SRC conf
! 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
#+END_SRC
* Rofi Menu Config
:PROPERTIES:
:header-args: :tangle ~/.config/rofimenu/rofimenu.config
:header-args+: :comments both :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 "<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"
#+END_SRC
* Theme
:PROPERTIES:
:header-args: :tangle ~/.config/rofimenu/rofimenu.rasi
:header-args+: :comments both :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