dotfiles/mzte-nv/src/main.zig

121 lines
3.6 KiB
Zig

const std = @import("std");
const nvim = @import("nvim");
const znvim = @import("znvim");
const opts = @import("opts");
const ffi = @import("ffi.zig");
const ser = @import("ser.zig");
const c = ffi.c;
pub const version = "1.2.0";
const modules = struct {
const cmp = @import("modules/cmp.zig");
const compile = @import("modules/compile.zig");
const cpbuf = @import("modules/cpbuf.zig");
const fennel = @import("modules/fennel.zig");
const jdtls = @import("modules/jdtls.zig");
const lsp = @import("modules/lsp.zig");
const telescope = @import("modules/telescope.zig");
const tsn_actions = @import("modules/tsn_actions.zig");
const utils = @import("modules/utils.zig");
};
pub const std_options = std.Options{
.logFn = struct {
pub fn logFn(
comptime level: std.log.Level,
comptime scope: @TypeOf(.EnumLiteral),
comptime format: []const u8,
args: anytype,
) void {
var msg_buf: [512]u8 = undefined;
const msg = std.fmt.bufPrintZ(&msg_buf, format, args) catch return;
var title_buf: [512]u8 = undefined;
const title = std.fmt.bufPrintZ(
&title_buf,
"MZTE-NV ({s})",
.{@tagName(scope)},
) catch return;
const lvl = switch (level) {
.debug => nvim.LOGLVL_DBG,
.info => nvim.LOGLVL_INF,
.warn => nvim.LOGLVL_WRN,
.err => nvim.LOGLVL_ERR,
};
var dict = znvim.Dictionary{ .alloc = std.heap.c_allocator };
defer dict.deinit();
dict.push(@constCast("title"), znvim.nvimObject(@as([]u8, title))) catch return;
// noice notficitaions recognize this and show in the mini view instead of notifs
dict.push(@constCast("mzte_nv_mini"), comptime znvim.nvimObject(true)) catch return;
var e = znvim.Error{};
_ = nvim.nvim_notify(
znvim.nvimString(msg),
lvl,
dict.dict,
&e.err,
);
}
}.logFn,
.log_level = .debug,
};
const reg_key = "mzte-nv-reg";
export fn luaopen_mzte_nv(l_: ?*c.lua_State) c_int {
const l = l_.?;
ser.luaPushAny(l, .{
.reg = struct {
pub fn luaPush(lua: *c.lua_State) void {
c.lua_getfield(lua, c.LUA_REGISTRYINDEX, reg_key);
// registry uninitialized
if (c.lua_isnil(lua, -1)) {
c.lua_pop(lua, 1);
c.lua_newtable(lua);
c.lua_pushvalue(lua, -1);
c.lua_setfield(lua, c.LUA_REGISTRYINDEX, reg_key);
}
}
},
.onInit = ffi.luaFunc(lOnInit),
.cmp = modules.cmp,
.compile = modules.compile,
.cpbuf = modules.cpbuf,
.fennel = modules.fennel,
.jdtls = modules.jdtls,
.lsp = modules.lsp,
.telescope = modules.telescope,
.tsn_actions = modules.tsn_actions,
.utils = modules.utils,
});
return 1;
}
fn lOnInit(l: *c.lua_State) !c_int {
try @import("options.zig").initOptions();
c.lua_getfield(l, c.LUA_REGISTRYINDEX, reg_key);
defer c.lua_pop(l, 1);
inline for (.{ "tree_sitter_parsers", "nvim_tools" }) |fname| {
if (@field(opts, fname)) |x| {
ffi.luaPushString(l, x);
c.lua_setfield(l, -2, fname);
}
}
std.log.info(
"MZTE-NV v{s} Initialized on {s}",
.{ version, nvim.longVersion },
);
return 0;
}