yep, more dotfiles
mrnossiom's NixOS and Home Manager configuration#
Options#
{
local.flags = {
onlyCached = true; # bool; dictate if you are to compile pkgs or use cache
};
local.fragment."<name>".enable = true; # bool; dictate whether to enable a fragment
}
Structure#
apps: Scripts serving dotfiles purposesassets: Media or files that don't fit in Nix fileshome-manager: Home Manager specificfragments: Home Manager configuration fragmentsoptions: Home Manager configuration flagsprofiles: Base Home Manager configurations to build upon (e.g.desktop,minimal)
lib: Additional custom lib and flake helpersmodules: modules that fill a missing feature of NixOS or Home Managernixos: NixOS related confighardware/<hostname>.nix: Device-specific settings like settings generated bynixos-generate-configlayout/<layout>.nix:Diskodisk layouts used bymanagedDiskLayout(e.gluks-btrfs)fragments: Opinionated NixOS configuration fragmentsprofiles/<profile>.nix: Base system configurations to build upon (e.g.laptop,installer)
overlays: Just plain Nix overlayspkgs: Custom packages either not eligible or missing from repositoriessecrets:agenixencrypted secretstemplates: Quickstart files for different languages
Quick snippets and guides for myself#
Add a new module#
-
Copy template and replace
<name>with module name{ config , lib , ... }: let cfg = config.local.fragment.<name>; in { options.local.fragment."<name>".enable = lib.mkEnableOption '' <name> related Depends on: - [<Condition>] <dependency>: <reason> - ... ''; config = lib.mkIf cfg.enable { assertions = [ { assertion = config."<dependency>"; message = "<name> module depends on <dependency>"; } ]; # put the rest of the config down below }; } -
Add the newly created file to Git.
-
Add the new module to the import list in
<type>/fragments/default.nix. -
Activate the module in the wanted profile.
Bootstrap lightweight home-manager config#
nix run nixpkgs#home-manager -- switch --flake .#lightweight
Add a new device#
- Rekey secrets with device root ssh key, and create a session age key.
Make a backup#
Pull up your favorite ArchaicBakup disc
-
Set environnement variables
RESTIC_REPOSITORY:/run/media/user/discname/RESTIC_PASSWORD_FILE: ? -
Initialize repository
restic init --repo /srv/restic-repo
Deploy server#
nixos-anywhere --flake .#weird-row-server user@ip
nixos-rebuild switch \
--flake .#weird-row-server \
--target-host 2a01:4f8:c2c:76d2::1 \
--use-remote-sudo
Milo Moisson © 2023-2025