From 0650aa31acfd0a6903522494d4d66c91c05af9c4 Mon Sep 17 00:00:00 2001 From: NotAShelf Date: Tue, 3 Dec 2024 00:40:28 +0300 Subject: [PATCH 01/19] modules/neovim: deprecate `vim.enableEditorconfig` option Deprecate shorthand EditorConfig toggle, and encourage the more powerful `vim.globals` option. --- docs/release-notes/rl-0.7.md | 13 ++++++++----- modules/extra/deprecations.nix | 5 ++++- modules/neovim/init/basic.nix | 10 ---------- modules/wrapper/rc/options.nix | 15 +++++++++++++++ 4 files changed, 27 insertions(+), 16 deletions(-) diff --git a/docs/release-notes/rl-0.7.md b/docs/release-notes/rl-0.7.md index 59267ddf..fd3764ac 100644 --- a/docs/release-notes/rl-0.7.md +++ b/docs/release-notes/rl-0.7.md @@ -28,11 +28,11 @@ configuration formats. ### `vim.maps` rewrite {#sec-vim-maps-rewrite} -Instead of specifying map modes using submodules (eg.: `vim.maps.normal`), a new -`vim.keymaps` submodule with support for a `mode` option has been introduced. It -can be either a string, or a list of strings, where a string represents the -short-name of the map mode(s), that the mapping should be set for. See -`:help map-modes` for more information. +Instead of specifying map modes using submodules (e.g.: `vim.maps.normal`), a +new `vim.keymaps` submodule with support for a `mode` option has been +introduced. It can be either a string, or a list of strings, where a string +represents the short-name of the map mode(s), that the mapping should be set +for. See `:help map-modes` for more information. For example: @@ -334,6 +334,9 @@ The changes are, in no particular order: `vim.options` as default values. Some are left as they don't have a direct equivalent, but expect a switch eventually. +- Deprecated `vim.enableEditorconfig` in favor of + [](#opt-vim.globals.editorconfig). + [ppenguin](https://github.com/ppenguin): - Telescope: diff --git a/modules/extra/deprecations.nix b/modules/extra/deprecations.nix index e4cb193f..9fd52938 100644 --- a/modules/extra/deprecations.nix +++ b/modules/extra/deprecations.nix @@ -84,9 +84,12 @@ in { `tabstop` and `shiftwidth` manually in `vim.options` or per-filetype in a `ftplugin` directory added to your runtime path. '') + + # 2024-12-02 + (mkRenamedOptionModule ["vim" "enableEditorconfig"] ["vim" "globals" "editorconfig"]) ] - # 2024-12-1 + # 2024-12-01 # Migrated via batchRenameOptions. Further batch renames must be below this line. renamedVimOpts ]; diff --git a/modules/neovim/init/basic.nix b/modules/neovim/init/basic.nix index 9370fa8f..1b45feaa 100644 --- a/modules/neovim/init/basic.nix +++ b/modules/neovim/init/basic.nix @@ -70,12 +70,6 @@ in { description = "Set how bells are handled. Options: on, visual or none"; }; - enableEditorconfig = mkOption { - type = bool; - default = true; - description = "Follow editorconfig rules in current directory"; - }; - searchCase = mkOption { type = enum ["ignore" "smart" "sensitive"]; default = "sensitive"; @@ -112,10 +106,6 @@ in { expandtab = true; }; - globals = pushDownDefault { - editorconfig = cfg.enableEditorconfig; - }; - # Options that are more difficult to set through 'vim.options'. Fear not, though # as the Lua DAG is still as powerful as it could be. luaConfigRC.basic = entryAfter ["globalsScript"] '' diff --git a/modules/wrapper/rc/options.nix b/modules/wrapper/rc/options.nix index ab541419..fc9938ba 100644 --- a/modules/wrapper/rc/options.nix +++ b/modules/wrapper/rc/options.nix @@ -121,6 +121,21 @@ in { default = ","; description = "The key used for `` mappings"; }; + + editorconfig = mkOption { + type = bool; + default = true; + description = '' + Whether to enable EditorConfig integration in Neovim. + + This defaults to true as it is enabled by default in stock + Neovim, setting this option to false disables EditorConfig + integration entirely. + + See [Neovim documentation](https://neovim.io/doc/user/editorconfig.html) + for more details on configuring EditorConfig behaviour. + ''; + }; }; }; From 5a5f49f85f1d667c78e731592c93084176683ae0 Mon Sep 17 00:00:00 2001 From: NotAShelf Date: Tue, 3 Dec 2024 00:52:08 +0300 Subject: [PATCH 02/19] lib/languages: re-add `toVimBool` --- lib/languages.nix | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/lib/languages.nix b/lib/languages.nix index 52f1b5b8..56c225d6 100644 --- a/lib/languages.nix +++ b/lib/languages.nix @@ -6,7 +6,12 @@ inherit (lib.nvim.attrsets) mapListToAttrs; in { # Converts a boolean to a yes/no string. This is used in lots of - # configuration formats. + # configuration formats, and is not covered by `toLuaObject` + toVimBool = bool: + if bool + then "yes" + else "no"; + diagnosticsToLua = { lang, config, @@ -30,8 +35,8 @@ in { mkEnable = desc: mkOption { - description = "Turn on ${desc} for enabled languages by default"; - type = bool; default = false; + type = bool; + description = "Turn on ${desc} for enabled languages by default"; }; } From 07f50e84eb99d2454250b1076449a8667f19b4de Mon Sep 17 00:00:00 2001 From: NotAShelf Date: Tue, 3 Dec 2024 00:53:22 +0300 Subject: [PATCH 03/19] modules/neovim: deprecate `vim.showSignColumn` Prefer the type-safe `vim.options` equivalent. --- modules/extra/deprecations.nix | 6 +++++ modules/neovim/init/basic.nix | 40 +++++++++++++--------------------- modules/wrapper/rc/options.nix | 8 +++++++ 3 files changed, 29 insertions(+), 25 deletions(-) diff --git a/modules/extra/deprecations.nix b/modules/extra/deprecations.nix index 9fd52938..8d27d7ac 100644 --- a/modules/extra/deprecations.nix +++ b/modules/extra/deprecations.nix @@ -14,6 +14,7 @@ splitRight = "splitright"; autoIndent = "autoindent"; wordWrap = "wrap"; + showSignColumn = "signcolumn"; }; in { imports = concatLists [ @@ -35,23 +36,28 @@ in { vim.autopairs.enable has been removed in favor of per-plugin modules. You can enable nvim-autopairs with vim.autopairs.nvim-autopairs.enable instead. '') + (mkRemovedOptionModule ["vim" "autopairs" "type"] '' vim.autopairs.type has been removed in favor of per-plugin modules. You can enable nvim-autopairs with vim.autopairs.nvim-autopairs.enable instead. '') + (mkRemovedOptionModule ["vim" "autocomplete" "enable"] '' vim.autocomplete.enable has been removed in favor of per-plugin modules. You can enable nvim-cmp with vim.autocomplete.nvim-cmp.enable instead. '') + (mkRemovedOptionModule ["vim" "autocomplete" "type"] '' vim.autocomplete.type has been removed in favor of per-plugin modules. You can enable nvim-cmp with vim.autocomplete.nvim-cmp.enable instead. '') + (mkRemovedOptionModule ["vim" "autocomplete" "sources"] '' vim.autocomplete.sources has been removed in favor of per-plugin modules. You can add nvim-cmp sources with vim.autocomplete.nvim-cmp.sources instead. '') + (mkRemovedOptionModule ["vim" "snippets" "vsnip" "enable"] '' vim.snippets.vsnip.enable has been removed in favor of the more modern luasnip. '') diff --git a/modules/neovim/init/basic.nix b/modules/neovim/init/basic.nix index 1b45feaa..ef899cf4 100644 --- a/modules/neovim/init/basic.nix +++ b/modules/neovim/init/basic.nix @@ -58,12 +58,6 @@ in { description = "Prevent swapfile and backupfile from being created"; }; - showSignColumn = mkOption { - type = bool; - default = true; - description = "Show the sign column"; - }; - bell = mkOption { type = enum ["none" "visual" "on"]; default = "none"; @@ -109,74 +103,70 @@ in { # Options that are more difficult to set through 'vim.options'. Fear not, though # as the Lua DAG is still as powerful as it could be. luaConfigRC.basic = entryAfter ["globalsScript"] '' - -- Settings that are set for everything - vim.opt.shortmess:append("c") + -- Settings that are set for everything + vim.opt.shortmess:append("c") - ${optionalString cfg.undoFile.enable '' + ${optionalString cfg.undoFile.enable '' vim.o.undofile = true vim.o.undodir = ${toLuaObject cfg.undoFile.path} ''} - ${optionalString cfg.showSignColumn '' - vim.o.signcolumn = "yes" - ''} - ${optionalString cfg.preventJunkFiles '' vim.o.swapfile = false vim.o.backup = false vim.o.writebackup = false ''} - ${optionalString (cfg.bell == "none") '' + ${optionalString (cfg.bell == "none") '' vim.o.errorbells = false vim.o.visualbell = false ''} - ${optionalString (cfg.bell == "on") '' + ${optionalString (cfg.bell == "on") '' vim.o.visualbell = false ''} - ${optionalString (cfg.bell == "visual") '' + ${optionalString (cfg.bell == "visual") '' vim.o.errorbells = false ''} - ${optionalString (cfg.lineNumberMode == "relative") '' + ${optionalString (cfg.lineNumberMode == "relative") '' vim.o.relativenumber = true ''} - ${optionalString (cfg.lineNumberMode == "number") '' + ${optionalString (cfg.lineNumberMode == "number") '' vim.o.number = true ''} - ${optionalString (cfg.lineNumberMode == "relNumber") '' + ${optionalString (cfg.lineNumberMode == "relNumber") '' vim.o.number = true vim.o.relativenumber = true ''} - ${optionalString cfg.useSystemClipboard '' + ${optionalString cfg.useSystemClipboard '' vim.opt.clipboard:append("unnamedplus") ''} - ${optionalString cfg.syntaxHighlighting '' + ${optionalString cfg.syntaxHighlighting '' vim.cmd("syntax on") ''} - ${optionalString cfg.hideSearchHighlight '' + ${optionalString cfg.hideSearchHighlight '' vim.o.hlsearch = false vim.o.incsearch = true ''} - ${optionalString (cfg.searchCase == "ignore") '' + ${optionalString (cfg.searchCase == "ignore") '' vim.o.smartcase = false vim.o.ignorecase = true ''} - ${optionalString (cfg.searchCase == "smart") '' + ${optionalString (cfg.searchCase == "smart") '' vim.o.smartcase = true vim.o.ignorecase = true ''} - ${optionalString (cfg.searchCase == "sensitive") '' + ${optionalString (cfg.searchCase == "sensitive") '' vim.o.smartcase = false vim.o.ignorecase = false ''} diff --git a/modules/wrapper/rc/options.nix b/modules/wrapper/rc/options.nix index fc9938ba..1a7ea8b1 100644 --- a/modules/wrapper/rc/options.nix +++ b/modules/wrapper/rc/options.nix @@ -6,6 +6,7 @@ inherit (lib.options) mkOption mkEnableOption literalMD literalExpression; inherit (lib.strings) optionalString; inherit (lib.types) str bool int enum attrsOf lines listOf either path submodule anything; + inherit (lib.nvim.languages) toVimBool; inherit (lib.nvim.types) dagOf; inherit (lib.nvim.lua) listToLuaTable; @@ -227,6 +228,13 @@ in { default = true; description = "Enable word wrapping."; }; + + signcolumn = mkOption { + type = bool; + default = true; + apply = x: toVimBool x; # convert to a yes/no str + description = "Show the sign column"; + }; }; }; From c19c925f1dd8d86e82f6fe78ca2e42ff8883bcb1 Mon Sep 17 00:00:00 2001 From: NotAShelf Date: Tue, 3 Dec 2024 01:03:45 +0300 Subject: [PATCH 04/19] modules/neovim: avoid interpolating strings for `vim.preventJunkFiles` --- modules/neovim/init/basic.nix | 42 +++++++++++++++++------------------ 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/modules/neovim/init/basic.nix b/modules/neovim/init/basic.nix index ef899cf4..f91ea9a1 100644 --- a/modules/neovim/init/basic.nix +++ b/modules/neovim/init/basic.nix @@ -95,78 +95,78 @@ in { # and 'vim.globals' (vim.g). Future options, if possible, should be added here instead of the # luaConfigRC section below. options = pushDownDefault { + # Options that are always set, with a lower priority encoding = "utf-8"; hidden = true; expandtab = true; + + # Junkfile Behaviour + swapfile = !cfg.preventJunkFiles; + backup = !cfg.preventJunkFiles; + writebackup = !cfg.preventJunkFiles; }; # Options that are more difficult to set through 'vim.options'. Fear not, though # as the Lua DAG is still as powerful as it could be. luaConfigRC.basic = entryAfter ["globalsScript"] '' - -- Settings that are set for everything - vim.opt.shortmess:append("c") + -- Settings that are set for everything + vim.opt.shortmess:append("c") - ${optionalString cfg.undoFile.enable '' + ${optionalString cfg.undoFile.enable '' vim.o.undofile = true vim.o.undodir = ${toLuaObject cfg.undoFile.path} ''} - ${optionalString cfg.preventJunkFiles '' - vim.o.swapfile = false - vim.o.backup = false - vim.o.writebackup = false - ''} - - ${optionalString (cfg.bell == "none") '' + ${optionalString (cfg.bell == "none") '' vim.o.errorbells = false vim.o.visualbell = false ''} - ${optionalString (cfg.bell == "on") '' + ${optionalString (cfg.bell == "on") '' vim.o.visualbell = false ''} - ${optionalString (cfg.bell == "visual") '' + ${optionalString (cfg.bell == "visual") '' vim.o.errorbells = false ''} - ${optionalString (cfg.lineNumberMode == "relative") '' + ${optionalString (cfg.lineNumberMode == "relative") '' vim.o.relativenumber = true ''} - ${optionalString (cfg.lineNumberMode == "number") '' + ${optionalString (cfg.lineNumberMode == "number") '' vim.o.number = true ''} - ${optionalString (cfg.lineNumberMode == "relNumber") '' + ${optionalString (cfg.lineNumberMode == "relNumber") '' vim.o.number = true vim.o.relativenumber = true ''} - ${optionalString cfg.useSystemClipboard '' + ${optionalString cfg.useSystemClipboard '' vim.opt.clipboard:append("unnamedplus") ''} - ${optionalString cfg.syntaxHighlighting '' + ${optionalString cfg.syntaxHighlighting '' vim.cmd("syntax on") ''} - ${optionalString cfg.hideSearchHighlight '' + ${optionalString cfg.hideSearchHighlight '' vim.o.hlsearch = false vim.o.incsearch = true ''} - ${optionalString (cfg.searchCase == "ignore") '' + ${optionalString (cfg.searchCase == "ignore") '' vim.o.smartcase = false vim.o.ignorecase = true ''} - ${optionalString (cfg.searchCase == "smart") '' + ${optionalString (cfg.searchCase == "smart") '' vim.o.smartcase = true vim.o.ignorecase = true ''} - ${optionalString (cfg.searchCase == "sensitive") '' + ${optionalString (cfg.searchCase == "sensitive") '' vim.o.smartcase = false vim.o.ignorecase = false ''} From 66005a51c380cc8ca3597b1e092cb343d900ad93 Mon Sep 17 00:00:00 2001 From: NotAShelf Date: Wed, 11 Dec 2024 00:08:48 +0300 Subject: [PATCH 05/19] wrappr/rc: allow strings in `vim.options.signcolumn` --- modules/wrapper/rc/options.nix | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/modules/wrapper/rc/options.nix b/modules/wrapper/rc/options.nix index 1a7ea8b1..980c9497 100644 --- a/modules/wrapper/rc/options.nix +++ b/modules/wrapper/rc/options.nix @@ -6,6 +6,7 @@ inherit (lib.options) mkOption mkEnableOption literalMD literalExpression; inherit (lib.strings) optionalString; inherit (lib.types) str bool int enum attrsOf lines listOf either path submodule anything; + inherit (lib.trivial) isBool; inherit (lib.nvim.languages) toVimBool; inherit (lib.nvim.types) dagOf; inherit (lib.nvim.lua) listToLuaTable; @@ -230,9 +231,12 @@ in { }; signcolumn = mkOption { - type = bool; + type = either str bool; default = true; - apply = x: toVimBool x; # convert to a yes/no str + apply = x: + if isBool x + then toVimBool x # convert to a yes/no str + else x; description = "Show the sign column"; }; }; From b67759273b2c2066e39f45f734a6b84c1a14ebe6 Mon Sep 17 00:00:00 2001 From: NotAShelf Date: Sat, 4 Jan 2025 15:52:27 +0300 Subject: [PATCH 06/19] neovim/spellcheck: convert to `vim.options` --- modules/neovim/init/spellcheck.nix | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/modules/neovim/init/spellcheck.nix b/modules/neovim/init/spellcheck.nix index 5d6f5bed..f8d784da 100644 --- a/modules/neovim/init/spellcheck.nix +++ b/modules/neovim/init/spellcheck.nix @@ -124,7 +124,6 @@ in { nvim --headless --clean \ --cmd "mkspell $out/spell/$name.add.spl $spellfile" -Es -n done - ''; in mkIf (cfg.extraSpellWords != {}) [ @@ -133,10 +132,12 @@ in { compileJoinedSpellfiles.outPath ]; - luaConfigRC.spellcheck = entryAfter ["basic"] '' - vim.opt.spell = true - vim.opt.spelllang = ${listToLuaTable cfg.languages} + options = { + spell = true; + spelllang = cfg.languages; + }; + luaConfigRC.spellcheck = entryAfter ["basic"] '' -- Disable spellchecking for certain filetypes -- as configured by `vim.spellcheck.ignoredFiletypes` vim.api.nvim_create_augroup("nvf_autocmds", {clear = false}) From 85347de09d6eaa03989a98885781f9c8fd31830b Mon Sep 17 00:00:00 2001 From: NotAShelf Date: Sat, 4 Jan 2025 16:08:11 +0300 Subject: [PATCH 07/19] utility/gesture-nvim: convert to `vim.options` --- .../utility/gestures/gesture-nvim/config.nix | 74 ++++++++++--------- .../utility/gestures/gesture-nvim/default.nix | 2 +- 2 files changed, 40 insertions(+), 36 deletions(-) diff --git a/modules/plugins/utility/gestures/gesture-nvim/config.nix b/modules/plugins/utility/gestures/gesture-nvim/config.nix index 2996f7d2..9838c178 100644 --- a/modules/plugins/utility/gestures/gesture-nvim/config.nix +++ b/modules/plugins/utility/gestures/gesture-nvim/config.nix @@ -15,43 +15,47 @@ mappings = addDescriptionsToMappings cfg.mappings mappingDefinitions; in { config = mkIf cfg.enable { - vim.startPlugins = ["gesture-nvim"]; + vim = { + startPlugins = ["gesture-nvim"]; - vim.maps.normal = mkMerge [ - (mkSetLuaBinding mappings.draw "require('gesture').draw") - (mkSetLuaBinding mappings.finish "require('gesture').finish") - (mkIf (mappings.draw.value == "") { - "" = {action = "";}; - }) - ]; + maps.normal = mkMerge [ + (mkSetLuaBinding mappings.draw "require('gesture').draw") + (mkSetLuaBinding mappings.finish "require('gesture').finish") + (mkIf (mappings.draw.value == "") { + "" = {action = "";}; + }) + ]; - vim.pluginRC.gesture-nvim = entryAnywhere '' - vim.opt.mouse = "a" + options.mouse = "a"; + pluginRC.gesture-nvim = entryAnywhere '' + local gesture = require("gesture") + gesture.register({ + name = "scroll to bottom", + inputs = { gesture.up(), gesture.down() }, + action = "normal! G", + }) - local gesture = require("gesture") - gesture.register({ - name = "scroll to bottom", - inputs = { gesture.up(), gesture.down() }, - action = "normal! G", - }) - gesture.register({ - name = "next tab", - inputs = { gesture.right() }, - action = "tabnext", - }) - gesture.register({ - name = "previous tab", - inputs = { gesture.left() }, - action = function(ctx) -- also can use callable - vim.cmd.tabprevious() - end, - }) - gesture.register({ - name = "go back", - inputs = { gesture.right(), gesture.left() }, - -- map to `` keycode - action = [[lua vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes("", true, false, true), "n", true)]], - }) - ''; + gesture.register({ + name = "next tab", + inputs = { gesture.right() }, + action = "tabnext", + }) + + gesture.register({ + name = "previous tab", + inputs = { gesture.left() }, + action = function(ctx) -- also can use callable + vim.cmd.tabprevious() + end, + }) + + gesture.register({ + name = "go back", + inputs = { gesture.right(), gesture.left() }, + -- map to `` keycode + action = [[lua vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes("", true, false, true), "n", true)]], + }) + ''; + }; }; } diff --git a/modules/plugins/utility/gestures/gesture-nvim/default.nix b/modules/plugins/utility/gestures/gesture-nvim/default.nix index 27e7e09f..4c7987e7 100644 --- a/modules/plugins/utility/gestures/gesture-nvim/default.nix +++ b/modules/plugins/utility/gestures/gesture-nvim/default.nix @@ -1,4 +1,4 @@ -_: { +{ imports = [ ./gesture-nvim.nix ./config.nix From 5749739e4b67c955f06efca03a9962bc55038dfc Mon Sep 17 00:00:00 2001 From: NotAShelf Date: Sat, 4 Jan 2025 16:08:53 +0300 Subject: [PATCH 08/19] wrapper/rc: clean up option documentation --- modules/wrapper/rc/options.nix | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/modules/wrapper/rc/options.nix b/modules/wrapper/rc/options.nix index 980c9497..20eb50e7 100644 --- a/modules/wrapper/rc/options.nix +++ b/modules/wrapper/rc/options.nix @@ -3,7 +3,7 @@ lib, ... }: let - inherit (lib.options) mkOption mkEnableOption literalMD literalExpression; + inherit (lib.options) mkOption literalMD literalExpression; inherit (lib.strings) optionalString; inherit (lib.types) str bool int enum attrsOf lines listOf either path submodule anything; inherit (lib.trivial) isBool; @@ -19,7 +19,7 @@ in { default = false; example = true; description = '' - [{option}`official documentation`]: https://neovim.io/doc/user/lua.html#vim.loader.enable() + [official documentation]: https://neovim.io/doc/user/lua.html#vim.loader.enable() the experimental Lua module loader to speed up the start up process @@ -31,7 +31,7 @@ in { ::: {.note} The Lua module loader is *disabled* by default. Before setting this option, please - take a look at the [{option}`official documentation`]. This option may be enabled by + take a look at the {option}`[official documentation]`. This option may be enabled by default in the future. ::: ''; @@ -83,7 +83,7 @@ in { ./nvim/my-lua-file.lua # source type path - pure and reproducible - (builtins.source { + (builtins.path { path = ./nvim/my-lua-file.lua; name = "my-lua-file"; }) @@ -274,7 +274,11 @@ in { vim.opt.runtimepath:append(${listToLuaTable cfg.additionalRuntimePaths}) ''} - ${optionalString cfg.enableLuaLoader "vim.loader.enable()"} + ${optionalString cfg.enableLuaLoader '' + if vim.loader then + vim.loader.enable() + end + ''} ''; defaultText = literalMD '' @@ -284,7 +288,7 @@ in { if [](#opt-vim.enableLuaLoader) is set to true. ''; - example = literalExpression ''"$${builtins.readFile ./my-lua-config-pre.lua}"''; + example = literalExpression ''''${builtins.readFile ./my-lua-config-pre.lua}''; description = '' Verbatim lua code that will be inserted **before** From 356f92053c9a23adaef66092d3d6e1d48923a9a8 Mon Sep 17 00:00:00 2001 From: NotAShelf Date: Tue, 7 Jan 2025 06:12:13 +0300 Subject: [PATCH 09/19] neovim/init: merge conditionals in options set --- modules/neovim/init/basic.nix | 93 +++++++++++++++++----------------- modules/wrapper/rc/options.nix | 3 +- 2 files changed, 49 insertions(+), 47 deletions(-) diff --git a/modules/neovim/init/basic.nix b/modules/neovim/init/basic.nix index f91ea9a1..532ebcea 100644 --- a/modules/neovim/init/basic.nix +++ b/modules/neovim/init/basic.nix @@ -5,6 +5,7 @@ }: let inherit (lib.options) mkOption mkEnableOption literalMD; inherit (lib.strings) optionalString; + inherit (lib.attrsets) optionalAttrs; inherit (lib.types) enum bool str int either; inherit (lib.generators) mkLuaInline; inherit (lib.nvim.dag) entryAfter; @@ -94,55 +95,55 @@ in { # Set options that were previously interpolated in 'luaConfigRC.basic' as vim.options (vim.o) # and 'vim.globals' (vim.g). Future options, if possible, should be added here instead of the # luaConfigRC section below. - options = pushDownDefault { - # Options that are always set, with a lower priority - encoding = "utf-8"; - hidden = true; - expandtab = true; + options = pushDownDefault (lib.mergeAttrsList [ + { + # Options that are always set, with a lower priority + encoding = "utf-8"; + hidden = true; + expandtab = true; - # Junkfile Behaviour - swapfile = !cfg.preventJunkFiles; - backup = !cfg.preventJunkFiles; - writebackup = !cfg.preventJunkFiles; - }; + # Junkfile Behaviour + swapfile = !cfg.preventJunkFiles; + backup = !cfg.preventJunkFiles; + writebackup = !cfg.preventJunkFiles; + } - # Options that are more difficult to set through 'vim.options'. Fear not, though - # as the Lua DAG is still as powerful as it could be. + (optionalAttrs cfg.undoFile.enable { + undofile = true; + undodir = cfg.undoFile.path; + }) + + (optionalAttrs (cfg.bell == "none") { + errorbells = false; + visualbell = false; + }) + + (optionalAttrs (cfg.bell == "on") { + visualbell = false; + }) + + (optionalAttrs (cfg.bell == "visual") { + visualbell = false; + }) + + (optionalAttrs (cfg.lineNumberMode == "relative") { + relativenumber = true; + }) + + (optionalAttrs (cfg.lineNumberMode == "number") { + number = true; + }) + + (optionalAttrs (cfg.lineNumberMode == "relNumber") { + number = true; + relativenumber = true; + }) + ]); + + # Options that are more difficult to set through 'vim.options'. Namely, appending values + # to pre-set Neovim options. Fear not, though as the Lua DAG is still as powerful as it + # could be. luaConfigRC.basic = entryAfter ["globalsScript"] '' - -- Settings that are set for everything - vim.opt.shortmess:append("c") - - ${optionalString cfg.undoFile.enable '' - vim.o.undofile = true - vim.o.undodir = ${toLuaObject cfg.undoFile.path} - ''} - - ${optionalString (cfg.bell == "none") '' - vim.o.errorbells = false - vim.o.visualbell = false - ''} - - ${optionalString (cfg.bell == "on") '' - vim.o.visualbell = false - ''} - - ${optionalString (cfg.bell == "visual") '' - vim.o.errorbells = false - ''} - - ${optionalString (cfg.lineNumberMode == "relative") '' - vim.o.relativenumber = true - ''} - - ${optionalString (cfg.lineNumberMode == "number") '' - vim.o.number = true - ''} - - ${optionalString (cfg.lineNumberMode == "relNumber") '' - vim.o.number = true - vim.o.relativenumber = true - ''} - ${optionalString cfg.useSystemClipboard '' vim.opt.clipboard:append("unnamedplus") ''} diff --git a/modules/wrapper/rc/options.nix b/modules/wrapper/rc/options.nix index 8fff005d..d82fc741 100644 --- a/modules/wrapper/rc/options.nix +++ b/modules/wrapper/rc/options.nix @@ -235,7 +235,8 @@ in { if isBool x then toVimBool x # convert to a yes/no str else x; - description = "Show the sign column" + description = "Show the sign column"; + }; tabstop = mkOption { type = int; From 752915e639a1c70002c885dba530a685b5174d08 Mon Sep 17 00:00:00 2001 From: Ching Pei Yang Date: Tue, 7 Jan 2025 06:46:12 +0100 Subject: [PATCH 10/19] telescope: workaround nixpkgs extensions loading early force a reload when telescope is loaded to workaround #535 --- modules/plugins/utility/telescope/config.nix | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/modules/plugins/utility/telescope/config.nix b/modules/plugins/utility/telescope/config.nix index 76cfa8bd..95f81327 100644 --- a/modules/plugins/utility/telescope/config.nix +++ b/modules/plugins/utility/telescope/config.nix @@ -22,6 +22,12 @@ in { package = "telescope"; setupModule = "telescope"; inherit (cfg) setupOpts; + + # HACK: workaround until https://github.com/NotAShelf/nvf/issues/535 gets resolved + before = '' + vim.g.loaded_telescope = nil + ''; + after = '' local telescope = require("telescope") ${optionalString config.vim.ui.noice.enable "telescope.load_extension('noice')"} From b0fb0a93cb757291bf4537d1cce8c58c77675e30 Mon Sep 17 00:00:00 2001 From: LilleAila Date: Fri, 10 Jan 2025 08:25:08 +0100 Subject: [PATCH 11/19] notes/obsidian: remove default dir-value --- modules/plugins/notes/obsidian/obsidian.nix | 6 ------ 1 file changed, 6 deletions(-) diff --git a/modules/plugins/notes/obsidian/obsidian.nix b/modules/plugins/notes/obsidian/obsidian.nix index 2dae5a9c..2da2127b 100644 --- a/modules/plugins/notes/obsidian/obsidian.nix +++ b/modules/plugins/notes/obsidian/obsidian.nix @@ -24,12 +24,6 @@ in { enable = mkEnableOption "complementary neovim plugins for Obsidian editor"; setupOpts = mkPluginSetupOption "Obsidian.nvim" { - dir = mkOption { - type = str; - default = "~/my-vault"; - description = "Obsidian vault directory"; - }; - daily_notes = { folder = mkOption { type = nullOr str; From 8448a6ca0f0facafac5235f54db62c89134875f1 Mon Sep 17 00:00:00 2001 From: NotAShelf Date: Fri, 10 Jan 2025 10:36:01 +0300 Subject: [PATCH 12/19] wrapper/rc: change `vim.options.mouse` to a string type As the mouse option in neovim allows combining those values. --- docs/release-notes/rl-0.8.md | 5 +++++ modules/wrapper/rc/options.nix | 17 +++++++++++++---- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/docs/release-notes/rl-0.8.md b/docs/release-notes/rl-0.8.md index 036b673c..ed627475 100644 --- a/docs/release-notes/rl-0.8.md +++ b/docs/release-notes/rl-0.8.md @@ -16,6 +16,11 @@ - Implement [](#opt-vim.git.gitsigns.setupOpts) for user-specified setup table in gitsigns configuration. +- [](#opt-vim.options.mouse) no longer compares values to an enum of available + mouse modes. This means you can provide any string without the module system + warning you that it is invalid. Do keep in mind that this value is no longer + checked, so you will be responsible for ensuring its validity. + [amadaluzia](https://github.com/amadaluzia): [haskell-tools.nvim]: https://github.com/MrcJkb/haskell-tools.nvim diff --git a/modules/wrapper/rc/options.nix b/modules/wrapper/rc/options.nix index d82fc741..36296f02 100644 --- a/modules/wrapper/rc/options.nix +++ b/modules/wrapper/rc/options.nix @@ -167,16 +167,25 @@ in { }; mouse = mkOption { - type = enum ["a" "n" "v" "i" "c"]; - default = "a"; + type = str; + default = "nvi"; + example = "a"; description = '' Set modes for mouse support. - * a - all * n - normal * v - visual * i - insert - * c - command + * c - command-line + * h - all modes when editing a help file + * a - all modes + * r - for hit-enter and more-prompt prompt + + [neovim documentation]: https://neovim.io/doc/user/options.html#'mouse'" + + This option takes a string to ensure proper conversion to the corresponding Lua type. + As such, we do not check the value passed to this option. Please ensure that any value + that is set here is a valid value as per [neovim documentation]. ''; }; From 6f1293053c0348c6901660c20deff5304433e028 Mon Sep 17 00:00:00 2001 From: NotAShelf Date: Fri, 10 Jan 2025 10:45:34 +0300 Subject: [PATCH 13/19] docs: update v0.8 release notes --- docs/release-notes/rl-0.7.md | 3 --- docs/release-notes/rl-0.8.md | 3 +++ 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/release-notes/rl-0.7.md b/docs/release-notes/rl-0.7.md index fd3764ac..32186a8f 100644 --- a/docs/release-notes/rl-0.7.md +++ b/docs/release-notes/rl-0.7.md @@ -334,9 +334,6 @@ The changes are, in no particular order: `vim.options` as default values. Some are left as they don't have a direct equivalent, but expect a switch eventually. -- Deprecated `vim.enableEditorconfig` in favor of - [](#opt-vim.globals.editorconfig). - [ppenguin](https://github.com/ppenguin): - Telescope: diff --git a/docs/release-notes/rl-0.8.md b/docs/release-notes/rl-0.8.md index ed627475..cff78de9 100644 --- a/docs/release-notes/rl-0.8.md +++ b/docs/release-notes/rl-0.8.md @@ -21,6 +21,9 @@ warning you that it is invalid. Do keep in mind that this value is no longer checked, so you will be responsible for ensuring its validity. +- Deprecated `vim.enableEditorconfig` in favor of + [](#opt-vim.globals.editorconfig). + [amadaluzia](https://github.com/amadaluzia): [haskell-tools.nvim]: https://github.com/MrcJkb/haskell-tools.nvim From 6852120514356fb75a161b73f31f3ce864f6dbef Mon Sep 17 00:00:00 2001 From: LilleAila Date: Fri, 10 Jan 2025 08:53:22 +0100 Subject: [PATCH 14/19] notes/obsidian: add changelog entry --- docs/release-notes/rl-0.8.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/release-notes/rl-0.8.md b/docs/release-notes/rl-0.8.md index 036b673c..a7e9df87 100644 --- a/docs/release-notes/rl-0.8.md +++ b/docs/release-notes/rl-0.8.md @@ -36,3 +36,9 @@ - Add [aerial.nvim] - Add [nvim-ufo] + +[LilleAila](https://github.com/LilleAila): + +[obsidian.nvim](https://github.com/epwalsh/obsidian.nvim) + +- Remove `vim.notes.obsidian.setupOpts.dir`. Fixes issue with setting the workspace directory. From 4e949b3df8d152d9802f44b3fc32da3dc7aaa7fb Mon Sep 17 00:00:00 2001 From: raf Date: Fri, 10 Jan 2025 08:09:52 +0000 Subject: [PATCH 15/19] docs: remove redundant obsidian.nvim link --- docs/release-notes/rl-0.8.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/docs/release-notes/rl-0.8.md b/docs/release-notes/rl-0.8.md index a7e9df87..e83a978d 100644 --- a/docs/release-notes/rl-0.8.md +++ b/docs/release-notes/rl-0.8.md @@ -39,6 +39,5 @@ [LilleAila](https://github.com/LilleAila): -[obsidian.nvim](https://github.com/epwalsh/obsidian.nvim) - -- Remove `vim.notes.obsidian.setupOpts.dir`. Fixes issue with setting the workspace directory. +- Remove `vim.notes.obsidian.setupOpts.dir`, which was set by default. + Fixes issue with setting the workspace directory. From c734a81e4051cb65d48adbc7c826e5f234df1144 Mon Sep 17 00:00:00 2001 From: NotAShelf Date: Fri, 10 Jan 2025 12:52:11 +0300 Subject: [PATCH 16/19] languages/nix: deprecate `rnix` language server option Abandoned, archived and wildly outdated. --- flake.lock | 73 ------------------------------- flake.nix | 1 - flake/legacyPackages.nix | 4 +- modules/plugins/languages/nix.nix | 30 ++++++------- 4 files changed, 16 insertions(+), 92 deletions(-) diff --git a/flake.lock b/flake.lock index d4e745c1..da38b967 100644 --- a/flake.lock +++ b/flake.lock @@ -51,27 +51,6 @@ "type": "github" } }, - "naersk": { - "inputs": { - "nixpkgs": [ - "rnix-lsp", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1655042882, - "narHash": "sha256-9BX8Fuez5YJlN7cdPO63InoyBy7dm3VlJkkmTt6fS1A=", - "owner": "nix-community", - "repo": "naersk", - "rev": "cddffb5aa211f50c4b8750adbec0bbbdfb26bb9f", - "type": "github" - }, - "original": { - "owner": "nix-community", - "repo": "naersk", - "type": "github" - } - }, "nil": { "inputs": { "flake-utils": [ @@ -124,22 +103,6 @@ "url": "https://github.com/NixOS/nixpkgs/archive/5487e69da40cbd611ab2cadee0b4637225f7cfae.tar.gz" } }, - "nixpkgs_2": { - "locked": { - "lastModified": 1656753965, - "narHash": "sha256-BCrB3l0qpJokOnIVc3g2lHiGhnjUi0MoXiw6t1o8H1E=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "0ea7a8f1b939d74e5df8af9a8f7342097cdf69eb", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, "nmd": { "flake": false, "locked": { @@ -2110,26 +2073,6 @@ "type": "github" } }, - "rnix-lsp": { - "inputs": { - "naersk": "naersk", - "nixpkgs": "nixpkgs_2", - "utils": "utils" - }, - "locked": { - "lastModified": 1669555118, - "narHash": "sha256-F0s0m62S5bHNVWNHLZD6SeHiLrsDx98VQbRjDyIu+qQ=", - "owner": "nix-community", - "repo": "rnix-lsp", - "rev": "95d40673fe43642e2e1144341e86d0036abd95d9", - "type": "github" - }, - "original": { - "owner": "nix-community", - "repo": "rnix-lsp", - "type": "github" - } - }, "root": { "inputs": { "flake-parts": "flake-parts", @@ -2260,7 +2203,6 @@ "plugin-vim-repeat": "plugin-vim-repeat", "plugin-vim-startify": "plugin-vim-startify", "plugin-which-key": "plugin-which-key", - "rnix-lsp": "rnix-lsp", "systems": "systems_2" } }, @@ -2314,21 +2256,6 @@ "repo": "default", "type": "github" } - }, - "utils": { - "locked": { - "lastModified": 1656928814, - "narHash": "sha256-RIFfgBuKz6Hp89yRr7+NR5tzIAbn52h8vT6vXkYjZoM=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "7e2a3b3dfd9af950a856d66b0a7d01e3c18aa249", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } } }, "root": "root", diff --git a/flake.nix b/flake.nix index c1fe0688..89690cad 100644 --- a/flake.nix +++ b/flake.nix @@ -89,7 +89,6 @@ }; # Language servers (use master instead of nixpkgs) - rnix-lsp.url = "github:nix-community/rnix-lsp"; nil = { url = "github:oxalica/nil"; inputs.nixpkgs.follows = "nixpkgs"; diff --git a/flake/legacyPackages.nix b/flake/legacyPackages.nix index 389ca0ce..b77d057a 100644 --- a/flake/legacyPackages.nix +++ b/flake/legacyPackages.nix @@ -8,8 +8,10 @@ inherit system; overlays = [ inputs.self.overlays.default + (_: _: { - rnix-lsp = inputs'.rnix-lsp.defaultPackage; + # Build nil from source to get most recent + # features as they are added. nil = inputs'.nil.packages.default; }) ]; diff --git a/modules/plugins/languages/nix.nix b/modules/plugins/languages/nix.nix index ffb69e92..1120633c 100644 --- a/modules/plugins/languages/nix.nix +++ b/modules/plugins/languages/nix.nix @@ -26,22 +26,6 @@ then expToLua package else ''{"${package}/bin/${defaultCmd}"}''; servers = { - rnix = { - package = pkgs.rnix-lsp; - internalFormatter = cfg.format.type == "nixpkgs-fmt"; - lspConfig = '' - lspconfig.rnix.setup{ - capabilities = capabilities, - ${ - if (cfg.format.enable && cfg.format.type == "nixpkgs-fmt") - then useFormat - else noFormat - }, - cmd = ${packageToCmd cfg.lsp.package "rnix-lsp"}, - } - ''; - }; - nil = { package = pkgs.nil; internalFormatter = true; @@ -165,6 +149,7 @@ in { type = enum (attrNames formats); default = defaultFormat; }; + package = mkOption { description = "Nix formatter package"; type = package; @@ -188,7 +173,18 @@ in { assertions = [ { assertion = cfg.format.type != "nixpkgs-fmt"; - message = "nixpkgs-fmt has been archived upstream. Please use one of the following instead: ${concatStringsSep ", " (attrNames formats)}"; + message = '' + nixpkgs-fmt has been archived upstream. Please use one of the following available formatters: + ${concatStringsSep ", " (attrNames formats)} + ''; + } + + { + assertion = cfg.lsp.server != "rnix"; + message = '' + rnix-lsp has been archived upstream. Please use one of the following available language servers: + ${concatStringsSep ", " (attrNames servers)} + ''; } ]; vim.pluginRC.nix = '' From c5f16b96c0b1663e6d48ce30aa145cfec3f3698e Mon Sep 17 00:00:00 2001 From: NotAShelf Date: Fri, 10 Jan 2025 12:52:49 +0300 Subject: [PATCH 17/19] docs: update v0.8 release notes --- docs/release-notes/rl-0.8.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/docs/release-notes/rl-0.8.md b/docs/release-notes/rl-0.8.md index 5cb58b5a..c65defeb 100644 --- a/docs/release-notes/rl-0.8.md +++ b/docs/release-notes/rl-0.8.md @@ -21,9 +21,11 @@ warning you that it is invalid. Do keep in mind that this value is no longer checked, so you will be responsible for ensuring its validity. -- Deprecated `vim.enableEditorconfig` in favor of +- Deprecate `vim.enableEditorconfig` in favor of [](#opt-vim.globals.editorconfig). +- Deprecate rnix-lsp as it has been abandoned and archived upstream. + [amadaluzia](https://github.com/amadaluzia): [haskell-tools.nvim]: https://github.com/MrcJkb/haskell-tools.nvim @@ -47,5 +49,5 @@ [LilleAila](https://github.com/LilleAila): -- Remove `vim.notes.obsidian.setupOpts.dir`, which was set by default. - Fixes issue with setting the workspace directory. +- Remove `vim.notes.obsidian.setupOpts.dir`, which was set by default. Fixes + issue with setting the workspace directory. From 6097f7eb11880c2111d4ff27dbbbef8d24adf32e Mon Sep 17 00:00:00 2001 From: raf Date: Fri, 10 Jan 2025 13:35:14 +0300 Subject: [PATCH 18/19] ci: build previews for the website on documentation changes (#494) --- .github/workflows/docs-preview.yml | 172 +++++++++++++++++++++++++++++ 1 file changed, 172 insertions(+) create mode 100644 .github/workflows/docs-preview.yml diff --git a/.github/workflows/docs-preview.yml b/.github/workflows/docs-preview.yml new file mode 100644 index 00000000..dc5f6543 --- /dev/null +++ b/.github/workflows/docs-preview.yml @@ -0,0 +1,172 @@ +name: Build and Preview Manual + +on: + workflow_dispatch: + pull_request: + types: [opened, synchronize, reopened, closed] + paths: + - ".github/workflows/docs-preview.yml" + - "modules/**" + - "docs/**" + +# Defining permissions here passes it to all workflows. +# https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/controlling-permissions-for-github_token +permissions: + contents: write + pull-requests: write + issues: write + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + build-preview: + runs-on: ubuntu-latest + steps: + - name: Install Nix + uses: DeterminateSystems/nix-installer-action@main + - uses: DeterminateSystems/magic-nix-cache-action@main + + - name: Checkout + uses: actions/checkout@v4 + + - name: Set default git branch (to reduce log spam) + run: git config --global init.defaultBranch main + + - name: Build documentation packages + run: nix build .#docs-html --print-build-logs + + - name: Deploy to GitHub Pages preview + run: | + PR_NUMBER=${{ github.event.pull_request.number }} + BRANCH_NAME="gh-pages" + PREVIEW_DIR="docs-preview-${PR_NUMBER}" + + # Clone the gh-pages branch and move to the preview subdirectory + git clone --single-branch --branch $BRANCH_NAME https://github.com/${{ github.repository }} gh-pages + cd gh-pages + + mkdir -p $PREVIEW_DIR + + # Copy the build files to the preview subdirectory + cp -rvf ../result/share/doc/nvf/* ./$PREVIEW_DIR + + # Configure git to use the GitHub Actions token for authentication + git config --global user.name "GitHub Actions" + git config --global user.email "actions@github.com" + + # Set the GitHub token for authentication + git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }} + + # Add and commit the changes + git add --all + git commit -m "Deploy PR #${PR_NUMBER} preview" || echo "No changes to commit" + git push --force origin $BRANCH_NAME + + comment-url: + needs: build-preview + runs-on: ubuntu-latest + steps: + - name: Prepare Environment + id: prelude + run: | + PR_NUMBER=${{ github.event.pull_request.number }} + URL="https://${{ github.repository_owner }}.github.io/nvf/docs-preview-${PR_NUMBER}/" + + # Propagate non-interpolatable environment vars + echo "URL=$URL" >> "$GITHUB_OUTPUT" + echo "REV=$GITHUB_SHA" >> "$GITHUB_OUTPUT" + echo "ACTOR=$GITHUB_ACTOR" >> "$GITHUB_OUTPUT" + echo "REF=$GITHUB_HEAD_REF" >> "$GITHUB_OUTPUT" + echo "RUNS=$GITHUB_RUN_NUMBER" >> "$GITHUB_OUTPUT" + + echo "Live Preview URL: $URL" + echo "Rev: $GITHUB_SHA" + echo "Actor: $GITHUB_ACTOR" + echo "Ref: "$GITHUB_HEAD_REF" + echo "Reruns: "$GITHUB_RUN_NUMBER" + + echo "### :rocket: Live Preview Deployed " >> "$GITHUB_STEP_SUMMARY" + echo "Preview can be found at ${URL}" >> "$GITHUB_STEP_SUMMARY" + + - name: Find Comment + uses: peter-evans/find-comment@v3 + id: fc + with: + comment-author: "github-actions[bot]" + issue-number: ${{ github.event.pull_request.number }} + body-includes: "Live preview deployed" + + - name: Post live preview comment + uses: peter-evans/create-or-update-comment@v4 + env: + COMMENT_ID: ${{ steps.fc.outputs.comment-id }} + URL: ${{ steps.prelude.outputs.URL }} + GITHUB_SHA: ${{ steps.prelude.outputs.REV }} + ACTOR: ${{ steps.prelude.outputs.ACTOR }} + REF: ${{ steps.prelude.outputs.REF }} + RUNS: ${{ steps.prelude.outputs.RUNS }} + with: + comment-id: ${{ env.COMMENT_ID }} + issue-number: ${{ github.event.pull_request.number }} # issue number also applies to pull requests + edit-mode: replace # replace previous body + body: | + ### :rocket: Live preview deployed from ${{ env.GITHUB_SHA }} + + View it [here](${{ env.URL }}): + +
+ Debug Information +

Triggered by: ${{ env.ACTOR }}

+

HEAD at: ${{ env.REF }}

+

Reruns: ${{ env.RUNS }}

+
+ + cleanup: + if: ${{ github.event.pull_request.merged == true || github.event.pull_request.state == 'closed' }} + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Delete preview for closed/merged PR + run: | + PR_NUMBER=${{ github.event.pull_request.number }} + BRANCH_NAME="gh-pages" + PREVIEW_DIR="docs-preview-${PR_NUMBER}" + + # Clone the gh-pages branch + git clone --single-branch --branch $BRANCH_NAME https://github.com/${{ github.repository }} gh-pages + cd gh-pages + + # Check if the preview directory exists, and delete it if it does + if [ -d "$PREVIEW_DIR" ]; then + echo "Deleting preview directory $PREVIEW_DIR" + rm -rf $PREVIEW_DIR + else + echo "Preview directory $PREVIEW_DIR does not exist. Skipping deletion." + fi + + # Configure git to use the GitHub Actions token for authentication + git config --global user.name "GitHub Actions" + git config --global user.email "actions@github.com" + + # Set the GitHub token for authentication + git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }} + + # Add and commit the changes (only if there's something to delete) + git add . + git diff --quiet || git commit -m "Remove preview for PR #${PR_NUMBER}" + git push origin $BRANCH_NAME + + cleanup-comment: + needs: cleanup + runs-on: ubuntu-latest + steps: + - name: Post cleanup verification + uses: peter-evans/create-or-update-comment@v4 + with: + issue-number: ${{ github.event.pull_request.number }} + body: | + ✅ Preview has been deleted successfully! From 9c8fbc774ffcba67b517649795eba9bc4a99a4f0 Mon Sep 17 00:00:00 2001 From: NotAShelf Date: Fri, 10 Jan 2025 13:56:24 +0300 Subject: [PATCH 19/19] ci/docs-preview: double check preview directory deletion --- .github/workflows/docs-preview.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/.github/workflows/docs-preview.yml b/.github/workflows/docs-preview.yml index dc5f6543..c38be9da 100644 --- a/.github/workflows/docs-preview.yml +++ b/.github/workflows/docs-preview.yml @@ -164,6 +164,19 @@ jobs: needs: cleanup runs-on: ubuntu-latest steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Double check preview directory deletion + run: | + # Check if the preview directory exists, and delete it if it does + if [ -d "docs-preview-${{ github.event.pull_request.number }}" ]; then + echo "Something went wrong, preview directory is not deleted." + exit 1 + else + echo "Preview directory has been deleted successfully, proceeding." + fi + - name: Post cleanup verification uses: peter-evans/create-or-update-comment@v4 with: