# Common packages { config, lib, pkgs, ... }: with lib; let linuxpkgs = config.boot.kernelPackages; perf-flamegraph-process = pkgs.writeShellScriptBin "perf-flamegraph-process" '' set -euo pipefail OUT_DIR="''${HOME}/workspace/tmp/flamegraph" OUT_SVG="''${OUT_DIR}/$(date +%y%m%d-%H%M%S).svg" mkdir -p ''${OUT_DIR} ${pkgs.linuxPackages.perf}/bin/perf record -g --call-graph dwarf -F max "$@" ${pkgs.linuxPackages.perf}/bin/perf script \ | ${pkgs.flamegraph}/bin/stackcollapse-perf.pl \ | ${pkgs.flamegraph}/bin/flamegraph.pl > "''${OUT_SVG}" ''; in { # It's always useful to have bash around environment.shells = with pkgs; [ bashInteractive ]; environment.systemPackages = with pkgs; [ binutils cacert curl dmidecode ethtool flamegraph git htop hwdata iftop iptraf-ng linuxPackages.cpupower linuxpkgs.perf lm_sensors lsb-release lsof man-pages mg mtr numactl openssl parted pciutils perf-flamegraph-process perf-tools pkg-config powertop rsync sqlite strace tcpdump tmux traceroute unzip usbutils vim wget wireguard-tools ]; programs.bcc.enable = true; }