hardware: overhaul hardware configuration

- moved nvidia prime `xxxBusId` to machines specific configuration
- moved hostname config to flake.nix
- added per-machine configuration
  (example usage: multiple machines with same model)
This commit is contained in:
Guanran Wang 2023-10-07 16:19:15 +08:00
parent 9f9e060584
commit 89f91afa4e
Signed by: nyancat
SSH key fingerprint: SHA256:8oWGKciPALWut/6WA27oFKofX+6Wtc0gQnsefXLQx/8
14 changed files with 134 additions and 73 deletions

View file

@ -40,57 +40,66 @@
};
outputs = { self, nixpkgs, berberman, home-manager, hosts, hyprland, lanzaboote, nix-darwin, sops-nix, ... } @ inputs: {
# nix-darwin (macOS)
darwinConfigurations = {
"iMac-macOS" = nix-darwin.lib.darwinSystem {
system = "x86_64-darwin";
specialArgs = { inherit inputs; };
modules = [
./darwin
./machines/darwin/imac-2017.nix
./users/guanranwang/darwin.nix
./flakes/darwin/home-manager.nix
./darwin # Entrypoint
./machines/darwin/imac-2017.nix # Hardware-specific configurations
# Machine-specific configurations (does such stuff even exist on nix-darwin)
./users/guanranwang/darwin.nix # User-specific configurations
./flakes/darwin/home-manager.nix # Flakes
{ networking.hostName = "iMac-macOS"; }
];
};
};
# NixOS
nixosConfigurations = {
"81fw-nixos" = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
specialArgs = { inherit inputs; };
modules = [
./nixos # Entrypoint
./machines/nixos/81fw-lenovo-legion-y7000.nix
./users/guanranwang/nixos.nix
./flakes/nixos/berberman.nix
./nixos # Entrypoint
./machines/nixos/81fw-lenovo-legion-y7000 # Hardware-specific configurations
./machines/nixos/81fw-lenovo-legion-y7000/machine-1 # Machine-specific configurations
./users/guanranwang/nixos.nix # User-specific configurations
./flakes/nixos/berberman.nix # Flakes
./flakes/nixos/home-manager.nix
./flakes/nixos/hosts.nix
./flakes/nixos/lanzaboote.nix
./flakes/nixos/sops-nix.nix
{ networking.hostName = "81fw-nixos"; }
];
};
# Currently un-used.
## Currently un-used.
"imac-nixos" = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
specialArgs = { inherit inputs; };
modules = [
./nixos
./machines/nixos/imac-2017.nix
./machines/nixos/imac-2017
./machines/nixos/imac-2017/machine-1
./users/guanranwag/nixos.nix
./flakes/nixos/berberman.nix
./flakes/nixos/home-manager.nix
./flakes/nixos/hosts.nix
./flakes/nixos/lanzaboote.nix
./flakes/nixos/sops-nix.nix
{ networking.hostName = "imac-nixos"; }
];
};
};
# Home-Manager
homeConfigurations = {
"guanranwang@81fw-nixos" = home-manager.lib.homeManagerConfiguration {

View file

@ -0,0 +1,7 @@
{ ... }:
{
imports = [
./hardware.nix
];
}

View file

@ -8,7 +8,6 @@
"Thunderbolt Bridge 2"
"iPhone USB"
];
networking.hostName = "iMac-macOS";
# The platform the configuration will be used on.
nixpkgs.hostPlatform = "x86_64-darwin";

View file

@ -0,0 +1,7 @@
{ ... }:
{
imports = [
./hardware.nix
];
}

View file

@ -0,0 +1,32 @@
{ lib, modulesPath, ... }:
{
imports = [
../hardware/misc/audio.nix
../hardware/misc/bluetooth.nix
../hardware/misc/opengl.nix
../hardware/cpu/intel.nix
../hardware/gpu/intel.nix
../hardware/gpu/nvidia.nix
../hardware/gpu/nvidia-prime.nix
../hardware/accessories/xbox.nix
(modulesPath + "/installer/scan/not-detected.nix") # what is this
];
boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "nvme" "usbhid" ];
services.fstrim.enable = true;
# Nvidia PRIME
hardware.nvidia.prime = {
nvidiaBusId = "PCI:1:0:0";
intelBusId = "PCI:0:2:0";
};
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.enp7s0.useDHCP = lib.mkDefault true;
# networking.interfaces.wlan0.useDHCP = lib.mkDefault true;
}

View file

@ -0,0 +1,7 @@
{ ... }:
{
imports = [
./partition.nix
];
}

View file

@ -1,22 +1,6 @@
{ lib, modulesPath, ... }:
{ ... }:
{
imports = [
./hardware/misc/audio.nix
./hardware/misc/bluetooth.nix
./hardware/misc/opengl.nix
./hardware/cpu/intel.nix
./hardware/gpu/intel.nix
./hardware/gpu/nvidia.nix
./hardware/gpu/nvidia-prime.nix
./hardware/accessories/xbox.nix
(modulesPath + "/installer/scan/not-detected.nix") # what is this
];
networking.hostName = "81fw-nixos";
boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "nvme" "usbhid" ];
services.fstrim.enable = true;
fileSystems = {
"/" = {
device = "/dev/disk/by-uuid/6288ce7a-a153-4302-a4de-5dc71f58da79";
@ -54,14 +38,4 @@
};
swapDevices = [ { device = "/dev/disk/by-uuid/0ba792d3-571d-44bb-8696-82126611784d"; } ];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.enp7s0.useDHCP = lib.mkDefault true;
# networking.interfaces.wlan0.useDHCP = lib.mkDefault true;
}

View file

@ -1,5 +1,6 @@
{ pkgs, ... }:
# Following https://nixos.wiki/wiki/Intel_Graphics
{
boot.initrd.kernelModules = [ "i915" ]; # if not enabled, plymouth's distro logo wont show for some reason
nixpkgs.config.packageOverrides = pkgs: { vaapiIntel = pkgs.vaapiIntel.override { enableHybridCodec = true; }; };

View file

@ -4,8 +4,10 @@
{
hardware.nvidia.prime = {
sync.enable = false;
nvidiaBusId = "PCI:1:0:0";
intelBusId = "PCI:0:2:0";
### Device specific, please put those configuration in `machines/your-machine.nix`
# nvidiaBusId = "PCI:1:0:0";
# intelBusId = "PCI:0:2:0";
offload = {
enable = true;
enableOffloadCmd = true;

View file

@ -0,0 +1,7 @@
{ ... }:
{
imports = [
./hardware.nix
];
}

View file

@ -2,44 +2,21 @@
{
imports = [
./hardware/misc/audio.nix
./hardware/misc/bluetooth.nix
./hardware/misc/opengl.nix
./hardware/cpu/intel.nix
./hardware/gpu/amd.nix
../hardware/misc/audio.nix
../hardware/misc/bluetooth.nix
../hardware/misc/opengl.nix
../hardware/cpu/intel.nix
../hardware/gpu/amd.nix
(modulesPath + "/hardware/network/broadcom-43xx.nix")
(modulesPath + "/installer/scan/not-detected.nix") # what is this
];
networking.hostName = "imac-nixos";
# from nixos-hardware
boot.kernelParams = [ "hid_apple.iso_layout=0" ];
hardware.facetimehd.enable = true; # cam already works before adding this
# Setup keyfile
boot.initrd.secrets = {
"/crypto_keyfile.bin" = null;
};
hardware.facetimehd.enable = true; # cam already works before adding this, not sure what is the point
boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "nvme" "usbhid" "usb_storage" "sd_mod" "sdhci_pci" ];
fileSystems = {
"/boot" = {
device = "/dev/disk/by-uuid/67E3-17ED";
fsType = "vfat";
};
"/" = {
device = "/dev/disk/by-uuid/571588f1-dc9c-4804-a89c-995a667e0574";
fsType = "ext4";
};
};
boot.initrd.luks.devices."luks-998ea901-91c0-4c20-82f4-5dbcce1e1877".device = "/dev/disk/by-uuid/998ea901-91c0-4c20-82f4-5dbcce1e1877";
swapDevices = [ ];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction

View file

@ -0,0 +1,8 @@
{ ... }:
{
imports = [
./partition.nix
./luks.nix
];
}

View file

@ -0,0 +1,14 @@
{ ... }:
# I have no idea what are those options
# and I dont use LUKS on my main machine...
# Assuming those are LUKS stuff :P
#
# it just works(tm)
{
# Setup keyfile
boot.initrd.secrets = {
"/crypto_keyfile.bin" = null;
};
boot.initrd.luks.devices."luks-998ea901-91c0-4c20-82f4-5dbcce1e1877".device = "/dev/disk/by-uuid/998ea901-91c0-4c20-82f4-5dbcce1e1877";
}

View file

@ -0,0 +1,17 @@
{ ... }:
{
fileSystems = {
"/boot" = {
device = "/dev/disk/by-uuid/67E3-17ED";
fsType = "vfat";
};
"/" = {
device = "/dev/disk/by-uuid/571588f1-dc9c-4804-a89c-995a667e0574";
fsType = "ext4";
};
};
swapDevices = [ ];
}