diff --git a/hardwareconfigurator.sh b/hardwareconfigurator.sh new file mode 100755 index 0000000..a7d97c6 --- /dev/null +++ b/hardwareconfigurator.sh @@ -0,0 +1,120 @@ +#!/usr/bin/env bash +set -e + +[[ $EUID -ne 0 ]] && echo "Run with sudo" && exit 1 + +# ── CPU ────────────────────────────────────────────────────────────────────── +VENDOR=$(grep -m1 'vendor_id' /proc/cpuinfo | awk '{print $3}') +if [[ "$VENDOR" == "AuthenticAMD" ]]; then + CPU_MICROCODE="hardware.cpu.amd.updateMicrocode" + CPU_KVM="kvm-amd" +else + CPU_MICROCODE="hardware.cpu.intel.updateMicrocode" + CPU_KVM="kvm-intel" +fi + +# ── GPU ────────────────────────────────────────────────────────────────────── +HAS_AMD=false +HAS_NVIDIA=false +lspci | grep -qi 'amd\|radeon' && HAS_AMD=true +lspci | grep -qi 'nvidia' && HAS_NVIDIA=true + +if $HAS_AMD && $HAS_NVIDIA; then + GPU_DRIVER="hybrid-amd-nvidia" +elif $HAS_AMD; then + GPU_DRIVER="amd" +elif $HAS_NVIDIA; then + GPU_DRIVER="nvidia" +else + GPU_DRIVER="intel" +fi + +echo "CPU: $VENDOR → $CPU_KVM" +echo "GPU: $GPU_DRIVER" +echo "" + +INITRD_MODULES="" +if [[ "$GPU_DRIVER" == "hybrid-amd-nvidia" ]]; then + INITRD_MODULES="\"amdgpu\" \"nvidia\" \"nvidia_modeset\" \"nvidia_uvm\" \"nvidia_drm\"" +elif [[ "$GPU_DRIVER" == "intel" ]]; then + INITRD_MODULES="\"i915\"" +elif [[ "$GPU_DRIVER" == "amd" ]]; then + INITRD_MODULES="\"amdgpu\"" +elif [[ "$GPU_DRIVER" == "nvidia" ]]; then + INITRD_MODULES="\"nvidia\" \"nvidia_modeset\" \"nvidia_uvm\" \"nvidia_drm\"" +fi + +# ── Disks ──────────────────────────────────────────────────────────────────── +lsblk -o NAME,SIZE,FSTYPE,UUID,MOUNTPOINT +echo "" + +read -rp "Root partition (e.g. /dev/sda2): " ROOT_PART +[[ ! -b "$ROOT_PART" ]] && echo "Invalid partition" && exit 1 +ROOT_UUID=$(blkid -s UUID -o value "$ROOT_PART") +ROOT_FSTYPE=$(blkid -s TYPE -o value "$ROOT_PART") +echo "Root → $ROOT_UUID ($ROOT_FSTYPE)" + +read -rp "Boot/EFI partition (e.g. /dev/sda1): " BOOT_PART +[[ ! -b "$BOOT_PART" ]] && echo "Invalid partition" && exit 1 +BOOT_UUID=$(blkid -s UUID -o value "$BOOT_PART") +echo "Boot → $BOOT_UUID" + +EXTRA_BLOCK="" +read -rp "Extra partition? (leave empty to skip): " EXTRA_PART +if [[ -n "$EXTRA_PART" ]]; then + EXTRA_UUID=$(blkid -s UUID -o value "$EXTRA_PART") + EXTRA_FSTYPE=$(blkid -s TYPE -o value "$EXTRA_PART") + read -rp "Mount point (e.g. /mnt/hdd): " EXTRA_MOUNT + EXTRA_BLOCK=" + fileSystems.\"$EXTRA_MOUNT\" = { + device = \"/dev/disk/by-uuid/$EXTRA_UUID\"; + fsType = \"$EXTRA_FSTYPE\"; + options = [ \"defaults\" \"nofail\" ]; + }; +" +fi + +# ── Write hardware.nix ─────────────────────────────────────────────────────── +cat > ./hardware.nix <