245 lines
8.2 KiB
Nix
245 lines
8.2 KiB
Nix
{ inputs, lib, config, pkgs, ...}:
|
|
let
|
|
unstable = import inputs.nixpkgs-unstable { system = "x86_64-linux"; config.allowUnfree = true; };
|
|
in
|
|
{
|
|
options.hypr = {
|
|
enable = lib.mkEnableOption "Enable hyprland window manager.";
|
|
systemPackages = lib.mkOption {
|
|
default = [];
|
|
description = "Add any additional packages desired. Merged with sway defaults.";
|
|
};
|
|
user = lib.mkOption {
|
|
type = lib.types.str;
|
|
};
|
|
};
|
|
|
|
config = lib.mkIf config.hypr.enable {
|
|
|
|
programs.hyprland.enable = true;
|
|
# programs.hyprland.package = unstable.hyprland;
|
|
# programs.hyprland.portalPackage = pkgs.xdg-desktop-portal-hyprland;
|
|
# programs.steam.enable = true;
|
|
# For electron apps in wayland
|
|
|
|
environment.systemPackages = with pkgs; lib.lists.flatten [
|
|
[
|
|
bash
|
|
egl-wayland
|
|
foot
|
|
git
|
|
glib # gsettings
|
|
man-pages
|
|
man-pages-posix
|
|
nbfc-linux
|
|
nautilus
|
|
# swww
|
|
xdg-utils
|
|
zsh
|
|
lxqt.lxqt-policykit
|
|
]
|
|
config.hypr.systemPackages
|
|
];
|
|
environment = {
|
|
variables = {
|
|
# If cursor is not visible, try to set this to "on".
|
|
XDG_CURRENT_DESKTOP = "Hyprland";
|
|
XDG_SESSION_TYPE = "wayland";
|
|
XDG_SESSION_DESKTOP = "Hyprland";
|
|
};
|
|
sessionVariables = {
|
|
# use wayland
|
|
MOZ_ENABLE_WAYLAND = "1";
|
|
# NIXOS_OZONE_WL = "1";
|
|
T_QPA_PLATFORM = "wayland";
|
|
GDK_BACKEND = "wayland";
|
|
WLR_NO_HARDWARE_CURSORS = "1";
|
|
# For hyprland
|
|
# LIBVA_DRIVER_NAME = "nvidia";
|
|
# __GLX_VENDOR_LIBRARY_NAME = "nvidia";
|
|
};
|
|
};
|
|
xdg.portal = {
|
|
enable = true;
|
|
xdgOpenUsePortal = true;
|
|
config = {
|
|
common.default = [ "gtk" ];
|
|
hyprland.default = [ "hyprland" "gtk" ];
|
|
};
|
|
extraPortals = with pkgs; [
|
|
xdg-desktop-portal-hyprland
|
|
xdg-desktop-portal-gtk
|
|
xdg-desktop-portal-wlr
|
|
];
|
|
};
|
|
|
|
virtualisation = {
|
|
docker = {
|
|
enable = true;
|
|
enableOnBoot = true;
|
|
package = unstable.docker_25;
|
|
};
|
|
# containers.cdi.dynamic.nvidia.enable = true;
|
|
# podman = {
|
|
# enable = true;
|
|
# dockerCompat = true;
|
|
# };
|
|
};
|
|
# enable nvidia passthru for containers
|
|
# hardware.nvidia-container-toolkit.enable = true;
|
|
|
|
# programs.thunar = {
|
|
# enable = true;
|
|
# plugins = with pkgs.xfce; [
|
|
# thunar-archive-plugin
|
|
# thunar-volman
|
|
# ];
|
|
# };
|
|
# programs.file-roller.enable = true;
|
|
# For nautilus
|
|
services.gnome.sushi.enable = true;
|
|
programs.nautilus-open-any-terminal = {
|
|
enable = true;
|
|
terminal = "foot";
|
|
};
|
|
programs.xfconf.enable = true;
|
|
programs.regreet.enable = true;
|
|
programs.zsh.enable = true;
|
|
programs.ssh.startAgent = true;
|
|
|
|
services.fprintd.enable = true;
|
|
services.greetd = {
|
|
enable = true;
|
|
settings = rec {
|
|
initial_session = {
|
|
command = "${unstable.hyprland}/bin/Hyprland";
|
|
user = config.hypr.user;
|
|
};
|
|
default_session = initial_session;
|
|
};
|
|
};
|
|
# disable lid switch sleep when plugged into power, laptop docked
|
|
services.logind.lidSwitchExternalPower = "ignore";
|
|
# For yubioath desktop
|
|
services.pcscd.enable = true;
|
|
# Audio
|
|
# security.rtkit.enable = true;
|
|
security.polkit.enable = true;
|
|
# Keyring setup
|
|
security.pam.services.gdm.enableGnomeKeyring = true;
|
|
services.gnome.gnome-keyring.enable = true;
|
|
# Audio
|
|
services.pipewire = {
|
|
enable = true;
|
|
alsa.enable = true;
|
|
pulse.enable = true;
|
|
wireplumber.enable = true;
|
|
};
|
|
services.blueman.enable = true;
|
|
services.flatpak.enable = true;
|
|
services.gvfs.enable = true; # file manager mount, trash, etc
|
|
services.tumbler.enable = true; # thunar thumbnails
|
|
services.openssh.enable = true;
|
|
services.dbus.enable = true;
|
|
|
|
services.syncthing = {
|
|
enable = true;
|
|
dataDir = "/home/${config.hypr.user}/.syncthing";
|
|
openDefaultPorts = true;
|
|
user = config.hypr.user;
|
|
};
|
|
systemd.services.syncthing.environment.STNODEFAULTFOLDER = "true"; # Don't create default ~/Sync folder
|
|
|
|
services.usbmuxd.enable = true;
|
|
hardware.bluetooth.enable = true; # enables support for Bluetooth
|
|
hardware.bluetooth.powerOnBoot = true; # powers up the default Bluetooth controller on boot
|
|
|
|
#
|
|
# Nvidia Setup
|
|
#
|
|
|
|
# Use latest kernel
|
|
# boot.kernelPackages = unstable.linuxPackages_latest;
|
|
|
|
services.xserver.videoDrivers = [ "nvidia" ];
|
|
hardware = {
|
|
graphics = {
|
|
enable = true;
|
|
# package = unstable.mesa.drivers;
|
|
enable32Bit = true;
|
|
# package32 = unstable.pkgsi686Linux.mesa.drivers;
|
|
};
|
|
nvidia = {
|
|
# Modesetting is required.
|
|
modesetting.enable = true;
|
|
# Nvidia power management. Experimental, and can cause sleep/suspend to fail.
|
|
# Enable this if you have graphical corruption issues or application crashes after waking
|
|
# up from sleep. This fixes it by saving the entire VRAM memory to /tmp/ instead
|
|
# of just the bare essentials.
|
|
powerManagement.enable = true;
|
|
|
|
# Fine-grained power management. Turns off GPU when not in use.
|
|
# Experimental and only works on modern Nvidia GPUs (Turing or newer).
|
|
powerManagement.finegrained = true;
|
|
|
|
# Use the NVidia open source kernel module (not to be confused with the
|
|
# independent third-party "nouveau" open source driver).
|
|
# Support is limited to the Turing and later architectures. Full list of
|
|
# supported GPUs is at:
|
|
# https://github.com/NVIDIA/open-gpu-kernel-modules#compatible-gpus
|
|
# Only available from driver 515.43.04+
|
|
# Currently alpha-quality/buggy, so false is currently the recommended setting.
|
|
open = false;
|
|
|
|
# Enable the Nvidia settings menu,
|
|
# accessible via `nvidia-settings`.
|
|
nvidiaSettings = true;
|
|
|
|
# Optionally, you may need to select the appropriate driver version for your specific GPU.
|
|
package = config.boot.kernelPackages.nvidiaPackages.stable;
|
|
prime = {
|
|
# sync.enable = true;
|
|
offload.enable = true;
|
|
offload.enableOffloadCmd = true; # adds `nvidia-offload` command to env
|
|
intelBusId = "PCI:0:2:0";
|
|
nvidiaBusId = "PCI:1:0:0";
|
|
};
|
|
};
|
|
};
|
|
# Create special on the go boot entry
|
|
specialisation = {
|
|
on-the-go.configuration = {
|
|
system.nixos.tags = [ "on-the-go" ];
|
|
|
|
boot.extraModprobeConfig = ''
|
|
blacklist nouveau
|
|
options nouveau modeset=0
|
|
'';
|
|
|
|
services.udev.extraRules = ''
|
|
# Remove NVIDIA USB xHCI Host Controller devices, if present
|
|
ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x0c0330", ATTR{power/control}="auto", ATTR{remove}="1"
|
|
# Remove NVIDIA USB Type-C UCSI devices, if present
|
|
ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x0c8000", ATTR{power/control}="auto", ATTR{remove}="1"
|
|
# Remove NVIDIA Audio devices, if present
|
|
ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x040300", ATTR{power/control}="auto", ATTR{remove}="1"
|
|
# Remove NVIDIA VGA/3D controller devices
|
|
ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x03[0-9]*", ATTR{power/control}="auto", ATTR{remove}="1"
|
|
'';
|
|
hardware.nvidia = {
|
|
prime.offload.enable = lib.mkForce false;
|
|
prime.offload.enableOffloadCmd = lib.mkForce false;
|
|
powerManagement.finegrained = lib.mkForce false;
|
|
prime.sync.enable = lib.mkForce false;
|
|
};
|
|
boot.blacklistedKernelModules = [ "nouveau" "nvidia" "nvidia_drm" "nvidia_modeset" ];
|
|
# Hint to kernel for integrated graphics, ID from command `$ nix-shell -p pciutils --run "lspci -nn | grep VGA"`
|
|
boot.kernelParams = [ "i915.force_probe=a7a0" "acpi_backlight=native" ];
|
|
# Default drivers
|
|
services.xserver.videoDrivers = [ "modesetting" "fbdev" ];
|
|
};
|
|
};
|
|
nixpkgs.config.allowUnfree = true;
|
|
};
|
|
}
|