summaryrefslogtreecommitdiff
path: root/vim/.config/nvim/init.lua
blob: 9b96fd37c2de1cf54054be3df294eb772f9fddcd (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
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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
--
-- nvim init script by grace
--

-- Get hostname
local handle = io.popen("hostname")
local hostname = handle:read("*a") or ""
handle:close()
hostname = hostname:gsub("%s+", "")
vim.g.hostname = hostname
if string.match(hostname, "cs.purdue.edu") then
  vim.g.is_purdue = true
else
  vim.g.is_purdue = false
end

-- add required things to path
if vim.g.is_purdue then
  vim.env.PATH = vim.env.PATH .. ':' .. os.getenv("HOME") .. '/clangd/bin:/u/riker/u98/cs240/bin'
end

require("plugins")
require("native-lsp")
require("diagnostics")
require("remap")


if vim.g.is_purdue then
  -- require("westwood-lint")
end
require("standard-lint")

vim.cmd("source ~/.vim/settings.vim")

vim.api.nvim_create_autocmd("BufWritePre", {
  pattern = "*",
  callback = function()
    local save = vim.fn.winsaveview()
    vim.cmd([[%s/\s\+$//e]])
    vim.fn.winrestview(save)
  end,
})


-- File IO can be slow and this might help idk
if vim.g.is_purdue then
  vim.cmd("set noundofile") -- i forgor how to do this in lua so i didnt
end

--
-- vim.opt.spell = true
-- vim.opt.spelllang = "en_us"
--

vim.api.nvim_create_autocmd("FileType", {
  pattern = "markdown",
  callback = function()
    vim.opt_local.textwidth = 80
    vim.opt_local.formatoptions = "atcqjnl"
    vim.opt_local.wrap = true
    vim.opt_local.linebreak = true

    -- Show column guide
    vim.opt_local.colorcolumn = "80"
  end,
})

-- Typst configuration
vim.api.nvim_create_autocmd("FileType", {
  pattern = "typst",
  callback = function()
    -- Line wrapping settings
    vim.opt_local.textwidth = 80
    vim.opt_local.formatoptions = "tcqjnl"
    vim.opt_local.wrap = true
    vim.opt_local.linebreak = true
    -- Show column guide
    vim.opt_local.colorcolumn = "80"

    -- Toggle 'a' in formatoptions
    vim.keymap.set("n", "<leader>a", function()
      local fo = vim.opt_local.formatoptions:get()
      if fo.a then
        vim.opt_local.formatoptions:remove("a")
        print("Auto-formatting disabled")
      else
        vim.opt_local.formatoptions:append("a")
        print("Auto-formatting enabled")
      end
    end, { buffer = true, desc = "Toggle auto-formatting" })
  end,
})
-- Setup formatting on LSP attach
-- vim.api.nvim_create_autocmd("LspAttach", {
--   callback = function(args)
--     local client = vim.lsp.get_client_by_id(args.data.client_id)
--
--     if client and client.supports_method("textDocument/formatting") then
--       vim.api.nvim_create_autocmd({ "TextChanged", "TextChangedI" }, {
--         buffer = args.buf,
--         callback = function()
--           vim.lsp.buf.format({
--             async = true,
--             bufnr = args.buf,
--           })
--         end,
--       })
--     end
--   end,
-- })

vim.api.nvim_create_autocmd("TermOpen", {
  pattern = "*",
  callback = function()
    vim.opt_local.spell = false
  end,
})

vim.o.clipboard = "unnamedplus"

vim.g.clipboard = {
  name = "OSC 52",
  copy = {
    ["+"] = require("vim.ui.clipboard.osc52").copy("+"),
    ["*"] = require("vim.ui.clipboard.osc52").copy("*"),
  },
  paste = {
    ["+"] = require("vim.ui.clipboard.osc52").paste("+"),
    ["*"] = require("vim.ui.clipboard.osc52").paste("*"),
  },
}
-- stupid hacky workaround to make it so i can paste from tmux with OSC52
-- https://github.com/neovim/neovim/discussions/29350#discussioncomment-10299517
-- tracking issue about tmux behavior: https://github.com/tmux/tmux/issues/4275
if vim.env.TMUX ~= nil then
  local copy = { 'tmux', 'load-buffer', '-w', '-' }
  local paste = { 'bash', '-c', 'tmux refresh-client -l && sleep 0.05 && tmux save-buffer -' }
  vim.g.clipboard = {
    name = 'tmux',
    copy = {
      ['+'] = copy,
      ['*'] = copy,
    },
    paste = {
      ['+'] = paste,
      ['*'] = paste,
    },
    cache_enabled = 0,
  }
end



-- https://simondalvai.org/blog/godot-neovim/
require("godot")




if not vim.g.is_purdue then
  -- Enable experimental UI in neovim-nightly
  require('vim._extui').enable({})
end