nix/modules/git.nix
Yan Lin ea6c7c815b Add multi-platform git credential management
- Add git-credential-oauth package for OAuth authentication
- Configure OAuth helpers for GitHub, GitLab, BitBucket
- Add token-based authentication for Overleaf
- Remove disabled credential helper configuration
- Support secure browser-based OAuth flows and token storage

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-28 13:50:46 +02:00

157 lines
No EOL
3.2 KiB
Nix

{ config, pkgs, ... }:
{
# Enable git-credential-oauth for GitHub, GitLab, BitBucket
programs.git-credential-oauth = {
enable = true;
};
programs.git = {
enable = true;
userName = "Yan Lin";
userEmail = "github@yanlincs.com";
ignores = [
# Claude Code
"**/.claude/settings.local.json"
# macOS
".DS_Store"
".AppleDouble"
".LSOverride"
"Icon"
"._*"
".DocumentRevisions-V100"
".fseventsd"
".Spotlight-V100"
".TemporaryItems"
".Trashes"
".VolumeIcon.icns"
".com.apple.timemachine.donotpresent"
# Editors
".vscode/"
".idea/"
"*.swp"
"*.swo"
"*~"
".vim/"
# Development
"node_modules/"
".env"
".env.local"
".env.*.local"
"*.log"
"npm-debug.log*"
"yarn-debug.log*"
"yarn-error.log*"
# Python
"__pycache__/"
"*.py[cod]"
"*$py.class"
".Python"
"build/"
"develop-eggs/"
"dist/"
"downloads/"
"eggs/"
".eggs/"
"lib/"
"lib64/"
"parts/"
"sdist/"
"var/"
"wheels/"
"*.egg-info/"
".installed.cfg"
"*.egg"
# Temporary files
"*.tmp"
"*.temp"
"*.bak"
"*.backup"
"*~"
# OS generated files
"Thumbs.db"
"ehthumbs.db"
"Desktop.ini"
"$RECYCLE.BIN/"
];
extraConfig = {
# Platform-specific credential configuration
credential = {
# OAuth platforms (handled by git-credential-oauth)
"https://github.com".helper = "oauth";
"https://gitlab.com".helper = "oauth";
"https://bitbucket.org".helper = "oauth";
# Token-based platforms
"https://git.overleaf.com".helper = "store";
"https://git.overleaf.com".username = "git";
};
core = {
editor = "nvim";
autocrlf = "input";
ignorecase = false;
};
init.defaultBranch = "main";
push = {
default = "simple";
autoSetupRemote = true;
};
pull = {
rebase = true;
};
merge = {
conflictstyle = "diff3";
};
diff = {
colorMoved = "default";
};
status = {
showUntrackedFiles = "all";
};
};
aliases = {
st = "status";
co = "checkout";
br = "branch";
ci = "commit";
unstage = "reset HEAD --";
last = "log -1 HEAD";
visual = "!gitk";
# Better logging
lg = "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit";
lga = "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --all";
# Quick operations
up = "pull --rebase";
cm = "commit -m";
ca = "commit --amend";
# Show changes
d = "diff";
dc = "diff --cached";
ds = "diff --stat";
# Stash operations
sl = "stash list";
sp = "stash pop";
ss = "stash save";
};
};
}