Skip to content
/ LazyDo Public

A little smart todo/task manager made for `neovim` enthusiasts.

License

Notifications You must be signed in to change notification settings

Dan7h3x/LazyDo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 

Repository files navigation

LazyDo

A smart, feature-rich task/todo manager for neovim lovers

ScreenshotsFeaturesInstallationUsageConfiguration

... made with love ...

 Screenshots

A demo video for LazyDo: LazyDo

Screenshots for LazyDo:

main panel main panel

`lualine` integration `lualine` integration

pin window pin window for having pending task everywhere

multiline note editor 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 (WIP)
  • 󰁦 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").get_lualine_stats() -- status
        end,
        cond = function()
          return require("lazydo")._initialized  -- condition for lualine
        end,
      })
    end,
  }

Usage

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 window

    • a - Add new task
    • A - Add subtask
    • <leader>a - Quick Task
    • 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
    • n - Add/edit note
    • p - Toggle priority
    • t - Add tags
    • T - Edit tags
    • z - Toggle fold and more in help window using ?.
  • :LazyDoPin position

    • available positions are {default:topright,topleft,bottomright,bottomleft}.
  • :LazyDoToggleStorage mode

    • available modes are project and global

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 = {
    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 },
      },
    },
  },
}

🤝 Contributing

Contributors are welcome here and thank you btw.

About

A little smart todo/task manager made for `neovim` enthusiasts.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages