diff --git a/nvim/.gitignore b/nvim/.gitignore new file mode 100644 index 0000000..e033bc6 --- /dev/null +++ b/nvim/.gitignore @@ -0,0 +1 @@ +lazy-lock.json diff --git a/nvim/.neoconf.json b/nvim/.neoconf.json new file mode 100644 index 0000000..7c48087 --- /dev/null +++ b/nvim/.neoconf.json @@ -0,0 +1,15 @@ +{ + "neodev": { + "library": { + "enabled": true, + "plugins": true + } + }, + "neoconf": { + "plugins": { + "lua_ls": { + "enabled": true + } + } + } +} diff --git a/nvim/README.md b/nvim/README.md new file mode 100644 index 0000000..9b6b768 --- /dev/null +++ b/nvim/README.md @@ -0,0 +1,42 @@ +# README + +I'm learning NEOVIM and by keeping it in git means I can sync the config between +my Linux Hosts + +Current goals + +- Get Neorg setup for my notes +- Get blink setup with auto complete in code +- Probably integrate chatgpt or something to avoid the copy and paste + +## LazyVIM + +### Leaders (SPACE) + +SPACE - File picker +u - UI Enable/Disable stuff +][b - Switch Buffer (Tabs) + +### Keymaps + +Open the keymap.lua file, and add entries there + +### Mini file explores + +SPACE f m + +This allows you to use EDIT functions to create, rename, files +Use = to commit and q to step out + +### TODO + +- [x] Play with GIT integration +- [ ] Figure out :terminal + - There seems to be a video dedicated on terminal usage in LazyVIM +- [ ] Figure out how to disable auto complete for markdown + +### Co-Pilot + +Seems to be working, but not sure how to use it yet. But in the base it's typing +and then just pressing enter. If this thing does a co-pilot call whenever I'm +typing, then I suddenly understand why we have such high energy bills. diff --git a/nvim/disable/config.lua b/nvim/disable/config.lua new file mode 100644 index 0000000..9384f8c --- /dev/null +++ b/nvim/disable/config.lua @@ -0,0 +1,24 @@ +local rocks_config = { +rocks_path = vim.env.HOME .. "/.local/share/nvim/rocks", +} + +vim.g.rocks_nvim = rocks_config + +local luarocks_path = { +vim.fs.joinpath(rocks_config.rocks_path, "share", "lua", "5.1", "?.lua"), +vim.fs.joinpath(rocks_config.rocks_path, "share", "lua", "5.1", "?", "init.lua"), +} +package.path = package.path .. ";" .. table.concat(luarocks_path, ";") + +local luarocks_cpath = { +vim.fs.joinpath(rocks_config.rocks_path, "lib", "lua", "5.1", "?.so"), +vim.fs.joinpath(rocks_config.rocks_path, "lib64", "lua", "5.1", "?.so"), +-- Remove the dylib and dll paths if you do not need macos or windows support +vim.fs.joinpath(rocks_config.rocks_path, "lib", "lua", "5.1", "?.dylib"), +vim.fs.joinpath(rocks_config.rocks_path, "lib64", "lua", "5.1", "?.dylib"), +vim.fs.joinpath(rocks_config.rocks_path, "lib", "lua", "5.1", "?.dll"), +vim.fs.joinpath(rocks_config.rocks_path, "lib64", "lua", "5.1", "?.dll"), +} +package.cpath = package.cpath .. ";" .. table.concat(luarocks_cpath, ";") + +vim.opt.runtimepath:append(vim.fs.joinpath(rocks_config.rocks_path, "lib", "luarocks", "rocks-5.1", "rocks.nvim", "*")) diff --git a/nvim/disable/config.vim b/nvim/disable/config.vim new file mode 100644 index 0000000..90bbfb6 --- /dev/null +++ b/nvim/disable/config.vim @@ -0,0 +1,355 @@ +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" => General +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +set mouse=a +" Sets how many lines of history VIM has to remember +set history=500 + +" Enable filetype plugins +filetype plugin on +filetype indent on + +" Set to auto read when a file is changed from the outside +set autoread +au FocusGained,BufEnter * checktime + +" With a map leader it's possible to do extra key combinations +" like w saves the current file +let mapleader = "," + +" Fast saving +nmap s :w! + +" :W sudo saves the file +" (useful for handling the permission-denied error) +command! W execute 'w !sudo tee % > /dev/null' edit! + + +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" => VIM user interface +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" Set 7 lines to the cursor - when moving vertically using j/k +set so=7 + +" Avoid garbled characters in Chinese language windows OS +let $LANG='en' +set langmenu=en +source $VIMRUNTIME/delmenu.vim +source $VIMRUNTIME/menu.vim + +" Turn on the Wild menu +set wildmenu + +" Ignore compiled files +set wildignore=*.o,*~,*.pyc +if has("win16") || has("win32") + set wildignore+=.git\*,.hg\*,.svn\* +else + set wildignore+=*/.git/*,*/.hg/*,*/.svn/*,*/.DS_Store +endif + +"Always show current position +set ruler + +" Height of the command bar +set cmdheight=1 + +" A buffer becomes hidden when it is abandoned +set hid + +" Configure backspace so it acts as it should act +set backspace=eol,start,indent +set whichwrap+=<,>,h,l + +" Ignore case when searching +set ignorecase + +" When searching try to be smart about cases +set smartcase + +" Highlight search results +set hlsearch + +" Makes search act like search in modern browsers +set incsearch + +" Don't redraw while executing macros (good performance config) +set lazyredraw + +" For regular expressions turn magic on +set magic + +" Show matching brackets when text indicator is over them +set showmatch +" How many tenths of a second to blink when matching brackets +set mat=2 + +" No annoying sound on errors +set noerrorbells +set novisualbell +set t_vb= +set tm=500 + +" Properly disable sound on errors on MacVim +if has("gui_macvim") + autocmd GUIEnter * set vb t_vb= +endif + + +" Add a bit extra margin to the left +set foldcolumn=1 + + +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" => Colors and Fonts +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" Enable syntax highlighting +syntax enable + +" Enable 256 colors palette in Gnome Terminal +if $COLORTERM == 'gnome-terminal' + set t_Co=256 +endif + +try + colorscheme darkelf +catch +endtry + +set background=dark + +" Set extra options when running in GUI mode +if has("gui_running") + set guioptions-=T + set guioptions-=e + set t_Co=256 + set guitablabel=%M\ %t +endif + +" Set utf8 as standard encoding and en_US as the standard language +set encoding=utf8 + +" Use Unix as the standard file type +set ffs=unix,dos,mac + + +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" => Files, backups and undo +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" Turn backup off, since most stuff is in SVN, git etc. anyway... +set nobackup +set nowb +set noswapfile + + +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" => Text, tab and indent related +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" Use spaces instead of tabs +set expandtab + +" Be smart when using tabs ;) +set smarttab + +" 1 tab == 4 spaces +set shiftwidth=4 +set tabstop=4 + +" Linebreak on 500 characters +set lbr +set tw=500 + +set ai "Auto indent +set si "Smart indent +set wrap "Wrap lines + + +"""""""""""""""""""""""""""""" +" => Visual mode related +"""""""""""""""""""""""""""""" +" Visual mode pressing * or # searches for the current selection +" Super useful! From an idea by Michael Naumann +vnoremap * :call VisualSelection('', '')/=@/ +vnoremap # :call VisualSelection('', '')?=@/ + + +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" => Moving around, tabs, windows and buffers +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" Map to / (search) and Ctrl- to ? (backwards search) +"map / +"map ? + +" Disable highlight when is pressed +map :noh + +" Smart way to move between windows +map j +map k +map h +map l + +" Close the current buffer +map bd :Bclose:tabclosegT + +" Close all the buffers +map ba :bufdo bd + +map bl :bnext +map bh :bprevious + +" Useful mappings for managing tabs +map tn :tabnew +map to :tabonly +map tc :tabclose +map tm :tabmove +map t :tabnext + +" Let 'tl' toggle between this and the last accessed tab +let g:lasttab = 1 +nmap tl :exe "tabn ".g:lasttab +au TabLeave * let g:lasttab = tabpagenr() + + +" Opens a new tab with the current buffer's path +" Super useful when editing files in the same directory +map te :tabedit =expand("%:p:h")/ + +" Switch CWD to the directory of the open buffer +map cd :cd %:p:h:pwd + +" Specify the behavior when switching between buffers +try + set switchbuf=useopen,usetab,newtab + set stal=2 +catch +endtry + +" Return to last edit position when opening files (You want this!) +au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif + + +"""""""""""""""""""""""""""""" +" => Status line +"""""""""""""""""""""""""""""" +" Always show the status line +set laststatus=2 + +" Format the status line +set statusline=\ %{HasPaste()}%F%m%r%h\ %w\ \ CWD:\ %r%{getcwd()}%h\ \ \ Line:\ %l\ \ Column:\ %c + + +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" => Editing mappings +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" Remap VIM 0 to first non-blank character +map 0 ^ + +" Move a line of text using ALT+[jk] or Command+[jk] on mac +nmap mz:m+`z +nmap mz:m-2`z +vmap :m'>+`mzgv`yo`z +vmap :m'<-2`>my` + nmap + vmap + vmap +endif + +" Delete trailing white space on save, useful for some filetypes ;) +fun! CleanExtraSpaces() + let save_cursor = getpos(".") + let old_query = getreg('/') + silent! %s/\s\+$//e + call setpos('.', save_cursor) + call setreg('/', old_query) +endfun + +if has("autocmd") + autocmd BufWritePre *.txt,*.js,*.py,*.wiki,*.sh,*.coffee :call CleanExtraSpaces() +endif + + +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" => Spell checking +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" Pressing ,ss will toggle and untoggle spell checking +map ss :setlocal spell! + +" Shortcuts using +map sn ]s +map sp [s +map sa zg +map s? z= + + +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" => Misc +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" Remove the Windows ^M - when the encodings gets messed up +noremap m mmHmt:%s///ge'tzt'm + +" Quickly open a buffer for scribble +map q :e ~/buffer + +" Quickly open a markdown buffer for scribble +map x :e ~/buffer.md + +" Toggle paste mode on and off +map pp :setlocal paste! + + +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" => Helper functions +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" Returns true if paste mode is enabled +function! HasPaste() + if &paste + return 'PASTE MODE ' + endif + return '' +endfunction + +" Don't close window, when deleting a buffer +command! Bclose call BufcloseCloseIt() +function! BufcloseCloseIt() + let l:currentBufNum = bufnr("%") + let l:alternateBufNum = bufnr("#") + + if buflisted(l:alternateBufNum) + buffer # + else + bnext + endif + + if bufnr("%") == l:currentBufNum + new + endif + + if buflisted(l:currentBufNum) + execute("bdelete! ".l:currentBufNum) + endif +endfunction + +function! CmdLine(str) + call feedkeys(":" . a:str) +endfunction + +function! VisualSelection(direction, extra_filter) range + let l:saved_reg = @" + execute "normal! vgvy" + + let l:pattern = escape(@", "\\/.*'$^~[]") + let l:pattern = substitute(l:pattern, "\n$", "", "") + + if a:direction == 'gv' + call CmdLine("Ack '" . l:pattern . "' " ) + elseif a:direction == 'replace' + call CmdLine("%s" . '/'. l:pattern . '/') + endif + + let @/ = l:pattern + let @" = l:saved_reg +endfunction diff --git a/nvim/disable/init.vim b/nvim/disable/init.vim new file mode 100644 index 0000000..9ae7454 --- /dev/null +++ b/nvim/disable/init.vim @@ -0,0 +1,357 @@ +lua require('config.lazy') + +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" => General +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +set mouse=a +" Sets how many lines of history VIM has to remember +set history=500 + +" Enable filetype plugins +filetype plugin on +filetype indent on + +" Set to auto read when a file is changed from the outside +set autoread +au FocusGained,BufEnter * checktime + +" With a map leader it's possible to do extra key combinations +" like w saves the current file +let mapleader = "," + +" Fast saving +nmap s :w! + +" :W sudo saves the file +" (useful for handling the permission-denied error) +command! W execute 'w !sudo tee % > /dev/null' edit! + + +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" => VIM user interface +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" Set 7 lines to the cursor - when moving vertically using j/k +set so=7 + +" Avoid garbled characters in Chinese language windows OS +let $LANG='en' +set langmenu=en +source $VIMRUNTIME/delmenu.vim +source $VIMRUNTIME/menu.vim + +" Turn on the Wild menu +set wildmenu + +" Ignore compiled files +set wildignore=*.o,*~,*.pyc +if has("win16") || has("win32") + set wildignore+=.git\*,.hg\*,.svn\* +else + set wildignore+=*/.git/*,*/.hg/*,*/.svn/*,*/.DS_Store +endif + +"Always show current position +set ruler + +" Height of the command bar +set cmdheight=1 + +" A buffer becomes hidden when it is abandoned +set hid + +" Configure backspace so it acts as it should act +set backspace=eol,start,indent +set whichwrap+=<,>,h,l + +" Ignore case when searching +set ignorecase + +" When searching try to be smart about cases +set smartcase + +" Highlight search results +set hlsearch + +" Makes search act like search in modern browsers +set incsearch + +" Don't redraw while executing macros (good performance config) +set lazyredraw + +" For regular expressions turn magic on +set magic + +" Show matching brackets when text indicator is over them +set showmatch +" How many tenths of a second to blink when matching brackets +set mat=2 + +" No annoying sound on errors +set noerrorbells +set novisualbell +set t_vb= +set tm=500 + +" Properly disable sound on errors on MacVim +if has("gui_macvim") + autocmd GUIEnter * set vb t_vb= +endif + + +" Add a bit extra margin to the left +set foldcolumn=1 + + +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" => Colors and Fonts +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" Enable syntax highlighting +syntax enable + +" Enable 256 colors palette in Gnome Terminal +if $COLORTERM == 'gnome-terminal' + set t_Co=256 +endif + +try + colorscheme darkelf +catch +endtry + +set background=dark + +" Set extra options when running in GUI mode +if has("gui_running") + set guioptions-=T + set guioptions-=e + set t_Co=256 + set guitablabel=%M\ %t +endif + +" Set utf8 as standard encoding and en_US as the standard language +set encoding=utf8 + +" Use Unix as the standard file type +set ffs=unix,dos,mac + + +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" => Files, backups and undo +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" Turn backup off, since most stuff is in SVN, git etc. anyway... +set nobackup +set nowb +set noswapfile + + +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" => Text, tab and indent related +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" Use spaces instead of tabs +set expandtab + +" Be smart when using tabs ;) +set smarttab + +" 1 tab == 4 spaces +set shiftwidth=4 +set tabstop=4 + +" Linebreak on 500 characters +set lbr +set tw=500 + +set ai "Auto indent +set si "Smart indent +set wrap "Wrap lines + + +"""""""""""""""""""""""""""""" +" => Visual mode related +"""""""""""""""""""""""""""""" +" Visual mode pressing * or # searches for the current selection +" Super useful! From an idea by Michael Naumann +vnoremap * :call VisualSelection('', '')/=@/ +vnoremap # :call VisualSelection('', '')?=@/ + + +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" => Moving around, tabs, windows and buffers +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" Map to / (search) and Ctrl- to ? (backwards search) +map / +map ? + +" Disable highlight when is pressed +map :noh + +" Smart way to move between windows +map j +map k +map h +map l + +" Close the current buffer +map bd :Bclose:tabclosegT + +" Close all the buffers +map ba :bufdo bd + +map bl :bnext +map bh :bprevious + +" Useful mappings for managing tabs +map tn :tabnew +map to :tabonly +map tc :tabclose +map tm :tabmove +map t :tabnext + +" Let 'tl' toggle between this and the last accessed tab +let g:lasttab = 1 +nmap tl :exe "tabn ".g:lasttab +au TabLeave * let g:lasttab = tabpagenr() + + +" Opens a new tab with the current buffer's path +" Super useful when editing files in the same directory +map te :tabedit =expand("%:p:h")/ + +" Switch CWD to the directory of the open buffer +map cd :cd %:p:h:pwd + +" Specify the behavior when switching between buffers +try + set switchbuf=useopen,usetab,newtab + set stal=2 +catch +endtry + +" Return to last edit position when opening files (You want this!) +au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif + + +"""""""""""""""""""""""""""""" +" => Status line +"""""""""""""""""""""""""""""" +" Always show the status line +set laststatus=2 + +" Format the status line +set statusline=\ %{HasPaste()}%F%m%r%h\ %w\ \ CWD:\ %r%{getcwd()}%h\ \ \ Line:\ %l\ \ Column:\ %c + + +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" => Editing mappings +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" Remap VIM 0 to first non-blank character +map 0 ^ + +" Move a line of text using ALT+[jk] or Command+[jk] on mac +nmap mz:m+`z +nmap mz:m-2`z +vmap :m'>+`mzgv`yo`z +vmap :m'<-2`>my` + nmap + vmap + vmap +endif + +" Delete trailing white space on save, useful for some filetypes ;) +fun! CleanExtraSpaces() + let save_cursor = getpos(".") + let old_query = getreg('/') + silent! %s/\s\+$//e + call setpos('.', save_cursor) + call setreg('/', old_query) +endfun + +if has("autocmd") + autocmd BufWritePre *.txt,*.js,*.py,*.wiki,*.sh,*.coffee :call CleanExtraSpaces() +endif + + +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" => Spell checking +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" Pressing ,ss will toggle and untoggle spell checking +map ss :setlocal spell! + +" Shortcuts using +map sn ]s +map sp [s +map sa zg +map s? z= + + +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" => Misc +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" Remove the Windows ^M - when the encodings gets messed up +noremap m mmHmt:%s///ge'tzt'm + +" Quickly open a buffer for scribble +map q :e ~/buffer + +" Quickly open a markdown buffer for scribble +map x :e ~/buffer.md + +" Toggle paste mode on and off +map pp :setlocal paste! + + +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" => Helper functions +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" Returns true if paste mode is enabled +function! HasPaste() + if &paste + return 'PASTE MODE ' + endif + return '' +endfunction + +" Don't close window, when deleting a buffer +command! Bclose call BufcloseCloseIt() +function! BufcloseCloseIt() + let l:currentBufNum = bufnr("%") + let l:alternateBufNum = bufnr("#") + + if buflisted(l:alternateBufNum) + buffer # + else + bnext + endif + + if bufnr("%") == l:currentBufNum + new + endif + + if buflisted(l:currentBufNum) + execute("bdelete! ".l:currentBufNum) + endif +endfunction + +function! CmdLine(str) + call feedkeys(":" . a:str) +endfunction + +function! VisualSelection(direction, extra_filter) range + let l:saved_reg = @" + execute "normal! vgvy" + + let l:pattern = escape(@", "\\/.*'$^~[]") + let l:pattern = substitute(l:pattern, "\n$", "", "") + + if a:direction == 'gv' + call CmdLine("Ack '" . l:pattern . "' " ) + elseif a:direction == 'replace' + call CmdLine("%s" . '/'. l:pattern . '/') + endif + + let @/ = l:pattern + let @" = l:saved_reg +endfunction diff --git a/nvim/disable/rocks.toml b/nvim/disable/rocks.toml new file mode 100644 index 0000000..bb0dc17 --- /dev/null +++ b/nvim/disable/rocks.toml @@ -0,0 +1,21 @@ +# This is your rocks.nvim plugins declaration file. +# Here is a small yet pretty detailed example on how to use it: +# +# [plugins] +# nvim-treesitter = "semver_version" # e.g. "1.0.0" + +# List of non-Neovim rocks. +# This includes things like `toml` or other lua packages. +[rocks] + +# List of Neovim plugins to install alongside their versions. +# If the plugin name contains a dot then you must add quotes to the key name! +[plugins] +"rocks.nvim" = "2.43.1" # rocks.nvim can also manage itself :D +"rocks-config.nvim" = "3.1.0" +neorg = "9.3.0" +"rocks-git.nvim" = "2.5.3" + +[plugins.nvim-treesitter] +git = "nvim-treesitter/nvim-treesitter" +rev = "v0.9.3" diff --git a/nvim/fonts/LICENCE-FAQ.txt b/nvim/fonts/LICENCE-FAQ.txt new file mode 100644 index 0000000..776a25e --- /dev/null +++ b/nvim/fonts/LICENCE-FAQ.txt @@ -0,0 +1,177 @@ + Ubuntu Font Family Licensing FAQ + + Stylistic Foundations + + The Ubuntu Font Family is the first time that a libre typeface has been + designed professionally and explicitly with the intent of developing a + public and long-term community-based development process. + + When developing an open project, it is generally necessary to have firm + foundations: a font needs to maintain harmony within itself even across + many type designers and writing systems. For the [1]Ubuntu Font Family, + the process has been guided with the type foundry Dalton Maag setting + the project up with firm stylistic foundation covering several + left-to-right scripts: Latin, Greek and Cyrillic; and right-to-left + scripts: Arabic and Hebrew (due in 2011). + + With this starting point the community will, under the supervision of + [2]Canonical and [3]Dalton Maag, be able to build on the existing font + sources to expand their character coverage. Ultimately everybody will + be able to use the Ubuntu Font Family in their own written languages + across the whole of Unicode (and this will take some time!). + + Licensing + + The licence chosen by any free software project is one of the + foundational decisions that sets out how derivatives and contributions + can occur, and in turn what kind of community will form around the + project. + + Using a licence that is compatible with other popular licences is a + powerful constraint because of the [4]network effects: the freedom to + share improvements between projects allows free software to reach + high-quality over time. Licence-proliferation leads to many + incompatible licences, undermining the network effect, the freedom to + share and ultimately making the libre movement that Ubuntu is a part of + less effective. For all kinds of software, writing a new licence is not + to be taken lightly and is a choice that needs to be thoroughly + justified if this path is taken. + + Today it is not clear to Canonical what the best licence for a font + project like the Ubuntu Font Family is: one that starts life designed + by professionals and continues with the full range of community + development, from highly commercial work in new directions to curious + beginners' experimental contributions. The fast and steady pace of the + Ubuntu release cycle means that an interim libre licence has been + necessary to enable the consideration of the font family as part of + Ubuntu 10.10 operating system release. + + Before taking any decision on licensing, Canonical as sponsor and + backer of the project has reviewed the many existing licenses used for + libre/open fonts and engaged the stewards of the most popular licenses + in detailed discussions. The current interim licence is the first step + in progressing the state-of-the-art in licensing for libre/open font + development. + + The public discussion must now involve everyone in the (comparatively + new) area of the libre/open font community; including font users, + software freedom advocates, open source supporters and existing libre + font developers. Most importantly, the minds and wishes of professional + type designers considering entering the free software business + community must be taken on board. + + Conversations and discussion has taken place, privately, with + individuals from the following groups (generally speaking personally on + behalf of themselves, rather than their affiliations): + * [5]SIL International + * [6]Open Font Library + * [7]Software Freedom Law Center + * [8]Google Font API + + Document embedding + + One issue highlighted early on in the survey of existing font licences + is that of document embedding. Almost all font licences, both free and + unfree, permit embedding a font into a document to a certain degree. + Embedding a font with other works that make up a document creates a + "combined work" and copyleft would normally require the whole document + to be distributed under the terms of the font licence. As beautiful as + the font might be, such a licence makes a font too restrictive for + useful general purpose digital publishing. + + The situation is not entirely unique to fonts and is encountered also + with tools such as GNU Bison: a vanilla GNU GPL licence would require + anything generated with Bison to be made available under the terms of + the GPL as well. To avoid this, Bison is [9]published with an + additional permission to the GPL which allows the output of Bison to be + made available under any licence. + + The conflict between licensing of fonts and licensing of documents, is + addressed in two popular libre font licences, the SIL OFL and GNU GPL: + * [10]SIL Open Font Licence: When OFL fonts are embedded in a + document, the OFL's terms do not apply to that document. (See + [11]OFL-FAQ for details. + * [12]GPL Font Exception: The situation is resolved by granting an + additional permission to allow documents to not be covered by the + GPL. (The exception is being reviewed). + + The Ubuntu Font Family must also resolve this conflict, ensuring that + if the font is embedded and then extracted it is once again clearly + under the terms of its libre licence. + + Long-term licensing + + Those individuals involved, especially from Ubuntu and Canonical, are + interested in finding a long-term libre licence that finds broad favour + across the whole libre/open font community. The deliberation during the + past months has been on how to licence the Ubuntu Font Family in the + short-term, while knowingly encouraging everyone to pursue a long-term + goal. + * [13]Copyright assignment will be required so that the Ubuntu Font + Family's licensing can be progressively expanded to one (or more) + licences, as best practice continues to evolve within the + libre/open font community. + * Canonical will support and fund legal work on libre font licensing. + It is recognised that the cost and time commitments required are + likely to be significant. We invite other capable parties to join + in supporting this activity. + + The GPL version 3 (GPLv3) will be used for Ubuntu Font Family build + scripts and the CC-BY-SA for associated documentation and non-font + content: all items which do not end up embedded in general works and + documents. + +Ubuntu Font Licence + + For the short-term only, the initial licence is the [14]Ubuntu Font + License (UFL). This is loosely inspired from the work on the SIL + OFL 1.1, and seeks to clarify the issues that arose during discussions + and legal review, from the perspective of the backers, Canonical Ltd. + Those already using established licensing models such as the GPL, OFL + or Creative Commons licensing should have no worries about continuing + to use them. The Ubuntu Font Licence (UFL) and the SIL Open Font + Licence (SIL OFL) are not identical and should not be confused with + each other. Please read the terms precisely. The UFL is only intended + as an interim license, and the overriding aim is to support the + creation of a more suitable and generic libre font licence. As soon as + such a licence is developed, the Ubuntu Font Family will migrate to + it—made possible by copyright assignment in the interium. Between the + OFL 1.1, and the UFL 1.0, the following changes are made to produce the + Ubuntu Font Licence: + * Clarification: + + 1. Document embedding (see [15]embedding section above). + 2. Apply at point of distribution, instead of receipt + 3. Author vs. copyright holder disambiguation (type designers are + authors, with the copyright holder normally being the funder) + 4. Define "Propagate" (for internationalisation, similar to the GPLv3) + 5. Define "Substantially Changed" + 6. Trademarks are explicitly not transferred + 7. Refine renaming requirement + + Streamlining: + 8. Remove "not to be sold separately" clause + 9. Remove "Reserved Font Name(s)" declaration + + A visual demonstration of how these points were implemented can be + found in the accompanying coloured diff between SIL OFL 1.1 and the + Ubuntu Font Licence 1.0: [16]ofl-1.1-ufl-1.0.diff.html + +References + + 1. http://font.ubuntu.com/ + 2. http://www.canonical.com/ + 3. http://www.daltonmaag.com/ + 4. http://en.wikipedia.org/wiki/Network_effect + 5. http://scripts.sil.org/ + 6. http://openfontlibrary.org/ + 7. http://www.softwarefreedom.org/ + 8. http://code.google.com/webfonts + 9. http://www.gnu.org/licenses/gpl-faq.html#CanIUseGPLToolsForNF + 10. http://scripts.sil.org/OFL_web + 11. http://scripts.sil.org/OFL-FAQ_web + 12. http://www.gnu.org/licenses/gpl-faq.html#FontException + 13. https://launchpad.net/~uff-contributors + 14. http://font.ubuntu.com/ufl/ubuntu-font-licence-1.0.txt + 15. http://font.ubuntu.com/ufl/FAQ.html#embedding + 16. http://font.ubuntu.com/ufl/ofl-1.1-ufl-1.0.diff.html diff --git a/nvim/fonts/LICENCE.txt b/nvim/fonts/LICENCE.txt new file mode 100644 index 0000000..ae78a8f --- /dev/null +++ b/nvim/fonts/LICENCE.txt @@ -0,0 +1,96 @@ +------------------------------- +UBUNTU FONT LICENCE Version 1.0 +------------------------------- + +PREAMBLE +This licence allows the licensed fonts to be used, studied, modified and +redistributed freely. The fonts, including any derivative works, can be +bundled, embedded, and redistributed provided the terms of this licence +are met. The fonts and derivatives, however, cannot be released under +any other licence. The requirement for fonts to remain under this +licence does not require any document created using the fonts or their +derivatives to be published under this licence, as long as the primary +purpose of the document is not to be a vehicle for the distribution of +the fonts. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this licence and clearly marked as such. This may +include source files, build scripts and documentation. + +"Original Version" refers to the collection of Font Software components +as received under this licence. + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to +a new environment. + +"Copyright Holder(s)" refers to all individuals and companies who have a +copyright ownership of the Font Software. + +"Substantially Changed" refers to Modified Versions which can be easily +identified as dissimilar to the Font Software by users of the Font +Software comparing the Original Version with the Modified Version. + +To "Propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification and with or without charging +a redistribution fee), making available to the public, and in some +countries other activities as well. + +PERMISSION & CONDITIONS +This licence does not grant any rights under trademark law and all such +rights are reserved. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of the Font Software, to propagate the Font Software, subject to +the below conditions: + +1) Each copy of the Font Software must contain the above copyright +notice and this licence. These can be included either as stand-alone +text files, human-readable headers or in the appropriate machine- +readable metadata fields within text or binary files as long as those +fields can be easily viewed by the user. + +2) The font name complies with the following: +(a) The Original Version must retain its name, unmodified. +(b) Modified Versions which are Substantially Changed must be renamed to +avoid use of the name of the Original Version or similar names entirely. +(c) Modified Versions which are not Substantially Changed must be +renamed to both (i) retain the name of the Original Version and (ii) add +additional naming elements to distinguish the Modified Version from the +Original Version. The name of such Modified Versions must be the name of +the Original Version, with "derivative X" where X represents the name of +the new work, appended to that name. + +3) The name(s) of the Copyright Holder(s) and any contributor to the +Font Software shall not be used to promote, endorse or advertise any +Modified Version, except (i) as required by this licence, (ii) to +acknowledge the contribution(s) of the Copyright Holder(s) or (iii) with +their explicit written permission. + +4) The Font Software, modified or unmodified, in part or in whole, must +be distributed entirely under this licence, and must not be distributed +under any other licence. The requirement for fonts to remain under this +licence does not affect any document created using the Font Software, +except any version of the Font Software extracted from a document +created using the Font Software may only be distributed under this +licence. + +TERMINATION +This licence becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF +COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER +DEALINGS IN THE FONT SOFTWARE. diff --git a/nvim/fonts/README.md b/nvim/fonts/README.md new file mode 100644 index 0000000..8a30d88 --- /dev/null +++ b/nvim/fonts/README.md @@ -0,0 +1,57 @@ +# Nerd Fonts + +This is an archived font from the Nerd Fonts release v3.3.0. + +For more information see: +* https://github.com/ryanoasis/nerd-fonts/ +* https://github.com/ryanoasis/nerd-fonts/releases/latest/ + +# Ubuntu Mono + +The Ubuntu Font Family are a set of matching new libre/open fonts in +development during 2010--2011. And with further expansion work and +bug fixing during 2015. The development is being funded by +Canonical Ltd on behalf the wider Free Software community and the +Ubuntu project. The technical font design work and implementation is +being undertaken by Dalton Maag. + +Both the final font Truetype/OpenType files and the design files used +to produce the font family are distributed under an open licence and +you are expressly encouraged to experiment, modify, share and improve. + +http://font.ubuntu.com/ + +Version: 0.80 + +## Which font? + +### TL;DR + +* Pick your font family: + * If you are limited to monospaced fonts (because of your terminal, etc) then pick a font with `Nerd Font Mono` (or `NFM`). + * If you want to have bigger icons (usually around 1.5 normal letters wide) pick a font without `Mono` i.e. `Nerd Font` (or `NF`). Most terminals support this, but ymmv. + * If you work in a proportional context (GUI elements or edit a presentation etc) pick a font with `Nerd Font Propo` (or `NFP`). + +### Ligatures + +Ligatures are generally preserved in the patched fonts. +Nerd Fonts `v2.0.0` had no ligatures in the `Nerd Font Mono` fonts, this has been dropped with `v2.1.0`. +If you have a ligature-aware terminal and don't want ligatures you can (usually) disable them in the terminal settings. + +### Explanation + +Once you narrow down your font choice of family (`Droid Sans`, `Inconsolata`, etc) and style (`bold`, `italic`, etc) you have 2 main choices: + +#### `Option 1: Download already patched font` + + * For a stable version download a font package from the [release page](https://github.com/ryanoasis/nerd-fonts/releases) + * Or download the development version from the folders here + +#### `Option 2: Patch your own font` + + * Patch your own variations with the various options provided by the font patcher (i.e. not include all symbols for smaller font size) + +For more information see: [The FAQ](https://github.com/ryanoasis/nerd-fonts/wiki/FAQ-and-Troubleshooting#which-font) + +[SIL-RFN]:http://scripts.sil.org/cms/scripts/page.php?item_id=OFL_web_fonts_and_RFNs#14cbfd4a + diff --git a/nvim/fonts/UbuntuMonoNerdFont-Bold.ttf b/nvim/fonts/UbuntuMonoNerdFont-Bold.ttf new file mode 100644 index 0000000..2204841 Binary files /dev/null and b/nvim/fonts/UbuntuMonoNerdFont-Bold.ttf differ diff --git a/nvim/fonts/UbuntuMonoNerdFont-BoldItalic.ttf b/nvim/fonts/UbuntuMonoNerdFont-BoldItalic.ttf new file mode 100644 index 0000000..9636d2b Binary files /dev/null and b/nvim/fonts/UbuntuMonoNerdFont-BoldItalic.ttf differ diff --git a/nvim/fonts/UbuntuMonoNerdFont-Italic.ttf b/nvim/fonts/UbuntuMonoNerdFont-Italic.ttf new file mode 100644 index 0000000..ff60277 Binary files /dev/null and b/nvim/fonts/UbuntuMonoNerdFont-Italic.ttf differ diff --git a/nvim/fonts/UbuntuMonoNerdFont-Regular.ttf b/nvim/fonts/UbuntuMonoNerdFont-Regular.ttf new file mode 100644 index 0000000..3aca9d9 Binary files /dev/null and b/nvim/fonts/UbuntuMonoNerdFont-Regular.ttf differ diff --git a/nvim/fonts/UbuntuMonoNerdFontMono-Bold.ttf b/nvim/fonts/UbuntuMonoNerdFontMono-Bold.ttf new file mode 100644 index 0000000..42e3469 Binary files /dev/null and b/nvim/fonts/UbuntuMonoNerdFontMono-Bold.ttf differ diff --git a/nvim/fonts/UbuntuMonoNerdFontMono-BoldItalic.ttf b/nvim/fonts/UbuntuMonoNerdFontMono-BoldItalic.ttf new file mode 100644 index 0000000..006d89d Binary files /dev/null and b/nvim/fonts/UbuntuMonoNerdFontMono-BoldItalic.ttf differ diff --git a/nvim/fonts/UbuntuMonoNerdFontMono-Italic.ttf b/nvim/fonts/UbuntuMonoNerdFontMono-Italic.ttf new file mode 100644 index 0000000..4273ce0 Binary files /dev/null and b/nvim/fonts/UbuntuMonoNerdFontMono-Italic.ttf differ diff --git a/nvim/fonts/UbuntuMonoNerdFontMono-Regular.ttf b/nvim/fonts/UbuntuMonoNerdFontMono-Regular.ttf new file mode 100644 index 0000000..db3abd6 Binary files /dev/null and b/nvim/fonts/UbuntuMonoNerdFontMono-Regular.ttf differ diff --git a/nvim/fonts/UbuntuMonoNerdFontPropo-Bold.ttf b/nvim/fonts/UbuntuMonoNerdFontPropo-Bold.ttf new file mode 100644 index 0000000..f16eb50 Binary files /dev/null and b/nvim/fonts/UbuntuMonoNerdFontPropo-Bold.ttf differ diff --git a/nvim/fonts/UbuntuMonoNerdFontPropo-BoldItalic.ttf b/nvim/fonts/UbuntuMonoNerdFontPropo-BoldItalic.ttf new file mode 100644 index 0000000..40eab77 Binary files /dev/null and b/nvim/fonts/UbuntuMonoNerdFontPropo-BoldItalic.ttf differ diff --git a/nvim/fonts/UbuntuMonoNerdFontPropo-Italic.ttf b/nvim/fonts/UbuntuMonoNerdFontPropo-Italic.ttf new file mode 100644 index 0000000..dfbd684 Binary files /dev/null and b/nvim/fonts/UbuntuMonoNerdFontPropo-Italic.ttf differ diff --git a/nvim/fonts/UbuntuMonoNerdFontPropo-Regular.ttf b/nvim/fonts/UbuntuMonoNerdFontPropo-Regular.ttf new file mode 100644 index 0000000..702e080 Binary files /dev/null and b/nvim/fonts/UbuntuMonoNerdFontPropo-Regular.ttf differ diff --git a/nvim/init.lua b/nvim/init.lua new file mode 100644 index 0000000..96c5145 --- /dev/null +++ b/nvim/init.lua @@ -0,0 +1,25 @@ +require("config.lazy") +-- +-- local o = vim.opt +-- o.compatible = false +-- o.number = true +-- o.cmdheight = 2 +-- o.expandtab = true +-- o.smarttab = true +-- o.shiftwidth = 4 +-- o.tabstop = 4 +-- o.ai = true +-- o.si = true +-- +-- nvim_create_user_command("InsertTodayHeader", ':pu=strftime("# %a %d %b %Y")', {}) +-- +vim.opt.foldmethod = "expr" +vim.opt.foldexpr = "v:lua.MyCustomFoldExpr()" + +function _G.MyCustomFoldExpr() + local line = vim.fn.getline(vim.v.lnum) + if line:match("::$") then + return "=" -- keep the same fold level as the previous line + end + return vim.treesitter.foldexpr() +end diff --git a/nvim/lazyvim.json b/nvim/lazyvim.json new file mode 100644 index 0000000..75de891 --- /dev/null +++ b/nvim/lazyvim.json @@ -0,0 +1,34 @@ +{ + "extras": [ + "lazyvim.plugins.extras.coding.luasnip", + "lazyvim.plugins.extras.coding.mini-comment", + "lazyvim.plugins.extras.coding.mini-snippets", + "lazyvim.plugins.extras.coding.yanky", + "lazyvim.plugins.extras.editor.dial", + "lazyvim.plugins.extras.editor.inc-rename", + "lazyvim.plugins.extras.editor.mini-diff", + "lazyvim.plugins.extras.editor.mini-files", + "lazyvim.plugins.extras.editor.mini-move", + "lazyvim.plugins.extras.editor.neo-tree", + "lazyvim.plugins.extras.editor.outline", + "lazyvim.plugins.extras.editor.snacks_explorer", + "lazyvim.plugins.extras.lang.ansible", + "lazyvim.plugins.extras.lang.clojure", + "lazyvim.plugins.extras.lang.docker", + "lazyvim.plugins.extras.lang.git", + "lazyvim.plugins.extras.lang.helm", + "lazyvim.plugins.extras.lang.json", + "lazyvim.plugins.extras.lang.php", + "lazyvim.plugins.extras.lang.python", + "lazyvim.plugins.extras.lang.sql", + "lazyvim.plugins.extras.lang.yaml", + "lazyvim.plugins.extras.util.dot", + "lazyvim.plugins.extras.util.gitui", + "lazyvim.plugins.extras.util.mini-hipatterns" + ], + "install_version": 8, + "news": { + "NEWS.md": "10960" + }, + "version": 8 +} \ No newline at end of file diff --git a/nvim/lua/config/autocmds.lua b/nvim/lua/config/autocmds.lua new file mode 100644 index 0000000..4221e75 --- /dev/null +++ b/nvim/lua/config/autocmds.lua @@ -0,0 +1,8 @@ +-- Autocmds are automatically loaded on the VeryLazy event +-- Default autocmds that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/autocmds.lua +-- +-- Add any additional autocmds here +-- with `vim.api.nvim_create_autocmd` +-- +-- Or remove existing autocmds by their group name (which is prefixed with `lazyvim_` for the defaults) +-- e.g. vim.api.nvim_del_augroup_by_name("lazyvim_wrap_spell") diff --git a/nvim/lua/config/keymaps.lua b/nvim/lua/config/keymaps.lua new file mode 100644 index 0000000..5ea8803 --- /dev/null +++ b/nvim/lua/config/keymaps.lua @@ -0,0 +1,12 @@ +-- Keymaps are automatically loaded on the VeryLazy event +-- Default keymaps that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/keymaps.lua +-- Add any additional keymaps here +-- +vim.api.nvim_set_keymap("i", "jj", "", { noremap = false }) + +local wk = require("which-key") + +wk.add({ + { "N", group = "Neorg" }, + { "Nt", ":Neorg journal today", desc = "Today" }, +}) diff --git a/nvim/lua/config/lazy.lua b/nvim/lua/config/lazy.lua new file mode 100644 index 0000000..999d2ae --- /dev/null +++ b/nvim/lua/config/lazy.lua @@ -0,0 +1,66 @@ +-- Bootstrap lazy.nvim +local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" +if not (vim.uv or vim.loop).fs_stat(lazypath) then + local lazyrepo = "https://github.com/folke/lazy.nvim.git" + local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) + if vim.v.shell_error ~= 0 then + vim.api.nvim_echo({ + { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, + { out, "WarningMsg" }, + { "\nPress any key to exit..." }, + }, true, {}) + vim.fn.getchar() + os.exit(1) + end +end +vim.opt.rtp:prepend(lazypath) + +-- Make sure to setup `mapleader` and `maplocalleader` before +-- loading lazy.nvim so that mappings are correct. +-- This is also a good place to setup other settings (vim.opt) +vim.g.mapleader = "," +vim.g.maplocalleader = "," + +-- Setup lazy.nvim +require("lazy").setup({ + spec = { + -- add LazyVim and import its plugins + { "LazyVim/LazyVim", import = "lazyvim.plugins" }, + -- import/override with your plugins + { import = "plugins" }, + }, + defaults = { + -- By default, only LazyVim plugins will be lazy-loaded. Your custom plugins will load during startup. + -- If you know what you're doing, you can set this to `true` to have all your custom plugins lazy-loaded by default. + lazy = false, + -- It's recommended to leave version=false for now, since a lot the plugin that support versioning, + -- have outdated releases, which may break your Neovim install. + version = false, -- always use the latest git commit + -- version = "*", -- try installing the latest stable version for plugins that support semver + }, + install = { colorscheme = { "tokyonight", "habamax" } }, + checker = { + enabled = true, -- check for plugin updates periodically + notify = false, -- notify on update + }, -- automatically check for plugin updates + performance = { + rtp = { + -- disable some rtp plugins + disabled_plugins = { + "gzip", + -- "matchit", + -- "matchparen", + -- "netrwPlugin", + "tarPlugin", + "tohtml", + "tutor", + "zipPlugin", + }, + }, + }, + -- Configure any other settings here. See the documentation for more details. + -- colorscheme that will be used when installing plugins. + install = { colorscheme = { "habamax" } }, + -- automatically check for plugin updates + checker = { enabled = true }, +}) diff --git a/nvim/lua/config/lazy.lua.diff b/nvim/lua/config/lazy.lua.diff new file mode 100644 index 0000000..d73bfa1 --- /dev/null +++ b/nvim/lua/config/lazy.lua.diff @@ -0,0 +1,53 @@ +local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" +if not (vim.uv or vim.loop).fs_stat(lazypath) then + local lazyrepo = "https://github.com/folke/lazy.nvim.git" + local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) + if vim.v.shell_error ~= 0 then + vim.api.nvim_echo({ + { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, + { out, "WarningMsg" }, + { "\nPress any key to exit..." }, + }, true, {}) + vim.fn.getchar() + os.exit(1) + end +end +vim.opt.rtp:prepend(lazypath) + +require("lazy").setup({ + spec = { + -- add LazyVim and import its plugins + { "LazyVim/LazyVim", import = "lazyvim.plugins" }, + -- import/override with your plugins + { import = "plugins" }, + }, + defaults = { + -- By default, only LazyVim plugins will be lazy-loaded. Your custom plugins will load during startup. + -- If you know what you're doing, you can set this to `true` to have all your custom plugins lazy-loaded by default. + lazy = false, + -- It's recommended to leave version=false for now, since a lot the plugin that support versioning, + -- have outdated releases, which may break your Neovim install. + version = false, -- always use the latest git commit + -- version = "*", -- try installing the latest stable version for plugins that support semver + }, + install = { colorscheme = { "tokyonight", "habamax" } }, + checker = { + enabled = true, -- check for plugin updates periodically + notify = false, -- notify on update + }, -- automatically check for plugin updates + performance = { + rtp = { + -- disable some rtp plugins + disabled_plugins = { + "gzip", + -- "matchit", + -- "matchparen", + -- "netrwPlugin", + "tarPlugin", + "tohtml", + "tutor", + "zipPlugin", + }, + }, + }, +}) diff --git a/nvim/lua/config/options.lua b/nvim/lua/config/options.lua new file mode 100644 index 0000000..3ea1454 --- /dev/null +++ b/nvim/lua/config/options.lua @@ -0,0 +1,3 @@ +-- Options are automatically loaded before lazy.nvim startup +-- Default options that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/options.lua +-- Add any additional options here diff --git a/nvim/lua/plugins.disable/example.lua b/nvim/lua/plugins.disable/example.lua new file mode 100644 index 0000000..17f53d6 --- /dev/null +++ b/nvim/lua/plugins.disable/example.lua @@ -0,0 +1,197 @@ +-- since this is just an example spec, don't actually load anything here and return an empty spec +-- stylua: ignore +if true then return {} end + +-- every spec file under the "plugins" directory will be loaded automatically by lazy.nvim +-- +-- In your plugin files, you can: +-- * add extra plugins +-- * disable/enabled LazyVim plugins +-- * override the configuration of LazyVim plugins +return { + -- add gruvbox + { "ellisonleao/gruvbox.nvim" }, + + -- Configure LazyVim to load gruvbox + { + "LazyVim/LazyVim", + opts = { + colorscheme = "gruvbox", + }, + }, + + -- change trouble config + { + "folke/trouble.nvim", + -- opts will be merged with the parent spec + opts = { use_diagnostic_signs = true }, + }, + + -- disable trouble + { "folke/trouble.nvim", enabled = false }, + + -- override nvim-cmp and add cmp-emoji + { + "hrsh7th/nvim-cmp", + dependencies = { "hrsh7th/cmp-emoji" }, + ---@param opts cmp.ConfigSchema + opts = function(_, opts) + table.insert(opts.sources, { name = "emoji" }) + end, + }, + + -- change some telescope options and a keymap to browse plugin files + { + "nvim-telescope/telescope.nvim", + keys = { + -- add a keymap to browse plugin files + -- stylua: ignore + { + "fp", + function() require("telescope.builtin").find_files({ cwd = require("lazy.core.config").options.root }) end, + desc = "Find Plugin File", + }, + }, + -- change some options + opts = { + defaults = { + layout_strategy = "horizontal", + layout_config = { prompt_position = "top" }, + sorting_strategy = "ascending", + winblend = 0, + }, + }, + }, + + -- add pyright to lspconfig + { + "neovim/nvim-lspconfig", + ---@class PluginLspOpts + opts = { + ---@type lspconfig.options + servers = { + -- pyright will be automatically installed with mason and loaded with lspconfig + pyright = {}, + }, + }, + }, + + -- add tsserver and setup with typescript.nvim instead of lspconfig + { + "neovim/nvim-lspconfig", + dependencies = { + "jose-elias-alvarez/typescript.nvim", + init = function() + require("lazyvim.util").lsp.on_attach(function(_, buffer) + -- stylua: ignore + vim.keymap.set( "n", "co", "TypescriptOrganizeImports", { buffer = buffer, desc = "Organize Imports" }) + vim.keymap.set("n", "cR", "TypescriptRenameFile", { desc = "Rename File", buffer = buffer }) + end) + end, + }, + ---@class PluginLspOpts + opts = { + ---@type lspconfig.options + servers = { + -- tsserver will be automatically installed with mason and loaded with lspconfig + tsserver = {}, + }, + -- you can do any additional lsp server setup here + -- return true if you don't want this server to be setup with lspconfig + ---@type table + setup = { + -- example to setup with typescript.nvim + tsserver = function(_, opts) + require("typescript").setup({ server = opts }) + return true + end, + -- Specify * to use this function as a fallback for any server + -- ["*"] = function(server, opts) end, + }, + }, + }, + + -- for typescript, LazyVim also includes extra specs to properly setup lspconfig, + -- treesitter, mason and typescript.nvim. So instead of the above, you can use: + { import = "lazyvim.plugins.extras.lang.typescript" }, + + -- add more treesitter parsers + { + "nvim-treesitter/nvim-treesitter", + opts = { + ensure_installed = { + "bash", + "html", + "javascript", + "json", + "lua", + "markdown", + "markdown_inline", + "python", + "query", + "regex", + "tsx", + "typescript", + "vim", + "yaml", + }, + }, + }, + + -- since `vim.tbl_deep_extend`, can only merge tables and not lists, the code above + -- would overwrite `ensure_installed` with the new value. + -- If you'd rather extend the default config, use the code below instead: + { + "nvim-treesitter/nvim-treesitter", + opts = function(_, opts) + -- add tsx and treesitter + vim.list_extend(opts.ensure_installed, { + "tsx", + "typescript", + }) + end, + }, + + -- the opts function can also be used to change the default opts: + { + "nvim-lualine/lualine.nvim", + event = "VeryLazy", + opts = function(_, opts) + table.insert(opts.sections.lualine_x, { + function() + return "đŸ˜„" + end, + }) + end, + }, + + -- or you can return new options to override all the defaults + { + "nvim-lualine/lualine.nvim", + event = "VeryLazy", + opts = function() + return { + --[[add your custom lualine config here]] + } + end, + }, + + -- use mini.starter instead of alpha + { import = "lazyvim.plugins.extras.ui.mini-starter" }, + + -- add jsonls and schemastore packages, and setup treesitter for json, json5 and jsonc + { import = "lazyvim.plugins.extras.lang.json" }, + + -- add any tools you want to have installed below + { + "williamboman/mason.nvim", + opts = { + ensure_installed = { + "stylua", + "shellcheck", + "shfmt", + "flake8", + }, + }, + }, +} diff --git a/nvim/lua/plugins.disable/lualine.lua b/nvim/lua/plugins.disable/lualine.lua new file mode 100644 index 0000000..5f69610 --- /dev/null +++ b/nvim/lua/plugins.disable/lualine.lua @@ -0,0 +1,4 @@ +return { + 'nvim-lualine/lualine.nvim', + dependencies = { 'nvim-tree/nvim-web-devicons' } +} diff --git a/nvim/lua/plugins.disable/neo-tree.lua b/nvim/lua/plugins.disable/neo-tree.lua new file mode 100644 index 0000000..2510423 --- /dev/null +++ b/nvim/lua/plugins.disable/neo-tree.lua @@ -0,0 +1,16 @@ +return { + "nvim-neo-tree/neo-tree.nvim", + branch = "v3.x", + dependencies = { + "nvim-lua/plenary.nvim", + "nvim-tree/nvim-web-devicons", -- not strictly required, but recommended + "MunifTanjim/nui.nvim", + -- {"3rd/image.nvim", opts = {}}, -- Optional image support in preview window: See `# Preview Mode` for more information + }, + lazy = false, -- neo-tree will lazily load itself + ---@module "neo-tree" + ---@type neotree.Config? + opts = { + -- fill any relevant options here + }, +} diff --git a/nvim/lua/plugins.disable/neorg.lua b/nvim/lua/plugins.disable/neorg.lua new file mode 100644 index 0000000..cd09521 --- /dev/null +++ b/nvim/lua/plugins.disable/neorg.lua @@ -0,0 +1,7 @@ +require("neorg").setup({ + load = { + ["core.defaults"] = {}, + ["core.concealer"] = {}, + ["core.dirman"] = {}, + } +}) diff --git a/nvim/lua/plugins.disable/treesitter.lua b/nvim/lua/plugins.disable/treesitter.lua new file mode 100644 index 0000000..d0ce35f --- /dev/null +++ b/nvim/lua/plugins.disable/treesitter.lua @@ -0,0 +1,3 @@ +return { + "nvim-treesitter/nvim-treesitter" +} diff --git a/nvim/lua/plugins.disable/which-key.lua b/nvim/lua/plugins.disable/which-key.lua new file mode 100644 index 0000000..89b1ca0 --- /dev/null +++ b/nvim/lua/plugins.disable/which-key.lua @@ -0,0 +1,18 @@ +return { + "folke/which-key.nvim", + event = "VeryLazy", + opts = { + -- your configuration comes here + -- or leave it empty to use the default settings + -- refer to the configuration section below + }, + keys = { + { + { "N", group = "Neorg" }, + { "Nt", ":Neorg journal today", desc = "Today" }, + }, + }, +} +--{ "c", group = "ChatGPT" }, +--{ "cc", ":ChatGPT", desc = "ChatGPT" }, +--{ "ce", ":ChatGPTEditWithInstructions", desc = "ChatGPT Edit Selection with Instructions" }, diff --git a/nvim/lua/plugins/blink.lua b/nvim/lua/plugins/blink.lua new file mode 100644 index 0000000..5e06f49 --- /dev/null +++ b/nvim/lua/plugins/blink.lua @@ -0,0 +1,21 @@ +return { + { + "saghen/blink.cmp", + opts = { + completion = { + ghost_text = { + enabled = false, + }, + list = { + selection = { + preselect = false, + auto_insert = true, + }, + }, + menu = { + auto_show = false, + }, + }, + }, + }, +} diff --git a/nvim/lua/plugins/chatgpt.lua b/nvim/lua/plugins/chatgpt.lua new file mode 100644 index 0000000..2186a34 --- /dev/null +++ b/nvim/lua/plugins/chatgpt.lua @@ -0,0 +1,17 @@ +return { + "jackMort/ChatGPT.nvim", + event = "VeryLazy", + config = function() + require("chatgpt").setup({ + openai_params = { + model = "gpt-4.1" + } + }) + end, + dependencies = { + "MunifTanjim/nui.nvim", + "nvim-lua/plenary.nvim", + "folke/trouble.nvim", -- optional + "nvim-telescope/telescope.nvim" + } +} diff --git a/nvim/lua/plugins/copilot.lua b/nvim/lua/plugins/copilot.lua new file mode 100644 index 0000000..eda7b1a --- /dev/null +++ b/nvim/lua/plugins/copilot.lua @@ -0,0 +1,3 @@ +return { + { "zbirenbaum/copilot.lua", opts = { suggestion = { enabled = false } } }, +} diff --git a/nvim/lua/plugins/follow-md-links.lua b/nvim/lua/plugins/follow-md-links.lua new file mode 100644 index 0000000..b04a13e --- /dev/null +++ b/nvim/lua/plugins/follow-md-links.lua @@ -0,0 +1,3 @@ +return { + "jghauser/follow-md-links.nvim", +} diff --git a/nvim/lua/plugins/interim-ls.lua b/nvim/lua/plugins/interim-ls.lua new file mode 100644 index 0000000..f3520ad --- /dev/null +++ b/nvim/lua/plugins/interim-ls.lua @@ -0,0 +1,3 @@ +return { + "benlubas/neorg-interim-ls", +} diff --git a/nvim/lua/plugins/journal.lua b/nvim/lua/plugins/journal.lua new file mode 100644 index 0000000..4037f1b --- /dev/null +++ b/nvim/lua/plugins/journal.lua @@ -0,0 +1,28 @@ +return { + "jakobkhansen/journal.nvim", + config = function() + require("journal").setup({ + filetype = "md", -- Filetype to use for new journal entries + root = "~/Notes/Personal/journals", -- Root directory for journal entries + date_format = "%Y-%m-%d", -- Date format for `:Journal ` + autocomplete_date_modifier = "end", -- "always"|"never"|"end". Enable date modifier autocompletion + + -- Configuration for journal entries + journal = { + -- Default configuration for `:Journal ` + format = "%Y_%m_%d", + template = "# %A %B %d %Y\n", + frequency = { day = 1 }, + + -- Nested configurations for `:Journal ... ` + entries = { + day = { + format = "%Y_%m_%d", -- Format of the journal entry in the filesystem. + template = "# %A %B %d %Y\n", -- Optional. Template used when creating a new journal entry + frequency = { day = 1 }, -- Optional. The frequency of the journal entry. Used for `:Journal next`, `:Journal -2` etc + }, + }, + }, + }) + end, +} diff --git a/nvim/lua/plugins/markdown.lua b/nvim/lua/plugins/markdown.lua new file mode 100644 index 0000000..e412b56 --- /dev/null +++ b/nvim/lua/plugins/markdown.lua @@ -0,0 +1,20 @@ +return { + "MeanderingProgrammer/render-markdown.nvim", + dependencies = { "nvim-treesitter/nvim-treesitter", "echasnovski/mini.nvim" }, -- if you use the mini.nvim suite + ---@module 'render-markdown' + ---@type render.md.UserConfig + opts = {}, + ft = { "markdown" }, + config = function() + require("render-markdown").setup({ + completions = { lsp = { enabled = true } }, + preset = "lazy", + heading = { + enabled = true, + }, + checkbox = { + enabled = true, + }, + }) + end, +} diff --git a/nvim/lua/plugins/neorg.lua b/nvim/lua/plugins/neorg.lua new file mode 100644 index 0000000..d3a8d54 --- /dev/null +++ b/nvim/lua/plugins/neorg.lua @@ -0,0 +1,66 @@ +return { + "nvim-neorg/neorg", + lazy = false, -- Disable lazy loading as some `lazy.nvim` distributions set `lazy = true` by default + version = "*", -- Pin Neorg to the latest stable release + config = function() + require("neorg").setup({ + load = { + ["core.defaults"] = {}, -- Loads default behaviour + ["core.concealer"] = {}, -- Adds pretty icons to your documents + ["core.ui.calendar"] = {}, + ["core.completion"] = { config = { engine = { module_name = "external.lsp-completion" }, name = "[Norg]" } }, + ["core.esupports.metagen"] = { config = { type = "auto", update_date = true } }, + ["core.qol.toc"] = {}, + ["core.qol.todo_items"] = {}, + ["core.looking-glass"] = {}, + ["core.presenter"] = { config = { zen_mode = "zen-mode" } }, + ["core.export"] = {}, + ["core.export.markdown"] = { config = { extensions = "all" } }, + ["core.summary"] = {}, + ["core.tangle"] = { config = { report_on_empty = false } }, + ["core.dirman"] = { -- Manages Neorg workspaces + config = { + workspaces = { + notes = "~/Notes.neorg", + }, + default_workspace = "notes", + }, + }, + ["external.interim-ls"] = { + config = { + -- default config shown + completion_provider = { + -- Enable or disable the completion provider + enable = true, + + -- Show file contents as documentation when you complete a file name + documentation = true, + + -- Try to complete categories provided by Neorg Query. Requires `benlubas/neorg-query` + categories = false, + + -- suggest heading completions from the given file for `{@x|}` where `|` is your cursor + -- and `x` is an alphanumeric character. `{@name}` expands to `[name]{:$/people:# name}` + people = { + enable = false, + + -- path to the file you're like to use with the `{@x` syntax, relative to the + -- workspace root, without the `.norg` at the end. + -- ie. `folder/people` results in searching `$/folder/people.norg` for headings. + -- Note that this will change with your workspace, so it fails silently if the file + -- doesn't exist + path = "people", + }, + }, + }, + }, + ["core.keybinds"] = { + config = { + default_keybinds = true, + neorg_leader = "n", -- Change this to whatever you want + }, + }, + }, + }) + end, +} diff --git a/nvim/lua/plugins/nvim-lspconfig.lua b/nvim/lua/plugins/nvim-lspconfig.lua new file mode 100644 index 0000000..358ef22 --- /dev/null +++ b/nvim/lua/plugins/nvim-lspconfig.lua @@ -0,0 +1,8 @@ +return { + { + "neovim/nvim-lspconfig", + config = function() + + end, + } +} diff --git a/nvim/lua/plugins/toggleterm.nvim b/nvim/lua/plugins/toggleterm.nvim new file mode 100644 index 0000000..f954052 --- /dev/null +++ b/nvim/lua/plugins/toggleterm.nvim @@ -0,0 +1,7 @@ +return { + "akinsho/toggleterm.nvim", + tag = "*", + keys = { + { "td", "ToggleTerm size=40 dir=~ direction=horizontal", "Open Horizontal terminal in home directory"} + } +} diff --git a/nvim/lua/plugins/twilight.lua b/nvim/lua/plugins/twilight.lua new file mode 100644 index 0000000..cceecb7 --- /dev/null +++ b/nvim/lua/plugins/twilight.lua @@ -0,0 +1,8 @@ +return { + "folke/twilight.nvim", + opts = { + -- your configuration comes here + -- or leave it empty to use the default settings + -- refer to the configuration section below + }, +} diff --git a/nvim/stylua.toml b/nvim/stylua.toml new file mode 100644 index 0000000..5d6c50d --- /dev/null +++ b/nvim/stylua.toml @@ -0,0 +1,3 @@ +indent_type = "Spaces" +indent_width = 2 +column_width = 120 \ No newline at end of file