diff --git a/.config/nvim/lua/blake/lsp.lua b/.config/nvim/lua/blake/lsp.lua index 04c6f4c..176275d 100644 --- a/.config/nvim/lua/blake/lsp.lua +++ b/.config/nvim/lua/blake/lsp.lua @@ -49,6 +49,7 @@ M.treesitter = function() "rust", "toml", "vim", + "yaml", }, --ignore_install = { "javascript", "java" }, -- List of parsers to ignore installing highlight = { @@ -107,8 +108,12 @@ M.cmp = function() -- nvim-cmp supports additional completion capabilities local capabilities = vim.lsp.protocol.make_client_capabilities() capabilities = require('cmp_nvim_lsp').update_capabilities(capabilities) - -- nvim-cmp setup - local cmp = require 'cmp' + -- If you want insert `(` after select function or method item + local cmp_autopairs = require('nvim-autopairs.completion.cmp') + local cmp = require('cmp') + cmp.event:on( 'confirm_done', cmp_autopairs.on_confirm_done({ map_char = { tex = '' } })) + -- add a lisp filetype (wrap my-function), FYI: Hardcoded = { "clojure", "clojurescript", "fennel", "janet" } + cmp_autopairs.lisp[#cmp_autopairs.lisp+1] = "racket" -- nvim-cmp setup cmp.setup { mapping = { [''] = cmp.mapping.select_prev_item(), @@ -158,11 +163,9 @@ M.cmp = function() }), cmp.setup.cmdline(':', { sources = cmp.config.sources({ - { name = 'path' } - }, - { - { name = 'cmdline' } - }) + { name = 'path' }, + { name = 'cmdline' } + }), }), formatting = { format = function(entry, vim_item) @@ -182,6 +185,9 @@ M.cmp = function() return vim_item end, }, + experimental = { + ghost_text = true, + } } end -- <<< diff --git a/.config/nvim/lua/blake/other.lua b/.config/nvim/lua/blake/other.lua index 2c97bb3..decbbde 100644 --- a/.config/nvim/lua/blake/other.lua +++ b/.config/nvim/lua/blake/other.lua @@ -169,6 +169,64 @@ M.neoscroll = function() end -- <<< +-- indent_blankline >>> +M.indent_blankline = function() + vim.cmd [[ + let g:indent_blankline_show_first_indent_level = v:true + let g:indent_blankline_show_foldtext = v:false + let g:indent_blankline_buftype_exclude = ['terminal'] + let g:indent_blankline_use_treesitter = v:true + let g:indent_blankline_show_current_context = v:true + ]] + require("indent_blankline").setup { + -- for example, context is off by default, use this to turn it on + show_current_context = true, + show_current_context_start = true, + } +end +-- <<< + +-- ZenMode >>> +M.zenmode = function() + -- map :ZM to :ZenMode + vim.cmd 'command! ZM ZenMode' + require("zen-mode").setup { + window = { + backdrop = 1, -- shade the backdrop of the Zen window. Set to 1 to keep the same as Normal + -- height and width can be: + -- * an absolute number of cells when > 1 + -- * a percentage of the width / height of the editor when <= 1 + -- * a function that returns the width or the height + width = 120, -- width of the Zen window + height = 51-2, -- height of the Zen window + -- by default, no options are changed for the Zen window + -- uncomment any of the options below, or add other vim.wo options you want to apply + options = { -- uncomment to do what the sign says + -- signcolumn = "no", -- signcolumn + number = false, -- number column + -- relativenumber = false, -- relative numbers + -- cursorline = false, -- cursorline + cursorcolumn = false, -- cursor column + -- foldcolumn = "0", -- fold column + -- list = false, -- whitespace characters + }, + }, + plugins = { + -- disable some global vim options (vim.o...) + -- comment the lines to not apply the options + options = { + enabled = true, + ruler = false, -- disables the ruler text in the cmd line area + showcmd = false, -- disables the command in the last line of the screen + }, + twilight = { enabled = true }, -- enable to start Twilight when zen mode opens + gitsigns = { enabled = true }, -- disables git signs + tmux = { enabled = false }, -- disables the tmux statusline + }, + } +end +-- <<< + -- Autosession >>> M.autosession = function() local opts = { diff --git a/.config/nvim/lua/blake/plugins.lua b/.config/nvim/lua/blake/plugins.lua index 16d2a67..24b9dd5 100644 --- a/.config/nvim/lua/blake/plugins.lua +++ b/.config/nvim/lua/blake/plugins.lua @@ -206,8 +206,7 @@ return require('packer').startup({function() use { -- Zen mode (:ZenMode or :ZM) "folke/zen-mode.nvim", config = function() - vim.cmd 'command! ZM ZenMode' - require("zen-mode").setup() + require('blake.other').zenmode() end, } use { -- dim text outside paragraph or function @@ -224,19 +223,14 @@ return require('packer').startup({function() -- 'ggandor/lightspeed.nvim', -- } use { -- indentline: Line indent indicators - 'Yggdroot/indentLine', + 'lukas-reineke/indent-blankline.nvim', config = function() - vim.cmd [[ - let g:indentLine_char = '▏' - let g:indentLine_conceallevel = 1 - let g:indentLine_fileTypeExclude = ['markdown', 'help', 'packer'] - autocmd TermOpen * IndentLinesDisable - ]] + require('blake.other').indent_blankline() end } - use { -- targets.vim: fix ci' and other things to work right - 'wellle/targets.vim', - } + -- use { -- targets.vim: fix ci' and other things to work right + -- 'wellle/targets.vim', + -- } -- Conveniences use { -- Ghost: Web browser integration @@ -251,26 +245,29 @@ return require('packer').startup({function() vim.api.nvim_set_keymap('n', '', 'UndotreeToggle', { noremap = true, silent = true, }) end } --- use { -- Dim inactive window --- 'sunjon/shade.nvim', --- config = function() --- require'shade'.setup({ --- overlay_opacity = 50, --- opacity_step = 1, --- keys = { --- brightness_up = '', --- brightness_down = '', --- toggle = 's', --- } --- }) --- end --- } + -- use { -- Dim inactive window + -- 'sunjon/shade.nvim', + -- config = function() + -- require'shade'.setup({ + -- overlay_opacity = 50, + -- opacity_step = 1, + -- keys = { + -- brightness_up = '', + -- brightness_down = '', + -- toggle = 's', + -- } + -- }) + -- end + -- } use { -- Quote pairing 'windwp/nvim-autopairs', config = function() require('nvim-autopairs').setup() end } + use { -- accelerated jk movement + 'rhysd/accelerated-jk' + } use { -- Alignment 'junegunn/vim-easy-align', } @@ -285,10 +282,8 @@ return require('packer').startup({function() -- Only calculate commentstring for tsx filetypes if vim.bo.filetype == 'typescriptreact' then local U = require('Comment.utils') - -- Detemine whether to use linewise or blockwise commentstring local type = ctx.ctype == U.ctype.line and '__default' or '__multiline' - -- Determine the location where to calculate commentstring from local location = nil if ctx.ctype == U.ctype.block then @@ -296,7 +291,6 @@ return require('packer').startup({function() elseif ctx.cmotion == U.cmotion.v or ctx.cmotion == U.cmotion.V then location = require('ts_context_commentstring.utils').get_visual_start_location() end - return require('ts_context_commentstring.internal').calculate_commentstring({ key = type, location = location, @@ -306,6 +300,12 @@ return require('packer').startup({function() } end } + use { -- rhysd: committia: better commit editing window + 'rhysd/committia.vim', + } + use { -- rhysd: conflict-marker: mark git conflicts - [x ]x + 'rhysd/conflict-marker.vim', + } -- use { -- lewis6991: spellsitter: Spell checking in treesitter files -- 'lewis6991/spellsitter.nvim', -- config = function() diff --git a/.config/nvim/lua/blake/settings.lua b/.config/nvim/lua/blake/settings.lua index 69cc943..e422cc2 100644 --- a/.config/nvim/lua/blake/settings.lua +++ b/.config/nvim/lua/blake/settings.lua @@ -38,7 +38,8 @@ set.showcmd = true set.signcolumn = 'yes' set.makeprg = 'make -j$(nproc)' set.ruler = false -set.listchars = "eol:↴,trail:~,tab:'»',nbsp:␣,space:·" +set.listchars = "trail:~,tab:│ ,nbsp:␣,lead:·,extends:…,precedes:…" +set.list = false ---------------------------------------------- --- Key bindings (needs to be translated?) --- @@ -148,16 +149,16 @@ vim.cmd [[ -- Edit *.bin files as binaries rather than text files (if your file isn't a .bin, -- make a symlink that points to it with the .bin extension and edit the symlink ;) vim.cmd [[ - augroup Binary - au! - au BufReadPre *.bin let &bin=1 - au BufReadPost *.bin if &bin | %!xxd - au BufReadPost *.bin set ft=xxd | endif - au BufWritePre *.bin if &bin | %!xxd -r - au BufWritePre *.bin endif - au BufWritePost *.bin if &bin | %!xxd - au BufWritePost *.bin set nomod | endif - augroup END + augroup Binary + au! + au BufReadPre *.bin let &bin=1 + au BufReadPost *.bin if &bin | %!xxd + au BufReadPost *.bin set ft=xxd | endif + au BufWritePre *.bin if &bin | %!xxd -r + au BufWritePre *.bin endif + au BufWritePost *.bin if &bin | %!xxd + au BufWritePost *.bin set nomod | endif + augroup END ]] -- 'Visual At' plugin (https://github.com/stoeffel/.dotfiles/blob/master/vim/visual-at.vim) diff --git a/.config/shell/bin/ned b/.config/shell/bin/ned new file mode 100755 index 0000000..8c1b866 --- /dev/null +++ b/.config/shell/bin/ned @@ -0,0 +1,122 @@ +#!/bin/bash +# NEd: Note Editor (and your best friend!) +# Ned can edit and create notes in a folder you tell him to! +# Depends: fzf + +# shellcheck disable=SC2068,SC2178,SC2128 + +# set default values if things are unset +NOTES_DIR="${NOTES_DIR:-"$HOME/Documents/college/current"}" +EDITOR="nvim" +EDITOR_CMD="nvim -c :ZenMode" + +usage() { + cat <<-EOF + Usage: + ned + new [note name] create a new note in the matched class folder + edit [folder] search for and edit a text document in a folder + help print this message + + Notes: + Right now, only the first letter of each option is considered, so \`ned n\` and \`ned neww\` do the same thing + Folder and file names are globbed + Will automatically activate the ZenMode nvim extension + Current repository path: $NOTES_DIR + EOF +} + +edit() { + check_setup + + NOTE_PATH="$(fd -at f "$2" "$NOTES_DIR")" + # if there was more than one result + if [ "$(echo "$NOTE_PATH" | wc -l)" -gt 1 ]; then + NOTE_PATH="$(echo "$NOTE_PATH" | fzy)" + fi + + $EDITOR_CMD "$NOTE_PATH" +} + +new() { + check_setup + + # Find out note name + if [ -z "$3" ]; then + NOTE_NAME="$(date +'%F').md" + else + NOTE_NAME="$3.md" + fi + + NOTE_PATH="$(fd -ad 1 "^$2" "$NOTES_DIR")" + # check if there were no results + if [ -z "$NOTE_PATH" ]; then + echo "No directories found for '$2'." + echo "All possible directories:" + (cd "$NOTES_DIR" && fd -d 1 -t d "$NOTES_DIR") + exit + + # if there was more than one result + elif [ "$(echo "$NOTE_PATH" | wc -l)" -gt 1 ]; then + NOTE_PATH="$(echo "$NOTE_PATH" | fzy)" || exit + fi + + # TODO: allow setting location for files to go with $3, and $4 for file name + # check if there is a notes directory in the note path + if [ -d "$NOTE_PATH/notes" ]; then + NOTE_PATH="$NOTE_PATH/notes" + + # if there is no notes directory + else + PROMPT="Place note in… " + NOTE_PATH="$(cd "$NOTE_PATH" && fd -ad 1 -t d | fzy -p "$PROMPT")" || exit + fi + + if [ -f "$NOTE_PATH/$NOTE_NAME" ]; then + echo "File already exists. Opening..." + $EDITOR_CMD "$NOTE_PATH/$NOTE_NAME" + else + cd "$NOTE_PATH" || exit + # apply a template for notes + cat <<-EOF >> "$NOTE_PATH/$NOTE_NAME" + + + EOF + $EDITOR_CMD "$NOTE_PATH/$NOTE_NAME" + fi +} + +subshell() { + echo 'entering subshell' + $SHELL +} + +shell() { + cd "$NOTES_DIR" && subshell +} + +check_setup() { + # perform preliminary checks to make sure the script can run properly + if ! [ -d "$NOTES_DIR" ]; then + echo "Error: Notes directory ($NOTES_DIR) does not exist or is not a directory" + exit 1 + fi +} + +# Parse arguments (first character only) +case "${1:0:1}" in + # help + 'h') usage;; + # create and edit new note + 'n') new $@;; + # edit an existing document or file + 'e') edit $@;; + # run a shell (cd to) in the directory + 'c'|'x'|'s') shell;; + # me: edit ned (the file you are looking at) + 'm') $EDITOR "$(realpath "$0")";; + *) echo "no such option";; +esac + +# vim: et sw=3 ts=3 ft=bash diff --git a/.config/shell/bin/sced b/.config/shell/bin/sced new file mode 100755 index 0000000..1b12f26 --- /dev/null +++ b/.config/shell/bin/sced @@ -0,0 +1,21 @@ +#!/bin/bash +# sced (script edit) edit a script or function that's somewhere inside the shell configuration +# Usage: bined