From f4d1ad2c1e38ef06c9334ae5659081d2e47902d0 Mon Sep 17 00:00:00 2001 From: caley <195605706+cqley@users.noreply.github.com> Date: Fri, 7 Aug 2026 01:53:46 +0200 Subject: idk bro --- nixos/modules/system/editor.nix | 147 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 147 insertions(+) create mode 100644 nixos/modules/system/editor.nix (limited to 'nixos/modules/system') diff --git a/nixos/modules/system/editor.nix b/nixos/modules/system/editor.nix new file mode 100644 index 0000000..293f44b --- /dev/null +++ b/nixos/modules/system/editor.nix @@ -0,0 +1,147 @@ +{ config, pkgs, ... }: + +{ + programs.neovim = { + enable = true; + defaultEditor = true; + viAlias = true; + vimAlias = true; + withRuby = false; + withPython3 = false; + + extraPackages = with pkgs; [ + ripgrep + ]; + + plugins = with pkgs.vimPlugins; [ + lualine-nvim + telescope-nvim + plenary-nvim + nvim-web-devicons + neo-tree-nvim + nui-nvim + alpha-nvim + ]; + + initLua = '' + vim.opt.number = true + vim.opt.relativenumber = false + vim.opt.numberwidth = 4 + vim.opt.statuscolumn = "%l %s" + vim.opt.tabstop = 2 + vim.opt.softtabstop = 2 + vim.opt.shiftwidth = 2 + vim.opt.expandtab = true + vim.opt.wrap = false + vim.opt.ignorecase = true + vim.opt.smartcase = true + vim.opt.hlsearch = false + vim.opt.termguicolors = false + vim.opt.signcolumn = "yes" + vim.opt.scrolloff = 8 + vim.opt.showmode = false + vim.opt.timeoutlen = 300 + vim.opt.updatetime = 250 + vim.opt.foldcolumn = "0" + vim.opt.directory = vim.fn.stdpath("state") .. "/swap//" + + vim.g.mapleader = " " + vim.g.maplocalleader = " " + + vim.keymap.set({"n", "i"}, "", "write", {desc = "save file"}) + vim.keymap.set("n", "", "quit", {desc = "quit neovim"}) + vim.keymap.set("n", "", "nohlsearch", {desc = "clear search highlight"}) + vim.keymap.set({"n", "x"}, "gy", '"+y', {desc = "copy to clipboard"}) + vim.keymap.set({"n", "x"}, "gp", '"+p', {desc = "paste from clipboard"}) + vim.keymap.set("n", "", "u", {desc = "undo"}) + vim.keymap.set("i", "", "u", {desc = "undo"}) + vim.keymap.set("n", "", "", {desc = "redo"}) + vim.keymap.set("i", "", "", {desc = "redo"}) + vim.keymap.set({"n", "i"}, "", "ggVG", {desc = "select all"}) + + vim.keymap.set("n", "", "Telescope current_buffer_fuzzy_find", {desc = "search buffer"}) + + vim.keymap.set("n", "ff", "Telescope find_files", {desc = "find files"}) + vim.keymap.set("n", "fg", "Telescope live_grep", {desc = "text search"}) + vim.keymap.set("n", "fb", "Telescope buffers", {desc = "find buffers"}) + vim.keymap.set("n", "", "Neotree toggle", {desc = "toggle file explorer"}) + + vim.keymap.set("n", "", "h", {desc = "move left"}) + vim.keymap.set("n", "", "j", {desc = "move down"}) + vim.keymap.set("n", "", "k", {desc = "move up"}) + vim.keymap.set("n", "", "l", {desc = "move right"}) + vim.keymap.set("n", "", "vsplit", {desc = "vertical split"}) + vim.keymap.set("n", "", "split", {desc = "horizontal split"}) + vim.keymap.set("n", "", "close", {desc = "close split"}) + + vim.cmd.colorscheme("default") + vim.opt.matchpairs = "" + vim.api.nvim_set_hl(0, "MatchParen", {}) + vim.cmd("highlight clear MatchParen") + vim.cmd("highlight MatchParen guifg=NONE guibg=NONE gui=NONE") + + require("lualine").setup({ + options = { + icons_enabled = true, + theme = "auto", + component_separators = { left = "", right = "" }, + section_separators = { left = "", right = "" }, + }, + }) + + require("telescope").setup({ + defaults = { + file_ignore_patterns = { "node_modules", ".git", "%.lock" }, + layout_strategy = "horizontal", + layout_config = { horizontal = { preview_width = 0.5 } }, + }, + }) + + require("neo-tree").setup({ + window = { + position = "right", + width = 30, + mappings = { + ["l"] = "open", + ["h"] = "close_node", + [""] = "open", + [""] = "revert_preview", + }, + }, + filesystem = { + filtered_items = { + visible = false, + hide_dotfiles = false, + hide_gitignored = false, + hide_by_name = { ".git", ".DS_Store", "thumbs.db" }, + }, + follow_current_file = { enabled = true }, + }, + }) + + local alpha = require("alpha") + local dashboard = require("alpha.themes.dashboard") + + dashboard.section.header.val = { + " ⠀⠀⠀⢀⡴⠲⣄⠀⠀⢀⡶⠲⡄⠀⣀⣀⣀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + " ⣀⣀⣀⣾⠁⠀⠹⠿⠟⠟⠀⠀⠙⣛⣉⡻⠿⠋⣿⣷⢦⣄⠀⠀⠀⠀⠀⠀", + " ⠭⠭⣽⠇⠀⠶⠀⢴⣦⠀⠶⠆⠸⠯⠭⠄⠀⠀⠀⠀⠀⠙⢧⡀⠀⢀⣤⣤", + "⠀⠀ ⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢷⣤⣾⣻⡟", + " ⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣧⠽⠋⠀", + " ⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⠀⠀⠀⠀", + " ⠀⠀⢷⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⡟⠀⠀⠀⠀", + "⠀ ⠀⠈⠳⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⠟⠀⠀⠀⠀⠀", + "⠀⠀ ⠀⠀⠉⠿⠟⠛⠛⠻⠾⠛⠛⠛⠛⠻⠟⠛⠛⠻⠾⠃⠀⠀⠀⠀⠀⠀", + } + + dashboard.section.buttons.val = { + dashboard.button("f", " > find file", "Telescope find_files"), + dashboard.button("n", " > new file", "enew"), + dashboard.button("r", " > recent files", "Telescope oldfiles"), + dashboard.button("q", " > quit", "qa"), + } + + alpha.setup(dashboard.opts) + ''; + }; +} -- cgit v1.3.1