Files
nixos-config/modules/system/hyprland/default.nix
2025-03-15 14:18:21 -05:00

133 lines
3.3 KiB
Nix

{ inputs, pkgs, pkgs-stable, config, lib, ... }:
let
cfg = config.systemSettings.hyprland;
in
{
options = {
systemSettings.hyprland = {
enable = lib.mkEnableOption "Enable hyprland";
};
};
config = lib.mkIf cfg.enable {
# Hyprland
programs = {
hyprland = {
enable = true;
package = inputs.hyprland.packages.${pkgs.system}.hyprland;
xwayland = {
enable = true;
};
portalPackage = pkgs.xdg-desktop-portal-hyprland;
};
};
# Necessary packages
environment.systemPackages = with pkgs; [
jq
(sddm-chili-theme.override {
themeConfig = {
background = config.stylix.image;
ScreenWidth = 1920;
ScreenHeight = 1080;
blur = true;
recursiveBlurLoops = 3;
recursiveBlurRadius = 5;
# TODO fix icons with svgs patched from stylix colors
};})
];
# Display manager
services.xserver.displayManager.sddm = {
enable = true;
wayland.enable = true;
enableHidpi = true;
theme = "chili";
package = pkgs.libsForQt5.sddm;
};
services.upower.enable = true;
# Define systemd service to run on boot to load avatars for sddm
systemd.services."sddm-avatar" = {
description = "Service to copy or update users Avatars at startup.";
wantedBy = [ "multi-user.target" ];
before = [ "sddm.service" ];
script = ''
set -eu
mkdir -p /var/lib/AccountsService/icons
for user in /home/*; do
username=$(basename "$user")
if [ -f "$user/.face.icon" ]; then
if [ ! -f "/var/lib/AccountsService/icons/$username" ]; then
cp "$user/.face.icon" "/var/lib/AccountsService/icons/$username"
else
if [ "$user/.face.icon" -nt "/var/lib/AccountsService/icons/$username" ]; then
cp "$user/.face.icon" "/var/lib/AccountsService/icons/$username"
fi
fi
fi
done
'';
serviceConfig = {
Type = "simple";
User = "root";
StandardOutput = "journal+console";
StandardError = "journal+console";
};
};
# # Ensures SDDM starts after the service.
systemd.services.sddm = { after = [ "sddm-avatar.service" ]; };
# xwayland
services.xserver = {
enable = true;
xkb = {
layout = "us";
variant = "";
options = "caps:escape";
};
excludePackages = [ pkgs.xterm ];
};
# Keyring
security.pam.services.login.enableGnomeKeyring = true;
services.gnome.gnome-keyring.enable = true;
# Dbus
services.dbus = {
enable = true;
packages = [ pkgs.dconf ];
};
programs.dconf.enable = true;
# Pipewire
security.rtkit.enable = true;
services.pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
jack.enable = true;
};
# Some fancy fonts
fonts.packages = with pkgs-stable; [
# Fonts
nerdfonts
powerline
];
# Auto rotate screen
programs.iio-hyprland = {
enable = true;
package = pkgs.iio-hyprland.overrideAttrs {
patches = [ ./iio-hyprland-hyprpaper.patch ];
};
};
};
}