.git-crypt | ||
hosts | ||
lib | ||
local | ||
modules | ||
pkgs | ||
profiles | ||
secrets | ||
users/nrd | ||
.envrc | ||
.gitattributes | ||
.gitignore | ||
configuration.nix | ||
COPYING | ||
flake.lock | ||
flake.nix | ||
README.md | ||
shell.nix |
Introduction
This project is under construction as a rewrite of my legacy NixOS configuration, using the experimental flakes mechanism.
Flake Talk
Usage
Enter a nix-shell either manually or automatically using direnv. This
will set up the exerimental nix features that need to be available to use
flakes. A basic rebuild
command is included in the shell to replace
nixos-rebuild
for now.
Usage: rebuild [host] {switch|boot|test}
You can specify one of the host configurations from the hosts directory. If omitted, it will default to your systems current hostname.
In addtion:
rebuild iso
Will make a minimal and bootable iso image of the niximg configuration. You can customize the image by editing this file.
You can also install the packages declared in pkgs without needing to install NixOS. For example:
# from top-level
nix profile install ".#packages.x86_64-linux.purs"
Contributing
The purpose of this repository is to allow for simpler modularity and maintainability than was achieved in a previous effort. Flakes, along with a standardized structure, make this simple.
Hosts
Distributions for particular machines should be stored in the hosts
directory. Every file in this directory will be added automatically to the
available NixOS configurations available in the nixosConfigurations
flake
output. See the default.nix
for implementation details.
Profiles
More abstract configurations that can be reused by multiple machines should
go in the profiles directory. It's structure is pretty straight
forward. Just have a look to get an idea. Every profile should have a
default.nix
to easily import it. You can also stick things in the profile's
subdirectory which are not automatically imported by its default.nix
but are
meant to be manually imported from a host (useful for less common, or
specialized configurations).
In addition, profiles can depend on other profiles. For example, The
graphical profile depends on develop
simply by importing it in its default.nix
.
Users
User declaration belongs in the users directory. Everything related to your user should be declared here. For convenience, home-manager is available automatically for home directory setup.
Modules and Packages
All modules and pkgs are available
for every configuration automatically. Simply add a *.nix
file to one of
these directories declaring your module or package, and update the
corresponding default.nix
to point to it. Now you can use your new module or
install your new package as usual.
Doing this will also add them to the flake's nixosModules
or overlays
outputs to import them easily into an external NixOS configuration as well.
Pull Requests
If you'd like to add a package, module, profile or host configuration please
be sure to format your code with nixpkgs-fmt
before
opening a pull-request. The commit message follows the same semantics as
nixpkgs. You can use a #
symbol to specify abiguities. For example,
develop#zsh: <rest of commit message>
would tell me that your updating the
zsh
configuration living under the develop
profile.
License
This software is licensed under the MIT License.
Note: MIT license does not apply to the packages built by this configuration, merely to the files in this repository (the Nix expressions, build scripts, NixOS modules, etc.). It also might not apply to patches included here, which may be derivative works of the packages to which they apply. The aforementioned artifacts are all covered by the licenses of the respective packages.