[dms]: https://github.com/AvengeMedia/DankMaterialShell
[ez-configs]: https://github.com/ehllie/ez-configs/
[flake-parts]: https://github.com/hercules-ci/flake-parts
[flake-schemas]: https://github.com/DeterminateSystems/flake-schemas
[rofi]: https://github.com/davatorium/rofi
[stylix]: https://github.com/danth/stylix
---
Welcome to my Nix flake, powered by [flake-parts]!
This is mainly for my NixOS configurations, but it also has a couple standalone Home Manager configs, packages, development shells and NixOS/Home Manager modules.
## Design goals
- Simple, easy to parse and short system/home configurations
- Minimal boilerplate
- Largely orthogonal `profiles` instead of one-off module options, e.g. enable `my.profiles.gaming = true` instead of specifying several options per host
- Good separation of concerns and modularity, I dislike how monolithic flakes tend to turn out
- Huge shoutout to [flake-parts] for helping with this!
- No libraries with too much magic behind how they work
- As little obfuscation as possible on how things work, compose my own tools from more barebones ones as needed
I use [ez-configs] to get some boilerplate out of the way when it comes to setting up systems and home configurations. I usually define home configurations directly on the system configurations themselves since they tend to have similar functionality goals and complimentary options anyway.
I have plenty of custom HM and NixOS modules, so I use `profiles` to group them together and massively simplify my configs. They also have enough smarts to, for instance, enable the `gnome` Home Manager module by default if the host system has the same module enabled.
As an example, this is a working NixOS configuration describing my main rig.
```nix
{config, ...}: let
inherit (config.my.config) name;
in {
imports = [
./hardware-configuration.nix
./storage.nix
];
my = {
ci.build = true;
gaming.enable = true;
networking.tailscale.trusted = true;
users.emily.enable = true;
profiles = {
formfactor.desktop = true;
hardware.gpu.nvidia = true;
hardware.rgb = true;
de.gnome = true;
de.hyprland = true;
graphical = true;
};
};
networking.interfaces.enp6s0.wakeOnLan.enable = true;
age.rekey.hostPubkey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMNf+oynlWr+Xq3UYKpCy8ih/w9sT6IuIKAtYjo6sfJr";
system.stateVersion = "23.11";
home-manager.users.${name.user}.home.stateVersion = "24.11";
}
```
## Look and feel
I daily drive Hyprland with [dms] and [rofi].
My systems wouldn't look even halfway as good without [stylix] doing all the heavy-lifting in my stead.
The color scheme used in my screenshots is `stella`.
## File structure
I'm hoping the file structure under `/nix` is mostly self-explanatory. That said, there are a couple that bear explaining:
- `nix/flakeModules` for flake modules consumed by [flake-parts]
- `nix/schemas` for my custom [flake-schemas] definitions
- `nix/shared` for configuration and modules useful to both and NixOS and Home Manager