Simon Bruder
10b8d432d5
This applies the REUSE specification to the repository, so the licensing information can be tracked for every file individually.
138 lines
3.7 KiB
Nix
138 lines
3.7 KiB
Nix
# SPDX-FileCopyrightText: 2018-2023 Simon Bruder <simon@sbruder.de>
|
||
#
|
||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||
|
||
{ config, lib, pkgs, ... }:
|
||
{
|
||
programs.git = {
|
||
enable = true;
|
||
package = pkgs.gitFull;
|
||
userName = "Simon Bruder";
|
||
userEmail = "simon@sbruder.de";
|
||
signing = {
|
||
key = config.programs.gpg.settings.default-key;
|
||
signByDefault = true;
|
||
};
|
||
|
||
extraConfig = {
|
||
# Make LTeX not check anything below this.
|
||
# I often use git commit -v, which adds a full diff that should not be checked.
|
||
commit.template = toString (pkgs.writeText "git-commit-template" ''
|
||
|
||
# LTeX: enabled=false'');
|
||
core.quotepath = "off";
|
||
pull.ff = "only";
|
||
merge = {
|
||
ff = "only";
|
||
};
|
||
diff = {
|
||
age = {
|
||
# This uses the de facto default key location with no ability to
|
||
# specify another key.
|
||
# If decryption fails (e.g. due to a lack of the right private key,
|
||
# rage’s error message will be displayed instead of the file’s
|
||
# contents.
|
||
textconv = toString (pkgs.writeShellScript "git-age-textconv" ''
|
||
${pkgs.rage}/bin/rage -d -i ${config.xdg.configHome}/age/keys.txt "$@" 2>&1 || true
|
||
'');
|
||
};
|
||
sops.textconv = "${pkgs.sops}/bin/sops -d";
|
||
};
|
||
sendemail = {
|
||
confirm = "auto";
|
||
smtpserver = "vueko.sbruder.de";
|
||
smtpuser = "simon@sbruder.de";
|
||
smtpencryption = "tls";
|
||
smtpserverport = 587;
|
||
};
|
||
credential = {
|
||
helper = "!${pkgs.pass-git-helper}/bin/pass-git-helper $@";
|
||
};
|
||
};
|
||
|
||
ignores = [
|
||
"*.swp"
|
||
".ccls-cache"
|
||
".direnv"
|
||
"Session.vim"
|
||
];
|
||
|
||
lfs.enable = true;
|
||
delta = {
|
||
enable = true;
|
||
options = {
|
||
line-numbers = "true";
|
||
side-by-side = "true";
|
||
features = "decorations";
|
||
syntax-theme = "base16";
|
||
blame-code-style = "syntax";
|
||
decorations = {
|
||
commit-decoration-style = "bold yellow box ul";
|
||
file-style = "bold yellow ul";
|
||
file-decoration-style = "none";
|
||
};
|
||
};
|
||
};
|
||
|
||
aliases = {
|
||
ls = "log --stat";
|
||
};
|
||
|
||
includes = map
|
||
(condition: {
|
||
inherit condition;
|
||
contents = {
|
||
user.email = "simon.bruder@mailbox.tu-dresden.de";
|
||
};
|
||
})
|
||
[
|
||
"gitdir:~/Documents/uni/"
|
||
"gitdir:~/projects/uni/"
|
||
];
|
||
};
|
||
|
||
programs.zsh.shellAliases =
|
||
let
|
||
defaultBranch = "\${\${\$(git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null)##refs/remotes/origin/}:-master}";
|
||
in
|
||
{
|
||
ga = "git add";
|
||
gap = "git add --patch";
|
||
gc = "git commit";
|
||
gco = "git checkout";
|
||
gcp = "git cherry-pick";
|
||
gcv = "git commit --verbose";
|
||
gcam = "git commit --amend";
|
||
gd = "git diff";
|
||
gdc = "git diff --cached";
|
||
gfom = "git fetch origin ${defaultBranch}";
|
||
gl = "git log";
|
||
glp = "git log --patch";
|
||
gls = "git log --stat";
|
||
gp = "git push";
|
||
grb = "git rebase";
|
||
grbc = "git rebase --continue";
|
||
grbi = "git rebase -i";
|
||
grbias = "git rebase -i --autosquash";
|
||
grbim = "git rebase -i ${defaultBranch}";
|
||
grbm = "git rebase ${defaultBranch}";
|
||
grbom = "git rebase origin/${defaultBranch}";
|
||
grs = "git restore";
|
||
grss = "git restore --staged";
|
||
gs = "git switch";
|
||
gsc = "git switch -c";
|
||
gsm = "git switch ${defaultBranch}";
|
||
gst = "git status";
|
||
};
|
||
|
||
xdg.configFile = {
|
||
"pass-git-helper/git-pass-mapping.ini".text = lib.generators.toINI { } {
|
||
"vueko.sbruder.de:587".target = "sbruder.de/mail";
|
||
};
|
||
};
|
||
|
||
home.packages = with pkgs; [
|
||
gitAndTools.pre-commit # pre-commit hook helper
|
||
];
|
||
}
|