add jujutsu in home manager module

This commit is contained in:
ulic-youthlic 2025-03-07 06:20:48 +08:00
parent a5e890ada2
commit ce4e444b77
Signed by: youthlic
GPG key ID: 63E86C3C14A0D721
7 changed files with 169 additions and 0 deletions

46
flake.lock generated
View file

@ -455,6 +455,30 @@
"type": "github" "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": { "lix": {
"flake": false, "flake": false,
"locked": { "locked": {
@ -749,6 +773,7 @@
"ghostty": "ghostty", "ghostty": "ghostty",
"helix": "helix", "helix": "helix",
"home-manager": "home-manager", "home-manager": "home-manager",
"jj": "jj",
"lix-module": "lix-module", "lix-module": "lix-module",
"niri-flake": "niri-flake", "niri-flake": "niri-flake",
"nixos-cosmic": "nixos-cosmic", "nixos-cosmic": "nixos-cosmic",
@ -785,6 +810,27 @@
"type": "github" "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": { "sops-nix": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [

View file

@ -156,6 +156,16 @@
utils.follows = "flake-utils"; utils.follows = "flake-utils";
}; };
}; };
jj = {
type = "github";
owner = "jj-vcs";
repo = "jj";
inputs = {
nixpkgs.follows = "nixpkgs";
flake-utils.follows = "flake-utils";
};
};
}; };
outputs = outputs =
{ {

View file

@ -21,6 +21,12 @@
fuzzel.enable = true; fuzzel.enable = true;
helix.enable = true; helix.enable = true;
gpg.enable = true; gpg.enable = true;
jujutsu = {
enable = true;
email = "ulic.youthlic@gmail.com";
name = "ulic-youthlic";
signKey = "C6FCBD7F49E1CBBABD6661F7FC02063F04331A95";
};
git = { git = {
email = "ulic.youthlic@gmail.com"; email = "ulic.youthlic@gmail.com";
name = "ulic-youthlic"; name = "ulic-youthlic";

View file

@ -24,5 +24,6 @@
./swaync.nix ./swaync.nix
./helix ./helix
./waybar.nix ./waybar.nix
./jujutsu.nix
]; ];
} }

View file

@ -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;
};
};
})
];
}

View file

@ -8,6 +8,7 @@ let
./ghostty.nix ./ghostty.nix
./juicity.nix ./juicity.nix
./dae.nix ./dae.nix
./jujutsu.nix
]; ];
overlay-list = map (file: import file args) overlay-files; overlay-list = map (file: import file args) overlay-files;
in in

View file

@ -0,0 +1 @@
{ inputs, ... }: inputs.jj.overlays.default