Repository navigation
Expand file tree
/
Copy pathconfig.lua
More file actions
120 lines (111 loc) · 3.19 KB
/
Copy pathconfig.lua
File metadata and controls
120 lines (111 loc) · 3.19 KB
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
-- Default and user-provided settings for opencode.nvim
--- @class OpencodeConfigModule
--- @field defaults OpencodeConfig
--- @field values OpencodeConfig
--- @field setup fun(opts?: OpencodeConfig): nil
--- @field get fun(key: nil): OpencodeConfig
--- @field get fun(key: "prefered_picker"): 'mini.pick' | 'telescope' | 'fzf' | 'snacks' | nil
--- @field get fun(key: "default_global_keymaps"): boolean
--- @field get fun(key: "keymap"): OpencodeKeymap
--- @field get fun(key: "ui"): OpencodeUIConfig
--- @field get fun(key: "providers"): OpencodeProviders
--- @field get fun(key: "context"): OpencodeContextConfig
--- @field get fun(key: "debug"): OpencodeDebugConfig
local M = {} ---@type OpencodeConfigModule
-- Default configuration
---@type OpencodeConfig
M.defaults = {
prefered_picker = nil,
default_global_keymaps = true,
default_mode = 'build',
config_file_path = nil,
keymap = {
global = {
toggle = '<leader>og',
open_input = '<leader>oi',
open_input_new_session = '<leader>oI',
open_output = '<leader>oo',
toggle_focus = '<leader>ot',
close = '<leader>oq',
select_session = '<leader>os',
configure_provider = '<leader>op',
diff_open = '<leader>od',
diff_next = '<leader>o]',
diff_prev = '<leader>o[',
diff_close = '<leader>oc',
diff_revert_all_last_prompt = '<leader>ora',
diff_revert_this_last_prompt = '<leader>ort',
diff_revert_all = '<leader>orA',
diff_revert_this = '<leader>orT',
open_configuration_file = '<leader>oC',
swap_position = '<leader>ox', -- Swap Opencode pane left/right
},
window = {
submit = '<cr>',
submit_insert = '<cr>',
close = '<esc>',
stop = '<C-c>',
next_message = ']]',
prev_message = '[[',
mention_file = '@',
slash_commands = '/',
toggle_pane = '<tab>',
prev_prompt_history = '<up>',
next_prompt_history = '<down>',
switch_mode = '<M-m>',
focus_input = '<C-i>',
debug_message = '<leader>oD',
debug_output = '<leader>oO',
},
},
ui = {
position = 'right',
input_position = 'bottom',
window_width = 0.40,
input_height = 0.15,
display_model = true,
display_context_size = true,
display_cost = true,
window_highlight = 'Normal:OpencodeBackground,FloatBorder:OpencodeBorder',
output = {
tools = {
show_output = true,
},
},
},
context = {
cursor_data = false,
diagnostics = {
info = false,
warning = true,
error = true,
},
},
debug = {
enabled = false,
},
}
M.values = vim.deepcopy(M.defaults)
--- Setup function to initialize or update the configuration
--- @param opts OpencodeConfig
function M.setup(opts)
opts = opts or {}
if opts.default_global_keymaps == false then
M.values.keymap.global = {}
end
-- Merge user options with defaults (deep merge for nested tables)
for k, v in pairs(opts) do
if type(v) == 'table' and type(M.values[k]) == 'table' then
M.values[k] = vim.tbl_deep_extend('force', M.values[k], v)
else
M.values[k] = v
end
end
end
function M.get(key)
if key then
return M.values[key]
end
return M.values
end
return M