Files
nixos-config/home/terminal/software/git.nix
T
2026-03-31 16:53:11 +02:00

128 lines
3.2 KiB
Nix

{
config,
pkgs,
...
}: let
configFile = "git/config";
ignoreFile = "git/ignore";
toINI = (pkgs.formats.ini {}).generate;
in {
users.users.someone.packages = with pkgs; [
git
delta
gnupg
git-lfs
peco
];
xdg.configFile."${configFile}".source = toINI "config" {
alias = {
af = "!git add $(git ls-files -m -o --exclude-standard | fzf -m)";
br = "branch";
ca = "commit -am";
co = "checkout";
d = "diff";
df = "!git hist | peco | awk '{print $2}' | xargs -I {} git diff {}^ {}";
"edit-unmerged" = "!f() { git ls-files --unmerged | cut -f2 | sort -u ; }; hx `f`";
fuck = "commit --amend -m";
hist = "log --pretty=format:\"%Cgreen%h %Creset%cd %Cblue[%cn] %Creset%s%C(yellow)%d%C(reset)\" --graph --date=relative --decorate --all";
llog = "log --graph --name-status --pretty=format:\"%C(red)%h %C(reset)(%cd) %C(green)%an %Creset%s %C(yellow)%d%Creset\" --date=relative";
pl = "!git pull origin $(git rev-parse --abbrev-ref HEAD)";
ps = "!git push origin $(git rev-parse --abbrev-ref HEAD)";
st = "status";
};
commit = {
gpgSign = "true";
};
core = {
editor = "nvim";
pager = "${pkgs.delta}/bin/delta";
whitespace = "fix,-indent-with-non-tab,trailing-space,cr-at-eol";
excludesFile = "${config.xdg.configHome}/${ignoreFile}";
};
delta = {
features = "unobtrusive-line-numbers decorations";
navigate = "true";
"side-by-side" = "true";
"true-color" = "never";
};
"delta-decorations" = {
"commit-decoration-style" = "bold grey box ul";
"file-decoration-style" = "ul";
"file-style" = "bold blue";
"hunk-header-decoration-style" = "box";
};
"delta-unobtrusive-line-numbers" = {
"line-numbers" = "true";
"line-numbers-left-format" = "{nm:>4}│";
"line-numbers-left-style" = "grey";
"line-numbers-right-format" = "{np:>4}│";
"line-numbers-right-style" = "grey";
};
diff = {
colorMoved = "default";
};
"filter-lfs" = {
clean = "git-lfs clean -- %f";
process = "git-lfs filter-process";
required = "true";
smudge = "git-lfs smudge -- %f";
};
gpg = {
format = "openpgp";
};
"gpg-openpgp" = {
program = "${pkgs.gnupg}/bin/gpg";
};
init = {
defaultBranch = "main";
};
interactive = {
diffFilter = "${pkgs.delta}/bin/delta --color-only";
};
merge = {
conflictstyle = "diff3";
stat = "true";
};
pull = {
ff = "only";
};
push = {
autoSetupRemote = "true";
default = "current";
};
rebase = {
autoSquash = "true";
autoStash = "true";
};
repack = {
usedeltabaseoffset = "true";
};
rerere = {
autoupdate = "true";
enabled = "true";
};
tag = {
gpgSign = "true";
};
user = {
email = "jory@severijnse.eu";
name = "Jory Severijnse";
signingKey = "0F8835ED078FDBF2";
};
};
xdg.configFile."${ignoreFile}".text = ''
*~
*.swp
*result*
.direnv
node_modules
.opencode/
.gemini/
GEMINI.md
AGENTS.md
.sisyphus
'';
}