{ config, inputs, lib, perSystem, pkgs, ... }: let inherit (lib) mkIf mkEnableOption; cfg = config.desktop.niri; in { options = { desktop.niri.enable = mkEnableOption "enable niri desktop"; }; config = lib.mkMerge [ (mkIf cfg.enable { module.desktop.displayManager = "greetd"; module.gnome-keyring.enable = true; module.pipewire.enable = true; # nixpkgs.overlays = [inputs.niri.overlays.default]; programs.niri.enable = true; # wayland compositor in rust programs.niri.package = perSystem.niri-flake.niri-unstable; environment.variables = { NIXOS_OZONE_WL = "1"; }; security = { pam.services.gtklock = {}; soteria.enable = true; # polkit agent in rust }; services = { blueman.enable = config.hardware.bluetooth.enable; gvfs.enable = true; }; xdg.portal = { enable = true; extraPortals = with pkgs; [xdg-desktop-portal-gnome xdg-desktop-portal-gtk]; config.niri.default = ["gnome" "gtk"]; }; }) (mkIf (cfg.enable && config.services.displayManager.autoLogin.enable) { services.greetd.settings.initial_session = { command = "niri-session"; user = config.services.displayManager.autoLogin.user; }; }) ]; }