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-- Config for Nord, which I usually use
8-- vim.g.nord_italic = false
9-- vim.g.nord_bold = false
10local known_hosts = {
11 ["aleister.packetlost.dev"] = "light",
12 ["aleister.local"] = "light",
13 ["accelerator"] = "light"
14}
15local background = known_hosts[vim.loop.os_gethostname()]
16if not background then
17 background = "dark"
18end
19vim.opt.background = background
20--vim.opt.background = "dark"
21
22-- Formatting and vim config
23vim.opt.expandtab = true
24vim.opt.tabstop = 4
25vim.opt.shiftwidth = 4
26--vim.opt.termguicolors = true
27vim.opt.cursorcolumn = true
28vim.opt.cursorline = true
29vim.opt.hidden = true
30vim.opt.colorcolumn = "120"
31vim.opt.spelllang = "en_us"
32vim.opt.number = false
33vim.opt.relativenumber = false
34-- I don't like word wrapping
35vim.opt.wrap = false
36-- Show whitespace as dots
37vim.opt.lcs = vim.opt.lcs + "space:·"
38vim.opt.list = true
39vim.opt.textwidth = 88
40vim.cmd [[ colorscheme alabaster ]]
41
42-- Force OSC-52
43vim.g.clipboard = {
44 name = 'OSC 52',
45 copy = {
46 ['+'] = require('vim.ui.clipboard.osc52').copy('+'),
47 ['*'] = require('vim.ui.clipboard.osc52').copy('*'),
48 },
49 paste = {
50 ['+'] = require('vim.ui.clipboard.osc52').paste('+'),
51 ['*'] = require('vim.ui.clipboard.osc52').paste('*'),
52 },
53}
54
55-- CTags
56vim.opt.tags = vim.opt.tags + vim.fn.expand("~/.local/tmp/ctags") +
57 vim.fn.expand("~/repos/gerbil/src/TAGS")
58
59-- Conjure
60
61-- Gerbil Scheme
62local set_gerbil = function()
63 vim.g["conjure#client#scheme#stdio#command"] = "gxi"
64 vim.g["conjure#client#scheme#stdio#prompt_pattern"] = "%d*> "
65 vim.g["conjure#client#scheme#stdio#value_prefix_pattern"] = false
66end
67set_gerbil()
68vim.api.nvim_create_user_command("ConjureGerbil", set_gerbil, {})
69
70-- Chibi-scheme
71local set_chibi = function()
72 vim.g["conjure#client#scheme#stdio#command"] = "chibi-scheme -R"
73 vim.g["conjure#client#scheme#stdio#prompt_pattern"] = "=> $?"
74 vim.g["conjure#client#scheme#stdio#value_prefix_pattern"] = true
75end
76vim.api.nvim_create_user_command("ConjureChibi", set_chibi, {})
77-- Chicken Scheme
78local set_chicken = function()
79 vim.g["conjure#client#scheme#stdio#command"] = "csi -quiet -:c"
80 vim.g["conjure#client#scheme#stdio#prompt_pattern"] = "\n-#;%d-> "
81 vim.g["conjure#client#scheme#stdio#value_prefix_pattern"] = true
82end
83vim.api.nvim_create_user_command("ConjureChicken", set_chicken, {})
84
85-- KEYMAPS
86local keymap = vim.keymap.set
87local noremap = { noremap = true }
88local silentnoremap = { noremap = true, silent = true }
89--Toggle background
90keymap("n", "<leader>bg", function() if vim.o.background == "light" then vim.o.background = "dark" else vim.o.background = "light" end end, noremap)
91-- Easier breaking from edit modes
92keymap("n", ";;", "<Esc>", noremap)
93keymap("v", ";;", "<Esc>", noremap)
94keymap("i", ";;", "<Esc>", noremap)
95keymap("t", "<Esc>", "<C-\\><C-n>", noremap)
96-- Tab Navigation
97keymap("n", "<leader>tn", "<cmd>tabnew<CR>", noremap)
98keymap("n", "<leader>tc", "<cmd>tabclose<CR>", noremap)
99keymap("n", "<leader><tab>", "<cmd>tabnext<CR>", noremap)
100keymap("n", "<leader>tt", "<cmd>tabnext<CR>", noremap)
101
102-- buffer navigation
103keymap("n", "<leader>h", "<C-w>h", noremap)
104keymap("n", "<leader>j", "<C-w>j", noremap)
105keymap("n", "<leader>k", "<C-w>k", noremap)
106keymap("n", "<leader>l", "<C-w>l", noremap)
107keymap("n", "<leader>bn", "<cmd>bnext<CR>", noremap)
108keymap("n", "<leader>bp", "<cmd>bprev<CR>", noremap)
109-- close buffer and put previous into current window
110keymap("n", "<leader>bq", "<cmd>bp <BAR> bd #<CR>", noremap)
111-- list buffers
112keymap("n", "<leader>bl", "<cmd>ls<cr>", noremap)
113-- splits
114keymap("n", "<leader>vs", "<cmd>vsplit<cr>", noremap)
115keymap("n", "<leader>ss", "<cmd>split<cr>", noremap)
116keymap("n", "<leader>hs", "<cmd>split<cr>", noremap)
117
118-- Toggle Line Numbers
119keymap("n", "<leader>n", "<cmd>set number! number?<CR>", silentnoremap)
120keymap("n", "<leader>N", "<cmd>set relativenumber! relativenumber?<CR>", silentnoremap)
121
122-- Edit this file
123keymap("n", "<leader>ec", "<cmd>e $MYVIMRC<CR>", silentnoremap)
124keymap("n", "<leader>sc", "<cmd>source $MYVIMRC<CR>", silentnoremap)
125
126-- Clear highlights
127keymap("n", "<C-c>", "<cmd>noh<CR>", silentnoremap)
128
129-- Telescope shortcuts
130keymap("n", "<leader>ff", "<cmd>Telescope find_files<CR>", silentnoremap)
131keymap("n", "<leader>fg", "<cmd>Telescope live_grep<CR>", silentnoremap)
132keymap("n", "<leader>fb", "<cmd>Telescope buffers<CR>", silentnoremap)
133keymap("n", "<C-p>", "<cmd>Telescope buffers<CR>", silentnoremap)
134keymap("n", "<leader>fh", "<cmd>Telescope help_tags<CR>", silentnoremap)
135
136-- Remap arrow keys for page navigation
137keymap("n", "<Up>", "<C-y>", silentnoremap)
138keymap("n", "<Down>", "<C-e>", silentnoremap)
139keymap("n", "<Left>", "zh", silentnoremap)
140keymap("n", "<Right>", "zl", silentnoremap)
141
142-- Telescope
143keymap({ "n", "i", "v" }, "<C-t>", "<cmd>Telescope<CR>", silentnoremap)
144
145-- LSP Documentation viewer
146keymap("n", "K", "<cmd>lua vim.lsp.buf.hover()<CR>", silentnoremap)
147
148-- Lf
149keymap("n", "<leader>L", "<cmd>Lf<CR>", silentnoremap)
150
151-- Neogit
152keymap("n", "<leader>g", "<cmd>Neogit<CR>", silentnoremap)
153
154-- Autoformat!
155vim.api.nvim_create_user_command("Format", function(args)
156 local range = nil
157 if args.count ~= -1 then
158 local end_line = vim.api.nvim_buf_get_lines(0, args.line2 - 1, args.line2, true)[1]
159 range = {
160 start = { args.line1, 0 },
161 ["end"] = { args.line2, end_line:len() },
162 }
163 end
164 require("conform").format({ async = true, lsp_format = "fallback", range = range })
165end, { range = true })
166keymap("n", "<C-n>", "<cmd>Format<CR>", silentnoremap)
167
168-- Python Specific
169vim.g.python3_host_prog = vim.fn.expand("~/.envs/nvim/bin/python3")
170
171-- ########################
172-- # Require other configs #
173-- ########################
174-- LSP
175require("lsp")
176
177if vim.uv.fs_stat(vim.fn.stdpath("config") .. "/lua/local.lua") then
178 require("local")
179end