6a0d3680fd
- Catppuccin Mocha for fzf (colors), bat (catppuccin/bat tmTheme) and git delta (syntax-theme + navigate/line-numbers/side-by-side). - CLI staples on every host: ripgrep, fd, jq, btop, plus gh (SSH) and tea (Gitea CLI). - home.sessionVariables: PAGER, MANPAGER (bat), VISUAL; xdg.enable. - xdg.mimeApps defaults (web->Firefox, directories->nemo). - Document the stateVersion pin. README updated. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
96 lines
3.2 KiB
Nix
96 lines
3.2 KiB
Nix
# Version control: git + delta pager + commitizen. The work host layers
|
|
# commit signing and an email override on top (see work/default.nix).
|
|
{
|
|
pkgs,
|
|
lib,
|
|
fullName,
|
|
...
|
|
}:
|
|
{
|
|
home.packages = [
|
|
pkgs.commitizen
|
|
];
|
|
|
|
programs.git = {
|
|
enable = true;
|
|
package = pkgs.gitFull;
|
|
settings = {
|
|
user.name = fullName;
|
|
# Personal identity. mkDefault so the work module overrides it on the work
|
|
# host (and to merge cleanly with that plain definition there).
|
|
user.email = lib.mkDefault "iam@emmathe.dev";
|
|
push.autoSetupRemote = true;
|
|
init.defaultBranch = "main";
|
|
|
|
# Rebase-centric pulls (matches the "always a branch, linear history"
|
|
# workflow); stash/restore and reorder fixups automatically.
|
|
pull.rebase = true;
|
|
rebase = {
|
|
autoStash = true;
|
|
autoSquash = true;
|
|
};
|
|
|
|
fetch.prune = true; # drop deleted remote-tracking branches
|
|
merge.conflictStyle = "zdiff3"; # show the common ancestor in conflicts
|
|
diff = {
|
|
algorithm = "histogram";
|
|
colorMoved = "default";
|
|
};
|
|
rerere.enabled = true; # remember + replay conflict resolutions
|
|
|
|
# delta pager config (programs.delta is enabled below, with git
|
|
# integration; these keys land under [delta] in the git config).
|
|
# syntax-theme reuses the Catppuccin Mocha tmTheme vendored for bat in
|
|
# shell.nix -- delta reads bat's theme directory.
|
|
delta = {
|
|
syntax-theme = "Catppuccin Mocha";
|
|
navigate = true; # n/N to jump between diff hunks
|
|
line-numbers = true;
|
|
side-by-side = true;
|
|
};
|
|
commit.verbose = true; # full diff in the commit-message editor
|
|
branch.sort = "-committerdate"; # most-recent branches first
|
|
column.ui = "auto";
|
|
help.autocorrect = "prompt";
|
|
|
|
alias = {
|
|
st = "status";
|
|
co = "checkout";
|
|
sw = "switch";
|
|
br = "branch";
|
|
ci = "commit";
|
|
last = "log -1 HEAD";
|
|
unstage = "reset HEAD --";
|
|
lg = "log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(auto)%d%C(reset)' --all";
|
|
# commitizen (Conventional Commits, its default ruleset): `git cz c` ->
|
|
# `cz commit`, `git cz bump`, etc. `git cc` is a shortcut for the prompt.
|
|
cz = "!cz";
|
|
cc = "!cz commit";
|
|
};
|
|
|
|
# SSH commit signing on personal hosts too (the work module sets the same
|
|
# on the work host). mkDefault so a host without the key in its ssh-agent
|
|
# can override to false -- otherwise commits there would fail. Reuses the
|
|
# existing ssh key; a dedicated personal key can be swapped in later.
|
|
gpg.format = "ssh";
|
|
user.signingkey = "key::ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAJMVgeRKnfX1G8coU3nAobI485aeUpGTMqH7+zbKI8o emma.thorpe@cloud.com";
|
|
commit.gpgsign = lib.mkDefault true;
|
|
tag.gpgsign = lib.mkDefault true;
|
|
};
|
|
|
|
# Global ignore file (~/.config/git/ignore).
|
|
ignores = [
|
|
"result"
|
|
"result-*"
|
|
".direnv"
|
|
"*.swp"
|
|
".DS_Store"
|
|
];
|
|
};
|
|
|
|
programs.delta = {
|
|
enable = true;
|
|
enableGitIntegration = true;
|
|
};
|
|
}
|