This repository manages system configurations for all of my macOS, nixOS, and linux machines.
This repository is a flake. All system configurations are defined
in flake.nix. Platorm specific configurations are found defined in the flake outputs
darwinConfigurations
, nixosConfigurations
for macOS and NixOS respectively.
Nix-Darwin and NixOS configurations share as much overlap as possible in the common module, ./modules/common.nix. Platform specific modules add onto the common module in ./modules/darwin/default.nix and ./modules/nixos/default.nix for macOS and NixOS respectively.
My home-manager configuration is entirely decoupled from NixOS and nix-darwin configurations. This means that all of its modules are found in ./modules/home-manager. These modules are imported into all other configurations in the common module similarly to this:
{ config, pkgs, ... }: {
home-manager.users.djames = import ./home-manager/home.nix;
}
This means that home.nix is fully compatible as a standalone configuration, managed with the home-manager
CLI.
This allows close replication of any user config for any linux system running nix. These configurations are defined in the homeConfigurations
output.
User "profiles" are specified in ./profiles; these modules configure contextual, identity-specific settings such as SSL certificates or work vs. personal email addresses. When possible, home-manager functionality is extracted into ./profiles/home-manager, as mentioned previously
Run the installer script to perform a multi-user installation on darwin or linux:
curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install
Note that this step is naturally skipped on NixOS since nix
is the package manager by default.
Follow the installation instructions, then run
sudo nixos-install --flake github:davejames/system#phil
Clone this repository into ~/.nixpkgs
with
git clone https://github.com/davejames/system ~/.nixpkgs
You can bootstrap a new system with the bootstrap
command:
nix run .#sysdo bootstrap
This will attempt to detect the host system and install nix-darwin or home-manager, but this behavior can be overridden using the --darwin
or --home-manager
flags.
The sysdo
utility is a python script that wraps nix
, darwin-rebuild
, nixos-rebuild
,
and home-manager
commands to provide a consistent interface across multiple platforms. It has some dependencies which are defined in the devShell
flake output. Documentation for this tool is found in sysdo.md.