| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- local M = {}
- function M.sync_theme()
- -- Use vim.fn.system for more reliable command execution in Neovim
- local result = vim.fn.system("gsettings get org.gnome.desktop.interface color-scheme")
- -- Check for 'light' anywhere in the output
- if result:match("light") then
- vim.o.background = "light"
- require('onedark').setup {
- style = 'light',
- transparent = false,
- term_colors = true,
- code_style = { comments = 'italic' },
- }
- require('onedark').load()
- -- Override GitSigns for light mode
- vim.api.nvim_set_hl(0, 'GitSignsAdd', { fg = '#2c7a36', bg = '#d9f2da' })
- vim.api.nvim_set_hl(0, 'GitSignsChange', { fg = '#a68a0d', bg = '#fbf0c9' })
- vim.api.nvim_set_hl(0, 'GitSignsDelete', { fg = '#a62621', bg = '#f9dada' })
- else
- vim.o.background = "dark"
- require('onedark').setup {
- style = 'cool',
- transparent = false,
- term_colors = true,
- code_style = { comments = 'italic' },
- }
- require('onedark').load()
- -- Override GitSigns for dark mode
- vim.api.nvim_set_hl(0, 'GitSignsAdd', { fg = '#98c379', bg = '#2e3f34' })
- vim.api.nvim_set_hl(0, 'GitSignsChange', { fg = '#e5c07b', bg = '#3e3d32' })
- vim.api.nvim_set_hl(0, 'GitSignsDelete', { fg = '#e06c75', bg = '#3f2e2e' })
- end
- -- Force colors for diagnostics and spell check underlines
- vim.api.nvim_set_hl(0, 'DiagnosticUnderlineError', { undercurl = true, sp = '#ff0000' })
- vim.api.nvim_set_hl(0, 'DiagnosticUnderlineWarn', { undercurl = true, sp = '#ff8800' })
- vim.api.nvim_set_hl(0, 'SpellBad', { undercurl = true, sp = '#ffff00' })
- vim.api.nvim_set_hl(0, 'SpellCap', { undercurl = true, sp = '#ffff00' })
- vim.api.nvim_set_hl(0, 'SpellLocal', { undercurl = true, sp = '#ffff00' })
- vim.api.nvim_set_hl(0, 'SpellRare', { undercurl = true, sp = '#ffff00' })
- -- Force airline to refresh
- vim.g.airline_theme = 'onedark'
- if vim.fn.exists(':AirlineTheme') == 2 then
- vim.cmd('AirlineTheme onedark')
- end
- -- Force a full redraw to fix background issues in some terminals
- vim.cmd('redraw!')
- end
- -- Initial sync on load
- M.sync_theme()
- -- Set up signal handler for SIGUSR1 to trigger a theme sync
- local signal = vim.loop.new_signal()
- if signal then
- signal:start("sigusr1", function()
- vim.schedule(function()
- M.sync_theme()
- end)
- end)
- end
- return M
|