diff --git a/home/default.nix b/home/default.nix index d962289..f2821b5 100644 --- a/home/default.nix +++ b/home/default.nix @@ -1,4 +1,4 @@ -{ config, pkgs, inputs, ... }: +{ inputs, ... }: { imports = [ @@ -9,25 +9,10 @@ ./gtk ./git ./ags + ./neovim + ./misc inputs.ags.homeManagerModules.default inputs.nixvim.homeManagerModules.nixvim ]; - home.username = "joy"; - home.homeDirectory = "/home/joy"; - home.stateVersion = "23.11"; - programs.home-manager.enable = true; - home.sessionVariables = { - EDITOR = "nvim"; - }; - qt.enable = true; - qt.style.name = "adwaita"; - - xdg.mimeApps.defaultApplications = { - "text/plain" = ["neovide.desktop"]; - "image/*" = ["imv.desktop"]; - "video/png" = ["mpv.desktop"]; - "video/jpg" = ["mpv.desktop"]; - "video/*" = ["mpv.desktop"]; - }; } diff --git a/home/misc/default.nix b/home/misc/default.nix new file mode 100644 index 0000000..4974a74 --- /dev/null +++ b/home/misc/default.nix @@ -0,0 +1,22 @@ + +{ config }: + +{ +home.username = "joy"; + home.homeDirectory = "/home/joy"; + home.stateVersion = "23.11"; + programs.home-manager.enable = true; + home.sessionVariables = { + EDITOR = "nvim"; +}; + qt.enable = true; + qt.style.name = "adwaita"; + + xdg.mimeApps.defaultApplications = { + "text/plain" = ["neovide.desktop"]; + "image/*" = ["imv.desktop"]; + "video/png" = ["mpv.desktop"]; + "video/jpg" = ["mpv.desktop"]; + "video/*" = ["mpv.desktop"]; + }; +} diff --git a/home/neovim/default.nix b/home/neovim/default.nix new file mode 100644 index 0000000..1df84ed --- /dev/null +++ b/home/neovim/default.nix @@ -0,0 +1,44 @@ +{ ... }: +{ + imports = [ + ./plugins + ./set.nix + ]; + programs.nixvim = { + enable = true; + defaultEditor = true; + vimAlias = true; + clipboard.register = "unnamedplus"; + colorschemes.gruvbox.enable = true; + + plugins = { + presence-nvim = { + enable = true; + mainImage = "file"; + }; + bufferline = { + enable = true; + separatorStyle = "slope"; + }; + treesitter = { + enable = true; + indent = true; + nixvimInjections = true; + }; + treesitter-context.enable = true; + nvim-tree = { + enable = true; + renderer.groupEmpty = true; + }; + # lualine.enable = true; + }; + + keymaps = [ + { + mode = "n"; + key = ""; + action = "NvimTreeToggle"; + } + ]; + }; +} diff --git a/home/neovim/plugins/alpha.nix b/home/neovim/plugins/alpha.nix new file mode 100644 index 0000000..3975997 --- /dev/null +++ b/home/neovim/plugins/alpha.nix @@ -0,0 +1,78 @@ +{ ... }: +{ + programs.nixvim.plugins.alpha = { + enable = true; + layout = [ + { + type = "padding"; + val = 4; + } + { + opts = { + hl = "AlphaHeader"; + position = "center"; + }; + type = "text"; + val = [ + " ▄▄▄█████▓ ▒█████ ███▄ ▄███▓ " + " ▓ ██▒ ▓▒▒██▒ ██▒▓██▒▀█▀ ██▒ " + " ▒ ▓██░ ▒░▒██░ ██▒▓██ ▓██░ " + " ░ ▓██▓ ░ ▒██ ██░▒██ ▒██ " + " ▒██▒ ░ ░ ████▓▒░▒██▒ ░██▒ " + " ▒ ░░ ░ ▒░▒░▒░ ░ ▒░ ░ ░ " + " ░ ░ ▒ ▒░ ░ ░ ░ " + " ░ ░ ░ ░ ▒ ░ ░ " + " ░ ░ ░ " + " " + " git@github.com:TomJuri " + ]; + } + { + type = "padding"; + val = 2; + } + { + type = "group"; + val = let + mkButton = shortcut: cmd: val: hl: { + type = "button"; + inherit val; + opts = { + inherit hl shortcut; + keymap = [ + "n" + shortcut + cmd + {} + ]; + position = "center"; + cursor = 0; + width = 40; + align_shortcut = "right"; + hl_shortcut = "Keyword"; + }; + }; + in [ + ( + mkButton + "f" + "lua require('telescope.builtin').find_files({hidden = true})" + "🔍 Find File" + "Operator" + ) + ( + mkButton + "q" + "qa" + "💣 Quit" + "String" + ) + ]; + } + { + type = "padding"; + val = 2; + } + ]; + }; +} diff --git a/home/neovim/plugins/cmp.nix b/home/neovim/plugins/cmp.nix new file mode 100644 index 0000000..309fbcc --- /dev/null +++ b/home/neovim/plugins/cmp.nix @@ -0,0 +1,81 @@ +{ ... }: +{ + programs.nixvim = { + plugins = { + cmp-nvim-lsp.enable = true; + cmp_luasnip.enable = true; + cmp = { + enable = true; + settings = { + autoEnableSources = true; + experimental = { ghost_text = true; }; + performance = { + debounce = 57; + fetchingTimeout = 197; + maxViewEntries = 27; + }; + + snippet.expand = '' + function(args) + require('luasnip').lsp_expand(args.body) + end + ''; + + formatting.fields = ["kind" "abbr" "menu"]; + + sources = [ + { + name = "nvim_lsp"; + } + { + name = "luasnip"; + } + ]; + + mapping = { + "" = "cmp.mapping(cmp.mapping.select_next_item(), {'i', 's'})"; + "" = "cmp.mapping.confirm({ select = true })"; + "" = "cmp.mapping.complete()"; + "" = "cmp.mapping.select_next_item()"; + "" = "cmp.mapping.select_prev_item()"; + }; + + window = { + completion.border = "solid"; + documentation.border = "solid"; + }; + }; + }; + }; + extraConfigLua = '' + luasnip = require("luasnip") + kind_icons = { + Text = "󰊄", + Method = "", + Function = "󰡱", + Constructor = "", + Field = "", + Variable = "󱀍", + Class = "", + Interface = "", + Module = "󰕳", + Property = "", + Unit = "", + Value = "", + Enum = "", + Keyword = "", + Snippet = "", + Color = "", + File = "", + Reference = "", + Folder = "", + EnumMember = "", + Constant = "", + Struct = "", + Event = "", + Operator = "", + TypeParameter = "", + } + ''; + }; +} diff --git a/home/neovim/plugins/default.nix b/home/neovim/plugins/default.nix new file mode 100644 index 0000000..80a20e4 --- /dev/null +++ b/home/neovim/plugins/default.nix @@ -0,0 +1,10 @@ +{ ... }: +{ + imports = [ + ./alpha.nix + ./cmp.nix + ./lsp.nix + ./luasnip.nix + ./telescope.nix + ]; +} diff --git a/home/neovim/plugins/lsp.nix b/home/neovim/plugins/lsp.nix new file mode 100644 index 0000000..c133f97 --- /dev/null +++ b/home/neovim/plugins/lsp.nix @@ -0,0 +1,12 @@ +{ ... }: +{ + programs.nixvim.plugins.lsp = { + enable = true; + servers = { + nil-ls = { enable = true; }; + kotlin-language-server = { enable = true; }; + rust-analyzer = { enable = true; installCargo = true; installRustc = true; }; + pyright = { enable = true; }; + }; + }; +} diff --git a/home/neovim/plugins/luasnip.nix b/home/neovim/plugins/luasnip.nix new file mode 100644 index 0000000..888df13 --- /dev/null +++ b/home/neovim/plugins/luasnip.nix @@ -0,0 +1,16 @@ +{ pkgs, ... }: +{ + programs.nixvim.plugins.luasnip = { + enable = true; + extraConfig = { + enable_autosnippets = true; + store_selection_keys = ""; + }; + fromVscode = [ + { + lazyLoad = true; + paths = "${pkgs.vimPlugins.friendly-snippets}"; + } + ]; + }; +} diff --git a/home/neovim/plugins/telescope.nix b/home/neovim/plugins/telescope.nix new file mode 100644 index 0000000..7996520 --- /dev/null +++ b/home/neovim/plugins/telescope.nix @@ -0,0 +1,48 @@ +{ pkgs, ... }: +{ + home.packages = [ + pkgs.ripgrep + ]; + + programs.nixvim.plugins.telescope = { + enable = true; + extensions = { + file-browser = { + enable = true; + }; + fzf-native = { + enable = true; + }; + }; + settings = { + defaults = { + layout_config = { + horizontal = { + prompt_position = "top"; + }; + }; + sorting_strategy = "ascending"; + }; + }; + keymaps = { + "" = { + action = "find_files, {}"; + options = { + desc = "Find project files"; + }; + }; + "/" = { + action = "live_grep"; + options = { + desc = "Grep (root dir)"; + }; + }; + "" = { + action = "git_files, {}"; + options = { + desc = "Search git files"; + }; + }; + }; + }; +} diff --git a/home/neovim/set.nix b/home/neovim/set.nix new file mode 100644 index 0000000..da15fa0 --- /dev/null +++ b/home/neovim/set.nix @@ -0,0 +1,28 @@ +{ ... }: +{ + programs.nixvim = { + globals.mapleader = " "; + + opts = { + number = true; + relativenumber = true; + + tabstop = 2; + softtabstop = 2; + showtabline = 2; + expandtab = true; + + shiftwidth = 2; + smartindent = true; + + breakindent = true; + cursorline = true; + scrolloff = 8; + cmdheight = 0; + wrap = true; + termguicolors = true; + colorcolumn = "150"; + showmode = false; + }; + }; +} diff --git a/home/zsh/default.nix b/home/zsh/default.nix index d60f3bd..764b44c 100644 --- a/home/zsh/default.nix +++ b/home/zsh/default.nix @@ -24,6 +24,7 @@ em = "nvim ~/nix/modules/misc/default.nix"; es = "nvim ~/nix/modules/stylix/default.nix"; ep = "nvim ~/nix/modules/packages/default.nix"; + ev = "nvim ~/nix/home/neovim/default.nix"; }; history.size = 10000; diff --git a/modules/default.nix b/modules/default.nix index cb7957a..abb7293 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -7,6 +7,5 @@ ./misc ./gdm ./stylix - ./neovim ]; } diff --git a/modules/misc/default.nix b/modules/misc/default.nix index ad1849b..a76c5e7 100644 --- a/modules/misc/default.nix +++ b/modules/misc/default.nix @@ -23,10 +23,10 @@ programs.gnupg.agent = { enableSSHSupport = true; }; -programs.neovim = { - enable = true; - defaultEditor = true; -}; +#programs.neovim = { +# enable = true; +# defaultEditor = true; +#}; programs.hyprland.enable = true; users.defaultUserShell = pkgs.zsh; diff --git a/modules/neovim/default.nix b/modules/neovim/default.nix index a9f5ab7..ca03b3e 100644 --- a/modules/neovim/default.nix +++ b/modules/neovim/default.nix @@ -10,7 +10,7 @@ defaultEditor = true; vimAlias = true; clipboard.register = "unnamedplus"; - colorschemes.catppuccin.enable = true; + colorschemes.gruvbox.enable = true; plugins = { presence-nvim = {