First attempts on using distrobox
This commit is contained in:
@@ -13,6 +13,7 @@ in
|
||||
astyle
|
||||
hyfetch
|
||||
fzf-zsh
|
||||
distrobox
|
||||
];
|
||||
|
||||
programs.tmux = {
|
||||
|
||||
67
terminal-environment/genv/default.nix
Normal file
67
terminal-environment/genv/default.nix
Normal file
@@ -0,0 +1,67 @@
|
||||
{ pkgs, lib, ... }:
|
||||
|
||||
let
|
||||
genv = pkgs.writeShellScriptBin "genv" ''
|
||||
#!/usr/bin/env bash
|
||||
set -e
|
||||
|
||||
DISTRO="$1"
|
||||
PRESET="$2"
|
||||
|
||||
if [ -z "$DISTRO" ] || [ -z "$PRESET" ]; then
|
||||
echo "Usage: genv <distro> <preset>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
PROJECT=$(basename "$PWD")
|
||||
BOX="genv-$PROJECT"
|
||||
|
||||
# distro mapping
|
||||
case "$DISTRO" in
|
||||
ubuntu) IMAGE="docker.io/library/ubuntu:24.04" ;;
|
||||
arch) IMAGE="docker.io/library/archlinux:latest" ;;
|
||||
alpine) IMAGE="docker.io/library/alpine:latest" ;;
|
||||
*) IMAGE="$DISTRO" ;;
|
||||
esac
|
||||
|
||||
echo "[genv] image: $IMAGE"
|
||||
|
||||
# container nur erstellen wenn nötig
|
||||
if ! distrobox list | grep -q "$BOX"; then
|
||||
distrobox create --name "$BOX" --image "$IMAGE"
|
||||
fi
|
||||
|
||||
mkdir -p .genv
|
||||
|
||||
# preset kopieren
|
||||
cp ${./presets}/$PRESET.sh .genv/setup.sh
|
||||
chmod +x .genv/setup.sh
|
||||
|
||||
# envrc generieren
|
||||
cat > .envrc <<EOF
|
||||
export GENV_BOX="$BOX"
|
||||
|
||||
# container starten
|
||||
distrobox start "$GENV_BOX" >/dev/null 2>&1 || true
|
||||
|
||||
# setup einmalig
|
||||
if [ ! -f .genv/.init ]; then
|
||||
echo "[genv] setup läuft"
|
||||
distrobox enter "$GENV_BOX" -- bash .genv/setup.sh
|
||||
touch .genv/.init
|
||||
fi
|
||||
|
||||
# tmux workflow
|
||||
if [ -z "$TMUX" ]; then
|
||||
tmux new-session -A -s "$GENV_BOX" \
|
||||
\; new-window -n editor "nvim" \
|
||||
\; new-window -n dev "distrobox enter $GENV_BOX"
|
||||
fi
|
||||
EOF
|
||||
|
||||
echo "[genv] fertig → direnv allow"
|
||||
'';
|
||||
in
|
||||
{
|
||||
home.packages = [ genv ];
|
||||
}
|
||||
11
terminal-environment/genv/presets/c.sh
Normal file
11
terminal-environment/genv/presets/c.sh
Normal file
@@ -0,0 +1,11 @@
|
||||
#!/usr/bin/env bash
|
||||
set -e
|
||||
|
||||
if command -v apt >/dev/null; then
|
||||
sudo apt update
|
||||
sudo apt install -y build-essential cmake
|
||||
elif command -v pacman >/dev/null; then
|
||||
sudo pacman -Sy --noconfirm base-devel cmake
|
||||
elif command -v apk >/dev/null; then
|
||||
sudo apk add build-base cmake
|
||||
fi
|
||||
11
terminal-environment/genv/presets/data-science.sh
Normal file
11
terminal-environment/genv/presets/data-science.sh
Normal file
@@ -0,0 +1,11 @@
|
||||
#!/usr/bin/env bash
|
||||
set -e
|
||||
|
||||
if command -v apt >/dev/null; then
|
||||
sudo apt update
|
||||
sudo apt install -y python3
|
||||
elif command -v pacman >/dev/null; then
|
||||
sudo pacman -Sy --noconfirm base-devel python3
|
||||
elif command -v apk >/dev/null; then
|
||||
sudo apk add build-base python3
|
||||
fi
|
||||
Reference in New Issue
Block a user