diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index 11bb900f7bb..5b21aec51bd 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -95,6 +95,7 @@ ./programs/adb.nix ./programs/atop.nix ./programs/autojump.nix + ./programs/bandwhich.nix ./programs/bash/bash.nix ./programs/bcc.nix ./programs/browserpass.nix diff --git a/nixos/modules/programs/bandwhich.nix b/nixos/modules/programs/bandwhich.nix new file mode 100644 index 00000000000..5413044f461 --- /dev/null +++ b/nixos/modules/programs/bandwhich.nix @@ -0,0 +1,29 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let cfg = config.programs.bandwhich; +in { + meta.maintainers = with maintainers; [ filalex77 ]; + + options = { + programs.bandwhich = { + enable = mkOption { + type = types.bool; + default = false; + description = '' + Whether to add bandwhich to the global environment and configure a + setcap wrapper for it. + ''; + }; + }; + }; + + config = mkIf cfg.enable { + environment.systemPackages = with pkgs; [ bandwhich ]; + security.wrappers.bandwhich = { + source = "${pkgs.bandwhich}/bin/bandwhich"; + capabilities = "cap_net_raw,cap_net_admin+ep"; + }; + }; +} diff --git a/pkgs/tools/networking/bandwhich/default.nix b/pkgs/tools/networking/bandwhich/default.nix new file mode 100644 index 00000000000..21253745cb0 --- /dev/null +++ b/pkgs/tools/networking/bandwhich/default.nix @@ -0,0 +1,32 @@ +{ stdenv, fetchFromGitHub, rustPlatform, Security }: + +rustPlatform.buildRustPackage rec { + pname = "bandwhich"; + version = "0.6.0"; + + src = fetchFromGitHub { + owner = "imsnif"; + repo = pname; + rev = version; + sha256 = "0jjqc8sysvw63mwy68z9p16vc1pygrm1wxyll6piwvbbnirpys1y"; + }; + + cargoSha256 = "1rixpljqddwhryddzni5l6m4sjyn1krrj0ig0rzc701am7srhg3a"; + + buildInputs = stdenv.lib.optional stdenv.isDarwin Security; + + meta = with stdenv.lib; { + description = "A CLI utility for displaying current network utilization"; + longDescription = '' + bandwhich sniffs a given network interface and records IP packet size, cross + referencing it with the /proc filesystem on linux or lsof on MacOS. It is + responsive to the terminal window size, displaying less info if there is + no room for it. It will also attempt to resolve ips to their host name in + the background using reverse DNS on a best effort basis. + ''; + homepage = "https://github.com/imsnif/bandwhich"; + license = licenses.mit; + maintainers = with maintainers; [ filalex77 ]; + platforms = platforms.unix; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 246544bb3dc..fb46c31c7f0 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1085,6 +1085,10 @@ in backblaze-b2 = python.pkgs.callPackage ../development/tools/backblaze-b2 { }; + bandwhich = callPackage ../tools/networking/bandwhich { + inherit (darwin.apple_sdk.frameworks) Security; + }; + bar = callPackage ../tools/system/bar {}; base16-shell-preview = callPackage ../misc/base16-shell-preview { };