mirror of
https://codeberg.org/muon/home.git
synced 2026-03-08 03:25:16 +00:00
Add rs and cpp init
This commit is contained in:
parent
6e7b541d65
commit
29ad0502ed
1 changed files with 119 additions and 35 deletions
|
|
@ -13,10 +13,7 @@ _hr_usage() {
|
||||||
echo " freeze Freeze dependencies to requirements.txt"
|
echo " freeze Freeze dependencies to requirements.txt"
|
||||||
}
|
}
|
||||||
|
|
||||||
_hr_init_py() {
|
_hr_init_devenv() {
|
||||||
echo "Initializing python devenv..."
|
|
||||||
|
|
||||||
# 1. Init devenv
|
|
||||||
if [ -f .gitignore ]; then
|
if [ -f .gitignore ]; then
|
||||||
cp .gitignore .gitignore.bak
|
cp .gitignore .gitignore.bak
|
||||||
fi
|
fi
|
||||||
|
|
@ -34,8 +31,25 @@ _hr_init_py() {
|
||||||
elif [ -f .gitignore ]; then
|
elif [ -f .gitignore ]; then
|
||||||
rm .gitignore
|
rm .gitignore
|
||||||
fi
|
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
|
cat <<EOF >devenv.nix
|
||||||
{pkgs, ...}: {
|
{pkgs, ...}: {
|
||||||
packages = [ pkgs.google-cloud-sdk ];
|
packages = [ pkgs.google-cloud-sdk ];
|
||||||
|
|
@ -69,41 +83,107 @@ EOF
|
||||||
name = "google"
|
name = "google"
|
||||||
url = "https://europe-west1-python.pkg.dev/mk2-prod/python-packages/simple/"
|
url = "https://europe-west1-python.pkg.dev/mk2-prod/python-packages/simple/"
|
||||||
EOF
|
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
|
# 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=(
|
IGNORES=(
|
||||||
".devenv*"
|
".devenv*"
|
||||||
".direnv"
|
".direnv"
|
||||||
"devenv.nix"
|
"devenv.nix"
|
||||||
"devenv.yaml"
|
"devenv.yaml"
|
||||||
"devenv.lock"
|
"devenv.lock"
|
||||||
|
".envrc"
|
||||||
|
"${ignores[@]}"
|
||||||
|
)
|
||||||
|
_hr_add_ignores "${IGNORES[@]}"
|
||||||
|
|
||||||
|
direnv allow
|
||||||
|
}
|
||||||
|
|
||||||
|
_hr_init_py() {
|
||||||
|
IGNORES=(
|
||||||
"uv.lock"
|
"uv.lock"
|
||||||
"uv.toml"
|
"uv.toml"
|
||||||
".envrc"
|
|
||||||
)
|
)
|
||||||
|
_hr_init_base "Python" _hr_py_files "${IGNORES[@]}"
|
||||||
|
}
|
||||||
|
|
||||||
for file in "${IGNORES[@]}"; do
|
_hr_init_rs() {
|
||||||
if ! grep -Fxq "$file" "$EXCLUDE_FILE" 2>/dev/null; then
|
_hr_init_base "Rust" _hr_rs_files
|
||||||
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
|
|
||||||
|
|
||||||
# 4. Allow direnv
|
_hr_init_cpp() {
|
||||||
if command -v direnv >/dev/null; then
|
_hr_init_base "C++" _hr_cpp_files
|
||||||
direnv allow
|
mkdir -p build &&
|
||||||
echo "Direnv allowed"
|
cd build &&
|
||||||
else
|
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_BUILD_TYPE=Release .. &&
|
||||||
echo "Error: direnv not found in path."
|
make -j$(nproc) &&
|
||||||
return 1
|
cp compile_commands.json ..
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_hr_freeze() {
|
_hr_freeze() {
|
||||||
|
|
@ -294,6 +374,10 @@ hr() {
|
||||||
|
|
||||||
if [ "$1" = "init" ] && [ "$2" = "py" ]; then
|
if [ "$1" = "init" ] && [ "$2" = "py" ]; then
|
||||||
_hr_init_py
|
_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
|
elif [ "$1" = "freeze" ]; then
|
||||||
_hr_freeze
|
_hr_freeze
|
||||||
elif [ "$1" = "call" ]; then
|
elif [ "$1" = "call" ]; then
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue