A smart, feature-rich task/todo manager for neovim lovers
Screenshots • Features • Installation • Usage • Configuration
... made with love ...
Screenshots for LazyDo
:
pin window for having pending task everywhere
- Intuitive task management with subtasks support
- Customizable themes and icons
- Due dates and reminders
- 🏷️ Task tagging and categorization
- 🔍 Advanced sorting
- Task relationships and dependencies
- (*) Smart Storage
- 📊 Progress tracking and filtering (WIP)
- File attachments (WIP)
Using lazy.nvim:
return {
{
"Dan7h3x/LazyDo",
branch = "main",
cmd = {"LazyDoToggle","LazyDoPin","LazyDoToggleStorage"},
keys = { -- recommended keymap for easy toggle LazyDo in normal and insert modes (arbitrary)
{
"<F2>","<ESC><CMD>LazyDoToggle<CR>",
mode = {"n","i"},
},
},
event = "VeryLazy",
opts = {
-- your config here
},
},
}
and integration with lualine.nvim
:
{
"nvim-lualine/lualine.nvim",
event = "VeryLazy",
opts = function(_, opts)
table.insert(opts.sections.lualine_x, {
function()
return require("lazydo").get_lualine_stats() -- status
end,
cond = function()
return require("lazydo")._initialized -- condition for lualine
end,
})
end,
}
Warning
For having pin window
or storage toggling
first spawn LazyDoToggle
to load plugin up just
once, when ever you enter neovim
.
-
:
LazyDoToggle
- Toggle the task manager windowa
- Add new taskA
- Add subtask<leader>a
- Quick Taskd
- Delete taske
- Edit taskD
- Set due dateK
- Move task upJ
- Move task downi
- Toggle infom
- Add metadataM
- Edit metadatan
- Add/edit notep
- Toggle priorityt
- Add tagsT
- Edit tagsz
- Toggle fold and more in help window using?
.
-
:
LazyDoPin position
- available positions are {default:
topright
,topleft
,bottomright
,bottomleft
}.
- available positions are {default:
-
:
LazyDoToggleStorage mode
- available modes are
project
andglobal
- available modes are
Example Dates:
- YYYY-MM-DD (like 2025-01-15)
- MM/DD (03/15)
- Nd (3d = 3 days)
- Nw (2w = 2 weeks)
- Nm (1m = 1 month)
- Ny (1y = 1 year)
- today
- tomorrow
- next week
- next month
- leave empty to clear
All available options:
{
title = " LazyDo Tasks ",
layout = {
width = 0.7, -- Percentage of screen width
height = 0.8, -- Percentage of screen height
spacing = 1, -- Lines between tasks
task_padding = 1, -- Padding around task content
},
pin_window = {
enabled = true,
width = 50,
max_height = 10,
position = "topright", -- "topright", "topleft", "bottomright", "bottomleft"
title = " LazyDo Tasks ",
auto_sync = true, -- Enable automatic synchronization with main window
colors = {
border = { fg = "#3b4261" },
title = { fg = "#7dcfff", bold = true },
},
},
storage = {
global_path = nil, -- Custom storage path (nil means use default)
project = {
enabled = false,
use_git_root = true,
path_pattern = "s/.lazydo/tasks.json",
},
auto_backup = true,
backup_count = 1,
compression = true,
encryption = false,
},
theme = {
border = "rounded",
colors = {
header = { fg = "#7aa2f7", bold = true },
title = { fg = "#7dcfff", bold = true },
task = {
pending = { fg = "#a9b1d6" },
done = { fg = "#56ff89", italic = true },
overdue = { fg = "#f7768e", bold = true },
blocked = { fg = "#f7768e", italic = true },
in_progress = { fg = "#7aa2f7", bold = true },
info = { fg = "#78ac99", italic = true },
},
priority = {
high = { fg = "#f7768e", bold = true },
medium = { fg = "#e0af68" },
low = { fg = "#9ece6a" },
urgent = { fg = "#db4b4b", bold = true, undercurl = true },
},
storage = { fg = "#a24db3", bold = true },
notes = {
header = {
fg = "#7dcfff",
bold = true,
},
body = {
fg = "#d9a637",
italic = true,
},
border = {
fg = "#3b4261",
},
icon = {
fg = "#fdcfff",
bold = true,
},
},
due_date = {
fg = "#bb9af7",
near = { fg = "#e0af68", bold = true },
overdue = { fg = "#f7768e", undercurl = true },
},
progress = {
complete = { fg = "#9ece6a" },
partial = { fg = "#e0af68" },
none = { fg = "#f7768e" },
},
separator = {
fg = "#3b4261",
vertical = { fg = "#3b4261" },
horizontal = { fg = "#3b4261" },
},
help = {
fg = "#c0caf5",
key = { fg = "#7dcfff", bold = true },
text = { fg = "#c0caf5", italic = true },
},
fold = {
expanded = { fg = "#7aa2f7", bold = true },
collapsed = { fg = "#7aa2f7" },
},
indent = {
line = { fg = "#3b4261" },
connector = { fg = "#3bf2f1" },
indicator = { fg = "#fb42f1", bold = true },
},
search = {
match = { fg = "#c0caf5", bold = true },
},
selection = { fg = "#c0caf5", bold = true },
cursor = { fg = "#c0caf5", bold = true },
},
progress_bar = {
width = 15,
filled = "█",
empty = "░",
enabled = true,
style = "modern", -- "classic", "modern", "minimal"
},
indent = {
connector = "├─",
last_connector = "└─",
},
},
icons = {
task_pending = "",
task_done = "",
priority = {
low = "",
medium = "",
high = "",
urgent = "",
},
created = "",
updated = "",
note = "",
relations = " ",
due_date = "",
recurring = {
daily = "",
weekly = "",
monthly = "",
},
metadata = "",
important = "",
},
features = {
task_info = {
enabled = true,
},
folding = {
enabled = true,
default_folded = false,
icons = {
folded = "▶",
unfolded = "▼",
},
},
tags = {
enabled = true,
colors = {
fg = "#7aa2f7",
},
prefix = " ",
},
relations = {
enabled = true,
},
metadata = {
enabled = true,
colors = {
key = { fg = "#f0caf5", bg = "#bb9af7", bold = true },
value = { fg = "#c0faf5", bg = "#7dcfff" },
section = { fg = "#00caf5", bg = "#bb9af7", bold = true, italic = true },
},
},
},
}
Contributors are welcome here and thank you btw.