Configuration for my NixOS based systems and Home Manager
1-- Leader
2vim.g.mapleader = ";"
3vim.g.maplocalleader = ","
4-- These need to happend before we load plugins
5-- Load Plugins
6require("plugins")
7-- Color Scheme
8vim.cmd.colorscheme "catppuccin"
9--vim.cmd([[colorscheme kanagawa]])
10-- Config for Nord, which I usually use
11--vim.g.nord_italic = false
12--vim.g.nord_bold = false
13--vim.opt.background = "light"
14vim.opt.background = "dark"
15
16
17-- Formatting and vim config
18vim.opt.expandtab = true
19vim.opt.tabstop = 4
20vim.opt.shiftwidth = 4
21vim.opt.termguicolors = true
22vim.opt.cursorcolumn = true
23vim.opt.cursorline = true
24vim.opt.hidden = true
25vim.opt.colorcolumn = "120"
26vim.opt.spelllang = "en_us"
27vim.opt.number = false
28vim.opt.relativenumber = false
29-- I don't like word wrapping
30vim.opt.wrap = false
31vim.opt.mouse = vim.opt.mouse - "a"
32-- TODO: revisit this
33vim.opt.foldlevelstart = 20
34vim.opt.conceallevel = 3
35-- Show whitespace as dots
36vim.opt.lcs = vim.opt.lcs + "space:·"
37vim.opt.list = true
38vim.opt.textwidth = 88
39
40-- No sexp wrapping parens
41vim.g.sexp_enable_insert_mode_mappings = 1
42
43-- LuaLine Config
44require("lualine").setup(
45 {
46 options = {
47 icons_enabled = true,
48 theme = "auto"
49 }
50 }
51)
52
53-- CTags
54vim.opt.tags = vim.opt.tags + vim.fn.expand("~/.local/tmp/ctags") + vim.fn.expand("~/repos/gerbil/src/TAGS")
55
56-- Conjure
57
58-- Gerbil Scheme
59local set_gerbil = function()
60 vim.g["conjure#client#scheme#stdio#command"] = "gxi"
61 vim.g["conjure#client#scheme#stdio#prompt_pattern"] = "%d*> "
62 vim.g["conjure#client#scheme#stdio#value_prefix_pattern"] = false
63end
64set_gerbil()
65vim.api.nvim_create_user_command("ConjureGerbil", set_gerbil, {})
66
67
68
69-- Chibi-scheme
70local set_chibi = function()
71 vim.g["conjure#client#scheme#stdio#command"] = "chibi-scheme -R"
72 vim.g["conjure#client#scheme#stdio#prompt_pattern"] = "=> $?"
73 vim.g["conjure#client#scheme#stdio#value_prefix_pattern"] = true
74end
75vim.api.nvim_create_user_command("ConjureChibi", set_chibi, {})
76-- Chicken Scheme
77local set_chicken = function()
78 vim.g["conjure#client#scheme#stdio#command"] = "csi -quiet -:c"
79 vim.g["conjure#client#scheme#stdio#prompt_pattern"] = "\n-#;%d-> "
80 vim.g["conjure#client#scheme#stdio#value_prefix_pattern"] = true
81end
82vim.api.nvim_create_user_command("ConjureChicken", set_chicken, {})
83
84-- Neoformat
85vim.g.neoformat_run_all_formatters = 1
86vim.g.neoformat_enabled_python = {"black", "docformatter", "isort"}
87vim.g.neoformat_python_black = {
88 exe = "ruff",
89 stdin = 1,
90 args = {'format', '-q', '-'}
91}
92
93-- KEYMAPS
94
95local keymap = vim.api.nvim_set_keymap
96local noremap = {noremap = true}
97local silentnoremap = {noremap = true, silent = true}
98-- Easier breaking from edit modes
99keymap("n", ";;", "<Esc>", noremap)
100keymap("v", ";;", "<Esc>", noremap)
101keymap("i", ";;", "<Esc>", noremap)
102keymap("t", "<Esc>", "<C-\\><C-n>", noremap)
103-- Tab Navigation
104keymap("n", "<leader>tn", "<cmd>tabnew<CR>", noremap)
105keymap("n", "<leader>tc", "<cmd>tabclose<CR>", noremap)
106keymap("n", "<leader><tab>", "<cmd>tabnext<CR>", noremap)
107keymap("n", "<leader>tt", "<cmd>tabnext<CR>", noremap)
108
109-- buffer navigation
110keymap("n", "<leader>h", "<C-w>h", noremap)
111keymap("n", "<leader>j", "<C-w>j", noremap)
112keymap("n", "<leader>k", "<C-w>k", noremap)
113keymap("n", "<leader>l", "<C-w>l", noremap)
114keymap("n", "<leader>bn", "<cmd>bnext<CR>", noremap)
115keymap("n", "<leader>bp", "<cmd>bprev<CR>", noremap)
116-- close buffer and put previous into current window
117keymap("n", "<leader>bq", "<cmd>bp <BAR> bd #<CR>", noremap)
118-- list buffers
119keymap("n", "<leader>bl", "<cmd>ls<cr>", noremap)
120-- splits
121keymap("n", "<leader>vs", "<cmd>vsplit<cr>", noremap)
122keymap("n", "<leader>ss", "<cmd>split<cr>", noremap)
123keymap("n", "<leader>hs", "<cmd>split<cr>", noremap)
124
125-- Toggle Line Numbers
126keymap("n", "<leader>n", "<cmd>set number! number?<CR>", silentnoremap)
127
128-- Edit this file
129keymap("n", "<leader>ec", "<cmd>e $MYVIMRC<CR>", silentnoremap)
130keymap("n", "<leader>sc", "<cmd>source $MYVIMRC<CR>", silentnoremap)
131
132-- Clear highlights
133keymap("n", "<C-c>", "<cmd>noh<CR>", silentnoremap)
134
135-- Telescope shortcuts
136keymap("n", "<leader>ff", "<cmd>Telescope find_files<CR>", silentnoremap)
137keymap("n", "<leader>fg", "<cmd>Telescope live_grep<CR>", silentnoremap)
138keymap("n", "<leader>fb", "<cmd>Telescope buffers<CR>", silentnoremap)
139keymap("n", "<C-p>", "<cmd>Telescope buffers<CR>", silentnoremap)
140keymap("n", "<leader>fh", "<cmd>Telescope help_tags<CR>", silentnoremap)
141
142-- Remap arrow keys for page navigation
143keymap("n", "<Up>", "<C-y>", silentnoremap)
144keymap("n", "<Down>", "<C-e>", silentnoremap)
145keymap("n", "<Left>", "zh", silentnoremap)
146keymap("n", "<Right>", "zl", silentnoremap)
147
148-- LSP Documentation viewer
149keymap("n", "K", "<cmd>lua vim.lsp.buf.hover()<CR>", silentnoremap)
150
151-- Autoformat!
152keymap("n", "<C-n>", "<cmd>Neoformat<cr>", silentnoremap)
153
154-- Python Specific
155vim.g.python3_host_prog = vim.fn.expand("~/.envs/nvim/bin/python3")
156
157-- Set up Treesitter
158require("nvim-treesitter.configs").setup(
159 {
160 highlight = {
161 enable = true,
162 disable = {}
163 },
164 indent = {
165 enable = false,
166 disable = {}
167 },
168 ensure_installed = {
169 "c",
170 "cpp",
171 "capnp",
172 "cmake",
173 "bash",
174 "dockerfile",
175 "diff",
176 "devicetree",
177 "dot",
178 "ebnf",
179 "elixir",
180 "erlang",
181 "clojure",
182 "fortran",
183 "go",
184 "gomod",
185 "gosum",
186 "graphql",
187 "git_config",
188 "git_rebase",
189 "gitcommit",
190 "gitignore",
191 "gleam",
192 "julia",
193 "fish",
194 "toml",
195 "haskell",
196 "hare",
197 "http",
198 "html",
199 "ini",
200 "json",
201 "jq",
202 "latex",
203 "llvm",
204 "mermaid",
205 "make",
206 "meson",
207 "ninja",
208 "yaml",
209 "python",
210 "proto",
211 "racket",
212 "rst",
213 "scala",
214 "html",
215 "tsx",
216 "rust",
217 "scheme",
218 "fennel",
219 "lua",
220 "markdown",
221 "markdown_inline",
222 "sql",
223 "thrift",
224 "typescript",
225 "verilog",
226 "vim",
227 "zig",
228 "uxntal"
229 }
230 }
231)
232
233-- Set up Which Key?
234require("which-key").setup({})
235-- ########################
236--# Require other configs #
237-- ########################
238-- LSP
239require("lsp")
240-- Completion
241require("completion")