diff --git a/configuration.nix b/configuration.nix index 1451544..115add3 100644 --- a/configuration.nix +++ b/configuration.nix @@ -138,9 +138,11 @@ vesktop kdePackages.kdeconnect-kde kdePackages.partitionmanager + kdePackages.bluedevil fprintd unzip oh-my-zsh + jellyfin-media-player ]; fonts.packages = with pkgs; [ diff --git a/home-manager/cli-tools.nix b/home-manager/cli-tools.nix index 3a3129a..606bdc1 100644 --- a/home-manager/cli-tools.nix +++ b/home-manager/cli-tools.nix @@ -13,7 +13,6 @@ programs = { fastfetch.enable = true; - neovim.enable = true; fzf.enable = true; bat.enable = true; btop.enable = true; diff --git a/home-manager/home.nix b/home-manager/home.nix index 8276e23..e045fdd 100644 --- a/home-manager/home.nix +++ b/home-manager/home.nix @@ -5,6 +5,7 @@ ./cli-tools.nix ./fastfetch.nix ./direnv.nix + ./neovim-nvim ]; # Home Manager needs a bit of information about you and the paths it should diff --git a/home-manager/neovim-nvim/default.nix b/home-manager/neovim-nvim/default.nix new file mode 100644 index 0000000..452ad03 --- /dev/null +++ b/home-manager/neovim-nvim/default.nix @@ -0,0 +1,73 @@ +{ config, pkgs, ...}: +let + + link = config.lib.file.mkOutOfStoreSymlink; + ccryptor-nvim = pkgs.vimUtils.buildVimPlugin { + name = "ccryptor.nvim"; + src = pkgs.fetchFromGitHub { + owner = "kurotych"; + repo = "ccryptor.nvim"; + rev = "4b2cd7fbf54eb8385d023b7411be4a46ab0eded8"; + hash = "sha256-CUjM8cr+SbgSd+NFbHysxogbq0QPJ/pXdSGo4p5AuHo="; + }; + }; + telescope-ag = pkgs.vimUtils.buildVimPlugin { + name = "telescope-ag"; + src = pkgs.fetchFromGitHub { + owner = "kelly-lin"; + repo = "telescope-ag"; + rev = "7d25064da3c7689461bcfa89ad1f08548415193d"; + hash = "sha256-xOgiiTElHLgx7Gwp6aR0Ipfanq6ZTTgiQv9Zs3LTb1g="; + }; + }; + +in +{ + programs.ripgrep.enable = true; + programs.fd.enable = true; # find replacement; depends on ripgrep and for telescope + programs.fzf.enable = true; + programs.neovim = { + enable = true; + viAlias = true; + vimAlias = true; + vimdiffAlias = true; + plugins = with pkgs.vimPlugins; [ + #gruvbox # theme + tokyonight-nvim + vim-nix # nix language + vim-lsp # lsp + telescope-nvim # fuzzy finder + telescope-fzf-native-nvim + # copilot-vim # copilot, no more copilot, bad ai go google 240809 + oil-nvim # OIL file manager, view link for help https://github.com/stevearc/oil.nvim?tab=readme-ov-file + lazygit-nvim # git support + markdown-preview-nvim # markdown preview ... seems to be ok but can't use unless running X11 server + # tmux navigator, depends on tmux plugin in config + vim-tmux-navigator + vim-commentary # comment out lines + vim-windowswap ## ww to swap windows + git-blame-nvim # git blame + limelight-vim # used for highlighting the current line + + leap-nvim # fast, two char nav + + # adding a gitlinker that lets me grab URLS + gitlinker-nvim + + fzf-lua + + # DIY Plugins + # telescope-ag + ccryptor-nvim + + # conflict marker vim + conflict-marker-vim + + toggleterm-nvim + ]; + }; + home.file.".config/nvim/init.lua" = { + enable = true; + source = link ./nvim.lua; + }; +} diff --git a/home-manager/neovim-nvim/nvim.lua b/home-manager/neovim-nvim/nvim.lua new file mode 100644 index 0000000..dbb9fc2 --- /dev/null +++ b/home-manager/neovim-nvim/nvim.lua @@ -0,0 +1,441 @@ +local function get_current_user() + local user = os.getenv("USER") or os.getenv("USERNAME") + return user or "Unknown" +end + +local current_user = get_current_user() +require("ccryptor").setup({ + dir_path = '/home/' .. current_user .. '/gitprojects/personal/personal_notes/journal/', +}) + + +-------------------------------------------------------------------------------- + +-- oil setup +require("oil").setup({ + cleanup_delay_ms = 1000, + view_options = { + show_hidden = true + } +}) +vim.keymap.set("n", "-", "Oil --float", { desc = "Open parent directory" }) + +-------------------------------------------------------------------------------- + +-- glow setup: https://github.com/ellisonleao/glow.nvim?tab=readme-ov-file#setup +--require('glow').setup({ +-- width = 80, +-- height = 100, +-- width_ratio = 1, -- maximum width of the Glow window compared to the nvim window size (overrides `width`) +-- height_ratio = 1, +--}) + +-------------------------------------------------------------------------------- + +-- TELESCOPE FUNCTIONS +-- part of the config +-- Set your fixed file path here +local actions = require('telescope.actions') +local action_state = require('telescope.actions.state') +-- Set your fixed file path here +local fixed_path = "~/gitprojects/personal/" +function recent_files() + require('telescope.builtin').find_files({ + prompt_title = "Recent Files", + cwd = fixed_path, + find_command = { "sh", "-c", "find " .. fixed_path .. " -type f -not -path '*/\\.git/*' -printf '%T@ %p\n' | sort -n -r | cut -d' ' -f2-" }, + }) +end + +local custom_actions = {} +custom_actions.insert_path = function(prompt_bufnr) + local entry = action_state.get_selected_entry() + actions.close(prompt_bufnr) + vim.api.nvim_put({ entry.value }, '', false, true) +end + +-- telescope config +require('telescope').setup({ + defaults = { + scroll_strategy = 'limit', + layout_strategy = 'vertical', + layout_config = { + mirror = true, + prompt_position = 'bottom', + preview_height = 0.65, + width = 0.75, + height = 0.95, + }, + mappings = { + i = { + -- Map Ctrl-i to insert_path in insert mode + [""] = custom_actions.insert_path + }, + n = { + -- Map i to insert_path in normal mode + [""] = custom_actions.insert_path + }, + }, + } +}) +require('telescope').load_extension('fzf') + +------------------------------------------------------------------------------ +-- fzf-vim config +local actions = require "fzf-lua.actions" +require'fzf-lua'.setup { + winopts = { + height = 0.95, + preview = { + layout = 'vertical', + }, + }, +} + +------------------------------------------------------------------------------ + +-- leap +require('leap').create_default_mappings() + +------------------------------------------------------------------------------ + +-- vim keybindings below +vim.cmd [[ +set splitbelow +set splitright + +let mapleader = "\" + +colorscheme gruvbox + +set noswapfile + +" turning mouse off so that I can click in and it won't move my cursor +set mouse= +" set clipboard=unnamedplus +set number relativenumber +set scrolloff=5 + +set nowrap +nnoremap z :set wrap! + + + +" toggle side numbers +nnoremap n :call ToggleSidenums() +function! ToggleSidenums() + if &relativenumber + set norelativenumber + else + set relativenumber " number " used to use number when I was hiding these + endif +endfunction + +" toggle listchars +nnoremap N :call ToggleListchars() +function! ToggleListchars() + if &list + set listchars= nolist + else + set list listchars=tab:>␣,trail:~,extends:>,precedes:<,space:· + endif +endfunction + +" rebind J and K to be { and } for jumping whitespace +vnoremap J } +vnoremap K { +nnoremap J } +nnoremap K { + +" copy , pasting is handling by going to insert and hitting "ctrl + shift + v" +vnoremap c "*y +vnoremap c "*y +nnoremap c "*y +vnoremap y "*y + +" pasting just in case +vnoremap v "*p +nnoremap v "*p + + +" cutting +vnoremap x "*d +nnoremap x "*d + +" saving file +nnoremap w :wa +nnoremap s :wa + +" closing +nnoremap C :close +nnoremap q :wq +nnoremap Q :q! + +" copilot +let g:copilot_filetypes = { + \ '*': v:true, + \ } + +" tabs and buffers +" tab switching using ctrl + tab +nnoremap k :tabprevious +nnoremap j :tabnext +" tab with just hold +nnoremap :tabprevious +nnoremap <>->> :tabnext + +" vim-windowswap +let g:windowswap_map_keys = 0 +nnoremap WW :call WindowSwap#EasyWindowSwap() + + +" vim markdown renderer +" let g:vim_markdown_folding_disabled = 1 +" let g:vim_markdown_toc_autofit = 1 +" let g:vim_markdown_follow_anchor = 1 +" let g:vim_markdown_no_extensions_in_markdown = 1 +" let g:vim_markdown_strikethrough = 1 +" let g:vim_markdown_autowrite = 1 + +" markdown-renderer +" use a custom port to start server or empty for random +let g:mkdp_open_to_the_world = 1 +let g:mkdp_port = '3010' +let g:mkdp_open_ip = $MARKDOWN_IP +let g:mkdp_echo_preview_url = 1 +let g:mkdp_browser = 'none' +nnoremap m :MarkdownPreviewToggle + +nnoremap , :tabprevious +nnoremap . :tabnext + +" rebind :bprev and :bnext +nnoremap J :bprev +nnoremap K :bnext + +" copilot remap autocomplete to ctrl + l when in insert mode +imap