Add rs and cpp init

This commit is contained in:
Sage 2026-01-22 12:56:49 +00:00
parent 6e7b541d65
commit 29ad0502ed

View file

@ -13,10 +13,7 @@ _hr_usage() {
echo " freeze Freeze dependencies to requirements.txt"
}
_hr_init_py() {
echo "Initializing python devenv..."
# 1. Init devenv
_hr_init_devenv() {
if [ -f .gitignore ]; then
cp .gitignore .gitignore.bak
fi
@ -34,8 +31,25 @@ _hr_init_py() {
elif [ -f .gitignore ]; then
rm .gitignore
fi
}
# 2. Replace devenv.nix
_hr_add_ignores() {
if git rev-parse --git-dir >/dev/null 2>&1; then
EXCLUDE_FILE=$(git rev-parse --git-path info/exclude)
mkdir -p "$(dirname "$EXCLUDE_FILE")"
for file in "$@"; do
if ! grep -Fxq "$file" "$EXCLUDE_FILE" 2>/dev/null; then
echo "$file" >>"$EXCLUDE_FILE"
echo "Added $file to local git exclude ($EXCLUDE_FILE)"
fi
done
else
echo "Warning: Not a git repository. Skipping git ignore setup."
fi
}
_hr_py_files() {
cat <<EOF >devenv.nix
{pkgs, ...}: {
packages = [ pkgs.google-cloud-sdk ];
@ -69,41 +83,107 @@ EOF
name = "google"
url = "https://europe-west1-python.pkg.dev/mk2-prod/python-packages/simple/"
EOF
}
_hr_rs_files() {
cat <<EOF >devenv.nix
{pkgs, ...}: {
languages.rust = {
enable = true;
channel = "stable";
};
}
EOF
cat <<EOF >devenv.yaml
inputs:
rust-overlay:
url: github:oxalica/rust-overlay
inputs:
nixpkgs:
follows: nixpkgs
EOF
}
_hr_cpp_files() {
cat <<EOF >devenv.nix
{ pkgs, ... }:
let
# Use glibc-compatible static openssl to match system libs
staticOpenSSL = pkgs.openssl.override { static = true; };
# Shim to satisfy CMake looking for "ssl.a"
compatOpenSSL = pkgs.runCommand "openssl-compat" {} ''
mkdir -p \$out/lib
ln -s \${staticOpenSSL.out}/lib/libssl.a \$out/lib/ssl.a
ln -s \${staticOpenSSL.out}/lib/libcrypto.a \$out/lib/crypto.a
'';
in {
packages = [
pkgs.cmake
pkgs.clang-tools
pkgs.pkg-config
pkgs.mosquitto
staticOpenSSL
compatOpenSSL
];
# Explicitly add lib paths so linker finds -lssl AND ssl.a
env.LIBRARY_PATH = "\${staticOpenSSL.out}/lib:\${compatOpenSSL}/lib";
env.CPATH = "\${staticOpenSSL.dev}/include";
languages.cplusplus.enable = true;
}
EOF
}
_hr_init_base() {
local name="$1"
local func="$2"
shift 2
local ignores=("$@")
echo "Initializing $name devenv..."
# 1. Init devenv
_hr_init_devenv
# 2. Replace devenv.nix
"$func"
# 3. Add to local git exclude
if git rev-parse --git-dir >/dev/null 2>&1; then
EXCLUDE_FILE=$(git rev-parse --git-path info/exclude)
mkdir -p "$(dirname "$EXCLUDE_FILE")"
IGNORES=(
".devenv*"
".direnv"
"devenv.nix"
"devenv.yaml"
"devenv.lock"
".envrc"
"${ignores[@]}"
)
_hr_add_ignores "${IGNORES[@]}"
IGNORES=(
".devenv*"
".direnv"
"devenv.nix"
"devenv.yaml"
"devenv.lock"
"uv.lock"
"uv.toml"
".envrc"
)
direnv allow
}
for file in "${IGNORES[@]}"; do
if ! grep -Fxq "$file" "$EXCLUDE_FILE" 2>/dev/null; then
echo "$file" >>"$EXCLUDE_FILE"
echo "Added $file to local git exclude ($EXCLUDE_FILE)"
fi
done
else
echo "Warning: Not a git repository. Skipping git ignore setup."
fi
_hr_init_py() {
IGNORES=(
"uv.lock"
"uv.toml"
)
_hr_init_base "Python" _hr_py_files "${IGNORES[@]}"
}
# 4. Allow direnv
if command -v direnv >/dev/null; then
direnv allow
echo "Direnv allowed"
else
echo "Error: direnv not found in path."
return 1
fi
_hr_init_rs() {
_hr_init_base "Rust" _hr_rs_files
}
_hr_init_cpp() {
_hr_init_base "C++" _hr_cpp_files
mkdir -p build &&
cd build &&
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_BUILD_TYPE=Release .. &&
make -j$(nproc) &&
cp compile_commands.json ..
}
_hr_freeze() {
@ -294,6 +374,10 @@ hr() {
if [ "$1" = "init" ] && [ "$2" = "py" ]; then
_hr_init_py
elif [ "$1" = "init" ] && [ "$2" = "rs" ]; then
_hr_init_rs
elif [ "$1" = "init" ] && [ "$2" = "cpp" ]; then
_hr_init_cpp
elif [ "$1" = "freeze" ]; then
_hr_freeze
elif [ "$1" = "call" ]; then