From fe81ccbaffe9c4a879acb0564e584256358111f2 Mon Sep 17 00:00:00 2001 From: 2Shirt <2xShirt@gmail.com> Date: Tue, 22 Feb 2022 13:20:59 -0700 Subject: [PATCH] Replace Alacritty with custom st build --- setup/linux/packages/custom/st/.SRCINFO | 19 + setup/linux/packages/custom/st/PKGBUILD | 97 ++++ .../packages/custom/st/README.terminfo.rst | 90 ++++ setup/linux/packages/custom/st/config.def.h | 482 ++++++++++++++++++ setup/linux/packages/custom/st/st-colors.diff | 43 ++ .../custom/st/st-desktopentry-0.8.4-edit.diff | 48 ++ ...crollback-mouse-increment-0.8.2-fixed.diff | 16 + setup/linux/packages/custom/st/terminfo.patch | 10 + setup/linux/packages/dependencies | 1 + setup/linux/packages/gui | 3 +- .../etc/skel/.config/openbox/autostart | 2 +- .../etc/skel/.config/openbox/menu.xml | 74 ++- .../airootfs/etc/skel/.config/openbox/rc.xml | 20 +- 13 files changed, 850 insertions(+), 55 deletions(-) create mode 100644 setup/linux/packages/custom/st/.SRCINFO create mode 100644 setup/linux/packages/custom/st/PKGBUILD create mode 100644 setup/linux/packages/custom/st/README.terminfo.rst create mode 100644 setup/linux/packages/custom/st/config.def.h create mode 100644 setup/linux/packages/custom/st/st-colors.diff create mode 100644 setup/linux/packages/custom/st/st-desktopentry-0.8.4-edit.diff create mode 100644 setup/linux/packages/custom/st/st-scrollback-mouse-increment-0.8.2-fixed.diff create mode 100644 setup/linux/packages/custom/st/terminfo.patch diff --git a/setup/linux/packages/custom/st/.SRCINFO b/setup/linux/packages/custom/st/.SRCINFO new file mode 100644 index 00000000..1017e131 --- /dev/null +++ b/setup/linux/packages/custom/st/.SRCINFO @@ -0,0 +1,19 @@ +pkgbase = st + pkgdesc = A simple virtual terminal emulator for X. + pkgver = 0.8.5 + pkgrel = 1 + url = https://st.suckless.org + arch = i686 + arch = x86_64 + arch = armv7h + arch = aarch64 + license = MIT + depends = libxft + source = https://dl.suckless.org/st/st-0.8.5.tar.gz + source = terminfo.patch + source = README.terminfo.rst + sha256sums = ea6832203ed02ff74182bcb8adaa9ec454c8f989e79232cb859665e2f544ab37 + sha256sums = f9deea445a5c6203a0e8e699f3c3b55e27275f17fb408562c4dd5d649edeea23 + sha256sums = 0ebcbba881832adf9c98ce9fe7667c851d3cc3345077cb8ebe32702698665be2 + +pkgname = st diff --git a/setup/linux/packages/custom/st/PKGBUILD b/setup/linux/packages/custom/st/PKGBUILD new file mode 100644 index 00000000..78516c11 --- /dev/null +++ b/setup/linux/packages/custom/st/PKGBUILD @@ -0,0 +1,97 @@ +# Maintainer: Jose Riha +# Maintainer: Sebastian J. Bronner +# Contributor: Patrick Jackson +# Contributor: Christoph Vigano + +pkgname=st +pkgver=0.8.5 +pkgrel=1 +pkgdesc='A simple virtual terminal emulator for X.' +arch=('i686' 'x86_64' 'armv7h' 'aarch64') +license=('MIT') +depends=(libxft) +url=https://st.suckless.org +source=(https://dl.suckless.org/$pkgname/$pkgname-$pkgver.tar.gz + terminfo.patch + README.terminfo.rst + https://st.suckless.org/patches/alpha/st-alpha-20220206-0.8.5.diff + st-colors.diff + https://st.suckless.org/patches/delkey/st-delkey-20201112-4ef0cbd.diff + st-desktopentry-0.8.4-edit.diff + https://st.suckless.org/patches/scrollback/st-scrollback-20210507-4536f46.diff + https://st.suckless.org/patches/scrollback/st-scrollback-mouse-20220127-2c5edf2.diff + https://st.suckless.org/patches/scrollback/st-scrollback-mouse-altscreen-20220127-2c5edf2.diff + st-scrollback-mouse-increment-0.8.2-fixed.diff + ) +sha256sums=('ea6832203ed02ff74182bcb8adaa9ec454c8f989e79232cb859665e2f544ab37' + 'f9deea445a5c6203a0e8e699f3c3b55e27275f17fb408562c4dd5d649edeea23' + '0ebcbba881832adf9c98ce9fe7667c851d3cc3345077cb8ebe32702698665be2' + '42e4803ce2a67835f7e533a707a8a28e3804a26ced163145108970b9aee5fb81' + '1758a0930a06bf51497923bbd0b1d88a33d4ed4deb770fd85e56e5170c3a2c5b' + '946051d123dfe21d8f5ef0f1070c473443f4779dc0bd7edf7c8497f67e325a49' + '51d22293b6a2c19471f31160bfebf832dfe2a2768e226520d46c3321d7592649' + '19d8f4e7fd0d1933dc6fcf6c7333db08e1b40fc75795464660c4d723eb62511c' + '46ac9bcdbfeb0011533207cb0ab31657a3eb9196da1d0db346e6a9d1fc4b4f76' + '8f2f17683f12d57b1c80461247fe15234f5f5a6fc52cdf48176c8358e699101d' + '3f5dc269614b930b738b78ad9f8f4538baede1e0ab7d16e9f5d8a590a25ef52d') +_sourcedir=$pkgname-$pkgver +_makeopts="--directory=$_sourcedir" + +prepare() { + patch --directory="$_sourcedir" --strip=0 < terminfo.patch + for file in "${source[@]}"; do + if [[ "$file" == *.diff ]]; then + # Apply patches + #echo "Applying patch: $(basename ${file})" + patch --directory="$_sourcedir" <"$srcdir/$(basename ${file})" + fi + done + sed 's/Liberation Mono/Hack/;s/float alpha = 0.8;/float alpha = 0.85;/' "$_sourcedir/config.def.h" > "$_sourcedir/config.h" + + # This package provides a mechanism to provide a custom config.h. Multiple + # configuration states are determined by the presence of two files in + # $BUILDDIR: + # + # config.h config.def.h state + # ======== ============ ===== + # absent absent Initial state. The user receives a message on how + # to configure this package. + # absent present The user was previously made aware of the + # configuration options and has not made any + # configuration changes. The package is built using + # default values. + # present The user has supplied his or her configuration. The + # file will be copied to $srcdir and used during + # build. + # + # After this test, config.def.h is copied from $srcdir to $BUILDDIR to + # provide an up to date template for the user. + if [ -e "$BUILDDIR/config.h" ] + then + cp "$BUILDDIR/config.h" "$_sourcedir" + elif [ ! -e "$BUILDDIR/config.def.h" ] + then + msg='This package can be configured in config.h. Copy the config.def.h ' + msg+='that was just placed into the package directory to config.h and ' + msg+='modify it to change the configuration. Or just leave it alone to ' + msg+='continue to use default values.' + echo "$msg" + fi + cp "$_sourcedir/config.def.h" "$BUILDDIR" +} + +build() { + make $_makeopts X11INC=/usr/include/X11 X11LIB=/usr/lib/X11 +} + +package() { + local installopts='--mode 0644 -D --target-directory' + local shrdir="$pkgdir/usr/share" + local licdir="$shrdir/licenses/$pkgname" + local docdir="$shrdir/doc/$pkgname" + make $_makeopts PREFIX=/usr DESTDIR="$pkgdir" install + install $installopts "$licdir" "$_sourcedir/LICENSE" + install $installopts "$docdir" "$_sourcedir/README" + install $installopts "$docdir" README.terminfo.rst + install $installopts "$shrdir/$pkgname" "$_sourcedir/st.info" +} diff --git a/setup/linux/packages/custom/st/README.terminfo.rst b/setup/linux/packages/custom/st/README.terminfo.rst new file mode 100644 index 00000000..cd724d0d --- /dev/null +++ b/setup/linux/packages/custom/st/README.terminfo.rst @@ -0,0 +1,90 @@ +Terminfo Entries +================ + +:Author: Sebastian J. Bronner +:Date: 2019-11-06 +:URL: https://aur.archlinux.org/packages/st + +The Problem +----------- + +Most Linux-based distributions will have their terminfo entries in the +``ncurses`` package. These live in ``/usr/share/terminfo``. There you will find +several entries for ``st``. As of ``ncurses-6.1`` as packaged in ArchLinux, +these, do not work well with current versions of ``st``. + +Specifically, I have observed the following issues when using the terminfo +entries supplied with ``ncurses``: + +* Start ``st``. +* Run ``tmux`` in the ``st`` window. +* Run ``nvim`` in ``tmux``. + + * ``tmux`` will crash immediately with the following message: + + .. code:: console + + [lost server] + % + +* Run ``w3m`` with any URL in ``tmux``. + + * ``w3m`` will not react to any key presses (most notably the arrow keys and + ``q``) and must be terminated with ``killall w3m``. + * The command line returned where ``w3m`` was running will show all the + missing keypresses. + +For reference, I performed these tests using the following software versions: +``st`` 0.8.2, ``tmux`` 2.9_a, ``neovim`` 0.4.2, and ``w3m`` +0.5.3.git20190105-1. + +A couple of issues have been filed against ``tmux`` for this. Although it is +not a problem with ``tmux`` the issues remain for reference: + +| https://github.com/tmux/tmux/issues/1264 +| https://github.com/tmux/tmux/issues/1593 + +Complications +------------- + +While it may be tempting to use the terminfo files shipped with ``st``, that +would be a bad idea from a packaging standpoint. There are two reasons for +this: (1) As of ``st-0.8.2`` they have errors in them. This has been fixed and +will roll out in the next release, though. + +| https://lists.gnu.org/archive/html/bug-ncurses/2019-10/msg00071.html +| https://lists.suckless.org/hackers/1911/17006.html + +(2) It is vital that remote terminals connecting via ``ssh`` are known. That is +accomplished by having all terminfo files in one package (like ``ncurses``). + +``ncurses`` has released updated terminfo entries. The problem as described +above is fixed. However, the updated terminfo entries are not installed on +ArchLinux because they were released as a standalone file without a new release +of the rest of ``ncurses``. + +The Solution +------------ + +The solution must be to get the updated terminfo entries packaged for +ArchLinux. I believe that the ``ncurses`` package should be updated to that +effect. + +https://bugs.archlinux.org/task/57596 + +The Workaround +-------------- + +A somewhat painful, albeit pragmatic, workaround is as follows: A user that +encounters issues that are due to mismatched terminfo entries, such as those +above, can populate a user-level terminfo database from the terminfo entries +supplied by ``st``. The following command will do this: + +.. code:: shell + + tic -sx /usr/share/st/st.info + +The generated terminfo database will most likely be placed in ``~/.terminfo``. +The command will print the actual location used. Unfortunately, these files +need to be kept up to date by hand. Actually they should probably be removed as +soon as a new version of ``ncurses`` is released. diff --git a/setup/linux/packages/custom/st/config.def.h b/setup/linux/packages/custom/st/config.def.h new file mode 100644 index 00000000..300a4f9f --- /dev/null +++ b/setup/linux/packages/custom/st/config.def.h @@ -0,0 +1,482 @@ +/* See LICENSE file for copyright and license details. */ + +/* + * appearance + * + * font: see http://freedesktop.org/software/fontconfig/fontconfig-user.html + */ +static char *font = "Liberation Mono:pixelsize=12:antialias=true:autohint=true"; +static int borderpx = 2; + +/* + * What program is execed by st depends of these precedence rules: + * 1: program passed with -e + * 2: scroll and/or utmp + * 3: SHELL environment variable + * 4: value of shell in /etc/passwd + * 5: value of shell in config.h + */ +static char *shell = "/bin/sh"; +char *utmp = NULL; +/* scroll program: to enable use a string like "scroll" */ +char *scroll = NULL; +char *stty_args = "stty raw pass8 nl -echo -iexten -cstopb 38400"; + +/* identification sequence returned in DA and DECID */ +char *vtiden = "\033[?6c"; + +/* Kerning / character bounding-box multipliers */ +static float cwscale = 1.0; +static float chscale = 1.0; + +/* + * word delimiter string + * + * More advanced example: L" `'\"()[]{}" + */ +wchar_t *worddelimiters = L" "; + +/* selection timeouts (in milliseconds) */ +static unsigned int doubleclicktimeout = 300; +static unsigned int tripleclicktimeout = 600; + +/* alt screens */ +int allowaltscreen = 1; + +/* allow certain non-interactive (insecure) window operations such as: + setting the clipboard text */ +int allowwindowops = 0; + +/* + * draw latency range in ms - from new content/keypress/etc until drawing. + * within this range, st draws when content stops arriving (idle). mostly it's + * near minlatency, but it waits longer for slow updates to avoid partial draw. + * low minlatency will tear/flicker more, as it can "detect" idle too early. + */ +static double minlatency = 8; +static double maxlatency = 33; + +/* + * blinking timeout (set to 0 to disable blinking) for the terminal blinking + * attribute. + */ +static unsigned int blinktimeout = 800; + +/* + * thickness of underline and bar cursors + */ +static unsigned int cursorthickness = 2; + +/* + * bell volume. It must be a value between -100 and 100. Use 0 for disabling + * it + */ +static int bellvolume = 0; + +/* default TERM value */ +char *termname = "st-256color"; + +/* + * spaces per tab + * + * When you are changing this value, don't forget to adapt the »it« value in + * the st.info and appropriately install the st.info in the environment where + * you use this st version. + * + * it#$tabspaces, + * + * Secondly make sure your kernel is not expanding tabs. When running `stty + * -a` »tab0« should appear. You can tell the terminal to not expand tabs by + * running following command: + * + * stty tabs + */ +unsigned int tabspaces = 8; + +/* bg opacity */ +float alpha = 0.8; + +/* Terminal colors (16 first used in escape sequence) */ +static const char *colorname[] = { + /* 8 normal colors */ + "#000000", + "#ff0000", + "#33ff00", + "#ffd000", + "#0066ff", + "#cc00ff", + "#00ffff", + "#d0d0d0", + + /* 8 bright colors */ + "#808080", + "#ff9900", + "#404040", + "#606060", + "#c0c0c0", + "#e0e0e0", + "#3300ff", + "#ffffff", + + [255] = 0, + + /* more colors can be added after 255 to use with DefaultXX */ + "#cccccc", + "#555555", + "gray90", /* default foreground colour */ + "black", /* default background colour */ +}; + + +/* + * Default colors (colorname index) + * foreground, background, cursor, reverse cursor + */ +unsigned int defaultfg = 258; +unsigned int defaultbg = 259; +unsigned int defaultcs = 256; +static unsigned int defaultrcs = 257; + +/* + * Default shape of cursor + * 2: Block ("█") + * 4: Underline ("_") + * 6: Bar ("|") + * 7: Snowman ("☃") + */ +static unsigned int cursorshape = 2; + +/* + * Default columns and rows numbers + */ + +static unsigned int cols = 80; +static unsigned int rows = 24; + +/* + * Default colour and shape of the mouse cursor + */ +static unsigned int mouseshape = XC_xterm; +static unsigned int mousefg = 7; +static unsigned int mousebg = 0; + +/* + * Color used to display font attributes when fontconfig selected a font which + * doesn't match the ones requested. + */ +static unsigned int defaultattr = 11; + +/* + * Force mouse select/shortcuts while mask is active (when MODE_MOUSE is set). + * Note that if you want to use ShiftMask with selmasks, set this to an other + * modifier, set to 0 to not use it. + */ +static uint forcemousemod = ShiftMask; + +/* + * Internal mouse shortcuts. + * Beware that overloading Button1 will disable the selection. + */ +const unsigned int mousescrollincrement = 4; +static MouseShortcut mshortcuts[] = { + /* mask button function argument release */ + { XK_ANY_MOD, Button4, kscrollup, {.i = mousescrollincrement}, 0, /* !alt */ -1 }, + { XK_ANY_MOD, Button5, kscrolldown, {.i = mousescrollincrement}, 0, /* !alt */ -1 }, + { XK_ANY_MOD, Button2, selpaste, {.i = 0}, 1 }, + { ShiftMask, Button4, ttysend, {.s = "\033[5;2~"} }, + { XK_ANY_MOD, Button4, ttysend, {.s = "\031"} }, + { ShiftMask, Button5, ttysend, {.s = "\033[6;2~"} }, + { XK_ANY_MOD, Button5, ttysend, {.s = "\005"} }, +}; + +/* Internal keyboard shortcuts. */ +#define MODKEY Mod1Mask +#define TERMMOD (ControlMask|ShiftMask) + +static Shortcut shortcuts[] = { + /* mask keysym function argument */ + { XK_ANY_MOD, XK_Break, sendbreak, {.i = 0} }, + { ControlMask, XK_Print, toggleprinter, {.i = 0} }, + { ShiftMask, XK_Print, printscreen, {.i = 0} }, + { XK_ANY_MOD, XK_Print, printsel, {.i = 0} }, + { TERMMOD, XK_Prior, zoom, {.f = +1} }, + { TERMMOD, XK_Next, zoom, {.f = -1} }, + { TERMMOD, XK_Home, zoomreset, {.f = 0} }, + { TERMMOD, XK_C, clipcopy, {.i = 0} }, + { TERMMOD, XK_V, clippaste, {.i = 0} }, + { TERMMOD, XK_Y, selpaste, {.i = 0} }, + { ShiftMask, XK_Insert, selpaste, {.i = 0} }, + { TERMMOD, XK_Num_Lock, numlock, {.i = 0} }, + { ShiftMask, XK_Page_Up, kscrollup, {.i = -1} }, + { ShiftMask, XK_Page_Down, kscrolldown, {.i = -1} }, +}; + +/* + * Special keys (change & recompile st.info accordingly) + * + * Mask value: + * * Use XK_ANY_MOD to match the key no matter modifiers state + * * Use XK_NO_MOD to match the key alone (no modifiers) + * appkey value: + * * 0: no value + * * > 0: keypad application mode enabled + * * = 2: term.numlock = 1 + * * < 0: keypad application mode disabled + * appcursor value: + * * 0: no value + * * > 0: cursor application mode enabled + * * < 0: cursor application mode disabled + * + * Be careful with the order of the definitions because st searches in + * this table sequentially, so any XK_ANY_MOD must be in the last + * position for a key. + */ + +/* + * If you want keys other than the X11 function keys (0xFD00 - 0xFFFF) + * to be mapped below, add them to this array. + */ +static KeySym mappedkeys[] = { -1 }; + +/* + * State bits to ignore when matching key or button events. By default, + * numlock (Mod2Mask) and keyboard layout (XK_SWITCH_MOD) are ignored. + */ +static uint ignoremod = Mod2Mask|XK_SWITCH_MOD; + +/* + * This is the huge key array which defines all compatibility to the Linux + * world. Please decide about changes wisely. + */ +static Key key[] = { + /* keysym mask string appkey appcursor */ + { XK_KP_Home, ShiftMask, "\033[2J", 0, -1}, + { XK_KP_Home, ShiftMask, "\033[1;2H", 0, +1}, + { XK_KP_Home, XK_ANY_MOD, "\033[H", 0, -1}, + { XK_KP_Home, XK_ANY_MOD, "\033[1~", 0, +1}, + { XK_KP_Up, XK_ANY_MOD, "\033Ox", +1, 0}, + { XK_KP_Up, XK_ANY_MOD, "\033[A", 0, -1}, + { XK_KP_Up, XK_ANY_MOD, "\033OA", 0, +1}, + { XK_KP_Down, XK_ANY_MOD, "\033Or", +1, 0}, + { XK_KP_Down, XK_ANY_MOD, "\033[B", 0, -1}, + { XK_KP_Down, XK_ANY_MOD, "\033OB", 0, +1}, + { XK_KP_Left, XK_ANY_MOD, "\033Ot", +1, 0}, + { XK_KP_Left, XK_ANY_MOD, "\033[D", 0, -1}, + { XK_KP_Left, XK_ANY_MOD, "\033OD", 0, +1}, + { XK_KP_Right, XK_ANY_MOD, "\033Ov", +1, 0}, + { XK_KP_Right, XK_ANY_MOD, "\033[C", 0, -1}, + { XK_KP_Right, XK_ANY_MOD, "\033OC", 0, +1}, + { XK_KP_Prior, ShiftMask, "\033[5;2~", 0, 0}, + { XK_KP_Prior, XK_ANY_MOD, "\033[5~", 0, 0}, + { XK_KP_Begin, XK_ANY_MOD, "\033[E", 0, 0}, + { XK_KP_End, ControlMask, "\033[J", -1, 0}, + { XK_KP_End, ControlMask, "\033[1;5F", +1, 0}, + { XK_KP_End, ShiftMask, "\033[K", -1, 0}, + { XK_KP_End, ShiftMask, "\033[1;2F", +1, 0}, + { XK_KP_End, XK_ANY_MOD, "\033[4~", 0, 0}, + { XK_KP_Next, ShiftMask, "\033[6;2~", 0, 0}, + { XK_KP_Next, XK_ANY_MOD, "\033[6~", 0, 0}, + { XK_KP_Insert, ShiftMask, "\033[2;2~", +1, 0}, + { XK_KP_Insert, ShiftMask, "\033[4l", -1, 0}, + { XK_KP_Insert, ControlMask, "\033[L", -1, 0}, + { XK_KP_Insert, ControlMask, "\033[2;5~", +1, 0}, + { XK_KP_Insert, XK_ANY_MOD, "\033[4h", -1, 0}, + { XK_KP_Insert, XK_ANY_MOD, "\033[2~", +1, 0}, + { XK_KP_Delete, ControlMask, "\033[M", -1, 0}, + { XK_KP_Delete, ControlMask, "\033[3;5~", +1, 0}, + { XK_KP_Delete, ShiftMask, "\033[2K", -1, 0}, + { XK_KP_Delete, ShiftMask, "\033[3;2~", +1, 0}, + { XK_KP_Delete, XK_ANY_MOD, "\033[3~", -1, 0}, + { XK_KP_Delete, XK_ANY_MOD, "\033[3~", +1, 0}, + { XK_KP_Multiply, XK_ANY_MOD, "\033Oj", +2, 0}, + { XK_KP_Add, XK_ANY_MOD, "\033Ok", +2, 0}, + { XK_KP_Enter, XK_ANY_MOD, "\033OM", +2, 0}, + { XK_KP_Enter, XK_ANY_MOD, "\r", -1, 0}, + { XK_KP_Subtract, XK_ANY_MOD, "\033Om", +2, 0}, + { XK_KP_Decimal, XK_ANY_MOD, "\033On", +2, 0}, + { XK_KP_Divide, XK_ANY_MOD, "\033Oo", +2, 0}, + { XK_KP_0, XK_ANY_MOD, "\033Op", +2, 0}, + { XK_KP_1, XK_ANY_MOD, "\033Oq", +2, 0}, + { XK_KP_2, XK_ANY_MOD, "\033Or", +2, 0}, + { XK_KP_3, XK_ANY_MOD, "\033Os", +2, 0}, + { XK_KP_4, XK_ANY_MOD, "\033Ot", +2, 0}, + { XK_KP_5, XK_ANY_MOD, "\033Ou", +2, 0}, + { XK_KP_6, XK_ANY_MOD, "\033Ov", +2, 0}, + { XK_KP_7, XK_ANY_MOD, "\033Ow", +2, 0}, + { XK_KP_8, XK_ANY_MOD, "\033Ox", +2, 0}, + { XK_KP_9, XK_ANY_MOD, "\033Oy", +2, 0}, + { XK_Up, ShiftMask, "\033[1;2A", 0, 0}, + { XK_Up, Mod1Mask, "\033[1;3A", 0, 0}, + { XK_Up, ShiftMask|Mod1Mask,"\033[1;4A", 0, 0}, + { XK_Up, ControlMask, "\033[1;5A", 0, 0}, + { XK_Up, ShiftMask|ControlMask,"\033[1;6A", 0, 0}, + { XK_Up, ControlMask|Mod1Mask,"\033[1;7A", 0, 0}, + { XK_Up,ShiftMask|ControlMask|Mod1Mask,"\033[1;8A", 0, 0}, + { XK_Up, XK_ANY_MOD, "\033[A", 0, -1}, + { XK_Up, XK_ANY_MOD, "\033OA", 0, +1}, + { XK_Down, ShiftMask, "\033[1;2B", 0, 0}, + { XK_Down, Mod1Mask, "\033[1;3B", 0, 0}, + { XK_Down, ShiftMask|Mod1Mask,"\033[1;4B", 0, 0}, + { XK_Down, ControlMask, "\033[1;5B", 0, 0}, + { XK_Down, ShiftMask|ControlMask,"\033[1;6B", 0, 0}, + { XK_Down, ControlMask|Mod1Mask,"\033[1;7B", 0, 0}, + { XK_Down,ShiftMask|ControlMask|Mod1Mask,"\033[1;8B",0, 0}, + { XK_Down, XK_ANY_MOD, "\033[B", 0, -1}, + { XK_Down, XK_ANY_MOD, "\033OB", 0, +1}, + { XK_Left, ShiftMask, "\033[1;2D", 0, 0}, + { XK_Left, Mod1Mask, "\033[1;3D", 0, 0}, + { XK_Left, ShiftMask|Mod1Mask,"\033[1;4D", 0, 0}, + { XK_Left, ControlMask, "\033[1;5D", 0, 0}, + { XK_Left, ShiftMask|ControlMask,"\033[1;6D", 0, 0}, + { XK_Left, ControlMask|Mod1Mask,"\033[1;7D", 0, 0}, + { XK_Left,ShiftMask|ControlMask|Mod1Mask,"\033[1;8D",0, 0}, + { XK_Left, XK_ANY_MOD, "\033[D", 0, -1}, + { XK_Left, XK_ANY_MOD, "\033OD", 0, +1}, + { XK_Right, ShiftMask, "\033[1;2C", 0, 0}, + { XK_Right, Mod1Mask, "\033[1;3C", 0, 0}, + { XK_Right, ShiftMask|Mod1Mask,"\033[1;4C", 0, 0}, + { XK_Right, ControlMask, "\033[1;5C", 0, 0}, + { XK_Right, ShiftMask|ControlMask,"\033[1;6C", 0, 0}, + { XK_Right, ControlMask|Mod1Mask,"\033[1;7C", 0, 0}, + { XK_Right,ShiftMask|ControlMask|Mod1Mask,"\033[1;8C",0, 0}, + { XK_Right, XK_ANY_MOD, "\033[C", 0, -1}, + { XK_Right, XK_ANY_MOD, "\033OC", 0, +1}, + { XK_ISO_Left_Tab, ShiftMask, "\033[Z", 0, 0}, + { XK_Return, Mod1Mask, "\033\r", 0, 0}, + { XK_Return, XK_ANY_MOD, "\r", 0, 0}, + { XK_Insert, ShiftMask, "\033[4l", -1, 0}, + { XK_Insert, ShiftMask, "\033[2;2~", +1, 0}, + { XK_Insert, ControlMask, "\033[L", -1, 0}, + { XK_Insert, ControlMask, "\033[2;5~", +1, 0}, + { XK_Insert, XK_ANY_MOD, "\033[4h", -1, 0}, + { XK_Insert, XK_ANY_MOD, "\033[2~", +1, 0}, + { XK_Delete, ControlMask, "\033[M", -1, 0}, + { XK_Delete, ControlMask, "\033[3;5~", +1, 0}, + { XK_Delete, ShiftMask, "\033[2K", -1, 0}, + { XK_Delete, ShiftMask, "\033[3;2~", +1, 0}, + { XK_Delete, XK_ANY_MOD, "\033[3~", -1, 0}, + { XK_Delete, XK_ANY_MOD, "\033[3~", +1, 0}, + { XK_BackSpace, XK_NO_MOD, "\177", 0, 0}, + { XK_BackSpace, Mod1Mask, "\033\177", 0, 0}, + { XK_Home, ShiftMask, "\033[2J", 0, -1}, + { XK_Home, ShiftMask, "\033[1;2H", 0, +1}, + { XK_Home, XK_ANY_MOD, "\033[H", 0, -1}, + { XK_Home, XK_ANY_MOD, "\033[1~", 0, +1}, + { XK_End, ControlMask, "\033[J", -1, 0}, + { XK_End, ControlMask, "\033[1;5F", +1, 0}, + { XK_End, ShiftMask, "\033[K", -1, 0}, + { XK_End, ShiftMask, "\033[1;2F", +1, 0}, + { XK_End, XK_ANY_MOD, "\033[4~", 0, 0}, + { XK_Prior, ControlMask, "\033[5;5~", 0, 0}, + { XK_Prior, ShiftMask, "\033[5;2~", 0, 0}, + { XK_Prior, XK_ANY_MOD, "\033[5~", 0, 0}, + { XK_Next, ControlMask, "\033[6;5~", 0, 0}, + { XK_Next, ShiftMask, "\033[6;2~", 0, 0}, + { XK_Next, XK_ANY_MOD, "\033[6~", 0, 0}, + { XK_F1, XK_NO_MOD, "\033OP" , 0, 0}, + { XK_F1, /* F13 */ ShiftMask, "\033[1;2P", 0, 0}, + { XK_F1, /* F25 */ ControlMask, "\033[1;5P", 0, 0}, + { XK_F1, /* F37 */ Mod4Mask, "\033[1;6P", 0, 0}, + { XK_F1, /* F49 */ Mod1Mask, "\033[1;3P", 0, 0}, + { XK_F1, /* F61 */ Mod3Mask, "\033[1;4P", 0, 0}, + { XK_F2, XK_NO_MOD, "\033OQ" , 0, 0}, + { XK_F2, /* F14 */ ShiftMask, "\033[1;2Q", 0, 0}, + { XK_F2, /* F26 */ ControlMask, "\033[1;5Q", 0, 0}, + { XK_F2, /* F38 */ Mod4Mask, "\033[1;6Q", 0, 0}, + { XK_F2, /* F50 */ Mod1Mask, "\033[1;3Q", 0, 0}, + { XK_F2, /* F62 */ Mod3Mask, "\033[1;4Q", 0, 0}, + { XK_F3, XK_NO_MOD, "\033OR" , 0, 0}, + { XK_F3, /* F15 */ ShiftMask, "\033[1;2R", 0, 0}, + { XK_F3, /* F27 */ ControlMask, "\033[1;5R", 0, 0}, + { XK_F3, /* F39 */ Mod4Mask, "\033[1;6R", 0, 0}, + { XK_F3, /* F51 */ Mod1Mask, "\033[1;3R", 0, 0}, + { XK_F3, /* F63 */ Mod3Mask, "\033[1;4R", 0, 0}, + { XK_F4, XK_NO_MOD, "\033OS" , 0, 0}, + { XK_F4, /* F16 */ ShiftMask, "\033[1;2S", 0, 0}, + { XK_F4, /* F28 */ ControlMask, "\033[1;5S", 0, 0}, + { XK_F4, /* F40 */ Mod4Mask, "\033[1;6S", 0, 0}, + { XK_F4, /* F52 */ Mod1Mask, "\033[1;3S", 0, 0}, + { XK_F5, XK_NO_MOD, "\033[15~", 0, 0}, + { XK_F5, /* F17 */ ShiftMask, "\033[15;2~", 0, 0}, + { XK_F5, /* F29 */ ControlMask, "\033[15;5~", 0, 0}, + { XK_F5, /* F41 */ Mod4Mask, "\033[15;6~", 0, 0}, + { XK_F5, /* F53 */ Mod1Mask, "\033[15;3~", 0, 0}, + { XK_F6, XK_NO_MOD, "\033[17~", 0, 0}, + { XK_F6, /* F18 */ ShiftMask, "\033[17;2~", 0, 0}, + { XK_F6, /* F30 */ ControlMask, "\033[17;5~", 0, 0}, + { XK_F6, /* F42 */ Mod4Mask, "\033[17;6~", 0, 0}, + { XK_F6, /* F54 */ Mod1Mask, "\033[17;3~", 0, 0}, + { XK_F7, XK_NO_MOD, "\033[18~", 0, 0}, + { XK_F7, /* F19 */ ShiftMask, "\033[18;2~", 0, 0}, + { XK_F7, /* F31 */ ControlMask, "\033[18;5~", 0, 0}, + { XK_F7, /* F43 */ Mod4Mask, "\033[18;6~", 0, 0}, + { XK_F7, /* F55 */ Mod1Mask, "\033[18;3~", 0, 0}, + { XK_F8, XK_NO_MOD, "\033[19~", 0, 0}, + { XK_F8, /* F20 */ ShiftMask, "\033[19;2~", 0, 0}, + { XK_F8, /* F32 */ ControlMask, "\033[19;5~", 0, 0}, + { XK_F8, /* F44 */ Mod4Mask, "\033[19;6~", 0, 0}, + { XK_F8, /* F56 */ Mod1Mask, "\033[19;3~", 0, 0}, + { XK_F9, XK_NO_MOD, "\033[20~", 0, 0}, + { XK_F9, /* F21 */ ShiftMask, "\033[20;2~", 0, 0}, + { XK_F9, /* F33 */ ControlMask, "\033[20;5~", 0, 0}, + { XK_F9, /* F45 */ Mod4Mask, "\033[20;6~", 0, 0}, + { XK_F9, /* F57 */ Mod1Mask, "\033[20;3~", 0, 0}, + { XK_F10, XK_NO_MOD, "\033[21~", 0, 0}, + { XK_F10, /* F22 */ ShiftMask, "\033[21;2~", 0, 0}, + { XK_F10, /* F34 */ ControlMask, "\033[21;5~", 0, 0}, + { XK_F10, /* F46 */ Mod4Mask, "\033[21;6~", 0, 0}, + { XK_F10, /* F58 */ Mod1Mask, "\033[21;3~", 0, 0}, + { XK_F11, XK_NO_MOD, "\033[23~", 0, 0}, + { XK_F11, /* F23 */ ShiftMask, "\033[23;2~", 0, 0}, + { XK_F11, /* F35 */ ControlMask, "\033[23;5~", 0, 0}, + { XK_F11, /* F47 */ Mod4Mask, "\033[23;6~", 0, 0}, + { XK_F11, /* F59 */ Mod1Mask, "\033[23;3~", 0, 0}, + { XK_F12, XK_NO_MOD, "\033[24~", 0, 0}, + { XK_F12, /* F24 */ ShiftMask, "\033[24;2~", 0, 0}, + { XK_F12, /* F36 */ ControlMask, "\033[24;5~", 0, 0}, + { XK_F12, /* F48 */ Mod4Mask, "\033[24;6~", 0, 0}, + { XK_F12, /* F60 */ Mod1Mask, "\033[24;3~", 0, 0}, + { XK_F13, XK_NO_MOD, "\033[1;2P", 0, 0}, + { XK_F14, XK_NO_MOD, "\033[1;2Q", 0, 0}, + { XK_F15, XK_NO_MOD, "\033[1;2R", 0, 0}, + { XK_F16, XK_NO_MOD, "\033[1;2S", 0, 0}, + { XK_F17, XK_NO_MOD, "\033[15;2~", 0, 0}, + { XK_F18, XK_NO_MOD, "\033[17;2~", 0, 0}, + { XK_F19, XK_NO_MOD, "\033[18;2~", 0, 0}, + { XK_F20, XK_NO_MOD, "\033[19;2~", 0, 0}, + { XK_F21, XK_NO_MOD, "\033[20;2~", 0, 0}, + { XK_F22, XK_NO_MOD, "\033[21;2~", 0, 0}, + { XK_F23, XK_NO_MOD, "\033[23;2~", 0, 0}, + { XK_F24, XK_NO_MOD, "\033[24;2~", 0, 0}, + { XK_F25, XK_NO_MOD, "\033[1;5P", 0, 0}, + { XK_F26, XK_NO_MOD, "\033[1;5Q", 0, 0}, + { XK_F27, XK_NO_MOD, "\033[1;5R", 0, 0}, + { XK_F28, XK_NO_MOD, "\033[1;5S", 0, 0}, + { XK_F29, XK_NO_MOD, "\033[15;5~", 0, 0}, + { XK_F30, XK_NO_MOD, "\033[17;5~", 0, 0}, + { XK_F31, XK_NO_MOD, "\033[18;5~", 0, 0}, + { XK_F32, XK_NO_MOD, "\033[19;5~", 0, 0}, + { XK_F33, XK_NO_MOD, "\033[20;5~", 0, 0}, + { XK_F34, XK_NO_MOD, "\033[21;5~", 0, 0}, + { XK_F35, XK_NO_MOD, "\033[23;5~", 0, 0}, +}; + +/* + * Selection types' masks. + * Use the same masks as usual. + * Button1Mask is always unset, to make masks match between ButtonPress. + * ButtonRelease and MotionNotify. + * If no match is found, regular selection is used. + */ +static uint selmasks[] = { + [SEL_RECTANGULAR] = Mod1Mask, +}; + +/* + * Printable characters in ASCII, used to estimate the advance width + * of single wide characters. + */ +static char ascii_printable[] = + " !\"#$%&'()*+,-./0123456789:;<=>?" + "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_" + "`abcdefghijklmnopqrstuvwxyz{|}~"; diff --git a/setup/linux/packages/custom/st/st-colors.diff b/setup/linux/packages/custom/st/st-colors.diff new file mode 100644 index 00000000..87e7f5df --- /dev/null +++ b/setup/linux/packages/custom/st/st-colors.diff @@ -0,0 +1,43 @@ +--- a/config.def.h 2021-12-20 21:35:22.214525009 -0700 ++++ b/config.def.h 2021-12-20 21:38:26.933659040 -0700 +@@ -99,24 +99,24 @@ + /* Terminal colors (16 first used in escape sequence) */ + static const char *colorname[] = { + /* 8 normal colors */ +- "black", +- "red3", +- "green3", +- "yellow3", +- "blue2", +- "magenta3", +- "cyan3", +- "gray90", ++ "#000000", ++ "#ff0000", ++ "#33ff00", ++ "#ffd000", ++ "#0066ff", ++ "#cc00ff", ++ "#00ffff", ++ "#d0d0d0", + + /* 8 bright colors */ +- "gray50", +- "red", +- "green", +- "yellow", +- "#5c5cff", +- "magenta", +- "cyan", +- "white", ++ "#808080", ++ "#ff9900", ++ "#404040", ++ "#606060", ++ "#c0c0c0", ++ "#e0e0e0", ++ "#3300ff", ++ "#ffffff", + + [255] = 0, + diff --git a/setup/linux/packages/custom/st/st-desktopentry-0.8.4-edit.diff b/setup/linux/packages/custom/st/st-desktopentry-0.8.4-edit.diff new file mode 100644 index 00000000..da3648c0 --- /dev/null +++ b/setup/linux/packages/custom/st/st-desktopentry-0.8.4-edit.diff @@ -0,0 +1,48 @@ +From b9ce8f6df1d2318d2aa8ec9668ec227cfe327e5c Mon Sep 17 00:00:00 2001 +From: aleks +Date: Wed, 27 May 2020 01:35:15 +0200 +Subject: [PATCH] Create a desktop-entry for st + +Creates a desktop-entry for st. This enables to find st in a graphical +menu and to display it with a nice icon. + +--- + Makefile | 3 +++ + st.desktop | 8 ++++++++ + 2 files changed, 11 insertions(+) + create mode 100644 st.desktop + +diff --git a/Makefile b/Makefile +index fd1321e..6e79a1c 100644 +--- a/Makefile ++++ b/Makefile +@@ -49,9 +49,12 @@ install: st + chmod 644 $(DESTDIR)$(MANPREFIX)/man1/st.1 + tic -sx st.info + @echo Please see the README file regarding the terminfo entry of st. ++ mkdir -p $(DESTDIR)$(PREFIX)/share/applications ++ cp -f st.desktop $(DESTDIR)$(PREFIX)/share/applications + + uninstall: + rm -f $(DESTDIR)$(PREFIX)/bin/st + rm -f $(DESTDIR)$(MANPREFIX)/man1/st.1 ++ rm -f $(DESTDIR)$(PREFIX)/share/applications/st.desktop + + .PHONY: all options clean dist install uninstall +diff --git a/st.desktop b/st.desktop +new file mode 100644 +index 0000000..e4e0714 +--- /dev/null ++++ b/st.desktop +@@ -0,0 +1,8 @@ ++[Desktop Entry] ++Name=Simple Terminal ++Comment=st is a simple terminal implementation for X ++Exec=st ++Icon=utilities-terminal ++Terminal=false ++Type=Application ++Categories=System;TerminalEmulator; +-- +2.31.0 + diff --git a/setup/linux/packages/custom/st/st-scrollback-mouse-increment-0.8.2-fixed.diff b/setup/linux/packages/custom/st/st-scrollback-mouse-increment-0.8.2-fixed.diff new file mode 100644 index 00000000..1f194f94 --- /dev/null +++ b/setup/linux/packages/custom/st/st-scrollback-mouse-increment-0.8.2-fixed.diff @@ -0,0 +1,16 @@ +--- a/config.def.h 2022-02-15 16:05:21.479517138 -0700 ++++ b/config.def.h 2022-02-15 16:05:25.996105847 -0700 +@@ -177,10 +177,11 @@ + * Internal mouse shortcuts. + * Beware that overloading Button1 will disable the selection. + */ ++const unsigned int mousescrollincrement = 4; + static MouseShortcut mshortcuts[] = { + /* mask button function argument release */ +- { XK_ANY_MOD, Button4, kscrollup, {.i = 1}, 0, /* !alt */ -1 }, +- { XK_ANY_MOD, Button5, kscrolldown, {.i = 1}, 0, /* !alt */ -1 }, ++ { XK_ANY_MOD, Button4, kscrollup, {.i = mousescrollincrement}, 0, /* !alt */ -1 }, ++ { XK_ANY_MOD, Button5, kscrolldown, {.i = mousescrollincrement}, 0, /* !alt */ -1 }, + { XK_ANY_MOD, Button2, selpaste, {.i = 0}, 1 }, + { ShiftMask, Button4, ttysend, {.s = "\033[5;2~"} }, + { XK_ANY_MOD, Button4, ttysend, {.s = "\031"} }, diff --git a/setup/linux/packages/custom/st/terminfo.patch b/setup/linux/packages/custom/st/terminfo.patch new file mode 100644 index 00000000..71dc2704 --- /dev/null +++ b/setup/linux/packages/custom/st/terminfo.patch @@ -0,0 +1,10 @@ +--- Makefile.old 2019-02-09 12:50:41.000000000 +0100 ++++ Makefile 2019-11-07 00:00:24.487953923 +0100 +@@ -47,7 +47,6 @@ + mkdir -p $(DESTDIR)$(MANPREFIX)/man1 + sed "s/VERSION/$(VERSION)/g" < st.1 > $(DESTDIR)$(MANPREFIX)/man1/st.1 + chmod 644 $(DESTDIR)$(MANPREFIX)/man1/st.1 +- tic -sx st.info + @echo Please see the README file regarding the terminfo entry of st. + + uninstall: diff --git a/setup/linux/packages/dependencies b/setup/linux/packages/dependencies index 6919c857..7976f912 100644 --- a/setup/linux/packages/dependencies +++ b/setup/linux/packages/dependencies @@ -18,6 +18,7 @@ libewf librsvg libsm libxcursor +libxft libxinerama libxml2 libxrandr diff --git a/setup/linux/packages/gui b/setup/linux/packages/gui index cebee0b2..75173d36 100644 --- a/setup/linux/packages/gui +++ b/setup/linux/packages/gui @@ -1,4 +1,3 @@ -alacritty arandr arc-gtk-theme cbatticon @@ -17,6 +16,7 @@ hardinfo iwgtk leafpad libinput +libxft mesa-demos mkvtoolnix-cli mpv @@ -30,6 +30,7 @@ qemu-guest-agent rofi rxvt-unicode spice-vdagent +st thunar tigervnc tint2 diff --git a/setup/linux/profile_gui/airootfs/etc/skel/.config/openbox/autostart b/setup/linux/profile_gui/airootfs/etc/skel/.config/openbox/autostart index d4693528..9ae314ed 100755 --- a/setup/linux/profile_gui/airootfs/etc/skel/.config/openbox/autostart +++ b/setup/linux/profile_gui/airootfs/etc/skel/.config/openbox/autostart @@ -1,5 +1,5 @@ #openbox-autostart -/usr/bin/alacritty --title "Initializing..." -e "$HOME/.update_x" +/usr/bin/st -t "Initializing..." -e "$HOME/.update_x" "$HOME/.start_desktop_apps" & diff --git a/setup/linux/profile_gui/airootfs/etc/skel/.config/openbox/menu.xml b/setup/linux/profile_gui/airootfs/etc/skel/.config/openbox/menu.xml index a0e96b7b..a4fb8452 100644 --- a/setup/linux/profile_gui/airootfs/etc/skel/.config/openbox/menu.xml +++ b/setup/linux/profile_gui/airootfs/etc/skel/.config/openbox/menu.xml @@ -4,7 +4,7 @@ - alacritty --title "Hardware Diagnostics" -e hw-diags + st -t "Hardware Diagnostics" -e hw-diags hardinfo @@ -18,9 +18,6 @@ gsmartcontrol_polkit - - alacritty --title "Network Diagnostics" -hold -e hw-diags-network - firefox @@ -31,32 +28,32 @@ idle - alacritty -e python + st -e python - alacritty -e python2.7 + st -e python2.7 - alacritty -e tclsh8.6 + st -e tclsh8.6 - alacritty -e hexedit + st -e hexedit - alacritty -e nano + st -e nano - alacritty -e vi + st -e vi - alacritty -e vim + st -e vim - alacritty -e alsamixer + st -e alsamixer mpv @@ -76,34 +73,34 @@ bvnc - alacritty -e elinks + st -e elinks firefox - alacritty -e ftp + st -e ftp - alacritty -e irssi + st -e irssi - alacritty -e lftp + st -e lftp - alacritty -e mail + st -e mail exo-open --launch MailReader - alacritty -e talk + st -e talk - alacritty -e telnet + st -e telnet - alacritty -e tkvnc + st -e tkvnc exo-open --launch WebBrowser @@ -117,30 +114,21 @@ - alacritty -e bc + st -e bc - alacritty -e dc + st -e dc - alacritty -e mc + st -e mc thunar - - urxvt - - - urxvtc - - - urxvt-tabbed - - - uurxvt + + st @@ -167,7 +155,7 @@ /usr/lib/Thunar/ThunarBulkRename - alacritty -e conky + st -e conky gparted @@ -176,19 +164,19 @@ gsmartcontrol_polkit - alacritty -e htop + st -e htop obmenu - alacritty -e pstree + st -e pstree - alacritty -e /usr/bin/pstree.x11 + st -e /usr/bin/pstree.x11 - alacritty -e pstree.x11 + st -e pstree.x11 hardinfo @@ -197,7 +185,7 @@ tint2 - alacritty -e top + st -e top veracrypt @@ -211,19 +199,19 @@ compton --xrender-sync-fence - alacritty -e cmatrix + st -e cmatrix exo-open --launch FileManager - alacritty -e info + st -e info exo-open --launch TerminalEmulator - alacritty -e xev + st -e xev diff --git a/setup/linux/profile_gui/airootfs/etc/skel/.config/openbox/rc.xml b/setup/linux/profile_gui/airootfs/etc/skel/.config/openbox/rc.xml index 8a00545d..7e2d9f61 100644 --- a/setup/linux/profile_gui/airootfs/etc/skel/.config/openbox/rc.xml +++ b/setup/linux/profile_gui/airootfs/etc/skel/.config/openbox/rc.xml @@ -299,7 +299,7 @@ - alacritty --title "Hardware Diagnostics" -e resize-and-run hw-diags + st -t "Hardware Diagnostics" -e resize-and-run hw-diags @@ -314,7 +314,7 @@ - alacritty --title "Mount all Volumes" -e resize-and-run mount-all-volumes gui + st -t "Mount all Volumes" -e resize-and-run mount-all-volumes gui @@ -324,17 +324,17 @@ - alacritty --title "Hardware Diagnostics" -e resize-and-run hw-diags --quick + st -t "Hardware Diagnostics" -e resize-and-run hw-diags --quick - alacritty -e resize-and-run /bin/zsh + st -e resize-and-run /bin/zsh - alacritty --title "Hardware Sensors" -e resize-and-run hw-sensors + st -t "Hardware Sensors" -e resize-and-run hw-sensors @@ -349,7 +349,7 @@ - alacritty --title "Hardware Diagnostics" -e resize-and-run hw-diags + st -t "Hardware Diagnostics" -e resize-and-run hw-diags @@ -364,7 +364,7 @@ - alacritty --title "Mount all Volumes" -e resize-and-run mount-all-volumes gui + st -t "Mount all Volumes" -e resize-and-run mount-all-volumes gui @@ -374,17 +374,17 @@ - alacritty --title "Hardware Diagnostics" -e resize-and-run hw-diags --quick + st -t "Hardware Diagnostics" -e resize-and-run hw-diags --quick - alacritty -e resize-and-run /bin/zsh + st -e resize-and-run /bin/zsh - alacritty --title "Hardware Sensors" -e resize-and-run hw-sensors + st -t "Hardware Sensors" -e resize-and-run hw-sensors