#!/bin/bash # mbxutils: handy utilities for your X11 window manager. # Copyright (C) 2021 Daniel Napora # # TODO Logout Dialog postponed # TODO Filebrowser standalone postponed ME=${0##*/} VERSION="0.2.0" CNF_DIR="$HOME/.config/mbxutils" CNF_FILE="$CNF_DIR/$ME.conf" [ ! -d "$HOME/.config/jgmenu" ] && mkdir -p "$HOME/.config/jgmenu" defaults() { mbx setvar apps_in=rootmenu mbx setvar menu_padding=5 mbx setvar item_height_factor=200 mbx setvar "font=\'Noto Sans\'" mbx setvar font_size=13 mbx setvar color_menu_bg=#252525 mbx "${1}" } [ ! -d "$CNF_DIR" ] && mkdir -p "$CNF_DIR" && cp -r /usr/share/mbxutils/* "$CNF_DIR"/ if [ ! -f "$CNF_FILE" ]; then cat < "${CNF_FILE}" apps_in=rootmenu menu_padding=5 item_height_factor=200 font='Noto Sans' font_size=13 color_menu_bg=#252525 EOF fi source <(grep = "$CNF_FILE") fg(){ r=$(printf "%d" 0x"${1:1:2}") g=$(printf "%d" 0x"${1:3:2}") b=$(printf "%d" 0x"${1:5:2}") rgb="$((r*299+g*587+b*114))" [ "$rgb" -gt 138000 ] && fgcolor="#222222" color_title_fg="#111111" color_sel_fg="#111111" color_sep_fg="#222222 20"|| fgcolor="#EEEEEE" color_title_fg="#FFFFFF" color_sel_fg="#FFFFFF" [ "$rgb" -gt 200000 ] && color_sel_bg="#222222 8" color_sel_border="#222222 16" color_title_bg="#222222 8" } fg "$color_menu_bg" [ "$menu_padding" == "0" ] && item_margin_x=0 item_margin_y=0 item_radius=0 item_padding_x=8 configure() { if [ -f /usr/share/mbxutils/mbxutils.inc ];then . /usr/share/mbxutils/mbxutils.inc else cat < "${CONFIG_FILE}" position_mode = ${position_mode:-fixed} csv_cmd = apps stay_alive = 0 terminal_exec = ${terminal:-terminator} terminal_args = -e hover_delay = 80 columns = ${columns:-1} # MENU menu_halign = ${menu_halign:-left} menu_valign = ${menu_valign:-center} menu_margin_x = ${menu_margin_x:-4} menu_margin_y = ${menu_margin_y:-4} sub_spacing = ${sub_spacing:-2} menu_width = ${menu_width:-20} menu_border = 1 menu_height_min = ${menu_height_min:-0} menu_height_max = ${menu_height_max:-0} menu_padding_top = ${menu_padding_top:-5} menu_padding_right = ${menu_padding:-5} menu_padding_bottom = ${menu_padding:-5} menu_padding_left = ${menu_padding:-5} menu_radius = ${menu_radius:-1} # ITEMS item_height = $((font_size*item_height_factor/100)) item_halign = ${item_halign:-left} item_padding_x = {item_padding_x:-2} item_margin_x = ${item_margin_x:-3} item_margin_y = ${item_margin_y:-3} item_radius = ${item_radius:-2} item_border = ${item_border:-1} arrow_string = ${arrow_string:-▸} hide_back_items = ${hide_back_items:-0} # COLORS color_sel_bg = ${color_sel_bg:-} color_sel_fg = ${color_sel_fg:-} color_sel_border = ${color_sel_border:-#eeeeee 40} color_norm_fg = ${fgcolor:-} color_title_fg = ${color_title_fg:-} color_menu_bg = ${color_menu_bg:-#0F2437} color_menu_border = #eeeeee 8 color_title_bg = ${color_title_bg:-"$fgcolor 12"} color_title_border = ${color_title_border:-} color_sep_fg = ${color_sep_fg:-} icon_theme = ${icon_theme:-Papirus} icon_theme_fallback = ${icon_theme_fallback:-hicolor} icon_size = ${icon_size:-0} icon_norm_alpha = 70 icon_sel_alpha = 100 icon_text_spacing = $((icon_size/4)) font_size = ${font_size:-12} font = ${font} ${font_size}px sep_markup = weight="bold" sep_halign = ${sep_halign:-center} sep_height = ${sep_height:-3} EOF fi } appsmenu() { CONFIG_FILE=$(mktemp) trap "rm -f ${CONFIG_FILE}" EXIT font_size=${font_size:-12} position_mode=${1:-pointer} hide_back_items=1 ## poniższe defaultowo do configu menu_padding=${menu_padding:-5} menu_padding_top=$((font_size*item_height_factor/100+menu_padding)) icon_size=$((font_size*item_height_factor/100-2)) rm -f ~/.config/jgmenu/append.csv if [[ $apps_in == "submenu" ]] then #export XDG_CONFIG_HOME="$CNF_DIR/submenu/" cat < "$HOME"/.config/jgmenu/prepend.csv @text,,$((menu_padding+10)),$((menu_padding_top-font_size*item_height_factor/100+2)),150,$((font_size*item_height_factor/100)),0,left,top,auto,#000000,🔍 @search,,$((menu_padding+32)),$((menu_padding_top-font_size*item_height_factor/100)),150,$((font_size*item_height_factor/100)),2,left,top,auto,#000000, type to search . ~/.config/mbxutils/inc/menu_top.csv Applications,^checkout(apps),applications-other ^sep() . ~/.config/mbxutils/inc/menu_bottom.csv ^tag(apps) EOF else cat < "$HOME"/.config/jgmenu/prepend.csv @text,,$((menu_padding+10)),$((menu_padding_top-font_size*item_height_factor/100+2)),150,$((font_size*item_height_factor/100)),0,left,top,auto,#000000,🔍 @search,,$((menu_padding+32)),$((menu_padding_top-font_size*item_height_factor/100)),150,$((font_size*item_height_factor/100)),2,left,top,auto,#000000, type to search . ~/.config/mbxutils/inc/menu_top.csv ^sep(Applications) EOF cat < "$HOME"/.config/jgmenu/append.csv ^sep() . ~/.config/mbxutils/inc/menu_bottom.csv EOF fi configure jgmenu --config-file="${CONFIG_FILE}" --no-append 2>/dev/null } distrologo() { case "$distro" in Manjaro) logo=manjaro;; Mabox) logo=mabox;; Lubuntu) logo=lubuntu;; *) logo=tux;; esac } lpanel() { OSNAME=$(lsb_release -d | awk '{print $2}') #Mabox OSVERSION=$(lsb_release -r | awk '{print $2}') #21.10 OSCODE=$(lsb_release -c | awk '{print $2}') # Geralt CONFIG_FILE=$(mktemp) MENU_ITEMS=$(mktemp) trap "rm -f '${CONFIG_FILE}' '${MENU_ITEMS}'" EXIT menu_padding_top=$((menu_padding+item_margin_y+48)) menu_halign="left" distro="${distro:-$OSNAME}" distrologo configure #${HOSTNAME:-$(hostname)}@${USER} cat < "${MENU_ITEMS}" @icon,,$((menu_padding+item_margin_x)),${menu_padding},48,48,0,left,top,,,/usr/share/mbxutils/logos/distributor-logo-${logo}.svg @text,,$((menu_padding+item_margin_x+50)),${menu_padding},180,32,0,left,top,${fgcolor},#DDDDDD,$distro ${OSVERSION} ${OSCODE} @text,,$((menu_padding+item_margin_x+50)),$((menu_padding+20)),180,32,0,left,top,${fgcolor},#DDDDDD,${XDG_SESSION_DESKTOP^} . ~/.config/mbxutils/inc/left_top.csv ^sep(File browser) $HOME,^pipe(mbxdir ~) ~/.config,^pipe(mbxdir ~/.config) /etc,^pipe(mbxdir /etc) ^sep(mbxutils) Preferences,^pipe(mbx-preferences lpanel) Preferences,mbx-preferences lpanel st . ~/.config/mbxutils/inc/left_bottom.csv EOF jgmenu --config-file="${CONFIG_FILE}" --csv-file="${MENU_ITEMS}" 2>/dev/null } rpanel() { OSNAME=$(lsb_release -d | awk '{print $2}') #Mabox OSVERSION=$(lsb_release -r | awk '{print $2}') #21.10 OSCODE=$(lsb_release -c | awk '{print $2}') # Geralt CONFIG_FILE=$(mktemp) MENU_ITEMS=$(mktemp) trap "rm -f '${CONFIG_FILE}' '${MENU_ITEMS}'" EXIT menu_padding_top=$((menu_padding+item_margin_y+48)) menu_halign="right" icon_size=$((font_size*item_height_factor/100-2)) distro="${distro:-$OSNAME}" distrologo configure cat < "${MENU_ITEMS}" @icon,,$((menu_padding+item_margin_x)),${menu_padding},48,48,0,left,top,,,/usr/share/mbxutils/logos/distributor-logo-${logo}.svg @text,,$((menu_padding+item_margin_x+50)),${menu_padding},180,32,0,left,top,${fgcolor},#DDDDDD,$distro ${OSVERSION} ${OSCODE} @text,,$((menu_padding+item_margin_x+50)),$((menu_padding+20)),180,32,0,left,top,${fgcolor},#DDDDDD,${XDG_SESSION_DESKTOP^} . ~/.config/mbxutils/inc/right_top.csv ^sep(Right Panel) Preferences,^pipe(mbx-preferences rpanel) Preferences,mbx-preferences rpanel st . ~/.config/mbxutils/inc/right_bottom.csv EOF jgmenu --config-file="${CONFIG_FILE}" --csv-file="${MENU_ITEMS}" 2>/dev/null } about() { CONFIG_FILE=$(mktemp) MENU_ITEMS=$(mktemp) trap "rm -f '${CONFIG_FILE}' '${MENU_ITEMS}'" EXIT eval $(xdotool getdisplaygeometry --shell) twidth=$((WIDTH/4)) theight=$((HEIGHT/4)) THUMB="$(DISPLAY=:0 scrot -t ${twidth}x${theight} -o "$HOME"/.config/mbxutils/mbx.png -e 'echo $m')" columns=2 icon_size=$((font_size*item_height_factor/100-2)) menu_halign=center #menu_padding=8 menu_width=$((twidth+menu_padding*2)) item_height=$((font_size*item_height_factor/100)) menu_padding_top=$((theight+menu_padding+60)) menu_height_max=$((menu_padding_top+menu_padding+item_height*6+item_margin_y*10)) #menu_height_min=$((menu_padding_top+menu_padding+item_height*6+item_margin_y*10)) configure cat < "${MENU_ITEMS}" @icon,,${menu_padding},${menu_padding},${twidth},${theight},4,left,top,,,$THUMB @text,,$((menu_padding+6)),$((menu_padding+theight+4)),${twidth},25,4,left,top,${fgcolor},#DDDDDD,mbxutils v0.2.0 (alpha) @text,,$((menu_padding+40)),$((menu_padding+theight+26)),${twidth},25,4,left,top,${fgcolor} 60,${fgcolor} 12,a set of lightweight and handy utilities @text,,$((menu_padding+56)),$((menu_padding+theight+38)),${twidth},25,4,left,top,${fgcolor} 60,${fgcolor} 12,for your X11 window manager ^sep(Utilities) Apps menu (main),mbx appsmenu,mbx-appsmenu Left SidePanel,mbx lpanel,mbx-lpanel Right SidePanel,mbx rpanel,mbx-rpanel Logout Dialog, mbx Quick Filebrowser,mbx files,folder Preferences,mbx-preferences about st ^sep(Manual) Configure keybindings,xdg-open https://mbxutils.maboxlinux.org,firefox Roadmap EOF jgmenu --config-file="${CONFIG_FILE}" --csv-file="${MENU_ITEMS}" 2>/dev/null } setvar() { # Może tu niepotrzebnie a tylko w mbx-preferences search="$(echo "$1"|cut -d= -f1)=" if grep -Rq "$search" "$CNF_FILE" then #found sed -i s/^"$search".*$/"$1"/ "$CNF_FILE" else #not found echo "$1" >> "$CNF_FILE" fi } case "$1" in reset) defaults "$2";; appsmenu) appsmenu "$2";; lpanel) lpanel;; rpanel) rpanel;; setvar) setvar "$2";; *) about;; esac exit 0