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

let
  scripts = ./scripts;
  extra = ./extra;
  terminal = pkgs.alacritty;
in {
  imports = [
      ./programs/kdeconnect.nix
      ./programs/ssh.nix
      ./programs/zsh.nix
  ];
  home.username = "alice";
  home.homeDirectory = "/home/alice";

  home.stateVersion = "23.11";

  # Configure cursor
  home.pointerCursor = {
    package = pkgs.vanilla-dmz;
    name = "Vanilla-DMZ";
    size = 256;
  };

  # Configure icon theme
  gtk = {
    enable = true;
    iconTheme = {
      name = "Papirus";
      package = pkgs.papirus-icon-theme;
    };
  };

  # Configure internationalization
  # i18n.inputMethod.enabled = "fcitx5";

  # Configure xdg-desktop-portal (for file picker, etc.)
  # xdg.portal = {
  #     enable = true;
  # };

  # Configure gammastep (night shift)
  services.gammastep = {
    enable = true;
    temperature.day = 6500;
    temperature.night = 4000;
    # boul robert-bourassa/boul rené-lévesque : 45.498743909804354, -73.5703457606738
    latitude = 45.4987;
    longitude = -73.5703;
    # tray = true;
  };

  # Install packages
  home.packages = with pkgs;
    let
      xdg-terminal-exec =
        callPackage ./pkgs/xdg-terminal-exec/xdg-terminal-exec.nix { };
      mons = callPackage ./pkgs/mons/mons.nix { };
      archivo = callPackage ./pkgs/archivo/archivo.nix { };
      highway-gothic = callPackage ./pkgs/highway-gothic/highway-gothic.nix { };
    in [ gcc tree-sitter ] ++ # Basic dev tools
    [ marksman nil ] ++ # Language servers except those installed through package sections
    [ texliveFull texlab ] ++ # LaTeX
    (with ocamlPackages; [
      ocaml
      opam
      dune_3
      dune-release
      merlin
      ocaml-lsp
      odoc
      ocamlformat
      utop
    ]) ++ # OCaml
    [ rustup ] ++ # Rust
    [ go gopls ] ++ # Golang
    (with elmPackages; [ elm elm-language-server elm-format elm-test ]) ++
    [ python3 ] ++ # I guess.....
    [
      kak-lsp
      brightnessctl
      grim
      slurp
      wl-clipboard
      jq
      xdg-terminal-exec
      blueman
      upower
    ] ++ # Basic utilities
    [ bitwarden-cli htop snore hledger hledger-ui ]
    ++ # Personalized selection of command-line (CLI/TUI) apps
    [ terminal ] ++ # Terminal emulator
    [
      qutebrowser
      cinnamon.nemo
      gnome.file-roller
      cinnamon.nemo-fileroller
      evince
      imv
      vlc
      pavucontrol
    ] ++ # Basic graphical apps
    [
      libreoffice
      signal-desktop
      element-desktop
      prismlauncher
      mumble
      gimp
      inkscape
      deluge-gtk
      shotwell
      lorien
      keepassxc
      zulip
      filezilla
      bitwarden
    ] ++ # Personalized selection of graphical apps
    [ mons shticker-book-unwritten ] ++ # Games
    [ swaybg bemenu j4-dmenu-desktop ] ++ # Sway- and Wayland-related packages
    [
      noto-fonts
      redhat-official-fonts
      overpass
      ibm-plex
      rubik
      archivo
      highway-gothic
      font-awesome
    ] ++ # Fonts
    # [ papirus-icon-theme ] ++ # Icons
    # [ vanilla-dmz ] ++ # Cursor
    [ ] ++ # Temp
    [ ];

  programs.home-manager.enable = true;

  programs.git = {
    enable = true;
    userName = "vorboyvo";
    userEmail = "mrsirofvibe@outlook.com";
    extraConfig = {
      init.defaultBranch = "main";
      core.editor = "kak";
    };
  };

  wayland.windowManager.sway = import ./programs/sway.nix {
    inherit scripts extra config lib pkgs terminal;
  };

  programs.waybar =
    import ./programs/waybar.nix { inherit scripts config lib pkgs terminal; };

  programs.swaylock = {
    enable = true;
    settings = { font-size = 14; };
  };
  services.swayidle = {
    enable = true;
    events = [{
      event = "before-sleep";
      command = "${pkgs.lib.getExe pkgs.swaylock} -f";
    }];
  };

  # Fixes electron apps
  home.sessionVariables = { NIXOS_OZONE_WL = "1"; };

  # configure fonts correctly
  fonts.fontconfig.enable = true;
  xdg.configFile."fontconfig/conf.d/20-default.fonts.conf".source =
    "${extra}/20-default-fonts.conf";

  # fix nemo terminal integration
  # dconf.settings."org/cinnamon/desktop/applications/terminal".exec =
  #   "${pkgs.lib.getExe terminal}";
  # dconf.settings."org/cinnamon/desktop/applications/terminal".exec-arg = "-e --cwd %F";

  # terminal emulator
  programs.alacritty.enable = true;

  # programs.neovim = import ./programs/neovim.nix;

  programs.kakoune = import ./programs/kakoune.nix pkgs;
  xdg.configFile."kak-lsp/kak-lsp.toml".source =
    ./programs/kakoune/kak-lsp.toml;
  xdg.desktopEntries.kakoune = {
    name = "Kakoune";
    genericName = "Text Editor";
    comment = "Edit text files";
    icon = "kak";
    exec = "kak %F";
    terminal = true;
    mimeType = [
      "text/english"
      "text/plain"
      "text/x-makefile"
      "text/x-c++hdr"
      "text/x-c++src"
      "text/x-chdr"
      "text/x-csrc"
      "text/x-java"
      "text/x-moc"
      "text/x-pascal"
      "text/x-tcl"
      "text/x-tex"
      "application/x-shellscript"
      "text/x-c"
      "text/x-c++"
    ];
    categories = [ "Utility" "TextEditor" ];
  };

  # programs.zathura = {
  #   enable = true;
  # };

  programs.pandoc = { enable = true; };

  # Configure notifications
  services.dunst = {
    enable = true;
    settings = {
      global = {
        font = "Red Hat Display 12";
        mouse_left_click = "do_action, close_current";
        mouse_middle_click = "close_all";
        mouse_right_click = "close_current";
      };
    };
  };
  services.batsignal = {
      enable = true;
      extraArgs = [
          "-w 20"
          "-c 10"
          "-d 3"
      ];
  };

  programs.firefox = import ./programs/firefox.nix { inherit pkgs; };

  programs.thunderbird = import ./programs/thunderbird.nix;
}
