{ config, lib, pkgs, ... }@inputs:

let
  cfg = config.sydnix.niri;
in {
  options.sydnix.niri.enable =
    lib.mkEnableOption "Niri";

  config = lib.mkIf cfg.enable {
    nixpkgs.overlays = [ inputs.niri.overlays.niri ];

    programs.niri = {
      enable = true;
      package = pkgs.niri-unstable;
    };

    security.pam.services.swaylock = {};
    
    # Necessary for e.g. screensharing.
    xdg.portal = {
      enable = true;
      # See https://github.com/YaLTeR/niri/wiki/Important-Software#portals.
      # Niri's NixOS module appears to automatically bring in
      # xdg-desktop-portal-gnome and gnome-keyring.
      extraPortals = [
        pkgs.xdg-desktop-portal-gtk
        pkgs.xdg-desktop-portal-wlr
      ];
      xdgOpenUsePortal = true;
      config.preferred = {
        default = [ "gtk" ];
        "org.freedesktop.impl.portal.Screenshot" = [ "wlr" ];
        "org.freedesktop.impl.portal.ScreenCast" = [ "wlr" ];
      };
    };
  };
}

