{ config, lib, pkgs, ... }: with lib; let cfg = config.machine; ifelse = a: b: c: if a then b else c; in mkIf (elem "desktop" cfg.services) { programs.sway = mkIf (elem "sway" cfg.desktop.wms) # (import ./desktop/sway.nix { inherit pkgs; }); { enable = true; extraPackages = with pkgs; [ file i3status dmenu qt5.qtwayland grim slurp swaylock swayidle light mako wl-clipboard wf-recorder ]; extraSessionCommands = '' export GDK_BACKEND=wayland export CLUTTER_BACKEND=wayland export SDL_VIDEODRIVER=wayland # needs qt5.qtwayland in systemPackages export QT_QPA_PLATFORM=wayland-egl export QT_WAYLAND_FORCE_DPI=physical export QT_WAYLAND_DISABLE_WINDOWDECORATION="1" # Fix for some Java AWT applications (e.g. Android Studio), # use this if they aren't displayed properly: export _JAVA_AWT_WM_NONREPARENTING=1 ''; }; services.gvfs.enable = true; environment.variables.GIO_EXTRA_MODULES = [ "${pkgs.gnome3.gvfs}/lib/gio/modules" ]; services.xserver = { enable = !(elem "sway" cfg.desktop.wms); layout = "de"; displayManager.defaultSession = ifelse (cfg.desktop.wms != []) (elemAt cfg.desktop.wms 0) null; windowManager = mkIf (cfg.desktop.wms != []) { i3 = mkIf (elem "i3" cfg.desktop.wms) (import ./desktop/i3.nix { inherit pkgs; }); }; libinput = { enable = true; touchpad = { tapping = true; disableWhileTyping = false; naturalScrolling = false; horizontalScrolling = true; }; }; }; machine.pkgsets.python3.pkgs = with pkgs.gitpkgs.python38Packages; [ py3status pytz tzlocal ]; }