# Structure
├── shell.nix
├── flake.nix
├── assets
├── modules
│ ├── ...
│ ├── agenix
│ └── hosts
│ ├── desktop
│ └── laptop
├── npins
└── wrappers# default.nix
Rather than relying on a flake, I use a traditional default.nix as my config's entrypoint. From here, I expose my NixOS configurations, development shells, and packages. I've rejected flakes due to their poor Git integration, non-standard Nix dialect, and reliance on Determinate Systems.
# flake.nix
Given what I just said, you might be surprised to see this. Well, I don't actually despise flakes, but I don't want to use them in my config. Instead, I use a flake to expose my outputs for non-NixOS systems. In a single command, I can enter a development shell with all my wrapped packages and have a mostly functional setup ready to go.
# npins
npins is a mechanism for pinning dependencies in Nix projects. I won't harp on it much since it's already been discussed by others, but it allows me to use all the dependencies I want without touching flakes.
# sprinkles
sprinkles is a project which provides a common interface for sourcing/mutating/overriding dependencies and exposing outputs. While it doesn't have much of a use in a NixOS config, I just really like it. In my default.nix I use sprinkles to source my dependencies from npins, mutate them into a common schema, then expose my outputs. I actually use a fork of the original with some very opinionated changes.
# nosh
nosh is my own project and the backbone of my config's structure. Essentially, it allows for automatic importing of modules based on device hostname. This allows for complex multi-host configs with far less code. If you're curious, please check out the README because I put a lot of effort into it!
# adios
adios is an alternative module system featuring strong typing and laziness. I use it in tandem with adios-wrappers to configure most programs I use. Not only is it incredibly performant, but it also lets me use my configs on any device with Nix installed. The wrappers/ directory contains all my personal wrappers and configurations for ones from adios-wrappers.
# agenix
agenix provides easy deployment of age encrypted secrets. Currently, I only use it to declaratively set my user password and Discord token but I plan on using it for more.