Giter Site home page Giter Site logo

ff-notes / ff Goto Github PK

View Code? Open in Web Editor NEW
190.0 8.0 18.0 6.1 MB

A distributed note taker and task manager.

Home Page: https://github.com/ff-notes/ff#readme

License: GNU General Public License v3.0

Haskell 97.55% Shell 0.30% Python 1.31% Dockerfile 0.57% Nix 0.27%
notes note-taking tasks task-management gtd crdt

ff's Introduction

๐‘“๐‘“

A distributed note taker and task manager.

What's the big deal?

  1. ๐‘“๐‘“ synchronizes via any file sync application, like git, Yandex.Disk, Dropbox, or Google Drive.
  2. ๐‘“๐‘“ is available offline and synchronizes without conflicts thanks to CRDT and RON.

Stability

Works on all my computers and synchronizes between them successfully. ๐‘“๐‘“'s own issues are tracked in ๐‘“๐‘“ since the first day of development. I also use ๐‘“๐‘“ for my personal tasks since the first day of development. Please feel free to test it in your environment. But no guarantees.

Project-based task management

๐‘“๐‘“ detects if it is run inside a git repository and saves notes in it. Other VCS will be supported in future. Feel free to open a ticket if you want to extend support.

Install

$ git clone https://github.com/ff-notes/ff.git
$ cd ff
$ stack install ff

Install experimental GUI

GTK version

Prerequisites

Follow https://github.com/haskell-gi/haskell-gi\#installation.

Program

Mac OS:

$ export PKG_CONFIG_PATH="/usr/local/opt/libffi/lib/pkgconfig"
$ stack install ff-gtk

Ubuntu:

$ stack install ff-gtk

Qt version

Prerequisites

Mac OS:

$ brew install qt

Ubuntu:

# apt install qt5-default

Program

$ stack install ff-qt

Completion for commands and options

Ubuntu 18.04

ff --bash-completion-script `which ff` | sudo tee /etc/bash_completion.d/ff

MacOS

ff --bash-completion-script `which ff` | sudo tee /usr/local/etc/bash_completion.d/ff

Usage

Look what ๐‘“๐‘“ can do for you

$ ff --help
Usage:  [-b|--brief] [--json] [-C|--data-dir DIRECTORY]
        [(-V|--version) | COMMAND | [-l|--limit ARG]
          [(-n|--no-tag) | [--tag TAG]... [--without-tag TAG]...]]
  A note taker and task tracker

Available options:
  -b,--brief               List only note titles and ids
  --json                   Use JSON for input/output
  -C,--data-dir DIRECTORY  Path to the data dir
  -V,--version             Current ff-note version
  -l,--limit ARG           Number of issues
  -n,--no-tag              Filter items that have no tags
  --tag TAG                Filter by tag
  --without-tag TAG        Filter items without tag
  -h,--help                Show this help text

Available commands:
  add                      add new task or note
  agenda                   show what you can do right now [default action]
  config                   show/edit configuration
  contact                  show contacts
  delete                   delete a task
  done                     mark a task done (archive)
  edit                     edit a task or a note, using command from environment
                           variable `EDITOR` or program `editor`
  new                      synonym for `add`
  postpone                 make a task start later
  search                   search for notes with the given text
  show                     show note by id
  tags                     show tags of all notes
  sponsors                 show project sponsors
  track                    track issues from external sources
  unarchive                restore the note from archive
  upgrade                  check and upgrade the database to the most recent
                           format
  wiki                     show all wiki notes

Get started

Personal

To save personal notes and tasks somewhere you must configure ๐‘“๐‘“'s data directory

ff config dataDir --help

If you use Yandex.Disk, you can say just

ff config dataDir -y

Project-based

To work with a project's tasks, just run ๐‘“๐‘“ inside a VCS repository.

$ ls
.git
$ ff add ...
$ ls
.ff .git
$ git add .ff

Get some unfinished tasks

$ ff
Actual:
    * buy milk
      id 458a1456lrc-12z3opnykw, start 2018-01-10

Add new task or note

$ ff add 'learn Haskell'

Now you can find it in your agenda:

$ ff
Actual:
    * buy milk
      id 458a1456lrc-12z3opnykw, start 2018-01-10
    * learn Haskell
      id 459h2tqxutq-24nuhr86ae, start 2018-01-14

Mark task done

Marking done is actually moving to archive.

$ ff done 458a1456lrc-12z3opnykw
archived:
    buy milk
    id 458a1456lrc-12z3opnykw, start 2018-01-10

Archived tasks don't appear in an agenda:

$ ff
Actual:
    * learn Haskell
      id 459h2tqxutq-24nuhr86ae, start 2018-01-14

Developers community

We have a telegram chat ff-dev where you can ask your questions.

Alternative chat: https://gitter.im/ff-notes

ff's People

Contributors

cblp avatar deflexor avatar fistswanger avatar funbringer avatar jgeerds avatar nick-loginov avatar ruddy22 avatar setser avatar willbasky avatar zyla 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

ff's Issues

Add Wiki

  1. new status Wiki
  2. add adds task
  3. add --wiki adds wiki
  4. edit works with both
  5. agenda doesn't list wikis

Colorized output

printOrPage from pager shows colors when env Pager = more. For less it does not. less required flag -r to show colors.

We wait until end of 01.19 for PR approving.

Re-write agenda sections

-- | haskellish pseudocode for agenda sections logic
agendaSection start end
    | end == Nothing    = if
        | start <= today -> Actual
        | start >  today -> StartingSoon
    | end <  Just today =   Overdue
    | end == Just today =   DueToday
    | end >  Just today = if
        | start <= today -> EndingSoon
        | start >  today -> StartingSoon

Allow group modification

Allow this

ff delete ID1 ID2 ID3
ff done ID1 ID2 ID3
ff edit --start START ID1 ID2 ID3
ff postpone ID1 ID2 ID3
ff unarchive ID1 ID2 ID3

But NOT this

ff edit ID1 ID2 ID3

It is non-sense to set the same text for multiple notes.

Add search

A full-text search index would be nice life-saving.

Contexts

Implement type (or types?) for different contexts (as in GTD)

  • location:
    • predefined: Moscow, London
    • user-defined: work, home
  • time: Monday, weekend, morning
  • user state: on the internet, on phone

Tags

A tag is a document in the ff database.

It must contain one text field (RgaText).

A note must have a field "tags" of type OR-Set, containing references (ids) to tag objects.

Use a git repository as a storage

Should be useful for software projects

Necessary:

  • Find data dir based on git: look for .git/.hg/.svn, else take dataDir from config

Optional:

  • Commit automatically on editing.
  • ff --global โ€” do not look for .ff, use dataDir only from config
  • ff --vcs โ€” look for .git/.hg/.svn, create .ff there

Proper error messages

Distinguish these cases in error messages:

  • a document doesn't exist
  • a document is invalid
  • a document is tracked
  • a document is archived

Links between notes

Use for:

  • dependencies
  • tags (#20)
  • contexts (#21)
  • contact contexts (#22)

Implementation variants:

  1. A field in Note with a set of links (incoming, outgoing).
  2. A separate type Link{from, to :: DocId Note}
  3. Something else?

Add optional time to dates

Probable solution:

-- | Day and Maybe Time
type DMT = Either Day UTCTime

Day is treated in current time zone, UTCTime is UTC

With timezone

use a string. Specifically, use the full qualified name in the Olson database, so something like Australia/Adelaide or America/Los_Angeles. These are standardized descriptors of the timezones used in the world, and you can use these in pretty much every programming language ever used in the last few decades.

https://en.wikipedia.org/wiki/List_of_tz_database_time_zones

https://zachholman.com/talk/utc-is-enough-for-everyone-right

Version option

  • -V,--version
  • Add changelog line
  • Include git revision (git rev-parse HEAD, git rev-parse --symbolic-full-name HEAD)
  • git dirtiness (count lines of git status --short).

Contacts

A contact is a document in the ff database.

It must contain one text field (RgaText) โ€” for a human name.

A note must have a field "assignee" of type [Contact], containing a reference (id) to a contact object.

List issues from Github

  • fetch issues from GitHub with ff github --list
  • allow a user to specify repository to operate
  • change option ff github --list to subcommand ff github list
  • render github issues with ff output mechanism (NoteView)
  • use taskMode to get proper state in ff github llist
  • replace groupSort with sorted Map construction
  • merge FF.takeSamples with Github.sampleMaps.takeFromMany
  • limit via pagination
  • add test with reference GitHub response and golden NoteView output

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.