{ config, pkgs, ... }:

{
  # programs.ibus.enable = true;
  # programs.ibus.plugins = [ pkgs.ibus-anthy pkgs.mozc ];
  i18n.inputMethod = {
    enabled = "fcitx";
    fcitx.engines = with pkgs.fcitx-engines; [ mozc anthy table-other m17n ];
  };

  environment.systemPackages = with pkgs; with gnome3; [
    i3
    i3status
    rofi
    rofi-pass
    pa_applet
    feh
    gnome_keyring
    networkmanagerapplet
    gnome_terminal
    nautilus # in closure of gnome-terminal anyhow
    colord
    evince
    arandr
    xss-lock i3lock
    xdotool
    scrot
    pavucontrol
    dconf-editor

    # gnome3 core packages
    desktop_file_utils shared_mime_info
    glib gtk3
    glib_networking gvfs dconf
    gnome_settings_daemon
    gnome_themes_standard defaultIconTheme
    hicolor_icon_theme
  ];

  fonts = {
    enableDefaultFonts = false;
    fonts = with pkgs; [
      xorg.fontbhlucidatypewriter100dpi
      xorg.fontbhlucidatypewriter75dpi
      dejavu_fonts
      freefont_ttf
      gyre-fonts # TrueType substitutes for standard PostScript fonts
      liberation_ttf
      xorg.fontbh100dpi
      xorg.fontmiscmisc
      xorg.fontcursormisc
      # unifont

      wqy_microhei
      inconsolata
      dejavu_fonts
      ipafont
      ipaexfont
      # unifont
      ubuntu_font_family
      source-code-pro
      fira
      noto-fonts-emoji

      cantarell_fonts # from gnome3 module
    ];
  };

  services.xserver = {
    enable = true;

    displayManager = {
      # slim.enable = true;
      # slim.defaultUser = "gebner";
      # # slim.autoLogin = true;

      lightdm.enable = true;
    };

    desktopManager = {
      default = "i3wm";
      xterm.enable = false;

      session = [ {
        name = "i3wm";
        start = ''
          export XDG_DATA_DIRS=/run/current-system/sw/share/''${XDG_DATA_DIRS:+:}$XDG_DATA_DIRS
          export $(${pkgs.gnome3.gnome_keyring}/bin/gnome-keyring-daemon --start --components=pkcs11,secrets,ssh,gpg)
          export XDG_CURRENT_DESKTOP=GNOME
          for m in xsettings; do
            ${pkgs.gnome3.gnome_settings_daemon}/libexec/gsd-$m &
          done
          i3 &
          waitPID=$!
        '';
      } ];
    };

    updateDbusEnvironment = true;

    windowManager = {
      default = "i3";
      i3.enable = true;
    };

    layout = "us";
    xkbVariant = "altgr-intl";
    xkbOptions = "caps:ctrl_modifier";
  };

  services.dbus.packages = with pkgs; [ dunst gnome3.gcr ];
  services.udev.packages = [ pkgs.gnome3.gnome_settings_daemon ];

  # copied from gnome3 module
  security.polkit.enable = true;
  services.udisks2.enable = true;
  services.accounts-daemon.enable = true;
  services.geoclue2.enable = true;
  services.gnome3.at-spi2-core.enable = true;
  # services.gnome3.evolution-data-server.enable = true;
  # services.gnome3.gnome-documents.enable = true;
  services.gnome3.gnome-keyring.enable = true;
  #services.gnome3.gnome-online-accounts.enable = true;
  # services.gnome3.gnome-user-share.enable = true;
  services.gnome3.gvfs.enable = true;
  services.gnome3.seahorse.enable = true;
  services.gnome3.sushi.enable = true;
  # services.gnome3.tracker.enable = true;
  hardware.pulseaudio.enable = true;
  services.telepathy.enable = true;
  networking.networkmanager.enable = true;
  services.upower.enable = config.powerManagement.enable;
  hardware.bluetooth.enable = true;
  # Needed for themes and backgrounds
  environment.pathsToLink = [ "/share" ];
  environment.variables.GIO_EXTRA_MODULES = with pkgs.gnome3; [
    "${pkgs.lib.getLib dconf}/lib/gio/modules"
    "${glib_networking.out}/lib/gio/modules"
    "${gvfs}/lib/gio/modules" ];

}