{ config, inputs, lib, pkgs, ... }: let packages = builtins.attrValues { inherit (pkgs) clang # C/C++ compiler frontend (part of LLVM) clang-tools # Extra LLVM tools (e.g. clang-tidy, clang-apply-replacements) gcc # GNU Compiler Collection (C, C++, etc.) gdb # GNU Debugger valgrind # Memory leak detector and performance profiler ; }; in { options = { my.dev.cc = { enable = lib.mkEnableOption "Install C/C++ tooling globally"; users = lib.mkOption { type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); default = config.my.toggleUsers.dev; description = "Users to install C/C++ packages for"; }; }; devShells.cc = lib.mkOption { type = lib.types.package; default = pkgs.mkShell { inherit packages; name = "cc-dev-shell"; shellHook = '' echo "🔧 C/C++ dev environment" ''; }; description = "C/C++ development shell"; }; }; config = lib.mkIf config.my.dev.cc.enable { users.users = inputs.self.lib.mkUserAttrs lib config.my.dev.cc.users { inherit packages; }; }; }