summaryrefslogtreecommitdiff
path: root/nvim/lua/lualine/themes/base16.lua
blob: 03f4f35519a79096a4dfd89dba9446ceac12999a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128

local modules = require('lualine_require').lazy_require { notices = 'lualine.utils.notices' }

local function add_notice(notice)
  modules.notices.add_notice('theme(base16): ' .. notice)
end

local function setup(colors)
  local theme = {
    normal = {
      a = { fg = colors.bg, bg = colors.normal },
      b = { fg = colors.light_fg, bg = colors.alt_bg },
      c = { fg = colors.fg, bg = colors.bg },
    },
    replace = {
      a = { fg = colors.bg, bg = colors.replace },
      b = { fg = colors.light_fg, bg = colors.alt_bg },
    },
    insert = {
      a = { fg = colors.bg, bg = colors.insert },
      b = { fg = colors.light_fg, bg = colors.alt_bg },
    },
    visual = {
      a = { fg = colors.bg, bg = colors.visual },
      b = { fg = colors.light_fg, bg = colors.alt_bg },
    },
    inactive = {
      a = { fg = colors.dark_fg, bg = colors.bg },
      b = { fg = colors.dark_fg, bg = colors.bg },
      c = { fg = colors.dark_fg, bg = colors.bg },
    },
  }

  theme.command = theme.normal
  theme.terminal = theme.insert

  return theme
end

local function setup_default()
  return setup {
    bg = '#282a2e',
    alt_bg = '#373b41',
    dark_fg = '#969896',
    fg = '#b4b7b4',
    light_fg = '#c5c8c6',
    normal = '#81a2be',
    insert = '#b5bd68',
    visual = '#b294bb',
    replace = '#de935f',
  }
end

local function setup_base16_nvim()
  -- Continue to load nvim-base16
  local loaded, base16 = pcall(require, 'base16-colorscheme')

  if not loaded then
    add_notice(
      'nvim-base16 is not currently present in your runtimepath, make sure it is properly installed,'
        .. ' fallback to default colors.'
    )

    return nil
  end

  if not base16.colors and not vim.env.BASE16_THEME then
    add_notice(
      'nvim-base16 is not loaded yet, you should update your configuration to load it before lualine'
        .. ' so that the colors from your colorscheme can be used, fallback to "tomorrow-night" theme.'
    )
  elseif not base16.colors and not base16.colorschemes[vim.env.BASE16_THEME] then
    add_notice(
      'The colorscheme "%s" defined by the environment variable "BASE16_THEME" is not handled by'
        .. ' nvim-base16, fallback to "tomorrow-night" theme.'
    )
  end

  local colors = base16.colors or base16.colorschemes[vim.env.BASE16_THEME or 'tomorrow-night']

  return setup {
    bg = colors.base01,
    alt_bg = colors.base02,
    dark_fg = colors.base03,
    fg = colors.base04,
    light_fg = colors.base05,
    normal = colors.base0D,
    insert = colors.base0B,
    visual = colors.base0E,
    replace = colors.base09,
  }
end

local function setup_base16_vim()
  -- Check if tinted-theming/base16-vim is already loaded
  if vim.g.base16_gui00 and vim.g.base16_gui0F then
    return setup {
      bg = vim.g.base16_gui01,
      alt_bg = vim.g.base16_gui02,
      dark_fg = vim.g.base16_gui03,
      fg = vim.g.base16_gui04,
      light_fg = vim.g.base16_gui05,
      normal = vim.g.base16_gui0D,
      insert = vim.g.base16_gui0B,
      visual = vim.g.base16_gui0E,
      replace = vim.g.base16_gui09,
    }
  end

  -- base16-vim has been renamed to tinted-vim along with colors
  -- context: https://github.com/nvim-lualine/lualine.nvim/pull/1352
  if vim.g.tinted_gui00 and vim.g.tinted_gui0F then
    return setup {
      bg = vim.g.tinted_gui01,
      alt_bg = vim.g.tinted_gui02,
      dark_fg = vim.g.tinted_gui03,
      fg = vim.g.tinted_gui04,
      light_fg = vim.g.tinted_gui05,
      normal = vim.g.tinted_gui0D,
      insert = vim.g.tinted_gui0B,
      visual = vim.g.tinted_gui0E,
      replace = vim.g.tinted_gui09,
    }
  end
  return nil
end

return setup_base16_vim() or setup_base16_nvim() or setup_default()