{
  config,
  lib,
  fn,
  pkgs,
  ...
}:
with lib; let
  cfg = config.machine;
  desktopFiles = fn.lst {
    p = toString ./desktop;
    b = 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 = {
          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"
    '';
  }