MX-DWM/antiX-DWM - a thread for working toward an optimized respin

For issues with MX that has been modified from the initial install. Example: adding packages that then cause issues.
Message
Author
User avatar
andyprough
MX Packager
Posts: 918
Joined: Tue Jul 23, 2019 10:16 pm

MX-DWM/antiX-DWM - a thread for working toward an optimized respin

#1 Post by andyprough »

This is a thread where we can share our ideas about everyone's favorite suckless window manager, DWM. :welcome:

Here's an agenda outline about things I think we could accomplish:

1. Share how-to's and best practices for installing and modifying DWM on MX and antiX
2. Share ideas on favorite add-on packages to make DWM feel more like home
3. Share some alpha level respins of MX-DWM and antiX-DWM, see what's working best
4. Move toward an official non-official spin of MX-DWM and/or antiX-DWM
5. ...
6. Profit!!!! :island: :bythepool:
Primary Computer - Commodore 64: Processor - MOS 6510/8500, 1.023MHz; Memory - 64kb RAM, 20kB ROM - 8k BASIC V2, 8k Kernel, 4k Character ROM; Display output - 320x200, 16 colours; OS - BASIC V2.0; Weight: 1.8kg

User avatar
manyroads
Posts: 2657
Joined: Sat Jun 30, 2018 6:33 pm

Re: MX-DWM/antiX-DWM - a thread for working toward an optimized respin

#2 Post by manyroads »

FWIW. Here is what I written in the past. :needcoffee: I'll attempt to build a more complete and comprehensive tutorial of what I have from the past and more recently. :blindfold:

https://eirenicon.org/?s=dwm
Pax vobiscum,
Mark Rabideau - ManyRoads Genealogy -or- eirenicon llc. (geeky stuff)
i3wm, bspwm, hlwm, dwm, spectrwm ~ Linux #449130
"For every complex problem there is an answer that is clear, simple, and wrong." -- H. L. Mencken

User avatar
andyprough
MX Packager
Posts: 918
Joined: Tue Jul 23, 2019 10:16 pm

Re: MX-DWM/antiX-DWM - a thread for working toward an optimized respin

#3 Post by andyprough »

manyroads wrote: Fri Nov 20, 2020 10:23 am FWIW. Here is what I written in the past. :needcoffee: I'll attempt to build a more complete and comprehensive tutorial of what I have from the past and more recently. :blindfold:

https://eirenicon.org/?s=dwm
Looks like you've done most of the heavy lifting already. :liftweight:

I might take a crack at distilling your several tutorials into a single list of steps for setting up on MX as a kind of a beta-walkthrough (or more like alpha). Something that we could edit as we move along. :duel:
Primary Computer - Commodore 64: Processor - MOS 6510/8500, 1.023MHz; Memory - 64kb RAM, 20kB ROM - 8k BASIC V2, 8k Kernel, 4k Character ROM; Display output - 320x200, 16 colours; OS - BASIC V2.0; Weight: 1.8kg

User avatar
manyroads
Posts: 2657
Joined: Sat Jun 30, 2018 6:33 pm

Re: MX-DWM/antiX-DWM - a thread for working toward an optimized respin

#4 Post by manyroads »

******* MX Linux **********

MX Linux Initial Setup:

sudo apt update && sudo apt upgrade

MXLinux "App" Removals, clean the initial install to suit your needs. I minimally remove the following:
sudo apt remove compton fluxbox* orage* swell-foop vlc* xfburn featherpad hexchat clipit lbreakout2 mahjongg peg-e clementine note* nomacs gnome-ppp asunder* pppoeconf mx-fluxbox*

Next run:
sudo apt autoclean && sudo apt autoremove

Once the setup is clean, I run the following to get my prefered MX New Installs (yours may vary):

Code: Select all

sudo apt install apt-notifier caffeine celluloid conky Conky-manager cron djview djview-plugin djview4 dunst feh ffmpegthumbnailer ffmpegthumbs file-roller filezilla firefox gcc gdebi geany gimp git grub-customizer gucharmap i3lock-fancy keepassxc libharfbuzz-dev libreoffice libx11-dev libxft-dev libxinerama-dev luckybackup lxpolkit lxsession make moc mousepad nemo neofetch nnn pcmanfm powertop python-pip python3-pip python3-venv qpdfview ranger rofi sl stacer sxhkd sxiv xxxxxxx thermald thunar thunar-archive-plugin thunderbird timeshift tlp transmission udiskie variety xarchiver xautolock xcompmgr xdo xdotool xfce4-power-manager xorg yad zathura zenity zim
*** Note***
I move all my suckless tools to ~/.local/bin and place that in my path via bashrc with the following:
# Add local 'pip' to PATH: (In your .bashrc, .zshrc etc)
export PATH="${PATH}:${HOME}/.local/bin/"
export PATH=/usr/local/bin:/usr/local/sbin:$PATH

editing your config.h files, compiling suckless tools are beynd the scope of this post (I'll provide my materials down stream).

I use the following for desktop setup (.Xdefaults, .xsessionrc, .xreasources) and sxhkd for universal wm keybindings. I have a small autostart script for dwm, to be provided down stream.

.xsessionrc is used for standard setup/ autostart functions across all wms.

Code: Select all

#!/bin/sh
#
#Shared window manager functions & applications on Debian
#	
#####################

# set network manager
nm-applet &

# set sound functions
volumeicon &
start-pulseaudio-11 &

# power related functions
xfce4-power-manager &
thermald &
tlp start &
powertop --auto-tune &
xautolock -time 8 -locker i3lock-fancy &

# Light shift
xflux -z 80116 &
#redshift &

# xsettings
xsettingsd &
xset fp+ ~/.local/share/fonts &
xset r rate 350 60
xsetroot -cursor_name left_ptr &
udiskie &

# keyboard settings
setxkbmap -option compose:ralt &
ksuperkey -e 'Super_L=Alt_L|F1' &
ksuperkey -e 'Super_R=Alt_L|F1' &
	
# gnome settings
gnome-keyring-daemon --start --components=pkcs11 &

# Polkit (I prefer lxpolkit for lightness.)
lxpolkit &
#/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 &

# shared common keybindings (applications)
sxhkd -c ~/.config/sxhkd/base.conf &

# applications
# Dunst
dunst -conf  ~/.config/dunst/dunstrc &
# Dropbox
sleep 30 && dropbox start -i &
# Google Drive
#sleep 30 && vgrive &

# touchpad toggle
touchpad-indicator &

# wallpaper changer 
~/.local/shar/scripts/wallpaper.sh &
#  feh --randomize --bg-fill $HOME/.wallpapers/Trees-aerial/* && sleep 5m &

# Caffeine
caffeine &
/usr/bin/caffeine-indicator &

###  Turn on Compositing...
#picom &
#compton &
xcompmgr -CcfF -I-.015 -O-.03 -D6 -t-1 -l-3 -r4.2 -o.5 &

# MXLinux apt-nnotifier
apt-notifier &
.Xdefaults & .Xresources are identical:

Code: Select all

Xft.autohint: 1
Xft.antialias: 1
Xft.hinting: true
Xft.hintstyle: hintslight
Xft.dpi: 96
Xft.rgba: rgb
Xft.lcdfilter: lcddefault

! Copyright (c) 2016-present Arctic Ice Studio <development@arcticicestudio.com>
! Copyright (c) 2016-present Sven Greb <code@svengreb.de>

! Project:    Nord XResources
! Version:    0.1.0
! Repository: https://github.com/arcticicestudio/nord-xresources
! License:    MIT

#define nord0 #2E3440
#define nord1 #3B4252
#define nord2 #434C5E
#define nord3 #4C566A
#define nord4 #D8DEE9
#define nord5 #E5E9F0
#define nord6 #ECEFF4
#define nord7 #8FBCBB
#define nord8 #88C0D0
#define nord9 #81A1C1
#define nord10 #5E81AC
#define nord11 #BF616A
#define nord12 #D08770
#define nord13 #EBCB8B
#define nord14 #A3BE8C
#define nord15 #B48EAD

*.foreground:   nord4
*.background:   nord0
*.cursorColor:  nord4
*fading: 35
*fadeColor: nord3

*.color0: nord1
*.color1: nord11
*.color2: nord14
*.color3: nord13
*.color4: nord9
*.color5: nord15
*.color6: nord8
*.color7: nord5
*.color8: nord3
*.color9: nord11
*.color10: nord14
*.color11: nord13
*.color12: nord9
*.color13: nord15
*.color14: nord7
*.color15: nord6
sxhkd (base.conf) basic keybinding configuration:

Code: Select all

#               
#	 		sxhkdrc ~ common functions              
#            dwm - and most other wms                   
#
#########################
# SUPER + FUNCTION KEYS #
#########################
# if you want to assign applications to specific tags or workspaces
# add a command behind the application to focus on that workspace if required
# index 0 corresponds to tag or HLWM workspace 1
# index 1 corresponds to tag or HLWM workspace 2
# example 
#  firefox & herbstclient use_index 1

# Open Terminal
super + Return
	st -g=93x31+100+300

# VirtualBox
super + v
	virtualbox & herbstclient use_index 0
	
# rofi menu   (alt+left-mouse-click)
alt + @button1
	 rofi -modi drun,window,run -show drun -show-icons -sidebar-mode -location 0  -width 360
	
# Show Keybinding Index
super + F1
	zenity --text-info --width=640 --height=640  --html --filename=/home/mark/.local/share/help-files/app-keybindings.html --ok-label="Quit"

# mount dismount (Bashmount)
super + F2 
	st -g=93x31+100+300 -e ~/.local/bin/bashmount.sh

# system maintenance links
super + F3
	~/.local/share/scripts/system-links.sh
	
# BpyTop
super + F4
	bash -c /home/mark/.local/share/scripts/bpytop.sh

# Linux Links
super + F11 
	zenity --text-info --width=640 --height=640  --html --filename=/home/mark/.local/share/help-files/linux-links.html --ok-label="Quit"

# rofi Active Tasks 
super + F12
	rofi -modi window -show window -show-icons -sidebar-mode

# pamac-manager
alt + p
	/usr/bin/pamac-manager  & herbstclient use_index 0

# gsimplecal
alt + c
	gsimplecal(I have a small autostart script for dwm, to be provided down stream)
	
# mousepad
super + a
	mousepad

# calibre (books)
super + c
	calibre

# Music (DeadBeef)
super + d
	deadbeef
	
# file managers
super + f
	pcmanfm & herbstclient use_index 2

# file manager (ROOT)
super + alt + f
	mx-pkexec pcmanfm 
		
# nnn- file manager
super + n
	st -g=93x31+100+300 -e nnn
	
# ranger- file manager
super + r
	st -g=93x31+100+300 -e ranger

# geany
super + g
	geany  & herbstclient use_index 7

# eMail
super + e
	thunderbird
	
# Office
super + o
	libreOffice

# dmenu
super + p
    dmenu_run

# System Quit Options
super + q
	/home/mark/.local/share/scripts/logout.sh

# skype
super + s
	skype
	
# topgrade
super + t
	st -e /home/mark/.local/bin/topgrade/topgrade.sh
	
# web browser        
super + w
	firefox

#Lock screen
super + x
	dm-tool lock

# zim wiki
super + z
	zim & herbstclient use_index 3

# Reboot
ctrl + alt + Delete
	 reboot


I tend to us MXPI for the following installs:

celluloid
sxhkd
virtualbox
dropbox
calibre
etc....

Misc. Tools:

===> If you want slick-greeter:
sudo apt remove lightdm-gtk-greeter lightdm-gtk-greeter-settings && sudo apt install slick-greeter

Next update /etc/lightdm/lightdm.conf to read:

#greeter-session=lightdm-greeter
greeter-session=slick-greeter

In terminal enter:
echo "[Greeter]" | sudo tee -a /etc/lightdm/slick-greeter.conf
echo "background=/home/mark/.wallpapers/slick-greeter/vidar-nordli-mathisen-1.jpg" | sudo tee -a /etc/lightdm/slick-greeter.conf
sudo chmod o+r /home/mark/.wallpapers/slick-greeter/vidar-nordli-mathisen-1.jpg

===> To install Bpytop:
pip3 install bpytop --upgrade
Pax vobiscum,
Mark Rabideau - ManyRoads Genealogy -or- eirenicon llc. (geeky stuff)
i3wm, bspwm, hlwm, dwm, spectrwm ~ Linux #449130
"For every complex problem there is an answer that is clear, simple, and wrong." -- H. L. Mencken

User avatar
manyroads
Posts: 2657
Joined: Sat Jun 30, 2018 6:33 pm

Re: MX-DWM/antiX-DWM - a thread for working toward an optimized respin

#5 Post by manyroads »

The following will provide my basic dwm modules:
config.h files for:
1. dwm,
2. st (LukeSmithxyz's version modified by me) &
3. slstatus

dwm config.h

Code: Select all

/* See LICENSE file for copyright and license details. */

/* appearance */
static const unsigned int borderpx  = 3;        /* border pixel of windows */
static const unsigned int snap      = 36;       /* snap pixel */
static const unsigned int systraypinning = 0;   /* 0: sloppy systray follows selected monitor, >0: pin systray to monitor X */
static const unsigned int systrayspacing = 2;   /* systray spacing */
static const int systraypinningfailfirst = 0;   /* 1: if pinning fails, display systray on the first monitor, False: display systray on the last monitor*/
static const int showsystray        = 1;     /* 0 means no systray */
static const int showbar            = 1;        /* 0 means no bar */
static const int topbar             = 1;        /* 0 means bottom bar */
static const char *fonts[]          = { "DejaVu Sans Mono:pixelsize=17:antialias=true:autohint=true" };
/*static const char *fonts [] = { "Mono:pixelsize=17:antialias=true:autohint=true" };*/
static const char dmenufont[]       = "JoyPixels:pixelsize=17";
static const char col_gray1[]       = "#222222";
static const char col_gray2[]       = "#444444";
static const char col_gray3[]       = "#bbbbbb";
static const char col_gray4[]       = "#303643";
static const char col_blue[]        = "#8FBCBB";/* static const char col_cyan[]        = "#005577";*/
static const char *colors[][3]      = {
	/*               fg         bg         border   */
	[SchemeNorm] = { col_gray3, col_gray1, col_gray2 },
	[SchemeSel]  = { col_gray4, col_blue,  col_blue  },
};

/* tagging */
static const char *tags[] = {"","","","","","","","","" };

static const Rule rules[] = {
	/* xprop(1):
	 *	WM_CLASS(STRING) = instance, class
	 *	WM_NAME(STRING) = title
	 */
	/* class      				instance    title       tags mask     isfloating   monitor */
	{ "calibre",     			NULL,    	NULL,       1 << 3,       0,           -1 },
	{ "Mousepad",     			NULL,    	NULL,       1 << 3,       1,           -1 },
	{ "Leafpad",     			NULL,    	NULL,       1 << 3,       1,           -1 },
	{ "Sakura",     			NULL,     	NULL,       0,            1,           -1 },
	{ "Yad",	     			NULL,     	NULL,       0,            1,           -1 },
	{ "St",     				NULL,     	NULL,       0,            1,           -1 },
	{ "Filezilla", 				NULL,       NULL,       1,            1,           -1 },
	{ "mx-live-usb-maker",		NULL,       NULL,       1,            1,           -1 },
	{ "Synaptic",				NULL,       NULL,       1,            1,           -1 },
	{ "luckybackup", 			NULL,       NULL,       1,            1,           -1 },
	{ "Grsync", 			NULL,       NULL,       1,            1,           -1 },
	{ "Mintstick.py",	 		NULL,       NULL,       1,            1,           -1 },
	{ "Firefox",  				NULL,       NULL,       2,       	  0,           -1 },
	{ "VirtualBox Manager", 	NULL,   	NULL,       1 << 4,       0,           -1 },
	{ "Gimp",     				NULL,       NULL,   	1 << 4,       0,           -1 },
	{ "Skype",     				NULL,       NULL,   	1 << 5,       1,           -1 },
	{ "Pavucontrol",    		NULL,       NULL,   	0,  		  1,           -1 },
	{ "Geany",     				NULL,       NULL,   	1 << 7,       0,           -1 },
	{ "Thunar",     			NULL,       NULL,   	1 << 2,       0,           -1 },
	{ "Pcmanfm",   				NULL,       NULL,   	1 << 2,       0,           -1 },
	{ "thunderbird",    		NULL,       NULL,   	1 << 8,       0,           -1 },
	{ "Deadbeef",     			NULL,       NULL,   	1 << 6,       1,           -1 },
};

/* layout(s) */
static const float mfact     = 0.55; /* factor of master area size [0.05..0.95] */
static const int nmaster     = 1;    /* number of clients in master area */
static const int resizehints = 1;    /* 1 means respect size hints in tiled resizals */

static const Layout layouts[] = {
	/* symbol     arrange function */
	{ "[]",     	NULL },    /* no layout function means floating behavior */
	{ "[] ",      	tile },    /* first entry is default */
	{ "[]",      	monocle },
};

/* key definitions */
#define MODKEY Mod4Mask
#define TAGKEYS(KEY,TAG) \
	{ MODKEY,                       KEY,      view,           {.ui = 1 << TAG} }, \
	{ MODKEY|ControlMask,           KEY,      toggleview,     {.ui = 1 << TAG} }, \
	{ MODKEY|ShiftMask,             KEY,      tag,            {.ui = 1 << TAG} }, \
	{ MODKEY|ControlMask|ShiftMask, KEY,      toggletag,      {.ui = 1 << TAG} },

/* helper for spawning shell commands in the pre dwm-5.0 fashion */
#define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } }

/* commands */
static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */
static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_blue, "-sf", col_gray4, NULL };
static const char *termcmd[]  = { "termite", NULL };

static Key keys[] = {
	/* modifier                     key        function        argument */
	{ MODKEY,                       XK_p,      spawn,          {.v = dmenucmd } },
	{ MODKEY,			            XK_Return, spawn,          {.v = termcmd } },
	{ MODKEY,                       XK_b,      togglebar,      {0} },
	{ MODKEY,                       XK_j,      focusstack,     {.i = +1 } },
	{ MODKEY,                       XK_k,      focusstack,     {.i = -1 } },
	{ MODKEY,                       XK_i,      incnmaster,     {.i = +1 } },
	{ MODKEY,                       XK_d,      incnmaster,     {.i = -1 } },
	{ MODKEY,                       XK_h,      setmfact,       {.f = -0.05} },
	{ MODKEY,                       XK_l,      setmfact,       {.f = +0.05} },
	{ MODKEY|ShiftMask,             XK_Return, zoom,           {0} },
	{ MODKEY,                       XK_Tab,    view,           {0} },
	{ MODKEY|ShiftMask,			    XK_x,      killclient,     {0} },
	{ MODKEY,                       XK_t,      setlayout,      {.v = &layouts[0]} },
	{ MODKEY,                       XK_f,      setlayout,      {.v = &layouts[1]} },
	{ MODKEY,                       XK_m,      setlayout,      {.v = &layouts[2]} },
	{ MODKEY,                       XK_space,  setlayout,      {0} },
	{ MODKEY|ShiftMask,             XK_space,  togglefloating, {0} },
	{ MODKEY,                       XK_0,      view,           {.ui = ~0 } },
	{ MODKEY|ShiftMask,             XK_0,      tag,            {.ui = ~0 } },
	{ MODKEY,                       XK_comma,  focusmon,       {.i = -1 } },
	{ MODKEY,                       XK_period, focusmon,       {.i = +1 } },
	{ MODKEY|ShiftMask,             XK_comma,  tagmon,         {.i = -1 } },
	{ MODKEY|ShiftMask,             XK_period, tagmon,         {.i = +1 } },
	TAGKEYS(                        XK_1,                      0)
	TAGKEYS(                        XK_2,                      1)
	TAGKEYS(                        XK_3,                      2)
	TAGKEYS(                        XK_4,                      3)
	TAGKEYS(                        XK_5,                      4)
	TAGKEYS(                        XK_6,                      5)
	TAGKEYS(                        XK_7,                      6)
	TAGKEYS(                        XK_8,                      7)
	TAGKEYS(                        XK_9,                      8)
	{ MODKEY|ShiftMask,             XK_q,      quit,           {0} },
};

/* button definitions */
/* click can be ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle, ClkClientWin, or ClkRootWin */
static Button buttons[] = {
	/* click                event mask      button          function        argument */
	{ ClkLtSymbol,          0,              Button1,        setlayout,      {0} },
	{ ClkLtSymbol,          0,              Button3,        setlayout,      {.v = &layouts[2]} },
	{ ClkWinTitle,          0,              Button2,        zoom,           {0} },
	{ ClkStatusText,        0,              Button2,        spawn,          {.v = termcmd } },
	{ ClkClientWin,         MODKEY,         Button1,        movemouse,      {0} },
	{ ClkClientWin,         MODKEY,         Button2,        togglefloating, {0} },
	{ ClkClientWin,         MODKEY,         Button3,        resizemouse,    {0} },
	{ ClkTagBar,            0,              Button1,        view,           {0} },
	{ ClkTagBar,            0,              Button3,        toggleview,     {0} },
	{ ClkTagBar,            MODKEY,         Button1,        tag,            {0} },
	{ ClkTagBar,            MODKEY,         Button3,        toggletag,      {0} },
};

st config.h

Code: Select all

/* See LICENSE file for copyright and license details. */

/*
 * appearance
 *
 * font: see http://freedesktop.org/software/fontconfig/fontconfig-user.html
 */
static char *font = "DejaVu Sans Mono:pixelsize=15:antialias=true:autohint=true";
static char *font2[] = { "JoyPixels:pixelsize=15: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: utmp option
 * 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;
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;

/*
 * 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;

/*
 * interval (in milliseconds) between each successive call to ximspot. This
 * improves terminal performance while not reducing functionality to those
 * whom need XIM support.
 */
int ximspot_update_interval = 1000;

/*
 * thickness of underline and bar cursors
 */
static unsigned int cursorthickness = 2;

/*
 * 1: render most of the lines/blocks characters without using the font for
 *    perfect alignment between cells (U2500 - U259F except dashes/diagonals).
 *    Bold affects lines thickness if boxdraw_bold is not 0. Italic is ignored.
 * 0: disable (render all U25XX glyphs normally from the font).
 */
const int boxdraw = 1;
const int boxdraw_bold = 1;

/* braille (U28XX):  1: render as adjacent "pixels",  0: use font */
const int boxdraw_braille = 1;

/*
 * 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.85;

/* Terminal colors (16 first used in escape sequence) */
static const char *colorname[] = {
	"#282828", /* hard contrast: #1d2021 / soft contrast: #32302f */
	"#cc241d",
	"#98971a",
	"#d79921",
	"#458588",
	"#b16286",
	"#689d6a",
	"#a89984",
	"#928374",
	"#fb4934",
	"#b8bb26",
	"#fabd2f",
	"#83a598",
	"#d3869b",
	"#8ec07c",
	"#ebdbb2",
	[255] = 0,
	/* more colors can be added after 255 to use with DefaultXX */
	"#add8e6", /* 256 -> cursor */
	"#555555", /* 257 -> rev cursor*/
	"#282828", /* 258 -> bg */
	"#ebdbb2", /* 259 -> fg */
};


/*
 * Default colors (colorname index)
 * foreground, background, cursor, reverse cursor
 */
unsigned int defaultfg = 259;
unsigned int defaultbg = 258;
unsigned int defaultcs = 256;
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 = 90;
static unsigned int rows = 28;

/*
 * 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;

/*
 * Xresources preferences to load at startup
 */
ResourcePref resources[] = {
		{ "font",         STRING,  &font },
		{ "fontalt0",     STRING,  &font2[0] },
		{ "color0",       STRING,  &colorname[0] },
		{ "color1",       STRING,  &colorname[1] },
		{ "color2",       STRING,  &colorname[2] },
		{ "color3",       STRING,  &colorname[3] },
		{ "color4",       STRING,  &colorname[4] },
		{ "color5",       STRING,  &colorname[5] },
		{ "color6",       STRING,  &colorname[6] },
		{ "color7",       STRING,  &colorname[7] },
		{ "color8",       STRING,  &colorname[8] },
		{ "color9",       STRING,  &colorname[9] },
		{ "color10",      STRING,  &colorname[10] },
		{ "color11",      STRING,  &colorname[11] },
		{ "color12",      STRING,  &colorname[12] },
		{ "color13",      STRING,  &colorname[13] },
		{ "color14",      STRING,  &colorname[14] },
		{ "color15",      STRING,  &colorname[15] },
		{ "background",   STRING,  &colorname[258] },
		{ "foreground",   STRING,  &colorname[259] },
		{ "cursorColor",  STRING,  &colorname[256] },
		{ "termname",     STRING,  &termname },
		{ "shell",        STRING,  &shell },
		{ "blinktimeout", INTEGER, &blinktimeout },
		{ "bellvolume",   INTEGER, &bellvolume },
		{ "tabspaces",    INTEGER, &tabspaces },
		{ "borderpx",     INTEGER, &borderpx },
		{ "cwscale",      FLOAT,   &cwscale },
		{ "chscale",      FLOAT,   &chscale },
		{ "alpha",        FLOAT,   &alpha },
		{ "ximspot_update_interval", INTEGER, &ximspot_update_interval },
};

/*
 * Internal mouse shortcuts.
 * Beware that overloading Button1 will disable the selection.
 */
static MouseShortcut mshortcuts[] = {
	/* button               mask            string */
	{ Button4,              XK_NO_MOD,      "\031" },
	{ Button5,              XK_NO_MOD,      "\005" },
};

/* Internal keyboard shortcuts. */
#define MODKEY Mod1Mask
#define TERMMOD (ControlMask|ShiftMask)

MouseKey mkeys[] = {
	/* button               mask            function        argument */
	{ Button4,              XK_NO_MOD,      kscrollup,      {.i =  1} },
	{ Button5,              XK_NO_MOD,      kscrolldown,    {.i =  1} },
	{ Button4,              TERMMOD,        zoom,           {.f =  +1} },
	{ Button5,              TERMMOD,        zoom,           {.f =  -1} },
};

static char *openurlcmd[] = { "/bin/sh", "-c", "st-urlhandler", "externalpipe", NULL };

static char *copyurlcmd[] = { "/bin/sh", "-c",
    "tmp=$(sed 's/.*│//g' | tr -d '\n' | grep -aEo '(((http|https|gopher|gemini|ftp|ftps|git)://|www\\.)[a-zA-Z0-9.]*[:]?[a-zA-Z0-9./@$&%?$#=_-~]*)|((magnet:\\?xt=urn:btih:)[a-zA-Z0-9]*)' | uniq | sed 's/^www./http:\\/\\/www\\./g' ); IFS=; [ ! -z $tmp ] && echo $tmp | dmenu -i -p 'Copy which url?' -l 10 | tr -d '\n' | xclip -selection clipboard",
    "externalpipe", NULL };

static char *copyoutput[] = { "/bin/sh", "-c", "st-copyout", "externalpipe", NULL };

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} },
	{ MODKEY,               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} },
	{ MODKEY,               XK_Num_Lock,    numlock,        {.i =  0} },
	{ MODKEY,               XK_Control_L,   iso14755,       {.i =  0} },
	{ ShiftMask,            XK_Page_Up,     kscrollup,      {.i = -1} },
	{ ShiftMask,            XK_Page_Down,   kscrolldown,    {.i = -1} },
	{ MODKEY,               XK_Page_Up,     kscrollup,      {.i = -1} },
	{ MODKEY,               XK_Page_Down,   kscrolldown,    {.i = -1} },
	{ MODKEY,               XK_k,           kscrollup,      {.i =  1} },
	{ MODKEY,               XK_j,           kscrolldown,    {.i =  1} },
	{ MODKEY,               XK_Up,          kscrollup,      {.i =  1} },
	{ MODKEY,               XK_Down,        kscrolldown,    {.i =  1} },
	{ MODKEY,               XK_u,           kscrollup,      {.i = -1} },
	{ MODKEY,               XK_d,           kscrolldown,    {.i = -1} },
	{ MODKEY,		XK_s,		changealpha,	{.f = -0.05} },
	{ MODKEY,		XK_a,		changealpha,	{.f = +0.05} },
	{ TERMMOD,              XK_Up,          zoom,           {.f = +1} },
	{ TERMMOD,              XK_Down,        zoom,           {.f = -1} },
	{ TERMMOD,              XK_K,           zoom,           {.f = +1} },
	{ TERMMOD,              XK_J,           zoom,           {.f = -1} },
	{ TERMMOD,              XK_U,           zoom,           {.f = +2} },
	{ TERMMOD,              XK_D,           zoom,           {.f = -2} },
	{ MODKEY,               XK_l,           externalpipe,   {.v = openurlcmd } },
	{ MODKEY,               XK_y,           externalpipe,   {.v = copyurlcmd } },
	{ MODKEY,               XK_o,           externalpipe,   {.v = copyoutput } },
};

/*
 * 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
 * crlf value
 * * 0: no value
 * * > 0: crlf mode is enabled
 * * < 0: crlf mode is 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;

/*
 * Override mouse-select 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 forceselmod = ShiftMask;

/*
 * 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[P",       -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[P",       -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{|}~";


slstatus config.h

Code: Select all

/* See LICENSE file for copyright and license details. */

/* interval between updates (in ms) */
const unsigned int interval = 1000;

/* text to show if no value can be retrieved */
static const char unknown_str[] = "n/a";

/* maximum output string length */
#define MAXLEN 2048

/*
 * function            description                     argument (example)
 *
 * battery_perc        battery percentage              battery name (BAT0)
 *                                                     NULL on OpenBSD/FreeBSD
 * battery_state       battery charging state          battery name (BAT0)
 *                                                     NULL on OpenBSD/FreeBSD
 * battery_remaining   battery remaining HH:MM         battery name (BAT0)
 *                                                     NULL on OpenBSD/FreeBSD
 * cpu_perc            cpu usage in percent            NULL
 * cpu_freq            cpu frequency in MHz            NULL
 * datetime            date and time                   format string (%F %T)
 * disk_free           free disk space in GB           mountpoint path (/)
 * disk_perc           disk usage in percent           mountpoint path (/)
 * disk_total          total disk space in GB          mountpoint path (/")
 * disk_used           used disk space in GB           mountpoint path (/)
 * entropy             available entropy               NULL
 * gid                 GID of current user             NULL
 * hostname            hostname                        NULL
 * ipv4                IPv4 address                    interface name (eth0)
 * ipv6                IPv6 address                    interface name (eth0)
 * kernel_release      `uname -r`                      NULL
 * keyboard_indicators caps/num lock indicators        format string (c?n?)
 *                                                     see keyboard_indicators.c
 * keymap              layout (variant) of current     NULL
 *                     keymap
 * load_avg            load average                    NULL
 * netspeed_rx         receive network speed           interface name (wlan0)
 * netspeed_tx         transfer network speed          interface name (wlan0)
 * num_files           number of files in a directory  path
 *                                                     (/home/foo/Inbox/cur)
 * ram_free            free memory in GB               NULL
 * ram_perc            memory usage in percent         NULL
 * ram_total           total memory size in GB         NULL
 * ram_used            used memory in GB               NULL
 * run_command         custom shell command            command (echo foo)
 * swap_free           free swap in GB                 NULL
 * swap_perc           swap usage in percent           NULL
 * swap_total          total swap size in GB           NULL
 * swap_used           used swap in GB                 NULL
 * temp                temperature in degree celsius   sensor file
 *                                                     (/sys/class/thermal/...)
 *                                                     NULL on OpenBSD
 *                                                     thermal zone on FreeBSD
 *                                                     (tz0, tz1, etc.)
 * uid                 UID of current user             NULL
 * uptime              system uptime                   NULL
 * username            username of current user        NULL
 * vol_perc            OSS/ALSA volume in percent      mixer file (/dev/mixer)
 * wifi_perc           WiFi signal in percent          interface name (wlan0)
 * wifi_essid          WiFi ESSID                      interface name (wlan0)
 */

static const struct arg args[] = {
        /* function  format          argument */
        { cpu_perc,  " dwm ~  CPU %s%% ~", NULL },
        { datetime,  " %s", "%H:%M  %a. %d %b. %Y" },
};

My dwm autostart located and stored in .local/bin/autostart-scripts

Code: Select all

#! /bin/sh
#
# 		 dwm autostart, etc.
#
# Numerous functions (autostart) are located in .xsessionrc (Debian) .xprofile (arch)
# including power management, polkit, dropbox, f.lux, dunst etc.

# slstatus
slstatus &

# conky 
pkill conky 
conky -c ~/.conky/MFR/.dwmconkyrc &

# software tray indicator
# pamac-tray-appindicator &

#start dwm
exec dwm

Pax vobiscum,
Mark Rabideau - ManyRoads Genealogy -or- eirenicon llc. (geeky stuff)
i3wm, bspwm, hlwm, dwm, spectrwm ~ Linux #449130
"For every complex problem there is an answer that is clear, simple, and wrong." -- H. L. Mencken

User avatar
manyroads
Posts: 2657
Joined: Sat Jun 30, 2018 6:33 pm

Re: MX-DWM/antiX-DWM - a thread for working toward an optimized respin

#6 Post by manyroads »

I probably should share my dwm conky as well:

Code: Select all

conky.config = {
own_window = true,
own_window_type = 'override', 
own_window_transparent = true,
own_window_argb_visual = false,
own_window_hints = 'undecorated,below,skip_taskbar,skip_pager,sticky',
own_window_colour = '000000',
own_window_class= 'Conky',
own_window_title= 'system info',
minimum_width = 280, 
maximum_width = 300,
gap_x = 10,	
gap_y = 0,	
alignment = 'middle_right',
use_xft = true,
font = 'roboto:size=9',
xftalpha = 1,
override_utf8_locale = true,
uppercase = false,
draw_shades = false,
default_shade_color = '000000',
draw_outline = false,
default_outline_color = '000000',
default_color = 'f5f5f5',
draw_borders = true,
stippled_borders = 3,
border_inner_margin = 5,
border_outer_margin = 0,
border_width = 2,
draw_graph_borders = false,
background = true,
background_color= 'FFFF00',
use_spacer = 'none',
text_buffer_size = 6144,
no_buffers = true,
short_units = true,
pad_percents =  2,
imlib_cache_size = 0,
double_buffer = true,
}
conky.text = [[

${color 7393B5}${voffset 4}${font Museo Sans 500:size=12}S Y S T E M ${font FontAwesome:size=20}  ${font Museo Sans 500:size=12}I N F O${font} ${hr}${color f5f5f5} 
${voffset 8}user: $alignr${execi 86400 whoami}
desktop/ host: $alignr${execi 86400 env | grep '^DESKTOP_SESSION' | cut -d'=' -f2-} / ${alignr}${font}$nodename${font}
#host:${alignr}${font}$nodename${font}
kernel: $alignr${kernel}
uptime:$alignr$uptime
ram:$alignr${mem} / ${memmax}
#cpu:$alignr Use: ${cpu cpu0}% ${cpugraph 10,60 00000000 0BFF00 -l} & Temp: ${hwmon 0 temp 1}°C
#loadavg: $alignr${loadgraph 10,60 00000000 0BFF00 -l} ${loadavg}
net: $alignr(${addr wlan0}) [${wireless_link_qual_perc wlan0}%]${font}
root:$alignr${fs_used /}/${fs_size /}
dropbox space: $alignr${fs_used /home/mark/Dropbox} of ${fs_size /home/mark/Dropbox} / ${fs_used_perc /home/mark/Dropbox}%

${color 7393B5}${voffset 4}${font Museo Sans 500:size=12}K E Y ${font FontAwesome:size=20}  ${font Museo Sans 500:size=12}B I N D I N G S${font} ${hr}${color f5f5f5} 
${voffset 8}[Alt] + LMB ${alignr}Rofi Menu
[Super] + b${alignr}toggle dwm bar
[Super] + p${alignr}open dmenu
[Super] + [F1]${alignr}App Keybindings
[Super] + [F2]${alignr}Bashmount
[Super] + [F3]${alignr}System Tools
[Super] + [F4]${alignr}BpyTop
[Super] + [F11]${alignr}Linux Help
[Super] + [F12]${alignr}active applications
[Super] + Enter${alignr}terminal
#[Super] + j${alignr}focus next window
#[Super] + k${alignr}focus previous window
#[Super] + i${alignr}increment master
#[Super] + d${alignr}decrement master
#[Super] + l${alignr}increase master size area
#[Super] + h${alignr}decrease master size area
[Super] + Shift +[1..n]${alignr}tag window
[Super] + Shift + z${alignr}zoom window
[Super] + [1..n]${alignr}view tag
[Super] + Tab${alignr}toggle tags
[Super] + Shift + 0${alignr}tag all windows
[Super] + [Ctrl] + Shift + [1..n]${alignr}toggle tag
[Super] + 0${alignr}view all windows
[Super] + [Ctrl] + [1..n]${alignr}banish tags
[Super] + LMB${alignr}move window
[Super] + MMB${alignr}toggle layout
[Super] + RMB${alignr}resize window
[Super] + Shift + x${alignr}close focused window
[Super] + x${alignr}lock screen
[Super] + q${alignr}Quit-System
[Super] + Shift + q${alignr}Quit dwm

${color 7393B5}${voffset 4}${font Museo Sans 500:size=12}T O P ${font FontAwesome:size=20}  ${font Museo Sans 500:size=12}P R O C E S S E S${font} ${hr}${color f5f5f5}
${voffset 8}${top name 1} $alignr ${top pid 1} ${top cpu 1}% ${top mem 1}%
${top name 2} $alignr ${top pid 2} ${top cpu 2}% ${top mem 2}%
${top name 3} $alignr ${top pid 3} ${top cpu 3}% ${top mem 3}%
${top name 4} $alignr ${top pid 4} ${top cpu 4}% ${top mem 4}%
${top name 5} $alignr ${top pid 5} ${top cpu 5}% ${top mem 5}%

${color 7393B5}${voffset 4}${font Museo Sans 500:size=12}T I M E ${font FontAwesome:size=20}  ${font Museo Sans 500:size=12} D A T E ${font} ${hr}${color f5f5f5}
${alignc}${font Museo Sans 700:size=16}${time %H : %M} 
${font Museo Sans 500:size=16}${alignc}${time %A ~ %d %b. %Y}

]];

Pax vobiscum,
Mark Rabideau - ManyRoads Genealogy -or- eirenicon llc. (geeky stuff)
i3wm, bspwm, hlwm, dwm, spectrwm ~ Linux #449130
"For every complex problem there is an answer that is clear, simple, and wrong." -- H. L. Mencken

User avatar
manyroads
Posts: 2657
Joined: Sat Jun 30, 2018 6:33 pm

Re: MX-DWM/antiX-DWM - a thread for working toward an optimized respin

#7 Post by manyroads »

FWIW: here are acouple of screenshots of my dwm Desktop

Image Image
Pax vobiscum,
Mark Rabideau - ManyRoads Genealogy -or- eirenicon llc. (geeky stuff)
i3wm, bspwm, hlwm, dwm, spectrwm ~ Linux #449130
"For every complex problem there is an answer that is clear, simple, and wrong." -- H. L. Mencken

User avatar
Sparky
Posts: 1205
Joined: Sun Dec 23, 2018 6:07 pm

Re: MX-DWM/antiX-DWM - a thread for working toward an optimized respin

#8 Post by Sparky »

Interesting stuff guys!
MX Linux Asus F552, 12GB RAM, 500GB WD SSD MX19.2
Dell Inspiron 7559 16GB RAM 1X 256GB SSD & 1TB SSD MX KDE 21.1 & Windows 11
Mini Tower PC 2X 256GB SSD MX KDE21.1

User avatar
manyroads
Posts: 2657
Joined: Sat Jun 30, 2018 6:33 pm

Re: MX-DWM/antiX-DWM - a thread for working toward an optimized respin

#9 Post by manyroads »

I'll possibly provide the same sort of info for fvwm3. That wm will use the same infrastructure e.g. .xsessionrc; .Xdefaults; .Xresources ; sxhkd etc. That means the keybindings etc. will be very similar from wm to wm and that the wallpapers, terminals, as well as the apps will be largely common and will all work from the same user and lightdm login screen.
Pax vobiscum,
Mark Rabideau - ManyRoads Genealogy -or- eirenicon llc. (geeky stuff)
i3wm, bspwm, hlwm, dwm, spectrwm ~ Linux #449130
"For every complex problem there is an answer that is clear, simple, and wrong." -- H. L. Mencken

User avatar
andyprough
MX Packager
Posts: 918
Joined: Tue Jul 23, 2019 10:16 pm

Re: MX-DWM/antiX-DWM - a thread for working toward an optimized respin

#10 Post by andyprough »

OK, I'm going to install DWM on antiX runit today and document my steps with a little how-to post that I should hopefully have up by tomorrow.

Then, once it's up and running I'm going to pick through @manyroads many great ideas and I'll document turning it from vanilla DWM into something more practical/useful. So I should be making several posts about these experiences over the holidays.

I do mostly office work for my day job, using several office suites and associated tools, so my focus will be on creating a highly useful home office system. And it will have to be able to do Zoom and similar online meetings as that is an absolute must for any home office worker these days. I'll be going for function over beauty, but I will make sure it's got some basic entertainment capabilities.
Primary Computer - Commodore 64: Processor - MOS 6510/8500, 1.023MHz; Memory - 64kb RAM, 20kB ROM - 8k BASIC V2, 8k Kernel, 4k Character ROM; Display output - 320x200, 16 colours; OS - BASIC V2.0; Weight: 1.8kg

Post Reply

Return to “MX Modified”