{ self, config, pkgs, lib, ... }:
let
  tex = (pkgs.texlive.combine {
    inherit (pkgs.texlive) scheme-basic
      dvisvgm dvipng# for preview and export as html
      wrapfig amsmath ulem hyperref capt-of;
    #(setq org-latex-compiler "lualatex")
    #(setq org-preview-latex-default-process 'dvisvgm)
  });
  dracula-gtk = pkgs.fetchFromGitHub {
    owner = "dracula";
    repo = "gtk";
    rev = "502f212d83bc67e8f0499574546b99ec6c8e16f9";
    sha256 = "1wx9nzq7cqyvpaq4j60bs8g7gh4jk8qg4016yi4c331l4iw1ymsa";
  };
in
{
  # TODO modularize
  imports = [
    ./battery-low-timer.nix
    ./cal-alarms.nix
  ];

  # Secrets used by home-manager modules 
  age.secrets.fastmail.file = "${self}/secrets/fastmail.age";
  age.secrets.fastmail.owner = "anish";

  age.secrets.mossnet.file = "${self}/secrets/mossnet.age";
  age.secrets.mossnet.owner = "anish";

  # Taskwarrior private key
  age.secrets.taskwarrior-private.file = "${self}/secrets/taskwarrior-private.age";
  age.secrets.taskwarrior-private.owner = "anish";

  # We don't plug USBs into servers
  services.devmon.enable = true;

  services = {
    gnome.gnome-keyring.enable = true;
    upower.enable = true;

    dbus = {
      enable = true;
      packages = [ pkgs.dconf ];
    };
  };
  programs.dconf.enable = true;

  security.pam.services.Default.enableGnomeKeyring = true;
  security.pam.services.Login.enableGnomeKeyring = true;
  security.pam.services.sddm.enableGnomeKeyring = true;

  environment.sessionVariables = rec {
    XDG_CACHE_HOME = "\${HOME}/.cache";
    XDG_CONFIG_HOME = "\${HOME}/.config";
    XDG_BIN_HOME = "\${HOME}/.local/bin";
    XDG_DATA_HOME = "\${HOME}/.local/share";

    PATH = [
      "\${XDG_BIN_HOME}"
    ];
  };

  environment.systemPackages = with pkgs; [
    unstable.sublime-music
    unstable.nheko
    unstable.tuba
    unstable.newsflash
    unstable.liferea

    scrot
    ripcord
    xfce.orage
    feh
    sxiv
    xkblayout-state
    vcv-rack
    zathura
    calibre
    fractal
    mpv
    zeal
    xclip
    xdotool
    rofi
    rofimoji
    rofi-calc
    eww
    obs-studio
    lightdm
    dunst
    libnotify
    (polybar.override {
      pulseSupport = true;
      nlSupport = true;
    })
    papirus-icon-theme
    calendar-cli
    wyrd
    tex
    tic-80
    ytfzf
    yt-dlp
  ];

  location.provider = "geoclue2";
  services = {
    redshift = {
      enable = true;
      temperature = {
        day = 5500;
        night = 3700;
      };
    };
    xserver = {
      enable = true;
      layout = "us,dvorak";
      desktopManager.wallpaper.mode = "fill";
      displayManager = {
        defaultSession = "none+bspwm";
        sessionCommands = ''
          ${pkgs.xorg.xrdb}/bin/xrdb -merge <<EOF
          #define blk  #1F2430
          #define bblk #F28779
          #define red  #A6CC70
          #define bred #FFCC66
          #define grn  #5CCFE6
          #define bgrn #F29E74
          #define ylw  #77A8D9
          #define bylw #5C6773
          #define blu  #707A8C
          #define bblu #F27983
          #define mag  #BAE67E
          #define bmag #FFD580
          #define cyn  #73D0FF
          #define bcyn #FFA759
          #define wht  #95E6CB
          #define bwht #CBCCC6
          #define bg blk
          #define fg wht
          
          *.foreground:  fg
          *.background:  bg
          *.cursorColor: mag
          
          *.color0:  blk
          *.color8:  bblk
          *.color1:  red
          *.color9:  bred
          *.color2:  grn
          *.color10: bgrn
          *.color3:  ylw
          *.color11: bylw
          *.color4:  blu
          *.color12: bblu
          *.color5:  mag
          *.color13: bmag
          *.color6:  cyn
          *.color14: bcyn
          *.color7:  wht
          *.color15: bwht
          
          ! greys
          *.color234: #1E2029
          *.color235: #282a36
          *.color236: #373844
          *.color237: #44475a
          *.color239: #565761
          *.color240: #6272a4
          *.color241: #b6b6b2

          # hotplug
          connect() {
              # Turn it on if it was off
              xrandr --output HDMI-2 --auto
              xrandr --output HDMI-2 --same-as eDP-1
          }

          disconnect() {
              xrandr --output HDMI-2 --off
          }

          xrandr | grep "HDMI-2 connected" &>>/dev/null && connect || disconnect
          EOF
        '';
        lightdm = {
          enable = true;
          background = "/etc/nixos/users/profiles/desktop/background.jpg";
          greeters.mini = {
            enable = true;
            user = "anish";
            extraConfig = ''
              text-color = "#ff79c6"
              password-background-color = "#1E2029"
              window-color = "#181a23"
              border-color = "#181a23"
            '';
          };
        };
      };
      windowManager.bspwm.enable = true;
      #windowManager.bspwm.configFile = "/home/anish/.bspwm/bspwmrc";
      windowManager.bspwm.sxhkd.configFile = "/home/anish/.config/sxhkdrc";
    };
  };

  fonts.fonts = with pkgs; [
    fira-code
    fira-code-symbols
    hermit
    #hack
    siji
    font-awesome
    proggyfonts
    (nerdfonts.override { fonts = [ "FiraCode" "DroidSansMono" "Iosevka" ]; })
  ];
}
