···11+tsk
22+===
33+44+A fast & simple CLI task manager
55+--------------------------------
66+77+The motivation for tsk is simple: make managing tasks as fast and easy as
88+possible with a focus on small, ephemeral tasks.
99+1010+Secondary goals include:
1111+1212+- Provide the minimum amount of features necessary to be usable by a team
1313+- Support local and non-local workspaces
1414+- Be adaptable to almost any environment, even employer-mandated JIRA use
1515+- Be flexible, within reason
1616+1717+tsk takes inspiration from git and FORTH and is expected to be used alongside
1818+the former.
1919+2020+Dependencies
2121+------------
2222+2323+tsk is written in Rust. To compile from source, a recent Rust toolchain is
2424+required. As of now, it is developed using Rust 1.81.0.
2525+2626+Additionally, for fuzzy-finding functionality, the fzf command must be installed
2727+and in the shell's PATH.
2828+2929+ https://github.com/junegunn/fzf
3030+3131+tsk workspaces must be created on filesystems that support hard linking.
3232+3333+Task-level metadata requires Linux's xattr(7) API and a filesystem that supports
3434+it. Patches that implement this for other operating systems are welcome.
3535+3636+Building
3737+--------
3838+3939+```shell
4040+cargo install --path .
4141+```
4242+4343+Make sure ~/.cargo/bin is in your PATH.
4444+4545+Overview
4646+--------
4747+4848+A summary of commands and their functionality can be seen with:
4949+5050+ tsk help
5151+5252+tsk uses plain text files for all of its functionality. A workspace is a folder
5353+that contains a .tsk/ directory created with the `tsk init` command. The
5454+presence of a .tsk/ folder is searched recursively upwards until a filesystem
5555+boundary or root is encountered. This means you can nest workspaces and use
5656+folders to namespace tasks while also using tsk commands at any location within
5757+a workspace.
5858+5959+New tasks are created with the `tsk push` command. A title is always required,
6060+but can be modified later. A unique identifier is selected automatically and a
6161+file with the title and any body contents supplied are stored in the
6262+.tsk/archive folder. A hardlink is then created in the .tsk/tasks folder marking
6363+the task is "open." The task is then added to the top of the "stack" by having
6464+its tsk-ID and title added to the .tsk/index file.
6565+6666+The contents of the stack may be printed using the `tsk list` command.
6767+6868+Tasks are marked as "completed" and removed from the index with the `tsk drop`
6969+command. They will remain in the .tsk/archive folder, but are excluded from
7070+fuzzy searches by default.
7171+7272+The priority of a task may be manipulated in any of several ways:
7373+7474+`tsk swap` swaps the top two task on the stack
7575+7676+ ┌─────────┐ ┌─────────┐
7777+ │ tsk-100 │ │ tsk-102 │
7878+ └─────────┘ └─┬─────▲─┘
7979+ │ │
8080+ ┌─────────┐ ┌─▼─────┴─┐
8181+ │ tsk-102 │ ───────► │ tsk-100 │
8282+ └─────────┘ └─────────┘
8383+8484+ ┌─────────┐ ┌─────────┐
8585+ │ tsk-108 │ │ tsk-108 │
8686+ └─────────┘ └─────────┘
8787+8888+`tsk rot` moves the 3rd task on the stack to the top of the stack and shifts
8989+the first and second down
9090+9191+ ┌─────────┐ ┌─────────┐
9292+ │ tsk-100 │ │ tsk-108 ◄─┐
9393+ └─────────┘ └────┬────┘ │
9494+ │ │
9595+ ┌─────────┐ ┌────▼────┐ │
9696+ │ tsk-102 │ ───────► │ tsk-100 │ │
9797+ └─────────┘ └────┬────┘ │
9898+ │ │
9999+ ┌─────────┐ ┌────▼────┐ │
100100+ │ tsk-108 │ │ tsk-102 ├─┘
101101+ └─────────┘ └─────────┘
102102+103103+`tsk tor` moves the task on the top of the stack behind the third, shifting the
104104+second and third tasks up.
105105+106106+ ┌─────────┐ ┌─────────┐
107107+ │ tsk-100 │ │ tsk-102 ├─┐
108108+ └─────────┘ └────▲────┘ │
109109+ │ │
110110+ ┌─────────┐ ┌────┴────┐ │
111111+ │ tsk-102 │ ───────► │ tsk-108 │ │
112112+ └─────────┘ └────▲────┘ │
113113+ │ │
114114+ ┌─────────┐ ┌────┴────┐ │
115115+ │ tsk-108 │ │ tsk-100 ◄─┘
116116+ └─────────┘ └─────────┘
117117+118118+`tsk prioritize` will take a selected task and move it to the top of the stack
119119+from any other position in the stack. It is selected either by ID or using fuzzy
120120+finding.
121121+122122+`tsk deprioritize` moves a selected task to the bottom of the stack from any
123123+position.
124124+125125+Roadmap
126126+-------
127127+128128+- Configurable workspace-scoped prefix tags (tsk- vs example-)
129129+- Extended Attribute-based Metadata
130130+- Task Linking
131131+- IMAP4/SMTP-based synchronization
132132+- Text format with rich-text terminal display
133133+- Export + sync with external task managers
134134+ - GitLab
135135+ - GitHub
136136+ - JIRA
137137+ - Obsidian
138138+ - More?
139139+- tsk -> html export
140140+- Editor plugins
141141+ - nvim-telescope
142142+ - nvim
143143+ - others?
144144+- Man page
145145+146146+Format
147147+------
148148+149149+The tsk text format can be thought of as a derivative of Markdown and scdoc, but
150150+not quite either. Markdown is a great baseline for rich-text while scdoc
151151+restricts itself to rich text formatting that can be displayed effectively in a
152152+terminal. As tsk's primary goal is to be a fast, terminal-centric task manager,
153153+this property is a *must.*
154154+155155+Additionally, it should be similar enough to Markdown such that it is easy to
156156+export to other applications, as outlined above in the roadmap.
157157+158158+A core feature of the format is *linking*. That is, references to other tasks
159159+utilizing wiki-link style links: `[[]]`. The content within the link is mapped
160160+to the local workspace if the `tsk-` prefix is used, or a mapped non-local
161161+workspace if another prefix is used. These mappings are specified using a text
162162+file within the .tsk folder.
163163+164164+Misc
165165+----
166166+167167+tsk is heavily inspired by git. It mimics its folder structure and some
168168+commands. The concept of the stack is inspired by FORTH and the observation that
169169+most of the time, only the top 3 priorities at any given moment matter and tasks
170170+tend to be created when they are most important. This facilitates small,
171171+frequent creation of tasks that help both document problems and manage
172172+fast-paced work environments.
173173+174174+tsk is not intended to be checked into git, however there is not reason that it
175175+cannot be. This repository's development is managed using tsk itself.
-38
tsk.txt
···11-tsk
22-===
33-44-A simple command line task manager with exporting and syncing capabilities
55---------------------------------------------------------------------------
66-77-The motivation for tsk is simple: make managing tasks as easy as possible with a focus
88-on small, ephemeral tasks.
99-1010-Roadmap
1111--------
1212-1313-- Extended Attribute-based Metadata
1414-- Task Linking
1515-- IMAP4/SMTP-based synchronization
1616-- Text format with rich-text
1717-- Export + sync with external task managers
1818- - GitLab
1919- - GitHub
2020- - JIRA
2121- - Obsidian
2222- - More?
2323-- Neovim Plugin?
2424- - nvim-telescope plugin?
2525-2626-Format
2727-------
2828-2929-The tsk text format can be thought of as a derivative of Markdown and scdoc, but not
3030-quite either. Markdown is a great baseline for rich-text while scdoc restricts itself to
3131-rich text formatting that can be displayed effectively in a terminal. As tsk's primary
3232-goal is to be a fast, terminal-centric task manager, this property is a *must.*
3333-3434-Additionally, it should be similar enough to Markdown such that it is easy to export to
3535-other applications, as outlined above in the roadmap.
3636-3737-A core feature of the format is *linking*. That is, references to tasks within a given
3838-workspace utilizing wiki-link style links: `[[]]`.