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

with pkgs;

let
  mpv-sponsorblock = (pkgs.wrapMpv pkgs.mpv-unwrapped {
    scripts = [ mpvScripts.sponsorblock ];
  });

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
    git-lfs
    # Browsers
    firefox-wayland
    ungoogled-chromium
    # LaTeX
    texlive.combined.scheme-full
    pandoc
    texlab
    # Text editors
    neovim
    neovim-remote
    emacs-vterm
    # Emacs dependencies
    (ripgrep.override { withPCRE2 = true; })
    fd
    clang
    coreutils
    # Terminals
    tmux
    tmuxp
    fish
    # Development
    git
    direnv
    nix-direnv
    gnumake
    gitAndTools.pre-commit
    # Rice
    adapta-gtk-theme
    paper-icon-theme
    # Audio
    mopidy
    ncmpcpp
    mpc_cli
    pulsemixer
    easyeffects
    # Productivity
    zathura
    libreoffice-fresh
    gnome.simple-scan
    bc
    citrix_workspace
    # Mail stack
    mu
    isync-oauth2
    msmtp
    # Media
    gimp
    mpv-sponsorblock
    nodePackages.webtorrent-cli
    deluge
    yt-dlp-light
    calibre
    beets
    # File management
    zip
    unzip
    unar
    cifs-utils
    keyutils
    # Overlays
    cachix
    # Networking
    openconnect-sso
    # 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
  ];

}