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

with lib;
let
  profile = config.fudo.common.profile;

  common-packages = with pkgs; [
    ffmpeg-full
    libfixposix
    mono
    nomacs
    python37Packages.youtube-dl
    sqlite
    system-config-printer
  ];

  gui-packages = with pkgs; [
    cool-retro-term
    corefonts
    chrome-gnome-shell
    chromium
    emacs
    evince
    firefox
    gimp
    glxinfo
    gnome3.gnome-shell
    gnome3.gnome-session
    google-chrome
    gtk2
    gtk2-x11
    gtk3
    gtkimageview
    i3lock
    mplayer
    mpv
    pdftk
    racket
    redshift
    rhythmbox
    shotwell
    spotify
    (steam.override {
      nativeOnly = true;
      extraPkgs = pkgs: [
        mono
        fmodex
        gtk3
        gtk3-x11
        libgdiplus
        zlib
      ];
      withJava = true;
    }).run
    virtmanager
    xorg.xev
    xzgv
    virtmanager-qt
  ];

  cfg = config.fudo.common;

in mkIf ((profile == "desktop") || (profile == "laptop")) {
  environment.systemPackages =
    common-packages ++ (if cfg.enable-gui then gui-packages else []);

  nixpkgs.config.allowBroken = true;

  services.avahi = {
    enable = true;
    browseDomains = [config.fudo.common.domain];
    domainName = config.fudo.common.domain;
  };

  # splash screen
  boot.plymouth.enable = false;

  boot.tmpOnTmpfs = true;

  services.xserver = if cfg.enable-gui then {
    enable = true;

    layout = "us";
    xkbVariant = "dvp";
    xkbOptions = "ctrl:nocaps";

    desktopManager.gnome3.enable = true;

    displayManager.gdm.enable = true;

    # displayManager.defaultSession = "gnome";

    windowManager.stumpwm.enable = true;

    # windowManager.session = pkgs.lib.singleton {
    #   name = "stumpwm";
    #   start = ''
    #     ${pkgs.lispPackages.stumpwm}/bin/stumpwm &
    #     waidPID=$!
    #   '';
    # };
  }  else {
    layout = "us";
    xkbVariant = "dvp";
    xkbOptions = "ctrl:nocaps";
  };

  services.gnome3 = mkIf cfg.enable-gui {
    evolution-data-server.enable = pkgs.lib.mkForce false;
    gnome-user-share.enable = pkgs.lib.mkForce false;
  };

  services.dbus.socketActivated = true;

  sound.enable = true;

  hardware.pulseaudio.enable = true;

  fonts = mkIf cfg.enable-gui {
    enableFontDir = true;
    #fontconfig.antialias = true;
    fontconfig.enable = true;
    #fontconfig.penultimate.enable = true;
    #fontconfig.subpixel.lcdfilter = "default";

    fonts = with pkgs; [
      cantarell_fonts
      dejavu_fonts
      dina-font
      dosemu_fonts
      fira-code
      fira-code-symbols
      freefont_ttf
      liberation_ttf
      mplus-outline-fonts
      #nerdfonts
      noto-fonts
      noto-fonts-cjk
      noto-fonts-emoji
      proggyfonts
      terminus_font
      ubuntu_font_family
      ucsFonts
      ultimate-oldschool-pc-font-pack
      unifont
      vistafonts
      xlibs.fontadobe100dpi
      xlibs.fontadobe75dpi
      xlibs.fontadobeutopia100dpi
      xlibs.fontadobeutopia75dpi
      xlibs.fontadobeutopiatype1
      xlibs.fontarabicmisc
      xlibs.fontbh100dpi
      xlibs.fontbh75dpi
      xlibs.fontbhlucidatypewriter100dpi
      xlibs.fontbhlucidatypewriter75dpi
      xlibs.fontbhttf
      xlibs.fontbhtype1
      xlibs.fontbitstream100dpi
      xlibs.fontbitstream75dpi
      xlibs.fontbitstreamtype1
      xlibs.fontcronyxcyrillic
      xlibs.fontcursormisc
      xlibs.fontdaewoomisc
      xlibs.fontdecmisc
      xlibs.fontibmtype1
      xlibs.fontisasmisc
      xlibs.fontjismisc
      xlibs.fontmicromisc
      xlibs.fontmisccyrillic
      xlibs.fontmiscethiopic
      xlibs.fontmiscmeltho
      xlibs.fontmiscmisc
      xlibs.fontmuttmisc
      xlibs.fontschumachermisc
      xlibs.fontscreencyrillic
      xlibs.fontsonymisc
      xlibs.fontsunmisc
      xlibs.fontwinitzkicyrillic
      xlibs.fontxfree86type1
    ];
  };
}