CLI todo manager for iCalendar files.

tdx

tdx is a todo manager for iCalendar files.

It is designed to work with Vdirsyncer and expects to operate in its storage format.

iCalendar-compatibility means it can be used as a CLI companion to any CalDAV-enabled todo program, such as iOS Reminders. See more on how to set up calendars and synchronization in Vdirsyncer documentation.

Features

  • adding todos

    • automatic date and priority parsing

  • listing todos

    • sorting and filtering by fields

    • automatic hashtag parsing and output organized by tags

  • completing todos

  • editing todos in a $VISUAL/$EDITOR program

  • deleting todos

  • purging completed/cancelled todos

Demo

Quick demo of basic interactions
demo.mp4

Usage

General usage
> tdx -h
tdx -- todo manager for vdir (iCalendar) files
Gadzhi Kharkharov <[email protected]>

USAGE
  tdx <command> [options] [<args>...]

COMMANDS
  list, ls       list todos
  add, a         add todo
  done, do       complete todos
  edit, e        edit todo
  delete, del    delete todos
  purge          remove completed todos
  show           show todo info

  See 'tdx <command> -h' for command usage

ENVIRONMENT VARIABLES
  TDX_PATH (required)
        path to vdir directory;
        either root vdir directory with multiple collections
        or direct path to a single collection.
  TDX_LIST_OPTS
        default options for <list> command, see 'tdx list -h';
        for example, to organize by tags and use a specified list:
        TDX_LIST_OPTS='-t -l myList'
  TDX_ADD_OPTS
        default options for <add> command, see 'tdx add -h';
        for example, to use a default list for new todos:
        TDX_ADD_OPTS='-l myList'
  NO_COLOR
        disable colors in output

FLAGS
  -v    print version
  -h    print help
Adding todos
> tdx add -h
Add new todo

USAGE
  tdx add [options] <todo>

DUE DATE
  If todo text contains a date in one of the following
  formats, it will be applied as due date:
  * "today", "tomorrow", "in 3 days", "in 2 weeks"
  * "next week", "next month", "next monday"
  * ordinal date: "december 1st", "15th november"

PRIORITY
  If todo text contains one or more "!" chars,
  they will be converted to priority:
  * "!!!" (high)
  * "!!"  (medium)
  * "!"   (low)

OPTIONS
  -d description
        description text
  -l list
        list for new todo

Configuration

tdx is configured through environment variables.

TDX_PATH (required)

path to vdir directory;
either root path containing multiple collections or path to specific collection containing *.ics files

TDX_LIST_OPTS

default options for <list> command, see tdx list -h;
for example, to organize by tags and use a specified list:
TDX_LIST_OPTS='-t -l myList'

TDX_ADD_OPTS

default options for <add> command, see tdx add -h;
for example, to use a default list for new todos:
TDX_ADD_OPTS='-l myList'

NO_COLOR

disables color in output

Installation

From release binaries

Download the compiled binary for your system from Releases page and put it somewhere in your $PATH.

From source

Requires Go installed on your system.

Clone the repository and run go build, then copy the compiled binary somewhere in your $PATH.

If Go is configured to install packages in $PATH, it’s also possible to install without cloning the repository:

go install github.com/kkga/tdx@latest
Owner
Gadzhi Kharkharov
~designer
Gadzhi Kharkharov
Comments
  • ical: malformed param value: illegal double-quote

    ical: malformed param value: illegal double-quote

    I'm seeing ical: malformed param value: illegal double-quote for this entry:

    It seems to have some funky quotes in the X-APPLE-STRUCTURED-LOCATION attribute. I think it's standards-complaint, since other tools / libs don't complain about it.

    Here's a sample:

    BEGIN:VCALENDAR
    CALSCALE:GREGORIAN
    PRODID:-//Apple Inc.//iOS 10.2.1//EN
    VERSION:2.0
    BEGIN:VTIMEZONE
    TZID:America/Argentina/Buenos_Aires
    BEGIN:DAYLIGHT
    DTSTART:20071230T000000
    RDATE:20071230T000000
    RDATE:20081019T000000
    TZNAME:GMT-3
    TZOFFSETFROM:-0300
    TZOFFSETTO:-0200
    END:DAYLIGHT
    BEGIN:STANDARD
    DTSTART:20080316T000000
    RRULE:FREQ=YEARLY;UNTIL=20090315T020000Z;BYDAY=3SU;BYMONTH=3
    TZNAME:GMT-3
    TZOFFSETFROM:-0200
    TZOFFSETTO:-0300
    END:STANDARD
    END:VTIMEZONE
    BEGIN:VEVENT
    CREATED:20170308T193554Z
    DTEND;TZID=America/Argentina/Buenos_Aires:20170308T220000
    DTSTAMP:20170308T193557Z
    DTSTART;TZID=America/Argentina/Buenos_Aires:20170308T190000
    LAST-MODIFIED:20170308T193554Z
    LOCATION:Home\nSome street 123\nApt "A"\nXXXX 
     CABA\nArgentina\nArgentina
    SEQUENCE:0
    SUMMARY:Broken entry lala
    TRANSP:OPAQUE
    UID:2F7602ED-B76E-468D-8A36-CBB45988613E
    X-APPLE-STRUCTURED-LOCATION;VALUE=URI;X-ADDRESS=Some street 123\\nApt 
     \"A\"\\nXXXX CABA\\nArgentina\\nArgentina;X-APPLE-ABUID="ab://Home";
     X-APPLE-RADIUS=0;X-APPLE-REFERENCEFRAME=1;X-TITLE=Home:geo:
     -34.123455,-58.123456
    END:VEVENT
    END:VCALENDAR
    
  • cobra

    cobra

    • minor: update envrc
    • add filter interface
    • minor: update testdata
    • update item
    • use new filter types in list
    • todo
    • move filter and sort types into single file
    • add exclude tag filter
    • use lowercase for tag parsing
    • simplify tag filters
    • start migrating to cobra
  • Set up go linting via GitHub Actions

    Set up go linting via GitHub Actions

    This sets up linting to run on pushes to main and pull requests.

    It mostly detects errors like ineffectual assignments, errors not being checked, unread parameters and things like that.

    The pipeline won't run on forks, but I think I got all the obvious cases in #11.

  • Don't exit on corrupted ical data

    Don't exit on corrupted ical data

    Currently the program exits if there's a corrupted file in vdir collections. It would be better to skip and report the file, while continue working on the rest of data.

  • Add sorting options to list command

    Add sorting options to list command

    • simple sorting
    • WIP
    • WIP
    • fix flags for status and sort conflicting with env config
    • implement sorting by due date
    • status sorting
    • minor
    • docs: update help
    • minor: move version flag to root
    • add sorting by status
  • A new empty list prevents tasks to be created

    A new empty list prevents tasks to be created

    Thanks for this awesome CLI tool! Was looking for something like this for a while.

    As the title says, it's currently impossible to create a task in a directory that doesn't contain a file with an *.ics extension (or any other extension configured).

    This method https://github.com/kkga/tdx/blob/main/vdir/vdir.go#L131-L139 seems to prevent it. Do we need to check the existence of a file?

painless task queue manager for shell commands with an intuitive cli interface (execute shell commands in distributed cloud-native queue manager).

EXEQ DOCS STILL IN PROGRESS. Execute shell commands in queues via cli or http interface. Features Simple intuitive tiny cli app. Modular queue backend

Dec 14, 2022
A CLI application that allows you to run a complete ToDo app from your terminal application

todo-cli This is a CLI application that allows you to run a complete ToDo app from your terminal application. As a user you can: Create a list of todo

Oct 11, 2021
Simple Todo List - Wunderlist Replacement
Simple Todo List - Wunderlist Replacement

DoIT Todo List This is a simple todo-list made with Vue(frontend) and a simple webserver written in Go(backend). Note that this started out as a simpl

Oct 9, 2022
Golang Todo App with rpc protocol,k8s,github actions
Golang Todo App with rpc protocol,k8s,github actions

go-todo-app-rpc Golang Todo App with rpc protocol ,k8s, github actions using docker-compose locally docker-compose build docker-compose up Open http

Nov 28, 2021
Simple todo app web application created with Go and MySQL.

TodoApp This is a project I've always wanted to do, it's simple, but to be says it involves to use different techniques in order to have a: authentica

Dec 21, 2021
Todo-cmd: an app you can add your tasks , edit or delete them

TODO CMD APP! ??‍♂️ Table of contents General info Update Requirements set-up usage General info todo-cmd is an app you can add your tasks , edit or d

Dec 13, 2021
tinygo-used-files is a CLI tool that lists only the files to be built as specified by buildtag.

tinygo-used-files is a CLI tool that lists only the files to be built as specified by buildtag.

Feb 6, 2022
Related is a simple cli utility tool to create files or a group of files.

Related - Create files based on individual definitions or groups Related helps with common file-creation-based tasks. You can predefine single types a

Apr 16, 2022
Go-file-downloader-ftctl - A file downloader cli built using golang. Makes use of cobra for building the cli and go concurrent feature to download files.

ftctl This is a file downloader cli written in Golang which uses the concurrent feature of go to download files. The cli is built using cobra. How to

Jan 2, 2022
:zap: boilerplate template manager that generates files or directories from template repositories
:zap: boilerplate template manager that generates files or directories from template repositories

Boilr Are you doing the same steps over and over again every time you start a new programming project? Boilr is here to help you create projects from

Jan 6, 2023
Secure, private and feature-rich CLI password manager
Secure, private and feature-rich CLI password manager

Kure Kure is a free and open-source password manager for the command-line. This project aims to offer the most secure and private way of operating wit

Nov 17, 2022
Moldy CLI the best project starter and manager of the world
Moldy CLI the best project starter and manager of the world

You don't know how to start your project ... you want to help other people know your tool or language. Use Moldy! the best helper to start your project

Oct 17, 2022
Declarative CLI Version manager. Support Lazy Install and Sharable configuration mechanism named Registry. Switch versions seamlessly

aqua Declarative CLI Version manager. Support Lazy Install and Sharable configuration mechanism named Registry. Switch versions seamlessly. Index Slid

Dec 29, 2022
A CLI password manager written in Go

vlt A CLI password vault written in Go vlt is a command line tool for storing passwords in encrypted files. Files are stored on a per-user basis in $H

Oct 23, 2021
A simple CLI tool that outputs the history of connections to Amazon EC2 instances using AWS Session Manager.

ssmh This is a simple CLI tool that outputs the history of connections to Amazon EC2 instances using AWS Session Manager. Installation brew install mi

Dec 10, 2021
A password manager as a CLI, where you can use a master password to retrieve a specified password and store it in your clipboard
A password manager as a CLI, where you can use a master password to retrieve a specified password and store it in your clipboard

Password manager Description CLI to store and retrieve passwords. The retrieved password will be stored on your clipboard! Usage 1.Start with Go go ru

Dec 16, 2021
πŸ‰ BLAZINGLY FAST CLI plugin manager for (neo)vim

viper BLAZINGLY FAST CLI plugin manager for (neo)vim. Usage Viper does all the nice and basic things you'd expect from a (neo)vim plugin manager, and

Jun 9, 2022
lls is lightweight ls. Using lls, you can get a list of files in a directory that contains a large number of files.

lls lls is lightweight ls. Using lls, you can get a list of files in a directory that contains a large number of files. How? You allocate a buffer for

Dec 29, 2022