Hah! No, of course not, I just can’t write correct code without testing to save my life. Sorry for the confusion - final: prev:
should be the correct order.
I do some good things and some bad things. Some of the bad things are on this list: Anti-patterns — nix.dev documentation. Don’t repeat those mistakes (but I think very localized with pkgs
for package lists is ok) 
At a high level, by now I believe the repositories could be much simpler and cleaner if I just had one instead of two, and structured all my flake outputs as subdirectories that I import
instead (with a default.nix
at the root of each directory). My original idea was that I’d still want to be able to use/present my dotfiles without nix (so I can point others at the more generic parts, and in case I decided to ditch nix at some point), which is how I ended up with the current structure. I was also too hesitant to create subdirectories for “small” bits of code (that have, as usual, grown).
I’m still partial to keeping my dotfiles very cleanly separate from my nixos config, but this can be done as described without splitting the repository, which would resolve some of the complexity in my update management. It would also reduce the complexity of the flake.nix
boilerplate, which I’m finding more and more desirable. Having a complex flake.nix
detracts from its usefulness as an overview of what the flake actually does.
If there’s something specific to be aware of, this is likely the biggest issue: dotfiles/flake.nix at f47850e93ef32a29401d4f1cec5ba1c9dec3fe2d · TLATER/dotfiles · GitHub - I believe it should be implemented as a nixosModule
instead, but at the time I didn’t quite realize that was an option, so I wrote that, frankly, mess. Profiles are probably ok (though I find I’m not using them effectively), just don’t expose them on the flake level like that. If you want me to explain why I’m doing that, and how it should be done, feel free to PM me - I think despite my attempts at commenting about that I’ve not conveyed that very well in my repository.
On the positive side, I like my use of nvfetcher, and how I hook the fetched sources into my packages using callPackageWith. It keeps packages lean, and makes updating tidy and easy (it all runs in CI once a week).
I also like the checks I recently added, because they make setting up simple sanity checks super convenient (you’ve seen first hand that I need them) - very nice if you don’t like accidentally bricking your editor and having to roll back.
In general, if you’re planning on keeping this on github, I’d really recomend setting up actions like I do to give you regular update PRs. It really helps make sure you stay on top of updates. If you only do it locally, make sure you only ever have to run one command to get your system up to date. I wrote a script to help me with that, but that’s largely because of the double repo issue.
Specific to emacs, my config is super convenient: dotfiles/emacs.nix at f47850e93ef32a29401d4f1cec5ba1c9dec3fe2d · TLATER/dotfiles · GitHub. It uses a script from GitHub - matthewbauer/bauer: An Emacs+Nix IDE, which automatically determines packages I depend on with use-package
, and makes sure they’re installed. This is awesome, but unfortunately it relies on IFD. I haven’t made my mind about whether this trade-off is worth it yet.