Computers

Wallpaper Rotation

This is going to be a bit of a shorter article than I normally write. Basically, I’m showing off a random wallpaper switcher. I’ve tried several tools that purport to do the job. None of which were particularly flexible and seemed to be more trouble than they’re worth. Prior to this, I had actually used tools like hsetroot and feh to either set the background to a pixmap or just a solid color. Neither of these were really a decent solution sets in my mind.

So, I did what a lot of Linux users do. Scratch their own itch. In this case I take feh’s random background image function, marry that to systemd’s timer tools and let it go. Here’s the result:

The Script

#!/bin/fish

set -l WALLPAPERS $HOME/Pictures/Wallpaper
set -l BGOPTIONS  fill
set -l URGENCY    low
set -l EXPIRE     5000
set -l TITLE      "Wallpaper Change"
set -l MESSAGE    "Hey, your wallpaper changed!"
set -l ICONPATH   /usr/share/feh/images/feh.png

feh --randomize --no-fehbg --bg-$BGOPTIONS $WALLPAPERS
notify-send --icon=$ICONPATH --app-name=feh --urgency=$URGENCY --expire-time=$EXPIRE $TITLE $MESSAGE

This script requires feh, though you could swap in any sort of tool that can set the root pixmap. If you choose to change it, you’ll need to come up with your own randomization. I set the –no-fehbg option because I don’t need it generating a script in my $HOME. Once set, I have notify send tell me about it. This is more for debugging purposes so that I know when it kicks off.

The Service

[Unit]
Description=Wallpaper changer

[Service]
Type=simple
ExecStart=/home/ndegruchy/.local/bin/wallpaper

[Install]
WantedBy=timers.target

A pretty much bog-standard systemd service file. I place this into $HOME/.config/systemd/user. Make sure you update the ExecStart with the location of the script above.

The Timer

[Unit]
Description=Changes wallpaper hourly

[Timer]
OnBootSec=10min
OnUnitActiveSec=1h

[Install]
WantedBy=timers.target

Another pretty bog-standard systemd unit file, this one is a timer. Like above, go ahead and drop it in $HOME/.config/systemd/user. Use the same name as the service file, otherwise it wont work. You can change the time interval, too.

Put it All Together

Now that you’ve got all the files in place, you can enable it with:

$ systemctl --user enable wallpaper.timer
$ systemctl --user start wallpaper.timer

This will begin the countdown. If you want to see the status of the timer, you can check on it with:

$ systemctl --user list-timers wallpaper.timer
$ # OR
$ systemctl --user list-timers --all

This will give you some information about the timer in a fairly understandable table. Hope this helps someone!

Tools to Keep Up To Date

The news is something personal to all of us. We develop rituals to keep ourselves informed by various means. This task is difficult for me to accomplish, due to many different factors of my life. One factor, above all else, keeps me from staying up-to-date. I simply don’t remember to check the tools I’ve setup for this task.

Currently

As of this writing, I have two major tools for aggregating and then storing news I’m interested in. Feedbin (open source, $5/mo for their hosting) aggregates different news sites via RSS. Pocket (open-ish source, $5/mo for their hosting) is where I send items I want to spend time reading. Additionally, I have both the Pocket app and Reeder (v3) on my phone to save ancillary articles and to read them on the go. This seems like the ideal setup as each tool does it’s job, leaving me the arbiter of what is deemed “interesting”.

Changes

Since the tooling does not need any significant changing, perhaps my own habits and methodology need tweaking. To that end, I’ve added three 15-minute calendar appointments to the day. One in the morning, after I wake up. One in the afternoon for lunchtime reading. And one in the evening so that I can be updated on any changes to the latter two, or new developing stories. This allows me to focus on the task instead of trying to force it in where it would be a disruption.

Conclusion

While my brain’s software may not be as finely tuned as some, but I can use tools to augment it. Though it may seem trivial to do what I’m doing here, the important point is that we are surrounded by often underutilized tools, because we’re too busy “in the moment” to utilize them. Taking a second and looking at a problem can often uncover hidden truth and allow you to explore new methods of solving it using existing tools at your disposal.

Useful Scripts

I have a small collection of scripts/Fish Shell functions that I use to ease the burden of getting things done. Not all of them are worth of a post, but I’d like to share what I have, because if it can help someone over a hurdle, then all the better.

Fetch from AUR

function aur -d "Fetch a package from AUR4"
    set -l projdir "/home/ndegruchy/Documents/AUR/"
    set -l appldir $projdir/$argv
    git clone https://aur.archlinux.org/$argv.git $projdir/$argv
    cd $appldir
end

This particular snippet simply creates a new directory in my documents/AUR folder, then clones the specified AUR program to that directory, changing directory into it to make it faster to get up and building. I don’t have much use for this now, since I use pikaur to manage my AUR packages.

Blurred Screen Locker

#!/bin/bash

IMAGE=/tmp/i3lock.png
RES=1920x1080

ffmpeg -loglevel quiet -f x11grab -video_size $RES -y -i $DISPLAY -filter_complex "boxblur=10" -vframes 1 $IMAGE

i3lock --image=$IMAGE --ignore-empty-password --show-failed-attempts

rm $IMAGE

This bash script uses ffmpeg to take an X11 screenshot, and apply some blur to it before invoking my screen locker (i3lock), using the image as the image. Looks pretty nice and it doesn’t require much in the way of resources/tooling to get going.

Resume Builder

function -d "Compresses and retitles my resume PDF"
	exiftool -Title="Nathan DeGruchy's Resume" main.pdf
	gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/printer -dNOPAUSE -dQUIET -dBATCH -sOutputFile=ndegruchy-resume.pdf main.pdf
end

I often have several steps after I rebuild my resume out of LaTeX to make it ready for sending out. This Fish Function takes my resume, fixes the ‘title’ field, uses ghostscript to compress the whole thing and optimize it for screen reading. I should probably generate a Makefile for this to be honest…

A picture of Google's Activity History for a random account

De-Google

Today starts a new day. After 15 years of having an old Google Account, through the closure of so many applications (some more useful than others), I’ve finally shed my Google Account. This was following several days of planning, reconnaissance and account cleanup to ensure that I wasn’t going to hamstring myself by doing it. I waited for several more days to see if Google’s Takeout tool would provide me with a final dump of everything, but alas, it took longer than I have patience for.

I have to say, it feels a little freeing, a little nerve wracking and a little anti-climactic. Deletion of the account was fast, almost too fast. I do feel good that I am no longer feeding my information Google directly, and I’m doing what I can to block side-channel attempts at collecting my information. I know it’s not entirely possible, but at least it’s a step in the right direction.

Going forward, I think I’m going to be much more cautious with my account creation. Services should be carefully considered before signing up, and only if self-hosting or securing is deemed too difficult or time-consuming to do so. Owning your data should be more important than the convenience aspect.

A picture of a list of various projects Google has killed off over the years
Goodbye, Google
A picture of GUI Emacs in the package tool listing, showing mastodon.el information.

Emacs Rocks

Emacs is an amazing tool. It’s both a programming language (Elisp) and a functioning text editor. No, it’s not even a text editor, it’s an environment that contains a text editor, crafted out of Elisp. This allows you to extend it in almost any direction. From reading email and news groups to editing photos and viewing PDFs and listening to music.

I’ve spent a lot of time with it, and it’s classical rival, Vim, over the years and both are amazing tools in their own right. Emacs has won me over, though, because it allows me to do more than just edit text. I can craft it how I need it. To that end, I’m now using Emacs for RSS Feed reading (via Elfeed), Listening to music via EMMS (and mpv), Managing my files using Dired, even using it as a terminal emulator via Eshell. I can do most of what I need to do in Emacs.

Emacs even comes with it’s own server. Generally, this is to allow you to load a single instance of Emacs and then connect to it with any number of lighter clients. This offsets some of the longer startup times, which Emacs is, unfortunately, known for. This actually works out well, though, as it keeps buffers (files) and other utilities open, even if I close the frame (window) I’m working in. I can then freely close things and not worry about loosing data.

Emacs with various split buffers/windows in a single frame. Shows a config file, dired and elfeed
Me using Emacs on my Chromebook

The next, logical step would be to replace i3 with EXWM, but I’m not entirely ready to make that leap. I still use Firefox and Steam. LibreOffice will be coming in handy when school starts back up and command-line mount tools are not really fun. I’d also like to try and get email, contacts and calendars going. I have Office 365, so that may be an impediment. It’s something to ponder, though.

Edit: If you want to see my configurations, you can visit my Emacs GitLab repository.