press any key to skip

Nav

1
2
3
4
5
6
7

Jump

Select

~

Prompt

M

Theme

adam@looney:~$ whoami

looney.eu

INFRASTRUCTURE / AUTOMATION / DEVELOPMENT

adam@looney:~$ cat tagline.txt

Fixing things that don't need fixing and breaking things that didn't need breaking.

I script workflows, deploy infrastructure, preach vim over nano, get unreasonably excited about open source tools and appreciate topping all that off with well-spent game time among friends.

adam@looney:~$ ls sections/
adam@looney:~$

Use keyboard to navigate → · press ~ for the prompt, try "help"

adam@looney:~$ ls ~/contact/

GET IN TOUCH

email [email protected] Get in touch via email
linkedin linkedin.com/in/a-loon Connect on LinkedIn
github github.com/NocFA Check out my projects on GitHub
codeberg codeberg.org/noc Check out my projects on Codeberg
forgejo git.nocfa.net/NocFA Browse my self-hosted Forgejo instance
last.fm last.fm/user/alooneylad See what I'm listening to
adam@looney:~$ neofetch

INFO

──────────────
location Ireland sector IT focus L3 support, system administration (mostly Linux-based), networking, automation, scripting, frontend development interests gaming, music, automation, hardware os Windows, Linux & macOS editor vim (headless unix systems) · jetbrains fleet & phpstorm
Tech done to a looney's standard — still figuring out exactly what that means. Keeping things running, or perish trying.
adam@looney:~$ now-playing --user alooneylad
now playing
adam@looney:~$ watch -n0.5 homelab-status

Infrastructure

connecting...
adam@looney:~$ ls ~/projects/

Projects

MDSF Crew pre-launch

Crew-for-hire platform for Star Citizen. Recruiters post operations and assemble crews. Crew members list availability and build reputation through review-based rankings. Organisations manage squads, ranks, and fleets -- all tied to RSI-verified identities.

MDSF Crew landing page
frontend SvelteKit 2Svelte 5GSAP
backend Fastify 5TypeScriptNode.js 22
data PostgreSQL 16Drizzle ORMRedisPgBouncer
infra Cloudflare TunnelStreaming ReplicationDocker
auth Argon2idTOTP 2FADiscord OAuth2CSRF
payments StripeMulti-currencyWebhooks
integrations Discord BotBrevo SMTPRSI Scraping

features

Operations board with role-based crew assembly, squad management, and ship assignment
Review system with per-role experience tiers (Rookie through Elite)
Organisation system with RSI verification, persistent squads, ranks, alliances
Ship library (247 ships) with fleet management and org fleet pooling
Real-time notifications via WebSocket, Discord bot with slash commands
Subscription tiers, donation system with Hall of Fame, multi-currency pricing
Admin panel with moderation, audit logs, policy management, automated backups
Support ticket system, GDPR data export, account deletion
foo_gifart open source

A foobar2000 component that renders animated GIF files as album art. Drop it in, point the artwork panel at a .gif, and your covers come alive — static art is so last decade.

GIF
Track Title
Artist Name
language C++
platform foobar2000Windows
sdk foobar2000 SDKWIC
gindexer open source

C++ library that indexes a local music collection and resolves cover art by track metadata. Scans directories on startup, watches for changes, and returns matching cover art fast enough for real-time use in discord-music-presence.

language C++17
storage In-memoryLMDB
libraries TagLibefswlmdbxx
Segments open source

Single-binary task and project manager built as a faster replacement for Beads. It combines an LMDB-backed CLI, live web UI, and MCP tools for agent-friendly planning across projects.

Segments task list interface
language Go
storage LMDBJSONL export
surfaces CLIWeb UIMCP
shellwhy open source

CLI that answers "why is my shell doing this?" — inspects a shell session, applies per-shell startup-file rules, safely parses source statements, detects tooling hooks (starship, direnv, nvm, ...), and labels every file with a confidence level instead of pretending static analysis can prove runtime behavior.

shellwhy icon — a terminal with a question mark
language Rust
shells bashzshfishsh/dashkshtcshnu
output humanplainJSONstrace trace mode
noc-homelab open source

Five service hosts spanning macOS and Linux, connected over Tailscale, with a Windows gaming and generation machine alongside them and shared Kopia storage on noc-wardrobe. Runs media, communications, game servers, a knowledge archive, local models, and monitoring.

noc-homelab dashboard
infra TailscaleDockersystemdlaunchd
services Matrix/SynapseEmbyNextcloudGatus
language PythonBash
adam@looney:~$ tree ~/wiki/

WIKI

wiki / gindexer / apiedited 2026-07-19
Library API

One header, one config struct, one lookup call.

#include <gindexer/gindexer.h>

gindexer::config cfg;
cfg.dirs = {"/home/user/music"};
cfg.splitter = split;            // your artist-splitting logic

gindexer::indexer idx(std::move(cfg));

auto result = idx.lookup("Radiohead", "Creep", "Pablo Honey");
if (result) {
    // result->cover    — path to the cover art (or the audio file itself
    //                    when the art is embedded; check result->embedded)
    // result->artist / title / album — the matched track's tags
}

A miss means the track isn’t in the index — the watcher keeps things current, so “not indexed yet” isn’t a state you see.

Config

dirsRoot directories to scan and watch, recursive.splitterCaller-provided function that splits combined artist strings — "A & B feat. C" versus the single artist the OS reports.cover_patternCase-insensitive filename regex for external art; default cover\.gif.embeddedAlso index tracks whose only art is embedded in the tags; default false.thresholdMinimum fuzzy-match score, default 0.5.exactNormalized string equality instead of bigram similarity; default false.db_pathLMDB directory for a persistent index; omit for in-memory only.

External cover art must sit in the same directory as the audio file it belongs to.

Building

CMake 3.27+ and a C++17 compiler. Dependencies — TagLib, efsw, LMDB, lmdbxx, Catch2 — are fetched automatically via FetchContent:

cmake -B build
cmake --build build
ctest --test-dir build --output-on-failure   # with -DBUILD_TESTING=ON