Local Desktop Environment setup - X11 WM, conky, mpv, systemd --user and such
Go to file
Mike Kazantsev d7f2be304d
bin.fgbg: fix some bugs in -o/--magick-opts, add better example
2023-09-25 00:57:30 +05:00
bin bin.fgbg: fix some bugs in -o/--magick-opts, add better example 2023-09-25 00:57:30 +05:00
conky conky.rc.desktop: -amdgpu 2023-08-25 19:49:50 +05:00
e xinitrc: use custom ssh-agent.service name due to conflict with an upstream-shipped unit 2023-09-09 23:19:06 +05:00
mpv mpv.file-keys: handle nil return for file path 2023-07-05 01:28:38 +05:00
systemd systemd.user.conky-start: start only if VO_* vars are set 2023-09-12 15:37:19 +05:00
.gitignore +e.themes.terminology 2016-12-20 23:52:05 +05:00
README.rst mpv: fg.file-rm-key -> fg.file-keys, add timestamp rename/seek keys 2023-06-09 16:56:01 +05:00
fonts.conf Override dpi, tidy-up xft settings 2017-05-28 03:05:11 +05:00
xbindkeys.scm xbindkeys: add debouncing for remapped pagedown mouse button 2020-02-22 17:28:12 +05:00
xinitrc xinitrc: move VO_* vars to separate machine-specific .env file 2023-09-12 15:32:58 +05:00
xmodmaprc xmodmaprc: make right Alt same as left one 2016-07-02 21:48:55 +05:00
xresources xresources.xterm: paste from clipboard, fix word-chars 2022-08-10 00:35:07 +05:00
xserverrc xserverrc: more robust version, in case fgconsole fails 2012-08-28 20:57:02 +06:00


My Desktop Environment Setup

My configuration and customization bits for WM/DEs.

Currently includes stuff for Enlightenment (E17+).

Feel free to reuse any of this as you see fit.

Repository URLs:

General Info

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 skype, terminals), 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.

Specific components

Notes on specific components of the setup, usually in their own subtrees.

Systemd system/user-session units

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.

Enlightenment configs (e/e.cfg.*)

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.

Enlightenment Edje Themes (e/themes)

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) and uses tiny "sens" binary for lm_sensors readouts, started from lua with separate interval, with outputs cached between runs.

Use "make" to build it.

Displaying any lm_sensors data in conky blog post has more details on how it all works.


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.

  • e-config-backup

    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.