From 36585f4206434e4c2fb663ecdb8cfa36e8ad2fdf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nina=20Chl=C3=B3e=20Kassandra=20Rei=C3=9F?= Date: Wed, 8 Apr 2026 21:55:18 +0200 Subject: [PATCH] First attempts on using distrobox --- .../{matrix-element.nix => matrix.nix} | 0 applications/open-modelica.nix | 9 -- applications/speed-dreams.nix | 9 -- configuration.nix | 84 +++++++++---------- desktop-environment/config.nix | 2 +- home-manager.nix | 7 +- terminal-environment/config.nix | 1 + terminal-environment/genv/default.nix | 67 +++++++++++++++ terminal-environment/genv/presets/c.sh | 11 +++ .../genv/presets/data-science.sh | 11 +++ 10 files changed, 139 insertions(+), 62 deletions(-) rename applications/{matrix-element.nix => matrix.nix} (100%) delete mode 100644 applications/open-modelica.nix delete mode 100644 applications/speed-dreams.nix create mode 100644 terminal-environment/genv/default.nix create mode 100644 terminal-environment/genv/presets/c.sh create mode 100644 terminal-environment/genv/presets/data-science.sh diff --git a/applications/matrix-element.nix b/applications/matrix.nix similarity index 100% rename from applications/matrix-element.nix rename to applications/matrix.nix diff --git a/applications/open-modelica.nix b/applications/open-modelica.nix deleted file mode 100644 index 56381eb..0000000 --- a/applications/open-modelica.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ config, pkgs, lib, ... }: -let - profile = import ./profile.nix; -in -{ - environment.systemPackages = with pkgs; [ - openmodelica.combined - ]; -} diff --git a/applications/speed-dreams.nix b/applications/speed-dreams.nix deleted file mode 100644 index 2a7cee5..0000000 --- a/applications/speed-dreams.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ config, pkgs, lib, ... }: -let - profile = import ./profile.nix; -in -{ - environment.systemPackages = with pkgs; [ - speed_dreams - ]; -} diff --git a/configuration.nix b/configuration.nix index 8cb2c13..262a079 100755 --- a/configuration.nix +++ b/configuration.nix @@ -4,30 +4,28 @@ { config, pkgs, ... }: let - profile = import ./profile.nix; + profile = import ./profile.nix; in { - imports = - [ # Include the results of the hardware scan. - ./hardware-configuration.nix - ./cron-schedule.nix - ./home-manager.nix - ]; + imports = [ + # Include the results of the hardware scan. + ./hardware-configuration.nix + ./cron-schedule.nix + ./home-manager.nix + ]; # Bootloader. boot.loader.systemd-boot.enable = true; boot.loader.efi.canTouchEfiVariables = true; -boot.extraModulePackages = with config.boot.kernelPackages; [ - v4l2loopback -]; - -boot.kernelModules = [ "v4l2loopback" ]; -boot.extraModprobeConfig = '' - options v4l2loopback video_nr=10 card_label=snapcam exclusive_caps=1 -''; - + boot.extraModulePackages = with config.boot.kernelPackages; [ + v4l2loopback + ]; + boot.kernelModules = [ "v4l2loopback" ]; + boot.extraModprobeConfig = '' + options v4l2loopback video_nr=10 card_label=snapcam exclusive_caps=1 + ''; networking.hostName = profile.hostname; # Define your hostname. # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. @@ -36,9 +34,9 @@ boot.extraModprobeConfig = '' networking.networkmanager = { enable = true; plugins = with pkgs; [ - networkmanager-ssh - networkmanager-openvpn - networkmanager-strongswan + networkmanager-ssh + networkmanager-openvpn + networkmanager-strongswan ]; }; @@ -85,33 +83,32 @@ boot.extraModprobeConfig = '' console.keyMap = "de-latin1"; environment.systemPackages = with pkgs; [ - wget - strongswan - epiphany - nodejs_24 - dive - podman-tui - podman-compose - gmp - gmp.dev - pkg-config + wget + strongswan + nodejs_24 + dive + podman-tui + podman-compose + gmp + gmp.dev + pkg-config ]; programs.nix-ld = { enable = true; libraries = with pkgs; [ - stdenv.cc.cc - zlib - gmp - openssl - curl - glib - gtk3 - libGL - xorg.libX11 - appimage-run - libgcrypt - libxcrypt + stdenv.cc.cc + zlib + gmp + openssl + curl + glib + gtk3 + libGL + xorg.libX11 + appimage-run + libgcrypt + libxcrypt ]; }; @@ -140,7 +137,10 @@ boot.extraModprobeConfig = '' # Enable the OpenSSH daemon. services.openssh.enable = true; - nix.settings.experimental-features = [ "nix-command" "flakes" ]; + nix.settings.experimental-features = [ + "nix-command" + "flakes" + ]; nixpkgs.config.allowUnfree = true; # This value determines the NixOS release from which the default # settings for stateful data, like file locations and database versions diff --git a/desktop-environment/config.nix b/desktop-environment/config.nix index aadb7c9..f8a28d2 100644 --- a/desktop-environment/config.nix +++ b/desktop-environment/config.nix @@ -8,7 +8,7 @@ in ./browser.nix ./planner.nix ./window-manager.nix - ../applications/matrix-element.nix + ../applications/matrix.nix ]; environment.systemPackages = with pkgs; [ diff --git a/home-manager.nix b/home-manager.nix index ab88322..db58065 100644 --- a/home-manager.nix +++ b/home-manager.nix @@ -19,12 +19,17 @@ in extraGroups = ["disks" "storage" "networkmanager" "wheel" "docker" "scanner" "lp" "uucp" "dialout"]; packages = with pkgs; []; shell = pkgs.zsh; - hashedPassword = profile.hashed-password; + hashedPassword = profile.hashed-password; }; home-manager.backupFileExtension = "bck.lck"; home-manager.users.${profile.username} = { pkgs, ... }: { + + imports = [ + ./terminal-environment/genv + ]; + home.stateVersion = "25.11"; programs.git = { enable = true; diff --git a/terminal-environment/config.nix b/terminal-environment/config.nix index 7b65c6d..cfc3ac5 100644 --- a/terminal-environment/config.nix +++ b/terminal-environment/config.nix @@ -13,6 +13,7 @@ in astyle hyfetch fzf-zsh + distrobox ]; programs.tmux = { diff --git a/terminal-environment/genv/default.nix b/terminal-environment/genv/default.nix new file mode 100644 index 0000000..0b7b0d4 --- /dev/null +++ b/terminal-environment/genv/default.nix @@ -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 " + 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 </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 ]; +} diff --git a/terminal-environment/genv/presets/c.sh b/terminal-environment/genv/presets/c.sh new file mode 100644 index 0000000..9d8fcb1 --- /dev/null +++ b/terminal-environment/genv/presets/c.sh @@ -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 diff --git a/terminal-environment/genv/presets/data-science.sh b/terminal-environment/genv/presets/data-science.sh new file mode 100644 index 0000000..574b4dd --- /dev/null +++ b/terminal-environment/genv/presets/data-science.sh @@ -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