Initial commit: Modular Clang C++ Nix environment and problem files

This commit is contained in:
2026-03-14 23:25:02 +08:00
commit f5e7baa1bd
9 changed files with 128 additions and 0 deletions
+9
View File
@@ -0,0 +1,9 @@
{ pkgs, treefmt-nix, llvmVersion }:
let
treefmt = import ./treefmt.nix { inherit pkgs treefmt-nix; };
devShell = import ./devshells/default.nix { inherit pkgs llvmVersion; };
in
{
inherit devShell;
formatter = treefmt.config.build.wrapper;
}
+38
View File
@@ -0,0 +1,38 @@
{ pkgs, llvmVersion }:
let
# Select the correct LLVM/Clang version
llvmPackages = pkgs."llvmPackages_${llvmVersion}";
in
pkgs.mkShell {
name = "clang-cpp-shell";
# Native dependencies (e.g., compilers, build tools)
nativeBuildInputs = with pkgs; [
# Compiler and core tools
llvmPackages.clang
llvmPackages.lld
llvmPackages.bintools
# Language-specific tools
llvmPackages.clang-tools # Includes clang-format, clang-tidy
cmake
ninja
gdb
valgrind
nixpkgs-fmt
];
# Runtime dependencies (e.g., shared libraries)
buildInputs = with pkgs; [
# Common libraries (example)
libcxx
boost
];
# Environment variables
shellHook = ''
export CC=clang
export CXX=clang++
echo "Clang version: $(${llvmPackages.clang}/bin/clang --version | head -n 1)"
'';
}
+16
View File
@@ -0,0 +1,16 @@
{ pkgs, treefmt-nix }:
treefmt-nix.lib.evalModule pkgs {
projectRootFile = "flake.nix";
# Configure individual formatters
programs = {
# Nix formatter
nixpkgs-fmt.enable = true;
# C++ formatter
clang-format.enable = true;
};
# Optional settings
settings.formatter.clang-format.includes = [ "*.cpp" "*.h" "*.hpp" "*.c" ];
}