Self-hosting has always been a niche hobby for a reason. I’ve been using NixOS for over a decade. I know the ecosystem. I’ve contributed to it, founded NixCon, led the marketing team. And yet, every time I’ve tried to self-host something beyond the basics, I’ve hit the same wall: the nitty-gritty details that take forever to get right. You want to run Nextcloud? Great. Now…
TL;DR: Communication isn’t a soft skill bolted onto engineering. It IS engineering. The same rigor you bring to system design applies to how you convey ideas. I learned this across three languages, one failed technology adoption, and too many lost demos. The receiver determines the encoding, not the sender. I once spent forty-five minutes explaining why a particular build system would…
I keep watching people copy-paste NixOS configurations without understanding them. They grab a snippet from someone’s dotfiles, tweak it until it works, and move on. Then something breaks and they’re stuck because they don’t know what inherit does, why rec exists, or how functions with curly braces differ from functions with a colon. The fix: learn the language. Not nixpkgs, not…
TL;DR: The DevEx product market is getting squeezed from four directions: AI makes features free, developers expect free tools, the interface layer is collapsing to APIs, and big companies build in-house because it got cheap. What survives might be trust, not code. I’ve spent 20 years building tools for developers. Some as products, some as internal platforms, some as open source that a…
It’s 2026 and nobody’s surprised anymore - most of us spend our days working alongside AI agents in the terminal. Claude Code, Cursor, Copilot - they’re shelling out to CLI tools, reading the output, and deciding what to do next. We watch it happen in real time. And I keep seeing the same thing: the agent tries a command, gets output it can’t parse, tries a different flag,…
TL;DR: You can’t make AI deterministic. Stop trying. Instead, lock down everything around it: dependencies, environments, builds. When the boring parts are reproducible, AI’s randomness becomes the only variable, and that’s a completely different debugging experience. I watched a chef burn a steak last week. Good chef, nice restaurant, just one of those nights. Same recipe…
A child touches a hot stove and learns not to do it again. A developer runs rm -rf in the wrong directory and learns to double-check paths. A junior engineer pushes to production on Friday and learns why nobody does that. Mistakes are how we learn. The question was never “how do we stop making mistakes?” - it was always “how do we make mistakes survivable?” Version control.…
Your website has users you’ve never seen in analytics. They don’t click. They don’t scroll. They read your entire site in seconds and decide if it’s useful. They’re AI agents - and in 2026, they’re everywhere. Below is a practical checklist for serving them well. But first - why should you care? This Is Already Happening This isn’t a prediction. The data…
If you’ve ever run terragrunt run --all plan on a large repo, you know the feeling. Dozens of units running in parallel. Each one prefixing its output with [path/to/unit] . All of it interleaved into one endless stream. You’re scrolling, squinting, trying to figure out which units failed, what changed, and how far along the run is. It’s chaos. And it’s the default…
I’ve been using AI coding assistants daily for the past year. And I’ve noticed something: the quality of AI help varies wildly depending on the codebase. Same tools. Same prompts. Completely different results. The difference? Consistency. The codebases where I get the best AI assistance aren’t necessarily the most sophisticated. They’re the most predictable. AI Models…
TL;DR: Twenty years of engineering and zero videos to show for it. I finally sat down in front of a camera, expected to hate it, and by session three I was having a good time. Scroll down for eleven videos and the honest version of how I got there. My career so far: two decades of code, a few dozen conference talks, blog posts when I feel like it. But video was this thing I always assumed other…
I’ve been setting up MCP servers for Claude Code, and I hit a common problem: the server I wanted wasn’t on npm. Most MCP documentation assumes you’ll run npx @some/package . But what if the package only exists on GitHub? Turns out, npx handles this natively. The Syntax npx --yes github:<user>/<repo> <bin-name> That’s it. npx will clone the repo, run npm install , build it…
I speak at conferences about Nix, NixOS, reproducible builds, DevOps practices, and the future of AI in software development. Here’s a selection of my talks with video recordings. Recent Talks Getting Started with Nix: Common Mistakes and How to Dodge Them NixCon 2025 · Rapperswil-Jona, Switzerland A workshop for Nix newcomers covering installation, CLI usage, and the basics of the Nix…
I’m Rok Garbas. I build products and help customers understand why they matter. The Short Version 20+ years in DevOps, SRE, and Release Engineering. Mozilla, Tweag, Flox. I’ve built the infrastructure, shipped production systems, and stood in front of customers explaining why it all matters. Technical enough to build. Human enough to explain. The Longer Version Most engineers can…
This isn’t a prediction. This is happening right now, as I write this sentence. I’m a programmer. Twenty years in. And I’m watching my own job change in real time. Engineers everywhere—myself included—are realizing we can do things today that would have taken us weeks last year. Claude Code , Cursor , Gemini —these tools aren’t coming. They’re here. And they’re…
Historical Note : Written in January 2017 reflecting on technology choices. Elm was gaining traction at Mozilla, and functional programming was influencing Python codebases. Haskell I started learning Haskell in the middle of 2015 with the help of this amazing Haskell book . But even after almost a year and a half, I am still not at the level where I would feel comfortable when having to write…
Historical Note : Written in December 2016 after the Reproducible Builds Summit. The reproducible builds movement has since grown significantly, with major distributions adopting these practices. Last week a Reproducible Builds Summit was held in Berlin and since it was almost at my doorstep I had to take part. Along with Eelco Dolstra , I represented the NixOS voice in the debates that were…
Historical Note : Written in October 2016 about automating Nix updates at Mozilla. While Travis CI specifics have changed, the core automation patterns remain valuable today. It feels a bit tedious that we (package maintainers of nixpkgs ) are still updating version of packages manually. Especially in such a small community, we should be really careful where we use our resources. In this blog post…
Historical Note : Written in October 2016 about systemd.conf. The conference has continued annually and remains an important gathering for systemd developers and users. I realized I have never really sat down and learned systemd. I was mostly exposed to it via NixOS when writing NixOS modules and time came to dig a bit deeper. Systemd man pages are invaluable source of information. Initially they…
Historical Note : This post was written in 2016. pypi2nix has evolved significantly since then. The core concepts remain valid, but some implementation details may have changed. In the recent years pypi2nix tool went over many iterations. Quite few approaches were tested, and for the last year all pieces finally came together. I can say personally that for the past 6 months I'm a happy pypi2nix…
Historical Note : Written in July 2016 about a multi-day NixOS hackathon in Berlin. This was part of building the thriving NixOS community that later led to regular NixCons. All together we were 17 people, which was the biggest number so far for any of NixOS Berlin gatherings. I'm not sure what was the reason, but my speculations are that an evening of gathering is nice from time to time…
Historical Note : Written in November 2015 after systemd.conf. ACI (App Container Image) and rkt were competing container standards at the time. Docker’s OCI format eventually became the industry standard, but the Nix approach to reproducible container builds remains relevant. First a big thank you to all the organisers of systemd conference . You did an amazing job and I can not wait for…
Historical Note : Written in September 2015. The technique of pinning nixpkgs versions described here was an early pattern that later evolved into modern tools like niv and flakes. The core principle remains valid. First thing before fixing a bug is being able to reproduce it. Usually once you are able to reproduce the bug solution comes easy. Probably this does not come as a surprise and we all…
Historical Note : Written in August 2015 when leaving RhodeCode. This documents the early enterprise adoption of Nix for DevOps workflows. A bit more than a year ago, I've joined RhodeCode , to work on installer for their core product, RhodeCode Enterprise , a source code management tool for enterprises. First installation = A key to success Everybody knows that first impression matters. When you…
Historical Note : Written in March 2015 when Slack was rapidly gaining adoption. WeeChat remains a powerful terminal-based IRC client, and the core arguments about unified, configurable messaging tools are still relevant today. cat videos and mobile phones. Instant chat gives promise of instant attention to others and makes sure your day is going to be interrupted at least few times a day. We've…
Historical Note : Written in March 2015 about the very first NixOS meetup in Berlin. This marked the beginning of what would become a thriving NixOS community in Berlin, eventually leading to NixCon. Yesterday (Wed,4.4.2015) we had our first meetup. RhodeCode - company I work for - happily provided us with a space and refreshments to keep us hydrated while listening about Nix . It was hard to plan…
Historical Note : Written in February 2015 about switching to Pelican. The blog has since migrated to Hugo, but the core message about developers needing strong writing skills remains timeless. Sadly I had to replace my previous platform, Plone . Lately I got a bit disconnected from its development, since I changed the job, which doesn't require any work with Plone. Besides it looked less likely…
Historical Note : Written in December 2013 during Plone 5 development. This documents the modernization of Plone’s JavaScript stack with Mockup and modern tooling. I would like to thank all the companies and sprint organizers who made all this work possible. I would like to thank: Fourdigits for hosting amazing sprint about which I already blogged . Timo Stollenwerk for organizing Cathedral…
Historical Note : Written in November 2013 during Plone 5 development. This sprint at Fourdigits was crucial for modernizing Plone’s JavaScript stack with Mockup. with "Living statues sprint" in 2010/2011 and Plone Conference last year. I'm starting to feel like at home in Arnhem. I arrived to Arnhem on Monday evening and sadly had to leave it on Friday morning. Which ment I had to miss an…
Historical Note : Written in October 2013 announcing a PloneConf talk in Brasilia. JavaScript was becoming essential for Plone developers as Plone 5 modernization accelerated. where enough to be an alpha-(fe)male. Today times are a "little" different. You need to know how to make "FIRE" on the Web. And yes knowing Javascript is the only way to get you alpha-web-(fe)male status back. This is a…
Historical Note : Written in April 2013 (yes, about January!). This documents the birth of the Mockup project and early work modernizing Plone’s JavaScript infrastructure. As last month I got reminded by iElectric blogpost that it would be nice to write down what I did last month. Beer & Wine Sprint : Was part of the mass on the Munich side of the wormhole. I removed plone.init.js script and…
Historical Note : Written in April 2013 at the start of Chipin-funded work on plone.app.toolbar for Plone 5. This documented daily progress on modernizing Plone’s editing interface. said Lady Ga-Ga crashed a plane in Venice, where I should have landed, then had to do a "I'm sorry" party and that's what got me stuck in Barcelona. One day more without rain/snow and all that shitty weather we…
Historical Note : Written in April 2013 as a mid-point update on Chipin-funded plone.app.toolbar work. This was part of the multi-day blog series documenting development progress. a piece of luggage? How late do you have to be for a flight where you're like, 'Fuck it - just grab a pile of shit. We'll get a bag at the airport'. Lets rewind 8 days back. I wrote a post in the morning just before I…
Historical Note : Written in April 2013 about a PLOG (Plone Oldenburg Group) sprint. Part of the intensive period of Plone 5 JavaScript modernization work. matter of time before you will lose it. Just to be a week away from this rain/snow madness, it will make life worth living again. Good weather, good food and most importantly good friends. All in one place. Thats why PLOG is event that…
Historical Note : Written in April 2013 as the final report on Chipin-funded plone.app.toolbar work. This concluded the daily blog series documenting the development journey. sucks. I will never ever be happy with what I record. Plus, if you do decide to record a screencast, don't do it drunk. I actually released plone.app.toolbar a week ago with good intention to record a screencast. But after of…
Historical Note : Written in December 2012 when JavaScript testing in Plone was uncommon. BusterJS is now deprecated, but the principles of unit testing JavaScript remain relevant. Modern equivalents: Jest, Vitest, Playwright. When I say "test your Javascript" I don't meant to write functional tests for your application (eg: Selenium tests), but to write proper unit tests for your Javascript code.…