# 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’). { nixos-hardware, config, pkgs, musnix, lib, ... }: { imports = [ # Include the results of the hardware scan. ./hardware-configuration.nix ./razer-speaker-fix.nix ]; # Allow unfree packages nixpkgs.config.allowUnfree = true; # List packages installed in system profile. To search, run: environment.systemPackages = with pkgs; [ wget home-manager curl git-lfs tailscale rsync gnupg openrazer-daemon linuxKernel.packages.linux_6_10.openrazer clinfo alsa-utils alsa-tools util-linux libgtop ulauncher ]; # Bootloader. boot.loader.systemd-boot.enable = true; boot.loader.efi.canTouchEfiVariables = true; boot.kernelPackages = pkgs.linuxPackages_6_10; boot = { initrd.kernelModules = [ "nvidia" "nvidia_modeset" "nvidia_uvm" "nvidia_drm" ]; kernelParams = [ "nvidia-drm.fbdev=1" "nvidia_drm.modeset=1" "amd_pstate=guided"]; }; systemd.services.tailscaled.after = ["NetworkManager-wait-online.service"]; nixpkgs.config.packageOverrides = pkgs: { openrazer-daemon = pkgs.openrazer-daemon.overrideDerivation (previous: { name = "openrazer-daemon390"; src = pkgs.fetchFromGitHub { owner = "openrazer"; repo = "openrazer"; hash = "sha256-MLwhqLPWdjg1ZUZP5Sig37RgZEeHlU+DyELpyMif6iY="; rev = "ae5791101e39b91518abb16f26978f2f0eea5e03"; }; # patches = [""]; }); }; hardware = { openrazer = { enable = true; users = [ "emenel" ]; }; graphics = { enable = true; enable32Bit = true; extraPackages = [ pkgs.rocmPackages.clr.icd ]; }; enableAllFirmware = true; nvidia = { # Modesetting is required. modesetting.enable = true; powerManagement.enable = true; powerManagement.finegrained = true; open = true; forceFullCompositionPipeline = true; prime = { amdgpuBusId = "PCI:0:2:0"; nvidiaBusId = "PCI:41:0:0"; offload = { enable = true; enableOffloadCmd = true; }; #reverseSync.enable = true; #sync.enable = true; }; nvidiaSettings = true; }; }; specialisation = { gpupower.configuration = { system.nixos.tags = [ "gpupower" ]; hardware.nvidia = { prime.offload.enable = lib.mkForce false; prime.offload.enableOffloadCmd = lib.mkForce false; prime.sync.enable = lib.mkForce true; powerManagement.finegrained = lib.mkForce false; }; }; }; musnix = { enable = true; alsaSeq.enable = true; rtcqs.enable = true; }; services.udev.extraRules = '' DEVPATH=="/devices/virtual/misc/cpu_dma_latency", OWNER="root", GROUP="audio", MODE="0660" ''; security.polkit.enable = true; services.xserver.videoDrivers = [ "nvidia" ]; networking.hostName = "eddie"; # Enable networking networking.networkmanager.enable = true; # Set your time zone. time.timeZone = "America/Toronto"; # Select internationalisation properties. i18n.defaultLocale = "en_CA.UTF-8"; nix.nixPath = [ "nixos-config=/home/emenel/source/nixos-config" "nixpkgs=/nix/var/nix/profiles/per-user/root/channels/nixos" ]; nix.package = pkgs.nixFlakes; nix.settings = { experimental-features = [ "nix-command" "flakes" ]; #repl-flake auto-optimise-store = true; }; nix.gc.automatic = true; nix.gc.dates = "daily"; nix.gc.options = "--delete-older-than +5"; services.xserver.enable = true; # Enable the GNOME Desktop Environment. services.xserver.displayManager.gdm.enable = true; services.xserver.desktopManager.gnome.enable = true; services.xserver.deviceSection = ''Option "TearFree" "true"''; # For amdgpu. services.gnome.gnome-keyring.enable = true; programs.dconf.enable = true; services.xserver.xkb = { layout = "us"; variant = ""; }; services.printing.enable = true; services.tailscale.enable = true; services.envfs.enable = true; #services.emacs = { # enable = true; # package = pkgs.emacs; #}; # Enable sound with pipewire. hardware.pulseaudio.enable = false; # security.rtkit.enable = true; services.gnome.gnome-remote-desktop.enable = false; services.pipewire = { enable = true; alsa.enable = true; alsa.support32Bit = true; pulse.enable = true; jack.enable = true; wireplumber.enable = true; extraConfig.pipewire."91-null-sinks" = { "context.modules" = [ { name = "libpipewire-module-loopback"; args = { "node.description" = "Default Playback"; "capture.props" = { "node.name" = "BixSix_or_fallback_Playback"; "media.class" = "Audio/Sink"; "audio.position" = "[FL FR]"; }; "playback.props" = { "node.name" = "playback.BixSixWithFallbackPlayback"; "audio.position" = "[AUX14 AUX15]"; "target.object" = "alsa_output.usb-Solid_State_Logic_BiG_SiX-00.pro-output-0"; "stream.dont-remix" = true; "node.passive" = true; }; }; } ]; }; }; programs.steam = { enable = true; protontricks.enable = true; extraCompatPackages = [ pkgs.proton-ge-bin ]; }; # enable fish and launch it from bash for interactive shells programs.fish.enable = true; environment.pathsToLink = [ "/share/fish" ]; programs.bash = { interactiveShellInit = '' if [[ $(${pkgs.procps}/bin/ps --no-header --pid=$PPID --format=comm) != "fish" && -z ''${BASH_EXECUTION_STRING} ]] then shopt -q login_shell && LOGIN_OPTION='--login' || LOGIN_OPTION="" exec ${pkgs.fish}/bin/fish $LOGIN_OPTION fi ''; }; services.flatpak.enable = true; services.dbus.implementation = "broker"; #programs.gnupg.enable = true; programs.git.enable = true; services.gnome.core-developer-tools.enable = true; environment.gnome.excludePackages = with pkgs; [ cheese geary gnome-music gnome-tour ]; services.accounts-daemon.enable = true; services.gnome.gnome-online-accounts.enable = true; services.kmonad = { enable = true; keyboards = { # quefrency = { # device = "/dev/input/by-id/usb-Keebio_Quefrency_Rev._5-event-kbd"; # config = builtins.readFile ../../dotfiles/dot_config/kmonad/quefrency.kbd; # }; snap = { device = "/dev/input/by-id/usb-nullbits_SNAP-event-kbd"; config = builtins.readFile ../../dotfiles/dot_config/kmonad/snap.kbd; }; razer = { device = "/dev/input/by-id/usb-Razer_Razer_Blade-if01-event-kbd"; config = builtins.readFile ../../dotfiles/dot_config/kmonad/razer.kbd; }; }; }; programs.virt-manager.enable = true; virtualisation = { libvirtd = { enable = true; qemu = { package = pkgs.qemu_kvm; swtpm.enable = true; ovmf.enable = true; ovmf.packages = [ pkgs.OVMFFull.fd ]; }; }; spiceUSBRedirection.enable = true; }; services.qemuGuest.enable = true; services.spice-vdagentd.enable = true; programs.appimage = { enable = true; binfmt = true; }; programs.nix-ld.enable = true; powerManagement = { enable = true; }; # enable the OpenSSH daemon. services.openssh.enable = true; # add user accounts users.users.emenel = { isNormalUser = true; description = "emenel"; extraGroups = [ "networkmanager" "wheel" "uinput" "input" "audio" "video" "libvirtd" "nvidia" "cups" "openrazer"]; packages = with pkgs; [ git ]; }; #do not change system.stateVersion = "24.05"; }