feat(nix): migrate git

This commit is contained in:
Stefan Imhoff
2024-07-15 19:00:58 +02:00
parent 400488a2fd
commit 5755cafa17
5 changed files with 178 additions and 142 deletions

View File

@@ -16,8 +16,6 @@
~/.config/nvim: nvim ~/.config/nvim: nvim
~/.config/starship.toml: prompt/starship.toml ~/.config/starship.toml: prompt/starship.toml
~/.config/tmux/tmux-nerd-font-window-name.yml: tmux/tmux-nerd-font-window-name.yml ~/.config/tmux/tmux-nerd-font-window-name.yml: tmux/tmux-nerd-font-window-name.yml
~/.gitconfig: git/gitconfig
~/.gitignore: git/gitignore
~/.gitmux.conf: tmux/gitmux.conf ~/.gitmux.conf: tmux/gitmux.conf
~/.tmux-cht-command: tmux/tmux-cht-command ~/.tmux-cht-command: tmux/tmux-cht-command
~/.tmux-cht-languages: tmux/tmux-cht-languages ~/.tmux-cht-languages: tmux/tmux-cht-languages

View File

@@ -1,127 +0,0 @@
[user]
useConfigOnly = true
[include]
path = ~/.gitconfig.local
[help]
autocorrect = 1
[core]
editor = code --wait
excludesfile = ~/.gitignore
legacyheaders = false
whitespace = trailing-space,space-before-tab
pager = delta
[interactive]
diffFilter = delta --color-only
[add.interactive]
useBuildtin = false
[delta]
navigate = true
light = false
line-numbers = true
side-by-side = true
syntax-theme = Dracula
[alias]
st = status
ci = commit
co = checkout
br = branch
rb = rebase
cp = cherry-pick
dt = difftool
hist = log --color --graph --decorate --abbrev-commit --date=short --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(blue)[%an]%Creset' --abbrev-commit --
ls = log --pretty=format:"%C(yellow)%h%Cred%d\\ %Creset%s%Cblue\\ [%cn]" --decorate
local-branches = !git branch -vv | cut -c 3- | awk '$3 !~/\\[/ { print $1 }'
stats = shortlog -sn --all --no-merges
today = log --since=00:00:00 --all --no-merges --oneline
prune = fetch --prune
undo = reset --soft HEAD^
stash-all = stash save --include-untracked
app-status = !git remote update >/dev/null && git --no-pager log origin/production..origin/master --pretty=oneline >&2 | pbcopy
unstage = "reset HEAD --"
merged = "branch --merged"
unmerged = "branch --no-merge"
branches = for-each-ref --sort=-committerdate --format=\"%(color:blue)%(authordate:relative)\t%(color:red)%(authorname)\t%(color:white)%(color:bold)%(refname:short)\" refs/remotes
ignored = "ls-files --others --directory"
# Assume workflow
assume = "update-index --assume-unchanged"
unassume = "update-index --no-assume-unchanged"
assumed = "!git ls-files -v | grep ^h | cut -c 3-"
unassumeall = "!git assumed | xargs git update-index --no-assume-unchanged"
assumeall = "!git st -s | awk {'print $2'} | xargs git assume"
# Rebase workflow
mainbranch = "!git remote show origin | sed -n '/HEAD branch/s/.*: //p'"
synced = "!git pull origin $(git mainbranch) --rebase"
update = "!git pull origin $(git rev-parse --abbrev-ref HEAD) --rebase"
squash = "!git rebase -v -i $(git mainbranch)"
publish = push origin HEAD --force-with-lease
pub = publish
# GitHub
hub = "!gh repo view --web"
[apply]
whitespace = fix
[color]
status = auto
diff = auto
branch = auto
interactive = auto
ui = 1
[push]
default = upstream
followTags = true
autoSetupRemote = true
[status]
showUntrackedFiles = all
[transfer]
fsckobjects = true
[i18n]
commitencoding = UTF-8
logoutputencoding = UTF-8
[repack]
usedeltabaseoffset = true
[branch]
autosetupmerge = true
sort = -authordate
[diff]
tool = Kaleidoscope
algorithm = patience
colorMoved = default
[difftool]
prompt = false
[difftool "Kaleidoscope"]
cmd = ksdiff --partial-changeset --relative-path \"$MERGED\" -- \"$LOCAL\" \"$REMOTE\"
[merge]
conflictstyle = diff3
tool = Kaleidoscope
[mergetool]
prompt = false
keepBackup = false
[mergetool "Kaleidoscope"]
cmd = ksdiff --merge --output \"$MERGED\" --base \"$BASE\" -- \"$LOCAL\" --snapshot \"$REMOTE\" --snapshot
trustexitcode = true
trustExitCode = true
[mergetool "nvim"]
cmd = nvim -f -c \"Gdiffsplit!\" \"$MERGED\"
[mergetool "code"]
cmd = "code $MERGED"
keepBackup = false
trustexitcode = true
[rebase]
autosquash = true
[rerere]
enabled = 1
[fetch]
prune = true
fsckobjects = false
[filter "lfs"]
required = true
smudge = git-lfs smudge -- %f
process = git-lfs filter-process
clean = git-lfs clean -- %f
[web]
browser = open
[hub]
host = source.xing.com
[pull]
ff = only
[commit]
gpgsign = true

View File

@@ -1,13 +0,0 @@
*.lnk
*.pyc
*.pyo
*.session
*.sw[nop]
.BridgeSort
.DS_Store
._*
.agignore
.bundle/
m~
tags
.worktrees

View File

@@ -13,6 +13,7 @@ in
./ctags ./ctags
./curl ./curl
./editorconfig ./editorconfig
./git
./gnupg ./gnupg
./hammerspoon ./hammerspoon
./karabiner ./karabiner

177
nix/home/git/default.nix Normal file
View File

@@ -0,0 +1,177 @@
{ pkgs, ... }:
{
programs.git = {
enable = true;
delta.enable = true;
aliases = {
st = "status";
ci = "commit";
co = "checkout";
br = "branch";
rb = "rebase";
cp = "cherry-pick";
dt = "difftool";
hist = "log --color --graph --decorate --abbrev-commit --date=short --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(blue)[%an]%Creset' --abbrev-commit --";
ls = "log --pretty=format:\"%C(yellow)%h%Cred%d\\ %Creset%s%Cblue\\ [%cn]\" --decorate";
"local-branches" = "!git branch -vv | cut -c 3- | awk '$3 !~/\\[/ { print $1 }'";
stats = "shortlog -sn --all --no-merges";
today = "log --since=00:00:00 --all --no-merges --oneline";
prune = "fetch --prune";
undo = "reset --soft HEAD^";
"stash-all" = "stash save --include-untracked";
"app-status" = "!git remote update >/dev/null && git --no-pager log origin/production..origin/master --pretty=oneline >&2 | pbcopy";
unstage = "reset HEAD --";
merged = "branch --merged";
unmerged = "branch --no-merge";
branches = "for-each-ref --sort=-committerdate --format=\"%(color:blue)%(authordate:relative)\t%(color:red)%(authorname)\t%(color:white)%(color:bold)%(refname:short)\" refs/remotes";
ignored = "ls-files --others --directory";
# Assume workflow
assume = "update-index --assume-unchanged";
unassume = "update-index --no-assume-unchanged";
assumed = "!git ls-files -v | grep ^h | cut -c 3-";
unassumeall = "!git assumed | xargs git update-index --no-assume-unchanged";
assumeall = "!git st -s | awk {'print $2'} | xargs git assume";
# Rebase workflow
mainbranch = "!git remote show origin | sed -n '/HEAD branch/s/.*: //p'";
synced = "!git pull origin $(git mainbranch) --rebase";
update = "!git pull origin $(git rev-parse --abbrev-ref HEAD) --rebase";
squash = "!git rebase -v -i $(git mainbranch)";
publish = "push origin HEAD --force-with-lease";
pub = "publish";
# GitHub
hub = "!gh repo view --web";
};
ignores = [
"*.lnk"
"*.pyc"
"*.pyo"
"*.session"
"*.sw[nop]"
".BridgeSort"
".DS_Store"
"._*"
".agignore"
".bundle/"
"m~"
"tags"
".worktrees"
];
lfs.enable = true;
includes = [
{ path = "~/.gitconfig.local"; }
];
extraConfig = {
user = {
useConfigOnly = true;
};
core = {
editor = "code --wait";
legacyheaders = false;
};
help = {
autocorrect = 1;
};
delta = {
navigate = true;
light = false;
line-numbers = true;
side-by-side = true;
syntax-theme = "Dracula";
};
add = {
interactive = {
useBuildtin = true;
};
};
apply = {
whitespace = "fix";
};
color = {
status = "auto";
diff = "auto";
branch = "auto";
interactive = "auto";
ui = 1;
};
commit = {
gpgsign = true;
};
branch = {
autosetupmerge = true;
sort = "-authordate";
};
push = {
default = "upstream";
followTags = true;
autoSetupRemote = true;
};
pull = {
ff = "only";
};
fetch = {
prune = true;
fsckobjects = false;
};
rebase = {
autosquash = true;
};
status = {
showUntrackedFiles = "all";
};
diff = {
tool = "Kaleidoscope";
algorithm = "patience";
colorMoved = "default";
};
difftool = {
prompt = false;
Kaleidoscope.cmd = "ksdiff --partial-changeset --relative-path \"$MERGED\" -- \"$LOCAL\" \"$REMOTE\"";
};
merge = {
conflictstyle = "diff3";
tool = "Kaleidoscope";
};
mergetool = {
prompt = false;
keepBackup = false;
Kaleidoscope = {
cmd = "ksdiff --merge --output \"$MERGED\" --base \"$BASE\" -- \"$LOCAL\" --snapshot \"$REMOTE\" --snapshot";
trustexitcode = true;
trustExitCode = true;
};
nvim.cmd = "nvim -f -c \"Gdiffsplit!\" \"$MERGED\"";
code = {
cmd = "\"code $MERGED\"";
keepBackup = false;
trustexitcode = true;
};
};
rerere.enabled = true;
transfer = {
fsckObjects = true;
};
i18n = {
commitencoding = "UTF-8";
logoutputencoding = "UTF-8";
};
repack = {
usedeltabaseoffset = true;
};
"filter \"lfs\"" = {
required = true;
smudge = "git-lfs smudge -- %f";
process = "git-lfs filter-process";
clean = "git-lfs clean -- %f";
};
web.browser = "open";
hub.host = "source.xing.com";
};
};
home.packages = with pkgs; [
git
delta
gh
];
}