From e98119358d33d15a34cda527037a5f474b18147d Mon Sep 17 00:00:00 2001 From: Toast Date: Tue, 12 Sep 2023 18:23:22 +0200 Subject: [PATCH] Machines: Add Steam Deck --- flake.nix | 17 +++ machines/SteamDeck/configuration.nix | 100 ++++++++++++++++++ machines/SteamDeck/default.nix | 8 ++ machines/SteamDeck/hardware-configuration.nix | 71 +++++++++++++ 4 files changed, 196 insertions(+) create mode 100755 machines/SteamDeck/configuration.nix create mode 100755 machines/SteamDeck/default.nix create mode 100755 machines/SteamDeck/hardware-configuration.nix diff --git a/flake.nix b/flake.nix index ae8edc7..27630c6 100755 --- a/flake.nix +++ b/flake.nix @@ -100,6 +100,23 @@ outputs = {nixpkgs, nixpkgs-unstable, agenix, home-manager, home-manager-unstabl ]; }; + SteamDeck = nixpkgs-unstable.lib.nixosSystem { + system = "x86_64-linux"; + specialArgs = { systemPkgs = inputs.nixpkgs-unstable; }; + modules = [ + # Needed for nix-index + { nix.nixPath = [ "nixpkgs=${nixpkgs}" ]; } + agenix.nixosModules.default + home-manager-unstable.nixosModule + nix-index-db-unstable.nixosModules.nix-index + ./roles/common + ./roles/desktop + ./roles/kde + ./roles/gaming + ./machines/SteamDeck + ]; + }; + Everest = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; specialArgs = { systemPkgs = inputs.nixpkgs; }; diff --git a/machines/SteamDeck/configuration.nix b/machines/SteamDeck/configuration.nix new file mode 100755 index 0000000..6c922ec --- /dev/null +++ b/machines/SteamDeck/configuration.nix @@ -0,0 +1,100 @@ +# Edit this configuration file to define what should be installed on +# your system. Help is available in the configuration.nix(5) man page +# and in the NixOS manual (accessible by running `nixos-help`). + +{ config, pkgs, ... }: + +{ + # Use grub boot loader + boot.loader = { + systemd-boot.enable = false; + grub = { + enable = true; + device = "nodev"; + efiSupport = true; + # No other OS on here :P + useOSProber = false; + }; + efi.efiSysMountPoint = config.fileSystems."efi_boot_partition".mountPoint; + }; + boot.loader.efi.canTouchEfiVariables = true; + + boot.kernelPackages = pkgs.linuxKernel.packages.linux_xanmod_latest; + + networking.hostName = "SteamDeck"; # Define your hostname. + networking.networkmanager.enable = true; # Enable networking + + # Allow unfree packages + nixpkgs.config.allowUnfree = true; + + nix.settings.auto-optimise-store = true; + + # Configure network proxy if necessary + # networking.proxy.default = "http://user:password@proxy:port/"; + # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain"; + + # Enable the X11 windowing system. + services.xserver.enable = true; + + # Enable the pipewire sound server + services.pipewire = { + enable = true; + pulse.enable = true; + }; + + # Configure keymap in X11 + # services.xserver.layout = "us"; + # services.xserver.xkbOptions = "eurosign:e,caps:escape"; + + # Enable CUPS to print documents. + # services.printing.enable = true; + + # Enable sound. + # sound.enable = true; + # hardware.pulseaudio.enable = true; + + # Enable touchpad support (enabled default in most desktopManager). + # services.xserver.libinput.enable = true; + + # Define a user account. Don't forget to set a password with ‘passwd’. + users.users.toast = { + isNormalUser = true; + extraGroups = [ "wheel" ]; # Enable ‘sudo’ for the user. + packages = with pkgs; [ + tree + ]; + }; + + # List packages installed in system profile. To search, run: + # $ nix search wget + # environment.systemPackages = with pkgs; [ + # vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default. + # wget + # ]; + + # Some programs need SUID wrappers, can be configured further or are + # started in user sessions. + # programs.mtr.enable = true; + # programs.gnupg.agent = { + # enable = true; + # enableSSHSupport = true; + # }; + + # List services that you want to enable: + + # Enable the OpenSSH daemon. + # services.openssh.enable = true; + + # Open ports in the firewall. + # networking.firewall.allowedTCPPorts = [ ... ]; + # networking.firewall.allowedUDPPorts = [ ... ]; + # Or disable the firewall altogether. + # networking.firewall.enable = false; + + # Copy the NixOS configuration file and link it from the resulting system + # (/run/current-system/configuration.nix). This is useful in case you + # accidentally delete configuration.nix. + # system.copySystemConfiguration = true; + +} + diff --git a/machines/SteamDeck/default.nix b/machines/SteamDeck/default.nix new file mode 100755 index 0000000..5bf2485 --- /dev/null +++ b/machines/SteamDeck/default.nix @@ -0,0 +1,8 @@ +{ ... }: + +{ + imports = [ + ./configuration.nix + ./hardware-configuration.nix + ]; +} diff --git a/machines/SteamDeck/hardware-configuration.nix b/machines/SteamDeck/hardware-configuration.nix new file mode 100755 index 0000000..1f4cd77 --- /dev/null +++ b/machines/SteamDeck/hardware-configuration.nix @@ -0,0 +1,71 @@ +# Do not modify this file! It was generated by ‘nixos-generate-config’ +# and may be overwritten by future invocations. Please make changes +# to /etc/nixos/configuration.nix instead. +{ config, lib, pkgs, modulesPath, ... }: + +let + # \x20 is the escape code for a space + ssdLabel = ''Deck\\x20SSD''; +in + +{ + imports = + [ (modulesPath + "/installer/scan/not-detected.nix") + ]; + + # Enable support for the Xbox One wireless dongle + hardware.xone.enable = true; + + boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "usb_storage" "usbhid" "sd_mod" "sdhci_pci" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-amd" ]; + boot.extraModulePackages = [ ]; + + fileSystems = { + "efi_boot_partition" = { + mountPoint = "/boot/efi"; + label = "deckboot"; + fsType = "vfat"; + }; + /* + Mount the root subvolume of the SSD + This is helpful for getting things from + my old Arch install, as well as for running btdu + */ + "btrfs_root_subvolume" = { + mountPoint = "/mnt/ssd"; + label = ssdLabel; + fsType = "btrfs"; + options = [ "subvolid=5" "ro" ]; + }; + "btrfs_root" = { + mountPoint = "/"; + label = ssdLabel; + fsType = "btrfs"; + options = [ "subvol=@" "compress=zstd" ]; + }; + "btrfs_boot" = { + mountPoint = "/boot"; + label = ssdLabel; + fsType = "btrfs"; + options = [ "subvol=@boot" "compress=zstd" ]; + }; + "btrfs_home" = { + mountPoint = "/home"; + label = ssdLabel; + fsType = "btrfs"; + options = [ "subvol=@home" "compress=zstd" ]; + }; + "btrfs_nix" = { + mountPoint = "/nix"; + label = ssdLabel; + fsType = "btrfs"; + options = [ "subvol=@nix" "compress=zstd" ]; + }; + }; + + swapDevices = [ ]; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +}