886ac4eb36
git.nix and work.nix both define user.signingkey. They used to hold the same value, which types.str tolerates, but git.nix now sets the personal key while work.nix sets the work key, so the two plain definitions conflict on the EDaaS host. Mark git.nix's signingkey as mkDefault, mirroring user.email: personal hosts get the personal key, and work.nix's plain work-key definition wins on the work host.
120 lines
4.0 KiB
Nix
120 lines
4.0 KiB
Nix
# Version control: git + delta pager + commitizen + lazygit. The work host
|
|
# layers commit signing and an email override on top (see work.nix).
|
|
{
|
|
pkgs,
|
|
lib,
|
|
fullName,
|
|
...
|
|
}:
|
|
let
|
|
ctp = import ../catppuccin-mocha.nix;
|
|
in
|
|
{
|
|
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
|
|
# Keep the commit-graph current (fast `git log --graph`, used by `lg`).
|
|
fetch.writeCommitGraph = true;
|
|
gc.writeCommitGraph = true;
|
|
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 --";
|
|
amend = "commit --amend --no-edit"; # tack staged changes onto HEAD
|
|
fixup = "commit --fixup"; # `git fixup <sha>` -> autosquash on next rebase
|
|
undo = "reset --soft HEAD~1"; # undo last commit, keep the changes staged
|
|
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. This personal key is the default; the work module
|
|
# (work.nix) overrides it with the work key on the EDaaS host, the same way
|
|
# user.email is overridden -- so mkDefault here lets that plain definition
|
|
# win instead of conflicting. gpgsign is mkDefault too, so a host without
|
|
# the key in its ssh-agent can override it to false rather than fail every
|
|
# commit.
|
|
gpg.format = "ssh";
|
|
user.signingkey = lib.mkDefault "key::ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPDxHvdMTOzpFWUFMtCP7C/4tIOUO3GIO2QPvaifSnWH lyrathorpe@Lyra-MBA";
|
|
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;
|
|
};
|
|
|
|
# lazygit: TUI for staging/rebasing, themed to Catppuccin Mocha to match.
|
|
programs.lazygit = {
|
|
enable = true;
|
|
settings.gui.theme = {
|
|
activeBorderColor = [
|
|
"#${ctp.blue}"
|
|
"bold"
|
|
];
|
|
inactiveBorderColor = [ "#${ctp.surface1}" ];
|
|
selectedLineBgColor = [ "#${ctp.surface0}" ];
|
|
};
|
|
};
|
|
}
|