summaryrefslogtreecommitdiffstats
path: root/modules/plugins/git/octo-nvim/octo-nvim.nix
blob: 22f8798493e655d8451e32b48ef1b1e387375cbe (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
{
  config,
  lib,
  ...
}: let
  inherit (lib.options) mkEnableOption mkOption literalExpression;
  inherit (lib.types) enum;
  inherit (lib.nvim.types) mkPluginSetupOption;
  inherit (config.vim.lib) mkMappingOption;

  selectedPicker =
    if
      config.vim.utility.snacks-nvim.enable
      && (config.vim.utility.snacks-nvim.setupOpts.picker.enabled or false)
    then "snacks"
    else if config.vim.telescope.enable
    then "telescope"
    else if config.vim.fzf-lua.enable
    then "fzf-lua"
    else "default";
in {
  options.vim.git.octo-nvim = {
    enable = mkEnableOption "Edit and review GitHub issues, pull requests, and discussions from the comfort of your favorite editor. [octo-nvim]";
    setupOpts = mkPluginSetupOption "octo-nvim" {
      picker = mkOption {
        type = enum ["telescope" "fzf-lua" "snacks" "default"];
        default = selectedPicker;
        defaultText = literalExpression ''
          if config.vim.utility.snacks-nvim.enable
            && (config.vim.utility.snacks-nvim.setupOpts.picker.enabled or false)
          then "snacks"
          else if config.vim.telescope.enable
          then "telescope"
          else if config.vim.fzf-lua.enable
          then "fzf-lua"
          else "default"
        '';
        description = ''
          Picker backend used by octo.nvim

          Defaults to an enabled picker module, preferring Snacks, then Telescope,
          then fzf-lua. Falls back to Neovim's built-in `vim.ui.select`.
        '';
      };
    };
    mappings = {
      issueList = mkMappingOption "List GitHub Issues" "<leader>oi";
      prList = mkMappingOption "List GitHub Pull Requests" "<leader>op";
      discussionList = mkMappingOption "List GitHub Discussions" "<leader>od";
      notificationList = mkMappingOption "List GitHub Notifications" "<leader>ol";
      search = mkMappingOption "Search GitHub" "<leader>os";
    };
  };
}