# In deiner home.nix { config, pkgs, ... }: let composer = pkgs.writeShellScriptBin "composer" '' mkdir -p "''${HOME}/.config/composer" mkdir -p "''${HOME}/.cache/composer" if ! ${pkgs.docker}/bin/docker network inspect db >/dev/null 2>&1; then ${pkgs.docker}/bin/docker network create db fi SSH_AUTH_PATH=$(readlink -f "''${SSH_AUTH_SOCK:-/dev/null}") exec ${pkgs.docker}/bin/docker run -t --rm \ --user $(id -u):33 \ --env COMPOSER_CACHE_DIR=/cache \ --env SSH_AUTH_SOCK=/ssh-agent \ --network db \ --volume "$SSH_AUTH_PATH":/ssh-agent \ --volume /etc/passwd:/etc/passwd:ro \ --volume "''${HOME}":"''${HOME}" \ --volume "''${HOME}/.config/composer":/tmp \ --volume "''${HOME}/.cache/composer":/cache \ --volume "''${PWD}":/app \ evoweb/php:composer "$@" ''; git-cleanup-local-branches = pkgs.writeShellScriptBin "gclb" '' ${pkgs.git}/bin/git fetch -p GONE_BRANCHES=$(${pkgs.git}/bin/git for-each-ref --format '%(refname) %(upstream:track)' refs/heads | ${pkgs.gawk}/bin/awk '$2 == "[gone]" {sub("refs/heads/", "", $1); print $1}') if [ -z "$GONE_BRANCHES" ]; then echo "Keine verwaisten Branches gefunden." exit 0 fi for BRANCH in $GONE_BRANCHES; do ${pkgs.git}/bin/git branch -D "$BRANCH" done ''; lazydocker = pkgs.writeShellScriptBin "lazydocker" '' mkdir -p "''${HOME}/.config/lazydocker" exec ${pkgs.docker}/bin/docker run \ --rm -it \ --volume /var/run/docker.sock:/var/run/docker.sock \ --volume "''${HOME}/.config/lazydocker":/.config/jesseduffield/lazydocker \ lazyteam/lazydocker ''; in { home.stateVersion = "25.11"; home.packages = with pkgs; [ # Desktop-Anwendungen thunderbird vlc gimp filezilla solaar jameica libreoffice-fresh hunspell hunspellDicts.de_DE darktable # davinci-resolve-studio # Browser google-chrome # Kommunikation signal-desktop # Remote Desktop rustdesk-flutter # Gaming lutris steam # Entwicklung jetbrains-toolbox mkcert gitflow stow gnumake p7zip cacert # Gnome extensions gnomeExtensions.appindicator gnomeExtensions.caffeine gnomeExtensions.dash-to-dock # Aliases composer git-cleanup-local-branches lazydocker ]; # Powerlevel10k Theme installieren home.activation.installPowerlevel10k = config.lib.dag.entryAfter ["writeBoundary"] '' P10K_DIR="$HOME/.oh-my-zsh/custom/themes/powerlevel10k" if [ ! -d "$P10K_DIR" ]; then $DRY_RUN_CMD mkdir -p "$HOME/.oh-my-zsh/custom/themes" $DRY_RUN_CMD ${pkgs.git}/bin/git clone --depth=1 \ https://github.com/romkatv/powerlevel10k.git "$P10K_DIR" || true fi ''; # Flatpak Apps installieren # HINWEIS: Diese werden beim ersten home-manager switch installiert # Dandanch werden sie von Flatpak selbst verwaltet home.activation.installFlatpakApps = config.lib.dag.entryAfter ["writeBoundary"] '' # Flathub Remote hinzufügen (falls noch nicht vorhanden) $DRY_RUN_CMD ${pkgs.flatpak}/bin/flatpak remote-add --if-not-exists --user \ flathub https://dl.flathub.org/repo/flathub.flatpakrepo || true # Extension Manager if ! ${pkgs.flatpak}/bin/flatpak list --user | grep -q "com.mattjakeman.ExtensionManager"; then $DRY_RUN_CMD ${pkgs.flatpak}/bin/flatpak install --user -y flathub \ com.mattjakeman.ExtensionManager || true fi # Kdenlive (Video-Bearbeitung) if ! ${pkgs.flatpak}/bin/flatpak list --user | grep -q "org.kde.kdenlive"; then $DRY_RUN_CMD ${pkgs.flatpak}/bin/flatpak install --user -y flathub \ org.kde.kdenlive || true fi # PrismLauncher (Minecraft) if ! ${pkgs.flatpak}/bin/flatpak list --user | grep -q "org.prismlauncher.PrismLauncher"; then $DRY_RUN_CMD ${pkgs.flatpak}/bin/flatpak install --user -y flathub \ org.prismlauncher.PrismLauncher || true mkdir -p /home/Programme/Minecraft/ chmod 2775 /home/Programme/Minecraft/ chgrp users /home/Programme/Minecraft/ # Minecraft-Verzeichnis Zugriff gewähren $DRY_RUN_CMD ${pkgs.flatpak}/bin/flatpak override --user \ org.prismlauncher.PrismLauncher --filesystem=/home/Programme/Minecraft/ || true fi ''; # mkcert installieren (für lokale SSL-Zertifikate) home.activation.setupMkcert = config.lib.dag.entryAfter ["writeBoundary"] '' if [ ! -f "$HOME/.local/share/mkcert/rootCA.pem" ]; then $DRY_RUN_CMD ${pkgs.mkcert}/bin/mkcert -install || true fi ''; home.shellAliases = { ll = "ls -lah"; la = "ls -A"; l = "ls -CF"; ".." = "cd .."; "..." = "cd ../.."; rebuild = "sudo nixos-rebuild switch"; update = "sudo nixos-rebuild switch --upgrade"; c = "composer"; lzd = "lazydocker"; gclb = "git-cleanup-local-branches"; ngc = "sudo nix-store --optimise && sudo nix-collect-garbage -d"; }; dconf.settings = { "org/gnome/desktop/wm/preferences" = { button-layout = "appmenu:minimize,maximize,close"; focus-mode = "sloppy"; }; "org/gnome/shell" = { disable-user-extensions = false; # Hier die IDs der Extensions eintragen enabled-extensions = with pkgs.gnomeExtensions; [ appindicator.extensionUuid caffeine.extensionUuid dash-to-dock.extensionUuid ]; }; }; programs.git = { enable = true; settings = { aliases = { prune = "fetch --prune"; undo = "reset --soft HEAD^"; stash-all = "stash save --include-untracked"; graph = "log --graph --decorate --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'"; }; apply.whitespace = "fix"; branch = { autosetuprebase = "remote"; sort = "-authordate"; }; "branch \"main\"" = { remote = "origin"; merge = "refs/heads/main"; rebase = true; }; color = { ui = "auto"; branch = "auto"; diff = "auto"; status = "auto"; interactive = "auto"; pager = true; }; "color \"branch\"" = { current = "yellow reverse"; local = "yellow"; remote = "green"; }; "color \"diff\"" = { meta = "yellow bold"; frag = "magenta bold"; old = "red bold"; new = "green bold"; whitespace = "red reverse"; }; "color \"diff-highlight\"" = { oldNormal = "red bold"; oldHighlight = "red bold 52"; newNormal = "green bold"; newHighlight = "green bold 22"; }; "color \"status\"" = { added = "yellow"; changed = "green"; untracked = "cyan"; }; core = { pager = "less -FRSX"; whitespace = "fix,-indent-with-non-tab,trailing-space,cr-at-eol"; editor = "vim"; fileMode = false; autocrlf = "input"; }; credential.helper = "cache"; diff.tool = "vimdiff"; difftool.prompt = false; fetch.prune = true; http.sslverify = false; init.defaultBranch = "main"; merge.tool = "vimdiff"; mergetool.prompt = false; pull.rebase = false; push = { default = "simple"; followTags = true; }; rerere.enabled = 1; status.showUntrackedFiles = "all"; }; ignores = [ ".idea" # JetBrains IDEs ]; }; # Vim Konfiguration programs.vim = { enable = true; defaultEditor = true; settings = { number = true; relativenumber = true; tabstop = 2; shiftwidth = 2; expandtab = true; }; extraConfig = '' syntax on set encoding=utf-8 set autoindent set smartindent ''; }; # Zsh mit Oh-My-Zsh und Powerlevel10k programs.zsh = { enable = true; enableCompletion = true; autosuggestion.enable = true; syntaxHighlighting.enable = true; oh-my-zsh = { enable = true; theme = "powerlevel10k/powerlevel10k"; plugins = [ "command-not-found" "common-aliases" "docker" "docker-compose" "git" "git-prompt" "git-flow-avh" "ssh-agent" "systemd" "sudo" "rsync" ]; custom = "$HOME/.oh-my-zsh/custom"; }; initContent = '' # Powerlevel10k Konfiguration laden (falls vorhanden) [[ -f ~/.p10k.zsh ]] && source ~/.p10k.zsh ''; }; home.file.".p10k.zsh".source = ./config/p10k.zsh; # GTK Theme (optional, für besseres Aussehen) gtk = { enable = true; theme = { name = "Adwaita-dark"; package = pkgs.gnome-themes-extra; }; }; }