My dmenu wrapper script and what it will invoke for me

Dmenu needs a wrapperscript in order to do something useful, because all it does byitself is read autocompletion entries from standard input and writeyour selection to standard output. The traditional basic wrapperscript runs a command found in your $PATH, or perhaps does someother single purpose action like passing a URL you entered to abrowser. My wrapper script has always been a little more complicated , and has evolved to primarily do three different things:run commands (using a custom $PATH for dmenu ),pass '


A trick of my dmenu setup: a custom $PATH

Dmenu is hard to describe.It's often called a 'dynamic menu'; at a technical level it's a popup text entry widget with autocompletion (with what it autocompletestaken from standard input) that prints your entered (or autocompleted)text to standard output. I've been using dmenu for quite a while and as part of that I've built an elaborate setuparound it. One of the things my dmenu does is run commands, andpart of my setup is that I invoke


A practical issue with YAML: your schema is not actually documentation

These days, YAML is used as the configuration file format for anincreasing amount of systems that I need to set up and operate for work . I have my issues withYAML in general ( 1 , 2 ),but in the process of writing configuration files for programs thatuse YAML, I've found an entirely practical one, which I will summarizethis way: a YAML schema description is not actually documentationfor a system's configuration file .

It's entirely possible to write good documentation for a configuration


How I do static IPs and names for my NAT'd libvirt-based VMs

One of the things that I use Linux libvirt for is a collection ofvirtual machines that I only NAT onto the network, instead of givingthem their own distinct public IPs. When I first set this up, Ididn't do anything special to give these NAT VMs consistent IPs orany names at all, which made it a bit annoying when I wanted to SSHin to one (most of them are Fedora VMs, so I can actually do that).Eventually I went through the effort to set up


Your options for displaying status over time in Grafana 9

Once upon a time, there was a straightforward good way of displayingthings like alerts over time or health check failures over time inGrafana, as I wrote about in How I'm visualizing health checkhistory in Grafana . Unfortunately Grafanabroke the (once) very nice Discrete panel starting in 8.4,either through an unfixed bug or through an incompatible API change(in a minor release). As of the current Grafana 9.3.1 (as I writethis), I've managed to


Go and the case of the half-missing import

One of the Go programs I keep around is gops , which I find handy for seeing ifI'm using outdated binaries of Go programs that I should rebuild(for example, locally built Prometheus exporters). I have a script that updates and rebuilds all of mycollection of Go programs, gops included, with the latest Gotip build (and the latest version of their code). Recently, rebuilding gops has been failing with an error:

go/pkg/mod/github.com/google/gops


An enforced 'real names only' policy forces people to advertise things

One of the ever popular ideas for a 'better Internet' (or a betterservice of some sort) brought up by potentially well intentionedpeople is that you should have to use your real name instead of anypseudonym. There are many, many problems with this idea and you canfind it thoroughly answered (and debunked) in various places. Butrecently on the Fediverse I had an additional thought about it :

One of the not 100% obvious problems of a genuinely enforced "realnames only" policy


Prometheus Blackbox 0.23.0 has added a nice improvement to its DNS checks

Over on the Fediverse, I said :

Small Prometheus thing I am happy about: the latest version of the Blackbox exporter now has a'probe_dns_query_succeeded' metric, so you can tell thedifference between 'the DNS server isn't talking to me' and 'the DNSserver sent me an answer without the data I was looking for' (or just'an answer that was fail/go away').

Now I get to (probably) change and update some of our


Unix's special way of marking login shells goes back to V2 Unix (at least)

Many Unix shells have some command line argument that tells themthat they are a login shell; for example, Bash has '-l' (also'--login'), and I think that '-l' has become the de facto standard.However, this argument is not how Unix programs like sshd and login actually tell your shell that it's a login shell; instead,for a long time, a login shell has a ' - ' as the first characterof its program name ,


Sometimes an Ubuntu package of a Python module is probably good enough

Recently I ran across a Python program we're interested in , and discoveredthat it required prometheus-client . Normally this wouldmean creating a virtual environment and installing the module intoit, possibly along with the program (although you don't have toput the program inside the venv it uses ).But when I looked out of curiosity, I saw that Ubuntu packages thismodule, which got me to thinking.

I'm generally a sceptic of relying on the Ubuntu packaged versionof a Python module (