_inputs: { config, pkgs, ... }: { home-manager.sharedModules = [ { programs.git = { enable = true; package = pkgs.gitAndTools.gitFull; userEmail = "minijackson@riseup.net"; userName = "Minijackson"; attributes = [ "*.cc diff=cpp" "*.cpp diff=cpp" "*.css diff=css" "*.ex diff=elixir" "*.exs diff=elixir" "*.go diff=golang" "*.html diff=html" "*.java diff=java" "*.md diff=markdown" "*.php diff=php" "*.pl diff=perl" "*.py diff=python" "*.rs diff=rust" "*.tex diff=latex" ]; iniContent = let deltaCommand = "${pkgs.gitAndTools.delta}/bin/delta"; in { init.defaultBranch = "main"; column.ui = "auto"; branch.sort = "-committerdate"; tag.sort = "version:refname"; color = { branch = { current = "magenta"; local = "green"; remote = "red"; }; status = { branch = "magenta"; localBranch = "magenta"; remoteBranch = "red"; }; }; commit.verbose = true; core = { whitespace = "trailing-space,space-before-tab"; pager = deltaCommand; interactive.diffFilter = "${deltaCommand} --color-only"; untrackedCache = true; }; diff = { algorithm = "histogram"; colormoved = "default"; colorMovedWS = "allow-indentation-change"; mnemonicPrefix = true; }; fetch = { all = true; prune = true; pruneTags = true; }; pull = { ff = "only"; rebase = true; }; push = { default = "simple"; autoSetupRemote = true; }; help.autocorrect = "prompt"; rebase = { autoSquash = true; autoStash = true; updateRefs = true; }; rerere = { enable = true; autoUpdate = true; }; merge = { conflictStyle = "zdiff3"; tool = "nvimdiff"; }; "mergetool \"nvimdiff\"" = { cmd = "nvim -d \"$LOCAL\" \"$MERGED\" \"$REMOTE\""; }; delta = with config.theme.colors; { line-numbers = true; navigate = true; whitespace-error-style = "reverse green"; minus-style = "normal red"; minus-non-emph-style = "normal red"; minus-emph-style = "normal brightred"; minus-empty-line-marker-style = "normal red"; plus-style = "reverse green"; plus-non-emph-style = "reverse green"; plus-emph-style = "reverse brightgreen"; plus-empty-line-marker-style = "reverse green"; line-numbers-minus-style = "brightred"; line-numbers-zero-style = "brightblack"; line-numbers-plus-style = "brightgreen"; file-style = "bright${dominantName}"; line-numbers-left-style = dominantName; line-numbers-right-style = dominantName; }; }; }; } ]; users.extraUsers.minijackson.packages = [ pkgs.watchman ]; # TODO: move common to NixOS' programs.git.config home-manager.users.minijackson.programs = { git.signing = { signByDefault = true; key = "minijackson@riseup.net"; }; jujutsu = { enable = true; package = pkgs.unstable.jujutsu; settings = { core.fsmonitor = "watchman"; git.private-commits = "description(glob:'wip:*') | description(glob:'private:*')"; merge-tools = { difft.diff-args = [ "--color=always" "--sort-paths" "$left" "$right" ]; nvim = { diff-args = [ "-d" ]; diff-invocation-mode = "file-by-file"; merge-args = [ "-f" "-d" "$output" "-M" "$left" "$base" "$right" "-c" "wincmd J" "-c" "set modifiable" "-c" "set write" ]; merge-tool-edits-conflict-markers = true; }; }; ui = { default-command = [ "log" ]; # TODO: setup hunk.nvim as diff-editor # diff-editor = "nvim"; diff.tool = "difft"; merge-editor = "nvim"; }; signing = { sign-all = true; backend = "gpg"; key = "minijackson@riseup.net"; }; user = { email = "minijackson@riseup.net"; name = "Minijackson"; }; }; }; }; }