An ever-evolving work in progress, my NixOS configuration allows me to share an identical system configuration on many different machines while also providing a historical record of the tools and workflows that I've used for my personal productivity over time.
In theory, this configuration should work for others, though portability beyond myself isn't
necessarily a goal of mine. There isn't anything specific to me here other than the username
set for home-manager and potentially the hardware-configuration
, but this is usually
auto-generated for you anyway, so replacing it should be trivial.
If you are planning on using this configuration as a starting point, you may wish to remove the references to my development environment flake, unless you want to try using the same tools that I use with my customized configurations. These are highly tailored to my personal preference, so you may not find them suitable. Of course, I would argue that they're great :)
The configuration is structured as a Flake and relies on other personal customizations that I maintain for myself, particularly my development environment. The configuration is built for x86-64, and currently hasn't been tested on other systems (though I suspect that it would work without issue).
Flakes used by the configuration are loaded as NixOS modules, all of which are provided a consistent
set of specialArgs
:
inputs
: all inputs to the configuration (e.g.devenv
,home-manager
, etc.)outputs
: the final Flake output, useful for e.g. overlayssystem
: the system type used for the configuration, currently hard-coded tox86-64
There are currently only a few different modules in use for the configuration. Each has its own conventions which should be readily apparentl from reading the module source. The modules in use are:
configuration.nix
: system-wide configuration. Almost all core NixOS configuration goes heresystem-packages.nix
: isolated definition of system-wide packages. This allows other flakes to be easily injected into the module via theinputs
andsystem
argumentshome-manager/home.nix
: home-manager configuration. Some programs and settings are configured in the module directly, while others are broken out into their own individual files