{"id":13451762,"url":"https://github.com/smallhadroncollider/taskell","last_synced_at":"2025-09-27T07:30:25.489Z","repository":{"id":26930309,"uuid":"110847894","full_name":"smallhadroncollider/taskell","owner":"smallhadroncollider","description":"Command-line Kanban board/task manager with support for Trello boards and GitHub projects","archived":true,"fork":false,"pushed_at":"2023-10-03T06:57:40.000Z","size":3649,"stargazers_count":1735,"open_issues_count":54,"forks_count":72,"subscribers_count":27,"default_branch":"master","last_synced_at":"2024-11-17T16:08:56.533Z","etag":null,"topics":["command-line","github","haskell","homebrew","kanban","kanban-board","linux","macos","markdown","opensource","task-manager","trello","vim-keybindings"],"latest_commit_sha":null,"homepage":"https://taskell.app","language":"Haskell","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/smallhadroncollider.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"roadmap.md","authors":null},"funding":{"github":["smallhadroncollider"],"custom":["https://www.buymeacoffee.com/shc"]}},"created_at":"2017-11-15T15:02:14.000Z","updated_at":"2024-11-11T11:40:58.000Z","dependencies_parsed_at":"2024-01-03T04:14:08.930Z","dependency_job_id":"fb99c6d2-a6ec-4950-9566-37cf5140ca75","html_url":"https://github.com/smallhadroncollider/taskell","commit_stats":{"total_commits":905,"total_committers":11,"mean_commits":82.27272727272727,"dds":"0.029834254143646377","last_synced_commit":"a2df95f26762fc3e78d6f131cea7fc1f3b13bd47"},"previous_names":[],"tags_count":68,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/smallhadroncollider%2Ftaskell","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/smallhadroncollider%2Ftaskell/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/smallhadroncollider%2Ftaskell/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/smallhadroncollider%2Ftaskell/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/smallhadroncollider","download_url":"https://codeload.github.com/smallhadroncollider/taskell/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":234402310,"owners_count":18826734,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["command-line","github","haskell","homebrew","kanban","kanban-board","linux","macos","markdown","opensource","task-manager","trello","vim-keybindings"],"created_at":"2024-07-31T07:01:01.658Z","updated_at":"2025-09-27T07:30:24.260Z","avatar_url":"https://github.com/smallhadroncollider.png","language":"Haskell","readme":"\u003e I'm going to be taking a break from development of Taskell for a while. Trying to do it alongside my day job was proving a bit much. Feel free to continue to submit issues, but I won't be able to work on any of them immediately. Pull requests also welcome. Thanks for understanding 🙂\n\n# Taskell\n\n[![Build Status](https://travis-ci.org/smallhadroncollider/taskell.svg?branch=master)](https://travis-ci.org/smallhadroncollider/taskell)\n\nA CLI kanban board/task manager for Mac and Linux\n\n- Per project task lists\n- `vim` style key-bindings\n- Stored using Markdown\n- Clean diffs for easy version control\n- Support for sub-tasks and due dates\n- Trello board imports\n- GitHub project imports\n\n\u003ca href=\"https://www.buymeacoffee.com/shc\" target=\"_blank\"\u003e\u003cimg src=\"https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png\" alt=\"Buy Me A Coffee\" style=\"height: 41px !important;width: 174px !important;box-shadow: 0px 3px 2px 0px rgba(190, 190, 190, 0.5) !important;-webkit-box-shadow: 0px 3px 2px 0px rgba(190, 190, 190, 0.5) !important;\" \u003e\u003c/a\u003e\n\nFollow [@taskellcli](https://twitter.com/taskellcli) on Twitter for updates\n\n![Demo](https://taskell.app/img/demo.gif)\n\n---\n\n## Contents\n\n- [Installation](#installation)\n- [Using Taskell](#using-taskell)\n    - [Options](#options)\n    - [Storage](#storage)\n    - [Importing Trello Boards](#importing-trello-boards)\n    - [Importing GitHub Projects](#importing-github-projects)\n- [Configuration](#configuration)\n    - [Controls](#controls)\n        - [Due Dates](#due-dates)\n    - [Theming](#theming)\n- [Roadmap](#roadmap)\n- [Contributing](#contributing)\n    - [Core Contributors](#core-contributors)\n- [Acknowledgements](#acknowledgements)\n\n## Installation\n\n### Homebrew (Mac)\n\nYou can install Taskell on your Mac using [Homebrew](https://brew.sh):\n\n```bash\nbrew install taskell\n```\n\n### Debian/Ubuntu\n\n[A `.deb` package is available for Debian/Ubuntu](https://github.com/smallhadroncollider/taskell/releases). Download it and install with `dpkg -i \u003cpackage-name\u003e`. You may also need to install the `libtinfo5` package (`sudo apt install libtinfo5`).\n\n### Fedora\n\nNot officially supported, but try running `sudo dnf install ncurses-compat-libs` then download and run the binary as described below. If that doesn't work you may need to build from scratch ([Cabal](#cabal)/[Stack](#stack)).\n\n### Binaries\n\n[A binary is available for Mac and Debian/Ubuntu](https://github.com/smallhadroncollider/taskell/releases). Download it and copy it to a directory in your `$PATH` (e.g. `/usr/local/bin` or `/usr/bin`).\n\n### Cabal\n\nYou can install Taskell with `cabal`:\n\n```bash\ncabal install taskell\n```\n\nMake sure you run `cabal update` if you haven't run it recently.\n\n### Stack\n\nIf none of the above options work you can build taskell using [Stack](https://docs.haskellstack.org/en/stable/README/). First [install Stack on your machine](https://docs.haskellstack.org/en/stable/README/#how-to-install). Then clone the repo and run `stack build \u0026\u0026 stack install`: this will build taskell and then install it in `~/.local/bin` (so make sure that directory is in your `$PATH`). Building from scratch can take a long time and occasionally doesn't work the first time (if this happens try running it again).\n\n## Using Taskell\n\n- `taskell`: will use `taskell.md` in the pwd - offers to create if not found\n- `taskell filename.md`: will use `filename.md` in the pwd - offers to create if not found\n\n### Options\n\n- `-h`: show help\n- `-v`: show version number\n- `-t \u003ctrello-board-id\u003e`: import a Trello board ([see below](#importing-trello-boards))\n- `-g \u003cgithub-project-id\u003e`: import a GitHub project ([see below](#importing-github-projects))\n\n#### Tips\n\n- If you're using a simple two-column \"To Do\" and \"Done\" then use the space bar to mark an item as complete while staying in the \"To Do\" list. If you're using a more complicated column setup then you will want to use `H`/`L` to move tasks between columns.\n\n### Storage\n\nBy default stores in a `taskell.md` file in the working directory:\n\n```md\n## To Do\n\n- Do this\n\n## Done\n\n- Do That\n```\n\n### Importing Trello Boards\n\nTaskell includes the ability to fetch a Trello board and store it as local taskell file.\n\n#### Authentication\n\nBefore fetching a Trello board, you'll need to create an access token and store it in `~/.taskell/config.ini`.\n\n- First, [get a Trello token](https://trello.com/1/authorize?expiration=never\u0026name=taskell\u0026scope=read\u0026response_type=token\u0026key=80dbcf6f88f62cc5639774e13342c20b)\n- Then add it to `~/.taskell/config.ini`:\n\n    ```ini\n    [trello]\n    token = \u003cyour-trello-access-token\u003e\n    ```\n\nYou can revoke access tokens [on Trello](https://trello.com/my/account)\n\n#### Fetching\n\nRunning the following would pull down the Trello board with the ID \"TRe1l0iD\" into a file named `trello.md` and then open taskell with that file.\n\n```bash\ntaskell -t TRe1l0iD trello.md\n```\n\nMake sure you have permission to view the Trello board, otherwise you'll get an error.\n\n#### Limitations\n\n- This is a one-off procedure: it effectively imports a Trello board to taskell\n- Currently imports:\n    - Lists\n    - Cards\n    - Card descriptions\n    - Card due dates\n    - Card checklists (merged into one list per card)\n\n\n### Importing GitHub Projects\n\nTaskell includes the ability to fetch a GitHub project and store it as local taskell file.\n\n#### Authentication\n\nBefore fetching a GitHub board, you'll need to create a person access token and store it in `~/.taskell/config.ini`.\n\n- First, [get a GitHub personal access token](https://github.com/settings/tokens/new)\n- Make sure to tick the `repo` scope\n- Then add it to `~/.taskell/config.ini`:\n\n    ```ini\n    [github]\n    token = \u003cyour-github-personal-access-token\u003e\n    ```\n\nYou can delete personal access tokens [on GitHub](https://github.com/settings/tokens/)\n\n#### Fetching\n\nProjects can belong to [organisations](#organisations) or to [individual repositories](#repositories).\n\nMake sure you have permission to view the GitHub project, otherwise you'll get an error.\n\n![GitHub Demo](https://taskell.app/img/github.gif)\n\n##### Organisations\n\nTo import a project for an organisation called \"test-org\" you would use the following:\n\n```bash\ntaskell -g orgs/test-org github.md\n```\n\nThis would then show you a list of possible projects to import. Enter the number of the project you wish to import.\n\n##### Repositories\n\nTo import a project for the repository \"test-repo\" for the user \"test-user\":\n\n```bash\ntaskell -g repos/test-user/test-repo github.md\n```\n\nThis would then show you a list of possible projects to import. Enter the number of the project you with to import.\n\n#### Limitations\n\n- This is a one-off procedure: it effectively imports a GitHub project to taskell\n- Currently imports:\n    - Columns\n    - Cards\n\n\n\n## Configuration\n\nTaskell uses the [XDG Base Directory Specification](https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html), so it will look for an `$XDG_CONFIG_HOME` environmental variable and create a directory named `taskell` inside it. If this variable is not found it will create the `taskell` directory in `~/.config/`.  (If you've been using Taskell since \u003c= 1.3.5 then it will be in a `~/.taskell` directory, feel free to move this to the XDG directory.)\n\nTaskell has a `config.ini` file:\n\n```ini\n[general]\n; the default filename to create/look for\nfilename = taskell.md\n\n[layout]\n; top/bottom padding for the taskell window\npadding = 1\n\n; the width of a column\ncolumn_width = 30\n\n; the padding of a column\n; for both sides, so 3 would give a gap of 6 between two columns\ncolumn_padding = 3\n\n; the icon to use when a task has a description\n; the default icon may not display on all systems\ndescription_indicator = \"≡\"\n\n; whether to show the statusbar\nstatusbar = true\n\n[markdown]\n; the markdown to start a title line with\ntitle = \"##\"\n\n; the markdown to start a task line with\ntask = \"-\"\n\n; the markdown to start a sub-task line with\nsubtask = \"    *\"\n\n; by default times are stored in UTC to avoid diffs if you\n; change locations. Set this to true if it will always be\n; edited in the same timezone\nlocalTimes = false\n```\n\nMake sure that the values in the `[markdown]` section are surrounded by **double**-quotes.\n\nIf you always use sub-tasks, an alternative setup for `[markdown]` might be:\n\n```ini\n[markdown]\ntitle = \"##\"\n\n; each task is a header\ntask = \"###\"\n\n; subtasks are list items under the header\nsubtask = \"-\"\n```\n\n**Warning**: currently if you change your `[markdown]` settings any older files stored with different settings will not be readable.\n\n### Template\n\nYou can edit the `template.md` config file to change what a new taskell file looks like.\n\n### Controls\n\nYou can edit keyboard bindings in the `bindings.ini` config file.\n\nThe default bindings can be found in [`bindings.ini`](https://github.com/smallhadroncollider/taskell/blob/master/templates/bindings.ini).\n\nAvailable special keys: `\u003cSpace\u003e`, `\u003cEnter\u003e`, `\u003cBackspace\u003e`, `\u003cLeft\u003e`, `\u003cRight\u003e`, `\u003cUp\u003e`, `\u003cDown\u003e`\n\nOn a Mac you can use the `alt` characters: e.g. `quit = œ` is equivalent to `alt+q`.\n\nYou shouldn't try to assign the `1`-`9` keys, as it will not overwrite the default behaviour.\n\n#### Due Dates\n\nDue dates must be input with the format `YYYY-MM-DD` or `YYYY-MM-DD HH:MM`. The date will not be accepted otherwise.\n\nYou can also pass in relative times such as `1w 2d` (for 1 week and 2 days). Valid units are:\n\n- `s` (seconds)\n- `m` (minutes)\n- `h` (hours)\n- `d` (days)\n- `w` (weeks)\n\nThese can be used in any combination. If the time is made up only of days and/or weeks, the due date will not include a time.\n\nBy default times are stored in the Markdown file as UTC. If you would like local times (and are unlikely to open the file in lots of different timezones) then you can set `localTimes` to `true` in the `markdown` section of the [config file](#configuration). If you have this setting on and you change timezone, you'll get a diff on all your times the next time you make changes to the file.\n\n\n### Theming\n\nYou can edit Taskell's colour-scheme by editing `theme.ini`:\n\n```ini\n[other]\n\n; list title\ntitle.fg = green\n\n; status bar\nstatusBar.bg = blue\nstatusBar.fg = black\n\n; current list title\ntitleCurrent.fg = blue\n\n; current task\ntaskCurrent.fg = magenta\n\n; subtasks\n; selected\nsubtaskCurrent.fg = magenta\n; incomplete\nsubtaskIncomplete.fg = blue\n; complete\nsubtaskComplete.fg = yellow\n\n; disabled\ndisabled.fg = yellow\n```\n\nYou can also change the background and default text colour:\n\n```ini\n[default]\n\n; the app background colour\ndefault.bg = brightBlack\n\n; the app text colour\ndefault.fg = white\n```\n\nThe available colours are: `black`, `red`, `green`, `yellow`, `blue`, `magenta`, `cyan`, `white`, `brightBlack`, `brightRed`, `brightGreen`, `brightYellow`, `brightBlue`, `brightMagenta`, `brightCyan`, `brightWhite`, or `default`\n\n---\n\n## Roadmap\n\nSee [roadmap.md](https://github.com/smallhadroncollider/taskell/blob/develop/roadmap.md) for planned features\n\n---\n\n## Contributing\n\nPlease check the [roadmap.md](https://github.com/smallhadroncollider/taskell/blob/develop/roadmap.md) before adding any bugs/feature requests to Issues.\n\nAnyone is welcome to contribute to the project, but please read through [CONTRIBUTING.md](https://github.com/smallhadroncollider/taskell/blob/master/CONTRIBUTING.md) and make sure that you agree with the [Code of Conduct](https://github.com/smallhadroncollider/taskell/blob/master/CODE_OF_CONDUCT.md) before getting involved.\n\n### Core Contributors\n\n- Mark Wales ([@smallhadroncollider](https://github.com/smallhadroncollider))\n- Ali Ahmed ([@AliNisarAhmed](https://github.com/AliNisarAhmed))\n\n---\n\n## Acknowledgements\n\nBuilt using [Brick](https://github.com/jtdaugherty/brick). Thanks to [Jonathan Daugherty](https://github.com/jtdaugherty) for answering all my questions and pointing me in the right direction. Also thanks to [Jack Leigh](https://github.com/leighman) and [Thom Wright](https://github.com/ThomWright) for helping me get started. Also thanks to [Katja Durrani](https://github.com/katjad) for submitting Taskell to [`homebrew-core`](https://github.com/Homebrew/homebrew-core).\n","funding_links":["https://github.com/sponsors/smallhadroncollider","https://www.buymeacoffee.com/shc"],"categories":["Haskell","Productivity","\u003ca name=\"todo-manager\"\u003e\u003c/a\u003eTodo managers"],"sub_categories":["Note Taking and Lists"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsmallhadroncollider%2Ftaskell","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsmallhadroncollider%2Ftaskell","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsmallhadroncollider%2Ftaskell/lists"}