124 lines
3.2 KiB
Nix
124 lines
3.2 KiB
Nix
{ pkgs, ... }:
|
|
{
|
|
home.packages = with pkgs; [
|
|
git-absorb
|
|
git-crypt
|
|
git-agecrypt
|
|
|
|
(writeScriptBin "git-fzf" ''
|
|
git ls-files &> /dev/null
|
|
if [[ $? -eq 128 ]] then
|
|
echo "Not in a git repository"
|
|
exit 1
|
|
elif [[ $# -eq 0 ]] then
|
|
echo "$(git ls-files | fzf --filepath-word --multi)"
|
|
else
|
|
echo "$(git ls-files | fzf --filepath-word --multi -1 -q "$*")"
|
|
fi
|
|
'')
|
|
(writeScriptBin "git-fzf-edit" ''
|
|
git ls-files &> /dev/null
|
|
if [[ $? -eq 128 ]] then
|
|
echo "Not in a git repository"
|
|
exit 1
|
|
elif [[ $# -eq 0 ]] then
|
|
git ls-files | fzf --filepath-word --multi | xargs -r $EDITOR
|
|
else
|
|
git ls-files | fzf --filepath-word --multi -1 -q "$*" | xargs -r $EDITOR
|
|
fi
|
|
'')
|
|
];
|
|
|
|
programs.git = {
|
|
enable = true;
|
|
package = pkgs.gitFull;
|
|
|
|
lfs.enable = true;
|
|
|
|
extraConfig = {
|
|
branch.sort = "-committerdate";
|
|
commit.verbose = true;
|
|
init.defaultBranch = "master";
|
|
merge.ignore.driver = "true";
|
|
pull.rebase = true;
|
|
push.autoSetupRemote = true;
|
|
status.showUntrackedFiles = "all";
|
|
absorb = {
|
|
maxStack = 20;
|
|
oneFixupPerCommit = true;
|
|
autoStageIfNothingStaged = true;
|
|
};
|
|
protocol.file.allow = "always";
|
|
};
|
|
|
|
aliases = {
|
|
a = "add -p";
|
|
ai = "add -i";
|
|
an = "add -N";
|
|
co = "checkout";
|
|
cob = "checkout -b";
|
|
f = "fetch -p";
|
|
c = "commit";
|
|
ca = "commit -a";
|
|
caa = "commit -a --amend";
|
|
can = "commit --amend --no-edit";
|
|
caan = "commit -a --amend --no-edit";
|
|
caanpfl = "!g caan && g pfl";
|
|
p = "push";
|
|
pfl = "push --force-with-lease";
|
|
pu = "pull";
|
|
pua = "pull --autostash";
|
|
pup = "!git pull && git push";
|
|
puap = "!git pull --autostash && git push";
|
|
b = "branch";
|
|
ba = "branch -a";
|
|
bd = "branch -d";
|
|
bD = "branch -D";
|
|
d = "diff";
|
|
dc = "diff --cached";
|
|
ds = "diff --staged";
|
|
dh = "diff HEAD~1 HEAD";
|
|
r = "restore -p";
|
|
rs = "restore --staged -p";
|
|
sw = "switch";
|
|
st = "status -sb";
|
|
rb = "rebase -i --autosquash";
|
|
rbc = "rebase --continue";
|
|
rbs = "rebase --skip";
|
|
rba = "rebase --abort";
|
|
rbe = "rebase --edit-todo";
|
|
arb = "absorb --and-rebase";
|
|
|
|
# reset
|
|
soft = "reset --soft";
|
|
hard = "reset --hard";
|
|
s1ft = "soft HEAD~1";
|
|
h1rd = "hard HEAD~1";
|
|
|
|
# logging
|
|
lg = "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit";
|
|
plog = "log --graph --pretty='format:%C(red)%d%C(reset) %C(yellow)%h%C(reset) %ar %C(green)%aN%C(reset) %s'";
|
|
rank = "shortlog -sn --no-merges";
|
|
|
|
# delete merged branches
|
|
bdm = "!git branch --merged | grep -v '*' | xargs -n 1 git branch -d";
|
|
|
|
root = "rev-parse --show-toplevel";
|
|
fzf = "!git-fzf";
|
|
edit = "!git-fzf-edit";
|
|
e = "edit";
|
|
};
|
|
};
|
|
|
|
programs.gh = {
|
|
enable = true;
|
|
settings = {
|
|
prompt = "enabled";
|
|
git_protocol = "ssh";
|
|
aliases = {
|
|
co = "pr checkout";
|
|
clone = "repo clone";
|
|
};
|
|
};
|
|
};
|
|
}
|