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

let

  memoryUsage = pkgs.writers.writeDashBin "memory-total-usage" ''
    echo "   %CPU    %MEM           MEM : PROCESS"
    echo "------- ------- -------------   -------"
    ps aux | awk '{mem[$11]+=int($6/1024)}; {cpuper[$11]+=$3};{memper[$11]+=$4}; END {for (i in mem) {printf "%6.2f%% %6.2f%% %10.2f MB : %s\n", cpuper[i],memper[i],mem[i],i}}' | sort -k3nr | head -n 5
  '';

  prefetch-git-rendered = pkgs.writeShellScriptBin "nix-prefetch-git-rendered" ''
    ${pkgs.nix-prefetch-scripts}/bin/nix-prefetch-git "$@" \
      | ${pkgs.jq}/bin/jq --raw-output '"pkgs.fetchgit{
      url = \"\(.url)\";
      rev = \"\(.rev)\";
      sha256 = \"\(.sha256)\";
    };"'
  '';

  prefetch-url-rendered = pkgs.writeShellScriptBin "nix-prefetch-url-rendered" ''
    HASH=$( ${pkgs.nix}/bin/nix-prefetch-url "$1" )
    cat <<EOF
    pkgs.fetchurl {
      url = "$1";
      sha256 = "$HASH";
    };
    EOF
  '';

  storepath =
    let
      dirname = "${pkgs.coreutils-full}/bin/dirname";
      readlink = "${pkgs.coreutils-full}/bin/readlink";
    in
    pkgs.writers.writeBashBin "storepath" ''
      ${dirname} $( ${readlink} $( type -p "$1" ) )
    '';

in
{

  programs.tmux = {
    enable = true;
    clock24 = true;
    historyLimit = 150000;
    secureSocket = true;
  };

  environment.systemPackages = with pkgs; [

    # to browse logs better
    lnav

    nix-tree
    nixos-option

    storepath

    prefetch-git-rendered
    prefetch-url-rendered

    parallel

    # windos/mac filesystems
    ntfs3g
    exfat

    silver-searcher
    bc
    bridge-utils
    file
    git
    htop
    lsof
    ncdu
    tree
    vim
    wget
    zip
    unzip

    jq
    ijq
    miller

    tmux
    screen

    duc

    memoryUsage

    treefmt
    shellcheck
    shfmt
    black
    nodePackages.prettier
    influxdb2-cli

    #gitlog2json

    pciutils

    (pkgs.writers.writeDashBin "mc" ''
      ${pkgs.mc}/bin/mc --nocolor "$@"
    '')

    (pkgs.writers.writeBashBin "ssl-check-cert-of-domain" ''
      DOMAIN=$1
      echo | \
      ${pkgs.openssl}/bin/openssl s_client -servername ''${DOMAIN} -connect ''${DOMAIN}:443 2>/dev/null | \
      ${pkgs.openssl}/bin/openssl x509 -text | \
      ${pkgs.less}/bin/less
    '')

  ];

  # configure navi
  #environment.variables.NAVI_PATH = "$HOME/.cheats";

}