diff options
Diffstat (limited to 'neovim/lua/vimrc.lua')
| -rw-r--r-- | neovim/lua/vimrc.lua | 211 |
1 files changed, 211 insertions, 0 deletions
diff --git a/neovim/lua/vimrc.lua b/neovim/lua/vimrc.lua new file mode 100644 index 0000000..fc40e80 --- /dev/null +++ b/neovim/lua/vimrc.lua @@ -0,0 +1,211 @@ +-- vim: fdm=marker +local log_warning = require 'vimrc.utils'.log_warning +local M = {} + +M.cwd_save_session = function() + vim.cmd([[ +augroup vimrc_save_session + au! + au VimLeave * mksession! ]] .. os.getenv("PWD") .. [[/Session.vim +augroup end + ]]) +end + +function M.setup_treesitter() + if vim.o.loadplugins == false then + return + end + + assert(vim.fn.exists(":TSInstall") == 0, "TreeSitter is already configured.") + + -- vim.cmd([[packadd nvim-treesitter]]) + require 'nvim-treesitter.configs'.setup { + highlight = { + enable = true, + -- Setting this to true will run `:h syntax` and tree-sitter at the same time. + -- Set this to `true` if you depend on 'syntax' being enabled (like for indentation). + -- Using this option may slow down your editor, and you may see some duplicate highlights. + -- Instead of true it can also be a list of languages + }, + } +end + +function M.setup_rest_nvim() + require("rest-nvim").setup({ + result_split_horizontal = true, + skip_ssl_verification = false, + highlight = { enabled = true, timeout = 150 }, + jump_to_request = false, + }) + + local map = vim.api.nvim_set_keymap + map( + "n", + "<leader>tt", + "<Plug>RestNvim", + { silent = true } + ) + map( + "n", + "<leader>tp", + "<Plug>RestNvimPreview", + { silent = true } + ) +end + +local jq_functions = {} +function M.setup_jq_function() + jq_functions.filter_jq = function(path, first, last) + P(path) + local buf = vim.api.nvim_get_current_buf() + first, last = tonumber(first), tonumber(last) + first = first - 1 + local json_string = table.concat(vim.api.nvim_buf_get_lines(buf, first, last, true)) + local tmp = os.tmpname() + local f = io.open(tmp, "w") + if f then + f:write(json_string) + f:close() + else + return false + end + local cmd = { + "/bin/sh", + "-c", + [[cat ]] .. tmp .. [[ | jq ']] .. path .. [[']] + } + require('firvish.job_control').start_job({ + cmd = cmd, + filetype = "json", + title = "jq", + listed = true, + output_qf = false, + is_background_job = false, + }) + end + _G.jq_functions = jq_functions + vim.cmd [[command! -nargs=* -range FJq :lua _G.jq_functions.filter_jq('<args>', "<line1>", "<line2>")]] +end + +local build_functions = {} +function M.setup_build_function() + build_functions.rebuild = function() + local cmd = { "rebuild" } + require('firvish.job_control').start_job({ + cmd = cmd, + filetype = "job-output", + title = "rebuild", + listed = true, + output_qf = true, + is_background_job = true, + }) + end + _G.build_functions = build_functions + vim.cmd [[command! Rebuild :lua _G.build_functions.rebuild()]] + + build_functions.azure_yaml = function(file) + local cwd = os.getenv('PWD') + local auth = os.getenv('AZURE_DEVOPS_AUTH') + local ado_org = os.getenv('AZURE_DEVOPS_ORG') + local ado_proj = os.getenv('AZURE_DEVOPS_PROJECT') + local pipeline = os.getenv('AZURE_YAML_DEFINITION_ID') + local branch = os.getenv('AZURE_YAML_BRANCH') + + local url = [[https://dev.azure.com/]] .. ado_org .. [[/]] .. ado_proj .. [[/_apis/pipelines/]] .. pipeline .. [[/preview?api-version=7.1-preview.1]] + local auth_header = [[Authorization: Basic ]] .. auth + local yaml_file = cwd .. "/" .. file + + local shell_script = string.format( +[[yaml_string=" +$(cat ${PWD}/${AZURE_YAML_DEBUG_SNIPPET}) +$(cat %s) +" +yaml_string="$(echo "$yaml_string" | yq '... style="single"' - | sed -re /\s*\#.*$/d)" +curl -s -X POST '%s' -H 'Content-Type: application/json' -H '%s' --data-binary @- << THEEND | jq '.finalYaml // .' | yq '... style="double"' - +{ + "previewRun":true, + "templateParameters": {}, + "resources": { + "repositories": { + "self": { + "refName": "refs/heads/%s" + } + } + }, + "yamlOverride":"$yaml_string" +} +THEEND]], + yaml_file, url, auth_header, branch, branch + ) + local cmd = { + "/bin/bash", "-c", shell_script + } + require('firvish.job_control').start_job({ + cmd = cmd, + filetype = "yaml", + title = "azureyaml", + use_last_buffer = false, + listed = true, + output_qf = true, + is_background_job = false, + cwd = cwd + }) + end + vim.cmd [[command! -nargs=1 -complete=file AzureYaml :lua _G.build_functions.azure_yaml("<args>")]] +end + +-- {{{ global lua debugging +_G.P = function(arg) + print(vim.inspect(arg)) +end + +M.reload_package_complete = function(_, _, _) + -- arg_lead, cmd_line, cursor_pos + -- TODO: implement completion based on loaded packages + return 'hi' +end + +M.reload_package = function(name) + P([[name=]] .. name) + if package.loaded[name] == nil then + log_warning("Package not loaded.", "[vimrc]") + return + end + package.loaded[name] = nil + return require(name) +end + +vim.cmd( + [[command! -complete=custom,reloadpackage#complete -nargs=1 LuaReload :lua require('vimrc').reload_package(<q-args>)]] +) + +M.activate_reload_on_write = function(name) + vim.cmd([[augroup package_reload_]] .. name) + vim.cmd([[au!]]) + vim.cmd([[au BufWritePost <buffer> ]] + .. string.format([[:lua require('vimrc').reload_package('%s')]], name)) + vim.cmd([[augroup END]]) +end + +vim.cmd( + [[command! -complete=custom,reloadpackage#complete -nargs=1 ActivateReload :lua require('vimrc').activate_reload_on_write(<q-args>)]] +) + +-- }}} +-- {{{ syntax tools +M.print_synstack_at = function(line, col) + local syn = vim.fn.synstack(line, col) + for _, id in pairs(syn) do + P(vim.fn.synIDattr(id, 'name')) + end +end + +vim.cmd( + string.format("command! SyntaxInspect :lua require('vimrc').print_synstack_at(%s, %s)", + vim.fn.line("."), + vim.fn.col(".") + ) +) +-- }}} + +return M |
