Nix configurations for my personal machines (Linux & macOS)
1{ 2 delib, 3 pkgs, 4 ... 5}: 6delib.module { 7 name = "programs.git"; 8 9 home.always = {myconfig, ...}: let 10 inherit (myconfig.constants) userfullname useremail; 11 in { 12 xdg.configFile."git/allowed_signers".source = ../../files/git/allowed_signers; 13 14 home.packages = [pkgs.jjui]; 15 16 programs.git = { 17 enable = true; 18 userName = userfullname; 19 userEmail = useremail; 20 delta.enable = true; 21 22 signing = { 23 signByDefault = true; 24 format = "ssh"; 25 key = "~/.ssh/id_ed25519_sk_rk"; 26 }; 27 28 extraConfig = { 29 # TODO: custom pretty stuff? 30 blame.showEmail = true; 31 init.defaultBranch = "main"; 32 pull.rebase = true; 33 34 log = { 35 abbrevCommit = true; 36 # TODO: `git log --oneline` looks silly with this. Need custom format. 37 showSignature = true; 38 # TODO: trial for a while and see if I like this. 39 date = "human"; 40 }; 41 42 merge = { 43 # Try to avoid merge commits 44 ff = "only"; 45 # Really only useful on a well-managed team. Maybe eventually. 46 # verifySignatures = true; 47 conflictStyle = "diff3"; 48 }; 49 50 push = { 51 autoSetupRemote = true; 52 followTags = true; 53 }; 54 55 # Require explicit `drop` in interactive rebase 56 rebase.missingCommitsCheck = "error"; 57 rerere.enabled = true; 58 59 status = { 60 relativePaths = false; 61 showStash = true; 62 }; 63 64 gpg.ssh.allowedSignersFile = "~/.config/git/allowed_signers"; 65 # "gpg.ssh.program = "gfh-keygen"; 66 # "gpg.ssh.defaultKeyCommand = "gfh"; 67 }; 68 }; 69 70 programs.gh = { 71 enable = true; 72 settings = { 73 git_protocol = "ssh"; 74 aliases = { 75 clone = "repo clone"; 76 }; 77 }; 78 }; 79 80 programs.jujutsu = { 81 enable = true; 82 settings = { 83 user = { 84 name = userfullname; 85 email = useremail; 86 }; 87 88 ui = { 89 default-command = "log"; 90 show-cryptographic-signatures = true; 91 conflict-marker-style = "git"; 92 diff-formatter = "delta"; 93 }; 94 95 revset-aliases = { 96 "closest_bookmark(to)" = "heads(::to & bookmarks())"; 97 "p(n)" = "p(@, n)"; 98 "p(r, n)" = "roots(r | ancestors(r-, n))"; 99 }; 100 101 aliases = { 102 tug = ["bookmark" "move" "--from" "closest_bookmark(@-)" "--to" "@-"]; 103 e = ["edit"]; 104 n = ["new"]; 105 }; 106 107 merge-tools.mergiraf = { 108 program = "mergiraf"; 109 merge-args = ["merge" "$base" "$left" "$right" "-o" "$output"]; 110 }; 111 112 git = { 113 sign-on-push = true; 114 push-new-bookmarks = true; 115 }; 116 117 signing = { 118 behavior = "drop"; 119 backend = "ssh"; 120 key = "~/.ssh/id_ed25519_sk_rk.pub"; 121 backends.ssh.allowed-signers = "~/.config/git/allowed_signers"; 122 }; 123 }; 124 }; 125 126 programs.mergiraf.enable = true; 127 }; 128}