aboutsummaryrefslogtreecommitdiff
path: root/vim/autoload
diff options
context:
space:
mode:
authorTom Ryder <tom@sanctum.geek.nz>2020-04-25 20:29:25 +1200
committerTom Ryder <tom@sanctum.geek.nz>2020-04-25 20:29:25 +1200
commit49b3b6b9df4d957b874a716378266870b4c2e9c7 (patch)
tree68de43d2ac89b9d9d1b314edb2b0a1cdd1156fea /vim/autoload
parentImplement specified fallbacks for $XDG_*_DIRS (diff)
downloaddotfiles-49b3b6b9df4d957b874a716378266870b4c2e9c7.tar.gz
dotfiles-49b3b6b9df4d957b874a716378266870b4c2e9c7.zip
Factor out XDG env defaults for readability
Diffstat (limited to 'vim/autoload')
-rw-r--r--vim/autoload/xdg.vim41
1 files changed, 26 insertions, 15 deletions
diff --git a/vim/autoload/xdg.vim b/vim/autoload/xdg.vim
index fd7ddedf..b83d7208 100644
--- a/vim/autoload/xdg.vim
+++ b/vim/autoload/xdg.vim
@@ -1,19 +1,34 @@
+" <https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html#variables>
+let s:defaults = {
+ \ 'XDG_CACHE_HOME': '~/.cache',
+ \ 'XDG_CONFIG_HOME': '~/.config',
+ \ 'XDG_CONFIG_DIRS': '/etc/xdg',
+ \ 'XDG_DATA_HOME': '~/.local/share',
+ \ 'XDG_DATA_DIRS': '/usr/local/share/:/usr/share/',
+ \}
+
+function! s:Get(name) abort
+ let name = a:name
+ let env = environ()
+ if has_key(env, name) && strlen(env[name]) > 0
+ return env[name]
+ elseif has_key(s:defaults, name)
+ return s:defaults[name]
+ else
+ return ''
+ endif
+endfunction
+
function! xdg#CacheDir(name) abort
let name = a:name
- let home = exists('$XDG_CACHE_HOME')
- \ ? $XDG_CACHE_HOME
- \ : '~/.cache'
+ let home = s:Get('XDG_CACHE_HOME')
return join([home, name], '/')
endfunction
function! xdg#ConfigDirs(name) abort
let name = a:name
- let home = exists('$XDG_CONFIG_HOME')
- \ ? $XDG_CONFIG_HOME
- \ : '~/.config'
- let dirs = exists('$XDG_CONFIG_DIRS')
- \ ? split($XDG_CONFIG_DIRS, ':')
- \ : ['/etc/xdg']
+ let home = s:Get('XDG_CONFIG_HOME')
+ let dirs = split(s:Get('XDG_CONFIG_DIRS'), ':')
return map(
\ insert(dirs, home)
\,'join([v:val, name], "/")'
@@ -22,12 +37,8 @@ endfunction
function! xdg#DataDirs(name) abort
let name = a:name
- let home = exists('$XDG_DATA_HOME')
- \ ? $XDG_DATA_HOME
- \ : '~/.local/share'
- let dirs = exists('$XDG_DATA_DIRS')
- \ ? split($XDG_DATA_DIRS, ':')
- \ : ['/usr/local/share', '/usr/share']
+ let home = s:Get('XDG_DATA_HOME')
+ let dirs = split(s:Get('XDG_DATA_DIRS'), ':')
return map(
\ insert(dirs, home)
\,'join([v:val, name], "/")'