nixos-cesium/config/home.nix
2026-02-07 21:12:09 +01:00

331 lines
8.3 KiB
Nix

# In deiner home.nix
{ config, pkgs, ... }:
{
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
];
# 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
'';
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";
};
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";
gclb = "git-cleanup-local-branches";
lzd = "lazydocker";
};
initContent = ''
# Powerlevel10k Konfiguration laden (falls vorhanden)
[[ -f ~/.p10k.zsh ]] && source ~/.p10k.zsh
function composer() {
mkdir -p "''${HOME}/.config/composer"
mkdir -p "''${HOME}/.cache/composer"
if ! ${pkgs.docker}/bin/docker network inspect db >/dev/null 2>&1; then
echo "Erstelle Docker-Netzwerk 'db'..."
${pkgs.docker}/bin/docker network create db
fi
SSH_AUTH_PATH=$(readlink -f "''${SSH_AUTH_SOCK:-/dev/null}")
docker run -t \
--rm \
--user ''$(id -u):33 \
--env COMPOSER_CACHE_DIR=/cache \
--env SSH_AUTH_SOCK=/ssh-agent \
--env CI_HOST \
--env CI_PROJECT_DIR \
--env ENVIRONMENT_NAME \
--env INSTANCE_ID \
--env ADDITIONAL_CONFIG_FILE \
--env TYPO3_CONTEXT \
--env STAGE \
--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 $@
}
function git-cleanup-local-branches {
${pkgs.git}/bin/git fetch -p
FOR_EACH_REF=$(${pkgs.git}/bin/git for-each-ref --format '%(refname) %(upstream:track)' refs/heads)
GONE_BRANCHES=$(echo "''$FOR_EACH_REF" | ${pkgs.gawk}/bin/awk '$2 == "[gone]" {sub("refs/heads/", "", $1); print $1}')
if [ -z "''$GONE_BRANCHES" ]; then
echo "Found now orphan local branches."
exit 0
fi
for BRANCH in ''$GONE_BRANCHES; do
echo "Delete local branch: ''$BRANCH"
${pkgs.git}/bin/git branch -D "''$BRANCH"
done
}
function lazydocker() {
mkdir -p ''$HOME/.config/lazydocker
docker run --rm -it \
--volume /var/run/docker.sock:/var/run/docker.sock \
--volume ''$HOME/.config/lazydocker:/.config/jesseduffield/lazydocker \
lazyteam/lazydocker
}
'';
};
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;
};
};
}