{ pkgs, config, lib, ... }: let lang_support_id = "c"; inherit (config.grimmShared) enable tooling graphical; inherit (lib) optionals mkIf getExe' types mkOption elem ; in { config = mkIf (enable && tooling.enable && (elem lang_support_id tooling.supportedLangs)) { environment.systemPackages = with pkgs; [ util-linux linuxPackages.perf pkg-config glib glibc clang clang-tools ] ++ optionals graphical [ libva-utils jetbrains.clion ]; grimmShared.tooling.lang_servers = [ { lsp = { package = pkgs.clang-tools; lspconf_config = '' { cmd = { 'clangd', '--background-index'}, root_dir = require("lspconfig.util").root_pattern( "CMakeLists.txt", "flake.nix", ".git" ) }''; lspconf_mod_name = "clangd"; }; fmt = rec { package = pkgs.clang-tools; command = getExe' package "clang-format"; includes = [ "*.c" "*.h" "*.cpp" "*.hpp" ]; }; } ]; }; options.grimmShared.tooling.supportedLangs = mkOption { type = types.listOf (types.enum [ lang_support_id ]); }; }