Some checks failed
Check / eval (push) Has been cancelled
Split lifecycle into three clear commands (user pick): nomarchy-pull git pull (if checkout) + flake.lock update nomarchy-rebuild system switch on current lock (snap + nvd) nomarchy-home Home Manager switch Full upgrade: pull && rebuild && home. Legacy sys-update / sys-rebuild / home-update remain as wrappers. nixos-rebuild-snap uses NOMARCHY_PATH. V0: flake check --no-build green.
158 lines
5.0 KiB
Nix
158 lines
5.0 KiB
Nix
# Shell experience — zsh (the default login shell, set system-side) with
|
||
# autosuggestions + syntax highlighting, a themed starship prompt, and
|
||
# modern CLI tools wired in: bat (cat), eza (ls), zoxide (cd). bat uses
|
||
# the "ansi" theme so it follows the terminal palette (Ghostty is themed
|
||
# from the same JSON); starship is themed from the palette directly.
|
||
#
|
||
# home.shell.enableZshIntegration = true is the single lever that makes
|
||
# every integrating program (starship, eza, zoxide, ghostty, yazi) emit
|
||
# its zsh hooks — no per-module flags needed.
|
||
{ config, lib, pkgs, ... }:
|
||
|
||
let
|
||
cfg = config.nomarchy;
|
||
t = cfg.theme;
|
||
c = t.colors;
|
||
in
|
||
{
|
||
config = lib.mkIf cfg.shell.enable {
|
||
home.shell.enableZshIntegration = true;
|
||
|
||
# rg/fd as themselves (NOT aliased over grep/find — their flags
|
||
# differ enough to surprise). Available regardless of yazi/rofi.
|
||
home.packages = with pkgs; [ ripgrep fd ];
|
||
|
||
programs.zsh = {
|
||
enable = true;
|
||
enableCompletion = true;
|
||
autosuggestion.enable = true;
|
||
syntaxHighlighting.enable = true;
|
||
autocd = true;
|
||
history = {
|
||
size = 50000;
|
||
save = 50000;
|
||
ignoreDups = true;
|
||
ignoreSpace = true;
|
||
expireDuplicatesFirst = true;
|
||
};
|
||
# Curated, on by default. The rule (same as rg/fd above): short where
|
||
# it helps, but never shadow a real binary — so the git block keeps off
|
||
# `gs` (ghostscript), and nothing here masks a coreutil.
|
||
shellAliases = {
|
||
cat = "bat --paging=never";
|
||
less = "bat";
|
||
grep = "grep --color=auto";
|
||
# eza enableZshIntegration aliases ls/ll/la; add a couple extras.
|
||
lt = "eza --tree --level=2 --icons=auto --group-directories-first";
|
||
tree = "eza --tree --icons=auto --group-directories-first";
|
||
|
||
# Navigation — climb without counting dots.
|
||
".." = "cd ..";
|
||
"..." = "cd ../..";
|
||
"...." = "cd ../../..";
|
||
|
||
# Git — the verbs you retype all day.
|
||
g = "git";
|
||
gst = "git status -sb";
|
||
ga = "git add";
|
||
gaa = "git add -A";
|
||
gc = "git commit";
|
||
gcm = "git commit -m";
|
||
gco = "git checkout";
|
||
gsw = "git switch";
|
||
gb = "git branch";
|
||
gd = "git diff";
|
||
gds = "git diff --staged";
|
||
gl = "git log --oneline --graph --decorate -20";
|
||
glg = "git log --oneline --graph --decorate --all";
|
||
gp = "git push";
|
||
gpl = "git pull";
|
||
gf = "git fetch --all --prune";
|
||
|
||
# Nix — store/flake verbs. Lifecycle is nomarchy-pull /
|
||
# nomarchy-rebuild / nomarchy-home (full names on PATH, not aliases).
|
||
ns = "nix shell"; # ns nixpkgs#ripgrep
|
||
nr = "nix run"; # nr nixpkgs#cowsay
|
||
nfu = "nix flake update"; # prefer nomarchy-pull day-to-day
|
||
nfc = "nix flake check";
|
||
nsearch = "nix search nixpkgs";
|
||
ngc = "nix-collect-garbage -d"; # user generations; sudo for system roots
|
||
|
||
# Misc.
|
||
path = "echo $PATH | tr ':' '\\n'";
|
||
reload = "exec zsh";
|
||
};
|
||
};
|
||
|
||
programs.starship = {
|
||
enable = true;
|
||
settings = {
|
||
add_newline = false;
|
||
palette = "nomarchy";
|
||
# starship wants full #rrggbb (or names) — keep the leading #.
|
||
palettes.nomarchy = {
|
||
inherit (c) base text accent good warn bad subtext;
|
||
};
|
||
# Flat prompt — colored text only, no powerline separators or
|
||
# background fills. Each module emits its own trailing space so
|
||
# there are no stray gaps when git/duration are absent.
|
||
format = lib.concatStrings [
|
||
"$directory"
|
||
"$git_branch"
|
||
"$git_status"
|
||
"$cmd_duration"
|
||
"$character"
|
||
];
|
||
directory = {
|
||
style = "bold accent";
|
||
format = "[$path]($style) ";
|
||
truncation_length = 3;
|
||
truncate_to_repo = true;
|
||
};
|
||
git_branch = {
|
||
style = "warn";
|
||
format = "[$symbol$branch]($style) ";
|
||
symbol = " ";
|
||
};
|
||
git_status = {
|
||
style = "subtext";
|
||
# Parenthesised → the segment (and its trailing space) only
|
||
# render when there's actually a status to show.
|
||
format = "([$all_status$ahead_behind]($style) )";
|
||
};
|
||
character = {
|
||
success_symbol = "[❯](good)";
|
||
error_symbol = "[❯](bad)";
|
||
};
|
||
cmd_duration = {
|
||
min_time = 2000;
|
||
style = "subtext";
|
||
format = "[ $duration]($style) ";
|
||
};
|
||
};
|
||
};
|
||
|
||
# bat: "ansi" follows the terminal's 16-color palette → tracks the
|
||
# active Nomarchy theme (Ghostty bakes it) with no per-theme config.
|
||
programs.bat = {
|
||
enable = true;
|
||
config = {
|
||
theme = "ansi";
|
||
style = "numbers,changes,header";
|
||
};
|
||
};
|
||
|
||
programs.eza = {
|
||
enable = true;
|
||
icons = "auto";
|
||
git = true;
|
||
extraOptions = [ "--group-directories-first" ];
|
||
};
|
||
|
||
programs.zoxide = {
|
||
enable = true;
|
||
options = [ "--cmd cd" ]; # `cd` becomes the smart jumper (z under the hood)
|
||
};
|
||
};
|
||
}
|