2.9 KiB
title: Project structure --- = Project structure
Next, we have the project directory — the environment you’ll be living in for the next year, tinkering your Nix configs. It is required to be familiar with the workspace, after all. My configuration takes a lot of cues from devos (which is unfortunately is a lot to take if you’re just beginning to grok Nix as a whole).
My NixOS config should look like the following:
nixos-config
├── docs/
├── hosts/
├── lib/
├── modules/
├── overlays/
├── pkgs/
├── shells/
├── templates/
├── users/
├── default.nix
├── flake.lock
├── flake.nix
├── images.toml
├── users.toml
└── README.adoc
One of the more notable files here when first start looking is the ./images.toml
file where it contains a description of the images.
For more details, see Declarative host management.
A similar file, ./users.toml
, contains the description for the home-manager users to be exported from this flake.
For more details, see Declarative user management.
Most of the said folders are related to a flake output attribute, see What’s in my flake? for more details.
-
./docs/
contain the source code for the website. Currently, it uses Hugo for statically generating the website. -
./hosts/
contain machine-specific configuration. This usually configures like the hardware setup, timezone, and users. Host configurations are also exported in the flakes inoutputs.nixosConfigurations
. -
./modules/
contain my custom modules including NixOS and home-manager modules. For more information, see the github:{github-repo}[related documentation, path=./modules/README.adoc, rev=master]. -
./overlays/
contain the overlays for several established packages. This is typically used exclusively for the project and advised to not use it if you’re not foodogsquared. -
./pkgs/
contains my custom packages. It is exported in the flakes atoutputs.packages
compiled through various systems. -
./shells/
contains my development shells for interacting with the usual type of projects. Setting this up can bring benefits outside of NixOS (unless you’re interacting with projects with any OpenGL-related stuff). [1] -
./templates/
contains my custom templates handy for quickly initializing for various types of projects. -
./users/
contains my github:nix-community/home-manager[opts=repo] configurations. It is exported in the flakes atoutputs.homeConfigurations
. For more information, see the github:{github-repo}[related documentation, path=./users/README.adoc, rev=master].