How to vimgrep over hidden files.
I needed to delete all build pipeline steps that were named upload docs. I
currently have about 60 projects running from the same template all running
very similar builds. In the past I’ve scripted out migrations for large
changes like this, they involved writing a python script that would load the
yaml file into a dictionary, find the corresponding steps make the change and
write it back out.
Today’s job was much simplar, just delete the step, were all steps are
surrounded by newlines. My first thought was to just open all files in vim and
run dap. I just needed to get these files:positions into my quickfix. My
issue is that all the builds reside within hidden directories by convention.
The issue # [1]
variability
After searching through all the projects it was clear that all the steps were
in their own paragraph, though I was not 100% confident enough to completely
automate it, and the word upload docs was in the paragraph.
some were a two liner
- name: upload docs
script: aws s3 ...
Some had a variation in the name
- name: upload docs to s3
script: aws s3 ...
some were more than 2 lines.
- name: upload docs
script: |
aws s3 ...
s...
GitHub Stars
GitHub stars posts
1859 posts
latest post 2026-05-24
Publishing rhythm
[1]
a sprinter edging out his opponent by Dall-e
It’s about time to release Markata 0.3.0. I’ve had 8 pre-releases since the
last release, but more importantly it has about 3 months of updates. Many of
which are just cleaning up bad practices that were showing up as hot spots on
my pyinstrument reports
Markata started off partly as a python developer frustrated with using nodejs
for everything, and a desire to learn how to make frameworks in pluggy. Little
did I know how flexible pluggy would make it. It started out just as my blog
generator, but has turned into quite a bit more.
Over time this side project has grown some warts and some of them were now
becoming a big enough issue it was time to cut them out.
Let’s compare # [2]
I like to use my tils articles for examples and tests like this as there are
enough articles for a good test, but they are pretty short and quick to render.
mkdir ~/git/tils/tils
cp ~/git/waylonwalker.com/pages/til/ ~/tils/tils -r
cd ~/git/tils/tils
running tils on 0.2.0 # [3]
At the time of writing this is the current version of markata, so just make a
new venv and run it.
python3 -m venv .venv --prompt $(basename $PWD)
pip install markata
mark...
Check out stable-diffusion [1] by CompVis [2]. It’s a well-crafted project with great potential.
A latent text-to-image diffusion model
References:
[1]: https://github.com/CompVis/stable-diffusion
[2]: https://github.com/CompVis
Deliberative # [1]
People exceptionally talented in the Deliberative theme are best described by
the serious care they take in making decisions or choices. They anticipate
obstacles.
I am risk-adverse. I want everything well thought out and calculated before I
make any sort of change. I have never gambled in my life and just the thought
of it makes me anxious.
Aim it # [2]
I can use this as a strength to plan out potential issues and prevent them. I
do this quite often with my role in infrastructure.
I need to make sure that I use deadlines to keep this as a strength and not
hinderence.
Automation # [3]
One of the biggest ways that I utilize this skill is automation. I am all
about automating things, not just because I don’t want to do the manual work,
but I am not sure when I am going to need to do something again.
References:
[1]: #deliberative
[2]: #aim-it
[3]: #automation
[1]
References:
[1]: https://images.waylonwalker.com/polybar-gpu-stat.png
Check out archlinux [1] and their project aur [2].
⚠️⚠️Experimental aur [3].git [4] mirror⚠️⚠️ (read-only mirror)
References:
[1]: https://github.com/archlinux
[2]: https://github.com/archlinux/aur
[3]: /aur/
[4]: /glossary/git/
A common meta thing that I need in python is to find the version of a package.
Most of the time I reach for package_name.__version__, but that does not
always work.
but not all projects have a __version__ # [1]
In searching the internet for an answer nearly every one of them pointed me to
__version__. This works for most projects, but is simply a convention, its
not required. Not all projects implement a __version__, but most do. I’ve
never seen it lie to me, but there is nothing stopping someone from shipping
mismatched versions.
If you maintain a project ship a __version__ # [2]
I appreciate it
While its not required its super handy and easy for anyone to remember off the
top of their head. It makes it easy to start debugging differences between
what you have vs what you see somewhere else. You can do this by dropping a
__version__ variable inside your __init__.py file.
## __init__.py
__version__ = 1.0.0
SO # [3]
stack overflow saves the day
Special thanks to this
Stack Overflow post [4]
for answering this question for me.
So what do you do… # [5]
importlib
Your next option is to reach into the package metadata of the package that you
are interested in, and this ha...
Check out gum [1] by charmbracelet [2]. It’s a well-crafted project with great potential.
A tool for glamorous shell scripts 🎀
References:
[1]: https://github.com/charmbracelet/gum
[2]: https://github.com/charmbracelet
Check out crossposter [1] by Mr-Destructive [2]. It’s a well-crafted project with great potential.
Crosspost your articles to dev.to, codenewbie.org, medium.com and hashnode.com with a single shellscript / python package
References:
[1]: https://github.com/Mr-Destructive/crossposter
[2]: https://github.com/Mr-Destructive
Just starred moonlight-qt [1] by moonlight-stream [2]. It’s an exciting project with a lot to offer.
GameStream client for PCs (Windows, Mac, Linux, and Steam Link)
References:
[1]: https://github.com/moonlight-stream/moonlight-qt
[2]: https://github.com/moonlight-stream
I recently discovered moonlight-docs [1] by moonlight-stream [2], and it’s truly impressive.
Moonlight Documentation
References:
[1]: https://github.com/moonlight-stream/moonlight-docs
[2]: https://github.com/moonlight-stream
https://gist.github.com/YoEight/d19112db56cd8f93835bf2d009d617f7
[1]
xrandr is a great cli to manage your windows in a linux distro using x11, which
is most of them. The issue is that I can never remember all the flags to the
command, and if you are using it with something like a laptop using a dock the
names of all the displays tend to change every time you redock. This makes it
really hard to make scripts that work right every time.
Homepage # [2]
Check out the
deresmos/xrandr-manager [3] for more
details on it.
installation # [4]
xrander-manager is a python cli application that is simply a nice interface
into xrandr. So you must have xrandr already installed, which is generally
just there on any x11 window manager, I’ve never had to install it.
As with any python cli that is indended to be used as a global/system level cli
application I always install them with pipx. This automates the process of
creating a virtual environment [5] for xrandr-manager for me, and does not clutter
up my system packages with its dependencies that may eventually clash with
another that I want to use.
# prereqs (xrandr, pipx)
pipx install xrandr-manager
set main monitor # [6]
First if your main display is not set to the correct monitor set your main
dis...
jq has some syntax that will sneak up on you with complexity. It looks so good,
and so understandable, but everytime I go to use it myself, I don’t get it.
ijq is an interactive alternative to jq that gives you and nice repl that you
can iterate on queries quickly.
paru -Syu ijq
Here are some other articles, I decided to link at the time of writing this article.
JUT | Read Notebooks in the Terminal [1]
Comprehensive guide to creating kedro nodes [2]
Kedro - My Data Is Not A Table [3]
References:
[1]: /jut/
[2]: /kedro-node/
[3]: /kedro-pickle/
I like deresmos’s [1] project xrandr-manager [2].
Manage dual display on Linux
References:
[1]: https://github.com/deresmos
[2]: https://github.com/deresmos/xrandr-manager
If you’re into interesting projects, don’t miss out on xpadneo [1], created by atar-axis [2].
Advanced Linux Driver for Xbox One Wireless Controller (shipped with Xbox One S)
References:
[1]: https://github.com/atar-axis/xpadneo
[2]: https://github.com/atar-axis
I came across Launcher-Curseforge [1] from ShayBox [2], and it’s packed with great features and ideas.
Integrates the CF Modpack install button to any MMC based launcher
References:
[1]: https://github.com/ShayBox/Launcher-Curseforge
[2]: https://github.com/ShayBox
[1]
Recently I added two new bash/zsh aliases to make my git [2] experience just a tad
better.
trackme # [3]
Most of our work repos were recently migrated to new remote urls, we scriped
out the update to all of the repos, but I was left with a tracking error for
all of my open branches. To easily resolve this I just made an alias so that I
can just run trackme anytime I see this error.
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details
git pull <remote> <branch>
If you wish to set tracking information for this branch you can do so with:
git branch --set-upstream develop origin/<branch>
getting the branch # [4]
The following command will always return the currently checked out branch name.
git symbolic-ref --short HEAD
Injecting this into the suggested git command as a subshell gives us this
alias that when ran with trackme will automatically fix tracking for my
branch.
alias trackme='git branch --set-upstream-to=origin/$(git symbolic-ref --short HEAD)'
rebasemain # [5]
I sometimes get a bit lazy at checking main for changes before submitting any
prs, so again I made a quick shell...
Check out pip-tools [1] by jazzband [2]. It’s a well-crafted project with great potential.
A set of tools to keep your pinned Python dependencies fresh.
References:
[1]: https://github.com/jazzband/pip-tools
[2]: https://github.com/jazzband
So many terminal applications bind q to exit, even the python debugger, its
muscle memory for me. But to exit ipython I have to type out exit<ENTER>.
This is fine, but since q is muscle memory for me I get this error a few times
per day.
╭─────────────────────────────── Traceback (most recent call last) ────────────────────────────────╮
│ <ipython-input-1-2b66fd261ee5>:1 in <module> │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
NameError: name 'q' is not defined
After digging way too deep into how IPython implements its ExitAutoCall I
realized there was a very simple solution here. IPython automatically
imports all the scripts you put in your profile directory, all I needed was to
create ~/.ipython/profile_default/startup/q.py with the following.
q = exit
It was that simple. This is not a game changer by any means, but I will now
see one less error in my workflow. I just press q<Enter> and I am out,
without error.