A little smart todo/task manager made for enthusiasts.
LazyDo
A smart, feature-rich task/todo manager
Screenshots โข Features โข Installation โข Usage โข Configuration
... made with love ...
๎ Screenshots
A demo video for LazyDo:
Screenshots for LazyDo:
main panel
lualine integration
pin window for having pending task everywhere
multi-line note editor
โจ Features
- ๏ฎ 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
- ๓ฐฆ File attachments (WIP)
๐ฆ Installation
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").getlualinestats() -- status
end,
cond = function()
return require("lazydo")._initialized -- condition for lualine
end,
})
end,
}
Usage
[!WARNING]
For havingpin windoworstorage togglingfirst spawnLazyDoToggleto load plugin up just
once, when ever you enter neovim.
- :
LazyDoToggle- Toggle the task manager window
a - Add new task
- A - Add subtask
- <leader>a - Quick Task
- <leader>A - Quick Subtask
- d - Delete task
- e - Edit task
- D - Set due date
- K - Move task up
- J - Move task down
- i - Toggle info
- m - Add metadata
- M - Edit metadata
- L/l - Set/Show relationships
- n - Add/edit note
- p - Toggle priority
- t - Add tags
- T - Edit tags
- q - Close window
- x/X - Convert Task to Subtask and vice verse
- z - Toggle fold
and more in help window using ?.
- :
LazyDoPin position
topright,topleft,bottomright,bottomleft}.
- :
LazyDoToggleStorage mode
project and global and custom.
(the auto mode is under development)
Valid dates
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
๐ง Configuration
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 = {
startup_detect = false, -- Enable auto-detection of projects on startup
silent = false, -- Disable notifications when switching storage mode
global_path = nil, -- Custom storage path (nil means use default)
project = {
enabled = false,
usegitroot = true,
auto_detect = false, -- Auto-detect project and switch storage mode
markers = { ".git", ".lazydo", "package.json", "Cargo.toml", "go.mod" }, -- Project markers
},
auto_backup = true,
backup_count = 1,
compression = true,
encryption = false,
readable = false, -- Formatted JSON for readability and easy diffing
-- Note: incompatible with compression and encryption
},
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 = "โโ",
},
task_separator = {
left = "๎ถ",
right = "๎ด",
center = "โ"
},
},
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 }, }, }, }, }
๐ค Contributing
Contributors are welcome here and thank you btw.