GithubHelp home page GithubHelp logo

naggie / dstask Goto Github PK

View Code? Open in Web Editor NEW
769.0 17.0 44.0 7.72 MB

Git powered terminal-based todo/note manager -- markdown note page per task. Single binary!

Home Page: https://calbryant.uk/blog/dstask-a-taskwarrior-alternative/

License: MIT License

Go 93.86% Shell 5.85% Makefile 0.29%
taskwarrior zsh bash git todo gtd task cli sync terminal

dstask's Introduction

Hey, you might want to check out my website for more about me and my projects.

dstask's People

Contributors

0mp avatar ard0gg avatar arp242 avatar axelsimon avatar botto avatar cgardner avatar dieterbe avatar dontlaugh avatar flipee avatar khardix avatar naggie avatar nucleogenesis avatar rob-mint avatar stianlagstad avatar xm31 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

dstask's Issues

Export Script

dstask should support export to the same taskwarrior json format that it supports for import. This would make it possible to move between applications more easily. It would also make it easier for people to try out dstask without fear that they'll be stuck.

Config file

There is a config file location discussion (#49) but no issue to discuss config itself.
So here it goes 🚀

I see two main topics:

  • Things to store in config (ex. path to git dir and colors)
  • File format (ex. toml, ini, json, yaml)

ps. I would really love to configure colors.
pps. Imagine having different colors for different projects with direnv...

dstask just killed on every command

I wanted to try the tool. But I am not able to even print help.

I did:
0. Download appropriate release for:

╭─me@myPC ~/path/to/dstask
╰─$ uname -s
Darwin
  1. cp ~/Downloads/dstask-darwin-amd64 /usr/local/bin/dstask
  2. chmod +x /usr/local/bin/dstask
  3. run dstask help
  4. get info it is killed
╭─me@myPC ~/path/to/dstask
╰─$ dstask help
[1]    20642 killed     dstask help

Could you point me in the right direction?

Bulk remove tags

Given that there doesn’t seem to be an easy way to set dates with keywords such as today or friday etc... I’ve been using +today, +week, etc.

It would be nice to be able to make a cron job that would auto remove all the +today and +week tags, etc. on the relevant interval.

Is this possible using dstask or would I need to script it?

EDIT: See Synonyms section in https://taskwarrior.org/docs/dates.html

notes saved in editor don't appear with task

Hi folks, a new user here. I can add tasks, and add a note to the text from the command line. But if try to add a note using

t note 1

which opens up my default editor, then unfortunately nothing gets saved, at least nothing is visible if I view the task from the commandline. Suggestions?

Where is context set in the environment?

I've got a little shell function that combines entr and fd-find to clear the screen and reload a task list every time I add or modify a task.

tasklist () {
	while true
	do
		fd -g '*.*' ~/.dstask | entr -cd dstask
		code=$? 
		if [[ $code == 130 ]] || [[ $code == 143 ]]
		then
			return 1
		fi
		sleep 1
	done
}

Changing context doesn't reload the list, though. Is there a file I can watch on disk somewhere with entr?

feature request: t(ime) column with estimated duration to fulfill the task

Dear Callan,

I like to have a t column which takes the estimated duration (working time to complete the task, e.g. in minutes) in order to filter tasks if only a given amount of time is available. For instance, I have 30 min until the next appointment and want to know everey task where its estimated duration is 30 min and lower.

What do youthink about?

Best reagards,
Sebastian

Modifying resolved tasks

Hey!

First of all, thanks for a great task-manager!

I have a question. Is it possible to edit already resolved tasks? I.e., for instance to add notes pertaining to the resolution of the task.

Running dstask show-resolved shows the list of resolved tasks, but I can't seem to find an ID I can reference in a call to dstask modify. Is this something I have just missed, or does this feature not exist?

Cheers in advance!

task by index not working outside of context

image

The default command, next should ignore the context if a task is referenced to be viewed by ID, much like the edit or note commands which work regardless of context if an ID is provided.

Shortcuts

I'm lazy and modify, next, add, undo is so much to type.

What about some one letter shortcuts?

Better message when the table is truncated.

When the size of the terminal doesn't permit to display all the tasks, It will be nice to see also the number of displayed tasks.
For now, only the total number of tasks and the number of rows are shown.

dstask interroperability with legacy non golang platforms

Hello,

I'm working on an old platform with gcc 4.8.3 .. Not much chance to have a newer version, cause it's QNX/bb10 . I want to switch from taskwarrior to dstask due to the git support and lack of ssl support for task on my platform as of today, which restricts taskwarrior to non "distributed" tasks.

Is there a specific, more or less stable format for the information dstask stores in git ? so that I can imagine implementing another dstask client, not based on golang ?

Olivier

TaskSet and func main refactor

A few times now we've hinted at a desire to refactor func main. This will involve TaskSet as well, since manipulating this type is one of main's big jobs right now.

We can talk about some possible designs here. We'll want something testable and extensible, if possible. For instance, how might we accommodate #12 and/or #16 ? We don't want to come up with something that makes those awkward to implement.

Redirect to stdout

Is it possible to direct output to stdout? When i try to pipe to grep it states 'Not a TTY".
Maybe its a future request?

Feature Request: Hooks

I use taskwarrior's hooks for integrating in other applications (time tracking with ledger mostly) and it would be awesome to have a similar capability with dstask.

aggregate issues for filtering refactor

The filtering refactor here #53 was merged but later reverted due to significant bugs. I think we're best working on a separate branch/PR until the bugs are fixed and tested

  • task addressing by ID is broken
  • the modify command ignores the ID passed to it and applies the change to every given task. (probably caused by the above)
  • search by keyword is broken

I think given this is a refactor of filtering it would make sense to fix these in this branch too:

  • #44 task by index not working outside of context
  • #57 Explicitly passed IDs take precedence over anything (which doesn't yet account for the modify command, I think).

We should have unit tests for the above too.

@dontlaugh please could you create a new PR for #56 then we can work on those issues. Thanks

Recurring tasks

Recurring task definitions should be stored separately and not displayed in any regular view. Instances of such tasks should be displayed when appropriate as virtual tasks (created every listing) until they are modified.

This way, most synchronisation issues are avoided; the main one (which taskwarrior suffers from, IIRC) is where tasks are created on different machines for the same instance resulting in duplicate tasks after sync.

Each instance should keep a reference to its parent recurring task.

Proposed syntax: cron, with shortcuts for add command

  • recur:@weekly
  • recur:"0 1 * * *"
  • @monthly

Add copy command

I would like to create some template tasks that have some some generic process steps in the notes.
This would be used for complex tasks that might be repeated for different projects (like a release checklist)

Assuming my template task were numbered 16, I imagine the command would look something like:
dstask copy 16 This is the description of the new task copied from 16

Issues with dstask import-tw (or maybe with task export)

Hi,
First of all, thanks for making dstask. Having a drop-in replacement for taskwarrior that uses a sane sync mechanism is great.

I have discovered that some information has been lost in my transition from taskwarrior to dstask:

  • all tags have been made lowercase
  • old tags not used by current tasks have disappeared. This might actually be a good thing in my specific case, but it's still surprising.
  • annotations have lost their date. This is quite an inconvenience, as I have tasks with stuff like "reminder sent yesterday" which now make no sense, as they have no date attached.

It also appears that calling (ds)task completed or task all after doing the initial git repo initialisation + import doesn't show any tasks. However, checking the .dstask/resolved directory shows lots of files corresponding to tasks in there.

Is dstask import-tw dropping some of the attributes on import, or is it limitations of taskwarrior's task export command?

Thanks!

Why is status in the directory structure, and not a field in the yaml file?

Hello,
I'm curious why the choice of using directories per status, as opposed to encoding it in the yaml file directly like all the other properties.
I haven't really use dstask yet, but my guess is this:

Firstly, assuming broadly 2 categories of issues:

  1. pending, active, and paused
  2. resolved

I presume that over time category 2 will build up a large set of tasks that 99.9% of the time, are not interesting anymore, and that all common usage of dstask involves only category 1 items. If that's the case, then I can see how this approach saves iops and makes dstask more performant.

The downside however of this approach is that it becomes less easy to have a look at the history of a task. normally one could easily run git log <file> or tig <file> (tig is a neat ncurses ui for git) and see all state changes of a file (task). but if it has gotten moved around a bunch, that seems quite painful.
This also seems like it would hamper conflict resolution. To me, resolving git conflicts where only 1 line within a file needs to be resolved, is much more practical then a conflict involving file moves/duplications

Having the status information encoded in the yaml would also slightly simplify the code.

Perhaps a mixture of the 2 is a good comprise: keep all pending/active/paused tasks in the same directory and encode status in the yaml for them; as soon as as a task is done, move it to a separate directory.

curious for your thoughts!

put etm to the list of alternatives

Hello,

ex-taskwarrior user here still looking for THE tool, but, imho, etm does deserve to be put on the list of alternatives?

p.s. Support for recurring tasks is one of the missing dstask's features...

Go Releaser

GoReleaser is a tool for generating the required binaries in each release and even you can automatically update brew repositories, etc. If you want I can create PR for this.

Quickstart documentation for a golang newbie ?

Hello,

I'm really curious about dstask .. but rather newbie with golang .. Tried the following up to now:

  1. sudo apt-get install golang
  2. mkdir and setup and GOPATH, GOROOT
  3. cd ~/dstask
  4. go get # go fetch all required module to $GOPATH
~/dstask$ go get | head
package encoding/gob: unrecognized import path "encoding/gob" (import path does not begin with hostname)
package encoding/json: unrecognized import path "encoding/json" (import path does not begin with hostname)
package errors: unrecognized import path "errors" (import path does not begin with hostname)
package fmt: unrecognized import path "fmt" (import path does not begin with hostname)
package bytes: unrecognized import path "bytes" (import path does not begin with hostname)
package crypto/md5: unrecognized import path "crypto/md5" (import path does not begin with hostname)
package crypto/rand: unrecognized import path "crypto/rand" (import path does not begin with hostname)
package crypto/sha1: unrecognized import path "crypto/sha1" (import path does not begin with hostname)

  1. go run ./cmd/dstask.go 2>&1 | head
~/dstask$ go run ./cmd/dstask.go 2>&1 | head
../gopath/src/gopkg.in/yaml.v2/emitterc.go:4:2: cannot find package "bytes" in any of:
        /home/kalou/goroot/src/bytes (from $GOROOT)
        /home/kalou/gopath/src/bytes (from $GOPATH)
../gopath/src/gopkg.in/yaml.v2/decode.go:4:2: cannot find package "encoding" in any of:
        /home/kalou/goroot/src/encoding (from $GOROOT)
        /home/kalou/gopath/src/encoding (from $GOPATH)
../gopath/src/gopkg.in/yaml.v2/decode.go:5:2: cannot find package "encoding/base64" in any of:
        /home/kalou/goroot/src/encoding/base64 (from $GOROOT)
        /home/kalou/gopath/src/encoding/base64 (from $GOPATH)
../gopath/src/gopkg.in/yaml.v2/yaml.go:10:2: cannot find package "errors" in any of:

Any tips on what I should do next ?

Add single-character tags at the command line

It seems that single-character tags cannot be added at the command line. The can be added via dstask edit however.

This little shell session demonstrates the issue by attempting to add +x as a tag to an existing issue with modify.

Also note that dstask add +x Try OpenBSD yields a new task with "+x" in the task summary.

❯ dstask context +servers
❯ dstask
Active context: +servers
Name      Value                                 
ID        13                                    
Priority  P2                                    
Summary   consolidate all servers               
Status    pending                               
Project                                         
Tags      servers                               
UUID      4ab9db58-3f3e-484e-ac91-21cf10ed51ff  
Created   2020-07-04 11:08:55.02537815 -0400 EDT

❯ dstask modify 13 +x

Modified 13: consolidate all servers
No changes detected

❯ dstask
Active context: +servers
Name      Value                                 
ID        13                                    
Priority  P2                                    
Summary   consolidate all servers               
Status    pending                               
Project                                         
Tags      servers                               
UUID      4ab9db58-3f3e-484e-ac91-21cf10ed51ff  
Created   2020-07-04 11:08:55.02537815 -0400 EDT

❯ dstask add +x +servers Try OpenBSD
Active context: +servers

Added 7: +x Try OpenBSD
[master b9476a0] Added 7: +x Try OpenBSD
 1 file changed, 12 insertions(+)
 create mode 100644 pending/2865b8af-5f49-47c6-a2ab-c0cc3799a044.yml

❯ dstask                            
Active context: +servers
ID  Pr  Tags       Summary                
13  P2  servers    consolidate all servers
7   P2  servers    +x Try OpenBSD    

Would you accept a contribution that fixes this and, perhaps adds a unit test or two around the parsing code?

Multiple Active Context

So using iterm, i would like to keep different context in different window, to use it as different active boards to work on, any ideas on this.
Tried doing it, but changing the context changes it globally across different iterm planes

feature request? add file links

Hi folks, it would be great (maybe it exists) to have a command which allows me to add file attachments to a task - something like:

dstask addfile ./filename.txt ./file.pdf taskid

And then be able to open the files with dstask open

Thoughts on scriptability and alternative UIs

When I used taskwarrior I was a fan of vit, an alternative terminal UI, based on vim.

As we develop, I hope we can make sure that we can keep the following use cases in mind.

  • serialization of tasks to json or toml or yaml or awk-scriptable tab-separated table view
  • maintaining consistency around exit codes and output for commands
  • behavior when stdout is not a tty
  • customization around sorting, color (or lack of color), context
  • customization around displayed fields
  • context-independent commands, e.g. adding tasks that do not "take" a context, even if one is active globally

In principle, any application could parse the ~/.dstask directory tree, but that application would need extra configuration, and would need to re-implement dstask's logic. If I were designing a simple web app to display and update tasks, shelling out to the dstask binary in my http handlers seems like a really straightforward way to go about it.

There's no action associated with this issue, but if others have thoughts on enabling tools and scripts around dstask, I would be interested.

"dstask in the wider ecosystem": integrations with github, email, todoist/phone apps, etc?

Hello!
I've been on the hunt for a good task manager. taskwarrior came close, but I want yaml tasks and git sync to be central to the solution, not an afterthought, and I am pretty good at Go but terrible at C++, so dstask is looking quite attractive.

One central theme I struggle with when it comes to task management, is different tools and contexts.

For example:

  • at work, i work with various github repositories, but also projects managed by zenhub. (luckily zenhub doesn't really complicate things, if anything, it simplifies things: it is a UI on top of github, so all the stuff i should be working on are still simply GH tickets that will have a certain set of tags (e.g. the current sprint) and/or my username is assigned)
  • of course I also have various other tasks that don't belong in any particular repository, and i currently keep in various todo files.
  • For personal todo's, I use the todoist app. It's quite beneficial to have something on my phone that is in sync with "something" (in this case a web page) on my laptop(s).
  • I like to think of emails as todo's also. emails sitting in my inbox are things i have to get through (many of them are tiny tasks though, trivial to do, usually just by deleting/archiving), and typically when i reply to an important email I treat this task as blocked as I'm waiting for a response. Whenever I get a reply back, the task represented by the email is actionable again. this is something I picked up from GTD, but in practice it's hard to do this. Whereas some emails represent tasks, many don't, and you wouldn't want to flood your task manager with menial little todo's for each email. And keeping the task and email states in sync requires either lots of manual work, or advanced sync tooling, so in practice I just treat email completely separate as my "2nd task manager"

Finally, I work from home as a business owner. I don't have clear cut "office hours" vs "personal hours". I think mixing personal and professional tasks is worthwhile (I can pick the right task based on mood, energy level, practical things going on, availability of other people, etc), as long as i make sure that the time spent on each category is balanced and I track time spent properly. From that perspective, this blogpost about taskwarrior made a lot of sense to me.
In particular:

  • computing an urgency/priority based on a formula that looks at a per-project multiplier, how old a task is, time-till-due etc. this seems like a very powerful, concept. I could imagine even using a different formula based on what day it is, what my energy levels are, or how much time i have available
  • ability to defer tasks so that they don't clutter what i should be seeing "right now" ("inbox zero style")

So anyway, specifically then, I wonder how dstask can be implemented "at the heart of a wider context"

In particular:

  1. could we pull in certain tasks from Github and mix them with other tasks? Perhaps the summary could follow a convention like
summary: GH/<org>/<repo>/number <title from GH issue here>

For proper syncing, I think a given GH repo, org and issue number should deterministically lead to a task UUID. Perhaps we could just hash it to a UUID but technically i don't think that's a valid UUIDv4 (which should be randomly generated) but i doubt it matters. Syncing the other way (from dstask to GH) would be nice, but for now this could be manual / a unidirectional sync from GH to dstask
2) as far as todoist, i have no strong feelings about it. any app on an android phone that lets me view and manage tasks that would sync bidirectionally with git/dstask would do the job. While I have little android app development, I'm not afraid to roll up my sleeves here. At least I know todoist has a bunch of golang libraries/tools, so perhaps I might pursue building a sync tool unless someone has a better idea?
3) email.. aka the last frontier. I already explained my vision, and i wonder if it resonates with others. But I personally don't have the ambition yet to go solve that (it doesn't help when you have multiple accounts, some imap, some gmail). Mostly curious for other ideas/input here.

If you made it this far, thanks for reading :)

Single commit for bulk commands

Currently dstask undo results in the last commit being undone. This is OK for most commands but some commands can result in multiple commits so undo is unintuitive in this case, requiring manual git history manipulation.

dstask should probably record git tags or remember checkpoint refs.

ZSH Tab completion not working on negative tags

Really liking dstask - been using it for a couple of months now!

I've just found an issue where tab completion for tags works when using +ta -> +tagname but it doesn't work when you change the operand to - e.g. -ta does not resolve to -tagname.

Pretty minor issue though.

Due date

Good day, I can't find this information in help output. In task warrior it is possible to specify due date for tasks , something like due:tom due:today, it's helpful for creating todolist for tomorrow. Is it possible to do it using dstask .
thanks in advance

A "remove"/"rm" subcommand.

Awesome tool. Git sync is really easy (when compared to running a taskwarrior server).

Could you add a "remove" command? This could simply mask a task from view but not really purge it, like taskwarrior does.

This command is important for computing statistics for burndown charts. Sometimes you add things by mistake, or need to consolidate tasks, but don't want to say they're "done".

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.