Compare commits

...

8 Commits

Author SHA1 Message Date
kris bee98953a7 Reorganize configuration.nix into sections 2026-07-01 23:21:46 -04:00
kris 23597d7b94 Add ext4 mount for Steam games library 2026-06-30 02:02:13 -04:00
kris b6a8ef59f9 Enable Steam and 32-bit graphics support 2026-06-30 00:43:24 -04:00
kris 47b6f895ae Add README and SPDX headers 2026-06-30 00:17:00 -04:00
kris ddb573f705 Add GnuPG 2026-06-28 22:02:16 -04:00
kris b197846226 Restore .bashrc sourcing as a stopgap 2026-06-28 21:37:53 -04:00
kris 5ab95e43a9 Use nonfree NVIDIA for HDMI 144Hz 2026-06-28 20:03:22 -04:00
kris 461358d959 Add GNU Stow for dotfiles 2026-06-28 19:37:27 -04:00
4 changed files with 134 additions and 67 deletions
+12
View File
@@ -0,0 +1,12 @@
Copyright (C) 2026 by Kris Lamoureux <kris@lamoureux.io>
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
+19
View File
@@ -0,0 +1,19 @@
<!--
SPDX-FileCopyrightText: 2026 Kris Lamoureux <kris@lamoureux.io>
SPDX-License-Identifier: 0BSD
-->
# nix-gaming
NixOS gaming VM, running under Proxmox with GPU passthrough.
This is **not a generic template**; it's the actual config for my specific
gaming-focused VM. The goal is to keep as much of this machine's setup as
possible here.
### Features
- **Desktop** — KDE Plasma on Wayland
- **GPU** — NVIDIA GPU drivers
- **Kernel** — Linux 7.x
- **Boot** — EFI boot via systemd-boot
+94 -67
View File
@@ -1,3 +1,6 @@
# SPDX-FileCopyrightText: 2026 Kris Lamoureux <kris@lamoureux.io>
# SPDX-License-Identifier: 0BSD
# Edit this configuration file to define what should be installed on # Edit this configuration file to define what should be installed on
# your system. Help is available in the configuration.nix(5) man page, on # your system. Help is available in the configuration.nix(5) man page, on
# https://search.nixos.org/options and in the NixOS manual (`nixos-help`). # https://search.nixos.org/options and in the NixOS manual (`nixos-help`).
@@ -5,28 +8,42 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
{ {
###############
### Imports ###
###############
imports = imports =
[ # Include the results of the hardware scan. [ # Include the results of the hardware scan.
./hardware-configuration.nix ./hardware-configuration.nix
]; ];
###############
### Nixpkgs ###
###############
# Need nonfree for nvidia software and gaming.
nixpkgs.config.allowUnfree = true;
############
### Boot ###
############
# Use the systemd-boot EFI boot loader. # Use the systemd-boot EFI boot loader.
boot.loader.systemd-boot.enable = true; boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true; boot.loader.efi.canTouchEfiVariables = true;
# Machine name
networking.hostName = "nix-gaming";
# Use latest kernel. # Use latest kernel.
boot.kernelPackages = pkgs.linuxPackages_latest; boot.kernelPackages = pkgs.linuxPackages_latest;
# Need nonfree for nvidia software and gaming ##################
nixpkgs.config.allowUnfree = true; ### Networking ###
##################
# Configure network connections interactively with nmcli or nmtui. # Machine name.
networking.hostName = "nix-gaming";
# Add NetworkManager profile with static IP.
networking.networkmanager.enable = true; networking.networkmanager.enable = true;
# Add NetworkManager profile with static IP
networking.networkmanager.ensureProfiles.profiles = { networking.networkmanager.ensureProfiles.profiles = {
"ens18-static" = { "ens18-static" = {
connection = { connection = {
@@ -45,13 +62,19 @@
}; };
}; };
# Open ports in the firewall.
# networking.firewall.allowedTCPPorts = [ ... ];
# networking.firewall.allowedUDPPorts = [ ... ];
# Or disable the firewall altogether.
# networking.firewall.enable = false;
############
### Time ###
############
# Set your time zone. # Set your time zone.
time.timeZone = "America/New_York"; time.timeZone = "America/New_York";
# Configure network proxy if necessary
# networking.proxy.default = "http://user:password@proxy:port/";
# networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";
# Select internationalisation properties. # Select internationalisation properties.
# i18n.defaultLocale = "en_US.UTF-8"; # i18n.defaultLocale = "en_US.UTF-8";
# console = { # console = {
@@ -60,30 +83,36 @@
# useXkbConfig = true; # use xkb.options in tty. # useXkbConfig = true; # use xkb.options in tty.
# }; # };
# Enable the X11 windowing system. ################
# services.xserver.enable = true; ### Hardware ###
################
# Enable KDE Plasma + Wayland # Enable passthrough NVIDIA GPU.
hardware.graphics.enable = true;
hardware.nvidia.modesetting.enable = true;
hardware.nvidia.open = false;
# Some Proton games may need 32-bit graphics support.
hardware.graphics.enable32Bit = true;
# Bluetooth.
hardware.bluetooth.enable = true;
hardware.bluetooth.powerOnBoot = true;
################
### Services ###
################
# Enable KDE Plasma + Wayland.
services.desktopManager.plasma6.enable = true; services.desktopManager.plasma6.enable = true;
services.displayManager.sddm.enable = true; services.displayManager.sddm.enable = true;
services.displayManager.sddm.wayland.enable = true; services.displayManager.sddm.wayland.enable = true;
# Enable passthrough NVIDIA GPU
hardware.graphics.enable = true;
services.xserver.videoDrivers = [ "nvidia" ];
hardware.nvidia.modesetting.enable = true;
hardware.nvidia.open = true;
# Bluetooth
hardware.bluetooth.enable = true;
hardware.bluetooth.powerOnBoot = true;
# Configure keymap in X11
services.xserver.xkb.layout = "us"; services.xserver.xkb.layout = "us";
# services.xserver.xkb.options = "eurosign:e,caps:escape"; services.xserver.videoDrivers = [ "nvidia" ];
# Enable CUPS to print documents. # Enable the OpenSSH daemon.
# services.printing.enable = true; services.openssh.enable = true;
services.openssh.settings.PasswordAuthentication = false;
# Enable sound. # Enable sound.
# services.pulseaudio.enable = true; # services.pulseaudio.enable = true;
@@ -93,10 +122,10 @@
# pulse.enable = true; # pulse.enable = true;
# }; # };
# Enable touchpad support (enabled default in most desktopManager). #############
# services.libinput.enable = true; ### Users ###
#############
# Define a user account. Don't forget to set a password with 'passwd'.
users.users.kris = { users.users.kris = {
isNormalUser = true; isNormalUser = true;
description = "Kris"; description = "Kris";
@@ -109,6 +138,15 @@
]; ];
}; };
###############
## Programs ###
###############
# Drop once dotfiles move to Home Manager.
programs.bash.interactiveShellInit = ''
[[ -f ~/.bashrc ]] && source ~/.bashrc
'';
programs.git = { programs.git = {
enable = true; enable = true;
config = { config = {
@@ -117,24 +155,8 @@
}; };
}; };
# programs.firefox.enable = true; # Add Valve's Steam for games.
programs.steam.enable = true;
# List packages installed in system profile.
# You can use https://search.nixos.org/ to find more packages (and options).
environment.systemPackages = with pkgs; [
chromium
kdePackages.bluedevil
kdePackages.bluez-qt
ncdu
pciutils
terminator
tmux
tree
usbutils
vim
vscodium
wget
];
# Some programs need SUID wrappers, can be configured further or are # Some programs need SUID wrappers, can be configured further or are
# started in user sessions. # started in user sessions.
@@ -144,22 +166,28 @@
# enableSSHSupport = true; # enableSSHSupport = true;
# }; # };
# List services that you want to enable: #################
## Environment ##
#################
# Enable the OpenSSH daemon. # List packages installed in system profile.
services.openssh.enable = true; # You can use https://search.nixos.org/ to find more packages (and options).
services.openssh.settings.PasswordAuthentication = false; environment.systemPackages = with pkgs; [
chromium
# Open ports in the firewall. gnupg
# networking.firewall.allowedTCPPorts = [ ... ]; kdePackages.bluedevil
# networking.firewall.allowedUDPPorts = [ ... ]; kdePackages.bluez-qt
# Or disable the firewall altogether. ncdu
# networking.firewall.enable = false; pciutils
stow
# Copy the NixOS configuration file and link it from the resulting system terminator
# (/run/current-system/configuration.nix). This is useful in case you tmux
# accidentally delete configuration.nix. tree
# system.copySystemConfiguration = true; usbutils
vim
vscodium
wget
];
# This option defines the first version of NixOS you have installed on this particular machine, # This option defines the first version of NixOS you have installed on this particular machine,
# and is used to maintain compatibility with application data (e.g. databases) created on older NixOS versions. # and is used to maintain compatibility with application data (e.g. databases) created on older NixOS versions.
@@ -181,4 +209,3 @@
system.stateVersion = "26.05"; # Did you read the comment? system.stateVersion = "26.05"; # Did you read the comment?
} }
+9
View File
@@ -1,3 +1,6 @@
# SPDX-FileCopyrightText: 2026 Kris Lamoureux <kris@lamoureux.io>
# SPDX-License-Identifier: 0BSD
# Do not modify this file! It was generated by 'nixos-generate-config' # Do not modify this file! It was generated by 'nixos-generate-config'
# and may be overwritten by future invocations. Please make changes # and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead. # to /etc/nixos/configuration.nix instead.
@@ -24,6 +27,12 @@
options = [ "fmask=0022" "dmask=0022" ]; options = [ "fmask=0022" "dmask=0022" ];
}; };
fileSystems."/srv/steam" = {
device = "/dev/disk/by-label/STEAMGAMES";
fsType = "ext4";
options = [ "noatime" "nofail" ];
};
swapDevices = [ ]; swapDevices = [ ];
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";