For my contribution, I wanted to fix some documentation and examples for the Nixos module providing frp (fast reverse proxy).

Why I picked it

I use the NixOS linux distribution as my daily driver, as well as on my home server setup as well. It’s a linux distribution based around the Nix language and it’s package manager, which is centered on deterministic builds and configurations. I had drafted a few things to contribute before such as packages, but never opened a pull request as someone else usually ended up getting to it first, and better than I could. I wanted to get some general experience with the project as well in case I ever do want to maintain a package, and improving documentation seemed like a good place to start.

What was the experience like?

The experience was pretty smooth, as it is a very large project there are extensive resources available for contributing to all the different sections, from documentation to packages to systems. People are friendly and understanding, and willing to help. It helped that I had a straightforward contribution that didn’t change anything functional, so there was no real need for build tests.

The Issue

While trying to figure out a networking solution, I came across frp, which fit my use case pretty well. It had a module in NixOS already so I figured I would just use that for convenience as that’s what my server ran, but doing the configuration took a little longer than I expected. The NixOS module defines it’s settings through a Nix object, but frp only accepts TOML, and therefore the examples are in TOML. I had to do some investigating into how it converts it and the syntax, because it is not immediately obvious how to format it. While not hugely complex, I figured I might as well fix it in case anyone else wanted to use it in the future, and streamline the process.

Conclusion

Nixpkgs is a very interesting project to contribute to, as it is both a package manager and a system/distribution in itself. I will likely contribute again, probably even to the frp module, as I would like it to be able to use environment variables and files.

Nix frp settings example the old example for settings in the NixOS reference

frp example from source the settings example in the frp repository