From 4004d9e361e8b919769118963ec15182ca02e130 Mon Sep 17 00:00:00 2001 From: Hektor Misplon Date: Tue, 25 Aug 2026 22:13:09 +0200 Subject: [PATCH] feat(nvim): nixify theming (and add 'vscode' theme) --- .../.config/nvim/after/plugin/vscode.nvim.lua | 14 ++ dots/.config/nvim/after/plugin/zenbones.lua | 1 - dots/.config/nvim/flake.nix | 147 +++++++++--------- dots/.config/nvim/init.lua | 3 +- dots/.config/nvim/lua/theme.lua | 8 + dots/.config/nvim/themes.nix | 4 + home/hosts/work/default.nix | 5 +- home/modules/nvim/default.nix | 34 +++- 8 files changed, 134 insertions(+), 82 deletions(-) create mode 100644 dots/.config/nvim/after/plugin/vscode.nvim.lua delete mode 100644 dots/.config/nvim/after/plugin/zenbones.lua create mode 100644 dots/.config/nvim/lua/theme.lua create mode 100644 dots/.config/nvim/themes.nix diff --git a/dots/.config/nvim/after/plugin/vscode.nvim.lua b/dots/.config/nvim/after/plugin/vscode.nvim.lua new file mode 100644 index 0000000..a7b4ebb --- /dev/null +++ b/dots/.config/nvim/after/plugin/vscode.nvim.lua @@ -0,0 +1,14 @@ +local function overrides() + local colors = require("vscode.colors").get_colors() + vim.api.nvim_set_hl(0, "NormalFloat", { bg = colors.vscLeftDark }) + vim.api.nvim_set_hl(0, "FloatBorder", { fg = colors.vscSplitDark, bg = colors.vscLeftDark }) +end + +vim.api.nvim_create_autocmd("ColorScheme", { + pattern = "vscode", + callback = overrides, +}) + +if vim.g.colors_name == "vscode" then + overrides() +end diff --git a/dots/.config/nvim/after/plugin/zenbones.lua b/dots/.config/nvim/after/plugin/zenbones.lua deleted file mode 100644 index 353cc87..0000000 --- a/dots/.config/nvim/after/plugin/zenbones.lua +++ /dev/null @@ -1 +0,0 @@ -vim.cmd("colorscheme zenwritten") diff --git a/dots/.config/nvim/flake.nix b/dots/.config/nvim/flake.nix index 7c8fbc1..11c4286 100644 --- a/dots/.config/nvim/flake.nix +++ b/dots/.config/nvim/flake.nix @@ -71,8 +71,12 @@ categoryDefinitions = { pkgs, + categories, ... }: + let + themes = import ./themes.nix pkgs; + in { lspsAndRuntimeDeps = with pkgs; { general = [ @@ -113,76 +117,78 @@ }; startupPlugins = { - general = with pkgs.vimPlugins; [ - ## plug - vim-plug - vim-sandwich - context_filetype-vim - editorconfig-vim - vim-snippets - unicode-vim - vim-css-color - quarto-nvim - vimtex - wiki-vim - vim-pandoc - vim-pandoc-syntax - # TODO: ferrine/md-img-paste.vim - # TODO: supercollider/scvim - # TODO: tidalcycles/vim-tidal - vim-glsl - # TODO: timtro/glslView-nvim - # TODO: sirtaj/vim-openscad - jupytext-nvim - vim-openscad - ## paq - eyeliner-nvim - fzf-lua - ltex_extra-nvim - nvim-lspconfig - lsp_lines-nvim - lsp-progress-nvim - neodev-nvim - SchemaStore-nvim - nvim-lint - conform-nvim - luasnip - cmp_luasnip - nvim-cmp - cmp-nvim-lsp - cmp-buffer - cmp-path - plenary-nvim - nui-nvim - trouble-nvim - pkgs.neovimPlugins.shipwright-nvim - lush-nvim - zenbones-nvim - nvim-treesitter.withAllGrammars - nvim-treesitter-textobjects - # nvim-treesitter-context - nvim-ts-context-commentstring - # theHamsta/crazy-node-movement - treesj - sniprun - gitsigns-nvim - nvim-highlight-colors - pkgs.neovimPlugins.tailwind-fold-nvim - auto-session - nvim-dbee - image-nvim - pkgs.neovimPlugins.beancount-nvim - pkgs.neovimPlugins.nvimkit-nvim - codecompanion-nvim - copilot-lua - copilot-cmp - helm-ls-nvim - kitty-scrollback-nvim - fidget-nvim - rustaceanvim - # pkgs.neovimPlugins.m-taskwarrior-d-nvim - claude-code-nvim - ]; + general = + with pkgs.vimPlugins; + [ + ## plug + vim-plug + vim-sandwich + context_filetype-vim + editorconfig-vim + vim-snippets + unicode-vim + vim-css-color + quarto-nvim + vimtex + wiki-vim + vim-pandoc + vim-pandoc-syntax + # TODO: ferrine/md-img-paste.vim + # TODO: supercollider/scvim + # TODO: tidalcycles/vim-tidal + vim-glsl + # TODO: timtro/glslView-nvim + # TODO: sirtaj/vim-openscad + jupytext-nvim + vim-openscad + ## paq + eyeliner-nvim + fzf-lua + ltex_extra-nvim + nvim-lspconfig + lsp_lines-nvim + lsp-progress-nvim + neodev-nvim + SchemaStore-nvim + nvim-lint + conform-nvim + luasnip + cmp_luasnip + nvim-cmp + cmp-nvim-lsp + cmp-buffer + cmp-path + plenary-nvim + nui-nvim + trouble-nvim + lush-nvim + pkgs.neovimPlugins.shipwright-nvim + nvim-treesitter.withAllGrammars + nvim-treesitter-textobjects + # nvim-treesitter-context + nvim-ts-context-commentstring + # theHamsta/crazy-node-movement + treesj + sniprun + gitsigns-nvim + nvim-highlight-colors + pkgs.neovimPlugins.tailwind-fold-nvim + auto-session + nvim-dbee + image-nvim + pkgs.neovimPlugins.beancount-nvim + pkgs.neovimPlugins.nvimkit-nvim + codecompanion-nvim + copilot-lua + copilot-cmp + helm-ls-nvim + kitty-scrollback-nvim + fidget-nvim + rustaceanvim + # pkgs.neovimPlugins.m-taskwarrior-d-nvim + claude-code-nvim + ] + ++ themes.${categories.colorscheme or "zenwritten"}; }; optionalPlugins = { @@ -207,6 +213,7 @@ }; categories = { general = true; + colorscheme = "zenwritten"; }; }; }; diff --git a/dots/.config/nvim/init.lua b/dots/.config/nvim/init.lua index 434df4d..8cba815 100644 --- a/dots/.config/nvim/init.lua +++ b/dots/.config/nvim/init.lua @@ -16,5 +16,4 @@ require("diagnostic") require("utils") require("zk") require("reload") - -vim.opt.background = "dark" +require("theme") diff --git a/dots/.config/nvim/lua/theme.lua b/dots/.config/nvim/lua/theme.lua new file mode 100644 index 0000000..7393f2a --- /dev/null +++ b/dots/.config/nvim/lua/theme.lua @@ -0,0 +1,8 @@ +vim.opt.background = "dark" + +if vim.g.vscode then + return +end + +vim.g.zenwritten_compat = 1 +vim.cmd.colorscheme(require("nixCatsUtils").getCatOrDefault("colorscheme", "zenwritten")) diff --git a/dots/.config/nvim/themes.nix b/dots/.config/nvim/themes.nix new file mode 100644 index 0000000..73f489a --- /dev/null +++ b/dots/.config/nvim/themes.nix @@ -0,0 +1,4 @@ +pkgs: { + vscode = [ pkgs.vimPlugins.vscode-nvim ]; + zenwritten = [ pkgs.vimPlugins.zenbones-nvim ]; +} diff --git a/home/hosts/work/default.nix b/home/hosts/work/default.nix index d393740..e6dd6a1 100644 --- a/home/hosts/work/default.nix +++ b/home/hosts/work/default.nix @@ -70,7 +70,10 @@ music.enable = true; my.dconf.enable = true; my.stylix.enable = true; - nvim.enable = true; + nvim = { + enable = true; + colorscheme = "vscode"; + }; pandoc.enable = true; shell.enable = true; taskwarrior.enable = true; diff --git a/home/modules/nvim/default.nix b/home/modules/nvim/default.nix index ce4c4c5..cdef6c6 100644 --- a/home/modules/nvim/default.nix +++ b/home/modules/nvim/default.nix @@ -1,15 +1,28 @@ { - config, - lib, - pkgs, inputs, + pkgs, + lib, + config, ... }: +let + themes = import "${inputs.nvim}/themes.nix" pkgs; + plugins = themes.${config.nvim.colorscheme}; +in { - options.nvim.enable = lib.mkEnableOption "nvim"; + imports = [ inputs.nvim.homeModules.default ]; + + options.nvim.colorscheme = lib.mkOption { + type = lib.types.enum (lib.attrNames themes); + default = "zenwritten"; + }; config = lib.mkIf config.nvim.enable { + nvim.packageDefinitions.merge.nvim = _: { + categories.colorscheme = config.nvim.colorscheme; + }; + home = { sessionVariables = { EDITOR = "nvim"; @@ -19,10 +32,15 @@ PAGER = "nvimpager"; MANWIDTH = "80"; }; - packages = with pkgs; [ - inputs.nvim.packages.${pkgs.stdenv.hostPlatform.system}.nvim - nvimpager - ]; + packages = with pkgs; [ nvimpager ]; }; + + xdg.configFile."nvimpager/init.lua".text = '' + vim.opt.clipboard = "unnamedplus" + vim.opt.background = "dark" + vim.g.zenwritten_compat = 1 + ${lib.concatMapStringsSep "\n" (plugin: ''vim.opt.runtimepath:append("${plugin}")'') plugins} + vim.cmd.colorscheme("${config.nvim.colorscheme}") + ''; }; }