diff --git a/lf/cleaner b/lf/cleaner new file mode 100644 index 0000000..75e62a0 --- /dev/null +++ b/lf/cleaner @@ -0,0 +1,5 @@ +#!/bin/sh + +if [ -n "$FIFO_UEBERZUG" ]; then + printf '{"action": "remove", "identifier": "PREVIEW"}\n' > "$FIFO_UEBERZUG" +fi diff --git a/lf/icons b/lf/icons new file mode 100644 index 0000000..95f820b --- /dev/null +++ b/lf/icons @@ -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  diff --git a/lf/lfrc b/lf/lfrc new file mode 100644 index 0000000..e39293c --- /dev/null +++ b/lf/lfrc @@ -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 :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 +#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 shell +map V push :!nvim +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 # new rename +map I push A # at the very beginning +map i push A # before extention +map a push A # 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$HOME/.config/lf/lfrc +map cz push :!nvim$HOME/.config/zsh/.zshrc +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 + diff --git a/lf/scope b/lf/scope new file mode 100644 index 0000000..71ab628 --- /dev/null +++ b/lf/scope @@ -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 diff --git a/nvim/init.lua b/nvim/init.lua index 7c25510..4971b09 100644 --- a/nvim/init.lua +++ b/nvim/init.lua @@ -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', 'ff', ':Telescope find_files', { noremap = true, silent = true }) - vim.api.nvim_set_keymap('n', 'fg', ':Telescope live_grep', { noremap = true, silent = true }) - vim.api.nvim_set_keymap('n', 'fb', ':Telescope buffers', { noremap = true, silent = true }) - vim.api.nvim_set_keymap('n', 'fh', ':Telescope help_tags', { noremap = true, silent = true }) - end - } - use { - 'hedyhli/outline.nvim', - config = function() - require('plugins.outline').setup() - end - } -end -) +require('plugins') diff --git a/nvim/lua/keymaps.lua b/nvim/lua/keymaps.lua new file mode 100644 index 0000000..6f97598 --- /dev/null +++ b/nvim/lua/keymaps.lua @@ -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", "", "", opts) +keymap("n", "", "", opts) +keymap("n", "", "", opts) +keymap("n", "", "", opts) +keymap("i", "", "", opts) +keymap("i", "", "", opts) +keymap("i", "", "", opts) +keymap("i", "", "", opts) + +-- lazy write / quit +keymap("n", "w", ":w", opts) +keymap("n", "q", ":q", opts) +keymap("n", "wq", ":wq", opts) +keymap("n", "W", ":w!", opts) +keymap("n", "Q", ":q!", opts) +keymap("n", "WQ", ":wq!", opts) + +-- navigate properly when lines are wrapped +keymap("n", "j", "gj", opts) +keymap("n", "k", "gk", opts) + +-- toggle relativenumber +keymap("n", "r", ":set invrnu", opts) + +-- easy folding +-- toggle fold under cursor no jumping around +keymap("n", "z", "za0", opts) + +-- maintaining visual mode after shifting > and < +keymap("v", ">", ">gv", opts) +keymap("v", "<", "", ":move '>+1gv-gv", opts) +-- keymap("x", "", ":move '<-2gv-gv", opts) + +-- navigate buffers +keymap("n", "", ":bnext", opts) +keymap("n", "", ":bprevious", opts) + +-- scrolling command-line history +keymap("c", "", "", opts) +keymap("c", "", "", opts) + +-- open the current file in the default program +keymap("n", "x", [[:!xdg-open %]], opts) + +-- -- no ex mode for me +-- keymap("n", "Q", "", opts) + +-- prevent accidentally record functionality +keymap("n", "q", "", 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", "c", ":set cursorcolumn!", opts) + +-- toggle netrw +keymap("n", "nd", ":Lexplore %:p:h", opts) +keymap("n", "n", ":Lexplore", opts) + +-- clear highlighting from the search +keymap("n", "", ":nohlsearch", opts) + +-- toggle spell checking +keymap("n", "s", ":setlocal spell! spelllang=en_us,nl", opts) + +-- date time stamp +keymap("n", "dt", [[i=strftime("%a %d %Y %H:%M")]], opts) + +-- double space over word to find and replace +keymap("n", "", [[:%s/\<=expand("")\>/]], 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", "df", [[:w !diff % -]], opt) diff --git a/nvim/lua/plugins.lua b/nvim/lua/plugins.lua new file mode 100644 index 0000000..d14a6ad --- /dev/null +++ b/nvim/lua/plugins.lua @@ -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', 'ff', ':Telescope find_files', { noremap = true, silent = true }) + vim.api.nvim_set_keymap('n', 'fg', ':Telescope live_grep', { noremap = true, silent = true }) + vim.api.nvim_set_keymap('n', 'fb', ':Telescope buffers', { noremap = true, silent = true }) + vim.api.nvim_set_keymap('n', 'fh', ':Telescope help_tags', { noremap = true, silent = true }) + end + } + -- }}} + + -- {{{ Outline + use { + 'hedyhli/outline.nvim', + config = function() + require('plugins.outline').setup() + end + } + -- }}} + +end) + diff --git a/nvim/lua/plugins/todo-comments.lua b/nvim/lua/plugins/todo-comments.lua index 773034c..3f3ab81 100644 --- a/nvim/lua/plugins/todo-comments.lua +++ b/nvim/lua/plugins/todo-comments.lua @@ -1,21 +1,21 @@ require("todo-comments").setup { - 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" }, - }, - highlight = { - before = "fg", -- highlight the keyword - keyword = "wide", -- highlight the whole keyword - after = "fg", -- highlight the message - }, - search = { - command = "rg", -- ripgrep as the default search command - args = { - "--color=never", "--no-heading", "--with-filename", "--line-number", "--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" }, + }, + highlight = { + before = "", -- Don't highlight before the keyword + keyword = "wide", -- Highlight the keyword itself + after = "fg", -- Highlight after the keyword + }, + search = { + command = "rg", -- Use ripgrep for searching + args = { + "--color=never", "--no-heading", "--with-filename", "--line-number", "--column", + }, + }, } diff --git a/nvim/lua/settings.lua b/nvim/lua/settings.lua new file mode 100644 index 0000000..5084554 --- /dev/null +++ b/nvim/lua/settings.lua @@ -0,0 +1,8 @@ +-- Global settings +vim.opt.tabstop = 4 -- Number of spaces that a 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]] + diff --git a/nvim/plugin/packer_compiled.lua b/nvim/plugin/packer_compiled.lua new file mode 100644 index 0000000..8b4d983 --- /dev/null +++ b/nvim/plugin/packer_compiled.lua @@ -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\15fh\1\0\2\vsilent\2\fnoremap\2\27:Telescope buffers\15fb\1\0\2\vsilent\2\fnoremap\2\29:Telescope live_grep\15fg\1\0\2\vsilent\2\fnoremap\2\30:Telescope find_files\15ff\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\15fh\1\0\2\vsilent\2\fnoremap\2\27:Telescope buffers\15fb\1\0\2\vsilent\2\fnoremap\2\29:Telescope live_grep\15fg\1\0\2\vsilent\2\fnoremap\2\30:Telescope find_files\15ff\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