all: Initial dotfiles
Import an initial copy of all of my dotfiles Signed-off-by: Nicholas Mello <nick@nmello.dev>
This commit is contained in:
170
bash/bashrc.sh
Normal file
170
bash/bashrc.sh
Normal file
@@ -0,0 +1,170 @@
|
||||
# ~/.bashrc: executed by bash(1) for non-login shells.
|
||||
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
|
||||
# for examples
|
||||
|
||||
# If not running interactively, don't do anything
|
||||
case $- in
|
||||
*i*) ;;
|
||||
*) return;;
|
||||
esac
|
||||
|
||||
# don't put duplicate lines or lines starting with space in the history.
|
||||
# See bash(1) for more options
|
||||
HISTCONTROL=ignoreboth
|
||||
|
||||
# append to the history file, don't overwrite it
|
||||
shopt -s histappend
|
||||
|
||||
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
|
||||
HISTSIZE=1000
|
||||
HISTFILESIZE=2000
|
||||
|
||||
# check the window size after each command and, if necessary,
|
||||
# update the values of LINES and COLUMNS.
|
||||
shopt -s checkwinsize
|
||||
|
||||
# If set, the pattern "**" used in a pathname expansion context will
|
||||
# match all files and zero or more directories and subdirectories.
|
||||
#shopt -s globstar
|
||||
|
||||
# make less more friendly for non-text input files, see lesspipe(1)
|
||||
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"
|
||||
|
||||
# set variable identifying the chroot you work in (used in the prompt below)
|
||||
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
|
||||
debian_chroot=$(cat /etc/debian_chroot)
|
||||
fi
|
||||
|
||||
# set a fancy prompt (non-color, unless we know we "want" color)
|
||||
case "$TERM" in
|
||||
xterm-color) color_prompt=yes;;
|
||||
esac
|
||||
|
||||
# uncomment for a colored prompt, if the terminal has the capability; turned
|
||||
# off by default to not distract the user: the focus in a terminal window
|
||||
# should be on the output of commands, not on the prompt
|
||||
#force_color_prompt=yes
|
||||
|
||||
if [ -n "$force_color_prompt" ]; then
|
||||
if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
|
||||
# We have color support; assume it's compliant with Ecma-48
|
||||
# (ISO/IEC-6429). (Lack of such support is extremely rare, and such
|
||||
# a case would tend to support setf rather than setaf.)
|
||||
color_prompt=yes
|
||||
else
|
||||
color_prompt=
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$color_prompt" = yes ]; then
|
||||
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
|
||||
else
|
||||
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
|
||||
fi
|
||||
unset color_prompt force_color_prompt
|
||||
|
||||
# If this is an xterm set the title to user@host:dir
|
||||
case "$TERM" in
|
||||
xterm*|rxvt*)
|
||||
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
|
||||
;;
|
||||
*)
|
||||
;;
|
||||
esac
|
||||
|
||||
# enable color support of ls and also add handy aliases
|
||||
if [ -x /usr/bin/dircolors ]; then
|
||||
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
|
||||
alias ls='ls --color=auto'
|
||||
#alias dir='dir --color=auto'
|
||||
#alias vdir='vdir --color=auto'
|
||||
|
||||
alias grep='grep --color=auto'
|
||||
alias fgrep='fgrep --color=auto'
|
||||
alias egrep='egrep --color=auto'
|
||||
fi
|
||||
|
||||
# some more ls aliases
|
||||
alias ll='ls -alF'
|
||||
alias la='ls -A'
|
||||
alias l='ls -CF'
|
||||
|
||||
# Add an "alert" alias for long running commands. Use like so:
|
||||
# sleep 10; alert
|
||||
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
|
||||
|
||||
# Alias definitions.
|
||||
# You may want to put all your additions into a separate file like
|
||||
# ~/.bash_aliases, instead of adding them here directly.
|
||||
# See /usr/share/doc/bash-doc/examples in the bash-doc package.
|
||||
|
||||
if [ -f ~/.bash_aliases ]; then
|
||||
. ~/.bash_aliases
|
||||
fi
|
||||
|
||||
# enable programmable completion features (you don't need to enable
|
||||
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
|
||||
# sources /etc/bash.bashrc).
|
||||
if ! shopt -oq posix; then
|
||||
if [ -f /usr/share/bash-completion/bash_completion ]; then
|
||||
. /usr/share/bash-completion/bash_completion
|
||||
elif [ -f /etc/bash_completion ]; then
|
||||
. /etc/bash_completion
|
||||
fi
|
||||
fi
|
||||
# Allow the user to set the title.
|
||||
function title {
|
||||
PROMPT_COMMAND="echo -ne \"\033]0;$1 (on $HOSTNAME)\007\""
|
||||
}
|
||||
export BR2_DL_DIR="$HOME/.buildroot-dl/"
|
||||
export PATH="${HOME}/tools/:$PATH"
|
||||
alias python=python3
|
||||
alias vi="reload_display && nvim"
|
||||
alias start="dtach -c /tmp/lvimsession ~/tools/lvim"
|
||||
alias resume="dtach -a /tmp/lvimsession"
|
||||
export EDITOR='nvim'
|
||||
alias tmux="tmux"
|
||||
|
||||
export NVM_DIR="$HOME/.nvm"
|
||||
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
|
||||
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
|
||||
if [ -d "$HOME/.cargo" ]; then
|
||||
. "$HOME/.cargo/env"
|
||||
fi
|
||||
export TERM="xterm-256color"
|
||||
date="$(date +%m)"
|
||||
if [ "$date" -gt "11" ]; then
|
||||
# December
|
||||
export PS1="\[$(tput setaf 39)\]\u\[$(tput setaf 45)\]@\[$(tput setaf 51)\]\h \[$(tput setaf 195)\]\w \[$(tput sgr0)\]$ "
|
||||
elif [ "$date" -gt "08" ]; then
|
||||
# September/October/November
|
||||
export PS1="\[$(tput setaf 216)\]\u\[$(tput setaf 160)\]@\[$(tput setaf 202)\]\h \[$(tput setaf 131)\]\w \[$(tput sgr0)\]$ "
|
||||
elif [ "$date" -gt "05" ]; then
|
||||
# June/July/August
|
||||
export PS1="\[$(tput setaf 47)\]\u\[$(tput setaf 156)\]@\[$(tput setaf 227)\]\h \[$(tput setaf 231)\]\w \[$(tput sgr0)\]$ "
|
||||
elif [ "$date" -gt "02" ]; then
|
||||
# March/April/May
|
||||
export PS1="\[$(tput setaf 34)\]\u\[$(tput setaf 40)\]@\[$(tput setaf 46)\]\h \[$(tput setaf 154)\]\w \[$(tput sgr0)\]$ "
|
||||
else
|
||||
# January/Feburary
|
||||
export PS1="\[$(tput setaf 39)\]\u\[$(tput setaf 45)\]@\[$(tput setaf 51)\]\h \[$(tput setaf 195)\]\w \[$(tput sgr0)\]$ "
|
||||
fi
|
||||
if [ "$date" -eq "05" ] && [ "$(date +%d)" -eq "22" ]; then
|
||||
# Crazy birthday prompt
|
||||
export PS1="\[$(tput setaf 196)\]\u\[$(tput setaf 14)\]@\[$(tput setaf 10)\]\h \[$(tput setaf 11)\]\w \[$(tput sgr0)\]$ "
|
||||
fi
|
||||
|
||||
|
||||
export PROMPT_DIRTRIM=3
|
||||
export PATH="$HOME/.local/bin:$PATH"
|
||||
|
||||
[ -f ~/.fzf.bash ] && source ~/.fzf.bash
|
||||
|
||||
export PROMPT_COMMAND="history -a; history -n"
|
||||
|
||||
alias vimdiff="nvim -d"
|
||||
alias reload_display="export DISPLAY=\"\`tmux show-env | sed -n 's/^DISPLAY=//p'\`\""
|
||||
alias gitlog="git log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(auto)%d%C(reset)' --all"
|
||||
alias resource="source $HOME/.bashrc"
|
||||
|
||||
export STM32_PRG_PATH=/home/nicholasmello/STMicroelectronics/STM32Cube/STM32CubeProgrammer/binexport PATH="/home/nicholasmello/.pixi/bin:$PATH"
|
||||
5
fish/config.fish
Normal file
5
fish/config.fish
Normal file
@@ -0,0 +1,5 @@
|
||||
if status is-interactive
|
||||
if type -q fzf
|
||||
fzf --fish | source
|
||||
end
|
||||
end
|
||||
31
fish/fish_variables
Normal file
31
fish/fish_variables
Normal file
@@ -0,0 +1,31 @@
|
||||
# This file contains fish universal variable definitions.
|
||||
# VERSION: 3.0
|
||||
SETUVAR __fish_initialized:3800
|
||||
SETUVAR fish_color_autosuggestion:brblack
|
||||
SETUVAR fish_color_cancel:\x2dr
|
||||
SETUVAR fish_color_command:blue
|
||||
SETUVAR fish_color_comment:red
|
||||
SETUVAR fish_color_cwd:green
|
||||
SETUVAR fish_color_cwd_root:red
|
||||
SETUVAR fish_color_end:green
|
||||
SETUVAR fish_color_error:brred
|
||||
SETUVAR fish_color_escape:brcyan
|
||||
SETUVAR fish_color_history_current:\x2d\x2dbold
|
||||
SETUVAR fish_color_host:normal
|
||||
SETUVAR fish_color_host_remote:yellow
|
||||
SETUVAR fish_color_normal:normal
|
||||
SETUVAR fish_color_operator:brcyan
|
||||
SETUVAR fish_color_param:cyan
|
||||
SETUVAR fish_color_quote:yellow
|
||||
SETUVAR fish_color_redirection:cyan\x1e\x2d\x2dbold
|
||||
SETUVAR fish_color_search_match:white\x1e\x2d\x2dbackground\x3dbrblack
|
||||
SETUVAR fish_color_selection:white\x1e\x2d\x2dbold\x1e\x2d\x2dbackground\x3dbrblack
|
||||
SETUVAR fish_color_status:red
|
||||
SETUVAR fish_color_user:brgreen
|
||||
SETUVAR fish_color_valid_path:\x2d\x2dunderline
|
||||
SETUVAR fish_key_bindings:fish_default_key_bindings
|
||||
SETUVAR fish_pager_color_completion:normal
|
||||
SETUVAR fish_pager_color_description:yellow\x1e\x2di
|
||||
SETUVAR fish_pager_color_prefix:normal\x1e\x2d\x2dbold\x1e\x2d\x2dunderline
|
||||
SETUVAR fish_pager_color_progress:brwhite\x1e\x2d\x2dbackground\x3dcyan
|
||||
SETUVAR fish_pager_color_selected_background:\x2dr
|
||||
134
fish/functions/list-archive-contents.fish
Normal file
134
fish/functions/list-archive-contents.fish
Normal file
@@ -0,0 +1,134 @@
|
||||
function list-archive-contents --description "Recursively list contents of zip and tar archives"
|
||||
argparse --name=list-archive-contents h/help 'o=' -- $argv
|
||||
or return 1
|
||||
|
||||
function print_help
|
||||
echo "
|
||||
Usage: list-archive-contents [-h] [-o output_file] archive1 [archive2 ...]
|
||||
|
||||
Recursively lists the contents of zip and tar files, including nested archives.
|
||||
|
||||
Options:
|
||||
-h, --help Show this help message and exit
|
||||
-o output_file Write output to the specified file instead of printing
|
||||
"
|
||||
end
|
||||
|
||||
if set -q _flag_help
|
||||
print_help
|
||||
return 0
|
||||
end
|
||||
|
||||
set -g output_file ""
|
||||
if set -q _flag_o
|
||||
set output_file $_flag_o
|
||||
rm -rf $output_file
|
||||
end
|
||||
|
||||
set -l args $argv
|
||||
|
||||
if test (count $args) -eq 0
|
||||
print_help
|
||||
return 0
|
||||
end
|
||||
|
||||
# Print indentation as real tabs
|
||||
function _indent
|
||||
set -l level $argv[1]
|
||||
printf "%s" (string repeat $level " ")
|
||||
end
|
||||
|
||||
# Print line with indentation, to file or stdout
|
||||
function _print
|
||||
set -l depth $argv[1]
|
||||
set -l message $argv[2..-1]
|
||||
set -l indent (_indent $depth)
|
||||
if test -n "$output_file"
|
||||
printf "%s%s\n" $indent $message >>"$output_file"
|
||||
else
|
||||
printf "%s%s\n" $indent $message
|
||||
end
|
||||
end
|
||||
|
||||
function list_contents_recursive
|
||||
set -l file $argv[1]
|
||||
set -l depth $argv[2]
|
||||
|
||||
if not test -f "$file"
|
||||
_print $depth "File not found: $file"
|
||||
return
|
||||
end
|
||||
|
||||
# Show only basename in header to hide /tmp/
|
||||
set -l display_file (basename -- "$file")
|
||||
_print $depth "📦 $display_file"
|
||||
|
||||
set -l ext (string lower $display_file)
|
||||
|
||||
switch $ext
|
||||
case '*.zip'
|
||||
set -l tmpdir (mktemp -d)
|
||||
unzip -q "$file" -d "$tmpdir"
|
||||
|
||||
# Gather nested archives
|
||||
set -l nested_archives (find "$tmpdir" -type f \( -iname '*.zip' -o -iname '*.tar' -o -iname '*.tar.gz' -o -iname '*.tgz' -o -iname '*.tar.bz2' -o -iname '*.tbz2' -o -iname '*.tar.xz' -o -iname '*.txz' \))
|
||||
|
||||
# Print normal files (excluding nested archives)
|
||||
find "$tmpdir" -type f | while read -l inner
|
||||
if contains -- "$inner" $nested_archives
|
||||
continue
|
||||
end
|
||||
set -l relpath (string replace -- "$tmpdir/" "" "$inner")
|
||||
_print (math $depth + 1) "$relpath"
|
||||
end
|
||||
|
||||
# Recurse into each nested archive
|
||||
for nested in $nested_archives
|
||||
list_contents_recursive "$nested" (math $depth + 1)
|
||||
end
|
||||
|
||||
rm -rf "$tmpdir"
|
||||
|
||||
case '*.tar' '*.tar.gz' '*.tgz' '*.tar.bz2' '*.tbz2' '*.tar.xz' '*.txz'
|
||||
set -l tmpdir (mktemp -d)
|
||||
switch $ext
|
||||
case '*.tar'
|
||||
tar -xf "$file" -C "$tmpdir"
|
||||
case '*.tar.gz' '*.tgz'
|
||||
tar -xzf "$file" -C "$tmpdir"
|
||||
case '*.tar.bz2' '*.tbz2'
|
||||
tar -xjf "$file" -C "$tmpdir"
|
||||
case '*.tar.xz' '*.txz'
|
||||
tar -xJf "$file" -C "$tmpdir"
|
||||
end
|
||||
|
||||
# Find nested archives in extracted tree
|
||||
set -l nested_archives (find "$tmpdir" -type f \( -iname '*.zip' -o -iname '*.tar' -o -iname '*.tar.gz' -o -iname '*.tgz' -o -iname '*.tar.bz2' -o -iname '*.tbz2' -o -iname '*.tar.xz' -o -iname '*.txz' \))
|
||||
|
||||
# Print all files except nested archives themselves
|
||||
find "$tmpdir" -type f | while read -l inner
|
||||
if contains -- "$inner" $nested_archives
|
||||
continue
|
||||
end
|
||||
set -l relpath (string replace -- "$tmpdir/" "" "$inner")
|
||||
_print (math $depth + 1) "$relpath"
|
||||
end
|
||||
|
||||
# Recurse into nested archives
|
||||
for nested in $nested_archives
|
||||
list_contents_recursive "$nested" (math $depth + 1)
|
||||
end
|
||||
|
||||
rm -rf "$tmpdir"
|
||||
|
||||
case '*'
|
||||
_print $depth "❌ Unsupported file format: $file"
|
||||
end
|
||||
end
|
||||
|
||||
for arg in $args
|
||||
for file in (eval echo $arg)
|
||||
list_contents_recursive "$file" 0
|
||||
end
|
||||
end
|
||||
end
|
||||
3
fish/functions/vi.fish
Normal file
3
fish/functions/vi.fish
Normal file
@@ -0,0 +1,3 @@
|
||||
function vi --wraps nvim --description "Alias for neovim"
|
||||
nvim $argv
|
||||
end
|
||||
11
git/gitconfig
Normal file
11
git/gitconfig
Normal file
@@ -0,0 +1,11 @@
|
||||
[user]
|
||||
name = Nick Mello
|
||||
email = nick@nmello.dev
|
||||
signingkey = A4007252A92585A8
|
||||
[commit]
|
||||
template = /home/nicholasmello/.gitmessage
|
||||
gpgsign = true
|
||||
[merge]
|
||||
tool = vimdiff
|
||||
[gpg]
|
||||
program = gpg
|
||||
7
git/gitmessage
Normal file
7
git/gitmessage
Normal file
@@ -0,0 +1,7 @@
|
||||
# Title: Summary, imperative, start upper case, don't end with a period
|
||||
# No more than 50 chars. #### 50 chars is here: #
|
||||
|
||||
# Body: Explain *what* and *why* (not *how*). Include task ID (Jira issue).
|
||||
# Wrap at 72 chars. ################################## which is here: #
|
||||
|
||||
Signed-off-by: Nicholas Mello <nick@nmello.dev>
|
||||
47
nvim/.editorconfig
Normal file
47
nvim/.editorconfig
Normal file
@@ -0,0 +1,47 @@
|
||||
# EditorConfig is awesome: https://editorconfig.org
|
||||
|
||||
root = true
|
||||
|
||||
# Neovim Lua config files
|
||||
[*.lua]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
charset = utf-8
|
||||
|
||||
# Vim script files
|
||||
[*.vim]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
charset = utf-8
|
||||
|
||||
# Shell scripts
|
||||
[*.sh]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
charset = utf-8
|
||||
|
||||
# Markdown files
|
||||
[*.md]
|
||||
trim_trailing_whitespace = false
|
||||
insert_final_newline = true
|
||||
charset = utf-8
|
||||
|
||||
# Git commit messages
|
||||
[COMMIT_EDITMSG]
|
||||
trim_trailing_whitespace = false
|
||||
insert_final_newline = true
|
||||
charset = utf-8
|
||||
|
||||
# Generic defaults for other text files
|
||||
[*]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
charset = utf-8
|
||||
52
nvim/init.lua
Normal file
52
nvim/init.lua
Normal file
@@ -0,0 +1,52 @@
|
||||
vim.opt.mouse = ""
|
||||
|
||||
vim.opt.wildmode = "longest,list"
|
||||
|
||||
vim.opt.list = true
|
||||
vim.opt.listchars = "tab:>-,trail:-,extends:#,nbsp:-"
|
||||
|
||||
vim.opt.ignorecase = true -- case insensitive search
|
||||
vim.opt.smartcase = true -- case sensitive when uc present
|
||||
vim.opt.modeline = true -- Search files for local settings such as nowrap
|
||||
vim.opt.laststatus = 2 -- Always show the status line at the bottom of the window
|
||||
|
||||
vim.opt.colorcolumn = "80"
|
||||
vim.api.nvim_set_hl(0, "ColorColumn", { ctermbg = 232, bg = 232 })
|
||||
|
||||
vim.opt.clipboard = "unnamedplus"
|
||||
vim.wo.relativenumber = true
|
||||
|
||||
vim.g.mapleader = ";"
|
||||
|
||||
-- Get rid of highlighting with enter
|
||||
vim.keymap.set("n", "<cr>", "<cmd>noh<cr><cr>")
|
||||
|
||||
-- Leader Bindings
|
||||
vim.g.mapleader = ";"
|
||||
vim.keymap.set('n', '<leader>tc', '<cmd>tabnew<cr>')
|
||||
vim.keymap.set('n', '<leader>tn', '<cmd>tabnext<cr>')
|
||||
vim.keymap.set('n', '<leader>tp', '<cmd>tabprevious<cr>')
|
||||
vim.keymap.set('n', '<leader>tN', '<cmd>tabprevious<cr>')
|
||||
vim.keymap.set('n', '<leader>z', '<c-w>|<c-w>_')
|
||||
vim.keymap.set('n', '<leader><space>', '<c-w>=')
|
||||
vim.keymap.set('n', '<leader>h', '<c-w>h')
|
||||
vim.keymap.set('n', '<leader>j', '<c-w>j')
|
||||
vim.keymap.set('n', '<leader>k', '<c-w>k')
|
||||
vim.keymap.set('n', '<leader>l', '<c-w>l')
|
||||
|
||||
vim.diagnostic.config({
|
||||
virtual_text = {
|
||||
prefix = '>>', -- or any symbol you prefer
|
||||
spacing = 1,
|
||||
-- position diagnostics at end of line:
|
||||
virt_text_pos = "eol",
|
||||
},
|
||||
signs = true,
|
||||
underline = true,
|
||||
update_in_insert = false,
|
||||
severity_sort = true,
|
||||
})
|
||||
|
||||
require("bootstrap") -- Bootstrap lazy.nvim and load all plugins
|
||||
require("whitespace") -- Adds autocmd to remove whitespace
|
||||
require("jk") -- Adds jk escape
|
||||
16
nvim/lazy-lock.json
Normal file
16
nvim/lazy-lock.json
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"blink.cmp": { "branch": "main", "commit": "bae4bae0eedd1fa55f34b685862e94a222d5c6f8" },
|
||||
"friendly-snippets": { "branch": "main", "commit": "efff286dd74c22f731cdec26a70b46e5b203c619" },
|
||||
"fzf.vim": { "branch": "master", "commit": "3725f364ccd25b85a91970720ba9bc2931861910" },
|
||||
"gitsigns.nvim": { "branch": "main", "commit": "6e3c66548035e50db7bd8e360a29aec6620c3641" },
|
||||
"lazy.nvim": { "branch": "main", "commit": "6c3bda4aca61a13a9c63f1c1d1b16b9d3be90d7a" },
|
||||
"lazydev.nvim": { "branch": "main", "commit": "2367a6c0a01eb9edb0464731cc0fb61ed9ab9d2c" },
|
||||
"mason.nvim": { "branch": "main", "commit": "7dc4facca9702f95353d5a1f87daf23d78e31c2a" },
|
||||
"mini.icons": { "branch": "main", "commit": "b8f6fa6f5a3fd0c56936252edcd691184e5aac0c" },
|
||||
"nvim-autopairs": { "branch": "master", "commit": "23320e75953ac82e559c610bec5a90d9c6dfa743" },
|
||||
"nvim-lspconfig": { "branch": "master", "commit": "f0c6ccf43997a1c7e9ec4aea36ffbf2ddd9f15ef" },
|
||||
"oil.nvim": { "branch": "master", "commit": "bbad9a76b2617ce1221d49619e4e4b659b3c61fc" },
|
||||
"plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" },
|
||||
"telescope-fzf-native.nvim": { "branch": "main", "commit": "1f08ed60cafc8f6168b72b80be2b2ea149813e55" },
|
||||
"telescope.nvim": { "branch": "master", "commit": "a0bbec21143c7bc5f8bb02e0005fa0b982edc026" }
|
||||
}
|
||||
74
nvim/lua/bootstrap.lua
Normal file
74
nvim/lua/bootstrap.lua
Normal file
@@ -0,0 +1,74 @@
|
||||
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
|
||||
local offline_marker = vim.fn.stdpath("config") .. "/.offline"
|
||||
|
||||
-- Define your functions first
|
||||
|
||||
local function is_offline()
|
||||
return vim.fn.filereadable(offline_marker) == 1
|
||||
end
|
||||
|
||||
local function set_offline()
|
||||
local f = io.open(offline_marker, "w")
|
||||
if f then
|
||||
f:write("offline\n")
|
||||
f:close()
|
||||
end
|
||||
end
|
||||
|
||||
local function clear_offline()
|
||||
os.remove(offline_marker)
|
||||
end
|
||||
|
||||
local function has_network()
|
||||
local handle = io.popen("ping -c 1 github.com 2>/dev/null")
|
||||
if handle then
|
||||
local result = handle:read("*a")
|
||||
handle:close()
|
||||
return result and #result > 0
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
local function install_lazy()
|
||||
vim.fn.system({
|
||||
"git",
|
||||
"clone",
|
||||
"--filter=blob:none",
|
||||
"https://github.com/folke/lazy.nvim.git",
|
||||
"--branch=stable",
|
||||
lazypath,
|
||||
})
|
||||
print("lazy.nvim installed!")
|
||||
end
|
||||
|
||||
-- Now call the functions
|
||||
|
||||
if not vim.loop.fs_stat(lazypath) then
|
||||
if is_offline() then
|
||||
print("Offline mode enabled. Skipping lazy.nvim install.")
|
||||
return
|
||||
else
|
||||
if has_network() then
|
||||
install_lazy()
|
||||
clear_offline()
|
||||
else
|
||||
print("No network detected. Enabling offline mode.")
|
||||
set_offline()
|
||||
return
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
vim.opt.rtp:prepend(lazypath)
|
||||
|
||||
require('lazy').setup({
|
||||
spec = {
|
||||
-- import your plugins
|
||||
{ import = "plugins" },
|
||||
},
|
||||
})
|
||||
|
||||
vim.api.nvim_create_user_command("GoOnline", function()
|
||||
clear_offline()
|
||||
print(".offline marker cleared. Restart Neovim to attempt plugin install again.")
|
||||
end, {})
|
||||
36
nvim/lua/jk.lua
Normal file
36
nvim/lua/jk.lua
Normal file
@@ -0,0 +1,36 @@
|
||||
local timer = nil
|
||||
local waiting_for_k = false
|
||||
|
||||
local function cancel_timer()
|
||||
if timer then
|
||||
timer:stop()
|
||||
timer:close()
|
||||
timer = nil
|
||||
end
|
||||
waiting_for_k = false
|
||||
end
|
||||
|
||||
vim.keymap.set({"i", "t"}, "j", function()
|
||||
if waiting_for_k then
|
||||
return "j"
|
||||
end
|
||||
|
||||
waiting_for_k = true
|
||||
|
||||
local timeout = vim.o.timeoutlen
|
||||
timer = vim.loop.new_timer()
|
||||
timer:start(timeout, 0, vim.schedule_wrap(function()
|
||||
cancel_timer()
|
||||
end))
|
||||
|
||||
return "j"
|
||||
end, { expr = true, noremap = true })
|
||||
|
||||
vim.keymap.set({"i", "t"}, "k", function()
|
||||
if waiting_for_k then
|
||||
cancel_timer()
|
||||
return "<BS><ESC>"
|
||||
else
|
||||
return "k"
|
||||
end
|
||||
end, { expr = true, noremap = true })
|
||||
7
nvim/lua/plugins/autopairs.lua
Normal file
7
nvim/lua/plugins/autopairs.lua
Normal file
@@ -0,0 +1,7 @@
|
||||
return {
|
||||
'windwp/nvim-autopairs',
|
||||
event = "InsertEnter",
|
||||
config = true
|
||||
-- use opts = {} for passing setup options
|
||||
-- this is equivalent to setup({}) function
|
||||
}
|
||||
45
nvim/lua/plugins/completion.lua
Normal file
45
nvim/lua/plugins/completion.lua
Normal file
@@ -0,0 +1,45 @@
|
||||
return {
|
||||
'saghen/blink.cmp',
|
||||
dependencies = { 'rafamadriz/friendly-snippets' },
|
||||
|
||||
version = '1.*',
|
||||
|
||||
opts = {
|
||||
-- 'default' (recommended) for mappings similar to built-in completions (C-y to accept)
|
||||
-- 'super-tab' for mappings similar to vscode (tab to accept)
|
||||
-- 'enter' for enter to accept
|
||||
-- 'none' for no mappings
|
||||
--
|
||||
-- All presets have the following mappings:
|
||||
-- C-space: Open menu or open docs if already open
|
||||
-- C-n/C-p or Up/Down: Select next/previous item
|
||||
-- C-e: Hide menu
|
||||
-- C-k: Toggle signature help (if signature.enabled = true)
|
||||
--
|
||||
-- See :h blink-cmp-config-keymap for defining your own keymap
|
||||
keymap = { preset = 'super-tab' },
|
||||
|
||||
appearance = {
|
||||
-- 'mono' (default) for 'Nerd Font Mono' or 'normal' for 'Nerd Font'
|
||||
-- Adjusts spacing to ensure icons are aligned
|
||||
nerd_font_variant = 'mono'
|
||||
},
|
||||
|
||||
-- (Default) Only show the documentation popup when manually triggered
|
||||
completion = { documentation = { auto_show = false } },
|
||||
|
||||
-- Default list of enabled providers defined so that you can extend it
|
||||
-- elsewhere in your config, without redefining it, due to `opts_extend`
|
||||
sources = {
|
||||
default = { 'lsp', 'snippets', 'path', 'buffer' },
|
||||
},
|
||||
|
||||
-- (Default) Rust fuzzy matcher for typo resistance and significantly better performance
|
||||
-- You may use a lua implementation instead by using `implementation = "lua"` or fallback to the lua implementation,
|
||||
-- when the Rust fuzzy matcher is not available, by using `implementation = "prefer_rust"`
|
||||
--
|
||||
-- See the fuzzy documentation for more information
|
||||
fuzzy = { implementation = "prefer_rust_with_warning" }
|
||||
},
|
||||
opts_extend = { "sources.default" }
|
||||
}
|
||||
29
nvim/lua/plugins/explorer.lua
Normal file
29
nvim/lua/plugins/explorer.lua
Normal file
@@ -0,0 +1,29 @@
|
||||
return {
|
||||
'stevearc/oil.nvim',
|
||||
---@module 'oil'
|
||||
---@type oil.SetupOpts
|
||||
opts = {
|
||||
float = {
|
||||
max_width = math.floor(vim.o.columns * 0.6),
|
||||
max_height = math.floor(vim.o.lines * 0.6),
|
||||
border = "rounded",
|
||||
}
|
||||
},
|
||||
-- Optional dependencies
|
||||
dependencies = { { "echasnovski/mini.icons", opts = {} } },
|
||||
-- dependencies = { "nvim-tree/nvim-web-devicons" }, -- use if you prefer nvim-web-devicons
|
||||
-- Lazy loading is not recommended because it is very tricky to make it work correctly in all situations.
|
||||
lazy = false,
|
||||
|
||||
keys = {
|
||||
{
|
||||
"<leader>e",
|
||||
function()
|
||||
require("oil").open_float()
|
||||
end,
|
||||
desc = "Open Oil floating window",
|
||||
noremap = true,
|
||||
silent = true,
|
||||
},
|
||||
},
|
||||
}
|
||||
20
nvim/lua/plugins/git.lua
Normal file
20
nvim/lua/plugins/git.lua
Normal file
@@ -0,0 +1,20 @@
|
||||
return {
|
||||
{
|
||||
"lewis6991/gitsigns.nvim",
|
||||
config = function()
|
||||
require("gitsigns").setup({
|
||||
signs = {
|
||||
add = { text = "+" },
|
||||
change = { text = "~" },
|
||||
delete = { text = "_" },
|
||||
topdelete = { text = "‾" },
|
||||
changedelete = { text = "~" },
|
||||
},
|
||||
numhl = false,
|
||||
linehl = false,
|
||||
watch_gitdir = { interval = 1000 }, -- auto-refresh
|
||||
attach_to_untracked = true,
|
||||
})
|
||||
end,
|
||||
},
|
||||
}
|
||||
53
nvim/lua/plugins/lsp.lua
Normal file
53
nvim/lua/plugins/lsp.lua
Normal file
@@ -0,0 +1,53 @@
|
||||
vim.api.nvim_create_autocmd("BufWritePre", {
|
||||
callback = function()
|
||||
vim.lsp.buf.format()
|
||||
end,
|
||||
})
|
||||
|
||||
return {
|
||||
{
|
||||
"neovim/nvim-lspconfig",
|
||||
dependencies = {
|
||||
{
|
||||
"folke/lazydev.nvim",
|
||||
ft = "lua", -- only load on lua files
|
||||
opts = {
|
||||
library = {
|
||||
-- See the configuration section for more details
|
||||
-- Load luvit types when the `vim.uv` word is found
|
||||
{ path = "${3rd}/luv/library", words = { "vim%.uv" } },
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
config = function()
|
||||
local lspconfig = require("lspconfig")
|
||||
|
||||
lspconfig.lua_ls.setup {}
|
||||
|
||||
lspconfig.pyright.setup {}
|
||||
|
||||
lspconfig.bashls.setup {}
|
||||
|
||||
lspconfig.fish_lsp.setup {}
|
||||
|
||||
lspconfig.rust_analyzer.setup {
|
||||
root_dir = function(fname)
|
||||
-- Look for Cargo.toml to define project root
|
||||
return lspconfig.util.root_pattern("Cargo.toml")(fname)
|
||||
end,
|
||||
settings = {
|
||||
["rust-analyzer"] = {
|
||||
cargo = { allFeatures = true },
|
||||
checkOnSave = { command = "clippy" }, -- Run linter
|
||||
}
|
||||
}
|
||||
}
|
||||
end,
|
||||
},
|
||||
{
|
||||
-- Quickly install LSPs with internet connection
|
||||
"mason-org/mason.nvim",
|
||||
opts = {}
|
||||
},
|
||||
}
|
||||
28
nvim/lua/plugins/telescope.lua
Normal file
28
nvim/lua/plugins/telescope.lua
Normal file
@@ -0,0 +1,28 @@
|
||||
return {
|
||||
{
|
||||
'nvim-telescope/telescope.nvim',
|
||||
tag = '0.1.8',
|
||||
dependencies = { 'nvim-lua/plenary.nvim' },
|
||||
cmd = "Telescope",
|
||||
keys = {
|
||||
{ '<leader>f', '<cmd>Telescope find_files<cr>', mode = { "n" }, desc = "Telescope find_files" },
|
||||
{ '<leader>b', '<cmd>Telescope buffers<cr>', mode = { "n" }, desc = "Telescope buffers" },
|
||||
{ '<leader>g', '<cmd>Telescope grep_string<cr>', mode = { "n" }, desc = "Telescope grep_string" },
|
||||
{ '<leader>r', '<cmd>Telescope live_grep<cr>', mode = { "n" }, desc = "Telescope live_grep" },
|
||||
{ '<leader>;', '<cmd>Telescope<cr>', mode = { "n" }, desc = "Telescope options" },
|
||||
},
|
||||
config = {},
|
||||
},
|
||||
{
|
||||
'nvim-telescope/telescope-fzf-native.nvim',
|
||||
dependencies = {'nvim-telescope/telescope.nvim'},
|
||||
build = 'cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=Release && cmake --build build --config Release',
|
||||
config = function()
|
||||
require('telescope').load_extension('fzf')
|
||||
end,
|
||||
},
|
||||
{
|
||||
'junegunn/fzf.vim',
|
||||
event = "VeryLazy",
|
||||
}
|
||||
}
|
||||
12
nvim/lua/whitespace.lua
Normal file
12
nvim/lua/whitespace.lua
Normal file
@@ -0,0 +1,12 @@
|
||||
-- RemoveWhitespace
|
||||
vim.api.nvim_create_autocmd("BufWritePre", {
|
||||
group = vim.api.nvim_create_augroup("RemoveWhitespace", { clear = true }),
|
||||
pattern = "*", -- Handle pattern myself in callback
|
||||
callback = function()
|
||||
if vim.bo.filetype == "diff" then
|
||||
return
|
||||
end
|
||||
-- Failure to find is not a real failure, silence failures
|
||||
vim.api.nvim_command("silent! " .. "%s/\\s\\+$//")
|
||||
end,
|
||||
})
|
||||
29
tmux/tmux.conf
Normal file
29
tmux/tmux.conf
Normal file
@@ -0,0 +1,29 @@
|
||||
set -g default-terminal "xterm-256color"
|
||||
set-option -g repeat-time 0
|
||||
set-option -g history-limit 50000
|
||||
set-window-option -g mode-keys vi
|
||||
|
||||
# Clipboard
|
||||
set -s set-clipboard external
|
||||
|
||||
# Periodically set pane names
|
||||
set-option -g status-interval 5
|
||||
set-option -g automatic-rename on
|
||||
set-option -g automatic-rename-format '#{b:pane_current_path}'
|
||||
|
||||
# Keep same directory when creating new window
|
||||
bind c new-window -c "#{pane_current_path}"
|
||||
bind '"' split-window -c "#{pane_current_path}"
|
||||
bind % split-window -h -c "#{pane_current_path}"
|
||||
|
||||
# Quick reload
|
||||
bind R source-file ~/.tmux.conf \; display "Reloaded tmux.conf"
|
||||
|
||||
# tmux power
|
||||
set -g @plugin 'wfxr/tmux-power'
|
||||
set -g @tmux_power_theme 'coral'
|
||||
|
||||
# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
|
||||
set -g @plugin 'tmux-plugins/tpm'
|
||||
set -g @plugin 'tmux-plugins/tmux-sensible'
|
||||
run '~/.tmux/plugins/tpm/tpm'
|
||||
Reference in New Issue
Block a user