#!/bin/sh
# test we are root
if [ "$(id -u)" != "0" ]; then
exit 1
fi
export CFLAGS="-mtune=generic -Os -pipe"
export CXXFLAGS="-mtune=generic -Os -pipe -fno-exceptions -fno-rtti "
P=rofi
V=1.7.5+wayland3
SRC=$P-$V
USER=`cat /etc/sysconfig/tcuser`
LIST="compiletc submitqc meson cmake git wayland-dev libxcb-dev glib2-dev pango-dev \
libxkbcommon-dev gdk-pixbuf2-dev startup-notification-dev imagemagick "
for Z in $LIST
do
su -c "tce-load -i $Z" $USER
done
cd /tmp
su -c "/usr/local/bin/wget -nc --no-check-certificate \
https://github.com/lbonn/$P/releases/download/1.7.5%2Bwayland3/$SRC.tar.xz " $USER
tar xvf $P*xz
cd $SRC
mkdir build && cd build
meson setup --prefix=/usr/local -Dstrip=true -Ddebug=false -Dbuildtype=plain
# Subprojects
# libgwater : YES
# libnkutils: YES
# User defined options
# buildtype : plain
# debug : false
# prefix : /usr/local
# strip : true
# to show settings as I could have used
meson configure # extra to above
# drun true Desktop file mode
# wayland enabled Build with wayland support
# xcb enabled Build with X11/xcb support
ninja # 5 seconds
DESTDIR=/tmp/$P ninja install
# reduce deps by not using SVG
cd /tmp/$P/usr/local/share/icons/hicolor/scalable/apps/
convert *.svg -resize 48x48 $P.png
rm -rf *.svg
cd /tmp/$P/usr/local/share/rofi/themes
rm -rf iggy* # remove large theme
# some themes have fonts lets fix now
sed 's|Source Code Pro|Sans|g' -i arthur.rasi
sed 's|FontAwesome 22|Sans 18|g' -i arthur.rasi # button
sed 's|Sans 8|Sans 12|' -i arthur.rasi
sed 's|Sans 10|Sans 12|' -i arthur.rasi
sed 's|Topaz-8 10|Sans 12|' -i c64.rasi
sed 's|Times New Roman|Sans|' -i dmenu.rasi
sed 's|mono 18|Sans 12|' -i docu.rasi
sed 's|monospace|Sans|' -i docu.rasi # inputbar
cd /tmp
# no dev
rm -rf $P/usr/local/include
rm -rf $P/usr/local/lib
# doc
######
mkdir -p $P-doc/usr/local/share
mv $P/usr/local/share/man $P-doc/usr/local/share
# theme TCE
############
# easier to move all themes and add just one back
mkdir -p $P-theme-selector/usr/local/bin
mv $P/usr/local/bin/$P-theme-selector $P-theme-selector/usr/local/bin/
mkdir -p $P-theme-selector/usr/local/share/applications
mv $P/usr/local/share/rofi/ $P-theme-selector/usr/local/share
DESK1=$P-theme-selector.desktop
mv $P/usr/local/share/applications/$DESK1 $P-theme-selector/usr/local/share/applications
echo 'X-FullPathIcon=/usr/local/share/pixmaps/rofi.png' >> $P-theme-selector/usr/local/share/applications/$DESK1
# NOTE rofi is a dep of the theme TCE
# main
#######
mkdir -p $P/usr/local/share/doc/$P
cp $SRC/COPYING $P/usr/local/share/doc/$P/COPYING
# add 1 theme back into main but setup for install script
mkdir -p $P/usr/local/share/$P/files
mv $P-theme-selector/usr/local/share/$P/themes/fancy.rasi $P/usr/local/share/$P/files
# desktop stuff
#############
mkdir -p $P/usr/local/share/pixmaps
mv $P/usr/local/share/icons/hicolor/scalable/apps/rofi.png $P/usr/local/share/pixmaps/
mkdir -p $P/usr/local/share/icons/hicolor/48x48/apps
rm -rf $P/usr/local/share/icons/hicolor/scalable
cp $P/usr/local/share/pixmaps/$P.png $P/usr/local/share/icons/hicolor/48x48/apps/
DESK2=$P.desktop
echo 'X-FullPathIcon=/usr/local/share/pixmaps/rofi.png' >> $P/usr/local/share/applications/$DESK2
sed 's|rofi -show|rofi -show drun -show-icons|' -i $P/usr/local/share/applications/$DESK2
# config
######### obtained by reading the man pages -> $ rofi -dump-config > config.rasi
# modified to force theme to fancy, local file not ramdrive file
cat >> $P/usr/local/share/$P/files/config.rasi <<'EOF'
configuration {
/* modes: "window,drun,run,ssh";*/
/* font: "Sans 18";*/
/* location: 0;*/
/* 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} [-p {port}]";*/
/* run-command: "{cmd}";*/
/* run-list-command: "";*/
/* run-shell-command: "{terminal} -e {cmd}";*/
/* window-command: "wmctrl -i -R {window}";*/
/* window-match-fields: "all";*/
icon-theme: "hicolor";
/* drun-match-fields: "name,generic,exec,categories,keywords";*/
/* drun-categories: ;*/
/* drun-show-actions: false;*/
/* drun-display-format: "{name} [({generic})]";*/
/* drun-url-launcher: "xdg-open";*/
/* disable-history: false;*/
/* ignored-prefixes: "";*/
/* sort: false;*/
/* sorting-method: "normal";*/
/* case-sensitive: false;*/
/* cycle: true;*/
/* sidebar-mode: false;*/
/* hover-select: false;*/
/* eh: 1;*/
/* auto-select: false;*/
/* parse-hosts: false;*/
/* parse-known-hosts: true;*/
/* combi-modes: "window,run";*/
/* matching: "normal";*/
/* tokenize: true;*/
/* m: "-5";*/
/* filter: ;*/
/* dpi: -1;*/
/* threads: 0;*/
/* scroll-method: 0;*/
/* window-format: "{w} {c} {t}";*/
/* click-to-exit: true;*/
/* global-kb: false;*/
/* max-history-size: 25;*/
/* combi-hide-mode-prefix: false;*/
/* combi-display-format: "{mode} {text}";*/
/* matching-negate-char: '-' /* unsupported */;*/
/* cache-dir: ;*/
/* window-thumbnail: false;*/
/* drun-use-desktop-cache: false;*/
/* drun-reload-desktop-cache: false;*/
/* normalize-match: false;*/
/* steal-focus: false;*/
/* application-fallback-icon: ;*/
/* refilter-timeout-limit: 300;*/
/* xserver-i300-workaround: false;*/
/* completer-mode: "recursivebrowser";*/
/* pid: "/home/tc/.cache/rofi.pid";*/
/* display-window: ;*/
/* display-windowcd: ;*/
/* display-run: ;*/
/* display-ssh: ;*/
/* display-drun: ;*/
/* display-combi: ;*/
/* display-keys: ;*/
/* display-filebrowser: ;*/
/* display-recursivebrowser: ;*/
/* kb-primary-paste: "Control+V,Shift+Insert";*/
/* kb-secondary-paste: "Control+v,Insert";*/
/* kb-secondary-copy: "Control+c";*/
/* 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-custom-alt: "Control+Shift+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-mode-complete: "Control+l";*/
/* kb-row-left: "Control+Page_Up";*/
/* kb-row-right: "Control+Page_Down";*/
/* kb-row-up: "Up,Control+p";*/
/* kb-row-down: "Down,Control+n";*/
/* kb-row-tab: "";*/
/* kb-element-next: "Tab";*/
/* kb-element-prev: "ISO_Left_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-ellipsize: "Alt+period";*/
/* 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";*/
/* kb-entry-history-up: "Control+Up";*/
/* kb-entry-history-down: "Control+Down";*/
/* 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";*/
timeout {
action: "kb-cancel";
delay: 0;
}
filebrowser {
directories-first: true;
sorting-method: "name";
}
icon {
theme: "hicolor";
}
}
@theme "/home/tc/.config/rofi/themes/fancy.rasi"
EOF
# install script
################
mkdir -p $P/usr/local/tce.installed
cat >> $P/usr/local/tce.installed/$P <<'EOF'
#!/bin/sh
gtk-update-icon-cache -q -f -t /usr/local/share/icons/hicolor
USER=`cat /etc/sysconfig/tcuser`
LOOP1=/tmp/tcloop/rofi/usr/local/share/rofi/files/config.rasi
HC=/home/$USER/.config/rofi
[ -d $HC ] || mkdir -p $HC
if [ ! -f $HC/config.rasi ] ; then
cp $LOOP1 $HC/
chmod 644 $HC/config.rasi
fi
LOOP2=/tmp/tcloop/rofi/usr/local/share/rofi/files/fancy.rasi
HT=/home/$USER/.config/rofi/themes
[ -d $HT ] || mkdir -p $HT
if [ ! -f $HT/fancy.rasi ] ; then
cp $LOOP2 $HT/
chmod 644 $HT/fancy.rasi
fi
chown -R $USER:staff $HC
EOF
chown -R root:staff $P/usr/local/tce.installed
chmod -R 775 $P/usr/local/tce.installed
# TCZ them
#######
LIST="$P $P-doc $P-theme-selector"
for Z in $LIST
do
mksquashfs $Z $Z.tcz
md5sum $Z.tcz > $Z.tcz.md5.txt
cd $Z
find . -not -type d | cut -c 2- | sort > ../tmp/$Z.tcz.list
cd /tmp
done
ls -hal
echo 'Title: rofi-doc.tcz
Description: man pages
Version: 1.7.5+wayland3
Author: https://github.com/lbonn/rofi/blob/wayland/AUTHORS
Original-site: https://github.com/lbonn/rofi
Copying-policy: Accompanied
Size: 48K
Extension_by: aus9 @linuxquestions.org
Tags: launcher
Comments: Check file list,
run $ man
Change-log: 2024/08/27 v 1.7.5+wayland3 on 15x
Current: 2024/08/27 ' > $P-doc.tcz.info
echo 'man-db.tcz' > $P-doc.tcz.dep
echo 'Title: rofi.tcz
Description: libX11/XWayland launcher and misc tool as below
Version: 1.7.5+wayland3
Author: https://github.com/lbonn/rofi/blob/wayland/AUTHORS
Original-site: https://github.com/lbonn/rofi
Copying-policy: Accompanied
Size: 236K
Extension_by: aus9 @linuxquestions.org
Tags: launcher
Comments: Fork of https://github.com/davatorium/rofi
An X11 & (X)wayland pop-up window switcher, run dialog,
dmenu replacement. It supports keyboard & mouse
navigation, type to filter, tokenized search
and log into a remote machine via ssh. (Untested)
config = $HOME/.config/rofi/config.rasi
You should correct pathway to theme if not user=tc
PLUS you have 1xtheme file
$HOME/.config/rofi/themes/fancy.rasi
which is called by last line in your config file
NORMAL USE:
If not using wbar icon, run
$ rofi -show drun -show-icons
Scroll thru selections via arrow key or mouse
Press enter against selection to open it
If App is already open elsewhere, you may switch to it
--- subject to WM settings
Press Escape key to exit app if no selection made.
OR mouse click outside app to exit
(change config for click-to-exit if you like app open if
you need to swap workspaces for a while)
Highly recommend you create a keybinding for above in WM,
if WM allows kb shortcuts
Selection + Enter key opens "target app" and closes rofi
If your WM supports workspaces, $ rofi -show window
provides a list of what is open on each workspace
To run it like dmenu (exe search not a desktop file search)
$ rofi -show run
but note the following enhancements, IMHO,
string search is anywhere in exe name
eg search for "gr" without quotes has hits including
addgroup, groff, vigr etc
fancy theme includes tabs for windows etc
TESTED basic functions on icewm/xorg and sway/xwayland
rofi on wayland likely to bork if xwayland not loaded and enabled
See rofi-doc & rofi-theme-selector
Change-log: 2024/08/27 v 1.7.5+wayland3 on 15x
Current: 2024/08/27 ' > $P.tcz.info
readelf -d $P/usr/local/bin/* | grep 'NEEDED'
#libglib-2.0.so.0]libgmodule-2.0.so.0]libgio-2.0.so.0]libgobject-2.0.so.0]glib2-cairo->pango
#libcairo.so.2]cairo->pango
#libpango-1.0.so.0]libpangocairo-1.0.so.0]pango
#libxkbcommon.so.0]libxkbcommon
#libgdk_pixbuf-2.0.so.0]gdk-pixbuf2->gtk-update-icon-cache
#libxcb.so.1]libxcb-util.so.1]libxcb-xkb.so.1]libxkbcommon-x11.so.0]PLUS
#libxcb-ewmh.so.2]libxcb-icccm.so.4]libxcb-randr.so.0]libxcb-cursor.so.0]PLUS
#libxcb-xinerama.so.0]libxcb->libxkbcommon
#libstartup-notification-1.so.0]startup-notification
#libwayland-client.so.0]libwayland-cursor.so.0]wayland
echo 'pango.tcz
libxkbcommon.tcz
gtk-update-icon-cache.tcz
startup-notification.tcz
wayland.tcz ' > $P.tcz.dep
echo 'Title: rofi-theme-selector.tcz
Description: GUI theme selector for rofi
Version: 1.7.5+wayland3
Author: https://github.com/lbonn/rofi/blob/wayland/AUTHORS
Original-site: https://github.com/lbonn/rofi
Copying-policy: Accompanied
Size: 32K
Extension_by: aus9 @linuxquestions.org
Tags: launcher
Comments: This TCE uses same icon as main TCE
rofi defaults to fancy theme.
If you like to view others, load this TCE and
press enter against each theme, except dmenu.
Once you are happy with a theme, press Alt + a to accept
new selection. Or press Escape to keep current theme.
Use wbar or run
$ rofi-theme-selector
Alt + a edits config to usr/share/* pathway So...
Copy any new theme from tcloop/TCE/usr/local/share/rofi/themes/
-> $HOME/.config/rofi/themes
Independent themes can also be used see
https://github.com/newmanls/rofi-themes-collection
and other like minded sites
TC has a man-page for this TCE too
Be aware the following have font settings which over rule config
arthur, c64, dmenu & docu
The last line of your config should read as
and pathway
@theme "/home/tc/.config/rofi/themes/.rasi"
If you lack confidence to do this, keep this TCE loading which has
a dep of rofi
Change-log: 2024/08/27 v 1.7.5+wayland3 on 15x -1xlarge theme & desktop file removed
Current: 2024/08/27 ' > $P-theme-selector.tcz.info
# exe is a bash script
echo 'rofi.tcz
bash.tcz
coreutils.tcz
sed.tcz ' > $P-theme-selector.tcz.dep
submitqc --libs
rm -rf *.zsync