1 of 22

From dotfile Cruft to Fully-Fledged Projects:� The Cases of Moonshine and Homegit

Javier Candeira

DDD By Night Melbourne - 14 October 2026

​

2 of 22

3 of 22

https://candeira.com

​

https://candeira.com

​

4 of 22

5 of 22

6 of 22

7 of 22

Homegit

1. A usage pattern for source controlling three sets of configurations:

    • NixOS: the system configuration for a gnu/linux machine
    • home-manager: the per-user profile, that is, packages and configurations independent of 1
    • dotfiles: all the configuration files (and scripts like ~/.local/bin, etc) not in 1 and 2

2. A set of scripts to help with the above

8 of 22

9 of 22

The "Google is just curl + grep" version

10 of 22

Demo?

  • `hg lol` does `git log $OPTIONS`!
  • `hg test` runs the tests!
  • `hg deploy` uses `nix home-manager` to apply the conf!

(we'll use `hg preview` which shows a diff, instead)

11 of 22

What's the rub?

12 of 22

13 of 22

14 of 22

Yes Javier, but what is Moonshine?

  • Like Airplay, but for Linux desktops
  • Like Chromecast, but without 2 seconds of buffering
  • Like Windows Network Displays, but I'm guessing because I don't have those
  • Like a long HDMI cable but without the cable. Almost like it has less wires.
  • Like clicking on Moonlight on the receiver and then configuring Sunshine on the sender, and then pairing and then launching the session, but with a single shell command and zero fiddling.
  • Like a project on GitHub under the MIT license, except yes, it's literally that.

= +

15 of 22

16 of 22

Success!

  • You can use Moonshine to cast your linux desktop to a remote device
  • It does automatic discovery and pairing
  • It has tests! The Test Anything Protocol (TAP) is pretty awesome
  • It responds to desktop resizing, and <eeh> terminates sessions appropriately
  • With the --tailscale option, it will work under strenuous network filtering
  • It has a TODO/backlog!

~

17 of 22

Next Steps

  • Waking up remote receiver desktops and logging into the desktop via ssh
  • Making screen IDs stable under port connections/disconnections
    • (Please come to me if you've already worked on this problem!)
  • A Gnome applet that looks like the MacOS Airplay interface
  • A way to bake a micro-SD card for a Raspberry Pi receiver that's pre-paired
  • Dunno. It's already usable under "works for me" rules.

​

The problem is... that it's good enough for me. I don't really need these.

18 of 22

Demo?

19 of 22

20 of 22

What's the rub?

21 of 22

Did you use coding agents, Javier? Did you? DID YOU?

  • Yes, they can be super helpful. I write all my TAP tests with agents.
  • Particularly for software with few users...
    • ...or when you don't care about your users
    • ...nobody will notice if you use agents to vibeslop school intranets!
  • I believe there's a sweet spot in enhanced productivity for devex tools
    • Tools that save team members time...
    • ...but whose users aren't blocked if the tools breaks/has bugs
    • Notice that both my projects "work for me" but still have gaps.
  • Use your brain. I know what my scripts do, I designed them.
  • I didn't just tell the agent "make no mistakes".

22 of 22

Thanks!��Questions?

​

​

Q