These are my dotfiles (configuration files) for my NixOS setup(s).
Stylix (and base16.nix, of course) is amazing, allowing you to theme your entire system with base16-themes.
Using this I have 55+ themes (I add more sometimes) I can switch between on-the-fly. Visit the themes directory for more info and screenshots!
I wrote some reinstall notes for myself here (install.org).
Separate Nix files can be imported as modules using an import block:
imports = [ import1.nix
import2.nix
...
];
This conveniently allows configurations to be (*cough cough) modular (ba dum, tssss).
I have my modules separated into two groups:
- System-level - stored in the system directory
- System-level modules are imported into configuration.nix, which is what is sourced into my flake (flake.nix)
- User-level - stored in the user directory (managed by home-manager)
- User-level modules are imported into home.nix, which is also sourced into my flake (flake.nix)
More detailed information on these specific modules are in the system directory and user directory respectively.
In some cases, since I use nixpgs-unstable
, I must patch nixpkgs. This can be done inside of a flake via:
nixpkgs-patched = (import nixpkgs { inherit system; }).applyPatches {
name = "nixpkgs-patched";
src = nixpkgs;
patches = [ ./example-patch.nix ];
};
# configure pkgs
pkgs = import nixpkgs-patched { inherit system; };
# configure lib
lib = nixpkgs.lib;
Patches can either be local or remote, so you can even import unmerged pull requests by using fetchpatch
and the raw patch url, i.e: https://github.com/NixOS/nixpkgs/pull/example.patch.
I currently curate patches local to this repo in the patches directory.
I separate my configurations into profiles (essentially system templates), i.e:
- Personal - What I would run on a personal laptop/desktop
- Work - What I would run on a work laptop/desktop (if they let me bring my own OS :P)
- Homelab - What I would run on a server or homelab
- WSL - What I would run underneath Windows Subystem for Linux
My profile can be conveniently selected in my flake.nix by setting the profile
variable.
More detailed information on these profiles is in the profiles directory.