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 / shellwhy / confidenceedited 2026-07-19
Confidence model

Static analysis cannot prove runtime shell behavior, and shellwhy refuses to pretend otherwise. Every startup file in a report carries one of six labels:

confirmedObserved by trace mode.inferredFollows from shell rules or a safely parsed source statement.possibleExists or is installed, but static mode cannot prove it loads.missingExpected or possible path does not exist.skippedNot loaded because mode or precedence rules exclude it.unknownNot enough information.

Static mode

The default. It identifies the target shell from --shell, $SHELL, or parent-process metadata; infers login / interactive / SSH / terminal context from flags, argv, TTY state, and environment; applies the startup rules for that shell and mode; checks which files exist; and shows files skipped by precedence — bash reading only the first existing ~/.bash_profile, ~/.bash_login, or ~/.profile is the classic case. Simple source statements are parsed without evaluating shell code.

What it cannot do: prove conditional branches, dynamic paths, plugin-manager side effects, aliases, functions, exports, or PATH changes created at runtime. Those stay possible at best.

Trace mode

shellwhy trace launches a fresh target shell and observes file access through a platform backend — currently strace on Linux, with dtruss/fs_usage planned for macOS. Observed files are merged into the report as confirmed. The trade-off: trace mode runs the user’s startup code, because it starts a real shell. Use static mode when analysis must be non-invasive.