{ lib, config, pkgs, ... }: with lib; let cfg = config.roles.desktop; in { options.roles.desktop = { enable = mkEnableOption "Enable the desktop role"; x11Only = mkOption { type = types.bool; default = false; }; }; config = { services.xserver.xkb = { layout = "us"; variant = ""; options = "caps:escape"; }; services.xserver.enable = true; services.xserver.displayManager = { lightdm.enable = true; }; services.desktopManager.plasma6.enable = true; services.xserver.windowManager.i3 = { enable = true; extraPackages = with pkgs; [ dmenu i3status i3lock ]; }; programs.dconf.enable = true; services.gnome.gnome-keyring.enable = true; environment.systemPackages = with pkgs; mkIf (!cfg.x11Only) [ grim slurp wl-clipboard mako ]; programs.sway = mkIf (!cfg.x11Only) { enable = true; wrapperFeatures.gtk = true; }; programs.light.enable = mkIf (!cfg.x11Only) true; programs.kdeconnect.enable = true; programs.java.enable = true; programs.steam = { enable = true; remotePlay.openFirewall = true; localNetworkGameTransfers.openFirewall = true; #package = pkgs.steam.override { #withJava = true; #withPrimus = true; #extraPkgs = pkgs: [ bumblebee glxinfo ]; #}; }; services.sunshine = { enable = true; autoStart = true; capSysAdmin = true; openFirewall = true; }; virtualisation.docker.enable = true; users.extraGroups.docker.members = [ "johno" ]; }; }