scriptencoding utf-8
if exists('g:loaded_defx_icons')
  finish
endif
let g:loaded_defx_icons = 1

let s:enable_syntax_highlight = get(g:, 'defx_icons_enable_syntax_highlight', 1)
let s:column_length = get(g:, 'defx_icons_column_length', 1)
let s:parent_icon = get(g:, 'defx_icons_parent_icon', '')
let s:directory_icon = get(g:, 'defx_icons_directory_icon', '')
let s:mark_icon = get(g: , 'defx_icons_mark_icon', '*')
let s:default_icon = get(g:, 'defx_icons_default_icon', '')
let s:directory_symlink_icon = get(g:, 'defx_icons_directory_symlink_icon', '')
let s:root_opened_tree_icon = get(g:, 'defx_icons_root_opened_tree_icon', '')
let s:nested_closed_tree_icon = get(g: ,'defx_icons_nested_closed_tree_icon', '')
let s:nested_opened_tree_icon = get(g: ,'defx_icons_nested_opened_tree_icon', '')
let s:copy_icon = get(g:, 'defx_icons_copy_icon', '')
let s:link_icon = get(g:, 'defx_icons_link_icon', '')
let s:move_icon = get(g:, 'defx_icons_move_icon', '')
let s:default_color = synIDattr(hlID('Normal'), 'fg')

let s:gui_colors = extend({
      \ 'brown': '905532',
      \ 'aqua': '3AFFDB',
      \ 'blue': '689FB6',
      \ 'darkBlue': '44788E',
      \ 'purple': '834F79',
      \ 'lightPurple': '834F79',
      \ 'red': 'AE403F',
      \ 'beige': 'F5C06F',
      \ 'yellow': 'F09F17',
      \ 'orange': 'D4843E',
      \ 'darkOrange': 'F16529',
      \ 'pink': 'CB6F6F',
      \ 'salmon': 'EE6E73',
      \ 'green': '8FAA54',
      \ 'lightGreen': '31B53E',
      \ 'default': s:default_color,
      \ }, get(g:, 'defx_icons_gui_colors', {}))

let s:term_colors = extend({
      \ 'brown'       : 130,
      \ 'aqua'        : 66,
      \ 'blue'        : 67,
      \ 'darkBlue'    : 57,
      \ 'purple'      : 60,
      \ 'lightPurple' : 103,
      \ 'red'         : 131,
      \ 'beige'       : 137,
      \ 'yellow'      : 229,
      \ 'orange'      : 208,
      \ 'darkOrange'  : 166,
      \ 'pink'        : 205,
      \ 'salmon'      : 209,
      \ 'green'       : 65,
      \ 'lightGreen'  : 108,
      \ 'default'       : 231,
      \ }, get(g: ,'defx_icons_term_colors', {}))

let s:extensions = extend({
      \ 'styl': {'icon': '', 'color': s:gui_colors.green, 'term_color': s:term_colors.green},
      \ 'sass': {'icon': '', 'color': s:gui_colors.default, 'term_color': s:term_colors.default},
      \ 'scss': {'icon': '', 'color': s:gui_colors.pink, 'term_color': s:term_colors.pink},
      \ 'htm': {'icon': '', 'color': s:gui_colors.darkOrange, 'term_color': s:term_colors.darkOrange},
      \ 'html': {'icon': '', 'color': s:gui_colors.darkOrange, 'term_color': s:term_colors.darkOrange},
      \ 'slim': {'icon': '', 'color': s:gui_colors.orange, 'term_color': s:term_colors.orange},
      \ 'ejs': {'icon': '', 'color': s:gui_colors.yellow, 'term_color': s:term_colors.yellow},
      \ 'css': {'icon': '', 'color': s:gui_colors.blue, 'term_color': s:term_colors.blue},
      \ 'less': {'icon': '', 'color': s:gui_colors.darkBlue, 'term_color': s:term_colors.darkBlue},
      \ 'md': {'icon': '', 'color': s:gui_colors.yellow, 'term_color': s:term_colors.yellow},
      \ 'markdown': {'icon': '', 'color': s:gui_colors.yellow, 'term_color': s:term_colors.yellow},
      \ 'rmd': {'icon': '', 'color': s:gui_colors.default, 'term_color': s:term_colors.default},
      \ 'json': {'icon': '', 'color': s:gui_colors.beige, 'term_color': s:term_colors.beige},
      \ 'js': {'icon': '', 'color': s:gui_colors.beige, 'term_color': s:term_colors.beige},
      \ 'mjs': {'icon': '', 'color': s:gui_colors.beige, 'term_color': s:term_colors.beige},
      \ 'jsx': {'icon': '', 'color': s:gui_colors.blue, 'term_color': s:term_colors.blue},
      \ 'rb': {'icon': '', 'color': s:gui_colors.red, 'term_color': s:term_colors.red},
      \ 'php': {'icon': '', 'color': s:gui_colors.purple, 'term_color': s:term_colors.purple},
      \ 'py': {'icon': '', 'color': s:gui_colors.yellow, 'term_color': s:term_colors.yellow},
      \ 'pyc': {'icon': '', 'color': s:gui_colors.yellow, 'term_color': s:term_colors.yellow},
      \ 'pyo': {'icon': '', 'color': s:gui_colors.yellow, 'term_color': s:term_colors.yellow},
      \ 'pyd': {'icon': '', 'color': s:gui_colors.yellow, 'term_color': s:term_colors.yellow},
      \ 'coffee': {'icon': '', 'color': s:gui_colors.brown, 'term_color': s:term_colors.brown},
      \ 'mustache': {'icon': '', 'color': s:gui_colors.orange, 'term_color': s:term_colors.orange},
      \ 'hbs': {'icon': '', 'color': s:gui_colors.orange, 'term_color': s:term_colors.orange},
      \ 'conf': {'icon': '', 'color': s:gui_colors.default, 'term_color': s:term_colors.default},
      \ 'ini': {'icon': '', 'color': s:gui_colors.default, 'term_color': s:term_colors.default},
      \ 'yml': {'icon': '', 'color': s:gui_colors.default, 'term_color': s:term_colors.default},
      \ 'yaml': {'icon': '', 'color': s:gui_colors.default, 'term_color': s:term_colors.default},
      \ 'bat': {'icon': '', 'color': s:gui_colors.default, 'term_color': s:term_colors.default},
      \ 'toml': {'icon': '', 'color': s:gui_colors.default, 'term_color': s:term_colors.default},
      \ 'jpg': {'icon': '', 'color': s:gui_colors.aqua, 'term_color': s:term_colors.aqua},
      \ 'jpeg': {'icon': '', 'color': s:gui_colors.aqua, 'term_color': s:term_colors.aqua},
      \ 'bmp': {'icon': '', 'color': s:gui_colors.aqua, 'term_color': s:term_colors.aqua},
      \ 'png': {'icon': '', 'color': s:gui_colors.aqua, 'term_color': s:term_colors.aqua},
      \ 'gif': {'icon': '', 'color': s:gui_colors.aqua, 'term_color': s:term_colors.aqua},
      \ 'ico': {'icon': '', 'color': s:gui_colors.aqua, 'term_color': s:term_colors.aqua},
      \ 'twig': {'icon': '', 'color': s:gui_colors.green, 'term_color': s:term_colors.green},
      \ 'cpp': {'icon': '', 'color': s:gui_colors.blue, 'term_color': s:term_colors.blue},
      \ 'cxx': {'icon': '', 'color': s:gui_colors.blue, 'term_color': s:term_colors.blue},
      \ 'cc': {'icon': '', 'color': s:gui_colors.blue, 'term_color': s:term_colors.blue},
      \ 'cp': {'icon': '', 'color': s:gui_colors.blue, 'term_color': s:term_colors.blue},
      \ 'c': {'icon': '', 'color': s:gui_colors.blue, 'term_color': s:term_colors.blue},
      \ 'h': {'icon': '', 'color': s:gui_colors.default, 'term_color': s:term_colors.default},
      \ 'hpp': {'icon': '', 'color': s:gui_colors.default, 'term_color': s:term_colors.default},
      \ 'hxx': {'icon': '', 'color': s:gui_colors.default, 'term_color': s:term_colors.default},
      \ 'hs': {'icon': '', 'color': s:gui_colors.beige, 'term_color': s:term_colors.beige},
      \ 'lhs': {'icon': '', 'color': s:gui_colors.beige, 'term_color': s:term_colors.beige},
      \ 'lua': {'icon': '', 'color': s:gui_colors.purple, 'term_color': s:term_colors.purple},
      \ 'java': {'icon': '', 'color': s:gui_colors.purple, 'term_color': s:term_colors.purple},
      \ 'sh': {'icon': '', 'color': s:gui_colors.lightPurple, 'term_color': s:term_colors.lightPurple},
      \ 'fish': {'icon': '', 'color': s:gui_colors.green, 'term_color': s:term_colors.green},
      \ 'bash': {'icon': '', 'color': s:gui_colors.default, 'term_color': s:term_colors.default},
      \ 'zsh': {'icon': '', 'color': s:gui_colors.default, 'term_color': s:term_colors.default},
      \ 'ksh': {'icon': '', 'color': s:gui_colors.default, 'term_color': s:term_colors.default},
      \ 'csh': {'icon': '', 'color': s:gui_colors.default, 'term_color': s:term_colors.default},
      \ 'awk': {'icon': '', 'color': s:gui_colors.default, 'term_color': s:term_colors.default},
      \ 'ps1': {'icon': '', 'color': s:gui_colors.default, 'term_color': s:term_colors.default},
      \ 'ml': {'icon': 'λ', 'color': s:gui_colors.yellow, 'term_color': s:term_colors.yellow},
      \ 'mli': {'icon': 'λ', 'color': s:gui_colors.yellow, 'term_color': s:term_colors.yellow},
      \ 'diff': {'icon': '', 'color': s:gui_colors.default, 'term_color': s:term_colors.default},
      \ 'db': {'icon': '', 'color': s:gui_colors.blue, 'term_color': s:term_colors.blue},
      \ 'sql': {'icon': '', 'color': s:gui_colors.darkBlue, 'term_color': s:term_colors.darkBlue},
      \ 'dump': {'icon': '', 'color': s:gui_colors.blue, 'term_color': s:term_colors.blue},
      \ 'clj': {'icon': '', 'color': s:gui_colors.green, 'term_color': s:term_colors.green},
      \ 'cljc': {'icon': '', 'color': s:gui_colors.green, 'term_color': s:term_colors.green},
      \ 'cljs': {'icon': '', 'color': s:gui_colors.green, 'term_color': s:term_colors.green},
      \ 'edn': {'icon': '', 'color': s:gui_colors.green, 'term_color': s:term_colors.green},
      \ 'scala': {'icon': '', 'color': s:gui_colors.red, 'term_color': s:term_colors.red},
      \ 'go': {'icon': '', 'color': s:gui_colors.beige, 'term_color': s:term_colors.beige},
      \ 'dart': {'icon': '', 'color': s:gui_colors.default, 'term_color': s:term_colors.default},
      \ 'xul': {'icon': '', 'color': s:gui_colors.darkOrange, 'term_color': s:term_colors.darkOrange},
      \ 'sln': {'icon': '', 'color': s:gui_colors.purple, 'term_color': s:term_colors.purple},
      \ 'suo': {'icon': '', 'color': s:gui_colors.purple, 'term_color': s:term_colors.purple},
      \ 'pl': {'icon': '', 'color': s:gui_colors.blue, 'term_color': s:term_colors.blue},
      \ 'pm': {'icon': '', 'color': s:gui_colors.blue, 'term_color': s:term_colors.blue},
      \ 't': {'icon': '', 'color': s:gui_colors.blue, 'term_color': s:term_colors.blue},
      \ 'rss': {'icon': '', 'color': s:gui_colors.darkOrange, 'term_color': s:term_colors.darkOrange},
      \ 'fsscript': {'icon': '', 'color': s:gui_colors.blue, 'term_color': s:term_colors.blue},
      \ 'fsx': {'icon': '', 'color': s:gui_colors.blue, 'term_color': s:term_colors.blue},
      \ 'fs': {'icon': '', 'color': s:gui_colors.blue, 'term_color': s:term_colors.blue},
      \ 'fsi': {'icon': '', 'color': s:gui_colors.blue, 'term_color': s:term_colors.blue},
      \ 'rs': {'icon': '', 'color': s:gui_colors.darkOrange, 'term_color': s:term_colors.darkOrange},
      \ 'rlib': {'icon': '', 'color': s:gui_colors.darkOrange, 'term_color': s:term_colors.darkOrange},
      \ 'd': {'icon': '', 'color': s:gui_colors.red, 'term_color': s:term_colors.red},
      \ 'erl': {'icon': '', 'color': s:gui_colors.lightPurple, 'term_color': s:term_colors.lightPurple},
      \ 'ex': {'icon': '', 'color': s:gui_colors.lightPurple, 'term_color': s:term_colors.lightPurple},
      \ 'exs': {'icon': '', 'color': s:gui_colors.lightPurple, 'term_color': s:term_colors.lightPurple},
      \ 'eex': {'icon': '', 'color': s:gui_colors.lightPurple, 'term_color': s:term_colors.lightPurple},
      \ 'hrl': {'icon': '', 'color': s:gui_colors.pink, 'term_color': s:term_colors.pink},
      \ 'vim': {'icon': '', 'color': s:gui_colors.green, 'term_color': s:term_colors.green},
      \ 'ai': {'icon': '', 'color': s:gui_colors.darkOrange, 'term_color': s:term_colors.darkOrange},
      \ 'psd': {'icon': '', 'color': s:gui_colors.darkBlue, 'term_color': s:term_colors.darkBlue},
      \ 'psb': {'icon': '', 'color': s:gui_colors.darkBlue, 'term_color': s:term_colors.darkBlue},
      \ 'ts': {'icon': '', 'color': s:gui_colors.blue, 'term_color': s:term_colors.blue},
      \ 'tsx': {'icon': '', 'color': s:gui_colors.blue, 'term_color': s:term_colors.blue},
      \ 'jl': {'icon': '', 'color': s:gui_colors.purple, 'term_color': s:term_colors.purple},
      \ 'pp': {'icon': '', 'color': s:gui_colors.default, 'term_color': s:term_colors.default},
      \ 'vue': {'icon': '﵂', 'color': s:gui_colors.green, 'term_color': s:term_colors.green},
      \ 'key': {'icon': '', 'color': s:gui_colors.default, 'term_color': s:term_colors.default},
      \ 'cs': {'icon': '', 'color': s:gui_colors.blue, 'term_color': s:term_colors.blue},
      \ 'elm': {'icon': '', 'color': s:gui_colors.default, 'term_color': s:term_colors.default},
      \ 'f#': {'icon': '', 'color': s:gui_colors.darkBlue, 'term_color': s:term_colors.darkBlue},
      \ 'gemspec': {'icon': '', 'color': s:gui_colors.default, 'term_color': s:term_colors.default},
      \ 'haml': {'icon': '', 'color': s:gui_colors.default, 'term_color': s:term_colors.default},
      \ 'hh': {'icon': '', 'color': s:gui_colors.blue, 'term_color': s:term_colors.blue},
      \ 'leex': {'icon': '', 'color': s:gui_colors.default, 'term_color': s:term_colors.default},
      \ 'mdx': {'icon': '', 'color': s:gui_colors.yellow, 'term_color': s:term_colors.yellow},
      \ 'r': {'icon': 'ﳒ', 'color': s:gui_colors.default, 'term_color': s:term_colors.default},
      \ 'rake': {'icon': '', 'color': s:gui_colors.default, 'term_color': s:term_colors.default},
      \ 'rproj': {'icon': '鉶', 'color': s:gui_colors.default, 'term_color': s:term_colors.default},
      \ 'swift': {'icon': '', 'color': s:gui_colors.orange, 'term_color': s:term_colors.orange},
      \ 'tex': {'icon': 'ﭨ', 'color': s:gui_colors.default, 'term_color': s:term_colors.default},
      \ 'webmanifest': {'icon': '', 'color': s:gui_colors.default, 'term_color': s:term_colors.default},
      \ 'webp': {'icon': '', 'color': s:gui_colors.aqua, 'term_color': s:term_colors.aqua},
      \ 'xcplayground': {'icon': '', 'color': s:gui_colors.orange, 'term_color': s:term_colors.orange},
      \ 'svelte': {'icon': '', 'color': s:gui_colors.darkOrange, 'term_color': s:term_colors.darkOrange},
      \ }, get(g:, 'defx_icons_extensions', {}))

let s:exact_matches = extend({
      \ 'gruntfile.coffee': {'icon': '', 'color': s:gui_colors.yellow, 'term_color': s:term_colors.yellow},
      \ 'gruntfile.js': {'icon': '', 'color': s:gui_colors.yellow, 'term_color': s:term_colors.yellow},
      \ 'gruntfile.ls': {'icon': '', 'color': s:gui_colors.yellow, 'term_color': s:term_colors.yellow},
      \ 'gulpfile.coffee': {'icon': '', 'color': s:gui_colors.pink, 'term_color': s:term_colors.pink},
      \ 'gulpfile.js': {'icon': '', 'color': s:gui_colors.pink, 'term_color': s:term_colors.pink},
      \ 'gulpfile.ls': {'icon': '', 'color': s:gui_colors.pink, 'term_color': s:term_colors.pink},
      \ 'dropbox': {'icon': '', 'color': s:gui_colors.default, 'term_color': s:term_colors.default},
      \ '.ds_store': {'icon': '', 'color': s:gui_colors.default, 'term_color': s:term_colors.default},
      \ '.gitconfig': {'icon': '', 'color': s:gui_colors.default, 'term_color': s:term_colors.default},
      \ '.gitignore': {'icon': '', 'color': s:gui_colors.default, 'term_color': s:term_colors.default},
      \ '.bashrc': {'icon': '', 'color': s:gui_colors.default, 'term_color': s:term_colors.default},
      \ '.zshrc': {'icon': '', 'color': s:gui_colors.default, 'term_color': s:term_colors.default},
      \ '.vimrc': {'icon': '', 'color': s:gui_colors.default, 'term_color': s:term_colors.default},
      \ '.gvimrc': {'icon': '', 'color': s:gui_colors.default, 'term_color': s:term_colors.default},
      \ '_vimrc': {'icon': '', 'color': s:gui_colors.default, 'term_color': s:term_colors.default},
      \ '_gvimrc': {'icon': '', 'color': s:gui_colors.default, 'term_color': s:term_colors.default},
      \ '.bashprofile': {'icon': '', 'color': s:gui_colors.default, 'term_color': s:term_colors.default},
      \ 'favicon.ico': {'icon': '', 'color': s:gui_colors.yellow, 'term_color': s:term_colors.yellow},
      \ 'license': {'icon': '', 'color': s:gui_colors.default, 'term_color': s:term_colors.default},
      \ 'node_modules': {'icon': '', 'color': s:gui_colors.green, 'term_color': s:term_colors.green},
      \ 'react.jsx': {'icon': '', 'color': s:gui_colors.blue, 'term_color': s:term_colors.blue},
      \ 'procfile': {'icon': '', 'color': s:gui_colors.purple, 'term_color': s:term_colors.purple},
      \ 'dockerfile': {'icon': '', 'color': s:gui_colors.blue, 'term_color': s:term_colors.blue},
      \ 'docker-compose.yml': {'icon': '', 'color': s:gui_colors.yellow, 'term_color': s:term_colors.yellow},
      \ 'makefile': {'icon': '', 'color': s:gui_colors.default, 'term_color': s:term_colors.default},
      \ 'gemfile': {'icon': '', 'color': s:gui_colors.default, 'term_color': s:term_colors.default},
      \ '.gitlab-ci.yml': {'icon': '', 'color': s:gui_colors.orange, 'term_color': s:term_colors.orange},
      \ 'cmakelists.txt': {'icon': '', 'color': s:gui_colors.default, 'term_color': s:term_colors.default},
      \ 'config.ru': {'icon': '', 'color': s:gui_colors.default, 'term_color': s:term_colors.default},
      \ 'mix.lock': {'icon': '', 'color': s:gui_colors.default, 'term_color': s:term_colors.default},
      \ 'rakefile': {'icon': '', 'color': s:gui_colors.default, 'term_color': s:term_colors.default},
      \ }, get(g:, 'defx_icons_exact_matches', {}))

let s:pattern_matches = extend({
      \ '.*jquery.*\.js$': {'icon': '', 'color': s:gui_colors.blue, 'term_color': s:term_colors.blue},
      \ '.*angular.*\.js$': {'icon': '', 'color': s:gui_colors.red, 'term_color': s:term_colors.red},
      \ '.*backbone.*\.js$': {'icon': '', 'color': s:gui_colors.darkBlue, 'term_color': s:term_colors.darkBlue},
      \ '.*require.*\.js$': {'icon': '', 'color': s:gui_colors.blue, 'term_color': s:term_colors.blue},
      \ '.*materialize.*\.js$': {'icon': '', 'color': s:gui_colors.salmon, 'term_color': s:term_colors.salmon},
      \ '.*materialize.*\.css$': {'icon': '', 'color': s:gui_colors.salmon, 'term_color': s:term_colors.salmon},
      \ '.*mootools.*\.js$': {'icon': '', 'color': s:gui_colors.default, 'term_color': s:term_colors.default},
      \ '.*vimrc.*': {'icon': '', 'color': s:gui_colors.default, 'term_color': s:term_colors.default},
      \ 'Vagrantfile$': {'icon': '', 'color': s:gui_colors.default, 'term_color': s:term_colors.default},
      \ }, get(g:, 'defx_icon_pattern_matches', {}))

hi default link DefxIconsMarkIcon Statement
hi default link DefxIconsCopyIcon WarningMsg
hi default link DefxIconsLinkIcon WarningMsg
hi default link DefxIconsMoveIcon ErrorMsg
hi default link DefxIconsDirectory Directory
hi default link DefxIconsParentDirectory Directory
hi default link DefxIconsSymlinkDirectory Directory
hi default link DefxIconsOpenedTreeIcon Directory
hi default link DefxIconsNestedTreeIcon Directory
hi default link DefxIconsClosedTreeIcon Directory

function! defx_icons#get() abort
  return {
        \ 'icons': {
        \   'extensions': s:extensions,
        \   'exact_matches': s:exact_matches,
        \   'pattern_matches': s:pattern_matches,
        \   'exact_dir_matches': get(g:, 'defx_icon_exact_dir_matches', {}),
        \   'parent_icon': s:parent_icon,
        \   'directory_icon': s:directory_icon,
        \   'directory_symlink_icon': s:directory_symlink_icon,
        \   'mark_icon': s:mark_icon,
        \   'default_icon': s:default_icon,
        \   'root_opened_tree_icon': s:root_opened_tree_icon,
        \   'nested_closed_tree_icon': s:nested_closed_tree_icon,
        \   'nested_opened_tree_icon': s:nested_opened_tree_icon,
        \   'copy_icon': s:copy_icon,
        \   'link_icon': s:link_icon,
        \   'move_icon': s:move_icon,
        \ },
        \ 'settings': {
        \   'enable_syntax_highlight': s:enable_syntax_highlight,
        \   'column_length': s:column_length,
        \ }
        \ }
endfunction
