{ config, pkgs, ... }:

{
  # Packages that should be installed to the user profile.
  home.packages = with pkgs; [
    bat # cat-alternative
    dasel # tool to manage yq, jq, toml and more
    direnv # tool to load custom environments
    docker-credential-helpers
    doggo # dns client
    exa # ls-alternative
    faas-cli # cli for openfaas
    fzf # fuzzy finder
    git # git
    gitflow # tool for git workflow
    git-lfs # git support for large files
    #git-secret # tool for secrets in git (gpg based)
    jq # tool for JSON
    moar # moar is less
    nix-direnv # allow better nix and direnv integration
    neovim # alternative to vim
    libnotify # allows sending notifications
    lsof # who uses that drive/directory
    openssh # ssh client and server
    pass # password-store
    playerctl # control media players
    p7zip # tool to extract 7z archives
    rclone # tool for remote storages
    restic # backup tool
    ripgrep # grep-alternative
    rmtrash # rm wrapper to use trash
    shellcheck # tool for shell-syntax
    #spotifyd # spotify-daemon
    (spotifyd.override { withMpris = true; }) # spotify-daemon
    tokei # project-language statistics
    unzip # unzip
    vimHugeX # vim with clipboard support
    xdg-user-dirs # tool manage user directories
    yq # tool for YAML
    yt-dlp # tool to download videos from the internet
    zip # zip
  ];

  # This value determines the Home Manager release that your
  # configuration is compatible with. This helps avoid breakage
  # when a new Home Manager release introduces backwards
  # incompatible changes.
  #
  # You can update Home Manager without changing this value. See
  # the Home Manager release notes for a list of state version
  # changes in each release.
  home.stateVersion = "22.11";

  # Let Home Manager install and manage itself.
  programs.home-manager.enable = true;

  targets.genericLinux.enable = true;

  nixpkgs.config.allowUnfree = true;
}