Machine Management
These notes are still a work-in-progress and are currently largely for my personal use only.
Home-Manager Example
- Install Nix standalone:
curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install
- Set proper Nix settings in
/etc/nix/nix.conf:
substituters = https://cache.nixos.org/ https://github-public.cachix.org
trusted-public-keys = cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= github-public.cachix.org-1:xofQDaQZRkCqt+4FMyXS5D6RNenGcWwnpAXRXJ2Y5kc=
narinfo-cache-positive-ttl = 0
narinfo-cache-negative-ttl = 0
experimental-features = nix-command flakes auto-allocate-uids
- Add these Nix channels via
nix-channel --add URL NAME:
$ nix-channel --list
home-manager https://github.com/nix-community/home-manager/archive/release-25.11.tar.gz
nixpkgs https://nixos.org/channels/nixos-25.11
- Install home-manager: https://nix-community.github.io/home-manager/index.xhtml#sec-install-standalone
Example home.nix file for personal use:
{ config, pkgs, lib, ... }:
let
user = "andrew";
homedir = "/home/${user}";
anixsrc = ./path/to/sources/anixpkgs/.;
in with import ../dependencies.nix; {
home.username = user;
home.homeDirectory = homedir;
programs.home-manager.enable = true;
imports = [
"${anixsrc}/pkgs/nixos/components/opts.nix"
"${anixsrc}/pkgs/nixos/components/base-pkgs.nix"
"${anixsrc}/pkgs/nixos/components/base-dev-pkgs.nix"
"${anixsrc}/pkgs/nixos/components/x86-rec-pkgs.nix"
"${anixsrc}/pkgs/nixos/components/x86-graphical-pkgs.nix"
"${anixsrc}/pkgs/nixos/components/x86-graphical-dev-pkgs.nix"
"${anixsrc}/pkgs/nixos/components/x86-graphical-rec-pkgs.nix"
];
mods.opts.standalone = true;
mods.opts.homeDir = homedir;
mods.opts.homeState = "23.05";
mods.opts.browserExec = "google-chrome-stable";
}
*-rec-* packages can be removed for non-recreational use.
Symlink to ~/.config/home-manager/home.nix.
Corresponding ~/.bashrc:
export NIX_PATH=$HOME/.nix-defexpr/channels:/nix/var/nix/profiles/per-user/root/channels${NIX_PATH:+:$NIX_PATH}
. "$HOME/.nix-profile/etc/profile.d/hm-session-vars.sh"
export NIXPKGS_ALLOW_UNFREE=1
# alias code='codium'
# eval "$(direnv hook bash)"
Personal Machine Installation Instructions
Sources
- https://nixos.wiki/wiki/NixOS_Installation_Guide
- https://alexherbo2.github.io/wiki/nixos/install-guide/
- Build the installation ISO with
NIXPKGS_ALLOW_UNFREE=1 nix build .#nixosConfigurations.installer-personal.config.system.build.isoImage - Plug in a USB stick large enough to accommodate the image.
- Find the right device with
lsblkorfdisk -l. Replace/dev/sdXwith the proper device (do not use/dev/sdX1or partitions of the disk; use the whole disk/dev/sdX). - Burn ISO to USB stick with
dd if=result/iso/[...]linux.iso of=/dev/sdX bs=4M status=progress conv=fdatasync - On the new machine, one-time boot UEFI into the USB stick on the computer (will need to disable Secure Boot from BIOS first)
- Login as the user
andrew - Connect to the internet
- Within the installer, run
sudo anix-install - If everything went well, reboot
- On the next reboot, login as user
andrewagain - Connect to the internet
- Run
anix-init - Enjoy!
JetPack Machine Installation Instructions
- Ensure that the device has UEFI firmware installed. See https://github.com/anduril/jetpack-nixos.
- Build the installation ISO with
nix build .#nixosConfigurations.installer-jetpack.config.system.build.isoImage - Plug in a USB stick large enough to accommodate the image.
- Find the right device with
lsblkorfdisk -l. Replace/dev/sdXwith the proper device (do not use/dev/sdX1or partitions of the disk; use the whole disk/dev/sdX). - Burn ISO to USB stick with
dd if=result/iso/[...]linux.iso of=/dev/sdX bs=4M status=progress conv=fdatasync - Insert the USB drive into the Jetson device. On the AGX devkits, I’ve had the best luck plugging into the USB-C slot above the power barrel jack. You may need to try a few USB options until you find one that works with both the UEFI firmware and the Linux kernel.
- Press power / reset as needed. When prompted, press ESC to enter the UEFI firmware menu. In the “Boot Manager”, select the correct USB device and boot directly into it.
- Connect to the internet
- Within the installer, run
sudo anix-install - If everything went well, reboot
- On the next reboot, login as user
andrewagain - Connect to the internet
- Run
anix-init - Enjoy!
Upgrading NixOS versions with anixpkgs
Aside from the source code changes in anixpkgs, ensure that your channels have been updated for the root user:
# e.g., upgrading to 25.11:
home-manager https://github.com/nix-community/home-manager/archive/release-25.11.tar.gz
nixos https://nixos.org/channels/nixos-25.11
nixpkgs https://nixos.org/channels/nixos-25.11
sudo nix-channel --update. Then upgrade with
anix-upgrade [source specification] --local --boot
Build a JetPack Installer ISO
Cross-compiled from x86_64. Requires binfmt support for aarch64 (enabled by default on NixOS with boot.binfmt.emulatedSystems).
nix build .#nixosConfigurations.installer-jetpack.config.system.build.isoImage
dd if=result/iso/[...]linux.iso of=/dev/sdX bs=4M status=progress conv=fdatasync
Build a NixOS ISO Image
TODO (untested); work out hardware configuration portion.
nixos-generate -f iso -c /path/to/personal/configuration.nix [-I nixpkgs=/path/to/alternative/nixpkgs]
sudo dd if=/path/to/nixos.iso of=/dev/sdX bs=4M conv=fsync status=progress
Miscellaneous
Cloud Syncing
The following mount points are recommended (using rclone to set up):
dropbox:secrets->rclone copy->~/secretsdropbox:configs->rclone copy->~/configsdropbox:Games->rclone copy->~/gamesbox:data->rclone copy->~/databox:.devrc->rclone copy->~/.devrcdrive:Documents->rclone copy->~/Documents
Music with Tidal
If you haven’t already, run:
install-superdirt
Open VSCode, run sclang in the terminal (close with 0.exit), and open up a .tidal file and get to work.
Useful commands:
- Install samples with e.g.,
tidal-download-samples eddyflux/crate crate - When
sclangis running, associate with the correct audio device withsc-route-audio