{ config, pkgs, lib, ... }: with lib; { imports = [ ./xlock.nix ]; options.components.gui.xorg.enable = mkOption { type = lib.types.bool; default = config.components.gui.enable; }; options.components.gui.xorg.lightdm.enable = mkOption { type = lib.types.bool; default = config.components.gui.xorg.enable; }; options.components.gui.xorg.sddm.enable = mkOption { type = lib.types.bool; default = !config.components.gui.xorg.lightdm.enable; }; config = mkMerge [ (mkIf (config.components.gui.xorg.lightdm.enable && config.components.gui.xorg.enable) { services.displayManager = { defaultSession = "none+i3"; autoLogin.enable = lib.mkDefault true; autoLogin.user = config.users.users.mainUser.name; }; services.xserver.displayManager.lightdm.enable = true; }) (mkIf (config.components.gui.xorg.sddm.enable && config.components.gui.xorg.enable) { services.xserver.displayManager.sddm.enable = true; }) (mkIf (config.components.gui.xorg.enable && config.components.gui.enable) { services.xserver.enable = true; services.xserver.windowManager.i3.enable = true; services.libinput = { enable = true; touchpad = { disableWhileTyping = true; tapping = true; scrollMethod = "twofinger"; accelSpeed = "1.3"; naturalScrolling = true; horizontalScrolling = true; }; }; # Packages # -------- environment.systemPackages = with pkgs; [ xclip #xtrlock-pam xorg.xev dmenu arandr xcalib flameshot feh ]; # Xresources config # ----------------- # spread the Xresource config # across different files # just add a file into `/etc/X11/Xresource.d/` and it will be # evaluated. services.xserver.displayManager.sessionCommands = '' for file in `ls /etc/X11/Xresource.d/` do ${pkgs.xorg.xrdb}/bin/xrdb -merge /etc/X11/Xresource.d/$file done ''; environment.etc."/X11/Xresource.d/.keep".text = ""; }) ]; }