Skip to content

Latest commit

 

History

History
86 lines (64 loc) · 2.24 KB

README.md

File metadata and controls

86 lines (64 loc) · 2.24 KB

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 purposes
  • assets: Media or files that don't fit in Nix files
  • home-manager: Home Manager specific
    • fragments: Home Manager configuration fragments
    • options: Home Manager configuration flags
    • profiles: Base Home Manager configurations to build upon (e.g. desktop, minimal)
  • lib: Additional custom lib and flake helpers
  • modules: modules that fill a missing feature of NixOS or Home Manager
  • nixos: NixOS related config
    • hardware/<hostname>.nix: Device-specific settings like settings generated by nixos-generate-config
    • layout/<layout>.nix: Disko disk layouts used by managedDiskLayout (e.g luks-btrfs)
    • fragments: Opinionated NixOS configuration fragments
    • profiles/<profile>.nix: Base system configurations to build upon (e.g. laptop, installer)
  • overlays: Just plain Nix overlays
  • pkgs: Custom packages either not eligible or missing from repositories
  • secrets: agenix encrypted secrets
  • templates: Quickstart files for different languages

Quick snippets and guide 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 HM 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.

Milo Moisson © 2023-2024