nixos/home-manager/modules/programs/git/default.nix

152 lines
3.2 KiB
Nix

{ config, lib, ... }:
let
cfg = config.programs.az-git;
in
{
options = {
programs.az-git = {
enable = lib.mkEnableOption "Enable git.";
userEmail = lib.mkOption {
type = lib.types.str;
description = "The hostname of the system.";
default = "andreas@zweili.ch";
};
};
};
config = lib.mkIf cfg.enable {
programs.git = {
enable = true;
userName = "Andreas Zweili";
userEmail = cfg.userEmail;
delta = {
enable = true;
options = {
navigate = true;
line-numbers = true;
syntax-theme = "GitHub";
};
};
includes = [
{
path = "~/.config/git/workconfig";
condition = "gitdir:~/git_repos/work/";
}
];
extraConfig = {
core = {
hooksPath = "~/.config/git/hooks/";
autocrlf = "input";
};
safe = {
directory = "*";
};
pull = {
rebase = false;
};
push = {
autoSetupRemote = true;
};
merge.conflictStyle = "diff3";
rerere.enabled = true;
};
ignores = [
# ---> VisualStudioCode
".vscode/*"
"!.vscode/settings.json"
"!.vscode/tasks.json"
"!.vscode/launch.json"
"!.vscode/extensions.json"
"*.code-workspace"
# Local History for Visual Studio Code"
".history/"
# ---> Emacs"
# -*- mode: gitignore; -*-"
"*~"
"#*#"
"/.emacs.desktop"
"/.emacs.desktop.lock"
"*.elc"
"auto-save-list"
"tramp"
".#*"
# Org-mode"
".org-id-locations"
"*_archive"
# flymake-mode"
"*_flymake.*"
# eshell files"
"/eshell/history"
"/eshell/lastdir"
# elpa packages"
"/elpa/"
# reftex files"
"*.rel"
# AUCTeX auto folder"
"/auto/"
# cask packages"
".cask/"
"dist/"
# Flycheck"
"flycheck_*.el"
# server auth directory"
"/server/"
# projectiles files"
".projectile"
# directory configuration"
".dir-locals.el"
# network security"
"/network-security.data"
# ---> Vim"
# Swap"
"[._]*.s[a-v][a-z]"
"!*.svg # comment out if you don't need vector files"
"[._]*.sw[a-p]"
"[._]s[a-rt-v][a-z]"
"[._]ss[a-gi-z]"
"[._]sw[a-p]"
# Session"
"Session.vim"
"Sessionx.vim"
# Temporary"
".netrwhist"
"*~"
# Auto-generated tag files"
"tags"
# Persistent undo"
"[._]*.un~"
# ignore pycache"
"__pycache__/"
];
};
# raw files
home.file.".config/git/hooks".source = ./hooks;
home.file.".config/git/workconfig".source = ./workconfig;
home.shellAliases = {
git-clean = ''
git fetch --all -p;
git branch --merged origin/master | grep -v "\*" | xargs git branch -d;
git branch -vv | grep -v '\[origin/'| grep -v "\*" | awk '{ print $1; }' | xargs -r git branch -D;
'';
};
};
}