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"
|
||||
}
|
||||
|
||||
_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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue