A file-based task manager
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

at ff97ca4008c598c6eb5c830d1ddfdabdda9fdabb 200 lines 8.1 kB view raw
1tsk 2=== 3 4A fast & simple CLI task manager 5-------------------------------- 6 7The motivation for tsk is simple: make managing tasks as fast and easy as 8possible with a focus on small, ephemeral tasks. 9 10Secondary goals include: 11 12- Provide the minimum amount of features necessary to be usable by a team 13- Support local and non-local workspaces 14- Be adaptable to almost any environment, even employer-mandated JIRA use 15- Be flexible, within reason 16 17tsk takes inspiration from git and FORTH and is expected to be used alongside 18the former. 19 20Dependencies 21------------ 22 23tsk is written in Rust. To compile from source, a recent Rust toolchain is 24required. As of now, it is developed using Rust 1.81.0. 25 26Additionally, for fuzzy-finding functionality, the fzf command must be installed 27and in the shell's PATH. 28 29 https://github.com/junegunn/fzf 30 31tsk workspaces must be created on filesystems that support symlinking. 32 33Task-level metadata requires Linux's xattr(7) API and a filesystem that supports 34it. Patches that implement this for other operating systems are welcome. 35 36tsk expects to run on POSIX-like systems. Microsoft Windows and other 37non-UNIX-ey operating systems will never be directly supported. 38 39Building 40-------- 41 42```sh 43cargo install --path . 44``` 45 46Make sure ~/.cargo/bin is in your PATH. 47 48Overview 49-------- 50 51A summary of commands and their functionality can be seen with: 52 53 tsk help 54 55tsk uses plain text files for all of its functionality. A workspace is a folder 56that contains a .tsk/ directory created with the `tsk init` command. The 57presence of a .tsk/ folder is searched recursively upwards until a filesystem 58boundary or root is encountered. This means you can nest workspaces and use 59folders to namespace tasks while also using tsk commands at any location within 60a workspace. 61 62New tasks are created with the `tsk push` command. A title is always required, 63but can be modified later. A unique identifier is selected automatically and a 64file with the title and any body contents supplied are stored in the 65.tsk/archive folder. A symlink is then created in the .tsk/tasks folder marking 66the task as "open." The task is then added to the top of the "stack" by having 67its tsk-ID and title added to the .tsk/index file. 68 69The contents of the stack may be printed using the `tsk list` command. 70 71Tasks are marked as "completed" and removed from the index with the `tsk drop` 72command. They will remain in the .tsk/archive folder, but are excluded from 73fuzzy searches by default. 74 75The priority of a task may be manipulated in any of several ways: 76 77`tsk swap` swaps the top two task on the stack 78 79 80 tsk-100 tsk-102 81 82 83 84 tsk-102 tsk-100 85 86 87 88 tsk-108 tsk-108 89 90 91`tsk rot` moves the 3rd task on the stack to the top of the stack and shifts 92the first and second down 93 94 95 tsk-100 tsk-108 96 97 98 99 tsk-102 tsk-100 100 101 102 103 tsk-108 tsk-102 104 105 106`tsk tor` moves the task on the top of the stack behind the third, shifting the 107second and third tasks up. 108 109 110 tsk-100 tsk-102 111 112 113 114 tsk-102 tsk-108 115 116 117 118 tsk-108 tsk-100 119 120 121`tsk prioritize` will take a selected task and move it to the top of the stack 122from any other position in the stack. It is selected either by ID or using fuzzy 123finding. 124 125`tsk deprioritize` moves a selected task to the bottom of the stack from any 126position. 127 128Roadmap 129------- 130 131- Configurable workspace-scoped prefix tags (tsk- vs example-) 132- Extended Attribute-based Metadata 133- Task Linking 134- IMAP4/SMTP-based synchronization and sharing 135- Export + sync with external task managers 136 - GitLab 137 - GitHub 138 - JIRA 139 - Obsidian 140 - More? 141- tsk -> html export 142- Editor plugins 143 - nvim-telescope 144 - nvim 145 - others? 146- Man page 147 148Format 149------ 150 151The tsk text format can be thought of as a derivative of Markdown and scdoc, but 152not quite either. Markdown is a great baseline for rich-text while scdoc 153restricts itself to rich text formatting that can be displayed effectively in a 154terminal. As tsk's primary goal is to be a fast, terminal-centric task manager, 155this property is a *must.* 156 157Additionally, it should be similar enough to Markdown such that it is easy to 158export to other applications, as outlined above in the roadmap. 159 160Meanwhile, both Markdown and scdoc have some limitations and make choices that, 161while appropriate for their domain, are not appropriate for tsk. Some notable 162differences from both: 163 164- There is only one way to do any type of formatting 165- Hard line breaks are real, not imaginary 166- Inline formatting control characters must be surrounded by space, newline, or 167 common punctuation 168 169A core feature of the format is *linking*. That is, references to other tasks 170utilizing wiki-link style links: `[[]]`. The content within the link is mapped 171to the local workspace if the `tsk-` prefix is used, or a mapped non-local 172workspace if another prefix is used. These mappings are specified using a text 173file within the .tsk folder. 174 175A quick overview of the format: 176 177!Bolded! text is surrounded by exclamation marks (!) 178*Italicized* text is surrouneded by single asterists (*) 179_Underlined_ text is surrounded by underscores (_) 180~Strikenthrough~ text is surrounded by tildes (~) 181 182Links like in Markdown, along with the wiki-style links documented above. 183 184Misc 185---- 186 187tsk is heavily inspired by git. It mimics its folder structure and some 188commands. The concept of the stack is inspired by FORTH and the observation that 189most of the time, only the top 3 priorities at any given moment matter and tasks 190tend to be created when they are most important. This facilitates small, 191frequent creation of tasks that help both document problems and manage 192fast-paced work environments. 193 194tsk is not intended to be checked into git, however there is not a reason that it 195cannot be. This repository's development is managed using tsk itself. 196 197Git does *not* track extended filesystem attributes. If you wish to avoid constantly 198re-indexing, use something like metastore: 199 200 https://github.com/przemoc/metastore