-- Filetypes and compatibility vim.opt.compatible = false vim.cmd("filetype on") vim.cmd("filetype plugin on") vim.cmd("syntax on") -- Spell vim.opt.spell = true vim.opt.spl = "en_us,de_de" vim.opt.sps = "fast,timeout:100" -- Editor configuration vim.opt.number = true vim.opt.tabstop = 4 vim.opt.shiftwidth = 4 vim.opt.expandtab = true vim.opt.splitright = true vim.opt.splitbelow = true vim.opt.relativenumber = false vim.g.mapleader = "," vim.cmd("set clipboard+=unnamedplus") vim.cmd("autocmd! CursorHold,CursorHoldI *.md write") vim.cmd("set autoread") -- GUI vim.opt.cursorline = true vim.opt.hlsearch = true vim.opt.encoding = "UTF-8" vim.g.tex_flavor = "latex" vim.opt.conceallevel = 2 vim.opt.showmatch = true -- set color scheme vim.opt.termguicolors = true vim.cmd("colorscheme slate") vim.keymap.set("n", "", ":colo tokyonight-day") vim.keymap.set("n", "", ":colo tokyonight-night") -- vim.opt.mouse = "" -- set copy mode vim.keymap.set("n", "ll", ":set nonumber") vim.keymap.set("n", "lm", ":set number") -- switch mode vim.keymap.set("n", "na", ":set norelativenumber") vim.keymap.set("n", "nr", ":set relativenumber") -- Nix mode local nix_interpreter_buffer = -1 local nix_interpreter_window = -1 -- @name run_nix_interpreter -- @param -- @short Run nix and output to a buffer on the right local function run_nix_interpreter() local original_win = vim.api.nvim_get_current_win() vim.cmd("vsplit") nix_interpreter_buffer = vim.api.nvim_create_buf(false, true) vim.api.nvim_win_set_buf(0, nix_interpreter_buffer) nix_interpreter_window = vim.api.nvim_get_current_win() vim.api.nvim_set_current_win(original_win) end -- @name update_nix_interpreter -- @param -- @short Run nix enterpreter on that file. local function update_nix_interpreter() local filename = vim.api.nvim_buf_get_name(0) if filename == "" then vim.api.nvim_buf_set_lines(nix_interpreter_buffer, 0, -1, false, { "Error: Current buffer has no file name.", }) return end local cmd = { "nix-instantiate", "--eval", "--strict", filename } local output = vim.fn.systemlist(cmd) if vim.v.shell_error ~= 0 then table.insert(output, 1, "Error running nix-instantiate:") end vim.api.nvim_buf_set_lines(nix_interpreter_buffer, 0, -1, false, output) end -- @name close_nix_interpreter -- @param -- @short Closes the window and buffer of the interpreter local function close_nix_interpreter() vim.api.nvim_buf_delete(nix_interpreter_buffer, { unload = true }) vim.api.nvim_win_close(nix_interpreter_window, true) end vim.api.nvim_create_autocmd({ "BufEnter" }, { pattern = { "*.nix" }, callback = run_nix_interpreter, }) vim.api.nvim_create_autocmd({ "BufWritePost" }, { pattern = { "*.nix" }, callback = update_nix_interpreter, }) vim.api.nvim_create_autocmd({ "BufLeave" }, { pattern = { "*.nix" }, callback = close_nix_interpreter, })