From ce4e444b77f04409714f89b2a43fd1d337aa796a Mon Sep 17 00:00:00 2001 From: ulic-youthlic Date: Fri, 7 Mar 2025 06:20:48 +0800 Subject: [PATCH] add jujutsu in home manager module --- flake.lock | 46 ++++++++ flake.nix | 10 ++ .../configurations/Tytonidae/default.nix | 6 + home/modules/programs/default.nix | 1 + home/modules/programs/jujutsu.nix | 104 ++++++++++++++++++ overlays/modifications/default.nix | 1 + overlays/modifications/jujutsu.nix | 1 + 7 files changed, 169 insertions(+) create mode 100644 home/modules/programs/jujutsu.nix create mode 100644 overlays/modifications/jujutsu.nix diff --git a/flake.lock b/flake.lock index 7157b37..ebe16d1 100644 --- a/flake.lock +++ b/flake.lock @@ -455,6 +455,30 @@ "type": "github" } }, + "jj": { + "inputs": { + "flake-utils": [ + "flake-utils" + ], + "nixpkgs": [ + "nixpkgs" + ], + "rust-overlay": "rust-overlay_2" + }, + "locked": { + "lastModified": 1741300145, + "narHash": "sha256-OhHuNazHHgfDHOeqfITvBwRrtU246JJZYdx7NkIKoTc=", + "owner": "jj-vcs", + "repo": "jj", + "rev": "9aeb13488c10f9e4f599ee76391c2b5956ac6ae8", + "type": "github" + }, + "original": { + "owner": "jj-vcs", + "repo": "jj", + "type": "github" + } + }, "lix": { "flake": false, "locked": { @@ -749,6 +773,7 @@ "ghostty": "ghostty", "helix": "helix", "home-manager": "home-manager", + "jj": "jj", "lix-module": "lix-module", "niri-flake": "niri-flake", "nixos-cosmic": "nixos-cosmic", @@ -785,6 +810,27 @@ "type": "github" } }, + "rust-overlay_2": { + "inputs": { + "nixpkgs": [ + "jj", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1737685583, + "narHash": "sha256-p+NVABRpGi+pT+xxf9HcLcFVxG6L+vEEy+NwzB9T0f8=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "eb64cbcc8eee0fa87ebded92805280d2ec97415a", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, "sops-nix": { "inputs": { "nixpkgs": [ diff --git a/flake.nix b/flake.nix index 1e07a85..331c4f3 100644 --- a/flake.nix +++ b/flake.nix @@ -156,6 +156,16 @@ utils.follows = "flake-utils"; }; }; + + jj = { + type = "github"; + owner = "jj-vcs"; + repo = "jj"; + inputs = { + nixpkgs.follows = "nixpkgs"; + flake-utils.follows = "flake-utils"; + }; + }; }; outputs = { diff --git a/home/david/configurations/Tytonidae/default.nix b/home/david/configurations/Tytonidae/default.nix index 5fc0522..3b9fae7 100644 --- a/home/david/configurations/Tytonidae/default.nix +++ b/home/david/configurations/Tytonidae/default.nix @@ -21,6 +21,12 @@ fuzzel.enable = true; helix.enable = true; gpg.enable = true; + jujutsu = { + enable = true; + email = "ulic.youthlic@gmail.com"; + name = "ulic-youthlic"; + signKey = "C6FCBD7F49E1CBBABD6661F7FC02063F04331A95"; + }; git = { email = "ulic.youthlic@gmail.com"; name = "ulic-youthlic"; diff --git a/home/modules/programs/default.nix b/home/modules/programs/default.nix index 3b19bf9..509d445 100644 --- a/home/modules/programs/default.nix +++ b/home/modules/programs/default.nix @@ -24,5 +24,6 @@ ./swaync.nix ./helix ./waybar.nix + ./jujutsu.nix ]; } diff --git a/home/modules/programs/jujutsu.nix b/home/modules/programs/jujutsu.nix new file mode 100644 index 0000000..bab9170 --- /dev/null +++ b/home/modules/programs/jujutsu.nix @@ -0,0 +1,104 @@ +{ + 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; [ + delta + 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; + }; + core = { + fsmonitor = "watchman"; + watchman.register-snapshot-trigger = true; + }; + user = { + name = cfg.name; + email = cfg.email; + }; + ui = { + color = "auto"; + movement.edit = true; + graph.style = "square"; + show-cryptographic-signatures = true; + pager = "delta"; + diff = { + tool = "delta"; + format = "git"; + }; + 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; + }; + }; + }) + ]; +} diff --git a/overlays/modifications/default.nix b/overlays/modifications/default.nix index fb5af78..222b9b6 100644 --- a/overlays/modifications/default.nix +++ b/overlays/modifications/default.nix @@ -8,6 +8,7 @@ let ./ghostty.nix ./juicity.nix ./dae.nix + ./jujutsu.nix ]; overlay-list = map (file: import file args) overlay-files; in diff --git a/overlays/modifications/jujutsu.nix b/overlays/modifications/jujutsu.nix new file mode 100644 index 0000000..643d2b9 --- /dev/null +++ b/overlays/modifications/jujutsu.nix @@ -0,0 +1 @@ +{ inputs, ... }: inputs.jj.overlays.default