Nix configurations for my personal machines (Linux & macOS)
at main 3.6 kB view raw
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 19 signing = { 20 signByDefault = true; 21 format = "ssh"; 22 key = "~/.ssh/id_ed25519_sk_rk"; 23 }; 24 25 settings = { 26 user = { 27 name = userfullname; 28 email = useremail; 29 }; 30 31 # TODO: custom pretty stuff? 32 blame.showEmail = true; 33 init.defaultBranch = "main"; 34 pull.rebase = true; 35 36 log = { 37 abbrevCommit = true; 38 # TODO: `git log --oneline` looks silly with this. Need custom format. 39 showSignature = true; 40 # TODO: trial for a while and see if I like this. 41 date = "human"; 42 }; 43 44 merge = { 45 # Try to avoid merge commits 46 ff = "only"; 47 # Really only useful on a well-managed team. Maybe eventually. 48 # verifySignatures = true; 49 conflictStyle = "diff3"; 50 }; 51 52 push = { 53 autoSetupRemote = true; 54 followTags = true; 55 }; 56 57 # Require explicit `drop` in interactive rebase 58 rebase.missingCommitsCheck = "error"; 59 rerere.enabled = true; 60 61 status = { 62 relativePaths = false; 63 showStash = true; 64 }; 65 66 gpg.ssh.allowedSignersFile = "~/.config/git/allowed_signers"; 67 # "gpg.ssh.program = "gfh-keygen"; 68 # "gpg.ssh.defaultKeyCommand = "gfh"; 69 }; 70 }; 71 72 programs.gh = { 73 enable = true; 74 settings = { 75 git_protocol = "ssh"; 76 aliases = { 77 clone = "repo clone"; 78 }; 79 }; 80 }; 81 82 programs.jujutsu = { 83 enable = true; 84 settings = { 85 user = { 86 name = userfullname; 87 email = useremail; 88 }; 89 90 ui = { 91 default-command = "log"; 92 show-cryptographic-signatures = true; 93 conflict-marker-style = "git"; 94 # diff-formatter = "delta"; 95 editor = "codium -w"; 96 merge-editor = "vscodium"; 97 }; 98 99 revset-aliases = { 100 "closest_bookmark(to)" = "heads(::to & bookmarks())"; 101 "p(n)" = "p(@, n)"; 102 "p(r, n)" = "roots(r | ancestors(r-, n))"; 103 "tail()" = "tail(@)"; 104 "tail(h)" = "roots(trunk()..h)"; 105 }; 106 107 aliases = { 108 e = ["edit"]; 109 n = ["new"]; 110 tug = ["bookmark" "move" "--from" "closest_bookmark(@-)" "--to" "@-"]; 111 tug-here = ["bookmark" "move" "--from" "closest_bookmark(@)" "--to" "@"]; 112 solve = ["resolve" "--tool" "mergiraf"]; 113 }; 114 115 merge-tools.mergiraf = { 116 program = "mergiraf"; 117 merge-args = ["merge" "$base" "$left" "$right" "-o" "$output"]; 118 merge-conflict-exit-codes = [1]; 119 conflict-marker-style = "git"; 120 }; 121 122 git = { 123 sign-on-push = true; 124 write-change-id-header = true; 125 }; 126 127 signing = { 128 behavior = "drop"; 129 backend = "ssh"; 130 key = "~/.ssh/id_ed25519_sk_rk.pub"; 131 backends.ssh.allowed-signers = "~/.config/git/allowed_signers"; 132 }; 133 134 remotes.origin.auto-track-bookmarks = "glob:*"; 135 }; 136 }; 137 138 programs.delta = { 139 enable = true; 140 enableGitIntegration = true; 141 enableJujutsuIntegration = true; 142 }; 143 144 programs.mergiraf.enable = true; 145 }; 146}