commit 0c93da4837071150deefc30dca17fa79d72fbd6c
parent 8ddd0ac08cbcf25535a6ef5ce7d5351a4389ef48
Author: Oscar Benedito <oscar@oscarbenedito.com>
Date: Tue, 2 Jun 2026 14:41:36 +0200
Update nvim settings to 0.12
Diffstat:
6 files changed, 28 insertions(+), 684 deletions(-)
diff --git a/.config/nvim/init.vim b/.config/nvim/init.vim
@@ -69,7 +69,7 @@ augroup END
" filetype specific config
augroup vimrc
autocmd FileType markdown,vimwiki,mail,tex,text set formatoptions+=t " break lines when longer than textwidth
- autocmd FileType markdown,vimwiki,html set tabstop=2 shiftwidth=2
+ autocmd FileType markdown,vimwiki,html,tex set tabstop=2 shiftwidth=2
autocmd FileType html set textwidth=100 colorcolumn=101
autocmd FileType mail set textwidth=72 colorcolumn=73
autocmd FileType c set noexpandtab
diff --git a/.config/nvim/lua/bootstrap-paq.lua b/.config/nvim/lua/bootstrap-paq.lua
@@ -1,8 +0,0 @@
-local function paq_install()
- vim.g.headless_bootstrap = true
- local paq = require("plugins")
- vim.cmd "autocmd User PaqDoneInstall quit"
- paq.install()
-end
-
-return { run = paq_install }
diff --git a/.config/nvim/lua/paq.lua b/.config/nvim/lua/paq.lua
@@ -1,649 +0,0 @@
--- This file is a modified version of paq-nvim (https://github.com/savq/paq-nvim),
--- which has the following notice.
--- Last update: 2023-11-06 (commit 07eb567dbb70044cabc622900b2bf755f7aecb99)
-
--- MIT License
---
--- Copyright (c) 2020 Sergio Alejandro Vargas
---
--- Permission is hereby granted, free of charge, to any person obtaining a copy
--- of this software and associated documentation files (the "Software"), to deal
--- in the Software without restriction, including without limitation the rights
--- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
--- copies of the Software, and to permit persons to whom the Software is
--- furnished to do so, subject to the following conditions:
---
--- The above copyright notice and this permission notice shall be included in all
--- copies or substantial portions of the Software.
---
--- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
--- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
--- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
--- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
--- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
--- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
--- SOFTWARE.
-
--- VARS: {{{
-
----@alias Path string
-
-local uv = vim.loop
-
----@class setup_opts
----@field path Path
----@field opt boolean
----@field verbose boolean
----@field log Path
----@field lock Path
----@field url_format string
----@field clone_args string[]
-local Config = {
- path = vim.fn.stdpath("data") .. "/site/pack/paqs/",
- opt = false,
- verbose = false,
- url_format = "https://github.com/%s.git",
- log = vim.fn.stdpath(vim.fn.has("nvim-0.8") == 1 and "log" or "cache") .. "/paq.log",
- lock = vim.fn.stdpath("data") .. "/paq-lock.json",
- clone_args = { "--recurse-submodules", "--shallow-submodules", "--no-single-branch" }
-}
-
----@enum Messages
-local Messages = {
- install = { ok = "Installed", err = "Failed to install" },
- update = { ok = "Updated", err = "Failed to update", nop = "(up-to-date)" },
- remove = { ok = "Removed", err = "Failed to remove" },
- build = { ok = "Built", err = "Failed to build" },
-}
-
-local Lock = {} -- Table of pgks loaded from the lockfile
-local Packages = {} -- Table of pkgs loaded from the user configuration
-
----@enum Status
-local Status = {
- INSTALLED = 0,
- CLONED = 1,
- UPDATED = 2,
- REMOVED = 3,
- TO_INSTALL = 4,
- TO_MOVE = 5,
- TO_RECLONE = 6,
-}
-
--- stylua: ignore
-local Filter = {
- installed = function(p) return p.status ~= Status.REMOVED and p.status ~= Status.TO_INSTALL end,
- not_removed = function(p) return p.status ~= Status.REMOVED end,
- removed = function(p) return p.status == Status.REMOVED end,
- to_install = function(p) return p.status == Status.TO_INSTALL end,
- to_update = function(p) return p.status ~= Status.REMOVED and p.status ~= Status.TO_INSTALL and not p.pin end,
- to_move = function(p) return p.status == Status.TO_MOVE end,
- to_reclone = function(p) return p.status == Status.TO_RECLONE end,
-}
-
--- Copy environment variables once. Doing it for every process seems overkill.
-local Env = {}
-for var, val in pairs(uv.os_environ()) do
- table.insert(Env, string.format("%s=%s", var, val))
-end
-table.insert(Env, "GIT_TERMINAL_PROMPT=0")
-
--- }}}
--- UTILS: {{{
-
----@return Package
-local function find_unlisted()
- local unlisted = {}
- -- TODO(breaking): Replace with `vim.fs.dir`
- for _, packdir in pairs { "start", "opt" } do
- local path = Config.path .. packdir
- local handle = uv.fs_scandir(path)
- while handle do
- local name, t = uv.fs_scandir_next(handle)
- if t == "directory" and name ~= "paq-nvim" then
- local dir = path .. "/" .. name
- local pkg = Packages[name]
- if not pkg or pkg.dir ~= dir then
- table.insert(unlisted, { name = name, dir = dir })
- end
- elseif not name then
- break
- end
- end
- end
- return unlisted
-end
-
----@param dir Path
----@return string
-local function get_git_hash(dir)
- local first_line = function(path)
- local file = io.open(path)
- if file then
- local line = file:read()
- file:close()
- return line
- end
- end
- local head_ref = first_line(dir .. "/.git/HEAD")
- return head_ref and first_line(dir .. "/.git/" .. head_ref:gsub("ref: ", ""))
-end
-
----@param process string
----@param args string[]
----@param cwd string?
----@param cb function
----@param print_stdout boolean?
-local function run(process, args, cwd, cb, print_stdout)
- local log = uv.fs_open(Config.log, "a+", 0x1A4)
- local stderr = uv.new_pipe(false)
- stderr:open(log)
- local handle, pid
- handle, pid = uv.spawn(
- process,
- { args = args, cwd = cwd, stdio = { nil, print_stdout and stderr, stderr }, env = Env },
- vim.schedule_wrap(function(code)
- uv.fs_close(log)
- stderr:close()
- handle:close()
- cb(code == 0)
- end)
- )
- if not handle then
- vim.notify(string.format(" Paq: Failed to spawn %s (%s)", process, pid))
- end
-end
-
----Return an interator that walks `dir` in post-order.
----@param dir Path
-local function walkdir(dir)
- return coroutine.wrap(function()
- local handle = uv.fs_scandir(dir)
- while handle do
- local name, t = uv.fs_scandir_next(handle)
- if not name then
- return
- elseif t == "directory" then
- for child, t in walkdir(dir .. "/" .. name) do
- coroutine.yield(child, t)
- end
- end
- coroutine.yield(dir .. "/" .. name, t)
- end
- end)
-end
-
----@param dir Path
-local function rmdir(dir)
- for name, t in walkdir(dir) do
- local ok = (t == "directory") and uv.fs_rmdir(name) or uv.fs_unlink(name)
- if not ok then
- return ok
- end
- end
- return uv.fs_rmdir(dir)
-end
-
-
--- }}}
--- LOGGING: {{{
-
----@param pkg Package
----@param prev_hash string
----@param cur_hash string
-local function log_update_changes(pkg, prev_hash, cur_hash)
- local output = { "\n\n" .. pkg.name .. " updated:\n" }
- local stdout = uv.new_pipe()
- local options = {
- args = { "log", "--pretty=format:* %s", prev_hash .. ".." .. cur_hash },
- cwd = pkg.dir,
- stdio = { nil, stdout, nil },
- }
- local handle
- handle, _ = uv.spawn("git", options, function(code)
- assert(code == 0, "Exited(" .. code .. ")")
- handle:close()
- local log = uv.fs_open(Config.log, "a+", 0x1A4)
- uv.fs_write(log, output, nil, nil)
- uv.fs_close(log)
- end)
- stdout:read_start(function(err, data)
- assert(not err, err)
- table.insert(output, data)
- end)
-end
-
----@param name string
----@param msg_op Messages
----@param result boolean
----@param n integer
----@param total integer
-local function report(name, msg_op, result, n, total)
- local count = n and string.format(" [%d/%d]", n, total) or ""
- vim.notify(
- string.format(" Paq:%s %s %s", count, msg_op[result], name),
- result == "err" and vim.log.levels.ERROR or vim.log.levels.INFO
- )
-end
-
----Object to track result of operations (installs, updates, etc.)
----@param total integer
----@param callback function
-local function new_counter(total, callback)
- return coroutine.wrap(function()
- local c = { ok = 0, err = 0, nop = 0 }
- while c.ok + c.err + c.nop < total do
- local name, msg_op, result = coroutine.yield(true)
- c[result] = c[result] + 1
- if result ~= "nop" or Config.verbose then
- report(name, msg_op, result, c.ok + c.nop, total)
- end
- end
- callback(c.ok, c.err, c.nop)
- return true
- end)
-end
-
-
--- }}}
--- LOCKFILE: {{{
-
-local function lock_write()
- -- remove run key since can have a function in it, and
- -- json.encode doesn't support functions
- local pkgs = vim.deepcopy(Packages)
- for p, _ in pairs(pkgs) do
- pkgs[p].build = nil
- end
- local file = uv.fs_open(Config.lock, "w", 438)
- if file then
- local ok, result = pcall(vim.json.encode, pkgs)
- if not ok then
- error(result)
- end
- assert(uv.fs_write(file, result))
- assert(uv.fs_close(file))
- end
- Lock = Packages
-end
-
-local function lock_load()
- -- don't really know why 438 see ':h uv_fs_t'
- local file = uv.fs_open(Config.lock, "r", 438)
- if file then
- local stat = assert(uv.fs_fstat(file))
- local data = assert(uv.fs_read(file, stat.size, 0))
- assert(uv.fs_close(file))
- local ok, result = pcall(vim.json.decode, data)
- if ok then
- Lock = not vim.tbl_isempty(result) and result or Packages
- -- Repopulate 'build' key so 'vim.deep_equal' works
- for name, pkg in pairs(result) do
- pkg.build = Packages[name] and Packages[name].build or nil
- end
- end
- else
- lock_write()
- Lock = Packages
- end
-end
-
--- }}}
--- PKGS: {{{
-
----@class Package
----@field name string
----@field as string
----@field branch string
----@field shallow boolean
----@field dir string
----@field status Status
----@field hash string
----@field pin boolean
----@field build string | function
----@field url string
-
----@param pkg Package
----@param counter function
----@param build_queue table
-local function clone(pkg, counter, build_queue)
- local args = vim.list_extend({ "clone", pkg.url }, Config.clone_args)
- if pkg.shallow then
- vim.list_extend(args, { "--depth=1" })
- end
- if pkg.branch then
- vim.list_extend(args, { "-b", pkg.branch })
- end
- table.insert(args, pkg.dir)
- run("git", args, nil, function(ok)
- if ok then
- pkg.status = Status.CLONED
- lock_write()
- if pkg.build then
- table.insert(build_queue, pkg)
- end
- end
- counter(pkg.name, Messages.install, ok and "ok" or "err")
- end)
-end
-
----@param pkg Package
----@param counter function
----@param build_queue table
-local function pull(pkg, counter, build_queue)
- local prev_hash = Lock[pkg.name] and Lock[pkg.name].hash or pkg.hash
- run("git", { "pull", "--recurse-submodules", "--update-shallow" }, pkg.dir, function(ok)
- if not ok then
- counter(pkg.name, Messages.update, "err")
- else
- local cur_hash = pkg.hash
- if cur_hash ~= prev_hash then
- log_update_changes(pkg, prev_hash, cur_hash)
- pkg.status = Status.UPDATED
- lock_write()
- counter(pkg.name, Messages.update, "ok")
- if pkg.build then
- table.insert(build_queue, pkg)
- end
- else
- counter(pkg.name, Messages.update, "nop")
- end
- end
- end)
-end
-
----@param pkg Package
----@param counter function
----@param build_queue table
-local function clone_or_pull(pkg, counter, build_queue)
- if Filter.to_update(pkg) then
- pull(pkg, counter, build_queue)
- elseif Filter.to_install(pkg) then
- clone(pkg, counter, build_queue)
- end
-end
-
----Move package to wanted location.
----@param src Package
----@param dst Package
-local function move(src, dst)
- local ok = uv.fs_rename(src.dir, dst.dir)
- if ok then
- dst.status = Status.INSTALLED
- lock_write()
- end
-end
-
----@param pkg Package
-local function run_build(pkg)
- local t = type(pkg.build)
- if t == "function" then
- local ok = pcall(pkg.build)
- report(pkg.name, Messages.build, ok and "ok" or "err")
- elseif t == "string" and pkg.build:sub(1, 1) == ":" then
- local ok = pcall(vim.cmd, pkg.build)
- report(pkg.name, Messages.build, ok and "ok" or "err")
- elseif t == "string" then
- local args = {}
- for word in pkg.build:gmatch("%S+") do
- table.insert(args, word)
- end
- run(table.remove(args, 1), args, pkg.dir, function(ok)
- report(pkg.name, Messages.build, ok and "ok" or "err")
- end)
- end
-end
-
----@param pkg Package
-local function reclone(pkg, counter, build_queue)
- local ok = rmdir(pkg.dir)
- if not ok then
- return
- end
- local args = vim.list_extend({ "clone", pkg.url }, Config.clone_args)
- if pkg.branch then
- vim.list_extend(args, { "-b", pkg.branch })
- end
- table.insert(args, pkg.dir)
- run("git", args, nil, function(ok)
- if ok then
- pkg.status = Status.INSTALLED
- pkg.hash = get_git_hash(pkg.dir)
- lock_write()
- if pkg.build then
- table.insert(build_queue, pkg)
- end
- end
- end)
-end
-
-local function resolve(pkg, counter, build_queue)
- if Filter.to_move(pkg) then
- move(pkg, Packages[pkg.name])
- elseif Filter.to_reclone(pkg) then
- reclone(Packages[pkg.name], counter, build_queue)
- end
-end
-
----@param pkg Package
-local function register(pkg)
- if type(pkg) == "string" then
- pkg = { pkg }
- end
- local url = pkg.url
- or (pkg[1]:match("^https?://") and pkg[1]) -- [1] is a URL
- or string.format(Config.url_format, pkg[1]) -- [1] is a repository name
- local name = pkg.as or url:gsub("%.git$", ""):match("/([%w-_.]+)$") -- Infer name from `url`
- if not name then
- return vim.notify(" Paq: Failed to parse " .. vim.inspect(pkg), vim.log.levels.ERROR)
- end
- local opt = pkg.opt or Config.opt and pkg.opt == nil
- local dir = Config.path .. (opt and "opt/" or "start/") .. name
- Packages[name] = {
- name = name,
- branch = pkg.branch,
- shallow = pkg.shallow == nil or pkg.shallow,
- dir = dir,
- status = uv.fs_stat(dir) and Status.INSTALLED or Status.TO_INSTALL,
- hash = get_git_hash(dir),
- pin = pkg.pin,
- build = pkg.build or pkg.run,
- url = url,
- }
- if pkg.run then
- vim.deprecate("`run` option", "`build`", "3.0", "Paq", false)
- end
-end
-
----@param pkg Package
----@param counter function
-local function remove(pkg, counter)
- local ok = rmdir(pkg.dir)
- counter(pkg.name, Messages.remove, ok and "ok" or "err")
- if ok then
- Packages[pkg.name] = { name = pkg.name, status = Status.REMOVED }
- lock_write()
- end
-end
-
----@alias Operation
----| '"install"'
----| '"update"'
----| '"remove"'
----| '"build"'
----| '"resolve"'
----| '"sync"'
-
----Boilerplate around operations (autocmds, counter initialization, etc.)
----@param op Operation
----@param fn function
----@param pkgs Package[]
----@param silent boolean?
-local function exe_op(op, fn, pkgs, silent)
- if #pkgs == 0 then
- if not silent then
- vim.notify(" Paq: Nothing to " .. op)
- end
- vim.cmd("doautocmd User PaqDone" .. op:gsub("^%l", string.upper))
- return
- end
-
- local build_queue = {}
-
- local function after(ok, err, nop)
- local summary = " Paq: %s complete. %d ok; %d errors;" .. (nop > 0 and " %d no-ops" or "")
- vim.notify(string.format(summary, op, ok, err, nop))
- vim.cmd("packloadall! | silent! helptags ALL")
- if #build_queue ~= 0 then
- exe_op("build", run_build, build_queue)
- end
- vim.cmd("doautocmd User PaqDone" .. op:gsub("^%l", string.upper))
- end
-
- local counter = new_counter(#pkgs, after)
- counter() -- Initialize counter
-
- for _, pkg in pairs(pkgs) do
- fn(pkg, counter, build_queue)
- end
-end
-
--- }}}
--- DIFFS: {{{
-
-local function diff_gather()
- local diffs = {}
- for name, lock_pkg in pairs(Lock) do
- local pack_pkg = Packages[name]
- if pack_pkg and Filter.not_removed(lock_pkg) and not vim.deep_equal(lock_pkg, pack_pkg) then
- for k, v in pairs {
- dir = Status.TO_MOVE,
- branch = Status.TO_RECLONE,
- url = Status.TO_RECLONE,
- } do
- if lock_pkg[k] ~= pack_pkg[k] then
- lock_pkg.status = v
- table.insert(diffs, lock_pkg)
- end
- end
- end
- end
- return diffs
-end
-
-
--- }}}
--- PUBLIC API: {{{
-
-local paq = {}
-
----Installs all packages listed in your configuration. If a package is already
----installed, the function ignores it. If a package has a `build` argument,
----it'll be executed after the package is installed.
-function paq.install() exe_op("install", clone, vim.tbl_filter(Filter.to_install, Packages)) end
-
----Updates the installed packages listed in your configuration. If a package
----hasn't been installed with |PaqInstall|, the function ignores it. If a
----package had changes and it has a `build` argument, then the `build` argument
----will be executed.
-function paq.update() exe_op("update", pull, vim.tbl_filter(Filter.to_update, Packages)) end
-
----Removes packages found on |paq-dir| that aren't listed in your
----configuration.
-function paq.clean() exe_op("remove", remove, find_unlisted()) end
-
----Executes |paq.clean|, |paq.update|, and |paq.install|. Note that all
----paq operations are performed asynchronously, so messages might be printed
----out of order.
-function paq:sync()
- self:clean()
- exe_op("sync", clone_or_pull, vim.tbl_filter(Filter.not_removed, Packages))
-end
-
----@param opts setup_opts
-function paq:setup(opts)
- for k, v in pairs(opts) do
- Config[k] = v
- end
- return self
-end
-
-function paq.list()
- local installed = vim.tbl_filter(Filter.installed, Lock)
- local removed = vim.tbl_filter(Filter.removed, Lock)
- local function sort_by_name(t)
- table.sort(t, function(a, b) return a.name < b.name end)
- end
- sort_by_name(installed)
- sort_by_name(removed)
- local markers = { "+", "*" }
- for header, pkgs in pairs { ["Installed packages:"] = installed, ["Recently removed:"] = removed } do
- if #pkgs ~= 0 then
- print(header)
- for _, pkg in ipairs(pkgs) do
- print(" ", markers[pkg.status] or " ", pkg.name)
- end
- end
- end
-end
-
-function paq.log_open() vim.cmd("sp " .. Config.log) end
-
-function paq.log_clean() return assert(uv.fs_unlink(Config.log)) and vim.notify(" Paq: log file deleted") end
-
-local meta = {}
-
----The `paq` module is itself a callable object. It takes as argument a list of
----packages. Each element of the list can be a table or a string.
----
----When the element is a table, the first value has to be a string with the
----name of the repository, like: `'<GitHub-username>/<repository-name>'`.
----The other key-value pairs in the table have to be named explicitly, see
----|paq-options|. When the element is a string, it works as if it was the first
----value of the table, and all other options will be set to their default
----values.
----
----Note: Lua can elide parentheses when passing a single table argument to a
----function, so you can always call `paq` without parentheses.
----See |luaref-langFuncCalls|.
-function meta:__call(pkgs)
- Packages = {}
- vim.tbl_map(register, pkgs)
- lock_load()
- exe_op("resolve", resolve, diff_gather(), true)
- return self
-end
-
-setmetatable(paq, meta)
-
-for cmd_name, fn in pairs {
- PaqInstall = paq.install,
- PaqUpdate = paq.update,
- PaqClean = paq.clean,
- PaqList = paq.list,
- PaqLogOpen = paq.log_open,
- PaqLogClean = paq.log_clean,
-}
-do
- vim.api.nvim_create_user_command(cmd_name, function(_) fn() end, { bar = true })
-end
-
--- stylua: ignore
-do
- local build_cmd_opts = {
- bar = true,
- nargs = 1,
- complete = function() return vim.tbl_keys(vim.tbl_map(function(pkg) return pkg.build end, Packages)) end,
- }
- vim.api.nvim_create_user_command("PaqSync", function() paq:sync() end, { bar = true })
- vim.api.nvim_create_user_command("PaqBuild", function(a) run_build(Packages[a.args]) end, build_cmd_opts)
- vim.api.nvim_create_user_command("PaqRunHook", function(a)
- vim.deprecate("`PaqRunHook` command", "`PaqBuild`", "3.0", "Paq", false)
- run_build(Packages[a.args])
- end, build_cmd_opts)
-end
-
-return paq
-
--- }}}
--- vim: foldmethod=marker foldlevel=1
diff --git a/.config/nvim/lua/plugins.lua b/.config/nvim/lua/plugins.lua
@@ -1,15 +1,14 @@
-local ret = require("paq") {
- "sheerun/vim-polyglot", -- languages syntax
- "tpope/vim-fugitive", -- git wrapper
- "tpope/vim-surround", -- add surrounding as objects
- "tpope/vim-repeat", -- dependency of vim-surround
- "tpope/vim-commentary", -- easily comment code
- "tpope/vim-eunuch", -- helpers for UNIX shell commands
- "nvim-telescope/telescope.nvim", -- fuzzy finding
- "nvim-lua/plenary.nvim", -- dependency of telescope
- "vimwiki/vimwiki", -- create a wiki with vim!
- { url="https://dev.sanctum.geek.nz/code/vim-redact-pass.git", shallow=false }, -- disable leaky options when editing passwords with pass
-}
+vim.pack.add({
+ "https://github.com/sheerun/vim-polyglot", -- languages syntax
+ "https://github.com/tpope/vim-fugitive", -- git wrapper
+ "https://github.com/tpope/vim-surround", -- add surrounding as objects
+ "https://github.com/tpope/vim-repeat", -- dependency of vim-surround
+ "https://github.com/tpope/vim-commentary", -- easily comment code
+ "https://github.com/tpope/vim-eunuch", -- helpers for UNIX shell commands
+ "https://github.com/nvim-telescope/telescope.nvim", -- fuzzy finding
+ "https://github.com/nvim-lua/plenary.nvim", -- dependency of telescope
+ "https://github.com/vimwiki/vimwiki", -- create a wiki with vim!
+}, { load = true })
-- don't run the package configs if we are doing the initial bootstrap
if vim.g.headless_bootstrap then
@@ -17,9 +16,14 @@ if vim.g.headless_bootstrap then
end
+vim.api.nvim_create_user_command('PackUpdate', function()
+ vim.pack.update()
+end, {})
+
+
do -- vim-commentary
vim.cmd [[
- augroup paq_vimcommentary
+ augroup plugin_vimcommentary
autocmd!
autocmd FileType apache,crontab setlocal commentstring=#\ %s
augroup END
@@ -65,6 +69,3 @@ do -- vimwiki
["custom_wiki2html_args"] = "toc.md " .. vw_categories_str -- first argument is TOC file, then all the categories
}}
end
-
-
-return ret
diff --git a/.local/share/vimwiki/wiki2html.py b/.local/share/vimwiki/wiki2html.py
@@ -39,7 +39,7 @@ def get_file_metadata_and_text(file, wiki_path, categories):
text = text[end:]
# read title and remove from text
- match = re.match('# (.+?)\s*\n', text)
+ match = re.match(r'# (.+?)\s*\n', text)
if match is not None:
metadata['title'] = match.group(1)
text = text[match.end():]
@@ -47,7 +47,7 @@ def get_file_metadata_and_text(file, wiki_path, categories):
metadata['title'] = metadata['path']
# read description
- match = re.match('\*([^* ].+?)\*\s*\n', text)
+ match = re.match(r'\*([^* ].+?)\*\s*\n', text)
if match is not None:
metadata['description'] = match.group(1)
@@ -97,13 +97,13 @@ def wiki_to_html(input_file, output_file, template_file, root_path, wiki_path, c
params, text = get_file_metadata_and_text(input_file, wiki_path, categories)
# format links for HTML
- text = re.sub('\[([^]]+)\]\(([^)#]*)(?:#([^)]*))?\)', lambda m: href_to_html(m, wiki_path, root_path), text)
+ text = re.sub(r'\[([^]]+)\]\(([^)#]*)(?:#([^)]*))?\)', lambda m: href_to_html(m, wiki_path, root_path), text)
# add support for TODOs
- text = re.sub('^([ \t]*- )\[ \] ', lambda m : m.group(1) + '<img class="checkbox-0"> ', text, flags=re.MULTILINE)
- text = re.sub('^([ \t]*- )\[\.\] ', lambda m : m.group(1) + '<img class="checkbox-1"> ', text, flags=re.MULTILINE)
- text = re.sub('^([ \t]*- )\[o\] ', lambda m : m.group(1) + '<img class="checkbox-2"> ', text, flags=re.MULTILINE)
- text = re.sub('^([ \t]*- )\[O\] ', lambda m : m.group(1) + '<img class="checkbox-3"> ', text, flags=re.MULTILINE)
- text = re.sub('^([ \t]*- )\[X\] ', lambda m : m.group(1) + '<img class="checkbox-4"> ', text, flags=re.MULTILINE)
+ text = re.sub(r'^([ \t]*- )\[ \] ', lambda m : m.group(1) + '<img class="checkbox-0"> ', text, flags=re.MULTILINE)
+ text = re.sub(r'^([ \t]*- )\[\.\] ', lambda m : m.group(1) + '<img class="checkbox-1"> ', text, flags=re.MULTILINE)
+ text = re.sub(r'^([ \t]*- )\[o\] ', lambda m : m.group(1) + '<img class="checkbox-2"> ', text, flags=re.MULTILINE)
+ text = re.sub(r'^([ \t]*- )\[O\] ', lambda m : m.group(1) + '<img class="checkbox-3"> ', text, flags=re.MULTILINE)
+ text = re.sub(r'^([ \t]*- )\[X\] ', lambda m : m.group(1) + '<img class="checkbox-4"> ', text, flags=re.MULTILINE)
params['metadata'] = ''
if params['category'] != categories[0]:
diff --git a/README.md b/README.md
@@ -83,7 +83,7 @@ Enable PulseAudio and syncthing, download neovim plugins:
```
systemctl --user enable pulseaudio.service
sudo systemctl enable "syncthing@$USER.service"
-nvim --headless -u NONE -c 'lua require("bootstrap-paq").run()'
+nvim --headless '+qa'
```
Finally, don't forget to put your wallpaper under
@@ -91,7 +91,7 @@ Finally, don't forget to put your wallpaper under
## License
-Copyright (C) 2019-2022 Oscar Benedito
+Copyright (C) 2019-2026 Oscar Benedito
This repository is licensed under the CC0 1.0 Universal license and therefore is
part of the public domain. To the extent possible under law, the person who