{ nix-config, config, pkgs, pkgs-local, pkgs-stable, inputs, ... }: { imports = with nix-config.nixosModules; [ ./hardware-configuration.nix ./disko-config.nix ./razer-speaker-fix.nix ./boot.nix ./hardware.nix ./packages.nix ./udev.nix btrfs-conf openrazer users-emenel nixld niri kanata filesystems-filez sound ]; nixpkgs = { config = { allowUnfree = true; }; overlays = builtins.attrValues nix-config.overlays ++ [ inputs.niri.overlays.niri inputs.emacs-overlay.overlays.default inputs.nix-rice.overlays.default inputs.nh.overlays.default inputs.emacs-lsp-booster.overlays.default # temporary fix for wifi firmware until new version is released (self: super: { linux-firmware = super.linux-firmware.overrideAttrs (oldAttrs: { version = "20250410"; src = pkgs.fetchzip { url = "https://cdn.kernel.org/pub/linux/kernel/firmware/linux-firmware-20250410.tar.xz "; hash = "sha256-aQdEl9+7zbNqWSII9hjRuPePvSfWVql5u5TIrGsa+Ao="; }; }); }) (final: prev: { bash-env-json = inputs.bash-env-json.packages.x86_64-linux.default; bash-env-nushell = inputs.bash-env-nushell.packages.x86_64-linux.default; }) (final: prev: { rbw = pkgs-local.rbw-latest; }) # adds newer bitwig version package. i'm sure this is a hack, but it works. (final: prev: { bitwig-studio5-3 = pkgs-local.bitwig-studio.bitwig-bubblewrap.override { bitwig-studio = pkgs-local.bitwig-studio.bitwig-studio5-3-unwrapped; }; }) ]; }; nix = { settings = { experimental-features = [ "nix-command" "flakes" ]; substituters = [ "https://nix-community.cachix.org" "https://cache.garnix.io" "https://yazi.cachix.org" ]; trusted-public-keys = [ "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" "cache.garnix.io:CTFPyKSLcx5RMJKfLo5EEPUObbA78b0YQ2DTCJXqr9g=" "yazi.cachix.org-1:Dcdz63NZKfvUCbDGngQDAZq6kOroIrFoyO064uvLh8k=" ]; }; extraOptions = '' keep-outputs = true keep-derivations = true ''; # registry = { # emenel-templates.flake = inputs.emenel-templates; # }; channel.enable = false; # remove nix-channel related tools & configs, we use flakes instead. }; # Set your time zone. time.timeZone = "America/Toronto"; # Select internationalisation properties. i18n = { defaultLocale = "en_CA.UTF-8"; extraLocales = [ "en_US.UTF-8/UTF-8" ]; extraLocaleSettings = { LC_ALL = "en_CA.UTF-8"; }; }; console = { earlySetup = true; colors = with pkgs.lib.nix-rice; let theme = palette.toRgbShortHex pkgs.rice.colorPalette; in with theme; [ "111111" "e06c75" "98c379" "e5c07b" "61afef" "c678dd" "56b6c2" "abb2bf" "545862" "e06c75" "98c379" "e5c07b" "61afef" "c678dd" "56b6c2" "c8ccd4" ]; }; systemd.services.tailscaled.after = [ "NetworkManager-wait-online.service" ]; systemd.sleep.extraConfig = '' HibernateDelaySec=2h ''; documentation = { dev.enable = true; man.generateCaches = true; }; services.dictd = { enable = true; DBs = with pkgs.dictdDBs; [ wordnet fra2eng eng2fra wiktionary ]; }; services.fstrim.enable = true; services.udisks2.enable = true; services.rpcbind.enable = true; # needed for NFS systemd.tmpfiles.rules = [ "d /mnt 0770 root users" "L /mnt/removable - - - - /run/media/emenel" "L+ /var/lib/qemu/firmware - - - - ${pkgs.qemu}/share/qemu/firmware" ]; services.hardware.openrgb = { enable = true; package = pkgs.openrgb-with-all-plugins; motherboard = "amd"; }; services.logind = { extraConfig = '' IdleAction=lock IdleActionSec=15m ''; }; security = { polkit.enable = true; rtkit.enable = true; sudo = { enable = true; wheelNeedsPassword = false; }; pam = { services = { greetd.enableGnomeKeyring = true; greetd-password.enableGnomeKeyring = true; niri.enableGnomeKeyring = true; swaylock.enableGnomeKeyring = true; swaylock-plugin.enableGnomeKeyring = true; swayidle.enableGnomeKeyring = true; hypridle.enableGnomeKeyring = true; hyprlock.enableGnomeKeyring = true; }; }; }; services.xserver.videoDrivers = [ "nvidia" "modesetting" ]; networking = { hostName = "eddie"; domain = "local"; nameservers = [ "9.9.9.9" "149.112.112.112" "2620:fe::fe" "2620:fe::9" ]; networkmanager = { enable = true; wifi = { powersave = true; }; }; }; services.resolved = { enable = true; extraConfig = '' LLMNR=no ReadEtcHosts=no DNSSEC=no ''; }; services.xserver.enable = true; services.greetd = { enable = true; settings = { default_session = { command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time --sessions /${config.services.displayManager.sessionData.desktops}/share/wayland-sessions --remember --remember-user-session --user-menu --window-padding 5 --asterisks --asterisks-char ^ --greeting '<~welcome~>' --theme 'button=yellow'"; user = "greeter"; }; }; }; services.xserver.deviceSection = ''Option "TearFree" "true"''; # For amdgpu. services.gnome = { gnome-keyring.enable = true; gnome-settings-daemon.enable = true; evolution-data-server.enable = true; gnome-online-accounts.enable = true; }; services.picom = { enable = true; vSync = true; }; # programs.ssh.startAgent = true; programs.npm = { enable = true; npmrc = "prefix=~/.npm-packages"; }; programs.nh = { enable = true; clean = { enable = true; dates = "daily"; extraArgs = "--keep 4 --nogcroots"; }; flake = "/home/emenel/source/nixos-config"; package = pkgs.nh; }; programs.dconf.enable = true; programs.xwayland.enable = true; services.xserver.xkb = { layout = "us"; variant = ""; }; services.printing = { enable = true; drivers = [ pkgs.epson-escpr pkgs.epson-escpr2 ]; }; services.tailscale.enable = true; services.envfs = { enable = true; extraFallbackPathCommands = "ln -s $''{pkgs.bash}/bin/bash $out/bash"; }; services.gnome.sushi.enable = true; xdg.portal = { enable = true; xdgOpenUsePortal = false; #true; configPackages = [ pkgs.niri-unstable ]; config = { common.default = [ "niri" ]; }; extraPortals = [ pkgs.xdg-desktop-portal-gnome pkgs.xdg-desktop-portal-gtk pkgs.xdg-desktop-portal pkgs.xdg-desktop-portal-wlr pkgs.gnome-keyring ]; }; programs.gamemode.enable = true; programs.gamescope = { enable = true; capSysNice = true; }; environment.sessionVariables = { STEAM_EXTRA_COMPAT_TOOLS_PATHS = "\${HOME}/.steam/root/compatibilitytools.d"; }; programs.steam = { enable = true; protontricks.enable = true; extraCompatPackages = [ pkgs.proton-ge-bin ]; gamescopeSession.enable = true; }; programs.java.enable = true; # enable alternate shells and launch it from bash for interactive shells programs.fish.enable = true; environment.pathsToLink = [ "/share/fish" ]; environment.shells = [ pkgs.nushell ]; programs.bash = { interactiveShellInit = '' if [[ $(${pkgs.procps}/bin/ps --no-header --pid=$PPID --format=comm) != "nu" && -z ''${BASH_EXECUTION_STRING} ]] then shopt -q login_shell && LOGIN_OPTION='--login' || LOGIN_OPTION="" exec ${pkgs.nushell}/bin/nu $LOGIN_OPTION fi ''; }; services.flatpak.enable = true; services.dbus.implementation = "broker"; services.dbus.packages = [ pkgs.gnome-keyring pkgs.gcr ]; #programs.gnupg.enable = true; programs.git.enable = true; environment.gnome.excludePackages = with pkgs; [ cheese geary gnome-music gnome-tour ]; services.accounts-daemon.enable = true; # 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; package = pkgs.appimage-run.override { extraPkgs = pkgs: [ pkgs.libxcrypt.out ]; }; }; fonts = { enableDefaultPackages = true; fontDir.enable = true; fontconfig = { enable = true; useEmbeddedBitmaps = true; }; packages = with pkgs; [ font-awesome cooper-hewitt ibm-plex jetbrains-mono iosevka spleen blackout powerline-fonts noto-fonts-color-emoji noto-fonts noto-fonts-cjk-sans noto-fonts-emoji nerd-fonts.jetbrains-mono nerd-fonts.blex-mono nerd-fonts._0xproto nerd-fonts.symbols-only ]; }; powerManagement = { enable = true; }; services.upower = { enable = true; }; services.power-profiles-daemon = { enable = true; package = pkgs.power-profiles-daemon; }; # enable the OpenSSH daemon. services.openssh.enable = true; services.avahi = { enable = true; publish.enable = true; publish.userServices = true; openFirewall = true; nssmdns4 = true; }; users.groups.uinput = { }; #do not change system.stateVersion = "25.05"; }