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

let tmux_config = builtins.readFile /home/coolneng/.tmux.conf;

in {
  # Display manager
  services.xserver.enable = true;
  services.xserver.displayManager = {
    defaultSession = "sway";
    autoLogin = {
      enable = true;
      user = "coolneng";
    };
    lightdm = {
      enable = true;
      greeter.package = pkgs.lightdm_gtk_greeter;
    };
  };

  # Window manager
  programs.sway = {
    enable = true;
    extraPackages = with pkgs; [
      xwayland
      swaylock
      swayidle
      swaybg
      rofi
      waybar
      clipman
      wl-clipboard
      grim
      slurp
      light
      imv
      kanshi
      kitty
    ];
    extraSessionCommands = ''
      export MOZ_ENABLE_WAYLAND=1
      export MOZ_DBUS_REMOTE=1
      export GRIM_DEFAULT_DIR=/home/coolneng/Photos/Screenshots
      export _JAVA_AWT_WM_NONREPARENTING=1
      export QT_QPA_PLATFORM=wayland
      export QT_WAYLAND_DISABLE_WINDOWDECORATION="1"
      export SDL_VIDEODRIVER=wayland
      export GTK_THEME=Adapta-Eta
    '';
  };

  # Backlight
  programs.light.enable = true;

  # Blue light filter
  location = {
    latitude = 35.89;
    longitude = -5.32;
    provider = "manual";
  };

  services.redshift = {
    package = pkgs.redshift-wlr;
    enable = true;
    temperature = {
      day = 6500;
      night = 5300;
    };
  };

  # Bar
  programs.waybar.enable = true;

  # GPG agent
  programs.gnupg.agent = {
    enable = true;
    pinentryFlavor = "gtk2";
  };

  # Tmux
  programs.tmux = {
    enable = true;
    historyLimit = 5000;
    keyMode = "vi";
    shortcut = "x";
    terminal = "screen-256";
    baseIndex = 1;
    extraConfig = tmux_config;
  };

  # Automount external storage
  services.autofs = {
    enable = true;
    timeout = 5;
    autoMaster = let
      mapConf = pkgs.writeText "auto" ''
        usb  -fstype=auto      :/dev/sdb1
        sdcard  -fstype=auto   :/dev/mmcblk0p1
      '';
    in ''
      /media file:${mapConf} --timeout=5
    '';
  };

  # Integrate pass with the browser
  programs.browserpass.enable = true;

}