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

with pkgs;

let
  emacs-vterm = ((emacsPackagesNgGen emacsPgtkGcc).emacsWithPackages
    (epkgs: [ epkgs.vterm ]));

in {
  environment.systemPackages = [
    # Monitoring
    htop
    acpi
    # Password management
    gnupg
    pass-wayland
    passff-host
    gitAndTools.pass-git-helper
    inputs.agenix.defaultPackage.x86_64-linux
    git-crypt
    # Browsers
    firefox
    ungoogled-chromium
    # LaTeX
    texlive.combined.scheme-full
    pandoc
    texlab
    # Text editors
    neovim
    emacs-vterm
    ripgrep
    fd
    clang
    coreutils
    # Terminals
    tmux
    tmuxp
    fish
    # Development
    git
    direnv
    nix-direnv
    podman-compose
    gnumake
    gitAndTools.pre-commit
    # Rice
    adapta-gtk-theme
    paper-icon-theme
    # Audio
    mopidy
    ncmpcpp
    mpc_cli
    alsa-firmware
    pulsemixer
    # Productivity
    fff
    zathura
    libreoffice-fresh
    gnome3.simple-scan
    bc
    # Mail stack
    neomutt
    isync
    notmuch
    msmtp
    w3m
    urlscan
    # Media
    gimp
    mpv
    nodePackages.peerflix
    deluge
    youtube-dl-light
    calibre
    # File management
    zip
    unzip
    unar
    # Overlays
    cachix
    # Videoconference
    zoom-us
    teams
    # Networking
    openvpn
    # Programming tools
    ## Shell
    shellcheck
    shfmt
    ## Nix
    nixfmt
    ## Python
    nodePackages.pyright
    black
    ## C/C++
    clang-tools
    ## Go
    gopls
    gotests
    gore
    golangci-lint
  ];

  # Fonts declaration
  fonts.fonts = with pkgs; [
    google-fonts
    inconsolata-nerdfont
    terminus_font_ttf
    iosevka-bin
    libertine
    emacs-all-the-icons-fonts
  ];

}