nix-config/home-manager/sajenim/features/cli/zsh.nix
jasmine 4169045fa4
feat(jade): create modular desktop environment
Rename xmonad/ to jade/ and restructure as a complete desktop environment
with hybrid NixOS and home-manager modules. This establishes jade as a
self-contained, gruvbox-themed DE that can eventually be extracted as a flake.

Changes:
- Create jade/ with NixOS module (WM, system packages, GTK theme)
- Create jade/home.nix for home-manager services (wezterm, picom, dunst)
- Move dmenu with gruvbox patches into jade/dmenu/
- Convert wezterm to pure Lua config with gruvbox-material colors
- Move xinitrc into jade/ directory
- Remove feh/scrot from global env (now in jade)
- Remove dmenu overlay from global overlays
- Simplify home-manager desktop features to just user apps

This follows the pattern of real DEs (GNOME, KDE) where system and user
configs are split across NixOS and home-manager modules.
2025-12-21 12:36:11 +08:00

75 lines
1.6 KiB
Nix

{
pkgs,
config,
...
}: {
imports = [
./direnv.nix
./starship.nix
];
home.packages = with pkgs; [
fzf # command-line fuzzy finder
];
programs.zsh = {
enable = true;
# Enable extra features
autosuggestion = {
enable = true;
};
syntaxHighlighting = {
enable = true;
};
enableCompletion = true;
# Configuration directory
dotDir = "${config.xdg.configHome}/zsh";
shellAliases = {
# Single letter aliases
c = "clear";
v = "nvim";
# Double letter aliases
la = "ls -a";
ll = "ls -l";
};
# Install plugins
plugins = [
{ # vi(vim) mode for ZSH
name = "zsh-vi-mode";
src = "${pkgs.zsh-vi-mode}/share/zsh-vi-mode";
}
{ # replace zsh's completion with fzf
name = "fzf-tab";
src = "${pkgs.zsh-fzf-tab}/share/fzf-tab";
}
];
# Extra commands that should be added to '.zshrc'
initContent = /* sh */ ''
bindkey "^[[1;5C" forward-word
bindkey "^[[1;5D" backward-word
export PATH
# Auto-set wezterm tab title based on directory
chpwd() {
if [[ -d .git ]]; then
# Use git repo name
local repo=$(basename $(git rev-parse --show-toplevel 2>/dev/null))
wezterm cli set-tab-title "$repo" 2>/dev/null
elif [[ $(pwd) =~ "/home/sajenim/.repositories/personal/([^/]+)" ]]; then
# Use directory name for project dirs
wezterm cli set-tab-title "''${match[1]}" 2>/dev/null
fi
}
# Run once on shell startup
chpwd
'';
};
}