{ lib, pkgs, config, ... }: let sshPub = builtins.fromTOML ( builtins.readFile ../configs/ssh-pubkeys.toml ); in { home.file.".ssh/allowed_signers".text = lib.concatMapStrings (x: "franck@fcuny.net ${x}\n") (with sshPub; [ aptos work git ykey-laptop op ]); programs.git = { enable = true; userName = "Franck Cuny"; userEmail = "franck@fcuny.net"; signing = { key = "key::${sshPub.op}"; signByDefault = true; }; aliases = { amend = "commit --amend"; ll = "log --pretty=\"format:%h %G? %aN %s\""; }; extraConfig = { core.whitespace = "trailing-space,space-before-tab"; color.ui = "true"; gpg.format = "ssh"; gpg.ssh.allowedSignersFile = "~/.ssh/allowed_signers"; gpg.ssh.program = "/Applications/1Password.app/Contents/MacOS/op-ssh-sign"; # abort if the remote branch does not match the local one push.default = "simple"; # https://adamj.eu/tech/2024/01/18/git-improve-diff-histogram/ diff.algorithm = "histogram"; init.defaultBranch = "main"; pull.rebase = true; rebase = { # Automatically create a temporary stash entry before the # operation begins, and apply it after the operation ends. autoStash = true; # Print a warning if some commits are removed missingCommitsCheck = "warn"; }; branch.autosetuprebase = "remote"; branch.sort = "authordate"; commit.template = "${config.xdg.dataHome}/git/commit.template"; }; ignores = [ "*~" ".direnv" "__pycache__" ]; }; xdg.dataFile."git/commit.template".source = pkgs.writeText "commit.template" '' # (If applied, this commit will...) # Explain why this change is being made # --- COMMIT END --- # Remember to # Use the imperative mood, present tense: `change' not `changed' nor `changes' # Do not end the subject line with a period # Use the body to explain what and why vs. how # Can use multiple lines with "-" for bullet points in body ''; home.packages = with pkgs; [ gitAndTools.pre-commit ]; }