New cleaner nvim config. Added config for LF

This commit is contained in:
Thomas Naderer
2024-12-25 09:58:39 +01:00
parent 741e32a1ff
commit 46ae676593
10 changed files with 1345 additions and 136 deletions

5
lf/cleaner Normal file
View File

@@ -0,0 +1,5 @@
#!/bin/sh
if [ -n "$FIFO_UEBERZUG" ]; then
printf '{"action": "remove", "identifier": "PREVIEW"}\n' > "$FIFO_UEBERZUG"
fi

377
lf/icons Normal file
View File

@@ -0,0 +1,377 @@
# vim:ft=conf
# These examples require Nerd Fonts or a compatible font to be used.
# See https://www.nerdfonts.com for more information.
# default values from lf (with matching order)
# ln l # LINK
# or l # ORPHAN
# tw t # STICKY_OTHER_WRITABLE
# ow d # OTHER_WRITABLE
# st t # STICKY
# di d # DIR
# pi p # FIFO
# so s # SOCK
# bd b # BLK
# cd c # CHR
# su u # SETUID
# sg g # SETGID
# ex x # EXEC
# fi - # FILE
# file types (with matching order)
ln  # LINK
or  # ORPHAN
tw  # STICKY_OTHER_WRITABLE
ow  # OTHER_WRITABLE
st  # STICKY
di  # DIR
pi p # FIFO
so s # SOCK
bd b # BLK
cd c # CHR
su u # SETUID
sg g # SETGID
ex  # EXEC
fi  # FILE
# disable some default filetype icons, let them choose icon by filename
# ln  # LINK
# or  # ORPHAN
# tw # STICKY_OTHER_WRITABLE
# ow # OTHER_WRITABLE
# st # STICKY
# di  # DIR
# pi # FIFO
# so # SOCK
# bd # BLK
# cd # CHR
# su # SETUID
# sg # SETGID
# ex # EXEC
# fi  # FILE
# file extensions (vim-devicons)
*.styl 
*.sass 
*.scss 
*.htm 
*.html 
*.slim 
*.haml 
*.ejs 
*.css 
*.less 
*.md 
*.mdx 
*.markdown 
*.rmd 
*.json 
*.webmanifest 
*.js 
*.mjs 
*.jsx 
*.rb 
*.gemspec 
*.rake 
*.php 
*.py 
*.pyc 
*.pyo 
*.pyd 
*.coffee 
*.mustache 
*.hbs 
*.conf 
*.ini 
*.yml 
*.yaml 
*.toml 
*.bat 
*.mk 
*.jpg 
*.jpeg 
*.bmp 
*.png 
*.webp 
*.gif 
*.ico 
*.twig 
*.cpp 
*.c++ 
*.cxx 
*.cc 
*.cp 
*.c 
*.cs 󰌛
*.h 
*.hh 
*.hpp 
*.hxx 
*.hs 
*.lhs 
*.nix 
*.lua 
*.java 
*.sh 
*.fish 
*.bash 
*.zsh 
*.ksh 
*.csh 
*.awk 
*.ps1 
*.ml λ
*.mli λ
*.diff 
*.db 
*.sql 
*.dump 
*.clj 
*.cljc 
*.cljs 
*.edn 
*.scala 
*.go 
*.dart 
*.xul 
*.sln 
*.suo 
*.pl 
*.pm 
*.t 
*.rss 
'*.f#' 
*.fsscript 
*.fsx 
*.fs 
*.fsi 
*.rs 
*.rlib 
*.d 
*.erl 
*.hrl 
*.ex 
*.exs 
*.eex 
*.leex 
*.heex 
*.vim 
*.ai 
*.psd 
*.psb 
*.ts 
*.tsx 
*.jl 
*.pp 
*.vue 
*.elm 
*.swift 
*.xcplayground 
*.tex 󰙩
*.r 󰟔
*.rproj 󰗆
*.sol 󰡪
*.pem 
# file names (vim-devicons) (case-insensitive not supported in lf)
*gruntfile.coffee 
*gruntfile.js 
*gruntfile.ls 
*gulpfile.coffee 
*gulpfile.js 
*gulpfile.ls 
*mix.lock 
*dropbox 
*.ds_store 
*.gitconfig 
*.gitignore 
*.gitattributes 
*.gitlab-ci.yml 
*.bashrc 
*.zshrc 
*.zshenv 
*.zprofile 
*.vimrc 
*.gvimrc 
*_vimrc 
*_gvimrc 
*.bashprofile 
*favicon.ico 
*license 
*node_modules 
*react.jsx 
*procfile 
*dockerfile 
*docker-compose.yml 
*docker-compose.yaml 
*compose.yml 
*compose.yaml 
*rakefile 
*config.ru 
*gemfile 
*makefile 
*cmakelists.txt 
*robots.txt 󰚩
# file names (case-sensitive adaptations)
*Gruntfile.coffee 
*Gruntfile.js 
*Gruntfile.ls 
*Gulpfile.coffee 
*Gulpfile.js 
*Gulpfile.ls 
*Dropbox 
*.DS_Store 
*LICENSE 
*React.jsx 
*Procfile 
*Dockerfile 
*Docker-compose.yml 
*Docker-compose.yaml 
*Rakefile 
*Gemfile 
*Makefile 
*CMakeLists.txt 
# file patterns (vim-devicons) (patterns not supported in lf)
# .*jquery.*\.js$ 
# .*angular.*\.js$ 
# .*backbone.*\.js$ 
# .*require.*\.js$ 
# .*materialize.*\.js$ 
# .*materialize.*\.css$ 
# .*mootools.*\.js$ 
# .*vimrc.* 
# Vagrantfile$ 
# file patterns (file name adaptations)
*jquery.min.js 
*angular.min.js 
*backbone.min.js 
*require.min.js 
*materialize.min.js 
*materialize.min.css 
*mootools.min.js 
*vimrc 
Vagrantfile 
# archives or compressed (extensions from dircolors defaults)
*.tar 
*.tgz 
*.arc 
*.arj 
*.taz 
*.lha 
*.lz4 
*.lzh 
*.lzma 
*.tlz 
*.txz 
*.tzo 
*.t7z 
*.zip 
*.z 
*.dz 
*.gz 
*.lrz 
*.lz 
*.lzo 
*.xz 
*.zst 
*.tzst 
*.bz2 
*.bz 
*.tbz 
*.tbz2 
*.tz 
*.deb 
*.rpm 
*.jar 
*.war 
*.ear 
*.sar 
*.rar 
*.alz 
*.ace 
*.zoo 
*.cpio 
*.7z 
*.rz 
*.cab 
*.wim 
*.swm 
*.dwm 
*.esd 
# image formats (extensions from dircolors defaults)
*.jpg 
*.jpeg 
*.mjpg 
*.mjpeg 
*.gif 
*.bmp 
*.pbm 
*.pgm 
*.ppm 
*.tga 
*.xbm 
*.xpm 
*.tif 
*.tiff 
*.png 
*.svg 
*.svgz 
*.mng 
*.pcx 
*.mov 
*.mpg 
*.mpeg 
*.m2v 
*.mkv 
*.webm 
*.ogm 
*.mp4 
*.m4v 
*.mp4v 
*.vob 
*.qt 
*.nuv 
*.wmv 
*.asf 
*.rm 
*.rmvb 
*.flc 
*.avi 
*.fli 
*.flv 
*.gl 
*.dl 
*.xcf 
*.xwd 
*.yuv 
*.cgm 
*.emf 
*.ogv 
*.ogx 
# audio formats (extensions from dircolors defaults)
*.aac 
*.au 
*.flac 
*.m4a 
*.mid 
*.midi 
*.mka 
*.mp3 
*.mpc 
*.ogg 
*.ra 
*.wav 
*.oga 
*.opus 
*.spx 
*.xspf 
# other formats
*.pdf 

391
lf/lfrc Normal file
View File

@@ -0,0 +1,391 @@
#-----------------------------------------------------------------------------#
# File: ~/.config/lf/lfrc (archlinux @ 'silent')
# Date: Thu 15 Mar 2022 12:05
# Update: Mon 08 Jul 2024 22:04
# Owner: fvb - freekvb@gmail.com - https://freekvb.github.io/fvb/
#-----------------------------------------------------------------------------#
## Based on lfrc Luke Smith & Brodie Robertson -------------------------------#
# Note on Image Previews
# For those wanting image previews, like this system, there are four steps to
# set it up. These are done automatically for LARBS users, but I will state
# them here for others doing it manually.
#
# 1. ueberzug must be installed.
# 2. The scope file (~/.config/lf/scope for me), must have a command similar to
# mine to generate ueberzug images.
# 3. A `set cleaner` line as below is a cleaner script.
# 4. lf should be started through a wrapper script (~/.local/bin/lfub for me)
# that creates the environment for ueberzug. This command can be be aliased
# in your shellrc (`alias lf="lfub") or if set to a binding, should be
# called directly instead of normal lf.
## basic vars ----------------------------------------------------------------#
set ratios '10:15:20'
set hidden
set ignorecase
set number
set relativenumber
set cursorpreviewfmt " "
set info size
set dircounts
set shell sh
set shellopts '-eu'
set ifs "\n"
set scrolloff 10
set wrapscroll
set icons
set period 1
set hiddenfiles ".*:*.aux:*.log:*.bbl:*.bcf:*.blg:*.run.xml"
set cleaner '~/.config/lf/cleaner'
set previewer '~/.config/lf/scope'
set promptfmt "\033[37;1m%d\033[0m\033[37;1m%f\033[0m"
## custom functions ----------------------------------------------------------#
cmd on-cd &{{
# '&' commands run silently in background (which is what we want here),
# but are not connected to stdout.
# To make sure our escape sequence still reaches stdout we pipe it to /dev/tty
printf "\033]0; $(pwd | sed "s|$HOME|~|") - lf\007" > /dev/tty
}}
# also run at startup
on-cd
cmd open ${{
case $(file --mime-type "$f" -bL) in
text/*|application/json) $EDITOR "$fx";;
video/*|application/pdf) xdg-open "$f" & disown;;
audio/*) mpv --audio-display=no $f ;;
audio/*) ffplay -nodisp -autoexit $f ;;
image/*) feh -F $f & disown;;
*) for f in "$fx"; do xdg-open "$f"> /dev/null 2> /dev/null & done;;
esac
}}
# make new directory
cmd mkdir %{{
if [ "$1" ]; then
mkdir -p -- "$@" && lf -remote "send $id select \"$1\""
fi
}}
#cmd mkdir ${{
# set -f
# printf "\nDirectory Name: "
# read ans
# mkdir $ans
#}}
# make new file
cmd mkfile ${{
set -f
printf "\nFile Name: "
read ans
$EDITOR $ans
}}
# make new 'root' file
cmd doasmkfile ${{
set -f
printf "\nFile Name: "
read ans
doas $EDITOR $ans
}}
# make new script
cmd mkscript ${{
set -f
printf "\nFile Name: "
read ans
touch ~/Scripts/"$ans"
chmod +x ~/Scripts/"$ans"
$EDITOR ~/Scripts/"$ans"
}}
# change file permissions
cmd chmod ${{
set -f
printf "\nMode Bits: "
read ans
for file in "$fx"
do
chmod $ans $file
done
lf -remote 'send reload'
}}
# make file executable
cmd chmodx ${{
for file in "$fx"
do
chmod +x $file
done
lf -remote 'send reload'
}}
# jump with fzf
cmd fzf_jump ${{
res="$(find . -maxdepth 3 | fzf --reverse --header='Jump to location')"
if [ -f "$res" ]; then
cmd="select"
elif [ -d "$res" ]; then
cmd="cd"
fi
lf -remote "send $id $cmd \"$res\""
}}
# delete current file or selected files (prompting)
cmd delete ${{
set -f
printf "\n$fx\n"
printf "Delete? [y/n] "
read ans
[ $ans = "y" ] && rm -rf $fx
}}
# trash cli bindings
cmd trash ${{
files=$(printf "$fx" | tr '\n' ';')
while [ "$files" ]; do
# extract the substring from start of string up to delimiter.
# this is the first "element" of the string.
file=${files%%;*}
trash-put "$(basename "$file")"
# if there's only one element left, set `files` to an empty string.
# this causes us to exit this `while` loop.
# else, we delete the first "element" of the string from files, and move onto the next.
if [ "$files" = "$file" ]; then
files=''
else
files="${files#*;}"
fi
done
}}
cmd clear_trash %trash-empty
cmd restore_trash ${{
trash-restore
}}
## trash
#$mkdir -p ~/.cache/lf/trash
#cmd trash $IFS="`printf '\n\t'`"; mv -f $fx ~/.cache/lf/trash
# extract the current file with the right command
# (xkcd link: https://xkcd.com/1168/)
cmd extract ${{
set -f
case $f in
*.tar.bz|*.tar.bz2|*.tbz|*.tbz2) tar xjvf $f;;
*.tar.gz|*.tgz) tar xzvf $f;;
*.tar.xz|*.txz) tar xJvf $f;;
*.zip) unzip $f;;
*.rar) unrar x $f;;
*.7z) 7z x $f;;
esac
}}
# compress current file or selected files with tar and gunzip
cmd tar ${{
set -f
mkdir $1
cp -r $fx $1
tar czf $1.tar.gz $1
rm -rf $1
}}
# compress current file or selected files with zip
cmd zip ${{
set -f
mkdir $1
cp -r $fx $1
zip -r $1.zip $1
rm -rf $1
}}
# symlinks
# yy (select for copy) and P to paste soft-link
# cc (select for cut) and P to paste hard-link
cmd link %{{
set -- $(cat ~/.local/share/lf/files)
mode="$1"
shift
if [ "$#" -lt 1 ]; then
lf -remote "send $id echo no files to link"
exit 0
fi
case "$mode" in
# symbolically copy mode is indicating a soft link
copy) ln -sr -t . -- "$@";;
# while a move mode is indicating a hard link
move) ln -t . -- "$@";;
esac
rm ~/.local/share/lf/files
lf -remote "send clear"
}}
# open terminal
cmd openterm ${{
devour $TERM
}}
# set wallpaper and colorscheme (cli only)
cmd wallcolor %cp "$f" ~/.config/wall.png && wal -i "$f"
# set wallpaper and colorscheme (cli only) when running dwm
cmd setwallpaper %cp "$f" ~/.config/wall.png && wal -i "$f" && (cd $HOME/Programs/dwm && rm -f config.h ; doas make clean install) && (cd $HOME/Programs/dmenu && rm -f config.h ; doas make clean install) && xdotool key super+shift+q
# bulk rename
cmd bulkrename $vidir
## bindings ------------------------------------------------------------------#
# remove some defaults
map "'"
map '"'
map ,
map c
map d
map e
map m
map q
map r
# escape
map <esc> :unselect;clear;
# close
map ,q quit
# map : to ;
map ; read
map gg top
map G bottom
# trash mappings
map dd trash
map ct clear_trash
map rt restore_trash
map DD delete
map cc cut
map yy copy
map p paste
map md push :mkdir<space>
#map md mkdir
map mf mkfile
map ms mkscript
map mF doasmkfile
map ch chmod
map x chmodx
map U unselect
map E extract
map cs wallcolor
map bg setwallpaper
map <enter> shell
map V push :!nvim<space>
map YY $printf "%s" "$fx" | xclip -selection clipboard
map R reload
map C clear
# rename
map cw rename
map B bulkrename
map A rename # at the very end
#map c push A<c-u> # new rename
map I push A<c-a> # at the very beginning
map i push A<a-b><a-b><a-f> # before extention
map a push A<a-b> # after extention
# symlinks
# yy (select for copy) and P to paste soft-link
# cc (select for cut) and P to paste hard-link
map P :link
## file openers
map cv push :!nvim<space>$HOME/.config/lf/lfrc<enter>
map cz push :!nvim<spade>$HOME/.config/zsh/.zshrc<enter>
map of open $f
map ol $$PAGER "$f"
map oq $$BROWSER "$f"
map ot openterm
map ov $$EDITOR "$f"
map odv $doas $EDITOR "$f"
map oz $$READER "$f"
# execute current file (must be executable)
#map x $$f
map X !$f
## fzf
map f $lf -remote "send $id select '$(fzf)'"
map F $vi $(fzf)
map J fzf_jump
## fast navigation
map gh cd ~
#map gD cd ~/Documents
map gD cd ~/Downloads
map gM cd ~/Media
map gN cd ~/Notes
map gi cd ~/Notes/ict
map gt cd ~/Notes/trades
map gp cd ~/Notes/trades/tp
#map gP cd ~/Pictures
map gw cd ~/Pictures/wallpapers
map gP cd ~/Programs
map gS cd ~/Scripts
map gT cd ~/Torrents
map gc cd ~/.config
map gl cd ~/.local
map gs cd ~/.local/share
map g0 cd ~/.local/share/Trash/files
map g/ cd /
map ge cd /etc
map gm cd /mnt
map gu cd /usr
## fast movement
map Mh $mv "$f" ~
map MD $mv "$f" ~/Documents
#map MD $mv "$f" ~/Downloads
map MM $mv "$f" ~/Media
map MN $mv "$f" ~/Notes
map Mi $mv "$f" ~/Notes/ict
map Mt $mv "$f" ~/Notes/trades/tp
map MP $mv "$f" ~/Pictures
map Mw $mv "$f" ~/Pictures/wallpapers
#map MP $mv "$f" ~/Programs
map MS $mv "$f" ~/Scripts
map MT $mv "$f" ~/Torrents
map Mc $mv "$f" ~/.config
map Ml $mv "$f" ~/.local
## fast copy
map Yh $cp "$f" ~
map YD $cp "$f" ~/Documents
#map YD $cp "$f" ~/Downloads
map YM $cp "$f" ~/Media
map YN $cp "$f" ~/Notes
map Yi $cp "$f" ~/Notes/ict
map Yt $cp "$f" ~/Notes/trades/tp
map YP $cp "$f" ~/Pictures
map Yw $cp "$f" ~/Pictures/wallpapers
#map YP $cp "$f" ~/Programs
map YS $cp "$f" ~/Scripts
map YT $cp "$f" ~/Torrents
map Yc $cp "$f" ~/.config
map Yl $cp "$f" ~/.local

44
lf/scope Normal file
View File

@@ -0,0 +1,44 @@
#!/bin/sh
# File preview handler for lf.
set -C -f
IFS="$(printf '%b_' '\n')"; IFS="${IFS%_}"
image() {
if [ -n "$DISPLAY" ] && [ -z "$WAYLAND_DISPLAY" ] && command -V ueberzug >/dev/null 2>&1; then
printf '{"action": "add", "identifier": "PREVIEW", "x": "%s", "y": "%s", "width": "%s", "height": "%s", "scaler": "contain", "path": "%s"}\n' "$4" "$5" "$(($2-1))" "$(($3-1))" "$1" > "$FIFO_UEBERZUG"
else
mediainfo "$1"
fi
}
ifub() {
[ -n "$DISPLAY" ] && [ -z "$WAYLAND_DISPLAY" ] && command -V ueberzug >/dev/null 2>&1
}
# Note that the cache file name is a function of file information, meaning if
# an image appears in multiple places across the machine, it will not have to
# be regenerated once seen.
case "$(file --dereference --brief --mime-type -- "$1")" in
image/*) image "$1" "$2" "$3" "$4" "$5" ;;
text/html) lynx -width="$4" -display_charset=utf-8 -dump "$1" ;;
text/troff) man ./ "$1" | col -b ;;
text/* | */xml | application/json) bat --terminal-width "$4" -f "$1" ;;
application/zip) atool --list -- "$1" ;;
audio/* | application/octet-stream) mediainfo "$1" || exit 1;;
video/* )
CACHE="${XDG_CACHE_HOME:-$HOME/.cache}/lf/thumb.$(stat --printf '%n\0%i\0%F\0%s\0%W\0%Y' -- "$(readlink -f "$1")" | sha256sum | awk '{print $1}')"
[ ! -f "$CACHE" ] && ffmpegthumbnailer -i "$1" -o "$CACHE" -s 0
image "$CACHE" "$2" "$3" "$4" "$5"
;;
*/pdf)
CACHE="${XDG_CACHE_HOME:-$HOME/.cache}/lf/thumb.$(stat --printf '%n\0%i\0%F\0%s\0%W\0%Y' -- "$(readlink -f "$1")" | sha256sum | awk '{print $1}')"
[ ! -f "$CACHE.jpg" ] && pdftoppm -jpeg -f 1 -singlefile "$1" "$CACHE"
image "$CACHE.jpg" "$2" "$3" "$4" "$5"
;;
*opendocument*) odt2txt "$1" ;;
application/pgp-encrypted) gpg -d -- "$1" ;;
esac
exit 1

View File

@@ -1,119 +1,6 @@
-- Initalize packer
vim.cmd [[packadd packer.nvim]]
vim.g.mapleader = ' ' -- Set the leader key to space
vim.cmd [[colorscheme tokyonight]]
-- vim.cmd [[
-- syntax match Todo /TODO\|FIXME\|NOTE\|HACK/
-- highlight link Todo Comment
-- ]]
--TODO Ich bin eine biene
--
require('packer').startup(function(use)
use 'wbthomason/packer.nvim' -- Packer manages itself
-- VIM AutoSave
use({
'okuuva/auto-save.nvim',
tag = 'v1*',
config = function()
require('auto-save').setup({
-- your config goes here
-- or just leave it empty :)
})
end,
})
-- Headlines for Markdown and TeX
use {
'lukas-reineke/headlines.nvim',
after = 'nvim-treesitter',
config = function()
require('headlines').setup()
end,
}
-- Nvim-Tree
use {
'nvim-tree/nvim-tree.lua',
config = function()
require('plugins.nvim-tree').setup()
end,
}
-- require('plugins.nvim-tree')
# vim:fileencoding=utf-8:foldmethod=marker
require('keymaps')
-- Themes
use 'gruvbox-community/gruvbox' -- Gruvbox theme
use 'folke/tokyonight.nvim' -- Tokyo Night theme
require('settings')
-- Treesitter
use {
'nvim-treesitter/nvim-treesitter',
run = ':TSUpdate' -- Keep parsers up to date
}
require('plugins.treesitter')
-- Rainbow Delimiters
use 'HiPhish/rainbow-delimiters.nvim'
require('plugins.rainbow_delimiters')
-- Git Integration
use 'lewis6991/gitsigns.nvim' -- Git decorations in the gutter
use 'tpope/vim-fugitive' -- Git commands in Neovim
-- Status Line
use {
'nvim-lualine/lualine.nvim',
requires = { 'kyazdani42/nvim-web-devicons', opt = true } -- Optional icons
}
require('plugins.lualine')
-- HardTime
use{
'm4xshen/hardtime.nvim',
requires = {"MunifTanjim/nui.nvim"}
}
-- FZF
use {
'junegunn/fzf',
run = function() vim.fn['fzf#install']() end
}
use 'junegunn/fzf.vim'
use {
"folke/todo-comments.nvim",
requires = "nvim-lua/plenary.nvim",
config = function()
require("todo-comments").setup {}
end
}
-- Cool Startup Dashboard
use {
'glepnir/dashboard-nvim',
requires = { 'kyazdani42/nvim-web-devicons' }
}
-- Productivity
use 'numToStr/Comment.nvim' -- Easy commenting
use 'windwp/nvim-autopairs' -- Auto-close brackets, quotes, etc.
use 'tpope/vim-surround' -- Surround text objects with quotes, brackets, etc.
--LaTeX
use 'lervag/vimtex'
require('plugins.vimtex')
-- Telescope
use {
'nvim-telescope/telescope.nvim',
requires = { {'nvim-lua/plenary.nvim'} },
config = function()
-- Leader key mappings for Telescope
vim.api.nvim_set_keymap('n', '<leader>ff', ':Telescope find_files<CR>', { noremap = true, silent = true })
vim.api.nvim_set_keymap('n', '<leader>fg', ':Telescope live_grep<CR>', { noremap = true, silent = true })
vim.api.nvim_set_keymap('n', '<leader>fb', ':Telescope buffers<CR>', { noremap = true, silent = true })
vim.api.nvim_set_keymap('n', '<leader>fh', ':Telescope help_tags<CR>', { noremap = true, silent = true })
end
}
use {
'hedyhli/outline.nvim',
config = function()
require('plugins.outline').setup()
end
}
end
)
require('plugins')

109
nvim/lua/keymaps.lua Normal file
View File

@@ -0,0 +1,109 @@
local set = vim.opt
local opt = { noremap = true }
local opts = { noremap = true, silent = true }
local term_opts = { silent = true }
-- shorten function name
local keymap = vim.api.nvim_set_keymap
-- Modes
-- normal_mode = 'n',
-- insert_mode = 'i',
-- visual_mode = 'v',
-- visual_block_mode = 'x',
-- term_mode = 't',
-- command_mode = 'c',
-------------------------------------------------------------------------------
-- set space as leader key
vim.g.mapleader = " " -- Set space as the leader key
vim.g.maplocalleader = " " -- Optional: set local leader key to space as well
-- switch colon to semicolon
keymap("n", ";", ":", opt)
keymap("n", ":", ";", opt)
-- no arrows, move the vim way
keymap("n", "<up>", "<nop>", opts)
keymap("n", "<down>", "<nop>", opts)
keymap("n", "<left>", "<nop>", opts)
keymap("n", "<right>", "<nop>", opts)
keymap("i", "<up>", "<nop>", opts)
keymap("i", "<down>", "<nop>", opts)
keymap("i", "<left>", "<nop>", opts)
keymap("i", "<right>", "<nop>", opts)
-- lazy write / quit
keymap("n", "<leader>w", ":w<cr>", opts)
keymap("n", "<leader>q", ":q<cr>", opts)
keymap("n", "<leader>wq", ":wq<cr>", opts)
keymap("n", "<leader>W", ":w!<cr>", opts)
keymap("n", "<leader>Q", ":q!<cr>", opts)
keymap("n", "<leader>WQ", ":wq!<cr>", opts)
-- navigate properly when lines are wrapped
keymap("n", "j", "gj", opts)
keymap("n", "k", "gk", opts)
-- toggle relativenumber
keymap("n", "<leader>r", ":set invrnu<cr>", opts)
-- easy folding
-- toggle fold under cursor no jumping around
keymap("n", "z", "za<space>0", opts)
-- maintaining visual mode after shifting > and <
keymap("v", ">", ">gv", opts)
keymap("v", "<", "<gv", opts)
-- -- move text up and down in visual block mode
-- keymap("x", "<s-j>", ":move '>+1<CR>gv-gv", opts)
-- keymap("x", "<s-k>", ":move '<-2<CR>gv-gv", opts)
-- navigate buffers
keymap("n", "<s-l>", ":bnext<cr>", opts)
keymap("n", "<s-h>", ":bprevious<cr>", opts)
-- scrolling command-line history
keymap("c", "<c-j>", "<c-n>", opts)
keymap("c", "<c-k>", "<c-p>", opts)
-- open the current file in the default program
keymap("n", "<leader>x", [[:!xdg-open %<cr><cr>]], opts)
-- -- no ex mode for me
-- keymap("n", "Q", "<nop>", opts)
-- prevent accidentally record functionality
keymap("n", "q", "<nop>", opts)
keymap("n", "qq", "q", opts)
-- redirect change operations to blackhole avoid spoiling 'y' register content
keymap("n", "c", '"_c', opts)
keymap("n", "C", '"_C', opts)
-- toggle cursorcolumn
keymap("n", "<leader>c", ":set cursorcolumn!<cr>", opts)
-- toggle netrw
keymap("n", "<leader>nd", ":Lexplore %:p:h<cr>", opts)
keymap("n", "<leader>n", ":Lexplore<cr>", opts)
-- clear highlighting from the search
keymap("n", "<esc>", ":nohlsearch<cr><esc>", opts)
-- toggle spell checking
keymap("n", "<leader>s", ":setlocal spell! spelllang=en_us,nl<cr>", opts)
-- date time stamp
keymap("n", "<leader>dt", [[i<c-r>=strftime("%a %d %Y %H:%M")<cr><space>]], opts)
-- double space over word to find and replace
keymap("n", "<space><space>", [[:%s/\<<c-r>=expand("<cword>")<cr>\>/]], opt)
-- search and replace all
-- write file if you forgot to give it sudo permission
keymap("c", "w!!", [[w !sudo tee %]], opt)
-- diff since last save
keymap("n", "<leader>df", [[:w !diff % -<cr>]], opt)

136
nvim/lua/plugins.lua Normal file
View File

@@ -0,0 +1,136 @@
# vim:fileencoding=utf-8:foldmethod=marker
vim.cmd [[packadd packer.nvim]]
require('packer').startup(function(use)
-- {{{ Packer manages itself
use 'wbthomason/packer.nvim' -- Packer manages itself
-- }}}
-- {{{ VIM AutoSave
use({
'okuuva/auto-save.nvim',
tag = 'v1*',
config = function()
require('auto-save').setup({
-- your config goes here
-- or just leave it empty :)
})
end,
})
-- }}}
-- {{{ Headlines for Markdown and TeX
use {
'lukas-reineke/headlines.nvim',
after = 'nvim-treesitter',
config = function()
require('headlines').setup()
end,
}
-- }}}
-- {{{ Nvim-Tree
use {
'nvim-tree/nvim-tree.lua',
config = function()
require('plugins.nvim-tree').setup()
end,
}
-- }}}
-- {{{ Themes
use 'gruvbox-community/gruvbox' -- Gruvbox theme
use 'folke/tokyonight.nvim' -- Tokyo Night theme
-- }}}
-- {{{ Treesitter
use {
'nvim-treesitter/nvim-treesitter',
run = ':TSUpdate' -- Keep parsers up to date
}
require('plugins.treesitter')
-- }}}
-- {{{ Rainbow Delimiters
use 'HiPhish/rainbow-delimiters.nvim'
require('plugins.rainbow_delimiters')
-- }}}
-- {{{ Git Integration
use 'lewis6991/gitsigns.nvim' -- Git decorations in the gutter
use 'tpope/vim-fugitive' -- Git commands in Neovim
-- }}}
-- {{{ Status Line
use {
'nvim-lualine/lualine.nvim',
requires = { 'kyazdani42/nvim-web-devicons', opt = true } -- Optional icons
}
require('plugins.lualine')
-- }}}
-- {{{ HardTime
use {
'm4xshen/hardtime.nvim',
requires = { 'MunifTanjim/nui.nvim' }
}
-- }}}
-- {{{ FZF
use {
'junegunn/fzf',
run = function() vim.fn['fzf#install']() end
}
use 'junegunn/fzf.vim'
-- }}}
-- {{{ Todo Comments
use {
"folke/todo-comments.nvim",
requires = "nvim-lua/plenary.nvim",
}
-- }}}
-- {{{ Cool Startup Dashboard
use {
'glepnir/dashboard-nvim',
requires = { 'kyazdani42/nvim-web-devicons' }
}
-- }}}
-- {{{ Productivity
use 'numToStr/Comment.nvim'
use 'windwp/nvim-autopairs'
use 'tpope/vim-surround'
-- }}}
-- {{{ LaTeX
use 'lervag/vimtex'
require('plugins.vimtex')
-- }}}
-- {{{ Telescope
use {
'nvim-telescope/telescope.nvim',
requires = { {'nvim-lua/plenary.nvim'} },
config = function()
-- Leader key mappings for Telescope
vim.api.nvim_set_keymap('n', '<leader>ff', ':Telescope find_files<CR>', { noremap = true, silent = true })
vim.api.nvim_set_keymap('n', '<leader>fg', ':Telescope live_grep<CR>', { noremap = true, silent = true })
vim.api.nvim_set_keymap('n', '<leader>fb', ':Telescope buffers<CR>', { noremap = true, silent = true })
vim.api.nvim_set_keymap('n', '<leader>fh', ':Telescope help_tags<CR>', { noremap = true, silent = true })
end
}
-- }}}
-- {{{ Outline
use {
'hedyhli/outline.nvim',
config = function()
require('plugins.outline').setup()
end
}
-- }}}
end)

View File

@@ -1,21 +1,21 @@
require("todo-comments").setup {
signs = true, -- show icons in the signs column
signs = true, -- Show icons in the signs column
keywords = {
TODO = { icon = " ", color = "info" },
FIXME = { icon = " ", color = "error" },
HACK = { icon = " ", color = "warning" },
WARN = { icon = " ", color = "warning" },
NOTE = { icon = " ", color = "hint" },
TODO = { icon = "", color = "info" },
FIXME = { icon = "", color = "error" },
HACK = { icon = "", color = "warning" },
WARN = { icon = "", color = "warning" },
NOTE = { icon = "", color = "hint" },
},
highlight = {
before = "fg", -- highlight the keyword
keyword = "wide", -- highlight the whole keyword
after = "fg", -- highlight the message
before = "", -- Don't highlight before the keyword
keyword = "wide", -- Highlight the keyword itself
after = "fg", -- Highlight after the keyword
},
search = {
command = "rg", -- ripgrep as the default search command
command = "rg", -- Use ripgrep for searching
args = {
"--color=never", "--no-heading", "--with-filename", "--line-number", "--column"
"--color=never", "--no-heading", "--with-filename", "--line-number", "--column",
},
},
}

8
nvim/lua/settings.lua Normal file
View File

@@ -0,0 +1,8 @@
-- Global settings
vim.opt.tabstop = 4 -- Number of spaces that a <Tab> counts for
vim.opt.shiftwidth = 4 -- Number of spaces for indentation
vim.opt.expandtab = true -- Use spaces instead of tabs
-- Coloscheme
vim.cmd [[colorscheme tokyonight]]

View File

@@ -0,0 +1,252 @@
-- Automatically generated packer.nvim plugin loader code
if vim.api.nvim_call_function('has', {'nvim-0.5'}) ~= 1 then
vim.api.nvim_command('echohl WarningMsg | echom "Invalid Neovim version for packer.nvim! | echohl None"')
return
end
vim.api.nvim_command('packadd packer.nvim')
local no_errors, error_msg = pcall(function()
_G._packer = _G._packer or {}
_G._packer.inside_compile = true
local time
local profile_info
local should_profile = false
if should_profile then
local hrtime = vim.loop.hrtime
profile_info = {}
time = function(chunk, start)
if start then
profile_info[chunk] = hrtime()
else
profile_info[chunk] = (hrtime() - profile_info[chunk]) / 1e6
end
end
else
time = function(chunk, start) end
end
local function save_profiles(threshold)
local sorted_times = {}
for chunk_name, time_taken in pairs(profile_info) do
sorted_times[#sorted_times + 1] = {chunk_name, time_taken}
end
table.sort(sorted_times, function(a, b) return a[2] > b[2] end)
local results = {}
for i, elem in ipairs(sorted_times) do
if not threshold or threshold and elem[2] > threshold then
results[i] = elem[1] .. ' took ' .. elem[2] .. 'ms'
end
end
if threshold then
table.insert(results, '(Only showing plugins that took longer than ' .. threshold .. ' ms ' .. 'to load)')
end
_G._packer.profile_output = results
end
time([[Luarocks path setup]], true)
local package_path_str = "/Users/thomasnaderer/.cache/nvim/packer_hererocks/2.1.1734355927/share/lua/5.1/?.lua;/Users/thomasnaderer/.cache/nvim/packer_hererocks/2.1.1734355927/share/lua/5.1/?/init.lua;/Users/thomasnaderer/.cache/nvim/packer_hererocks/2.1.1734355927/lib/luarocks/rocks-5.1/?.lua;/Users/thomasnaderer/.cache/nvim/packer_hererocks/2.1.1734355927/lib/luarocks/rocks-5.1/?/init.lua"
local install_cpath_pattern = "/Users/thomasnaderer/.cache/nvim/packer_hererocks/2.1.1734355927/lib/lua/5.1/?.so"
if not string.find(package.path, package_path_str, 1, true) then
package.path = package.path .. ';' .. package_path_str
end
if not string.find(package.cpath, install_cpath_pattern, 1, true) then
package.cpath = package.cpath .. ';' .. install_cpath_pattern
end
time([[Luarocks path setup]], false)
time([[try_loadstring definition]], true)
local function try_loadstring(s, component, name)
local success, result = pcall(loadstring(s), name, _G.packer_plugins[name])
if not success then
vim.schedule(function()
vim.api.nvim_notify('packer.nvim: Error running ' .. component .. ' for ' .. name .. ': ' .. result, vim.log.levels.ERROR, {})
end)
end
return result
end
time([[try_loadstring definition]], false)
time([[Defining packer_plugins]], true)
_G.packer_plugins = {
["Comment.nvim"] = {
loaded = true,
path = "/Users/thomasnaderer/.local/share/nvim/site/pack/packer/start/Comment.nvim",
url = "https://github.com/numToStr/Comment.nvim"
},
["auto-save.nvim"] = {
config = { "\27LJ\2\n;\0\0\3\0\3\0\a6\0\0\0'\2\1\0B\0\2\0029\0\2\0004\2\0\0B\0\2\1K\0\1\0\nsetup\14auto-save\frequire\0" },
loaded = true,
path = "/Users/thomasnaderer/.local/share/nvim/site/pack/packer/start/auto-save.nvim",
url = "https://github.com/okuuva/auto-save.nvim"
},
["dashboard-nvim"] = {
loaded = true,
path = "/Users/thomasnaderer/.local/share/nvim/site/pack/packer/start/dashboard-nvim",
url = "https://github.com/glepnir/dashboard-nvim"
},
fzf = {
loaded = true,
path = "/Users/thomasnaderer/.local/share/nvim/site/pack/packer/start/fzf",
url = "https://github.com/junegunn/fzf"
},
["fzf.vim"] = {
loaded = true,
path = "/Users/thomasnaderer/.local/share/nvim/site/pack/packer/start/fzf.vim",
url = "https://github.com/junegunn/fzf.vim"
},
["gitsigns.nvim"] = {
loaded = true,
path = "/Users/thomasnaderer/.local/share/nvim/site/pack/packer/start/gitsigns.nvim",
url = "https://github.com/lewis6991/gitsigns.nvim"
},
gruvbox = {
loaded = true,
path = "/Users/thomasnaderer/.local/share/nvim/site/pack/packer/start/gruvbox",
url = "https://github.com/gruvbox-community/gruvbox"
},
["hardtime.nvim"] = {
loaded = true,
path = "/Users/thomasnaderer/.local/share/nvim/site/pack/packer/start/hardtime.nvim",
url = "https://github.com/m4xshen/hardtime.nvim"
},
["headlines.nvim"] = {
config = { "\27LJ\2\n7\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\nsetup\14headlines\frequire\0" },
load_after = {},
loaded = true,
needs_bufread = false,
path = "/Users/thomasnaderer/.local/share/nvim/site/pack/packer/opt/headlines.nvim",
url = "https://github.com/lukas-reineke/headlines.nvim"
},
["lualine.nvim"] = {
loaded = true,
path = "/Users/thomasnaderer/.local/share/nvim/site/pack/packer/start/lualine.nvim",
url = "https://github.com/nvim-lualine/lualine.nvim"
},
["nui.nvim"] = {
loaded = true,
path = "/Users/thomasnaderer/.local/share/nvim/site/pack/packer/start/nui.nvim",
url = "https://github.com/MunifTanjim/nui.nvim"
},
["nvim-autopairs"] = {
loaded = true,
path = "/Users/thomasnaderer/.local/share/nvim/site/pack/packer/start/nvim-autopairs",
url = "https://github.com/windwp/nvim-autopairs"
},
["nvim-tree.lua"] = {
config = { "\27LJ\2\n?\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\nsetup\22plugins.nvim-tree\frequire\0" },
loaded = true,
path = "/Users/thomasnaderer/.local/share/nvim/site/pack/packer/start/nvim-tree.lua",
url = "https://github.com/nvim-tree/nvim-tree.lua"
},
["nvim-treesitter"] = {
loaded = true,
path = "/Users/thomasnaderer/.local/share/nvim/site/pack/packer/start/nvim-treesitter",
url = "https://github.com/nvim-treesitter/nvim-treesitter"
},
["nvim-web-devicons"] = {
loaded = false,
needs_bufread = false,
path = "/Users/thomasnaderer/.local/share/nvim/site/pack/packer/opt/nvim-web-devicons",
url = "https://github.com/kyazdani42/nvim-web-devicons"
},
["outline.nvim"] = {
config = { "\27LJ\2\n=\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\nsetup\20plugins.outline\frequire\0" },
loaded = true,
path = "/Users/thomasnaderer/.local/share/nvim/site/pack/packer/start/outline.nvim",
url = "https://github.com/hedyhli/outline.nvim"
},
["packer.nvim"] = {
loaded = true,
path = "/Users/thomasnaderer/.local/share/nvim/site/pack/packer/start/packer.nvim",
url = "https://github.com/wbthomason/packer.nvim"
},
["plenary.nvim"] = {
loaded = true,
path = "/Users/thomasnaderer/.local/share/nvim/site/pack/packer/start/plenary.nvim",
url = "https://github.com/nvim-lua/plenary.nvim"
},
["rainbow-delimiters.nvim"] = {
loaded = true,
path = "/Users/thomasnaderer/.local/share/nvim/site/pack/packer/start/rainbow-delimiters.nvim",
url = "https://github.com/HiPhish/rainbow-delimiters.nvim"
},
["telescope.nvim"] = {
config = { "\27LJ\2\n\3\0\0\6\0\16\0!6\0\0\0009\0\1\0009\0\2\0'\2\3\0'\3\4\0'\4\5\0005\5\6\0B\0\5\0016\0\0\0009\0\1\0009\0\2\0'\2\3\0'\3\a\0'\4\b\0005\5\t\0B\0\5\0016\0\0\0009\0\1\0009\0\2\0'\2\3\0'\3\n\0'\4\v\0005\5\f\0B\0\5\0016\0\0\0009\0\1\0009\0\2\0'\2\3\0'\3\r\0'\4\14\0005\5\15\0B\0\5\1K\0\1\0\1\0\2\vsilent\2\fnoremap\2\29:Telescope help_tags<CR>\15<leader>fh\1\0\2\vsilent\2\fnoremap\2\27:Telescope buffers<CR>\15<leader>fb\1\0\2\vsilent\2\fnoremap\2\29:Telescope live_grep<CR>\15<leader>fg\1\0\2\vsilent\2\fnoremap\2\30:Telescope find_files<CR>\15<leader>ff\6n\20nvim_set_keymap\bapi\bvim\0" },
loaded = true,
path = "/Users/thomasnaderer/.local/share/nvim/site/pack/packer/start/telescope.nvim",
url = "https://github.com/nvim-telescope/telescope.nvim"
},
["todo-comments.nvim"] = {
loaded = true,
path = "/Users/thomasnaderer/.local/share/nvim/site/pack/packer/start/todo-comments.nvim",
url = "https://github.com/folke/todo-comments.nvim"
},
["tokyonight.nvim"] = {
loaded = true,
path = "/Users/thomasnaderer/.local/share/nvim/site/pack/packer/start/tokyonight.nvim",
url = "https://github.com/folke/tokyonight.nvim"
},
["vim-fugitive"] = {
loaded = true,
path = "/Users/thomasnaderer/.local/share/nvim/site/pack/packer/start/vim-fugitive",
url = "https://github.com/tpope/vim-fugitive"
},
["vim-surround"] = {
loaded = true,
path = "/Users/thomasnaderer/.local/share/nvim/site/pack/packer/start/vim-surround",
url = "https://github.com/tpope/vim-surround"
},
vimtex = {
loaded = true,
path = "/Users/thomasnaderer/.local/share/nvim/site/pack/packer/start/vimtex",
url = "https://github.com/lervag/vimtex"
}
}
time([[Defining packer_plugins]], false)
-- Config for: outline.nvim
time([[Config for outline.nvim]], true)
try_loadstring("\27LJ\2\n=\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\nsetup\20plugins.outline\frequire\0", "config", "outline.nvim")
time([[Config for outline.nvim]], false)
-- Config for: auto-save.nvim
time([[Config for auto-save.nvim]], true)
try_loadstring("\27LJ\2\n;\0\0\3\0\3\0\a6\0\0\0'\2\1\0B\0\2\0029\0\2\0004\2\0\0B\0\2\1K\0\1\0\nsetup\14auto-save\frequire\0", "config", "auto-save.nvim")
time([[Config for auto-save.nvim]], false)
-- Config for: nvim-tree.lua
time([[Config for nvim-tree.lua]], true)
try_loadstring("\27LJ\2\n?\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\nsetup\22plugins.nvim-tree\frequire\0", "config", "nvim-tree.lua")
time([[Config for nvim-tree.lua]], false)
-- Config for: telescope.nvim
time([[Config for telescope.nvim]], true)
try_loadstring("\27LJ\2\n\3\0\0\6\0\16\0!6\0\0\0009\0\1\0009\0\2\0'\2\3\0'\3\4\0'\4\5\0005\5\6\0B\0\5\0016\0\0\0009\0\1\0009\0\2\0'\2\3\0'\3\a\0'\4\b\0005\5\t\0B\0\5\0016\0\0\0009\0\1\0009\0\2\0'\2\3\0'\3\n\0'\4\v\0005\5\f\0B\0\5\0016\0\0\0009\0\1\0009\0\2\0'\2\3\0'\3\r\0'\4\14\0005\5\15\0B\0\5\1K\0\1\0\1\0\2\vsilent\2\fnoremap\2\29:Telescope help_tags<CR>\15<leader>fh\1\0\2\vsilent\2\fnoremap\2\27:Telescope buffers<CR>\15<leader>fb\1\0\2\vsilent\2\fnoremap\2\29:Telescope live_grep<CR>\15<leader>fg\1\0\2\vsilent\2\fnoremap\2\30:Telescope find_files<CR>\15<leader>ff\6n\20nvim_set_keymap\bapi\bvim\0", "config", "telescope.nvim")
time([[Config for telescope.nvim]], false)
-- Load plugins in order defined by `after`
time([[Sequenced loading]], true)
vim.cmd [[ packadd nvim-treesitter ]]
vim.cmd [[ packadd headlines.nvim ]]
-- Config for: headlines.nvim
try_loadstring("\27LJ\2\n7\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\nsetup\14headlines\frequire\0", "config", "headlines.nvim")
time([[Sequenced loading]], false)
_G._packer.inside_compile = false
if _G._packer.needs_bufread == true then
vim.cmd("doautocmd BufRead")
end
_G._packer.needs_bufread = false
if should_profile then save_profiles() end
end)
if not no_errors then
error_msg = error_msg:gsub('"', '\\"')
vim.api.nvim_command('echohl ErrorMsg | echom "Error in packer_compiled: '..error_msg..'" | echom "Please check your config for correctness" | echohl None')
end