Compare commits

..

2 Commits

Author SHA1 Message Date
c53b82f0a1 fix: move dotfiles to ~/dotfiles; update docs; defer docker 2026-02-08 16:53:57 +11:00
556813c3fa fix: use ~/dotfiles, update docs, and disable Docker
Co-authored-by: aider (openrouter/openai/gpt-5.2) <aider@aider.chat>
2026-02-08 16:40:45 +11:00
16 changed files with 203 additions and 96 deletions

1
1)
View File

@@ -1 +0,0 @@
git ls-files results/generated_home.nix

View File

@@ -1 +0,0 @@
git ls-files results/generated_home.nix

View File

@@ -1 +0,0 @@
git ls-files results/generated_home.nix

View File

@@ -1 +0,0 @@
git rm --cached results/generated_home.nix

View File

@@ -1,3 +0,0 @@
nix flake lock
git add flake.lock
git commit -m "Add flake.lock"

View File

@@ -1 +0,0 @@
git ls-files results/generated_home.nix

2
dfsdw
View File

@@ -1,2 +0,0 @@
* master
remotes/origin/main

View File

@@ -11,6 +11,8 @@ This guide assumes:
- Your config repo is a flake with output: `#sam-4screen-desktop`
- Integral300 (ext4) is available and will be mounted on NixOS at: /data
- UUID: 27febd74-20aa-4a3a-92c1-6fdd1ad7e88e
- Dotfiles will live on the installed system at:
- `~/dotfiles` (NOT on /data)
Important constraints:
- `hosts/sam-4screen-desktop/hardware-configuration.nix` is currently a placeholder.
@@ -35,7 +37,7 @@ Important constraints:
3) Commit your changes:
- `git status`
- `git add -A`
- `git commit -m "chore: prep install guide + dotfiles links"`
- `git commit -m "chore: prep install guide + HM config"`
4) Push to Gitea:
- `git push`
@@ -149,13 +151,19 @@ or:
3) Verify SSH works (from another machine):
- `ssh sam@192.168.20.27`
4) Verify /data mounted:
4) Verify /data mounted (this is for your storage drive and for accessing the config repo if you keep it there):
- `mount | grep ' /data '`
- `ls -la /data/home_sam_ubuntu/dotfiles`
5) Home Manager activation:
- `home-manager` is integrated via NixOS switch; it should apply on rebuild.
- If dotfiles symlinks fail, confirm `/data` is mounted and the dotfiles paths exist.
5) Put dotfiles onto the system at ~/dotfiles
Option A (recommended): clone dotfiles repo:
- `git clone <your-dotfiles-repo-url> ~/dotfiles`
Option B: copy from Integral300 if they currently only live there:
- `cp -a /data/home_sam_ubuntu/dotfiles ~/dotfiles`
6) Verify dotfiles exist:
- `ls -la ~/dotfiles`
---

View File

@@ -1,33 +1,53 @@
# NixOS Build Spec (sam-4screen-desktop)
## Disk / Boot (DO NOT BRICK WINDOWS)
## Disk / Boot (WIPE ENTIRE NVMe DISK)
Target disk: /dev/nvme0n1
- Size: 953.87 GiB (1024209543168 bytes), 2000409264 sectors
- Model: PM951 NVMe SAMSUNG 1024GB
- NVMe serial: S2FZNXAH301424
- NVMe WWID: nvme.144d-2020202020205332465a4e584148333031343234-504d393531204e564d652053414d53554e4720313032344742-00000001
- Sector size (logical/physical): 512 bytes / 512 bytes
Install target is NVMe only. Do not select /dev/sdX devices in the installer.
Device names like /dev/sdb, /dev/sdc can change across boots; always rely on UUID/label.
NOTE: GPT partition table entries may not be stored/printed in on-disk (Start sector) order.
- Do NOT rely on the order shown by some tools.
- Always identify partitions by (partition number + type + UUID/label).
- If you need the physical order, sort by the “Start” sector column (e.g. `fdisk -l` output).
DECISION (CONFIRMED):
- Do NOT keep Windows.
- Wipe the entire /dev/nvme0n1 (all existing partitions will be deleted/overwritten).
Verification commands (run before formatting):
Installer safety:
- Install target is NVMe only. Do not select /dev/sdX devices in the installer.
- Device names like /dev/sdb, /dev/sdc can change across boots; always rely on UUID/label when mounting non-target disks.
Verification commands (run before wiping, if you want one last check):
- `lsblk -o NAME,SIZE,TYPE,FSTYPE,LABEL,UUID,MOUNTPOINTS`
- `sudo fdisk -l /dev/nvme0n1` (interpret physical order by sorting on Start)
- `sudo blkid /dev/nvme0n1p1 /dev/nvme0n1p3 /dev/nvme0n1p4 /dev/nvme0n1p5`
- `sudo fdisk -l /dev/nvme0n1`
KEEP (do not format):
- /dev/nvme0n1p1 (EFI vfat) UUID=94CC-9DA4 (~99MiB, FAT32, mounted at /boot/efi)
- /dev/nvme0n1p2 (MS reserved) (~15MiB)
- /dev/nvme0n1p3 (Windows NTFS) UUID=8294CD2994CD2111 (~503GiB)
- /dev/nvme0n1p4 (Windows recovery NTFS) UUID=6E1AA32B1AA2EEF1 (~529MiB)
Boot method:
- UEFI
- Bootloader: systemd-boot
WIPE + install NixOS here:
- /dev/nvme0n1p5 (currently Ubuntu ext4 /) UUID=4e99904c-ce6f-4c3c-898a-e29cfc373489 (~449GiB)
Filesystem / layout:
- Root filesystem: Btrfs (with subvolumes)
- Encryption: none
- Swap: zram
- Hibernate: no
- /home: Btrfs subvolume
Partitioning approach:
- Manual in the installer (no disko)
Recommended layout:
- New GPT on /dev/nvme0n1
- EFI System Partition (vfat), mounted at /boot
- Btrfs partition for the rest
- Subvolume @ mounted at /
- Subvolume @home mounted at /home
IMPORTANT:
- `hosts/sam-4screen-desktop/hardware-configuration.nix` is currently a placeholder.
- During install after mounting to /mnt:
1) Run: `nixos-generate-config --root /mnt`
2) Copy: `/mnt/etc/nixos/hardware-configuration.nix` into:
`hosts/sam-4screen-desktop/hardware-configuration.nix`
## Other attached disks (DO NOT FORMAT)
- /dev/sda (240GB) model: Patriot Burst El (KEEP)
@@ -36,27 +56,38 @@ WIPE + install NixOS here:
- TempBackup (ext4) UUID=4f9c4bd5-fea5-408f-9370-731fc095da3f (~465GiB/500GB) (KEEP)
- Model: WD5000BEVT-22ZAT
- Serial: WD-WXNY08ND2684
- NOTE: device name may appear as /dev/sdb or /dev/sdc depending on boot/USB order; identify by UUID/label/model.
- Integral300 (ext4) UUID=27febd74-20aa-4a3a-92c1-6fdd1ad7e88e (~298GiB/320GB) (mount at /data)
- NOTE: device name may appear as /dev/sdX depending on boot/USB order; identify by UUID/label/model.
- Integral300 (ext4) UUID=27febd74-20aa-4a3a-92c1-6fdd1ad7e88e (~298GiB/320GB)
- Mount at /data
- NOTE: device name may change; config always uses /dev/disk/by-uuid.
- XPSystemDrive (ext4) UUID=82c994f1-9adb-49e4-ba1e-5b6e5ccbd49b (~149GiB/160GB) (KEEP)
- Model: HTS541616J9SA00 (Hitachi)
- NOTE: device name may appear as /dev/sdX depending on boot/USB order; identify by UUID/label/model.
- Observed in hardware scan: `/dev/sde` (do not rely on this).
Bootloader:
- systemd-boot, using the existing EFI partition (/dev/nvme0n1p1)
## Networking
- Use NetworkManager
- Static IPv4 for wired: enp0s31f6 = 192.168.20.27/24
- Gateway: 192.168.20.1
- DNS: 192.168.20.35, 192.168.20.13
Static IPv4 policy (CONFIRMED):
- Static IPv4 should be applied to Wi-Fi SSID:
- SSID / connection id: "Aussie Broadband 8729"
- Interface: wlp4s2
- IP: 192.168.20.27/24
- Gateway: 192.168.20.1
- DNS: 192.168.20.35, 192.168.20.13
- Wired enp0s31f6: no static IP required for now
Secrets policy:
- Do not commit Wi-Fi PSKs to git.
- Static IP enforcement is implemented via a NetworkManager dispatcher script.
## Data drive mount
- Integral300 ext4 UUID=27febd74-20aa-4a3a-92c1-6fdd1ad7e88e
- Mountpoint on NixOS: /data (preferred)
## Dotfiles policy
- Dotfiles live on the installed system at: ~/dotfiles
- Do not depend on /data for dotfiles.
## Desktop
- Primary compositor: Niri
- Display/login manager: greetd + tuigreet

View File

@@ -26,9 +26,12 @@ Legend:
### Core system services
- **NetworkManager**
- Static IPv4 for wired: `enp0s31f6 = 192.168.20.27/24`
- Gateway: `192.168.20.1`
- DNS: `192.168.20.35`, `192.168.20.13`
- Static IPv4 is enforced on Wi-Fi SSID: **"Aussie Broadband 8729"**
- Interface: **wlp4s2**
- IP: **192.168.20.27/24**
- Gateway: **192.168.20.1**
- DNS: **192.168.20.35**, **192.168.20.13**
- Wired **enp0s31f6**: no static IP required for now (DHCP/unused)
- **OpenSSH server** (sshd)
- **PipeWire audio** (Pulse + ALSA) + **WirePlumber**
- **Firewall** (NixOS default; open SSH port only)

View File

@@ -1,12 +1,10 @@
{ config, pkgs, ... }:
let
# After install, Integral300 is mounted at /data (per your NixOS config).
# These dotfiles are stored on that drive.
dotfilesDir = "/data/home_sam_ubuntu/dotfiles";
# Dotfiles live on the installed system itself at: ~/dotfiles
dotfilesDir = "${config.home.homeDirectory}/dotfiles";
# Home Manager helper to symlink files/dirs that live outside the Nix store.
# This is the correct mechanism for "dotfiles stored on /data".
mkOOS = config.lib.file.mkOutOfStoreSymlink;
in
{
@@ -37,11 +35,11 @@ in
};
# Dotfiles integration notes:
# - I am NOT symlinking ~/.zshrc directly because Home Manager manages it.
# - If you have extra Zsh snippets in your dotfiles repo that you want sourced,
# tell me the exact filename(s) and well add them here safely.
# - Home Manager manages ~/.zshrc; do not symlink ~/.zshrc directly.
# - If you want to source additional Zsh snippets from ~/dotfiles, tell me
# the exact filename(s) and well add them safely here.
initExtra = ''
# Optional: source additional Zsh config from /data dotfiles if you want.
# Optional: source additional Zsh config from ~/dotfiles if desired.
# Example (uncomment + adjust if you confirm the exact file path):
# if [ -f "${dotfilesDir}/zsh/extra.zsh" ]; then
# source "${dotfilesDir}/zsh/extra.zsh"
@@ -111,20 +109,18 @@ in
];
# ---
# Dotfiles (out-of-store symlinks from /data)
# Dotfiles (out-of-store symlinks from ~/dotfiles)
# ---
# IMPORTANT:
# - These paths must exist on the machine at activation time.
# - This assumes your dotfiles are available at:
# /data/home_sam_ubuntu/dotfiles/<app>
# - If you rename/move the dotfiles directory, update dotfilesDir above.
# - These symlinks will point into ~/dotfiles.
# - Ensure you clone/copy your dotfiles to ~/dotfiles on the new system.
home.file.".config/atuin".source = mkOOS "${dotfilesDir}/atuin";
home.file.".config/kitty".source = mkOOS "${dotfilesDir}/kitty";
home.file.".config/nvim".source = mkOOS "${dotfilesDir}/nvim";
home.file.".config/zellij".source = mkOOS "${dotfilesDir}/zellij";
# TODO (needs confirmation from you):
# - zsh dotfiles: what exact files do you want sourced/linked?
# - zsh dotfiles: what exact files do you want sourced?
# - pk10k: what is the exact filename for your p10k config?
#
# Once you confirm, we can add e.g.:

View File

@@ -31,7 +31,7 @@
networking.networkmanager.enable = true;
# Static IP policy:
# - You confirmed the static IP must be on Wi-Fi SSID "Aussie Broadband 8729"
# - Static IP must be on Wi-Fi SSID "Aussie Broadband 8729"
# - Do NOT store Wi-Fi secrets (PSK) in git-tracked Nix files
#
# Approach:
@@ -105,7 +105,7 @@
users.users.sam = {
isNormalUser = true;
description = "Sam";
extraGroups = [ "wheel" "networkmanager" "docker" "video" "render" ];
extraGroups = [ "wheel" "networkmanager" "video" "render" ];
shell = pkgs.zsh;
};
@@ -172,9 +172,9 @@
zramSwap.enable = true;
# ---
# Docker
# Docker (DEFER for now)
# ---
virtualisation.docker.enable = true;
virtualisation.docker.enable = false;
# ---
# Mounts

View File

@@ -0,0 +1,16 @@
Disk /dev/nvme0n1: 953.87 GiB, 1024209543168 bytes, 2000409264 sectors
Disk model: PM951 NVMe SAMSUNG 1024GB
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 3C752166-F3F5-4EE6-B50A-B240D0FD272D
Device Start End Sectors Size Type
/dev/nvme0n1p1 2048 206847 204800 100M EFI System
/dev/nvme0n1p2 206848 239615 32768 16M Microsoft reserved
/dev/nvme0n1p3 239616 1057007615 1056768000 503.9G Microsoft basic data
/dev/nvme0n1p4 1999321088 2000406527 1085440 530M Windows recovery environment
/dev/nvme0n1p5 1057007616 1999321087 942313472 449.3G Linux filesystem
Partition table entries are not in disk order.

View File

@@ -0,0 +1,4 @@
lo UNKNOWN 00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP>
enp0s31f6 UP d8:9e:f3:07:bf:05 <BROADCAST,MULTICAST,UP,LOWER_UP>
wlp4s2 UP 80:1f:02:4f:18:ae <BROADCAST,MULTICAST,UP,LOWER_UP>
tailscale0 UNKNOWN <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP>

View File

@@ -0,0 +1,60 @@
NAME SIZE TYPE FSTYPE LABEL UUID MOUNTPOINTS
loop0 332.2M loop squashfs /snap/code/218
loop1 4K loop squashfs /snap/bare/5
loop2 332.2M loop squashfs /snap/code/220
loop3 63.8M loop squashfs /snap/core20/2682
loop4 55.5M loop squashfs /snap/core18/2976
loop5 63.8M loop squashfs /snap/core20/2686
loop6 55.5M loop squashfs /snap/core18/2979
loop7 73.9M loop squashfs /snap/core22/2216
loop8 74M loop squashfs /snap/core22/2292
loop9 66.8M loop squashfs /snap/core24/1267
loop10 66.9M loop squashfs /snap/core24/1349
loop12 251.7M loop squashfs /snap/firefox/7720
loop13 18.5M loop squashfs /snap/firmware-updater/210
loop14 16.4M loop squashfs /snap/firmware-updater/216
loop15 164.8M loop squashfs /snap/gnome-3-28-1804/198
loop16 349.7M loop squashfs /snap/gnome-3-38-2004/143
loop17 516.2M loop squashfs /snap/gnome-42-2204/226
loop18 531.4M loop squashfs /snap/gnome-42-2204/247
loop19 669.8M loop squashfs /snap/gnome-46-2404/145
loop20 606.1M loop squashfs /snap/gnome-46-2404/153
loop21 91.7M loop squashfs /snap/gtk-common-themes/1535
loop22 395M loop squashfs /snap/mesa-2404/1165
loop23 290.8M loop squashfs /snap/mesa-2404/912
loop24 92.5M loop squashfs /snap/mqtt-explorer/31
loop25 6.9M loop squashfs /snap/notepad-plus-plus/412
loop26 56.6M loop squashfs /snap/nushell/1736
loop27 54.9M loop squashfs /snap/nushell/1927
loop28 10.8M loop squashfs /snap/snap-store/1270
loop29 17.5M loop squashfs /snap/snap-store/1300
loop30 50.9M loop squashfs /snap/snapd/25577
loop31 48.1M loop squashfs /snap/snapd/25935
loop32 576K loop squashfs /snap/snapd-desktop-integration/343
loop33 576K loop squashfs /snap/snapd-desktop-integration/315
loop34 189.6M loop squashfs /snap/spotify/88
loop35 196.6M loop squashfs /snap/spotify/89
loop36 81.9M loop squashfs /snap/telegram-desktop/6869
loop37 82.1M loop squashfs /snap/telegram-desktop/6883
loop38 226.6M loop squashfs /snap/thunderbird/933
loop39 226.6M loop squashfs /snap/thunderbird/959
loop40 460.6M loop squashfs /snap/wine-platform-9-devel-core22/33
loop41 579.5M loop squashfs /snap/wine-platform-runtime-core22/110
loop42 576.1M loop squashfs /snap/wine-platform-runtime-core22/111
loop43 251.7M loop squashfs /snap/firefox/7766
sda 223.6G disk
├─sda1 16M part
└─sda2 223.6G part ntfs Back Up 0806B92006B90FA4 /media/sam/Back Up
sdb 149.1G disk
└─sdb1 149G part ext4 XPSystemDrive 82c994f1-9adb-49e4-ba1e-5b6e5ccbd49b /media/sam/XPSystemDrive
sdc 465.8G disk
└─sdc1 465.8G part ext4 TempBackup 4f9c4bd5-fea5-408f-9370-731fc095da3f /media/sam/TempBackup
sdd 298.1G disk
└─sdd1 298.1G part ext4 Integral300 27febd74-20aa-4a3a-92c1-6fdd1ad7e88e /media/sam/Integral300
sr0 1024M rom
nvme0n1 953.9G disk
├─nvme0n1p1 100M part vfat 94CC-9DA4 /boot/efi
├─nvme0n1p2 16M part
├─nvme0n1p3 503.9G part ntfs 8294CD2994CD2111 /media/sam/8294CD2994CD2111
├─nvme0n1p4 530M part ntfs 6E1AA32B1AA2EEF1
└─nvme0n1p5 449.3G part ext4 4e99904c-ce6f-4c3c-898a-e29cfc373489 /

65
plan.md
View File

@@ -1,56 +1,55 @@
You are a devops engineer.
You are brief and concise and will help guide me through my plan.
Plan is to migrate my ubuntu system on the main drive with OS installed to NixOS.
I think I have already backed up the required files from windows dual boot and Ubuntu to Inegral300 mount at /media/sam/Integral300/
I have backed up the required files from Windows dual boot and Ubuntu to Integral300 mounted at /media/sam/Integral300/
DECISION:
- We will WIPE the entire NVMe disk (/dev/nvme0n1). We are NOT keeping Windows partitions.
We need to check the nvme0n1p5 drive to make sure I have not missed a partition.
We need to make a list of software that needs to be installed on the NixOS. There are several files, and some folders to look through.
We need to create a finalized list of software to ensure we have what we need.
We do not need to include everything in the list, just the things I have installed and need that are not generic system utils. The list needs to be consise and withouit duplicate.
We do not need to include everything in the list, just the things I have installed and need that are not generic system utils. The list needs to be concise and without duplicates.
Then we will be making a configuration.nix and using homemanager and flake.nix for the installtion on the new NixOS that we will store in the Ingrnal300 and push to my a gitea server I have on my home network.
Then we will be making a NixOS flake-based configuration using:
- hosts/sam-4screen-desktop/configuration.nix
- home-manager (home/sam/home.nix)
- flake.nix
I have dotfiles that will need to be included and we will use homemanger.
We will store/push this repo to my Gitea server so the config is available during install.
Dotfiles:
- Dotfiles will be placed on the new NixOS system at: ~/dotfiles
- Home Manager will symlink config from ~/dotfiles
We will be using Niri as the primary display.
- Display/login manager: greetd + tuigreet
- Start method: niri --session (do not use niri-session)
Networking:
- Use NetworkManager
- Static IP must be 192.168.20.27/24, applied on Wi-Fi SSID "Aussie Broadband 8729" (wlp4s2)
List folders and what they are and how to extract software.
Some software is in the ai dev plan. If this is easy to include thats ok. Otherwise I can integrate that once the system is running.
This approach applies to anything else that maybe problematic. We do not have to go all in at once. Get the main things working with niri, display manager, essential bash /zsh utils/, then dotfiles with homemanager, new ai, etc. Keep adding to successful install.
This approach applies to anything else that maybe problematic. We do not have to go all in at once. Get the main things working with niri, display manager, essential zsh utils, then dotfiles with homemanager, then AI tooling, etc. Keep adding to successful install.
I have a second machine on the desktop that can be used to ssh into this new NixOS if need be.
We need to ensure we set the IP to 192.168.20.27
ai_dev_plan.md this file contains software and a plan for a complex ai development set up. If these files can be included without major hassle that is fine. Otherwise skip and we I can implement as part of incremental set up.
niri-4screen.md this has documentation on how I implemented niri on my ubuntu and advice on how to implement it on nixos along with display manager and wayland etc.
previous_setup.md has info on how I set up my last system, this one is slightly different with more software, niri etc. But the idea and approach particularly with homemanager and dotfiles is important along ssh etc.
dotfiles are on this system at /media/sam/Integral300/data/home_sam_ubuntu/dotfiles/
previous_setup_software.md has more information on software than needs to be consolidated.
setup.md and software_to_add.md are again more files for software consolidation. Aprise and Obisidan can be left out, these wil be installed as docker containers later.
We need development frameworks for python, php, docker-compose, node.
Folder /docs has more directions for the PLAN and software list.
- docs/nixos_build_spec.md is the source-of-truth for disk/boot/network decisions.
- docs/software_inventory.md (or equivalent) is the source-of-truth for the final software list.
Folder /logs has some scans and hardware profiles which can be used for planning and software.
Folder /logs has some scans and hardware profiles which can be used for planning and software. Including looking at the disks. Please ask for more info on the disks if needed.
Folder /results has the original migration configuration.nix results . We will eventually replicate this and create a new more upto date one. This can be used as a reference if needed.
Reminder we only formatting and reninstalling on the drive with the ubuntu OS and windows partition.
Folder /results has the original migration configuration.nix results. We will eventually replicate this and create a new more up to date one. This can be used as a reference if needed.
Please ask questions, request access to file systems where needed.
Summary.
Build list. Finalize list in collaboration with me. Build configuration.nix. Store in Integral300 and gitea. Install NixOS, configure nixos with the set up we have created.
Summary:
- Build software list
- Finalize list in collaboration with me
- Build NixOS configuration (flake + home-manager)
- Push to Gitea
- Install NixOS (wipe entire NVMe)
- Generate and commit hardware-configuration.nix during install
- Boot into NixOS, clone/copy dotfiles to ~/dotfiles, verify Niri + static IP + SSH