{ pkgs, config, lib, ... }: let cfg = config.youthlic.programs.jujutsu; in { options = { youthlic.programs.jujutsu = { enable = lib.mkEnableOption "jujutsu"; email = lib.mkOption { type = lib.types.str; description = '' jujutsu email ''; }; signKey = lib.mkOption { type = lib.types.addCheck (lib.types.nullOr lib.types.str) ( x: (x == null || config.youthlic.programs.gpg.enable) ); default = null; description = '' key fingerprint for sign commit ''; }; name = lib.mkOption { type = lib.types.str; example = ''youthlic''; description = '' jujutsu name ''; }; }; }; config = lib.mkMerge [ (lib.mkIf cfg.enable { home.packages = with pkgs; [ watchman ]; programs.jujutsu = { enable = true; settings = { "$schema" = "https://jj-vcs.github.io/jj/latest/config-schema.json"; snapshot = { auto-track = "true"; max-new-file-size = 0; }; fsmonitor = { backend = "watchman"; watchman.register-snapshot-trigger = true; }; user = { name = cfg.name; email = cfg.email; }; ui = { color = "auto"; movement.edit = true; graph.style = "curved"; show-cryptographic-signatures = true; pager = "delta"; diff-editor = ":builtin"; diff = { color-words = { conflict = "pair"; }; }; default-command = "log"; }; templates = { log = '' builtin_log_compact_full_description ''; }; template-aliases = { "format_short_signature(signature)" = "signature"; }; revset-aliases = { "immutable_heads()" = '' builtin_immutable_heads() | (trunk().. & ~mine()) ''; }; git = { abandon-unreachable-commits = false; }; }; }; }) (lib.mkIf (cfg.enable && (cfg.signKey != null)) { programs.jujutsu.settings = { git = { sign-on-push = true; }; signing = { behavior = "drop"; backend = "gpg"; key = cfg.signKey; }; }; }) ]; }