update from lal-10

This commit is contained in:
Diego Fernando Carrión 2024-06-25 17:12:45 +02:00
parent 6f28dcccad
commit 6e450de6ca
No known key found for this signature in database
GPG Key ID: 811EF2E03998BFC4
14 changed files with 584 additions and 120 deletions

View File

@ -1,6 +1,6 @@
alias fixnasperms="sudo bash -c 'find . -type d -exec chmod 775 {} \\; && find . -type f -exec chmod 664 {} \\; && chown -R 2000:2000 .'" alias fixnasperms="sudo bash -c 'find . -type d -exec chmod 775 {} \\; && find . -type f -exec chmod 664 {} \\; && chown -R 2000:2000 .'"
# alias wordgrinder="gnome-terminal --profile=wordgrinder -t wordgrinder --full-screen -- wordgrinder" # alias wordgrinder="gnome-terminal --profile=wordgrinder -t wordgrinder --full-screen -- wordgrinder"
alias wordgrinder="kitty -c ~/.wordgrinder/kitty.conf --session ~/.wordgrinder/kitty.session --start-as=fullscreen" # alias wordgrinder="kitty -c ~/.wordgrinder/kitty.conf --session ~/.wordgrinder/kitty.session --start-as=fullscreen"
alias tmux="tmux -2" alias tmux="tmux -2"
alias ssh="TERM=xterm ssh" alias ssh="TERM=xterm ssh"
alias pyenv3="pyenv shell 3.6.12" alias pyenv3="pyenv shell 3.6.12"
@ -40,6 +40,12 @@ fi
alias k=kubectl alias k=kubectl
if [ -x "$(which nvim)" ]
then
alias vim=nvim
alias vimdiff="nvim -d"
fi
if [ -f ~/.bash_aliases.local ] if [ -f ~/.bash_aliases.local ]
then then
. "$HOME/.bash_aliases.local" . "$HOME/.bash_aliases.local"

View File

@ -1,3 +1,38 @@
function debinstall() { function debinstall() {
sudo dpkg -i $1 || (sudo apt install -f && sudo dpkg -i $1) sudo dpkg -i $1 || (sudo apt install -f && sudo dpkg -i $1)
} }
# Define the function
function whence() {
# Usage:
# which_follow_links [-p] <command>
# -p: Print each symlink path
local follow_links=false
local print_links=false
# Option parsing
while getopts "p" opt; do
case $opt in
p) print_links=true ;;
\?) echo "Invalid option: -$OPTARG" >&2; return ;;
esac
done
shift $((OPTIND-1))
# Find the initial path using which
local path=$(which "$1" 2> /dev/null)
if [[ -z "$path" ]]; then
echo "$1 not found"
return
fi
# Follow symlinks
while [[ -L "$path" ]]; do
if [[ "$print_links" == "true" ]]; then
echo "Link: $path -> $(readlink -f "$path")"
fi
path=$(readlink -f "$path")
done
echo "Final target: $path"
}

View File

@ -0,0 +1,23 @@
#!/bin/bash
ROLE_ARN=$1
SESSION_NAME=$2
unset AWS_ACCESS_KEY_ID
unset AWS_SECRET_ACCESS_KEY
unset AWS_SESSION_TOKEN
resp=$( \
aws \
sts \
assume-role \
--role-arn $ROLE_ARN \
--role-session-name $SESSION_NAME \
--duration-seconds 43200 \
)
# echo $resp
export AWS_ACCESS_KEY_ID="$(echo $resp | jq -r .Credentials.AccessKeyId)"
export AWS_SECRET_ACCESS_KEY="$(echo $resp | jq -r .Credentials.SecretAccessKey)"
export AWS_SESSION_TOKEN="$(echo $resp | jq -r .Credentials.SessionToken)"

View File

@ -0,0 +1 @@
/home/dfc/.local/pipx/venvs/portable-python/bin/portable-python

View File

@ -0,0 +1,99 @@
#!/bin/bash
set -eo pipefail
echo "Usage:"
echo -e "\t$0 <Customer ID> <Backend Version> <Frontend Version> <Optimizer Version> [Customer Password]"
echo
customer_id=$1
backend_version=$2
frontend_version=$3
optimizer_version=$4
customer_pass=$5
if [ -z $customer_pass ]
then
customer_pass="<PASS>"
fi
echo "This script will pull and share Comet images:"
echo -e "\tBackend Version: $backend_version"
echo -e "\tFrontend Version: $frontend_version"
echo -e "\tOptimizer Version: $optimizer_version"
echo "With the customer: $customer_id"
read -p "Do you want to continue? (yes/no) " answer
# Check the user's answer
case $answer in
[yY]es)
echo "Continuing..."
# Place the commands to execute if the user chooses to continue
;;
[nN]o)
echo "Cancelling..."
exit 2
;;
*)
echo "Invalid input...exiting."
exit 1
;;
esac
tmp_dir=$(mktemp -d)
# Check if the directory was created
if [[ ! -d "$tmp_dir" ]]; then
echo "Failed to create temp directory"
exit 1
fi
clean_prompt() {
read -p "Do you want to delete temporary directory/files? (yes/no) " answer
# Check the user's answer
case $answer in
[yY]es)
echo "Cleaning Up..."
rm -rf "$tmp_dir"
;;
*)
echo "Leaving files in ${tmp_dir}..."
;;
esac
}
trap clean_prompt EXIT
declare -A docker_images=( ["backend-python"]=$backend_version ["backend-react"]=$backend_version ["backend-postprocess"]=$backend_version ["backend-mpm"]=$backend_version ["backend-optimizer"]=$optimizer_version ["frontend-nginx"]=$frontend_version )
# Pull
for image in "${!docker_images[@]}"
do
version=${docker_images[$image]}
docker pull docker.comet.com/comet-ml/${image}:${version}
done
# Save
for image in "${!docker_images[@]}"
do
version=${docker_images[$image]}
echo "Saving docker.comet.com/comet-ml/${image}:${version} ..."
docker save docker.comet.com/comet-ml/${image}:${version} | gzip > ${tmp_dir}/comet-ml-${image}-${version}.tar.gz
done
# Upload
ssh deb-repository -- mkdir -p /mnt/data/fileshare/${customer_id}/docker-images/
scp ${tmp_dir}/*.tar.gz deb-repository:/mnt/data/fileshare/${customer_id}/docker-images/
echo
echo "Download links:"
echo
# Print links
for image in "${!docker_images[@]}"
do
version=${docker_images[$image]}
echo "https://${customer_id}:${customer_pass}@fileshare.comet.com/${customer_id}/docker-images/comet-ml-${image}-${version}.tar.gz"
done
echo

View File

@ -22,7 +22,7 @@
" Plug 'SirVer/ultisnips' | Plug 'honza/vim-snippets' " Plug 'SirVer/ultisnips' | Plug 'honza/vim-snippets'
" "
" " On-demand loading " " On-demand loading
" Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' } " Plug 'preservim/nerdtree', { 'on': 'NERDTreeToggle' }
" Plug 'tpope/vim-fireplace', { 'for': 'clojure' } " Plug 'tpope/vim-fireplace', { 'for': 'clojure' }
" "
" " Using a non-default branch " " Using a non-default branch
@ -238,7 +238,6 @@ endfunction
function! plug#begin(...) function! plug#begin(...)
if a:0 > 0 if a:0 > 0
let s:plug_home_org = a:1
let home = s:path(s:plug_fnamemodify(s:plug_expand(a:1), ':p')) let home = s:path(s:plug_fnamemodify(s:plug_expand(a:1), ':p'))
elseif exists('g:plug_home') elseif exists('g:plug_home')
let home = s:path(g:plug_home) let home = s:path(g:plug_home)
@ -391,6 +390,9 @@ function! plug#end()
if !empty(types) if !empty(types)
augroup filetypedetect augroup filetypedetect
call s:source(s:rtp(plug), 'ftdetect/**/*.vim', 'after/ftdetect/**/*.vim') call s:source(s:rtp(plug), 'ftdetect/**/*.vim', 'after/ftdetect/**/*.vim')
if has('nvim-0.5.0')
call s:source(s:rtp(plug), 'ftdetect/**/*.lua', 'after/ftdetect/**/*.lua')
endif
augroup END augroup END
endif endif
for type in types for type in types
@ -438,6 +440,9 @@ endfunction
function! s:load_plugin(spec) function! s:load_plugin(spec)
call s:source(s:rtp(a:spec), 'plugin/**/*.vim', 'after/plugin/**/*.vim') call s:source(s:rtp(a:spec), 'plugin/**/*.vim', 'after/plugin/**/*.vim')
if has('nvim-0.5.0')
call s:source(s:rtp(a:spec), 'plugin/**/*.lua', 'after/plugin/**/*.lua')
endif
endfunction endfunction
function! s:reload_plugins() function! s:reload_plugins()
@ -655,6 +660,9 @@ function! s:lod(names, types, ...)
let rtp = s:rtp(g:plugs[name]) let rtp = s:rtp(g:plugs[name])
for dir in a:types for dir in a:types
call s:source(rtp, dir.'/**/*.vim') call s:source(rtp, dir.'/**/*.vim')
if has('nvim-0.5.0') " see neovim#14686
call s:source(rtp, dir.'/**/*.lua')
endif
endfor endfor
if a:0 if a:0
if !s:source(rtp, a:1) && !empty(s:glob(rtp, a:2)) if !s:source(rtp, a:1) && !empty(s:glob(rtp, a:2))
@ -869,7 +877,7 @@ function! s:lastline(msg)
endfunction endfunction
function! s:new_window() function! s:new_window()
execute get(g:, 'plug_window', 'vertical topleft new') execute get(g:, 'plug_window', '-tabnew')
endfunction endfunction
function! s:plug_window_exists() function! s:plug_window_exists()
@ -1031,6 +1039,11 @@ function! s:is_updated(dir)
endfunction endfunction
function! s:do(pull, force, todo) function! s:do(pull, force, todo)
if has('nvim')
" Reset &rtp to invalidate Neovim cache of loaded Lua modules
" See https://github.com/junegunn/vim-plug/pull/1157#issuecomment-1809226110
let &rtp = &rtp
endif
for [name, spec] in items(a:todo) for [name, spec] in items(a:todo)
if !isdirectory(spec.dir) if !isdirectory(spec.dir)
continue continue
@ -1092,12 +1105,14 @@ endfunction
function! s:checkout(spec) function! s:checkout(spec)
let sha = a:spec.commit let sha = a:spec.commit
let output = s:git_revision(a:spec.dir) let output = s:git_revision(a:spec.dir)
let error = 0
if !empty(output) && !s:hash_match(sha, s:lines(output)[0]) if !empty(output) && !s:hash_match(sha, s:lines(output)[0])
let credential_helper = s:git_version_requirement(2) ? '-c credential.helper= ' : '' let credential_helper = s:git_version_requirement(2) ? '-c credential.helper= ' : ''
let output = s:system( let output = s:system(
\ 'git '.credential_helper.'fetch --depth 999999 && git checkout '.plug#shellescape(sha).' --', a:spec.dir) \ 'git '.credential_helper.'fetch --depth 999999 && git checkout '.plug#shellescape(sha).' --', a:spec.dir)
let error = v:shell_error
endif endif
return output return [output, error]
endfunction endfunction
function! s:finish(pull) function! s:finish(pull)
@ -1158,7 +1173,7 @@ function! s:update_impl(pull, force, args) abort
let threads = (len(args) > 0 && args[-1] =~ '^[1-9][0-9]*$') ? let threads = (len(args) > 0 && args[-1] =~ '^[1-9][0-9]*$') ?
\ remove(args, -1) : get(g:, 'plug_threads', 16) \ remove(args, -1) : get(g:, 'plug_threads', 16)
let managed = filter(copy(g:plugs), 's:is_managed(v:key)') let managed = filter(deepcopy(g:plugs), 's:is_managed(v:key)')
let todo = empty(args) ? filter(managed, '!v:val.frozen || !isdirectory(v:val.dir)') : let todo = empty(args) ? filter(managed, '!v:val.frozen || !isdirectory(v:val.dir)') :
\ filter(managed, 'index(args, v:key) >= 0') \ filter(managed, 'index(args, v:key) >= 0')
@ -1292,9 +1307,11 @@ function! s:update_finish()
if !pos if !pos
continue continue
endif endif
let out = ''
let error = 0
if has_key(spec, 'commit') if has_key(spec, 'commit')
call s:log4(name, 'Checking out '.spec.commit) call s:log4(name, 'Checking out '.spec.commit)
let out = s:checkout(spec) let [out, error] = s:checkout(spec)
elseif has_key(spec, 'tag') elseif has_key(spec, 'tag')
let tag = spec.tag let tag = spec.tag
if tag =~ '\*' if tag =~ '\*'
@ -1307,19 +1324,16 @@ function! s:update_finish()
endif endif
call s:log4(name, 'Checking out '.tag) call s:log4(name, 'Checking out '.tag)
let out = s:system('git checkout -q '.plug#shellescape(tag).' -- 2>&1', spec.dir) let out = s:system('git checkout -q '.plug#shellescape(tag).' -- 2>&1', spec.dir)
else let error = v:shell_error
let branch = s:git_origin_branch(spec)
call s:log4(name, 'Merging origin/'.s:esc(branch))
let out = s:system('git checkout -q '.plug#shellescape(branch).' -- 2>&1'
\. (has_key(s:update.new, name) ? '' : ('&& git merge --ff-only '.plug#shellescape('origin/'.branch).' 2>&1')), spec.dir)
endif endif
if !v:shell_error && filereadable(spec.dir.'/.gitmodules') && if !error && filereadable(spec.dir.'/.gitmodules') &&
\ (s:update.force || has_key(s:update.new, name) || s:is_updated(spec.dir)) \ (s:update.force || has_key(s:update.new, name) || s:is_updated(spec.dir))
call s:log4(name, 'Updating submodules. This may take a while.') call s:log4(name, 'Updating submodules. This may take a while.')
let out .= s:bang('git submodule update --init --recursive'.s:submodule_opt.' 2>&1', spec.dir) let out .= s:bang('git submodule update --init --recursive'.s:submodule_opt.' 2>&1', spec.dir)
let error = v:shell_error
endif endif
let msg = s:format_message(v:shell_error ? 'x': '-', name, out) let msg = s:format_message(v:shell_error ? 'x': '-', name, out)
if v:shell_error if error
call add(s:update.errors, name) call add(s:update.errors, name)
call s:regress_bar() call s:regress_bar()
silent execute pos 'd _' silent execute pos 'd _'
@ -1382,7 +1396,9 @@ function! s:job_out_cb(self, data) abort
if !self.running || self.tick % len(s:jobs) == 0 if !self.running || self.tick % len(s:jobs) == 0
let bullet = self.running ? (self.new ? '+' : '*') : (self.error ? 'x' : '-') let bullet = self.running ? (self.new ? '+' : '*') : (self.error ? 'x' : '-')
let result = self.error ? join(self.lines, "\n") : s:last_non_empty_line(self.lines) let result = self.error ? join(self.lines, "\n") : s:last_non_empty_line(self.lines)
call s:log(bullet, self.name, result) if len(result)
call s:log(bullet, self.name, result)
endif
endif endif
endfunction endfunction
@ -1406,16 +1422,17 @@ function! s:nvim_cb(job_id, data, event) dict abort
\ s:job_cb('s:job_exit_cb', self, 0, a:data) \ s:job_cb('s:job_exit_cb', self, 0, a:data)
endfunction endfunction
function! s:spawn(name, cmd, opts) function! s:spawn(name, spec, queue, opts)
let job = { 'name': a:name, 'running': 1, 'error': 0, 'lines': [''], let job = { 'name': a:name, 'spec': a:spec, 'running': 1, 'error': 0, 'lines': [''],
\ 'new': get(a:opts, 'new', 0) } \ 'new': get(a:opts, 'new', 0), 'queue': copy(a:queue) }
let Item = remove(job.queue, 0)
let argv = type(Item) == s:TYPE.funcref ? call(Item, [a:spec]) : Item
let s:jobs[a:name] = job let s:jobs[a:name] = job
if s:nvim if s:nvim
if has_key(a:opts, 'dir') if has_key(a:opts, 'dir')
let job.cwd = a:opts.dir let job.cwd = a:opts.dir
endif endif
let argv = a:cmd
call extend(job, { call extend(job, {
\ 'on_stdout': function('s:nvim_cb'), \ 'on_stdout': function('s:nvim_cb'),
\ 'on_stderr': function('s:nvim_cb'), \ 'on_stderr': function('s:nvim_cb'),
@ -1431,7 +1448,7 @@ function! s:spawn(name, cmd, opts)
\ 'Invalid arguments (or job table is full)'] \ 'Invalid arguments (or job table is full)']
endif endif
elseif s:vim8 elseif s:vim8
let cmd = join(map(copy(a:cmd), 'plug#shellescape(v:val, {"script": 0})')) let cmd = join(map(copy(argv), 'plug#shellescape(v:val, {"script": 0})'))
if has_key(a:opts, 'dir') if has_key(a:opts, 'dir')
let cmd = s:with_cd(cmd, a:opts.dir, 0) let cmd = s:with_cd(cmd, a:opts.dir, 0)
endif endif
@ -1451,27 +1468,34 @@ function! s:spawn(name, cmd, opts)
let job.lines = ['Failed to start job'] let job.lines = ['Failed to start job']
endif endif
else else
let job.lines = s:lines(call('s:system', has_key(a:opts, 'dir') ? [a:cmd, a:opts.dir] : [a:cmd])) let job.lines = s:lines(call('s:system', has_key(a:opts, 'dir') ? [argv, a:opts.dir] : [argv]))
let job.error = v:shell_error != 0 let job.error = v:shell_error != 0
let job.running = 0 let job.running = 0
endif endif
endfunction endfunction
function! s:reap(name) function! s:reap(name)
let job = s:jobs[a:name] let job = remove(s:jobs, a:name)
if job.error if job.error
call add(s:update.errors, a:name) call add(s:update.errors, a:name)
elseif get(job, 'new', 0) elseif get(job, 'new', 0)
let s:update.new[a:name] = 1 let s:update.new[a:name] = 1
endif endif
let s:update.bar .= job.error ? 'x' : '='
let bullet = job.error ? 'x' : '-' let more = len(get(job, 'queue', []))
let bullet = job.error ? 'x' : more ? (job.new ? '+' : '*') : '-'
let result = job.error ? join(job.lines, "\n") : s:last_non_empty_line(job.lines) let result = job.error ? join(job.lines, "\n") : s:last_non_empty_line(job.lines)
call s:log(bullet, a:name, empty(result) ? 'OK' : result) if len(result)
call s:bar() call s:log(bullet, a:name, result)
endif
call remove(s:jobs, a:name) if !job.error && more
let job.spec.queue = job.queue
let s:update.todo[a:name] = job.spec
else
let s:update.bar .= job.error ? 'x' : '='
call s:bar()
endif
endfunction endfunction
function! s:bar() function! s:bar()
@ -1524,6 +1548,16 @@ function! s:update_vim()
call s:tick() call s:tick()
endfunction endfunction
function! s:checkout_command(spec)
let a:spec.branch = s:git_origin_branch(a:spec)
return ['git', 'checkout', '-q', a:spec.branch, '--']
endfunction
function! s:merge_command(spec)
let a:spec.branch = s:git_origin_branch(a:spec)
return ['git', 'merge', '--ff-only', 'origin/'.a:spec.branch]
endfunction
function! s:tick() function! s:tick()
let pull = s:update.pull let pull = s:update.pull
let prog = s:progress_opt(s:nvim || s:vim8) let prog = s:progress_opt(s:nvim || s:vim8)
@ -1538,13 +1572,18 @@ while 1 " Without TCO, Vim stack is bound to explode
let name = keys(s:update.todo)[0] let name = keys(s:update.todo)[0]
let spec = remove(s:update.todo, name) let spec = remove(s:update.todo, name)
let new = empty(globpath(spec.dir, '.git', 1)) let queue = get(spec, 'queue', [])
let new = empty(globpath(spec.dir, '.git', 1))
call s:log(new ? '+' : '*', name, pull ? 'Updating ...' : 'Installing ...') if empty(queue)
redraw call s:log(new ? '+' : '*', name, pull ? 'Updating ...' : 'Installing ...')
redraw
endif
let has_tag = has_key(spec, 'tag') let has_tag = has_key(spec, 'tag')
if !new if len(queue)
call s:spawn(name, spec, queue, { 'dir': spec.dir })
elseif !new
let [error, _] = s:git_validate(spec, 0) let [error, _] = s:git_validate(spec, 0)
if empty(error) if empty(error)
if pull if pull
@ -1555,7 +1594,11 @@ while 1 " Without TCO, Vim stack is bound to explode
if !empty(prog) if !empty(prog)
call add(cmd, prog) call add(cmd, prog)
endif endif
call s:spawn(name, cmd, { 'dir': spec.dir }) let queue = [cmd, split('git remote set-head origin -a')]
if !has_tag && !has_key(spec, 'commit')
call extend(queue, [function('s:checkout_command'), function('s:merge_command')])
endif
call s:spawn(name, spec, queue, { 'dir': spec.dir })
else else
let s:jobs[name] = { 'running': 0, 'lines': ['Already installed'], 'error': 0 } let s:jobs[name] = { 'running': 0, 'lines': ['Already installed'], 'error': 0 }
endif endif
@ -1570,7 +1613,7 @@ while 1 " Without TCO, Vim stack is bound to explode
if !empty(prog) if !empty(prog)
call add(cmd, prog) call add(cmd, prog)
endif endif
call s:spawn(name, extend(cmd, [spec.uri, s:trim(spec.dir)]), { 'new': 1 }) call s:spawn(name, spec, [extend(cmd, [spec.uri, s:trim(spec.dir)]), function('s:checkout_command'), function('s:merge_command')], { 'new': 1 })
endif endif
if !s:jobs[name].running if !s:jobs[name].running
@ -2346,18 +2389,21 @@ function! s:git_validate(spec, check_branch)
\ current_branch, origin_branch) \ current_branch, origin_branch)
endif endif
if empty(err) if empty(err)
let [ahead, behind] = split(s:lastline(s:system([ let ahead_behind = split(s:lastline(s:system([
\ 'git', 'rev-list', '--count', '--left-right', \ 'git', 'rev-list', '--count', '--left-right',
\ printf('HEAD...origin/%s', origin_branch) \ printf('HEAD...origin/%s', origin_branch)
\ ], a:spec.dir)), '\t') \ ], a:spec.dir)), '\t')
if !v:shell_error && ahead if v:shell_error || len(ahead_behind) != 2
if behind let err = "Failed to compare with the origin. The default branch might have changed.\nPlugClean required."
else
let [ahead, behind] = ahead_behind
if ahead && behind
" Only mention PlugClean if diverged, otherwise it's likely to be " Only mention PlugClean if diverged, otherwise it's likely to be
" pushable (and probably not that messed up). " pushable (and probably not that messed up).
let err = printf( let err = printf(
\ "Diverged from origin/%s (%d commit(s) ahead and %d commit(s) behind!\n" \ "Diverged from origin/%s (%d commit(s) ahead and %d commit(s) behind!\n"
\ .'Backup local changes and run PlugClean and PlugUpdate to reinstall it.', origin_branch, ahead, behind) \ .'Backup local changes and run PlugClean and PlugUpdate to reinstall it.', origin_branch, ahead, behind)
else elseif ahead
let err = printf("Ahead of origin/%s by %d commit(s).\n" let err = printf("Ahead of origin/%s by %d commit(s).\n"
\ .'Cannot update until local changes are pushed.', \ .'Cannot update until local changes are pushed.',
\ origin_branch, ahead) \ origin_branch, ahead)
@ -2389,7 +2435,7 @@ function! s:clean(force)
let errs = {} let errs = {}
let [cnt, total] = [0, len(g:plugs)] let [cnt, total] = [0, len(g:plugs)]
for [name, spec] in items(g:plugs) for [name, spec] in items(g:plugs)
if !s:is_managed(name) if !s:is_managed(name) || get(spec, 'frozen', 0)
call add(dirs, spec.dir) call add(dirs, spec.dir)
else else
let [err, clean] = s:git_validate(spec, 1) let [err, clean] = s:git_validate(spec, 1)
@ -2637,8 +2683,8 @@ function! s:preview_commit()
return return
endif endif
if exists('g:plug_pwindow') && !s:is_preview_window_open() if !s:is_preview_window_open()
execute g:plug_pwindow execute get(g:, 'plug_pwindow', 'vertical rightbelow new')
execute 'e' title execute 'e' title
else else
execute 'pedit' title execute 'pedit' title

View File

@ -25,7 +25,7 @@
" Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' } " Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' }
" Plug 'tpope/vim-fireplace', { 'for': 'clojure' } " Plug 'tpope/vim-fireplace', { 'for': 'clojure' }
" "
" " Using a non-master branch " " Using a non-default branch
" Plug 'rdnetto/YCM-Generator', { 'branch': 'stable' } " Plug 'rdnetto/YCM-Generator', { 'branch': 'stable' }
" "
" " Using a tagged release; wildcard allowed (requires git 1.9.2 or above) " " Using a tagged release; wildcard allowed (requires git 1.9.2 or above)
@ -106,7 +106,7 @@ if s:is_win && &shellslash
else else
let s:me = resolve(expand('<sfile>:p')) let s:me = resolve(expand('<sfile>:p'))
endif endif
let s:base_spec = { 'branch': 'master', 'frozen': 0 } let s:base_spec = { 'branch': '', 'frozen': 0 }
let s:TYPE = { let s:TYPE = {
\ 'string': type(''), \ 'string': type(''),
\ 'list': type([]), \ 'list': type([]),
@ -116,6 +116,94 @@ let s:TYPE = {
let s:loaded = get(s:, 'loaded', {}) let s:loaded = get(s:, 'loaded', {})
let s:triggers = get(s:, 'triggers', {}) let s:triggers = get(s:, 'triggers', {})
function! s:is_powershell(shell)
return a:shell =~# 'powershell\(\.exe\)\?$' || a:shell =~# 'pwsh\(\.exe\)\?$'
endfunction
function! s:isabsolute(dir) abort
return a:dir =~# '^/' || (has('win32') && a:dir =~? '^\%(\\\|[A-Z]:\)')
endfunction
function! s:git_dir(dir) abort
let gitdir = s:trim(a:dir) . '/.git'
if isdirectory(gitdir)
return gitdir
endif
if !filereadable(gitdir)
return ''
endif
let gitdir = matchstr(get(readfile(gitdir), 0, ''), '^gitdir: \zs.*')
if len(gitdir) && !s:isabsolute(gitdir)
let gitdir = a:dir . '/' . gitdir
endif
return isdirectory(gitdir) ? gitdir : ''
endfunction
function! s:git_origin_url(dir) abort
let gitdir = s:git_dir(a:dir)
let config = gitdir . '/config'
if empty(gitdir) || !filereadable(config)
return ''
endif
return matchstr(join(readfile(config)), '\[remote "origin"\].\{-}url\s*=\s*\zs\S*\ze')
endfunction
function! s:git_revision(dir) abort
let gitdir = s:git_dir(a:dir)
let head = gitdir . '/HEAD'
if empty(gitdir) || !filereadable(head)
return ''
endif
let line = get(readfile(head), 0, '')
let ref = matchstr(line, '^ref: \zs.*')
if empty(ref)
return line
endif
if filereadable(gitdir . '/' . ref)
return get(readfile(gitdir . '/' . ref), 0, '')
endif
if filereadable(gitdir . '/packed-refs')
for line in readfile(gitdir . '/packed-refs')
if line =~# ' ' . ref
return matchstr(line, '^[0-9a-f]*')
endif
endfor
endif
return ''
endfunction
function! s:git_local_branch(dir) abort
let gitdir = s:git_dir(a:dir)
let head = gitdir . '/HEAD'
if empty(gitdir) || !filereadable(head)
return ''
endif
let branch = matchstr(get(readfile(head), 0, ''), '^ref: refs/heads/\zs.*')
return len(branch) ? branch : 'HEAD'
endfunction
function! s:git_origin_branch(spec)
if len(a:spec.branch)
return a:spec.branch
endif
" The file may not be present if this is a local repository
let gitdir = s:git_dir(a:spec.dir)
let origin_head = gitdir.'/refs/remotes/origin/HEAD'
if len(gitdir) && filereadable(origin_head)
return matchstr(get(readfile(origin_head), 0, ''),
\ '^ref: refs/remotes/origin/\zs.*')
endif
" The command may not return the name of a branch in detached HEAD state
let result = s:lines(s:system('git symbolic-ref --short HEAD', a:spec.dir))
return v:shell_error ? '' : result[-1]
endfunction
if s:is_win if s:is_win
function! s:plug_call(fn, ...) function! s:plug_call(fn, ...)
let shellslash = &shellslash let shellslash = &shellslash
@ -154,6 +242,8 @@ function! plug#begin(...)
let home = s:path(s:plug_fnamemodify(s:plug_expand(a:1), ':p')) let home = s:path(s:plug_fnamemodify(s:plug_expand(a:1), ':p'))
elseif exists('g:plug_home') elseif exists('g:plug_home')
let home = s:path(g:plug_home) let home = s:path(g:plug_home)
elseif has('nvim')
let home = stdpath('data') . '/plugged'
elseif !empty(&rtp) elseif !empty(&rtp)
let home = s:path(split(&rtp, ',')[0]) . '/plugged' let home = s:path(split(&rtp, ',')[0]) . '/plugged'
else else
@ -179,7 +269,7 @@ function! s:define_commands()
endif endif
if has('win32') if has('win32')
\ && &shellslash \ && &shellslash
\ && (&shell =~# 'cmd\.exe' || &shell =~# 'powershell\.exe') \ && (&shell =~# 'cmd\(\.exe\)\?$' || s:is_powershell(&shell))
return s:err('vim-plug does not support shell, ' . &shell . ', when shellslash is set.') return s:err('vim-plug does not support shell, ' . &shell . ', when shellslash is set.')
endif endif
if !has('nvim') if !has('nvim')
@ -262,7 +352,7 @@ function! plug#end()
endif endif
let lod = { 'ft': {}, 'map': {}, 'cmd': {} } let lod = { 'ft': {}, 'map': {}, 'cmd': {} }
if exists('g:did_load_filetypes') if get(g:, 'did_load_filetypes', 0)
filetype off filetype off
endif endif
for name in g:plugs_order for name in g:plugs_order
@ -317,7 +407,7 @@ function! plug#end()
for [map, names] in items(lod.map) for [map, names] in items(lod.map)
for [mode, map_prefix, key_prefix] in for [mode, map_prefix, key_prefix] in
\ [['i', '<C-O>', ''], ['n', '', ''], ['v', '', 'gv'], ['o', '', '']] \ [['i', '<C-\><C-O>', ''], ['n', '', ''], ['v', '', 'gv'], ['o', '', '']]
execute printf( execute printf(
\ '%snoremap <silent> %s %s:<C-U>call <SID>lod_map(%s, %s, %s, "%s")<CR>', \ '%snoremap <silent> %s %s:<C-U>call <SID>lod_map(%s, %s, %s, "%s")<CR>',
\ mode, map, map_prefix, string(map), string(names), mode != 'i', key_prefix) \ mode, map, map_prefix, string(map), string(names), mode != 'i', key_prefix)
@ -419,7 +509,7 @@ if s:is_win
let batchfile = s:plug_tempname().'.bat' let batchfile = s:plug_tempname().'.bat'
call writefile(s:wrap_cmds(a:cmd), batchfile) call writefile(s:wrap_cmds(a:cmd), batchfile)
let cmd = plug#shellescape(batchfile, {'shell': &shell, 'script': 0}) let cmd = plug#shellescape(batchfile, {'shell': &shell, 'script': 0})
if &shell =~# 'powershell\.exe' if s:is_powershell(&shell)
let cmd = '& ' . cmd let cmd = '& ' . cmd
endif endif
return [batchfile, cmd] return [batchfile, cmd]
@ -646,25 +736,25 @@ function! s:parse_options(arg)
endif endif
let opts.tag = a:arg let opts.tag = a:arg
elseif type == s:TYPE.dict elseif type == s:TYPE.dict
call extend(opts, a:arg)
for opt in ['branch', 'tag', 'commit', 'rtp', 'dir', 'as'] for opt in ['branch', 'tag', 'commit', 'rtp', 'dir', 'as']
if has_key(opts, opt) if has_key(a:arg, opt)
\ && (type(opts[opt]) != s:TYPE.string || empty(opts[opt])) \ && (type(a:arg[opt]) != s:TYPE.string || empty(a:arg[opt]))
throw printf(opt_errfmt, opt, 'string') throw printf(opt_errfmt, opt, 'string')
endif endif
endfor endfor
for opt in ['on', 'for'] for opt in ['on', 'for']
if has_key(opts, opt) if has_key(a:arg, opt)
\ && type(opts[opt]) != s:TYPE.list \ && type(a:arg[opt]) != s:TYPE.list
\ && (type(opts[opt]) != s:TYPE.string || empty(opts[opt])) \ && (type(a:arg[opt]) != s:TYPE.string || empty(a:arg[opt]))
throw printf(opt_errfmt, opt, 'string or list') throw printf(opt_errfmt, opt, 'string or list')
endif endif
endfor endfor
if has_key(opts, 'do') if has_key(a:arg, 'do')
\ && type(opts.do) != s:TYPE.funcref \ && type(a:arg.do) != s:TYPE.funcref
\ && (type(opts.do) != s:TYPE.string || empty(opts.do)) \ && (type(a:arg.do) != s:TYPE.string || empty(a:arg.do))
throw printf(opt_errfmt, 'do', 'string or funcref') throw printf(opt_errfmt, 'do', 'string or funcref')
endif endif
call extend(opts, a:arg)
if has_key(opts, 'dir') if has_key(opts, 'dir')
let opts.dir = s:dirpath(s:plug_expand(opts.dir)) let opts.dir = s:dirpath(s:plug_expand(opts.dir))
endif endif
@ -720,7 +810,7 @@ function! s:syntax()
syn match plugNumber /[0-9]\+[0-9.]*/ contained syn match plugNumber /[0-9]\+[0-9.]*/ contained
syn match plugBracket /[[\]]/ contained syn match plugBracket /[[\]]/ contained
syn match plugX /x/ contained syn match plugX /x/ contained
syn match plugDash /^-/ syn match plugDash /^-\{1}\ /
syn match plugPlus /^+/ syn match plugPlus /^+/
syn match plugStar /^*/ syn match plugStar /^*/
syn match plugMessage /\(^- \)\@<=.*/ syn match plugMessage /\(^- \)\@<=.*/
@ -738,6 +828,7 @@ function! s:syntax()
syn match plugError /^x.*/ syn match plugError /^x.*/
syn region plugDeleted start=/^\~ .*/ end=/^\ze\S/ syn region plugDeleted start=/^\~ .*/ end=/^\ze\S/
syn match plugH2 /^.*:\n-\+$/ syn match plugH2 /^.*:\n-\+$/
syn match plugH2 /^-\{2,}/
syn keyword Function PlugInstall PlugStatus PlugUpdate PlugClean syn keyword Function PlugInstall PlugStatus PlugUpdate PlugClean
hi def link plug1 Title hi def link plug1 Title
hi def link plug2 Repeat hi def link plug2 Repeat
@ -850,7 +941,7 @@ function! s:prepare(...)
call s:new_window() call s:new_window()
endif endif
nnoremap <silent> <buffer> q :if b:plug_preview==1<bar>pc<bar>endif<bar>bd<cr> nnoremap <silent> <buffer> q :call <SID>close_pane()<cr>
if a:0 == 0 if a:0 == 0
call s:finish_bindings() call s:finish_bindings()
endif endif
@ -872,6 +963,15 @@ function! s:prepare(...)
endif endif
endfunction endfunction
function! s:close_pane()
if b:plug_preview == 1
pc
let b:plug_preview = -1
else
bd
endif
endfunction
function! s:assign_name() function! s:assign_name()
" Assign buffer name " Assign buffer name
let prefix = '[Plugins]' let prefix = '[Plugins]'
@ -890,9 +990,9 @@ function! s:chsh(swap)
set shell=sh set shell=sh
endif endif
if a:swap if a:swap
if &shell =~# 'powershell\.exe' || &shell =~# 'pwsh$' if s:is_powershell(&shell)
let &shellredir = '2>&1 | Out-File -Encoding UTF8 %s' let &shellredir = '2>&1 | Out-File -Encoding UTF8 %s'
elseif &shell =~# 'sh' || &shell =~# 'cmd\.exe' elseif &shell =~# 'sh' || &shell =~# 'cmd\(\.exe\)\?$'
set shellredir=>%s\ 2>&1 set shellredir=>%s\ 2>&1
endif endif
endif endif
@ -991,10 +1091,11 @@ endfunction
function! s:checkout(spec) function! s:checkout(spec)
let sha = a:spec.commit let sha = a:spec.commit
let output = s:system(['git', 'rev-parse', 'HEAD'], a:spec.dir) let output = s:git_revision(a:spec.dir)
if !v:shell_error && !s:hash_match(sha, s:lines(output)[0]) if !empty(output) && !s:hash_match(sha, s:lines(output)[0])
let credential_helper = s:git_version_requirement(2) ? '-c credential.helper= ' : ''
let output = s:system( let output = s:system(
\ 'git fetch --depth 999999 && git checkout '.plug#shellescape(sha).' --', a:spec.dir) \ 'git '.credential_helper.'fetch --depth 999999 && git checkout '.plug#shellescape(sha).' --', a:spec.dir)
endif endif
return output return output
endfunction endfunction
@ -1109,7 +1210,8 @@ function! s:update_impl(pull, force, args) abort
normal! 2G normal! 2G
silent! redraw silent! redraw
let s:clone_opt = [] " Set remote name, overriding a possible user git config's clone.defaultRemoteName
let s:clone_opt = ['--origin', 'origin']
if get(g:, 'plug_shallow', 1) if get(g:, 'plug_shallow', 1)
call extend(s:clone_opt, ['--depth', '1']) call extend(s:clone_opt, ['--depth', '1'])
if s:git_version_requirement(1, 7, 10) if s:git_version_requirement(1, 7, 10)
@ -1206,7 +1308,7 @@ function! s:update_finish()
call s:log4(name, 'Checking out '.tag) call s:log4(name, 'Checking out '.tag)
let out = s:system('git checkout -q '.plug#shellescape(tag).' -- 2>&1', spec.dir) let out = s:system('git checkout -q '.plug#shellescape(tag).' -- 2>&1', spec.dir)
else else
let branch = get(spec, 'branch', 'master') let branch = s:git_origin_branch(spec)
call s:log4(name, 'Merging origin/'.s:esc(branch)) call s:log4(name, 'Merging origin/'.s:esc(branch))
let out = s:system('git checkout -q '.plug#shellescape(branch).' -- 2>&1' let out = s:system('git checkout -q '.plug#shellescape(branch).' -- 2>&1'
\. (has_key(s:update.new, name) ? '' : ('&& git merge --ff-only '.plug#shellescape('origin/'.branch).' 2>&1')), spec.dir) \. (has_key(s:update.new, name) ? '' : ('&& git merge --ff-only '.plug#shellescape('origin/'.branch).' 2>&1')), spec.dir)
@ -1446,7 +1548,7 @@ while 1 " Without TCO, Vim stack is bound to explode
let [error, _] = s:git_validate(spec, 0) let [error, _] = s:git_validate(spec, 0)
if empty(error) if empty(error)
if pull if pull
let cmd = ['git', 'fetch'] let cmd = s:git_version_requirement(2) ? ['git', '-c', 'credential.helper=', 'fetch'] : ['git', 'fetch']
if has_tag && !empty(globpath(spec.dir, '.git/shallow')) if has_tag && !empty(globpath(spec.dir, '.git/shallow'))
call extend(cmd, ['--depth', '99999999']) call extend(cmd, ['--depth', '99999999'])
endif endif
@ -2128,9 +2230,9 @@ function! plug#shellescape(arg, ...)
let opts = a:0 > 0 && type(a:1) == s:TYPE.dict ? a:1 : {} let opts = a:0 > 0 && type(a:1) == s:TYPE.dict ? a:1 : {}
let shell = get(opts, 'shell', s:is_win ? 'cmd.exe' : 'sh') let shell = get(opts, 'shell', s:is_win ? 'cmd.exe' : 'sh')
let script = get(opts, 'script', 1) let script = get(opts, 'script', 1)
if shell =~# 'cmd\.exe' if shell =~# 'cmd\(\.exe\)\?$'
return s:shellesc_cmd(a:arg, script) return s:shellesc_cmd(a:arg, script)
elseif shell =~# 'powershell\.exe' || shell =~# 'pwsh$' elseif s:is_powershell(shell)
return s:shellesc_ps1(a:arg) return s:shellesc_ps1(a:arg)
endif endif
return s:shellesc_sh(a:arg) return s:shellesc_sh(a:arg)
@ -2182,7 +2284,7 @@ function! s:system(cmd, ...)
return system(a:cmd) return system(a:cmd)
endif endif
let cmd = join(map(copy(a:cmd), 'plug#shellescape(v:val, {"shell": &shell, "script": 0})')) let cmd = join(map(copy(a:cmd), 'plug#shellescape(v:val, {"shell": &shell, "script": 0})'))
if &shell =~# 'powershell\.exe' if s:is_powershell(&shell)
let cmd = '& ' . cmd let cmd = '& ' . cmd
endif endif
else else
@ -2211,18 +2313,17 @@ endfunction
function! s:git_validate(spec, check_branch) function! s:git_validate(spec, check_branch)
let err = '' let err = ''
if isdirectory(a:spec.dir) if isdirectory(a:spec.dir)
let result = s:lines(s:system('git rev-parse --abbrev-ref HEAD 2>&1 && git config -f .git/config remote.origin.url', a:spec.dir)) let result = [s:git_local_branch(a:spec.dir), s:git_origin_url(a:spec.dir)]
let remote = result[-1] let remote = result[-1]
if v:shell_error if empty(remote)
let err = join([remote, 'PlugClean required.'], "\n") let err = join([remote, 'PlugClean required.'], "\n")
elseif !s:compare_git_uri(remote, a:spec.uri) elseif !s:compare_git_uri(remote, a:spec.uri)
let err = join(['Invalid URI: '.remote, let err = join(['Invalid URI: '.remote,
\ 'Expected: '.a:spec.uri, \ 'Expected: '.a:spec.uri,
\ 'PlugClean required.'], "\n") \ 'PlugClean required.'], "\n")
elseif a:check_branch && has_key(a:spec, 'commit') elseif a:check_branch && has_key(a:spec, 'commit')
let result = s:lines(s:system('git rev-parse HEAD 2>&1', a:spec.dir)) let sha = s:git_revision(a:spec.dir)
let sha = result[-1] if empty(sha)
if v:shell_error
let err = join(add(result, 'PlugClean required.'), "\n") let err = join(add(result, 'PlugClean required.'), "\n")
elseif !s:hash_match(sha, a:spec.commit) elseif !s:hash_match(sha, a:spec.commit)
let err = join([printf('Invalid HEAD (expected: %s, actual: %s)', let err = join([printf('Invalid HEAD (expected: %s, actual: %s)',
@ -2230,8 +2331,9 @@ function! s:git_validate(spec, check_branch)
\ 'PlugUpdate required.'], "\n") \ 'PlugUpdate required.'], "\n")
endif endif
elseif a:check_branch elseif a:check_branch
let branch = result[0] let current_branch = result[0]
" Check tag " Check tag
let origin_branch = s:git_origin_branch(a:spec)
if has_key(a:spec, 'tag') if has_key(a:spec, 'tag')
let tag = s:system_chomp('git describe --exact-match --tags HEAD 2>&1', a:spec.dir) let tag = s:system_chomp('git describe --exact-match --tags HEAD 2>&1', a:spec.dir)
if a:spec.tag !=# tag && a:spec.tag !~ '\*' if a:spec.tag !=# tag && a:spec.tag !~ '\*'
@ -2239,14 +2341,14 @@ function! s:git_validate(spec, check_branch)
\ (empty(tag) ? 'N/A' : tag), a:spec.tag) \ (empty(tag) ? 'N/A' : tag), a:spec.tag)
endif endif
" Check branch " Check branch
elseif a:spec.branch !=# branch elseif origin_branch !=# current_branch
let err = printf('Invalid branch: %s (expected: %s). Try PlugUpdate.', let err = printf('Invalid branch: %s (expected: %s). Try PlugUpdate.',
\ branch, a:spec.branch) \ current_branch, origin_branch)
endif endif
if empty(err) if empty(err)
let [ahead, behind] = split(s:lastline(s:system([ let [ahead, behind] = split(s:lastline(s:system([
\ 'git', 'rev-list', '--count', '--left-right', \ 'git', 'rev-list', '--count', '--left-right',
\ printf('HEAD...origin/%s', a:spec.branch) \ printf('HEAD...origin/%s', origin_branch)
\ ], a:spec.dir)), '\t') \ ], a:spec.dir)), '\t')
if !v:shell_error && ahead if !v:shell_error && ahead
if behind if behind
@ -2254,11 +2356,11 @@ function! s:git_validate(spec, check_branch)
" pushable (and probably not that messed up). " pushable (and probably not that messed up).
let err = printf( let err = printf(
\ "Diverged from origin/%s (%d commit(s) ahead and %d commit(s) behind!\n" \ "Diverged from origin/%s (%d commit(s) ahead and %d commit(s) behind!\n"
\ .'Backup local changes and run PlugClean and PlugUpdate to reinstall it.', a:spec.branch, ahead, behind) \ .'Backup local changes and run PlugClean and PlugUpdate to reinstall it.', origin_branch, ahead, behind)
else else
let err = printf("Ahead of origin/%s by %d commit(s).\n" let err = printf("Ahead of origin/%s by %d commit(s).\n"
\ .'Cannot update until local changes are pushed.', \ .'Cannot update until local changes are pushed.',
\ a:spec.branch, ahead) \ origin_branch, ahead)
endif endif
endif endif
endif endif
@ -2271,7 +2373,7 @@ endfunction
function! s:rm_rf(dir) function! s:rm_rf(dir)
if isdirectory(a:dir) if isdirectory(a:dir)
call s:system(s:is_win return s:system(s:is_win
\ ? 'rmdir /S /Q '.plug#shellescape(a:dir) \ ? 'rmdir /S /Q '.plug#shellescape(a:dir)
\ : ['rm', '-rf', a:dir]) \ : ['rm', '-rf', a:dir])
endif endif
@ -2355,6 +2457,7 @@ endfunction
function! s:delete(range, force) function! s:delete(range, force)
let [l1, l2] = a:range let [l1, l2] = a:range
let force = a:force let force = a:force
let err_count = 0
while l1 <= l2 while l1 <= l2
let line = getline(l1) let line = getline(l1)
if line =~ '^- ' && isdirectory(line[2:]) if line =~ '^- ' && isdirectory(line[2:])
@ -2363,11 +2466,22 @@ function! s:delete(range, force)
let answer = force ? 1 : s:ask('Delete '.line[2:].'?', 1) let answer = force ? 1 : s:ask('Delete '.line[2:].'?', 1)
let force = force || answer > 1 let force = force || answer > 1
if answer if answer
call s:rm_rf(line[2:]) let err = s:rm_rf(line[2:])
setlocal modifiable setlocal modifiable
call setline(l1, '~'.line[1:]) if empty(err)
let s:clean_count += 1 call setline(l1, '~'.line[1:])
call setline(4, printf('Removed %d directories.', s:clean_count)) let s:clean_count += 1
else
delete _
call append(l1 - 1, s:format_message('x', line[1:], err))
let l2 += len(s:lines(err))
let err_count += 1
endif
let msg = printf('Removed %d directories.', s:clean_count)
if err_count > 0
let msg .= printf(' Failed to remove %d directories.', err_count)
endif
call setline(4, msg)
setlocal nomodifiable setlocal nomodifiable
endif endif
endif endif
@ -2507,26 +2621,34 @@ function! s:preview_commit()
let sha = matchstr(getline('.'), '^ \X*\zs[0-9a-f]\{7,9}') let sha = matchstr(getline('.'), '^ \X*\zs[0-9a-f]\{7,9}')
if empty(sha) if empty(sha)
return let name = matchstr(getline('.'), '^- \zs[^:]*\ze:$')
if empty(name)
return
endif
let title = 'HEAD@{1}..'
let command = 'git diff --no-color HEAD@{1}'
else
let title = sha
let command = 'git show --no-color --pretty=medium '.sha
let name = s:find_name(line('.'))
endif endif
let name = s:find_name(line('.'))
if empty(name) || !has_key(g:plugs, name) || !isdirectory(g:plugs[name].dir) if empty(name) || !has_key(g:plugs, name) || !isdirectory(g:plugs[name].dir)
return return
endif endif
if exists('g:plug_pwindow') && !s:is_preview_window_open() if exists('g:plug_pwindow') && !s:is_preview_window_open()
execute g:plug_pwindow execute g:plug_pwindow
execute 'e' sha execute 'e' title
else else
execute 'pedit' sha execute 'pedit' title
wincmd P wincmd P
endif endif
setlocal previewwindow filetype=git buftype=nofile nobuflisted modifiable setlocal previewwindow filetype=git buftype=nofile bufhidden=wipe nobuflisted modifiable
let batchfile = '' let batchfile = ''
try try
let [sh, shellcmdflag, shrd] = s:chsh(1) let [sh, shellcmdflag, shrd] = s:chsh(1)
let cmd = 'cd '.plug#shellescape(g:plugs[name].dir).' && git show --no-color --pretty=medium '.sha let cmd = 'cd '.plug#shellescape(g:plugs[name].dir).' && '.command
if s:is_win if s:is_win
let [batchfile, cmd] = s:batchfile(cmd) let [batchfile, cmd] = s:batchfile(cmd)
endif endif
@ -2576,20 +2698,23 @@ function! s:diff()
endif endif
call s:append_ul(2, origin ? 'Pending updates:' : 'Last update:') call s:append_ul(2, origin ? 'Pending updates:' : 'Last update:')
for [k, v] in plugs for [k, v] in plugs
let range = origin ? '..origin/'.v.branch : 'HEAD@{1}..' let branch = s:git_origin_branch(v)
let cmd = ['git', 'log', '--graph', '--color=never'] if len(branch)
if s:git_version_requirement(2, 10, 0) let range = origin ? '..origin/'.branch : 'HEAD@{1}..'
call add(cmd, '--no-show-signature') let cmd = ['git', 'log', '--graph', '--color=never']
endif if s:git_version_requirement(2, 10, 0)
call extend(cmd, ['--pretty=format:%x01%h%x01%d%x01%s%x01%cr', range]) call add(cmd, '--no-show-signature')
if has_key(v, 'rtp') endif
call extend(cmd, ['--', v.rtp]) call extend(cmd, ['--pretty=format:%x01%h%x01%d%x01%s%x01%cr', range])
endif if has_key(v, 'rtp')
let diff = s:system_chomp(cmd, v.dir) call extend(cmd, ['--', v.rtp])
if !empty(diff) endif
let ref = has_key(v, 'tag') ? (' (tag: '.v.tag.')') : has_key(v, 'commit') ? (' '.v.commit) : '' let diff = s:system_chomp(cmd, v.dir)
call append(5, extend(['', '- '.k.':'.ref], map(s:lines(diff), 's:format_git_log(v:val)'))) if !empty(diff)
let cnts[origin] += 1 let ref = has_key(v, 'tag') ? (' (tag: '.v.tag.')') : has_key(v, 'commit') ? (' '.v.commit) : ''
call append(5, extend(['', '- '.k.':'.ref], map(s:lines(diff), 's:format_git_log(v:val)')))
let cnts[origin] += 1
endif
endif endif
let bar .= '=' let bar .= '='
call s:progress_bar(2, bar, len(total)) call s:progress_bar(2, bar, len(total))
@ -2649,9 +2774,9 @@ function! s:snapshot(force, ...) abort
1 1
let anchor = line('$') - 3 let anchor = line('$') - 3
let names = sort(keys(filter(copy(g:plugs), let names = sort(keys(filter(copy(g:plugs),
\'has_key(v:val, "uri") && !has_key(v:val, "commit") && isdirectory(v:val.dir)'))) \'has_key(v:val, "uri") && isdirectory(v:val.dir)')))
for name in reverse(names) for name in reverse(names)
let sha = s:system_chomp(['git', 'rev-parse', '--short', 'HEAD'], g:plugs[name].dir) let sha = has_key(g:plugs[name], 'commit') ? g:plugs[name].commit : s:git_revision(g:plugs[name].dir)
if !empty(sha) if !empty(sha)
call append(anchor, printf("silent! let g:plugs['%s'].commit = '%s'", name, sha)) call append(anchor, printf("silent! let g:plugs['%s'].commit = '%s'", name, sha))
redraw redraw

View File

@ -3,12 +3,17 @@
"pylsp.builtin.enableInstallPylsIsort": true, "pylsp.builtin.enableInstallPylsIsort": true,
"pylsp.builtin.enableInstallPylspRope": true, "pylsp.builtin.enableInstallPylspRope": true,
"pylsp.plugins.pyflakes.enabled": false, "pylsp.plugins.pyflakes.enabled": false,
"pylsp.plugins.pylint.enabled": false, "pylsp.plugins.pylint.enabled": true,
"pylsp.plugins.pylint.executable": "pylint",
"pylsp.plugins.pylint.args": [
"--disable=line-too-long,import-error,too-many-arguments,too-many-locals,too-many-branches,too-many-lines,too-many-return-statements,fixme,too-few-public-methods,too-many-instance-attributes,too-many-statements,too-many-public-methods"
],
"pylsp.plugins.pycodestyle.enabled": false, "pylsp.plugins.pycodestyle.enabled": false,
"pylsp.plugins.autopep8.enabled": false, "pylsp.plugins.autopep8.enabled": false,
"pylsp.plugins.flake8.enabled": true, "pylsp.plugins.flake8.enabled": true,
"pylsp.plugins.flake8.maxComplexity": 15,
"pylsp.plugins.yapf.enabled": true, "pylsp.plugins.yapf.enabled": true,
"pylsp.plugins.mccabe.enabled": true, "pylsp.plugins.mccabe.enabled": false,
"pylsp.plugins.pydocstyle.enabled": true, "pylsp.plugins.pydocstyle.enabled": true,
"pylsp.plugins.pydocstyle.convention": "google", "pylsp.plugins.pydocstyle.convention": "google",
"pydocstring.formatter": "google", "pydocstring.formatter": "google",

View File

@ -25,7 +25,7 @@ hi PmenuSel ctermfg=NONE ctermbg=238 cterm=NONE
hi IncSearch ctermfg=234 ctermbg=196 cterm=NONE hi IncSearch ctermfg=234 ctermbg=196 cterm=NONE
hi Search ctermfg=NONE ctermbg=NONE cterm=underline hi Search ctermfg=NONE ctermbg=NONE cterm=underline
hi Directory ctermfg=39 ctermbg=NONE cterm=NONE hi Directory ctermfg=39 ctermbg=NONE cterm=NONE
hi Folded ctermfg=71 ctermbg=234 cterm=NONE hi Folded ctermfg=245 ctermbg=NONE cterm=NONE
hi Normal ctermfg=231 ctermbg=234 cterm=NONE hi Normal ctermfg=231 ctermbg=234 cterm=NONE
hi Boolean ctermfg=39 ctermbg=NONE cterm=NONE hi Boolean ctermfg=39 ctermbg=NONE cterm=NONE
@ -43,22 +43,25 @@ hi WarningMsg ctermfg=231 ctermbg=124 cterm=NONE
hi Float ctermfg=214 ctermbg=NONE cterm=NONE hi Float ctermfg=214 ctermbg=NONE cterm=NONE
hi Function ctermfg=230 ctermbg=NONE cterm=NONE hi Function ctermfg=230 ctermbg=NONE cterm=NONE
hi Identifier ctermfg=39 ctermbg=NONE cterm=NONE hi Identifier ctermfg=39 ctermbg=NONE cterm=NONE
hi Include ctermfg=39 ctermbg=NONE cterm=italic
hi Keyword ctermfg=39 ctermbg=NONE cterm=NONE hi Keyword ctermfg=39 ctermbg=NONE cterm=NONE
hi Label ctermfg=196 ctermbg=NONE cterm=NONE hi Label ctermfg=196 ctermbg=NONE cterm=NONE
hi NonText ctermfg=240 ctermbg=None cterm=NONE hi NonText ctermfg=240 ctermbg=None cterm=NONE
hi Number ctermfg=214 ctermbg=NONE cterm=NONE hi Number ctermfg=214 ctermbg=NONE cterm=NONE
hi Operator ctermfg=39 ctermbg=NONE cterm=NONE hi Operator ctermfg=39 ctermbg=NONE cterm=NONE
hi PreProc ctermfg=39 ctermbg=NONE cterm=NONE hi PreProc ctermfg=242 ctermbg=NONE cterm=italic
hi Special ctermfg=231 ctermbg=NONE cterm=NONE hi Special ctermfg=231 ctermbg=NONE cterm=NONE
hi SpecialKey ctermfg=240 ctermbg=NONE cterm=NONE hi SpecialKey ctermfg=240 ctermbg=NONE cterm=NONE
hi Statement ctermfg=39 ctermbg=NONE cterm=NONE hi Statement ctermfg=39 ctermbg=NONE cterm=NONE
hi Structure ctermfg=230 ctermbg=NONE cterm=NONE
hi StorageClass ctermfg=39 ctermbg=NONE cterm=NONE hi StorageClass ctermfg=39 ctermbg=NONE cterm=NONE
hi String ctermfg=196 ctermbg=NONE cterm=NONE hi String ctermfg=196 ctermbg=NONE cterm=NONE
hi Tag ctermfg=230 ctermbg=NONE cterm=NONE hi Tag ctermfg=230 ctermbg=NONE cterm=NONE
hi Title ctermfg=231 ctermbg=NONE cterm=bold hi Title ctermfg=231 ctermbg=NONE cterm=bold
hi Todo ctermfg=71 ctermbg=NONE cterm=inverse,bold hi Todo ctermfg=71 ctermbg=NONE cterm=inverse,bold
hi Type ctermfg=230 ctermbg=NONE cterm=NONE hi Type ctermfg=230 ctermbg=NONE cterm=italic
hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline
hi pythonDecoratorName ctermfg=230 ctermbg=NONE cterm=italic
hi htmlTag ctermfg=39 ctermbg=NONE cterm=NONE hi htmlTag ctermfg=39 ctermbg=NONE cterm=NONE
hi htmlEndTag ctermfg=39 ctermbg=NONE cterm=NONE hi htmlEndTag ctermfg=39 ctermbg=NONE cterm=NONE
hi htmlTagName ctermfg=39 ctermbg=NONE cterm=NONE hi htmlTagName ctermfg=39 ctermbg=NONE cterm=NONE

View File

@ -32,12 +32,17 @@ if !has('nvim')
endif endif
if has('nvim') if has('nvim')
Plug 'nvim-lua/plenary.nvim' Plug 'nvim-lua/plenary.nvim'
Plug 'nvim-telescope/telescope.nvim', { 'tag': '0.1.1' } Plug 'nvim-telescope/telescope.nvim', { 'tag': '0.1.8' }
" Plug 'neoclide/coc.nvim', {'do': 'yarn install --frozen-lockfile'} " Plug 'neoclide/coc.nvim', {'do': 'yarn install --frozen-lockfile'}
Plug 'neoclide/coc.nvim', {'branch': 'release'} Plug 'neoclide/coc.nvim', {'branch': 'release'}
"Plug 'jodosha/vim-godebug' " Debugger integration via delve "Plug 'jodosha/vim-godebug' " Debugger integration via delve
Plug 'github/copilot.vim' Plug 'github/copilot.vim'
Plug 'nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'} Plug 'nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'}
Plug 'folke/todo-comments.nvim'
Plug 'akinsho/toggleterm.nvim', {'tag' : 'v2.11.0'}
Plug 'neovim/nvim-lspconfig'
" Plug 'mfussenegger/nvim-dap-python'
" Plug 'linux-cultist/venv-selector.nvim', {'branch': 'regexp'}
endif endif
" All of your Plugs must be added before the following line " All of your Plugs must be added before the following line
call plug#end() call plug#end()
@ -336,7 +341,7 @@ let g:rooter_resolve_links = 1
""" NERDtree """ NERDtree
nnoremap <leader>n :NERDTreeFocus<CR> nnoremap <leader>n :NERDTreeFocus<CR>
nnoremap <leader>t :NERDTreeToggle<CR> nnoremap <leader>f :NERDTreeToggle<CR>
nnoremap <leader>o :NERDTreeFind<CR> nnoremap <leader>o :NERDTreeFind<CR>
" Open NERDTree on the right side of the window. " Open NERDTree on the right side of the window.
@ -380,6 +385,19 @@ nnoremap <leader>fh <cmd>Telescope help_tags<cr>
""" TreeSitter """ TreeSitter
luafile ~/.vim/vimrc.d/treesitter.lua luafile ~/.vim/vimrc.d/treesitter.lua
""" todo-comments
luafile ~/.vim/vimrc.d/todo-comments.lua
""" toggleterm
lua require("toggleterm").setup()
nnoremap <leader>t :ToggleTerm<CR>
""" venv-selector
" luafile ~/.vim/vimrc.d/venv-selector.lua
" nnoremap <leader>vs :VenvSelect<CR>
""" vim-smoothie
""""""""""""""""""""" """""""""""""""""""""
" Personal Settings " " Personal Settings "

View File

@ -0,0 +1,64 @@
require("todo-comments").setup({
signs = true, -- show icons in the signs column
sign_priority = 8, -- sign priority
-- keywords recognized as todo comments
keywords = {
FIX = {
icon = "", -- icon used for the sign, and in search results
color = "error", -- can be a hex color, or a named color (see below)
alt = { "FIXME", "BUG", "FIXIT", "ISSUE" }, -- a set of other keywords that all map to this FIX keywords
-- signs = false, -- configure signs for some keywords individually
},
TODO = { icon = "", color = "info" },
HACK = { icon = "", color = "warning" },
-- WARN = { icon = " ", color = "warning", alt = { "WARNING", "XXX" } },
-- PERF = { icon = " ", alt = { "OPTIM", "PERFORMANCE", "OPTIMIZE" } },
-- NOTE = { icon = " ", color = "hint", alt = { "INFO" } },
-- TEST = { icon = "⏲ ", color = "test", alt = { "TESTING", "PASSED", "FAILED" } },
},
gui_style = {
fg = "NONE", -- The gui style to use for the fg highlight group.
bg = "BOLD", -- The gui style to use for the bg highlight group.
},
merge_keywords = false, -- when true, custom keywords will be merged with the defaults
-- highlighting of the line containing the todo comment
-- * before: highlights before the keyword (typically comment characters)
-- * keyword: highlights of the keyword
-- * after: highlights after the keyword (todo text)
highlight = {
multiline = true, -- enable multine todo comments
multiline_pattern = "^.", -- lua pattern to match the next multiline from the start of the matched keyword
multiline_context = 10, -- extra lines that will be re-evaluated when changing a line
before = "", -- "fg" or "bg" or empty
keyword = "wide", -- "fg", "bg", "wide", "wide_bg", "wide_fg" or empty. (wide and wide_bg is the same as bg, but will also highlight surrounding characters, wide_fg acts accordingly but with fg)
after = "fg", -- "fg" or "bg" or empty
pattern = [[.*<(KEYWORDS)\s*:]], -- pattern or table of patterns, used for highlighting (vim regex)
comments_only = true, -- uses treesitter to match keywords in comments only
max_line_len = 400, -- ignore lines longer than this
exclude = {}, -- list of file types to exclude highlighting
},
-- list of named colors where we try to extract the guifg from the
-- list of highlight groups or use the hex color if hl not found as a fallback
colors = {
error = { "DiagnosticError", "ErrorMsg", "#DC2626" },
warning = { "DiagnosticWarn", "WarningMsg", "#FBBF24" },
info = { "DiagnosticInfo", "#2563EB" },
hint = { "DiagnosticHint", "#10B981" },
default = { "Identifier", "#7C3AED" },
test = { "Identifier", "#FF00FF" }
},
search = {
command = "rg",
args = {
"--color=never",
"--no-heading",
"--with-filename",
"--line-number",
"--column",
},
-- regex that will be used to match keywords.
-- don't replace the (KEYWORDS) placeholder
pattern = [[\b(KEYWORDS):]], -- ripgrep regex
-- pattern = [[\b(KEYWORDS)\b]], -- match without the extra colon. You'll likely get false positives
},
})

View File

@ -2,6 +2,7 @@ require("nvim-treesitter.configs").setup({
ensure_installed = { ensure_installed = {
"bash", "bash",
"c", "c",
"comment",
"cpp", "cpp",
"css", "css",
"dockerfile", "dockerfile",
@ -35,7 +36,7 @@ require("nvim-treesitter.configs").setup({
auto_install = true, auto_install = true,
highlight = { highlight = {
enable = true, enable = true,
disable = { "markdown", "make" }, disable = { "markdown", "make"},
additional_vim_regex_highlighting = false, additional_vim_regex_highlighting = true,
}, },
}) })

View File

@ -0,0 +1,37 @@
local function on_venv_activate()
local command_run = false
local function run_shell_command()
local venv = require("venv-selector").venv():match("([^/]+)$")
if command_run == false then
local command = "workon " .. venv
vim.api.nvim_feedkeys(command .. "\n", "n", false)
command_run = true
end
end
vim.api.nvim_create_augroup("TerminalCommands", { clear = true })
vim.api.nvim_create_autocmd("TermEnter", {
group = "TerminalCommands",
pattern = "*",
callback = run_shell_command,
})
vim.print("Activated venv: " .. require("venv-selector").venv())
end
require("venv-selector").setup {
settings = {
options = {
on_venv_activate_callback = on_venv_activate,
notify_user_on_venv_activation = true,
},
search = {
my_venvs = {
command = "ls -d ~/devel/venvs/*/",
},
},
},
}

View File

@ -8,9 +8,10 @@
"40", "40",
"41", "41",
"42", "42",
"43" "43",
"44"
], ],
"url": "https://github.com/grantmcwilliams/Gnome_Hide_Clock", "url": "https://github.com/grantmcwilliams/Gnome_Hide_Clock",
"uuid": "hide_clock@grantmcwilliams.com", "uuid": "hide_clock@grantmcwilliams.com",
"version": 10 "version": 11
} }