Compare commits

..

1 Commits

Author SHA1 Message Date
74c068a2b8 Switch to CoC for language servers. 2019-06-20 20:37:39 -07:00
14 changed files with 217 additions and 629 deletions

View File

@@ -27,6 +27,9 @@ window:
x: 10 x: 10
y: 20 y: 20
# Display tabs using this many cells (changes require restart)
tabspaces: 8
# When true, bold text is drawn using the bright variant of colors. # When true, bold text is drawn using the bright variant of colors.
draw_bold_text_with_bright_colors: true draw_bold_text_with_bright_colors: true
@@ -51,7 +54,7 @@ font:
# style: Italic # style: Italic
# Point size of the font # Point size of the font
size: 12.0 size: 10.0
# Offset is the extra space around each character. offset.y can be thought of # Offset is the extra space around each character. offset.y can be thought of
# as modifying the linespacing, and offset.x as modifying the letter spacing. # as modifying the linespacing, and offset.x as modifying the letter spacing.
@@ -72,7 +75,7 @@ font:
use_thin_strokes: true use_thin_strokes: true
# Should display the render timer # Should display the render timer
# render_timer: false render_timer: false
# Colors (Pencil Dark) # Colors (Pencil Dark)
# colors: # colors:
@@ -179,7 +182,7 @@ colors:
# #
# To completely disable the visual bell, set its duration to 0. # To completely disable the visual bell, set its duration to 0.
# #
bell: visual_bell:
animation: EaseOutExpo animation: EaseOutExpo
duration: 0 duration: 0

View File

@@ -30,7 +30,7 @@ font pango:Source Code Pro 8
floating_modifier $mod floating_modifier $mod
# start a terminal # start a terminal
bindsym $mod+Return exec alacritty bindsym $mod+Return exec i3-sensible-terminal
# kill focused window # kill focused window
bindsym $mod+Shift+q kill bindsym $mod+Shift+q kill
@@ -134,8 +134,7 @@ bindsym $mod+Shift+c reload
# restart i3 inplace (preserves your layout/session, can be used to upgrade i3) # restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
bindsym $mod+Shift+r restart bindsym $mod+Shift+r restart
# exit i3 (logs you out of your X session) # exit i3 (logs you out of your X session)
# bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -b 'Yes, exit i3' 'i3-msg exit'" bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -b 'Yes, exit i3' 'i3-msg exit'"
bindsym $mod+Shift+e exec i3-msg exit
# resize window (you can also use the mouse for that) # resize window (you can also use the mouse for that)
mode "resize" { mode "resize" {
@@ -171,14 +170,11 @@ bindsym $mod+r mode "resize"
# mode hide # mode hide
# } # }
# Polybar and Wallpaper # Polybar
exec_always --no-startup-id ~/.polybar.sh exec_always --no-startup-id ~/.polybar.sh
# Compton
exec_always --no-startup-id compton exec_always --no-startup-id compton
# Autorandr
# exec_always autorandr --change
# Remove window borders # Remove window borders
for_window [class="^.*"] border pixel 2 for_window [class="^.*"] border pixel 0
# Set up gaps # Set up gaps
gaps inner 20 gaps inner 20
# Browser shortcut # Browser shortcut
@@ -189,9 +185,3 @@ bindsym $mod+Shift+p exec compton
bindsym $mod+Shift+u exec ~/.software/abacus-fx/bin/fx bindsym $mod+Shift+u exec ~/.software/abacus-fx/bin/fx
# Screenshot # Screenshot
bindsym $mod+Shift+s exec scrot bindsym $mod+Shift+s exec scrot
bindsym $mod+Shift+f exec scrot -s
bindsym $mod+Shift+o exec alacritty --command ~/projects/ppl-cli/script/open_float.sh
client.focused #436394 #436394 #436394 #436394 #436394
client.focused_inactive #2e3440 #2e3440 #2e3440 #2e3440 #2e3440
client.unfocused #2e3440 #2e3440 #2e3440 #2e3440 #2e3440

Binary file not shown.

Before

Width:  |  Height:  |  Size: 652 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 851 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 944 KiB

View File

@@ -1,9 +0,0 @@
export BG_PATH=~/background
cd $BG_PATH
FILENAME=$(basename $(ls *.jpg | sort -R | head -n 1) .jpg)
SUB="s/^primary = #[a-z0-9]*/primary = #${FILENAME}/"
echo $FILENAME > color
sed -i "$SUB" ~/.config/polybar/config
SUB="s/^client.focused .*/client.focused #${FILENAME} #${FILENAME} #${FILENAME} #${FILENAME} #${FILENAME}/"
sed -i "$SUB" ~/.config/i3/config
${0%/*}/refresh.sh

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

View File

@@ -1 +0,0 @@
436394

View File

@@ -1,2 +0,0 @@
PT=${BG_PATH:-~/background}
cat $PT/color | xargs -I {} feh --bg-scale "$PT/{}.jpg"

View File

@@ -1,49 +0,0 @@
snippet eq
\begin{equation*}
$1
\end{equation*}
endsnippet
snippet al
\begin{aligned}
$1
\end{aligned}
endsnippet
snippet fr
\frac{$1}{$2}
endsnippet
snippet sec
\section*{$1}
endsnippet
snippet ssec
\subsection*{$1}
endsnippet
snippet alist
\begin{enumerate}[label=\alph*)]
$1
\end{enumerate}
endsnippet
snippet li
\item
endsnippet
snippet sum
\sum_{$1}^{$2} $3
endsnippet
snippet rel
\text{Rel}($1)
endsnippet
snippet a
\alpha
endsnippet
snippet e
\epsilon
endsnippet

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-default branch " " Using a non-master 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)
@@ -96,17 +96,11 @@ let s:plug_src = 'https://github.com/junegunn/vim-plug.git'
let s:plug_tab = get(s:, 'plug_tab', -1) let s:plug_tab = get(s:, 'plug_tab', -1)
let s:plug_buf = get(s:, 'plug_buf', -1) let s:plug_buf = get(s:, 'plug_buf', -1)
let s:mac_gui = has('gui_macvim') && has('gui_running') let s:mac_gui = has('gui_macvim') && has('gui_running')
let s:is_win = has('win32') let s:is_win = has('win32') || has('win64')
let s:nvim = has('nvim-0.2') || (has('nvim') && exists('*jobwait') && !s:is_win) let s:nvim = has('nvim-0.2') || (has('nvim') && exists('*jobwait') && !s:is_win)
let s:vim8 = has('patch-8.0.0039') && exists('*job_start') let s:vim8 = has('patch-8.0.0039') && exists('*job_start')
if s:is_win && &shellslash
set noshellslash
let s:me = resolve(expand('<sfile>:p')) let s:me = resolve(expand('<sfile>:p'))
set shellslash let s:base_spec = { 'branch': 'master', 'frozen': 0 }
else
let s:me = resolve(expand('<sfile>:p'))
endif
let s:base_spec = { 'branch': '', 'frozen': 0 }
let s:TYPE = { let s:TYPE = {
\ 'string': type(''), \ 'string': type(''),
\ 'list': type([]), \ 'list': type([]),
@@ -116,126 +110,10 @@ 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: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
function! s:plug_call(fn, ...)
let shellslash = &shellslash
try
set noshellslash
return call(a:fn, a:000)
finally
let &shellslash = shellslash
endtry
endfunction
else
function! s:plug_call(fn, ...)
return call(a:fn, a:000)
endfunction
endif
function! s:plug_getcwd()
return s:plug_call('getcwd')
endfunction
function! s:plug_fnamemodify(fname, mods)
return s:plug_call('fnamemodify', a:fname, a:mods)
endfunction
function! s:plug_expand(fmt)
return s:plug_call('expand', a:fmt, 1)
endfunction
function! s:plug_tempname()
return s:plug_call('tempname')
endfunction
function! plug#begin(...) function! plug#begin(...)
if a:0 > 0 if a:0 > 0
let s:plug_home_org = a:1 let s:plug_home_org = a:1
let home = s:path(s:plug_fnamemodify(s:plug_expand(a:1), ':p')) let home = s:path(fnamemodify(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 !empty(&rtp) elseif !empty(&rtp)
@@ -243,7 +121,7 @@ function! plug#begin(...)
else else
return s:err('Unable to determine plug home. Try calling plug#begin() with a path argument.') return s:err('Unable to determine plug home. Try calling plug#begin() with a path argument.')
endif endif
if s:plug_fnamemodify(home, ':t') ==# 'plugin' && s:plug_fnamemodify(home, ':h') ==# s:first_rtp if fnamemodify(home, ':t') ==# 'plugin' && fnamemodify(home, ':h') ==# s:first_rtp
return s:err('Invalid plug home. '.home.' is a standard Vim runtime path and is not allowed.') return s:err('Invalid plug home. '.home.' is a standard Vim runtime path and is not allowed.')
endif endif
@@ -261,16 +139,6 @@ function! s:define_commands()
if !executable('git') if !executable('git')
return s:err('`git` executable not found. Most commands will not be available. To suppress this message, prepend `silent!` to `call plug#begin(...)`.') return s:err('`git` executable not found. Most commands will not be available. To suppress this message, prepend `silent!` to `call plug#begin(...)`.')
endif endif
if has('win32')
\ && &shellslash
\ && (&shell =~# 'cmd\(\.exe\)\?$' || &shell =~# 'powershell\(\.exe\)\?$')
return s:err('vim-plug does not support shell, ' . &shell . ', when shellslash is set.')
endif
if !has('nvim')
\ && (has('win32') || has('win32unix'))
\ && !has('multi_byte')
return s:err('Vim needs +multi_byte feature on Windows to run shell commands. Enable +iconv for best results.')
endif
command! -nargs=* -bar -bang -complete=customlist,s:names PlugInstall call s:install(<bang>0, [<f-args>]) command! -nargs=* -bar -bang -complete=customlist,s:names PlugInstall call s:install(<bang>0, [<f-args>])
command! -nargs=* -bar -bang -complete=customlist,s:names PlugUpdate call s:update(<bang>0, [<f-args>]) command! -nargs=* -bar -bang -complete=customlist,s:names PlugUpdate call s:update(<bang>0, [<f-args>])
command! -nargs=0 -bar -bang PlugClean call s:clean(<bang>0) command! -nargs=0 -bar -bang PlugClean call s:clean(<bang>0)
@@ -325,17 +193,9 @@ function! s:ask_no_interrupt(...)
endtry endtry
endfunction endfunction
function! s:lazy(plug, opt)
return has_key(a:plug, a:opt) &&
\ (empty(s:to_a(a:plug[a:opt])) ||
\ !isdirectory(a:plug.dir) ||
\ len(s:glob(s:rtp(a:plug), 'plugin')) ||
\ len(s:glob(s:rtp(a:plug), 'after/plugin')))
endfunction
function! plug#end() function! plug#end()
if !exists('g:plugs') if !exists('g:plugs')
return s:err('plug#end() called without calling plug#begin() first') return s:err('Call plug#begin() first')
endif endif
if exists('#PlugLOD') if exists('#PlugLOD')
@@ -354,7 +214,7 @@ function! plug#end()
continue continue
endif endif
let plug = g:plugs[name] let plug = g:plugs[name]
if get(s:loaded, name, 0) || !s:lazy(plug, 'on') && !s:lazy(plug, 'for') if get(s:loaded, name, 0) || !has_key(plug, 'on') && !has_key(plug, 'for')
let s:loaded[name] = 1 let s:loaded[name] = 1
continue continue
endif endif
@@ -456,7 +316,7 @@ endfunction
function! s:git_version_requirement(...) function! s:git_version_requirement(...)
if !exists('s:git_version') if !exists('s:git_version')
let s:git_version = map(split(split(s:system(['git', '--version']))[2], '\.'), 'str2nr(v:val)') let s:git_version = map(split(split(s:system('git --version'))[2], '\.'), 'str2nr(v:val)')
endif endif
return s:version_requirement(s:git_version, a:000) return s:version_requirement(s:git_version, a:000)
endfunction endfunction
@@ -466,11 +326,11 @@ function! s:progress_opt(base)
\ s:git_version_requirement(1, 7, 1) ? '--progress' : '' \ s:git_version_requirement(1, 7, 1) ? '--progress' : ''
endfunction endfunction
if s:is_win
function! s:rtp(spec) function! s:rtp(spec)
return s:path(a:spec.dir . get(a:spec, 'rtp', '')) return s:path(a:spec.dir . get(a:spec, 'rtp', ''))
endfunction endfunction
if s:is_win
function! s:path(path) function! s:path(path)
return s:trim(substitute(a:path, '/', '\', 'g')) return s:trim(substitute(a:path, '/', '\', 'g'))
endfunction endfunction
@@ -482,33 +342,11 @@ if s:is_win
function! s:is_local_plug(repo) function! s:is_local_plug(repo)
return a:repo =~? '^[a-z]:\|^[%~]' return a:repo =~? '^[a-z]:\|^[%~]'
endfunction endfunction
" Copied from fzf
function! s:wrap_cmds(cmds)
let cmds = [
\ '@echo off',
\ 'setlocal enabledelayedexpansion']
\ + (type(a:cmds) == type([]) ? a:cmds : [a:cmds])
\ + ['endlocal']
if has('iconv')
if !exists('s:codepage')
let s:codepage = libcallnr('kernel32.dll', 'GetACP', 0)
endif
return map(cmds, printf('iconv(v:val."\r", "%s", "cp%d")', &encoding, s:codepage))
endif
return map(cmds, 'v:val."\r"')
endfunction
function! s:batchfile(cmd)
let batchfile = s:plug_tempname().'.bat'
call writefile(s:wrap_cmds(a:cmd), batchfile)
let cmd = plug#shellescape(batchfile, {'shell': &shell, 'script': 0})
if &shell =~# 'powershell\(\.exe\)\?$'
let cmd = '& ' . cmd
endif
return [batchfile, cmd]
endfunction
else else
function! s:rtp(spec)
return s:dirpath(a:spec.dir . get(a:spec, 'rtp', ''))
endfunction
function! s:path(path) function! s:path(path)
return s:trim(a:path) return s:trim(a:path)
endfunction endfunction
@@ -588,8 +426,8 @@ endfunction
function! s:dobufread(names) function! s:dobufread(names)
for name in a:names for name in a:names
let path = s:rtp(g:plugs[name]) let path = s:rtp(g:plugs[name]).'/**'
for dir in ['ftdetect', 'ftplugin', 'after/ftdetect', 'after/ftplugin'] for dir in ['ftdetect', 'ftplugin']
if len(finddir(dir, path)) if len(finddir(dir, path))
if exists('#BufRead') if exists('#BufRead')
doautocmd BufRead doautocmd BufRead
@@ -708,7 +546,7 @@ function! plug#(repo, ...)
try try
let repo = s:trim(a:repo) let repo = s:trim(a:repo)
let opts = a:0 == 1 ? s:parse_options(a:1) : s:base_spec let opts = a:0 == 1 ? s:parse_options(a:1) : s:base_spec
let name = get(opts, 'as', s:plug_fnamemodify(repo, ':t:s?\.git$??')) let name = get(opts, 'as', fnamemodify(repo, ':t:s?\.git$??'))
let spec = extend(s:infer_properties(name, repo), opts) let spec = extend(s:infer_properties(name, repo), opts)
if !has_key(g:plugs, name) if !has_key(g:plugs, name)
call add(g:plugs_order, name) call add(g:plugs_order, name)
@@ -716,41 +554,19 @@ function! plug#(repo, ...)
let g:plugs[name] = spec let g:plugs[name] = spec
let s:loaded[name] = get(s:loaded, name, 0) let s:loaded[name] = get(s:loaded, name, 0)
catch catch
return s:err(repo . ' ' . v:exception) return s:err(v:exception)
endtry endtry
endfunction endfunction
function! s:parse_options(arg) function! s:parse_options(arg)
let opts = copy(s:base_spec) let opts = copy(s:base_spec)
let type = type(a:arg) let type = type(a:arg)
let opt_errfmt = 'Invalid argument for "%s" option of :Plug (expected: %s)'
if type == s:TYPE.string if type == s:TYPE.string
if empty(a:arg)
throw printf(opt_errfmt, 'tag', 'string')
endif
let opts.tag = a:arg let opts.tag = a:arg
elseif type == s:TYPE.dict elseif type == s:TYPE.dict
for opt in ['branch', 'tag', 'commit', 'rtp', 'dir', 'as']
if has_key(a:arg, opt)
\ && (type(a:arg[opt]) != s:TYPE.string || empty(a:arg[opt]))
throw printf(opt_errfmt, opt, 'string')
endif
endfor
for opt in ['on', 'for']
if has_key(a:arg, opt)
\ && type(a:arg[opt]) != s:TYPE.list
\ && (type(a:arg[opt]) != s:TYPE.string || empty(a:arg[opt]))
throw printf(opt_errfmt, opt, 'string or list')
endif
endfor
if has_key(a:arg, 'do')
\ && type(a:arg.do) != s:TYPE.funcref
\ && (type(a:arg.do) != s:TYPE.string || empty(a:arg.do))
throw printf(opt_errfmt, 'do', 'string or funcref')
endif
call extend(opts, a:arg) 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(expand(opts.dir))
endif endif
else else
throw 'Invalid argument type (expected: string or dictionary)' throw 'Invalid argument type (expected: string or dictionary)'
@@ -761,7 +577,7 @@ endfunction
function! s:infer_properties(name, repo) function! s:infer_properties(name, repo)
let repo = a:repo let repo = a:repo
if s:is_local_plug(repo) if s:is_local_plug(repo)
return { 'dir': s:dirpath(s:plug_expand(repo)) } return { 'dir': s:dirpath(expand(repo)) }
else else
if repo =~ ':' if repo =~ ':'
let uri = repo let uri = repo
@@ -804,7 +620,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 /^-\{1}\ / syn match plugDash /^-/
syn match plugPlus /^+/ syn match plugPlus /^+/
syn match plugStar /^*/ syn match plugStar /^*/
syn match plugMessage /\(^- \)\@<=.*/ syn match plugMessage /\(^- \)\@<=.*/
@@ -822,7 +638,6 @@ 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
@@ -915,7 +730,7 @@ function! s:finish_bindings()
endfunction endfunction
function! s:prepare(...) function! s:prepare(...)
if empty(s:plug_getcwd()) if empty(getcwd())
throw 'Invalid current working directory. Cannot proceed.' throw 'Invalid current working directory. Cannot proceed.'
endif endif
@@ -948,9 +763,6 @@ function! s:prepare(...)
execute 'silent! unmap <buffer>' k execute 'silent! unmap <buffer>' k
endfor endfor
setlocal buftype=nofile bufhidden=wipe nobuflisted nolist noswapfile nowrap cursorline modifiable nospell setlocal buftype=nofile bufhidden=wipe nobuflisted nolist noswapfile nowrap cursorline modifiable nospell
if exists('+colorcolumn')
setlocal colorcolumn=
endif
setf vim-plug setf vim-plug
if exists('g:syntax_on') if exists('g:syntax_on')
call s:syntax() call s:syntax()
@@ -971,35 +783,31 @@ endfunction
function! s:chsh(swap) function! s:chsh(swap)
let prev = [&shell, &shellcmdflag, &shellredir] let prev = [&shell, &shellcmdflag, &shellredir]
if !s:is_win if s:is_win
set shell=sh set shell=cmd.exe shellcmdflag=/c shellredir=>%s\ 2>&1
endif elseif a:swap
if a:swap set shell=sh shellredir=>%s\ 2>&1
if &shell =~# 'powershell\(\.exe\)\?$' || &shell =~# 'pwsh$'
let &shellredir = '2>&1 | Out-File -Encoding UTF8 %s'
elseif &shell =~# 'sh' || &shell =~# 'cmd\(\.exe\)\?$'
set shellredir=>%s\ 2>&1
endif
endif endif
return prev return prev
endfunction endfunction
function! s:bang(cmd, ...) function! s:bang(cmd, ...)
let batchfile = ''
try try
let [sh, shellcmdflag, shrd] = s:chsh(a:0) let [sh, shellcmdflag, shrd] = s:chsh(a:0)
" FIXME: Escaping is incomplete. We could use shellescape with eval, " FIXME: Escaping is incomplete. We could use shellescape with eval,
" but it won't work on Windows. " but it won't work on Windows.
let cmd = a:0 ? s:with_cd(a:cmd, a:1) : a:cmd let cmd = a:0 ? s:with_cd(a:cmd, a:1) : a:cmd
if s:is_win if s:is_win
let [batchfile, cmd] = s:batchfile(cmd) let batchfile = tempname().'.bat'
call writefile(['@echo off', cmd], batchfile)
let cmd = batchfile
endif endif
let g:_plug_bang = (s:is_win && has('gui_running') ? 'silent ' : '').'!'.escape(cmd, '#!%') let g:_plug_bang = (s:is_win && has('gui_running') ? 'silent ' : '').'!'.escape(cmd, '#!%')
execute "normal! :execute g:_plug_bang\<cr>\<cr>" execute "normal! :execute g:_plug_bang\<cr>\<cr>"
finally finally
unlet g:_plug_bang unlet g:_plug_bang
let [&shell, &shellcmdflag, &shellredir] = [sh, shellcmdflag, shrd] let [&shell, &shellcmdflag, &shellredir] = [sh, shellcmdflag, shrd]
if s:is_win && filereadable(batchfile) if s:is_win
call delete(batchfile) call delete(batchfile)
endif endif
endtry endtry
@@ -1012,7 +820,7 @@ function! s:regress_bar()
endfunction endfunction
function! s:is_updated(dir) function! s:is_updated(dir)
return !empty(s:system_chomp(['git', 'log', '--pretty=format:%h', 'HEAD...HEAD@{1}'], a:dir)) return !empty(s:system_chomp('git log --pretty=format:"%h" "HEAD...HEAD@{1}"', a:dir))
endfunction endfunction
function! s:do(pull, force, todo) function! s:do(pull, force, todo)
@@ -1049,7 +857,6 @@ function! s:do(pull, force, todo)
endif endif
elseif type == s:TYPE.funcref elseif type == s:TYPE.funcref
try try
call s:load_plugin(spec)
let status = installed ? 'installed' : (updated ? 'updated' : 'unchanged') let status = installed ? 'installed' : (updated ? 'updated' : 'unchanged')
call spec.do({ 'name': name, 'status': status, 'force': a:force }) call spec.do({ 'name': name, 'status': status, 'force': a:force })
catch catch
@@ -1076,11 +883,10 @@ 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:system('git rev-parse HEAD', a:spec.dir)
if !empty(output) && !s:hash_match(sha, s:lines(output)[0]) if !v:shell_error && !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 '.credential_helper.'fetch --depth 999999 && git checkout '.plug#shellescape(sha).' --', a:spec.dir) \ 'git fetch --depth 999999 && git checkout '.s:esc(sha).' --', a:spec.dir)
endif endif
return output return output
endfunction endfunction
@@ -1195,20 +1001,13 @@ function! s:update_impl(pull, force, args) abort
normal! 2G normal! 2G
silent! redraw silent! redraw
let s:clone_opt = [] let s:clone_opt = get(g:, 'plug_shallow', 1) ?
if get(g:, 'plug_shallow', 1) \ '--depth 1' . (s:git_version_requirement(1, 7, 10) ? ' --no-single-branch' : '') : ''
call extend(s:clone_opt, ['--depth', '1'])
if s:git_version_requirement(1, 7, 10)
call add(s:clone_opt, '--no-single-branch')
endif
endif
if has('win32unix') || has('wsl') if has('win32unix')
call extend(s:clone_opt, ['-c', 'core.eol=lf', '-c', 'core.autocrlf=input']) let s:clone_opt .= ' -c core.eol=lf -c core.autocrlf=input'
endif endif
let s:submodule_opt = s:git_version_requirement(2, 8) ? ' --jobs='.threads : ''
" Python version requirement (>= 2.7) " Python version requirement (>= 2.7)
if python && !has('python3') && !ruby && !use_job && s:update.threads > 1 if python && !has('python3') && !ruby && !use_job && s:update.threads > 1
redir => pyv redir => pyv
@@ -1282,7 +1081,7 @@ function! s:update_finish()
elseif has_key(spec, 'tag') elseif has_key(spec, 'tag')
let tag = spec.tag let tag = spec.tag
if tag =~ '\*' if tag =~ '\*'
let tags = s:lines(s:system('git tag --list '.plug#shellescape(tag).' --sort -version:refname 2>&1', spec.dir)) let tags = s:lines(s:system('git tag --list '.s:shellesc(tag).' --sort -version:refname 2>&1', spec.dir))
if !v:shell_error && !empty(tags) if !v:shell_error && !empty(tags)
let tag = tags[0] let tag = tags[0]
call s:log4(name, printf('Latest tag for %s -> %s', spec.tag, tag)) call s:log4(name, printf('Latest tag for %s -> %s', spec.tag, tag))
@@ -1290,17 +1089,17 @@ function! s:update_finish()
endif endif
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 '.s:esc(tag).' -- 2>&1', spec.dir)
else else
let branch = s:git_origin_branch(spec) let branch = s:esc(get(spec, 'branch', 'master'))
call s:log4(name, 'Merging origin/'.s:esc(branch)) call s:log4(name, 'Merging origin/'.branch)
let out = s:system('git checkout -q '.plug#shellescape(branch).' -- 2>&1' let out = s:system('git checkout -q '.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 origin/'.branch.' 2>&1')), spec.dir)
endif endif
if !v:shell_error && filereadable(spec.dir.'/.gitmodules') && if !v:shell_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 2>&1', spec.dir)
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 v:shell_error
@@ -1339,7 +1138,7 @@ function! s:job_abort()
silent! call job_stop(j.jobid) silent! call job_stop(j.jobid)
endif endif
if j.new if j.new
call s:rm_rf(g:plugs[name].dir) call s:system('rm -rf ' . s:shellesc(g:plugs[name].dir))
endif endif
endfor endfor
let s:jobs = {} let s:jobs = {}
@@ -1385,27 +1184,29 @@ function! s:job_cb(fn, job, ch, data)
endfunction endfunction
function! s:nvim_cb(job_id, data, event) dict abort function! s:nvim_cb(job_id, data, event) dict abort
return (a:event == 'stdout' || a:event == 'stderr') ? return a:event == 'stdout' ?
\ s:job_cb('s:job_out_cb', self, 0, join(a:data, "\n")) : \ s:job_cb('s:job_out_cb', self, 0, join(a:data, "\n")) :
\ 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, cmd, opts)
let job = { 'name': a:name, 'running': 1, 'error': 0, 'lines': [''], let job = { 'name': a:name, 'running': 1, 'error': 0, 'lines': [''],
\ 'batchfile': (s:is_win && (s:nvim || s:vim8)) ? tempname().'.bat' : '',
\ 'new': get(a:opts, 'new', 0) } \ 'new': get(a:opts, 'new', 0) }
let s:jobs[a:name] = job let s:jobs[a:name] = job
let cmd = has_key(a:opts, 'dir') ? s:with_cd(a:cmd, a:opts.dir) : a:cmd
if !empty(job.batchfile)
call writefile(['@echo off', cmd], job.batchfile)
let cmd = job.batchfile
endif
let argv = add(s:is_win ? ['cmd', '/c'] : ['sh', '-c'], cmd)
if s:nvim if s:nvim
if has_key(a:opts, 'dir')
let job.cwd = a:opts.dir
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_exit': function('s:nvim_cb'), \ 'on_exit': function('s:nvim_cb'),
\ }) \ })
let jid = s:plug_call('jobstart', argv, job) let jid = jobstart(argv, job)
if jid > 0 if jid > 0
let job.jobid = jid let job.jobid = jid
else else
@@ -1415,16 +1216,9 @@ 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})'))
if has_key(a:opts, 'dir')
let cmd = s:with_cd(cmd, a:opts.dir, 0)
endif
let argv = s:is_win ? ['cmd', '/s', '/c', '"'.cmd.'"'] : ['sh', '-c', cmd]
let jid = job_start(s:is_win ? join(argv, ' ') : argv, { let jid = job_start(s:is_win ? join(argv, ' ') : argv, {
\ 'out_cb': function('s:job_cb', ['s:job_out_cb', job]), \ 'out_cb': function('s:job_cb', ['s:job_out_cb', job]),
\ 'err_cb': function('s:job_cb', ['s:job_out_cb', job]),
\ 'exit_cb': function('s:job_cb', ['s:job_exit_cb', job]), \ 'exit_cb': function('s:job_cb', ['s:job_exit_cb', job]),
\ 'err_mode': 'raw',
\ 'out_mode': 'raw' \ 'out_mode': 'raw'
\}) \})
if job_status(jid) == 'run' if job_status(jid) == 'run'
@@ -1435,7 +1229,7 @@ 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', [cmd]))
let job.error = v:shell_error != 0 let job.error = v:shell_error != 0
let job.running = 0 let job.running = 0
endif endif
@@ -1455,6 +1249,9 @@ function! s:reap(name)
call s:log(bullet, a:name, empty(result) ? 'OK' : result) call s:log(bullet, a:name, empty(result) ? 'OK' : result)
call s:bar() call s:bar()
if has_key(job, 'batchfile') && !empty(job.batchfile)
call delete(job.batchfile)
endif
call remove(s:jobs, a:name) call remove(s:jobs, a:name)
endfunction endfunction
@@ -1469,10 +1266,9 @@ function! s:bar()
endfunction endfunction
function! s:logpos(name) function! s:logpos(name)
let max = line('$') for i in range(4, line('$'))
for i in range(4, max > 4 ? max : 4)
if getline(i) =~# '^[-+x*] '.a:name.':' if getline(i) =~# '^[-+x*] '.a:name.':'
for j in range(i + 1, max > 5 ? max : 5) for j in range(i + 1, line('$'))
if getline(j) !~ '^ ' if getline(j) !~ '^ '
return [i, j - 1] return [i, j - 1]
endif endif
@@ -1522,7 +1318,7 @@ 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 new = !isdirectory(spec.dir)
call s:log(new ? '+' : '*', name, pull ? 'Updating ...' : 'Installing ...') call s:log(new ? '+' : '*', name, pull ? 'Updating ...' : 'Installing ...')
redraw redraw
@@ -1532,14 +1328,8 @@ 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 = s:git_version_requirement(2) ? ['git', '-c', 'credential.helper=', 'fetch'] : ['git', 'fetch'] let fetch_opt = (has_tag && !empty(globpath(spec.dir, '.git/shallow'))) ? '--depth 99999999' : ''
if has_tag && !empty(globpath(spec.dir, '.git/shallow')) call s:spawn(name, printf('git fetch %s %s 2>&1', fetch_opt, prog), { 'dir': spec.dir })
call extend(cmd, ['--depth', '99999999'])
endif
if !empty(prog)
call add(cmd, prog)
endif
call s:spawn(name, cmd, { '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
@@ -1547,14 +1337,12 @@ while 1 " Without TCO, Vim stack is bound to explode
let s:jobs[name] = { 'running': 0, 'lines': s:lines(error), 'error': 1 } let s:jobs[name] = { 'running': 0, 'lines': s:lines(error), 'error': 1 }
endif endif
else else
let cmd = ['git', 'clone'] call s:spawn(name,
if !has_tag \ printf('git clone %s %s %s %s 2>&1',
call extend(cmd, s:clone_opt) \ has_tag ? '' : s:clone_opt,
endif \ prog,
if !empty(prog) \ s:shellesc(spec.uri),
call add(cmd, prog) \ s:shellesc(s:trim(spec.dir))), { 'new': 1 })
endif
call s:spawn(name, extend(cmd, [spec.uri, s:trim(spec.dir)]), { 'new': 1 })
endif endif
if !s:jobs[name].running if !s:jobs[name].running
@@ -1591,7 +1379,7 @@ G_NVIM = vim.eval("has('nvim')") == '1'
G_PULL = vim.eval('s:update.pull') == '1' G_PULL = vim.eval('s:update.pull') == '1'
G_RETRIES = int(vim.eval('get(g:, "plug_retries", 2)')) + 1 G_RETRIES = int(vim.eval('get(g:, "plug_retries", 2)')) + 1
G_TIMEOUT = int(vim.eval('get(g:, "plug_timeout", 60)')) G_TIMEOUT = int(vim.eval('get(g:, "plug_timeout", 60)'))
G_CLONE_OPT = ' '.join(vim.eval('s:clone_opt')) G_CLONE_OPT = vim.eval('s:clone_opt')
G_PROGRESS = vim.eval('s:progress_opt(1)') G_PROGRESS = vim.eval('s:progress_opt(1)')
G_LOG_PROB = 1.0 / int(vim.eval('s:update.threads')) G_LOG_PROB = 1.0 / int(vim.eval('s:update.threads'))
G_STOP = thr.Event() G_STOP = thr.Event()
@@ -2128,7 +1916,7 @@ function! s:update_ruby()
end end
} if VIM::evaluate('s:mac_gui') == 1 } if VIM::evaluate('s:mac_gui') == 1
clone_opt = VIM::evaluate('s:clone_opt').join(' ') clone_opt = VIM::evaluate('s:clone_opt')
progress = VIM::evaluate('s:progress_opt(1)') progress = VIM::evaluate('s:progress_opt(1)')
nthr.times do nthr.times do
mtx.synchronize do mtx.synchronize do
@@ -2181,45 +1969,19 @@ function! s:update_ruby()
EOF EOF
endfunction endfunction
function! s:shellesc_cmd(arg, script) function! s:shellesc_cmd(arg)
let escaped = substitute('"'.a:arg.'"', '[&|<>()@^!"]', '^&', 'g') let escaped = substitute(a:arg, '[&|<>()@^]', '^&', 'g')
return substitute(escaped, '%', (a:script ? '%' : '^') . '&', 'g') let escaped = substitute(escaped, '%', '%%', 'g')
let escaped = substitute(escaped, '"', '\\^&', 'g')
let escaped = substitute(escaped, '\(\\\+\)\(\\^\)', '\1\1\2', 'g')
return '^"'.substitute(escaped, '\(\\\+\)$', '\1\1', '').'^"'
endfunction endfunction
function! s:shellesc_ps1(arg) function! s:shellesc(arg)
return "'".substitute(escape(a:arg, '\"'), "'", "''", 'g')."'" if &shell =~# 'cmd.exe$'
endfunction return s:shellesc_cmd(a:arg)
function! s:shellesc_sh(arg)
return "'".substitute(a:arg, "'", "'\\\\''", 'g')."'"
endfunction
" Escape the shell argument based on the shell.
" Vim and Neovim's shellescape() are insufficient.
" 1. shellslash determines whether to use single/double quotes.
" Double-quote escaping is fragile for cmd.exe.
" 2. It does not work for powershell.
" 3. It does not work for *sh shells if the command is executed
" via cmd.exe (ie. cmd.exe /c sh -c command command_args)
" 4. It does not support batchfile syntax.
"
" Accepts an optional dictionary with the following keys:
" - shell: same as Vim/Neovim 'shell' option.
" If unset, fallback to 'cmd.exe' on Windows or 'sh'.
" - script: If truthy and shell is cmd.exe, escape for batchfile syntax.
function! plug#shellescape(arg, ...)
if a:arg =~# '^[A-Za-z0-9_/:.-]\+$'
return a:arg
endif endif
let opts = a:0 > 0 && type(a:1) == s:TYPE.dict ? a:1 : {} return shellescape(a:arg)
let shell = get(opts, 'shell', s:is_win ? 'cmd.exe' : 'sh')
let script = get(opts, 'script', 1)
if shell =~# 'cmd\(\.exe\)\?$'
return s:shellesc_cmd(a:arg, script)
elseif shell =~# 'powershell\(\.exe\)\?$' || shell =~# 'pwsh$'
return s:shellesc_ps1(a:arg)
endif
return s:shellesc_sh(a:arg)
endfunction endfunction
function! s:glob_dir(path) function! s:glob_dir(path)
@@ -2251,39 +2013,23 @@ function! s:format_message(bullet, name, message)
endif endif
endfunction endfunction
function! s:with_cd(cmd, dir, ...) function! s:with_cd(cmd, dir)
let script = a:0 > 0 ? a:1 : 1 return printf('cd%s %s && %s', s:is_win ? ' /d' : '', s:shellesc(a:dir), a:cmd)
return printf('cd%s %s && %s', s:is_win ? ' /d' : '', plug#shellescape(a:dir, {'script': script}), a:cmd)
endfunction endfunction
function! s:system(cmd, ...) function! s:system(cmd, ...)
let batchfile = ''
try try
let [sh, shellcmdflag, shrd] = s:chsh(1) let [sh, shellcmdflag, shrd] = s:chsh(1)
if type(a:cmd) == s:TYPE.list let cmd = a:0 > 0 ? s:with_cd(a:cmd, a:1) : a:cmd
" Neovim's system() supports list argument to bypass the shell if s:is_win
" but it cannot set the working directory for the command. let batchfile = tempname().'.bat'
" Assume that the command does not rely on the shell. call writefile(['@echo off', cmd], batchfile)
if has('nvim') && a:0 == 0 let cmd = batchfile
return system(a:cmd)
endif endif
let cmd = join(map(copy(a:cmd), 'plug#shellescape(v:val, {"shell": &shell, "script": 0})')) return system(s:is_win ? '('.cmd.')' : cmd)
if &shell =~# 'powershell\(\.exe\)\?$'
let cmd = '& ' . cmd
endif
else
let cmd = a:cmd
endif
if a:0 > 0
let cmd = s:with_cd(cmd, a:1, type(a:cmd) != s:TYPE.list)
endif
if s:is_win && type(a:cmd) != s:TYPE.list
let [batchfile, cmd] = s:batchfile(cmd)
endif
return system(cmd)
finally finally
let [&shell, &shellcmdflag, &shellredir] = [sh, shellcmdflag, shrd] let [&shell, &shellcmdflag, &shellredir] = [sh, shellcmdflag, shrd]
if s:is_win && filereadable(batchfile) if s:is_win
call delete(batchfile) call delete(batchfile)
endif endif
endtry endtry
@@ -2297,17 +2043,18 @@ 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:git_local_branch(a:spec.dir), s:git_origin_url(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 remote = result[-1] let remote = result[-1]
if empty(remote) if v:shell_error
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 sha = s:git_revision(a:spec.dir) let result = s:lines(s:system('git rev-parse HEAD 2>&1', a:spec.dir))
if empty(sha) let sha = result[-1]
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)',
@@ -2315,9 +2062,8 @@ function! s:git_validate(spec, check_branch)
\ 'PlugUpdate required.'], "\n") \ 'PlugUpdate required.'], "\n")
endif endif
elseif a:check_branch elseif a:check_branch
let current_branch = result[0] let 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 !~ '\*'
@@ -2325,26 +2071,25 @@ 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 origin_branch !=# current_branch elseif a:spec.branch !=# branch
let err = printf('Invalid branch: %s (expected: %s). Try PlugUpdate.', let err = printf('Invalid branch: %s (expected: %s). Try PlugUpdate.',
\ current_branch, origin_branch) \ branch, a:spec.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(printf(
\ 'git', 'rev-list', '--count', '--left-right', \ 'git rev-list --count --left-right HEAD...origin/%s',
\ printf('HEAD...origin/%s', origin_branch) \ a:spec.branch), a:spec.dir)), '\t')
\ ], a:spec.dir)), '\t')
if !v:shell_error && ahead if !v:shell_error && ahead
if behind if 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.', a:spec.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.',
\ origin_branch, ahead) \ a:spec.branch, ahead)
endif endif
endif endif
endif endif
@@ -2357,9 +2102,7 @@ endfunction
function! s:rm_rf(dir) function! s:rm_rf(dir)
if isdirectory(a:dir) if isdirectory(a:dir)
return s:system(s:is_win call s:system((s:is_win ? 'rmdir /S /Q ' : 'rm -rf ') . s:shellesc(a:dir))
\ ? 'rmdir /S /Q '.plug#shellescape(a:dir)
\ : ['rm', '-rf', a:dir])
endif endif
endfunction endfunction
@@ -2391,7 +2134,7 @@ function! s:clean(force)
let allowed = {} let allowed = {}
for dir in dirs for dir in dirs
let allowed[s:dirpath(s:plug_fnamemodify(dir, ':h:h'))] = 1 let allowed[s:dirpath(fnamemodify(dir, ':h:h'))] = 1
let allowed[dir] = 1 let allowed[dir] = 1
for child in s:glob_dir(dir) for child in s:glob_dir(dir)
let allowed[child] = 1 let allowed[child] = 1
@@ -2441,7 +2184,6 @@ 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:])
@@ -2450,22 +2192,11 @@ 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
let err = s:rm_rf(line[2:]) call s:rm_rf(line[2:])
setlocal modifiable setlocal modifiable
if empty(err)
call setline(l1, '~'.line[1:]) call setline(l1, '~'.line[1:])
let s:clean_count += 1 let s:clean_count += 1
else call setline(4, printf('Removed %d directories.', s:clean_count))
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
@@ -2476,11 +2207,11 @@ endfunction
function! s:upgrade() function! s:upgrade()
echo 'Downloading the latest version of vim-plug' echo 'Downloading the latest version of vim-plug'
redraw redraw
let tmp = s:plug_tempname() let tmp = tempname()
let new = tmp . '/plug.vim' let new = tmp . '/plug.vim'
try try
let out = s:system(['git', 'clone', '--depth', '1', s:plug_src, tmp]) let out = s:system(printf('git clone --depth 1 %s %s', s:plug_src, tmp))
if v:shell_error if v:shell_error
return s:err('Error upgrading vim-plug: '. out) return s:err('Error upgrading vim-plug: '. out)
endif endif
@@ -2621,17 +2352,18 @@ function! s:preview_commit()
wincmd P wincmd P
endif endif
setlocal previewwindow filetype=git buftype=nofile nobuflisted modifiable setlocal previewwindow filetype=git buftype=nofile nobuflisted modifiable
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 '.s:shellesc(g:plugs[name].dir).' && git show --no-color --pretty=medium '.sha
if s:is_win if s:is_win
let [batchfile, cmd] = s:batchfile(cmd) let batchfile = tempname().'.bat'
call writefile(['@echo off', cmd], batchfile)
let cmd = batchfile
endif endif
execute 'silent %!' cmd execute 'silent %!' cmd
finally finally
let [&shell, &shellcmdflag, &shellredir] = [sh, shellcmdflag, shrd] let [&shell, &shellcmdflag, &shellredir] = [sh, shellcmdflag, shrd]
if s:is_win && filereadable(batchfile) if s:is_win
call delete(batchfile) call delete(batchfile)
endif endif
endtry endtry
@@ -2674,24 +2406,13 @@ 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 branch = s:git_origin_branch(v) let range = origin ? '..origin/'.v.branch : 'HEAD@{1}..'
if len(branch) let diff = s:system_chomp('git log --graph --color=never '.join(map(['--pretty=format:%x01%h%x01%d%x01%s%x01%cr', range], 's:shellesc(v:val)')), v.dir)
let range = origin ? '..origin/'.branch : 'HEAD@{1}..'
let cmd = ['git', 'log', '--graph', '--color=never']
if s:git_version_requirement(2, 10, 0)
call add(cmd, '--no-show-signature')
endif
call extend(cmd, ['--pretty=format:%x01%h%x01%d%x01%s%x01%cr', range])
if has_key(v, 'rtp')
call extend(cmd, ['--', v.rtp])
endif
let diff = s:system_chomp(cmd, v.dir)
if !empty(diff) if !empty(diff)
let ref = has_key(v, 'tag') ? (' (tag: '.v.tag.')') : has_key(v, 'commit') ? (' '.v.commit) : '' 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)'))) call append(5, extend(['', '- '.k.':'.ref], map(s:lines(diff), 's:format_git_log(v:val)')))
let cnts[origin] += 1 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))
normal! 2G normal! 2G
@@ -2705,13 +2426,8 @@ function! s:diff()
\ . (cnts[1] ? printf(' %d plugin(s) have pending updates.', cnts[1]) : '')) \ . (cnts[1] ? printf(' %d plugin(s) have pending updates.', cnts[1]) : ''))
if cnts[0] || cnts[1] if cnts[0] || cnts[1]
nnoremap <silent> <buffer> <plug>(plug-preview) :silent! call <SID>preview_commit()<cr> nnoremap <silent> <buffer> <cr> :silent! call <SID>preview_commit()<cr>
if empty(maparg("\<cr>", 'n')) nnoremap <silent> <buffer> o :silent! call <SID>preview_commit()<cr>
nmap <buffer> <cr> <plug>(plug-preview)
endif
if empty(maparg('o', 'n'))
nmap <buffer> o <plug>(plug-preview)
endif
endif endif
if cnts[0] if cnts[0]
nnoremap <silent> <buffer> X :call <SID>revert()<cr> nnoremap <silent> <buffer> X :call <SID>revert()<cr>
@@ -2732,7 +2448,7 @@ function! s:revert()
return return
endif endif
call s:system('git reset --hard HEAD@{1} && git checkout '.plug#shellescape(g:plugs[name].branch).' --', g:plugs[name].dir) call s:system('git reset --hard HEAD@{1} && git checkout '.s:esc(g:plugs[name].branch).' --', g:plugs[name].dir)
setlocal modifiable setlocal modifiable
normal! "_dap normal! "_dap
setlocal nomodifiable setlocal nomodifiable
@@ -2752,7 +2468,7 @@ function! s:snapshot(force, ...) abort
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") && !has_key(v:val, "commit") && isdirectory(v:val.dir)')))
for name in reverse(names) for name in reverse(names)
let sha = s:git_revision(g:plugs[name].dir) let sha = s:system_chomp('git rev-parse --short HEAD', 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
@@ -2760,7 +2476,7 @@ function! s:snapshot(force, ...) abort
endfor endfor
if a:0 > 0 if a:0 > 0
let fn = s:plug_expand(a:1) let fn = expand(a:1)
if filereadable(fn) && !(a:force || s:ask(a:1.' already exists. Overwrite?')) if filereadable(fn) && !(a:force || s:ask(a:1.' already exists. Overwrite?'))
return return
endif endif

View File

@@ -0,0 +1,41 @@
{
"languageserver": {
"haskell": {
"command": "hie-wrapper",
"args": ["--lsp"],
"filetypes": [ "haskell" ],
"rootPatterns": [ ".git", "stack.yaml" ]
},
"rust": {
"command": "rustup",
"args": ["run", "stable", "rls" ],
"filetypes": [ "rust" ],
"rootPatterns": [ ".git", "cargo.toml" ]
},
"clangd": {
"command": "clangd",
"filetypes": [ "c", "cpp" ],
"rootPatterns": [".git"]
},
"crystal": {
"command": "scry",
"filetypes": [ "crystal" ],
"rootPatterns": [".git", "shard.yml"]
},
"javascript": {
"command": "javascript-typescript-stdio",
"filetypes": [ "javascript" ],
"rootPatterns": [".git" ]
},
"elm": {
"command": "elm-language-server",
"args": ["--stdio"],
"filetypes": ["elm"],
"rootPatterns": [".git", "elm.json"],
"initializationOptions": {
"runtime": "node",
"elmPath": "elm"
}
}
}
}

View File

@@ -1,39 +1,17 @@
call plug#begin('~/.config/nvim/plugged') call plug#begin('~/.config/nvim/plugged')
" Language Tools Plug 'neoclide/coc.nvim', {'branch': 'release'}
Plug 'roxma/nvim-yarp' " For language client
Plug 'ncm2/ncm2' " For language client
Plug 'autozimu/LanguageClient-neovim', {'branch': '0.1.159', 'do': 'bash install.sh' }
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --bin' } Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --bin' }
Plug 'junegunn/fzf.vim' Plug 'junegunn/fzf.vim'
Plug 'SirVer/ultisnips'
Plug 'luochen1990/rainbow'
" Plug 'enomsg/vim-haskellConcealPlus' " This one isn't always good.
" Languages
Plug 'LnL7/vim-nix'
Plug 'whonore/Coqtail'
Plug 'wlangstroth/vim-racket'
Plug 'lervag/vimtex' Plug 'lervag/vimtex'
Plug 'idris-hackers/idris-vim'
Plug 'rhysd/vim-crystal' Plug 'rhysd/vim-crystal'
Plug 'elmcast/elm-vim' Plug 'elmcast/elm-vim'
Plug 'ap/vim-css-color' Plug 'ap/vim-css-color'
Plug 'vim-scripts/avrasm.vim' Plug 'vim-scripts/avrasm.vim'
Plug 'idris-hackers/idris-vim'
Plug 'elixir-editors/vim-elixir'
Plug 'guersam/vim-j'
Plug 'wlangstroth/vim-racket'
Plug 'derekelkins/agda-vim'
Plug 'ftorres16/spice.vim'
" Themes
Plug 'arcticicestudio/nord-vim' Plug 'arcticicestudio/nord-vim'
" Editing Tools
Plug 'junegunn/goyo.vim'
Plug 'iamcco/markdown-preview.vim' Plug 'iamcco/markdown-preview.vim'
Plug 'junegunn/limelight.vim'
Plug 'luochen1990/rainbow'
call plug#end() call plug#end()
set exrc " Execute local vimscripts set exrc " Execute local vimscripts
@@ -42,78 +20,8 @@ set expandtab " Expand tabs into spaces
set number " Set line numbers set number " Set line numbers
set mouse=a " Allow mouse set mouse=a " Allow mouse
set signcolumn=yes " Always show extra column set signcolumn=yes " Always show extra column
set guifont=Iosevka " Use Ioeska in frontends.
set hidden
autocmd BufEnter * call ncm2#enable_for_buffer() " Enable ncm2 for all buffers
autocmd BufRead,BufNewFile *.v set filetype=coq " Coq is not Verilog autocmd BufRead,BufNewFile *.v set filetype=coq " Coq is not Verilog
autocmd BufNewFile,BufRead *.cir set filetype=spice " LTSpice is Spice
autocmd FileType crystal setlocal shiftwidth=2 " Crystal likes 2-wide indent autocmd FileType crystal setlocal shiftwidth=2 " Crystal likes 2-wide indent
set completeopt=noinsert,menuone
" Settings for Rainbow
let g:rainbow_active = 1
" Settings for Limelight
let g:limelight_conceal_ctermfg = 8
" Settings for Vim's LaTeX plugin
let g:tex_flavor = 'latex'
" Settings for deoplete
let g:deoplete#enable_at_startup = 1
" Settings for UltiSnips
let g:UltiSnipsExpandTrigger="<tab>"
let g:UltiSnipsJumpForwardTrigger="<c-k>"
let g:UltiSnipsJumpBackwardTrigger="<c-j>"
" Settings for FZF
let g:fzf_action = { 'enter': 'tab drop' }
" Settings for Neovide
let g:neovide_cursor_vfx_mode="ripple"
colorscheme nord colorscheme nord
" Language Client settings
let g:LanguageClient_selectionUI = "fzf"
let g:LanguageClient_hasSnippetSupport = 0
let g:LanguageClient_serverCommands = {
\ 'haskell': ['haskell-language-server-wrapper', '--lsp'],
\ 'rust': ['rls'],
\ 'c': ['clangd'],
\ 'crystal': ['/home/vanilla/software/crystalline/crystalline'],
\ 'cpp': ['clangd'],
\ 'javascript': ['javascript-typescript-stdio'],
\ 'elm': ['elm-language-server', '--stdio'],
\ 'python': ['python', '-m', 'pyls'],
\ 'elixir': ['/home/vanilla/software/elixir-ls/language_server.sh']
\ }
let g:LanguageClient_diagnosticsDisplay = {
\ 1: {"name": "Error","texthl": "ALEError","signText": ">>","signTexthl": "ALEErrorSign",},
\ 2: {"name": "Warning","texthl": "ALEWarning","signText": ">>","signTexthl": "ALEWarningSign",},
\ 3: {"name": "Information","texthl": "ALEInfo","signText": ">>","signTexthl": "ALEInfoSign",},
\ 4: {"name": "Hint","texthl": "ALEInfo","signText": ">>","signTexthl": "ALEInfoSign",},}
let g:LanguageClient_rootMarkers = {
\ 'haskell': ['.git'],
\ 'crystal': ['.git'],
\ 'elm': ['elm.json'],
\ }
nmap <c-e> :Files<CR>
nmap <silent>K <Plug>(lcn-menu)
nmap <silent>M <Plug>(lcn-explain-error)
nmap <silent>? <Plug>(lcn-hover)
" Racket settings
au BufReadPost *.rkt,*.rktl set filetype=racket
au filetype racket set lisp
au filetype racket set autoindent
" Coq Settings
function! g:CoqtailHighlight()
hi default link CoqtailChecked Visual
hi default link CoqtailSent PmenuSel
endfunction

View File

@@ -14,48 +14,42 @@ background-alt = #3b4252
;foreground = ${xrdb:color7:#222} ;foreground = ${xrdb:color7:#222}
foreground = #d8dee9 foreground = #d8dee9
foreground-alt = #e5e9f0 foreground-alt = #e5e9f0
primary = #cf5fb4 primary = #b48ead
secondary = #a3be8c secondary = #a3be8c
alert = #bf616a alert = #bf616a
[bar/example] [bar/example]
dpi-x = 220
dpi-y = 200
;monitor = ${env:MONITOR:HDMI-1} ;monitor = ${env:MONITOR:HDMI-1}
width = 100% width = 100%
height = 3% height = 27
;offset-x = 1% ;offset-x = 1%
;offset-y = 1% ;offset-y = 1%
radius = 20% radius = 6.0
fixed-center = false fixed-center = false
background = ${colors.background} background = ${colors.background}
foreground = ${colors.foreground} foreground = ${colors.foreground}
line-size = 5% line-size = 3
line-color = #f00 line-color = #f00
border-size = 4 border-size = 4
border-color = #00000000 border-color = #00000000
padding-left = 2 padding-left = 0
padding-right = 2 padding-right = 2
module-margin-left = 1 module-margin-left = 1
module-margin-right = 2 module-margin-right = 2
font-0 = Iosevka:pixelsize=9;1 font-0 = fixed:pixelsize=10;1
font-1 = Ionicons:pixelsize=9;1 font-1 = Wuncon Siji:pixelsize=12;1
font-2 = Weather Icons:size=7;1
; font-0 = fixed:pixelsize=10;1
; font-1 = Wuncon Siji:pixelsize=12;1
;font-1 = unifont:fontformat=truetype:size=8:antialias=false;0 ;font-1 = unifont:fontformat=truetype:size=8:antialias=false;0
;font-2 = siji:pixelsize=10;1 ;font-2 = siji:pixelsize=10;1
modules-left = bspwm i3 modules-left = bspwm i3
modules-center = modules-center =
modules-right = openweathermap-fullfeatured filesystem volume memory cpu battery temperature date wlan powermenu modules-right = filesystem volume memory cpu battery temperature date wlan powermenu
tray-position = right tray-position = right
tray-padding = 2 tray-padding = 2
@@ -76,12 +70,6 @@ tray-padding = 2
cursor-click = pointer cursor-click = pointer
cursor-scroll = ns-resize cursor-scroll = ns-resize
[module/openweathermap-fullfeatured]
type = custom/script
exec = ~/software/polybar-scripts/polybar-scripts/openweathermap-fullfeatured/openweathermap-fullfeatured.sh
interval = 600
label-font = 3
[module/xwindow] [module/xwindow]
type = internal/xwindow type = internal/xwindow
label = %title:0:30:...% label = %title:0:30:...%
@@ -108,7 +96,7 @@ interval = 25
mount-0 = / mount-0 = /
label-mounted = %{F}%mountpoint%%{F-}: %percentage_used%% label-mounted = %{F#0a81f5}%mountpoint%%{F-}: %percentage_used%%
label-unmounted = %mountpoint% not mounted label-unmounted = %mountpoint% not mounted
label-unmounted-foreground = ${colors.foreground-alt} label-unmounted-foreground = ${colors.foreground-alt}
@@ -145,7 +133,7 @@ label-mode-foreground = #000
label-mode-background = ${colors.primary} label-mode-background = ${colors.primary}
; focused = Active workspace on focused monitor ; focused = Active workspace on focused monitor
label-focused = %index%! label-focused = %index%
label-focused-background = ${module/bspwm.label-focused-background} label-focused-background = ${module/bspwm.label-focused-background}
label-focused-underline = ${module/bspwm.label-focused-underline} label-focused-underline = ${module/bspwm.label-focused-underline}
label-focused-padding = ${module/bspwm.label-focused-padding} label-focused-padding = ${module/bspwm.label-focused-padding}
@@ -203,17 +191,17 @@ card = intel_backlight
[module/cpu] [module/cpu]
type = internal/cpu type = internal/cpu
interval = 2 interval = 2
format-prefix = " " format-prefix = " "
format-prefix-foreground = ${colors.foreground-alt} format-prefix-foreground = ${colors.foreground-alt}
format-underline = ${colors.primary} format-underline = #f90000
label = %percentage:2%% label = %percentage:2%%
[module/memory] [module/memory]
type = internal/memory type = internal/memory
interval = 2 interval = 2
format-prefix = " " format-prefix = " "
format-prefix-foreground = ${colors.foreground-alt} format-prefix-foreground = ${colors.foreground-alt}
format-underline = ${colors.primary} format-underline = #4bffdc
label = %percentage_used%% label = %percentage_used%%
[module/wlan] [module/wlan]
@@ -261,12 +249,12 @@ interval = 5
date = date =
date-alt = " %Y-%m-%d" date-alt = " %Y-%m-%d"
time = %H:%M time = %H:%M
time-alt = %H:%M:%S time-alt = %H:%M:%S
format-prefix =  format-prefix = 
format-prefix-foreground = ${colors.foreground-alt} format-prefix-foreground = ${colors.foreground-alt}
format-underline = ${colors.primary} format-underline = #0a6cf5
label = %date% %time% label = %date% %time%
@@ -282,13 +270,13 @@ format-muted-foreground = ${colors.foreground-alt}
label-muted = sound muted label-muted = sound muted
bar-volume-width = 10 bar-volume-width = 10
bar-volume-foreground-0 = ${colors.primary} bar-volume-foreground-0 = #55aa55
bar-volume-foreground-1 = ${colors.primary} bar-volume-foreground-1 = #55aa55
bar-volume-foreground-2 = ${colors.primary} bar-volume-foreground-2 = #55aa55
bar-volume-foreground-3 = ${colors.primary} bar-volume-foreground-3 = #55aa55
bar-volume-foreground-4 = ${colors.primary} bar-volume-foreground-4 = #55aa55
bar-volume-foreground-5 = ${colors.primary} bar-volume-foreground-5 = #f5a70a
bar-volume-foreground-6 = ${colors.primary} bar-volume-foreground-6 = #ff5555
bar-volume-gradient = false bar-volume-gradient = false
bar-volume-indicator = | bar-volume-indicator = |
bar-volume-indicator-font = 2 bar-volume-indicator-font = 2
@@ -305,7 +293,7 @@ adapter = ADP1
full-at = 98 full-at = 98
format-charging = <animation-charging> <label-charging> format-charging = <animation-charging> <label-charging>
format-charging-underline = ${colors.primary} format-charging-underline = #ffb52a
format-discharging = <ramp-capacity> <label-discharging> format-discharging = <ramp-capacity> <label-discharging>
format-discharging-underline = ${self.format-charging-underline} format-discharging-underline = ${self.format-charging-underline}
@@ -314,11 +302,14 @@ format-full-prefix = " "
format-full-prefix-foreground = ${colors.foreground-alt} format-full-prefix-foreground = ${colors.foreground-alt}
format-full-underline = ${self.format-charging-underline} format-full-underline = ${self.format-charging-underline}
ramp-capacity-0 = ramp-capacity-0 =
ramp-capacity-1 = ramp-capacity-1 =
ramp-capacity-2 = 
ramp-capacity-foreground = ${colors.foreground-alt} ramp-capacity-foreground = ${colors.foreground-alt}
animation-charging-0 = animation-charging-0 =
animation-charging-1 = 
animation-charging-2 = 
animation-charging-foreground = ${colors.foreground-alt} animation-charging-foreground = ${colors.foreground-alt}
animation-charging-framerate = 750 animation-charging-framerate = 750
@@ -328,7 +319,7 @@ thermal-zone = 0
warn-temperature = 60 warn-temperature = 60
format = <ramp> <label> format = <ramp> <label>
format-underline = ${colors.primary} format-underline = #f50a4d
format-warn = <ramp> <label-warn> format-warn = <ramp> <label-warn>
format-warn-underline = ${self.format-underline} format-warn-underline = ${self.format-underline}
@@ -336,9 +327,9 @@ label = %temperature%
label-warn = %temperature% label-warn = %temperature%
label-warn-foreground = ${colors.secondary} label-warn-foreground = ${colors.secondary}
ramp-0 = ramp-0 =
ramp-1 = ramp-1 =
ramp-2 = ramp-2 =
ramp-foreground = ${colors.foreground-alt} ramp-foreground = ${colors.foreground-alt}
[module/powermenu] [module/powermenu]