{
  config,
  lib,
  fn,
  pkgs,
  ...
}:
with lib;
let
  cfg = config.machine;
  desktopFiles = fn.lst {
    path = toString ./desktop;
    fullPath = true;
  };
in
{
  imports = desktopFiles;
}
// mkIf (elem "desktop" cfg.services) {
  xdg.portal = {
    enable = true;
    wlr.enable = true;
    extraPortals = with pkgs; [
      xdg-desktop-portal-gtk
      xdg-desktop-portal-gnome
    ];
  };
  services = {
    gvfs.enable = true;
    libinput = {
      enable = true;
      touchpad = {
        tapping = true;
        disableWhileTyping = false;
        naturalScrolling = false;
        horizontalScrolling = true;
      };
    };
  };
  programs = {
    dconf.enable = true;
    regreet = {
      enable = true;
      settings = {
        background = {
          path = "/persist/data/wallpaper.jpg";
          # Available values: "Fill", "Contain", "Cover", "ScaleDown"
          fit = "Fill";
        };
        GTK = {
          application_prefer_dark_theme = true;
          theme_name = lib.mkForce "Kanagawa-BL";
        };
      };
    };
  };

  environment = {
    systemPackages = with pkgs; [ kanagawa ];
    etc."xdg/gtk-2.0/gtkrc".text = ''
      gtk-key-theme-name = "Kanagawa-BL"
    '';
    etc."xdg/gtk-3.0/settings.ini".text = ''
      [Settings]
      gtk-key-theme-name = Kanagawa-BL
    '';
    # Set keyboard layout for regreet cage
    # see man cage or:
    # https://man.archlinux.org/man/cage.1.en#ENVIRONMENT
    variables.XKB_DEFAULT_LAYOUT = "de";
  };

  # Allow users in the video group to change the display brightness
  services.udev.extraRules = ''
    ACTION=="add", SUBSYSTEM=="backlight", RUN+="${pkgs.coreutils}/bin/chgrp video /sys/class/backlight/%k/brightness"
    ACTION=="add", SUBSYSTEM=="backlight", RUN+="${pkgs.coreutils}/bin/chmod 664 /sys/class/backlight/%k/brightness"
  '';
}