# 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 home-manager https://github.com/nix-community/home-manager/archive/release-22.11.tar.gz nixpkgs https://nixos.org/channels/nixos-22.11 ``` ## Layout 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`. - `felonyspork/` is the bastion/external server (Lenovo Tiny) - `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 `felonyspork`. - `ops/` contains all the information needed to deploy using `morph`. The import structure goes as follows: - The `ops//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//configuration.nix` file, which configures NixOS on the host and imports - appropriate `common/fragments/.nix` files, for specific services or use cases. - the hosts's `hosts//hardware-configuration.nix` file, which configures partitions and drivers. - the host's `hosts//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/.nix`, which configures a specific use case, like graphical programs or Rust development. ## Unconfigured Currently, the primary dependencies are: - DNS that sets the crimespoon and felonyspork names - Mullvad VPN config on crimespoon, allowing LAN connections ## Deployment Simply run `push`: ```sh $ ops/home/push ``` To push to only a single machine, use `ops/home/push --on `.