nixfiles/system/sessions/hyprland.nix

99 lines
2.5 KiB
Nix

{
lib,
pkgs,
config,
flakeArgs,
...
}: let
inherit (flakeArgs) inputs;
cfg = config.nixfiles.sessions.hyprland;
flake-package = inputs.hyprland.packages.${pkgs.system}.hyprland;
flake-portal = inputs.hyprland.packages.${pkgs.system}.xdg-desktop-portal-hyprland;
nvidiaEnabled = lib.elem "nvidia" config.services.xserver.videoDrivers;
in {
# imports = [
# ./desktop-common.nix
# # FIXME make this into an option
# ./wm-common.nix
# ];
options.nixfiles.sessions.hyprland = {
enable = lib.mkEnableOption "hyprland configuration";
useFlake = lib.mkOption {
description = "Whether to use the Hyprland flake package";
type = lib.types.bool;
# enable if not on nixpkgs stable
# defaultText = "config.nixfiles.nixpkgs != inputs.nixpkgs";
default = true;
example = false;
};
};
config = lib.mkIf cfg.enable {
# enable dependencies
nixfiles.common = {
wm.enable = true;
};
nixfiles.meta.wayland = true;
# greeter
nixfiles.programs.greetd = {
enable = true;
settings = {
command = ["${config.programs.hyprland.package}/bin/Hyprland"];
};
};
# misleading name
services.xserver.enable = true;
programs.hyprland = {
enable = true;
# # TODO base this on if nvidia is enabled
# enableNvidiaPatches = lib.mkIf (!cfg.useFlake) lib.mkDefault true;
xwayland.enable = true;
package = lib.mkIf cfg.useFlake flake-package;
portalPackage = lib.mkIf cfg.useFlake flake-portal;
};
hardware.opengl = let
hyprland-pkgs = inputs.hyprland.inputs.nixpkgs.legacyPackages.${pkgs.system};
hyprlandMesa = hyprland-pkgs.mesa.drivers;
hyprlandMesa32 = hyprland-pkgs.pkgsi686Linux.mesa.drivers;
useHyprlandMesa = cfg.useFlake && (config.nixfiles.nixpkgs == inputs.nixpkgs);
in
lib.mkIf useHyprlandMesa {
package = hyprlandMesa;
package32 = hyprlandMesa32;
};
environment.variables = lib.mkMerge [
{
# NIXOS_OZONE_WL = "1"; # this is breaking things for some reason
}
(lib.mkIf (nvidiaEnabled && config.hardware.nvidia.modesetting.enable) {
WLR_NO_HARDWARE_CURSORS = "1";
})
];
xdg.portal = {
enable = true;
extraPortals = [
pkgs.xdg-desktop-portal-gtk
];
};
environment.systemPackages = with pkgs; [
kitty
dunst
kdePackages.polkit-kde-agent-1
eww
hyprpaper
rofi
hyprpicker
udiskie
];
};
}