Compare commits

6 Commits

Author SHA1 Message Date
Sovran_Systems
6bd11be8b5 Merge pull request #84 from naturallaw777/copilot/add-hardware-configuration-to-modules
Fix nixos-install: wire hardware-configuration.nix into flake and installer
2026-04-05 12:51:00 -05:00
Sovran_Systems
f294828409 Merge pull request #83 from naturallaw777/copilot/add-internal-drive-check-role-cards
[WIP] Add internal drive check for role selection in push_welcome
2026-04-05 12:50:48 -05:00
copilot-swe-agent[bot]
953271eeee grey out node/server roles when no second internal drive detected
Agent-Logs-Url: https://github.com/naturallaw777/staging_alpha/sessions/30ed5e6b-2d61-415c-ba07-aba31dbcd839

Co-authored-by: naturallaw777 <99053422+naturallaw777@users.noreply.github.com>
2026-04-05 17:50:20 +00:00
copilot-swe-agent[bot]
70f3cef03a Fix NixOS install: add hardware-configuration.nix to flake modules and installer
Agent-Logs-Url: https://github.com/naturallaw777/staging_alpha/sessions/5db1cd99-2067-4b5c-ba11-3e9aa8fde973

Co-authored-by: naturallaw777 <99053422+naturallaw777@users.noreply.github.com>
2026-04-05 17:50:18 +00:00
copilot-swe-agent[bot]
c9a5a4dec9 Initial plan 2026-04-05 17:48:34 +00:00
copilot-swe-agent[bot]
37cc35bb1b Initial plan 2026-04-05 17:48:12 +00:00
2 changed files with 30 additions and 4 deletions

View File

@@ -25,6 +25,7 @@
modules = [ modules = [
{ nixpkgs.hostPlatform = "x86_64-linux"; } { nixpkgs.hostPlatform = "x86_64-linux"; }
self.nixosModules.Sovran_SystemsOS self.nixosModules.Sovran_SystemsOS
/etc/nixos/hardware-configuration.nix
/etc/nixos/role-state.nix /etc/nixos/role-state.nix
/etc/nixos/custom.nix /etc/nixos/custom.nix
]; ];

View File

@@ -339,6 +339,23 @@ class InstallerWindow(Adw.ApplicationWindow):
"Node (Bitcoin-only)"), "Node (Bitcoin-only)"),
] ]
# Detect internal (non-USB) drives to gate role availability
try:
raw = run(["lsblk", "-b", "-dno", "NAME,SIZE,TYPE,RO,TRAN", "-e", "7,11"])
internal_disks = []
for line in raw.splitlines():
parts = line.split()
if len(parts) >= 4 and parts[2] == "disk" and parts[3] == "0":
tran = parts[4] if len(parts) >= 5 else ""
if tran != "usb":
internal_disks.append(parts[0])
except Exception:
internal_disks = []
has_second_drive = len(internal_disks) >= 2
NEEDS_DATA_DRIVE = {"Server+Desktop", "Node (Bitcoin-only)"}
self._role_radios = [] self._role_radios = []
radio_group = None radio_group = None
cards_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=8) cards_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=8)
@@ -348,14 +365,22 @@ class InstallerWindow(Adw.ApplicationWindow):
for label, desc, key in roles: for label, desc, key in roles:
card = Adw.ActionRow() card = Adw.ActionRow()
card.set_title(label) card.set_title(label)
card.set_subtitle(desc)
available = has_second_drive or key not in NEEDS_DATA_DRIVE
if not available:
card.set_subtitle(desc + "\n⚠ Requires a second internal drive (not detected)")
card.set_sensitive(False)
else:
card.set_subtitle(desc)
radio = Gtk.CheckButton() radio = Gtk.CheckButton()
radio.set_name(key) radio.set_name(key)
if radio_group is None: radio.set_sensitive(available)
if radio_group is None and available:
radio_group = radio radio_group = radio
radio.set_active(True) radio.set_active(True)
else: elif radio_group is not None:
radio.set_group(radio_group) radio.set_group(radio_group)
card.add_prefix(radio) card.add_prefix(radio)
@@ -814,7 +839,6 @@ class InstallerWindow(Adw.ApplicationWindow):
status = Adw.StatusPage() status = Adw.StatusPage()
status.set_title("Drives Ready") status.set_title("Drives Ready")
status.set_description("Your drives have been partitioned successfully.") status.set_description("Your drives have been partitioned successfully.")
status.set_icon_name("emblem-ok-symbolic")
status.set_vexpand(True) status.set_vexpand(True)
details = Adw.PreferencesGroup() details = Adw.PreferencesGroup()
@@ -883,6 +907,7 @@ class InstallerWindow(Adw.ApplicationWindow):
run(["sudo", "mkdir", "-p", "/etc/nixos"]) run(["sudo", "mkdir", "-p", "/etc/nixos"])
run(["sudo", "cp", "/mnt/etc/nixos/role-state.nix", "/etc/nixos/role-state.nix"]) run(["sudo", "cp", "/mnt/etc/nixos/role-state.nix", "/etc/nixos/role-state.nix"])
run(["sudo", "cp", "/mnt/etc/nixos/custom.nix", "/etc/nixos/custom.nix"]) run(["sudo", "cp", "/mnt/etc/nixos/custom.nix", "/etc/nixos/custom.nix"])
run(["sudo", "cp", "/mnt/etc/nixos/hardware-configuration.nix", "/etc/nixos/hardware-configuration.nix"])
run_stream([ run_stream([
"sudo", "nixos-install", "sudo", "nixos-install",