My NixOS and Nix home-manager configurations for my various machines, including a deployment with morph.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Leonora Tindall 47a319eac8
add backup script, akina to moria via crimespoon
3 months ago
common better minecraft setup 3 months ago
external Removed unused nixpkgs checkout 5 months ago
files Reorganization and readme 8 months ago
hosts add backup script, akina to moria via crimespoon 3 months ago
ops/home use ssh config to target hosts 3 months ago
.gitignore Initial commit for just calembel. 8 months ago
.gitmodules Removed unused nixpkgs checkout 5 months ago
.ignore Use home-manager to build home packages and configs 8 months ago upgrade and use channels 3 months ago

Nora's Configs

The evolution of nora/dotfiles; Nix configs under home-manager deployed with morph.

Deployment Host

On the depoyment host, I use nix channels, and set:

$ nix-channel --list

$ echo $NIX_PATH


These files are "organized" as follows:

  • common/ is the directory where most of the configuration happens. These are the files used in more than one host configuration, now or later.
    • home_manager/ includes all common home-manager configs.
      • fragments/ contains package and configuration sets for specific use cases For example, home_manager/rust.nix includes packages and options related to Rust development.
      • common.nix contains all configurations common across all home-manager deployments. For example, GPG agent configurations and Vim settings.
    • users/ contains basic user definitions.
    • default.nix is the core file defining the default nix configuration for all machines.
    • common.nix contains all the common NixOS definitions that all machines will need.
    • fragments/ contains small functions for configuring particular services or system aspects, like Syncthing
  • files/ contains files used by home-manager to deploy anything not covered by existing home-manager options.
  • hosts/ defines host-specific configurations for NixOS and home-manager.
    • calembel/ is my Thelio (thelio-r1)
      • configuration.nix is the core NixOS configuration file, copied from the installed system
      • hardware-configuration.nix is the hardware config, imported in configuration.nix.
      • home.nix is the home-manager config specifically for calembel.
  • ops/ contains all the information needed to deploy using morph.

The import structure goes as follows:

  • The ops/<network>/network.nix file defining the hosts in a network imports
    • common/default.nix for all-machine defaults, which imports
      • common/common.nix for common setup, including fonts, nixpkgs setup, and locale, which imports
        • common/users/* which sets up usernames, shells, SSH keys, and groups for users.
    • the host's hosts/<host>/configuration.nix file, which configures NixOS on the host and imports
      • appropriate common/fragments/<fragment>.nix files, for specific services or use cases.
      • the hosts's hosts/<host>/hardware-configuration.nix file, which configures partitions and drivers.
    • the host's hosts/<host>/home.nix file, which configures home-manager for that host, by importing
      • common/home_manager/common.nix, which configures home-manager for all machines
      • various common/home_manager/fragments/<fragment>.nix, which configures a specific use case, like graphical programs or Rust development.


Simply run push:

$ ops/home/push

To push to only a single machine, use ops/home/push --on <machine>.