main
1{den, ...}: {
2 den.aspects.dev.jujutsu = {
3 includes =
4 den.lib.policy.when
5 ({host, ...}: host.hasAspect den.aspects.desktop.gnupg)
6 [den.aspects.dev.jujutsu.sign];
7
8 provides.to-users = {
9 hjem = {
10 user,
11 pkgs,
12 lib,
13 ...
14 }: let
15 # git.ignore-filters support, from https://github.com/jj-vcs/jj/pull/9635
16 # TODO: re-check this patch on every nixpkgs bump, drop it once upstreamed.
17 jujutsu = pkgs.jujutsu.overrideAttrs {
18 patches = [./jujutsu-lfs.patch];
19 };
20 in {
21 packages = [
22 jujutsu
23 pkgs.jjui
24 pkgs.oyui
25 ];
26
27 xdg.config.files."jj/config.toml" = {
28 generator = (pkgs.formats.toml {}).generate "jj-config.toml";
29 value = {
30 user = {
31 name = user.identity.displayName;
32 email = user.identity.email;
33 };
34 ui = {
35 diff-formatter =
36 [(lib.getExe pkgs.difftastic)]
37 ++ (lib.cli.toCommandLineGNU {} {
38 color = "always";
39 sort-paths = true;
40 width = "$width";
41 })
42 ++ ["$left" "$right"];
43
44 diff-editor = [(lib.getExe pkgs.oyui) "diff" "$left" "$right"];
45 diff-instructions = false;
46 };
47 merge-tools.oyui = {
48 program = lib.getExe pkgs.oyui;
49 edit-args = ["diff" "$left" "$right"];
50 };
51 };
52 };
53
54 xdg.config.files."oyui/config.rn" = {
55 generator = cfg: ''
56 pub fn config() {
57 // Theme
58 ${lib.concatMapAttrsStringSep " \n"
59 (key: value:
60 if (key == "name")
61 then "theme::set(\"${value}\");"
62 else "theme::${key}::set(\"${value}\");")
63 cfg.theme or {}}
64
65 // Keybinds
66 ${lib.concatMapAttrsStringSep " \n"
67 (key: value: "keybind(\"${key}\", || ${value});")
68 cfg.keybinds.global or {}}
69 on_mode("file", || {
70 ${lib.concatMapAttrsStringSep " \n"
71 (key: value: "keybind(\"${key}\", || ${value});")
72 cfg.keybinds.file or {}}
73 });
74 on_mode("tree", || {
75 ${lib.concatMapAttrsStringSep " \n"
76 (key: value: "keybind(\"${key}\", || ${value});")
77 cfg.keybinds.tree or {}}
78 });
79 }
80 '';
81 value = {
82 };
83 };
84 };
85 };
86 };
87
88 den.aspects.dev.jujutsu.sign = {
89 hjem = {
90 xdg.config.files."jj/config.toml".value = {
91 signing = {
92 behavior = "drop";
93 backend = "gpg";
94 };
95 git = {
96 sign-on-push = true;
97 };
98 };
99
100 xdg.config.files."oyui/config.rn".value = {
101 theme.name = "catppuccin_mocha";
102 };
103 };
104 };
105}