My configuration and customization bits for WM/DEs.
Currently includes stuff for Enlightenment (E17+) on X11.
Feel free to reuse anything of value in this however you want.
Table of Contents
Repository URLs:
- https://github.com/mk-fg/de-setup
- https://codeberg.org/mk-fg/de-setup
- https://fraggod.net/code/git/de-setup
It's not some cool tiling setup, as I prefer (and use) fullscreen windows on separate "virtual desktops" anyway. And where I don't (e.g. floating messenger, terminals, mpv), just bind a key to position things at some fixed location/size and/or set these to be persistent for specific app windows.
Don't use DE menu(s?) - either have a key to start what I need (on a constant virtual desktop), use dmenu to launch more rare stuff or just run it from one of the terminals - yeahconsole on top or generic terminal window that's always open on desktop-1.
Notes on specific components of the setup, usually in their own subtrees.
Don't have any *dm (as in GDM, KDM, etc), simply starting WM with screen locker
(enlightenment -locked
) on boot instead, as there's never more than one
physical user here anyway.
systemd --user
+ systemd-logind session setup without *dm is a bit
unorthodox in general, and in my case started through a custom pam-run
pam-session-wrapper binary, with Xorg, WM and everything DE-related started in
user@1000 daemon's "startx.target" - see stuff under "systemd" for more info.
Created/processed by e-config-backup tool (eet/TextX-based parser), and used to detect any new options between version upgrades, or (rare) migrations between config schemas.
Mostly based on ones from E repositories, and might include assets (icons, sounds, etc) from these, so not original by any means, just tweaked slightly.
Terminology color theme ini files can be installing using ./data/colorschemes/add_color_scheme.sh
script from terminology repo, as described in COLORSCHEMES.md, for example:
% ./data/colorschemes/add_color_scheme.sh \
eet ~/.config/terminology/colorschemes.eet dark-fir.ini
Common "top + stuff" vertical layout with radial displays and (mostly decorative) analog/binary clocks on top.
rc.laptop
is a cut-down version of rc.desktop
for smaller screen.
Requres conky lua extension enabled (at build-time, not the case on Arch for some reason), with cairo support for fancy visual clocks, and uses JSON output of "sensors" binary from lm_sensors.
Current bottom part of the window is a cached events/calendar reminder,
included via ${catp /run/user/1000/cal.conky}
conky-config output
from "riet" tool, which is updating it on its own separate schedule
(riet cal.rst -c /run/user/1000/conky.calendar
in crontab).
"sensors" binary there is being run from lua with separate interval (configured in lua sensors= map), and its outputs cached between runs, so doesn't update on the same interval as while conky UI, to avoid running it every few seconds needlessly.
Lua script formats sensor values as chip__feature__subfeature
(e.g.
k10temp-pci-00c3__Tctl__temp1_input
for "k10temp-pci-00c3":{"Tctl":{"temp1_input":48.000}
nested-JSON data), which conky's ${lua sens_read ...}
can match by any string part
or lua regexp-like string.match pattern - for example
${lua sens_read k10temp-pci-[^_]+__Tctl__temp%d+_input}
to match any available
temperature value on k10temp-pci "Tctl" feature (AMD CPU temperature), regardless
of bus IDs and sensor number (as there's probably just one for Tctl).
Run lua conky/helpers.lua
from the terminal (command line) to check/test
lua-parsed sensors' names and outputs directly, same as in conky config.
Displaying any lm_sensors data in conky blog post has a bit more details,
but outdated by now - used to need separate "sens" binary, obsoleted by
lm_sensors' -j
option.
script=...
option can be used in the main config (e.g. ~/.mpv/config
) to
load lua stuff, like this: script=~/.mpv/fg.status.lua
(one line per script)
Default mpv status line replacement, with all the stuff that default one provides (with a bit nicer format), plus audio/video bitrate and some extra caching info.
Usually can look something like this:
VAS: 00:10:16 / 00:23:40 (43%) -- cached >95% 10s+64M/64M [B/s V:366K A:15K]
Where "VAS" are available streams (video/audio/subtitles), then time/position and buffering% / idle / paused state prefix, cache status (cached/caching, %full, decoded seconds, used/max state in dynamic B/K/M/G units), and then A/V bitrates (same auto-scaled units).
Bitrates are generally useful when streaming stuff over network.
Parameter-tweaker script that abuses --lavfi-complex to produce visualizations (overlaid showcqt + avectorscope filters atm) for audio-only files if window is enabled/available (e.g. via --force-window=immediate) and there's no video stream in it (album art don't count).
I.e. some fancy dynamic swarming/flowing colors instead of just blank black square.
Also includes client events to toggle visualization and other --lavfi-complex filtering (if any) on/off explicitly, regardless of whether it was enabled on start.
Can be used for key bindings, e.g. via something like y script-message fg.lavfi-audio-vis.on
in input.conf, and I'm using that in a player frontend
(emms).
Simple script to remove or manage playback timestamp in currently-playing filename, useful to cleanup or mark/seek whatever transient media files, as you go through them, e.g. one-off downloaded stuff from yt-dlp.
Config used to debounce middle-button clicks on a Razer mouse that I have - apparently common issue with this particular brand. More info in Debounce bogus repeated mouse clicks blog post.
Somewhat-obsolete scripts for whatever startup/init functionality and key bindings.
See fgtk repo for much more of these, incl. a ton of generic DE-independent desktop-related stuff.
Somewhat notable stuff:
-
fgrun - python3 wrapper for dmenu, preserving and deduplicating history, as well as scraping/caching list of binaries for selection there.
-
fgbg - py3/ctypes/sd-bus script to set background in whatever current DE.
Has continuous operation mode to run as desktop session daemon and cycle images, as well as some options to scale/position/process them for DE-background purposes using ImageMagick (via wand-py module).
Image processing is actually quite complicated (mostly copied from earlier aura background-setter project atm), and has plenty of scale/opacity/offset/blur and such options in ImageMagickOpts and ImageMagickTallScale dataclasses.
-
xclipc - obsoleted but useful key-bound script, for adding some processing to some "copy to clipboard" operations, as well as making these more universal wrt diff X selection buffers.
exclip is a more modern, fast and robust replacement for that hack.
-
xinitrc.* - tweaks for various X input/display parameters like keyboard rates and layouts, dpms, mouse/touchpad stuff, xmodmap, etc.
Useful to keep these outside of xorg.conf to be able to change re-apply them at any time without having to restart anything or remember all the commands again.
-
Python3 + eet (EFL lib/tool) + TextX-based parser script for Enlightenment (E17+) config file(s), to backup these under e/ dir here.
Whole purpose of decoding/encoding dance is to sort the sections (which E orders arbitrarily) and detect/filter-out irrelevant changes like remembered window positions or current (transient) wallpaper path.
Don't really need much from these, as browser, mpv, emacs and terminal have their own styles, and I spend almost all in just these few apps.
Used in claws-mail and dialog windows (e.g. rare "Select File" in browser) and context menus.
-
Theme - default GTK dark-mode one,
~/.gtkrc-3.0
:[Settings] gtk-application-prefer-dark-theme = true
-
claws-mail icons - PapirusDevelopmentTeam/papirus-claws-mail-theme (dark-bg version)