diff options
Diffstat (limited to 'home-manger/git')
-rw-r--r-- | home-manger/git/default.nix | 141 |
1 files changed, 141 insertions, 0 deletions
diff --git a/home-manger/git/default.nix b/home-manger/git/default.nix new file mode 100644 index 00000000..179c449b --- /dev/null +++ b/home-manger/git/default.nix @@ -0,0 +1,141 @@ +{ + config, + pkgs, + ... +}: let + gitTemplateFile = + pkgs.writeText "git_template.git" + '' + # Title: Summary, imperative, start upper case, don't end with a period + # If applied, this commit will <your Title> + + # Body: Explain *what* and *why* (not *how*). + + + # BREAKING CHANGE: <description> + # Fixes: # + # Refs: # + # Co-authored-by: <name> <email> + + + + # Convention Commits (https://www.conventionalcommits.org/en/v1.0.0/): + # feat: [Features] -> MINOR version bump + # A new feature + # + # fix: [Bug Fixes] -> PATCH version bump + # A bug fix + # + # append '!' after the type/scope: [Breaking Change] -> MAJOR version bump + # A breaking API change + # + # docs: [Documentation] + # Documentation only changes + # + # style: [Styles] + # Changes that do not affect the meaning of the code + # (white-space, formatting, missing semi-colons, etc) + # + # refactor: [Code Refactoring] + # A code change that neither fixes a bug nor adds a feature + # + # perf: [Performance Improvements] -> PATCH version bump + # A code change that improves performance + # + # test: [Tests] + # Adding missing tests or correcting existing tests + # + # build: [Builds] -> PATCH version bump + # Changes that affect the build system or external dependencies + # (example scopes: gulp, broccoli, npm) + # + # ci: [Continuous Integrations] + # Changes to our CI configuration files and scripts + # (example scopes: Travis, Circle, BrowserStack, SauceLabs) + # + # chore: [Chores] + # Other changes that don't modify src or test files + # + # reverts: [Reverts] + # Reverts a previous commit + + # How to Write a Git Commit Message: + # [https://chris.beams.io/posts/git-commit/] -> https://cbea.ms/git-commit/ + # + # 1. Separate subject from body with a blank line + # 2. Limit the subject line to 50 characters + # 3. Capitalize the subject line + # 4. Do not end the subject line with a period + # 5. Use the imperative mood in the subject line + # 6. Wrap the body at 72 characters + # 7. Use the body to explain *what* and *why* vs. *how* + ''; + + gitConfig = { + init = { + defaultBranch = "prime"; + }; + credential = { + helper = "cache --timeout 43200"; + }; + user = { + email = "ene@sils.li"; + name = "ene"; + }; + help = { + autocorrect = 5; + }; + commit = { + template = "${gitTemplateFile}"; + }; + }; +in { + home-manager.programs.git = { + enable = true; + #package = pkgs.gitAndTools.gitFull; # TODO for git send-email support + aliases = { + st = "status"; + + ## Logging: + ls = "log --max-count=10 --color --format=format:'%C(bold red)%h%C(reset) %C(dim bold blue)%s%C(reset) %C(dim white)[%aN]' "; + + # https://stackoverflow.com/a/61487052 + lg = "lg1"; + lg1 = "lg1-specific --all"; + lg2 = "lg2-specific --all"; + lg3 = "lg3-specific --all"; + + lg1-specific = "log --graph --abbrev-commit --decorate \ + --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(auto)%d%C(reset)'"; + + lg2-specific = "log --graph --abbrev-commit --decorate \ + --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)%C(auto)%d%C(reset)%n'' %C(white)%s%C(reset) %C(dim white)- %an%C(reset)'"; + + lg3-specific = "log --graph --abbrev-commit --decorate \ + --format=format:'%C(bold blue)%h%C(reset)\ + - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)\ + %C(bold cyan)(committed: %cD)%C(reset) %C(auto)%d%C(reset)%n\ + '' %C(white)%s%C(reset)%n'' \ + %C(dim white)- %an <%ae> %C(reset) %C(dim white)(committer: %cn <%ce>)%C(reset)'"; + }; + extraConfig = gitConfig; + delta = { + enable = true; + options = { + decorations = { + commit-decoration-style = "bold yellow box ul"; + file-decoration-style = "none"; + file-style = "bold yellow ul"; + }; + features = "decorations"; + whitespace-error-style = "22 reverse"; + }; + }; + signing = { + key = null; #let gpg2 decide, based on the author + signByDefault = true; + }; + }; +} +# vim: ts=2 + |