From 38d7e61d7416a7d2f7f3013b831b4569ef1792d3 Mon Sep 17 00:00:00 2001 From: Victor Mignot Date: Sat, 3 Aug 2024 22:17:23 +0200 Subject: [PATCH] Add wireshark option --- configurations/london/default.nix | 3 +- modules/workstation/default.nix | 2 +- .../home-manager/development/default.nix | 5 ++- .../home-manager/development/embedded.nix | 9 ++++-- .../home-manager/development/networking.nix | 31 +++++++++++++++++++ modules/workstation/wireshark.nix | 25 +++++++++++++++ 6 files changed, 69 insertions(+), 6 deletions(-) create mode 100644 modules/workstation/home-manager/development/networking.nix create mode 100644 modules/workstation/wireshark.nix diff --git a/configurations/london/default.nix b/configurations/london/default.nix index 4c34c0c..4bf119e 100644 --- a/configurations/london/default.nix +++ b/configurations/london/default.nix @@ -90,7 +90,8 @@ ]; nixpkgs.config.allowUnfree = true; - my.development.embedded-tools.enable = true; + my.development.tools.embedded.enable = true; + my.development.tools.networking.enable = true; my.games.wine.enable = true; }; }; diff --git a/modules/workstation/default.nix b/modules/workstation/default.nix index 7f3331b..1adb5b0 100644 --- a/modules/workstation/default.nix +++ b/modules/workstation/default.nix @@ -1,5 +1,4 @@ { - lib, config, pkgs, machineProps, @@ -13,6 +12,7 @@ ./sound.nix ./desktop.nix ./bluetooth.nix + ./wireshark.nix ]; config = diff --git a/modules/workstation/home-manager/development/default.nix b/modules/workstation/home-manager/development/default.nix index 2719fc1..48b0473 100644 --- a/modules/workstation/home-manager/development/default.nix +++ b/modules/workstation/home-manager/development/default.nix @@ -6,7 +6,10 @@ }: with lib; { - imports = [ ./embedded.nix ]; + imports = [ + ./embedded.nix + ./networking.nix + ]; options.my.development.git.enable = mkOption { type = types.bool; diff --git a/modules/workstation/home-manager/development/embedded.nix b/modules/workstation/home-manager/development/embedded.nix index 5dfb402..c9d0f8c 100644 --- a/modules/workstation/home-manager/development/embedded.nix +++ b/modules/workstation/home-manager/development/embedded.nix @@ -4,9 +4,12 @@ pkgs, ... }: +let + toolsConfig = config.my.development.tools.embedded; +in with lib; { - options.my.development.embedded-tools.enable = mkOption { + options.my.development.tools.embedded.enable = mkOption { type = types.bool; default = false; example = true; @@ -15,7 +18,7 @@ with lib; ''; }; - options.my.development.embedded-tools.packages = mkOption { + options.my.development.tools.embedded.packages = mkOption { type = types.listOf types.package; default = with pkgs; [ qemu @@ -23,5 +26,5 @@ with lib; ]; }; - config.home.packages = lib.mkIf config.my.development.embedded-tools.enable config.my.development.embedded-tools.packages; + config.home.packages = mkIf toolsConfig.enable toolsConfig.packages; } diff --git a/modules/workstation/home-manager/development/networking.nix b/modules/workstation/home-manager/development/networking.nix new file mode 100644 index 0000000..bce190b --- /dev/null +++ b/modules/workstation/home-manager/development/networking.nix @@ -0,0 +1,31 @@ +{ + config, + lib, + pkgs, + ... +}: +let + toolsConfig = config.my.development.tools.networking; +in +with lib; +{ + options.my.development.tools.networking = { + enable = mkOption { + type = types.bool; + default = false; + description = '' + Enable network analysis tools. + ''; + }; + + packages = mkOption { + type = types.listOf types.package; + default = with pkgs; [ wireshark ]; + description = '' + Network analysis tools to install. + ''; + }; + }; + + config.home.packages = mkIf toolsConfig.enable toolsConfig.packages; +} diff --git a/modules/workstation/wireshark.nix b/modules/workstation/wireshark.nix new file mode 100644 index 0000000..5c257fd --- /dev/null +++ b/modules/workstation/wireshark.nix @@ -0,0 +1,25 @@ +{ + config, + lib, + machineProps, + ... +}: +let + anyWiresharkUser = + if machineProps.enableHomeManager then + (builtins.any (user: user.my.development.tools.networking.enable) ( + builtins.attrValues config.home-manager.users + )) + else + false; + userUseWireshark = value: value.my.development.tools.networking.enable; +in +{ + config = { + programs.wireshark.enable = anyWiresharkUser; + + users.users = builtins.mapAttrs (name: value: { + extraGroups = if (userUseWireshark value) then [ "wireshark" ] else [ ]; + }) config.home-manager.users; + }; +}