{ config, pkgs, lib, ... }:

with lib;

let

  cfg = config.system.custom.x11;

in {

  options.system.custom.x11 = {
    enable = mkEnableOption "enable x11";
    autoLoginUser = mkOption {
      type = with types; str;
      description = "user to login";
    };
  };

  config = mkIf cfg.enable {

    services.xserver = {

      enable = true;

      # Configure video Drivers
      # -----------------------
      videoDrivers = [ "intel" ];
      deviceSection = ''
        Option "DRI" "2"
        Option "TearFree" "true"
      '';

      # window-manager : Xmonad
      # -----------------------
      displayManager = {
        defaultSession = lib.mkDefault "none+xmonad";
        autoLogin.enable = lib.mkDefault true;
        autoLogin.user = cfg.autoLoginUser;
        lightdm.enable = lib.mkDefault true;
      };

      desktopManager = {
        xterm.enable = false;
        #gnome3.enable = lib.mkDefault true;
      };
      windowManager = {
        xmonad.enable = true;
        xmonad.enableContribAndExtras = true;
        i3.enable = true;
      };

      # mouse/touchpad
      # --------------
      libinput = {
        enable = true;
        touchpad = {
          disableWhileTyping = true;
          tapping = true;
          scrollMethod = "twofinger";
          accelSpeed = "2";
        };
      };

      # Wacom configuraton
      # ------------------
      modules = [ pkgs.xf86_input_wacom ];
    };

    # Packages
    # --------
    environment.systemPackages = with pkgs; [

      dmenu
      arandr
      xcalib
      flameshot
      xorg.xmodmap
      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 = "";

  };
}