From 29eacd05bbce414747948f0349b0d00d92c8aa44 Mon Sep 17 00:00:00 2001 From: Emmet Date: Sat, 14 Sep 2024 20:31:57 -0500 Subject: [PATCH] Migrating some doom emacs to nvchad --- flake.nix | 2 +- user/app/nvim/README.md | 9 ++ user/app/nvim/init.lua | 89 ++++++++++++++++++++ user/app/nvim/lua/chadrc.lua | 17 ++++ user/app/nvim/lua/configs/conform.lua | 15 ++++ user/app/nvim/lua/configs/lazy.lua | 47 +++++++++++ user/app/nvim/lua/configs/lspconfig.lua | 24 ++++++ user/app/nvim/lua/mappings.lua | 26 ++++++ user/app/nvim/lua/options.lua | 6 ++ user/app/nvim/lua/plugins/init.lua | 42 +++++++++ user/app/nvim/lua/themes/stylix.lua.mustache | 70 +++++++++++++++ user/app/nvim/nvim.nix | 9 +- 12 files changed, 353 insertions(+), 3 deletions(-) create mode 100644 user/app/nvim/README.md create mode 100644 user/app/nvim/init.lua create mode 100644 user/app/nvim/lua/chadrc.lua create mode 100644 user/app/nvim/lua/configs/conform.lua create mode 100644 user/app/nvim/lua/configs/lazy.lua create mode 100644 user/app/nvim/lua/configs/lspconfig.lua create mode 100644 user/app/nvim/lua/mappings.lua create mode 100644 user/app/nvim/lua/options.lua create mode 100644 user/app/nvim/lua/plugins/init.lua create mode 100644 user/app/nvim/lua/themes/stylix.lua.mustache diff --git a/flake.nix b/flake.nix index 0f0da2c..ac70a0f 100644 --- a/flake.nix +++ b/flake.nix @@ -32,7 +32,7 @@ term = "alacritty"; # Default terminal command; font = "Intel One Mono"; # Selected font fontPkg = pkgs.intel-one-mono; # Font package - editor = "emacsclient"; # Default editor; + editor = "neovide"; # Default editor; # editor spawning translator # generates a command that can be used to spawn editor inside a gui # EDITOR and TERM session variables must be set in home.nix or other module diff --git a/user/app/nvim/README.md b/user/app/nvim/README.md new file mode 100644 index 0000000..dc0deaa --- /dev/null +++ b/user/app/nvim/README.md @@ -0,0 +1,9 @@ +**This repo is supposed to used as config by NvChad users!** + +- The main nvchad repo (NvChad/NvChad) is used as a plugin by this repo. +- So you just import its modules , like `require "nvchad.options" , require "nvchad.mappings"` +- So you can delete the .git from this repo ( when you clone it locally ) or fork it :) + +# Credits + +1) Lazyvim starter https://github.com/LazyVim/starter as nvchad's starter was inspired by Lazyvim's . It made a lot of things easier! diff --git a/user/app/nvim/init.lua b/user/app/nvim/init.lua new file mode 100644 index 0000000..64d8655 --- /dev/null +++ b/user/app/nvim/init.lua @@ -0,0 +1,89 @@ +vim.g.base46_cache = vim.fn.stdpath "data" .. "/nvchad/base46/" +vim.g.mapleader = " " + +if vim.g.neovide then + -- Helper function for transparency formatting + local alpha = function() + return string.format("%x", math.floor(255 * vim.g.transparency or 0.8)) + end + vim.g.transparency = 0 + vim.g.neovide_background_color = vim.g.neovide_background_color .. alpha() + vim.g.neovide_transparency = 0.8 + vim.g.neovide_floating_blur_amount_x = 8.0 + vim.g.neovide_floating_blur_amount_y = 8.0 +end + +vim.g.neovide_scale_factor = 1.0 + +-- bootstrap lazy and all plugins +local lazypath = vim.fn.stdpath "data" .. "/lazy/lazy.nvim" + +if not vim.uv.fs_stat(lazypath) then + local repo = "https://github.com/folke/lazy.nvim.git" + vim.fn.system { "git", "clone", "--filter=blob:none", repo, "--branch=stable", lazypath } +end + +vim.opt.rtp:prepend(lazypath) + +local lazy_config = require "configs.lazy" + +-- load plugins +require("lazy").setup({ + { + "NvChad/NvChad", + lazy = false, + branch = "v2.5", + import = "nvchad.plugins", + }, + + { import = "plugins" }, +}, lazy_config) + +require("workspaces").setup({ + hooks = { + open = { "Telescope find_files" }, + } +}) + +-- You dont need to set any of these options. These are the default ones. Only +-- the loading is important +require('telescope').setup { + defaults = { + winblend = 80, + }, + pickers = { + find_files = { + }, + }, + extensions = { + fzf = { + fuzzy = true, -- false will only do exact matching + override_generic_sorter = true, -- override the generic sorter + override_file_sorter = true, -- override the file sorter + case_mode = "smart_case", -- or "ignore_case" or "respect_case" + -- the default case_mode is "smart_case" + }, + workspaces = { + -- keep insert mode after selection in the picker, default is false + keep_insert = true, + -- Highlight group used for the path in the picker, default is "String" + path_hl = "String" + } + } +} +-- To get fzf loaded and working with telescope, you need to call +-- load_extension, somewhere after setup function: +require('telescope').load_extension('fzf') +require('telescope').load_extension('project') +require('telescope').load_extension('workspaces') + +-- load theme +dofile(vim.g.base46_cache .. "defaults") +dofile(vim.g.base46_cache .. "statusline") + +require "options" +require "nvchad.autocmds" + +vim.schedule(function() + require "mappings" +end) diff --git a/user/app/nvim/lua/chadrc.lua b/user/app/nvim/lua/chadrc.lua new file mode 100644 index 0000000..5fd0c74 --- /dev/null +++ b/user/app/nvim/lua/chadrc.lua @@ -0,0 +1,17 @@ +-- This file needs to have same structure as nvconfig.lua +-- https://github.com/NvChad/ui/blob/v2.5/lua/nvconfig.lua +-- Please read that file to know all available options :( + +---@type ChadrcConfig +local M = {} + +M.base46 = { + theme = "stylix", + + -- hl_override = { + -- Comment = { italic = true }, + -- ["@comment"] = { italic = true }, + -- }, +} + +return M diff --git a/user/app/nvim/lua/configs/conform.lua b/user/app/nvim/lua/configs/conform.lua new file mode 100644 index 0000000..35ba6cf --- /dev/null +++ b/user/app/nvim/lua/configs/conform.lua @@ -0,0 +1,15 @@ +local options = { + formatters_by_ft = { + lua = { "stylua" }, + -- css = { "prettier" }, + -- html = { "prettier" }, + }, + + -- format_on_save = { + -- -- These options will be passed to conform.format() + -- timeout_ms = 500, + -- lsp_fallback = true, + -- }, +} + +return options diff --git a/user/app/nvim/lua/configs/lazy.lua b/user/app/nvim/lua/configs/lazy.lua new file mode 100644 index 0000000..cd170bd --- /dev/null +++ b/user/app/nvim/lua/configs/lazy.lua @@ -0,0 +1,47 @@ +return { + defaults = { lazy = true }, + install = { colorscheme = { "nvchad" } }, + + ui = { + icons = { + ft = "", + lazy = "󰂠 ", + loaded = "", + not_loaded = "", + }, + }, + + performance = { + rtp = { + disabled_plugins = { + "2html_plugin", + "tohtml", + "getscript", + "getscriptPlugin", + "gzip", + "logipat", + "netrw", + "netrwPlugin", + "netrwSettings", + "netrwFileHandlers", + "matchit", + "tar", + "tarPlugin", + "rrhelper", + "spellfile_plugin", + "vimball", + "vimballPlugin", + "zip", + "zipPlugin", + "tutor", + "rplugin", + "syntax", + "synmenu", + "optwin", + "compiler", + "bugreport", + "ftplugin", + }, + }, + }, +} diff --git a/user/app/nvim/lua/configs/lspconfig.lua b/user/app/nvim/lua/configs/lspconfig.lua new file mode 100644 index 0000000..478df01 --- /dev/null +++ b/user/app/nvim/lua/configs/lspconfig.lua @@ -0,0 +1,24 @@ +-- load defaults i.e lua_lsp +require("nvchad.configs.lspconfig").defaults() + +local lspconfig = require "lspconfig" + +-- EXAMPLE +local servers = { "html", "cssls" } +local nvlsp = require "nvchad.configs.lspconfig" + +-- lsps with default config +for _, lsp in ipairs(servers) do + lspconfig[lsp].setup { + on_attach = nvlsp.on_attach, + on_init = nvlsp.on_init, + capabilities = nvlsp.capabilities, + } +end + +-- configuring single server, example: typescript +-- lspconfig.ts_ls.setup { +-- on_attach = nvlsp.on_attach, +-- on_init = nvlsp.on_init, +-- capabilities = nvlsp.capabilities, +-- } diff --git a/user/app/nvim/lua/mappings.lua b/user/app/nvim/lua/mappings.lua new file mode 100644 index 0000000..17f4517 --- /dev/null +++ b/user/app/nvim/lua/mappings.lua @@ -0,0 +1,26 @@ +require "nvchad.mappings" + +-- add yours here + +local map = vim.keymap.set +local builtin = require("telescope.builtin") +local utils = require("telescope.utils") +local change_scale_factor = function(delta) + vim.g.neovide_scale_factor = vim.g.neovide_scale_factor * delta +end + +vim.keymap.set("n", "", function() + change_scale_factor(1.25) +end) +vim.keymap.set("n", "", function() + change_scale_factor(1/1.25) +end) + +map("n", ";", ":", { desc = "CMD enter command mode" }) +map({"n", "v", "i"}, "", ":", { desc = "CMD enter command mode" }) +map("n", ".", "Telescope find_files", { desc = "telescope find files" }) +map("n", "gg", "Neogit", { desc = "Neogit status buffer" }) +map("n", "pp", "Telescope workspaces", { desc = "telescope workspaces" }) +map("i", "jk", "") + +-- map({ "n", "i", "v" }, "", " w ") diff --git a/user/app/nvim/lua/options.lua b/user/app/nvim/lua/options.lua new file mode 100644 index 0000000..738f20b --- /dev/null +++ b/user/app/nvim/lua/options.lua @@ -0,0 +1,6 @@ +require "nvchad.options" + +-- add yours here! + +-- local o = vim.o +-- o.cursorlineopt ='both' -- to enable cursorline! diff --git a/user/app/nvim/lua/plugins/init.lua b/user/app/nvim/lua/plugins/init.lua new file mode 100644 index 0000000..a433f1b --- /dev/null +++ b/user/app/nvim/lua/plugins/init.lua @@ -0,0 +1,42 @@ +return { + { + "stevearc/conform.nvim", + -- event = 'BufWritePre', -- uncomment for format on save + opts = require "configs.conform", + }, + + -- These are some examples, uncomment them if you want to see them work! + { + "neovim/nvim-lspconfig", + config = function() + require "configs.lspconfig" + end, + }, + + { + "nvim-treesitter/nvim-treesitter", + opts = { + ensure_installed = { + "vim", "lua", "vimdoc", + "html", "css" + }, + }, + }, + + { 'nvim-telescope/telescope-fzf-native.nvim', build = 'make', lazy = false, }, + { 'nvim-telescope/telescope-project.nvim', lazy = false, }, + { 'natecraddock/workspaces.nvim', lazy = false, }, + + { + "NeogitOrg/neogit", + lazy = false, + dependencies = { + "nvim-lua/plenary.nvim", -- required + "sindrets/diffview.nvim", -- optional - Diff integration + + -- Only one of these is needed. + "nvim-telescope/telescope.nvim", -- optional + }, + config = true + }, +} diff --git a/user/app/nvim/lua/themes/stylix.lua.mustache b/user/app/nvim/lua/themes/stylix.lua.mustache new file mode 100644 index 0000000..fba0ee7 --- /dev/null +++ b/user/app/nvim/lua/themes/stylix.lua.mustache @@ -0,0 +1,70 @@ +local M = {} + +M.base_30 = { + white = "#{{base07-hex}}", + darker_black = "#{{base00-hex}}", + black = "#{{base00-hex}}", -- nvim bg + black2 = "#{{base01-hex}}", + one_bg = "#{{base01-hex}}", + one_bg2 = "#{{base02-hex}}", + one_bg3 = "#{{base03-hex}}", + grey = "#{{base04-hex}}", + grey_fg = "#{{base04-hex}}", + grey_fg2 = "#{{base05-hex}}", + light_grey = "#{{base06-hex}}", + red = "#{{base08-hex}}", + baby_pink = "#{{base08-hex}}", + pink = "#{{base08-hex}}", + line = "#{{base02-hex}}", -- for lines like vertsplit + green = "#{{base0B-hex}}", + vibrant_green = "#{{base0B-hex}}", + blue = "#{{base0D-hex}}", + nord_blue = "#{{base0D-hex}}", + yellow = "#{{base0A-hex}}", + sun = "#{{base0A-hex}}", + purple = "#{{base0E-hex}}", + dark_purple = "#{{base0E-hex}}", + teal = "#{{base0C-hex}}", + orange = "#{{base09-hex}}", + cyan = "#{{base0C-hex}}", + statusline_bg = "#{{base02-hex}}", + lightbg = "#{{base03-hex}}", + pmenu_bg = "#{{base0D-hex}}", + folder_bg = "#{{base05-hex}}", +} + +M.base_16 = { + base00 = "#{{base00-hex}}", + base01 = "#{{base01-hex}}", + base02 = "#{{base02-hex}}", + base03 = "#{{base03-hex}}", + base04 = "#{{base04-hex}}", + base05 = "#{{base05-hex}}", + base06 = "#{{base06-hex}}", + base07 = "#{{base07-hex}}", + base08 = "#{{base08-hex}}", + base09 = "#{{base09-hex}}", + base0A = "#{{base0A-hex}}", + base0B = "#{{base0B-hex}}", + base0C = "#{{base0C-hex}}", + base0D = "#{{base0D-hex}}", + base0E = "#{{base0E-hex}}", + base0F = "#{{base0F-hex}}", +} + +M.polish_hl = { + treesitter = { + luaTSField = { fg = M.base_16.base0D }, + ["@tag.delimiter"] = { fg = M.base_30.cyan }, + ["@function"] = { fg = M.base_30.orange }, + ["@variable.parameter"] = { fg = M.base_16.base0F }, + ["@constructor"] = { fg = M.base_16.base0A }, + ["@tag.attribute"] = { fg = M.base_30.orange }, + }, +} + +M = require("base46").override_theme(M, "stylix") + +M.type = "{{polarity}}" + +return M diff --git a/user/app/nvim/nvim.nix b/user/app/nvim/nvim.nix index b99c3fc..4d41d0a 100644 --- a/user/app/nvim/nvim.nix +++ b/user/app/nvim/nvim.nix @@ -1,10 +1,15 @@ -{ pkgs, inputs, ... }: +{ config, pkgs, inputs, ... }: { home.packages = with pkgs; [ neovim neovide + lua-language-server ]; - home.file.".config/nvim".source = inputs.nvchad; + home.file.".config/nvim".source = ./.; home.file.".config/nvim".recursive = true; + home.file.".config/nvim/lua/themes/stylix.lua".source = config.lib.stylix.colors { + template = builtins.readFile ./lua/themes/stylix.lua.mustache; + extension = ".lua"; + }; }