oppiliappan/dijo

Feature Request Thread

Opened this issue ยท 46 comments

I can edit json but I guess some features is missing

  • :rename french finnish
  • changing goals
    :goal french 5
    :goal french - for Bit mode
  • I guess, the goals should also be listed next to habbit title. For example:
    french (1/3) finnish (0/5) -english (1/1)-
  • moving mode to change habbit position from (example):
    • french, finnish, english
      to
    • english, french, finnish

for example ^m, and next hjkl and Return or Esc to out from moving mode
or :swap french finnish

@whoizit I have written out the boilerplate required to change names/goals on habits, all that is left is to think of a comfortable command structure for the same, here are some ideas I have in mind (inspired by set commands in vim):

  • set <field> <value>: for example :set goal 5 would set the goal of the focused habit to 5
  • set <habit-name> <field> <value>: an explicit version of above
  • set-goal, set-name collection of commands for all set related functions

Thoughts on conversion from bit habits to count habits and vice versa? How often would you use this command? Would it erase existing data?

Goals next to habit title sounds good, I did have it on an older version of dijo, I removed it because of the clutter on screen, perhaps an ALT mode could display extra info on toggle?

The positioning of habits is a little tricky at the moment, dijo automatically reorders auto-habits to the end, but swapping should be doable as well.

Hey! I love the app. Can we have a confirmation box for deleting any habit. The amount of times I've deleted habits by mistake is unreal!

Hey, read your post on the rust subreddit and decided to give this one a go. I was wondering about the goal setting part, is it currently (or in the future as a feature request) possible to set some day goals and some week goals?

For example I would like to set a habbit of reading 50 pages per week but drink 3L water daily. kinda like that.

The amount of times I've deleted habits by mistake is unreal!

@awalvie, an undo tree/command is on the roadmap for v0.2 :)

weekly goals

@yugonline, I thought this would come up, weekly goals, or rather, M counts in N days kind of goals (50/7 would mean 50 in a week), Ill try to add this without breaking backwards compat with the existing serialization format.

aklsh commented

@NerdyPepper, any possibility of supporting float values? Like 3.14 km taskX, 3.5 hr taskY etc.

Maybe float values could be used for weekly goals and to fix #7: if I have a goal with a daily target of 1, and do it 7 times in one day, I should have 100% for the week - similarly, if I have a daily target of 0.15, I have to do it once per week to get 100%. The dot grid could show up for anything <= 1 then.

@aklsh with the existing traits, it shouldn't be too hard to add a new habit that counts floats to a certain precision, I would have to think about how enter and backspace would behave in this case.

@moqmar thanks for your input! I will take a look at using floats for goals.

aklsh commented

@NerdyPepper maybe least level of precision used? like if the goal is 3.14, +- by 0.01. for 3.9, it would be +-0.1 and for integer, +-1...

I like :set ... for focused item.
I think the type conversion is redundant.
I like ALT mode.
A change of position will be necessary sooner or later, Any simplest option would suit me.

Saw it from r/unixporn and love it! Can we have a command for changing the value of habit? Because let's say we have a habit tracker for daily read page count and if we read 300 pages today, we have to press enter for a very long time.

@NerdyPepper hey, really liked the app as well. I've been looking for something like this for quite some time.

Are there plans for being able to navigate inside a month and mark habits at any given day? I may forget to mark some habits and it would be nice to go back and correct stuff.

An option to set custom colors would be nice. Some suggestions: background, habit-name, numbers, days(the dots), highlighted text.

@NerdyPepper I saw your post on r/unixporn, really nice job. I think having an option to create a habit you do every n days would be nice, e.g. when you work out every other day or something like that. Sure, you can just track the habit every n days but it still counts as incomplete for the day and reduces your progress in the week view. Maybe something like :add habit 1%n?

This might be out of scope, but it would be nice to be able to track time additionally to the absolute values. With internal time tracking using something like :start practice and :stop to record the amount spend doing a given task.

The current absolute values could be interpreted as minutes but that would quickly lead to pretty large numbers that are hard to read and comprehend in a meaningful way

Could we maybe get a maximum value goal? I.e. a goal that you have to be under and not above to make it green?

I opened a separate issue #36, because I am not interested all the notifications from here and unsubscribed myself from this issue.

It would be nice to be able to configure a custom directory to store the json files in. I'm sure I'm not the only one who uses cloud sync services (nextcloud, etc) and to be able to use it on multiple computers would be really nice

I think the ease in deleting habits could be fixed if you stage the changes prior to writing to the json. :w to commit, just like vim. I left my setup foobar after typing not in command mode. I could live without undo if we had that functionality.

Also, to me the json shouldn't be a 'behind-the-scenes' storage format. We're all power users here, why not publish the data spec to let us interface with data directly? I backfilled a fair bit of my habit data

@dmadisetti https://github.com/NerdyPepper/dijo/wiki/Internals#files There is this, if that's what you are looking for.

After some discussion in #35, I'd love to see any sort of action (creating a habit, incrementing, etc) immediately persist the state, so that the current running dijo more gracefully handles alt + f4 or ctrl + c or the other various ways someone might close a terminal.

Thanks for all the work on dijo!

@awalvie @dmadisetti as of v0.2.0 the following changes have been made:

  • d to delete has been removed
  • Command mode now supports tab to complete
  • New :write (alias :w) command has been introduced to save changes

I keep mysteriously losing data, not sure if its related to Ctrl+C or if its something else going on but I suspect an auto save would be useful in preventing the many variations of this failure. Although I could work around this if there was a way to configure the JSON data to a directory with file snap-shotting which might prevent losing data in some cases.

I've been prototyping a client/server model for dijo so I can deploy my own server and have all of my client devices pull and push data to the server. Please thumb up if you want to see this in a PR!

Feature: Add a non interactive mode.
What I mean by this is to have the option where dijo just outputs the goal grid and then exits.

My reason for this is that I am setting up an external monitor where I can always show my calendar, tasks, and dijo as a habit tracker. I am attempting to make my system more visible throughout the day. From this view I would never input anything it would be just read only, and through scripting I could run the commands every so often to display dijo information.

Feature: allow editing past days of a habit
I know that a few people have mentioned this as a need. I can definitely back it up. I have had to several times go into the json and make manual adjustments. I think adding a :e ... or an insert mode when hovering over a habit to launch it into a view where you can move between the days and press enter or delete to adjust habits would be awesome.
If the idea is to keep this vimlike I think the idea of hitting i to go into insert mode to edit a task would be awesome. Maybe the :e ... syntax could be used for the :set ... idea mentioned in a thread to adjust details about a habit.

I'd really like to be able to associate an arbitrary command to certain tasks.

Say for example my task is to write track my weight every day, I'd like to be able to press o for example, and run $EDITOR $HOME/weight-tracking.txt. If this could include command substitution it would be even more useful for something like file-per-day diary entries.

Another example would be a task that requires me to complete a task from visiting a website, I hit a button, and it opens $BROWSER https://websiteuri.tld.

tthn0 commented

I would like to be able to change the path of the habit_record.json, habit_record[auto].json, and config.toml on macOS.

I would like to be able to change the path of the habit_record.json, habit_record[auto].json, and config.toml on macOS.

This feature could still be good to have but if you need to have it now you can always create symlinks.

gnull commented

I absolutely love dijo, looks like it has almost everything I wanted from a habit tracker (and comes in a nice terminal interface!)

I have a couple of ideas, things that I personally would want to have in an app like this. Let me know what you think, maybe I could help out with the implementation if you're willing to accept contributions on these (or other related) things.

  1. Grouping habits. It can be useful to group similar habits and report your progress in them together. For example, if your goals are attending X wrestling classes, running distance Y, doing Z pull-ups a week, it makes sense to group them and display your total progression is sports. Maybe we could display the number of goals reached/total number of goals or average percentage to reaching a goal over all goals in the "sports" group.

    I did this in my personal scripts I used for tracking habits before and found it extremely convenient!

  2. Tracking time. This might be related to tracking floating-point valued goals as mentioned @aklsh. I found it very useful to track time I spend doing something instead of the amount of results I got. This way feel less lazy starting a task, because thinking of spending X time on a task feels less stressful than achieving X result. And it seems to work, spending time and doing it regularly gives results for me.

    This shouldn't be particularly hard to implement, because time can be reduced to integer number of minutes. Could we just add (for now) some code to parse values which have colon in them as time? For example, parse "02:10" as integer 130?

  3. Leaving notes. It feels rewarding to look back at your habits and see how your experience with them was changing, or what important achievements you got from practicing the habit. For example, I used to leave notes for some chunks of time I input into my tracker, saying something like "couldn't concentrate, spent 5 hours staring at a few pages โ˜น" or "read half of a paper in 2 hours as if it was nothing!". Looking back at the pleasant past experiences is a way to refresh the good feelings that practicing a habit gives you, and looking back at the unpleasant ones is helpful to remember how you dealt with it in the past and prepare you do deal with it again.

Any criticism is welcome!

I've just tried this program a little bit, but it seems very nice! Here are to features I miss however...

  • Changing location of the *.json files. I don't sync the ~/.local/share folder or take a backup of it, so it would be nice to be able to move the dijo folder somwhere else.
  • Non-interactive information output I'm using bars to display information about various things. It would be nice to be able to just output the "Today: 4 completed, 1 remaining" with a single command without entering the application, so it would be possible to view it in a bar or a notifcation.
  • Auto trackable and interactive habits Making tracks auto-trackable and "regular" would make it possible to both add tracks with a keybinding or alias and through the applications, depending on what you want for the moment.
  • Auto reload list The possability to make the application automatically reload the *.json files. This would also require the application to write to the json files whenever the list is changed instead of saving when the application exists as it seems to do now.

It seems auto-habits cannot be interacted with in the TUI? I like to be able to use both the TUI and the dijo -c ... for my habits.

@vinicius0197 @skbolton

With v0.2.6, you can edit habits for any day, use Shift+{h,j,k,l} to move between days, use } to reset the cursor back to the current day. I hope to tackle the following before v0.3:

  • keybind configuration (I'm sure not everyone likes the current options)
  • more habit kinds, a floating point one, an "addiction" type habit (#36), and so on
  • change location of data files
  • a query system (probably return json for now)

I understand it has been nearly half a year since the last "big" release, apologies for the delay.

@NightMachinary @yokisuci tracking automatic habits via scripts as well as the UI could result in race conditions, I don't plan on changing the behavior of auto-habits for now.

Re: Auto reload list: The json files related to auto-habits are reloaded every time the user interacts with dijo (the UI only reloads when the user interacts with the program, unlike other TUIs that refresh once every 1/60th of a second). See File Watchers.

Hi Akshay, love this project. Super simple feature request: A way to print habit info to stdout in a way that tools like gnuplot could easily interact with. Would be cool for using data collected via dijo in other projects.

@jarbus all habit data is stored in a json file so that power users may extract and reshape habit data. Here is an example with jq and spark:

$ jq -r 'map(select(.name == "french"))|.[0].stats|to_entries|sort_by(.key)|map(.value)|@csv' \
.local/share/dijo/habit_record.json | spark
โ–„โ–โ–ƒโ–ƒโ–‚โ–„โ–„โ–ˆโ–ƒโ–…โ–โ–…โ–†โ–โ–ƒโ–…โ–„โ–…โ–„โ–ƒโ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–ƒโ–…โ–„โ–„โ–„โ–„โ–โ–„โ–„โ–‚โ–„โ–…โ–„โ–„โ–„โ–โ–‡โ–…โ–…โ–‚โ–„โ–ƒโ–„โ–ƒโ–†โ–…โ–โ–…โ–„โ–‡โ–„โ–„โ–†โ–…โ–โ–โ–โ–โ–โ–โ–โ–โ–โ–โ–โ–โ–‚

You can find the habit data spec over at the wiki. I did briefly consider a query system a few months ago, but a variety of other tools excel at handling json data, so I dropped the idea.

I did briefly consider a query system a few months ago, but a variety of other tools excel at handling json data, so I dropped the idea.

I do think having a simple and easy way to show dijo's stats would be amazing. I just tried out the command you suggested, really cool thanks for the recommendation.

However not being a programmer myself and not being used to manipulate json files, having a beginner friendly way to display stats while using dijo is a great idea and something I'd personally really enjoy

@NerdyPepper I've been testing spark and it's pretty nice, would love to hear your thoughts on how to make it work for true/false habits

Results from Count Habits

I get results like this
โ–ƒโ–โ–โ–โ–‚โ–ˆโ–โ–‚โ–‚โ–โ–โ–โ–โ–โ–„โ–โ–‚โ–โ–‚โ–โ–โ–ƒโ–„โ–…โ–โ–โ–‚โ–โ–โ–‚โ–โ–

from something like this

From True / False Habits

However if I have something like this:

which is a true false boolean

image

using the same command, I only manage to a block like this

image

Displaying nicely True /False habits

Do you have any tips on how to make a command to show nicely as a block timeline, ideally something like this?

โ–โ–โ–ˆโ–ˆโ–ˆโ–โ–ˆโ–โ–โ–ˆโ–ˆโ–โ–โ–โ–โ–โ–ˆโ–ˆโ–โ–โ–ˆโ–โ–ˆโ–โ–ˆโ–ˆโ–โ–ˆโ–โ–ˆโ–ˆโ–โ–ˆโ–โ–ˆโ–

This above is the result of doing a fake boolean with numbers of 1 for false and 2 for true, just to simulate what I'd like the graphic to display
image

Thanks, would appreciate your thoughts on how to implement this

This is a simple one. Change the starting day of the week. The starting day seems to be Saturday for me.

This is a simple one. Change the starting day of the week. The starting day seems to be Saturday for me.

Thanks, I'm not sure I understand what you mean, what day shall I change it to? Can I do it with Monday or Sunday? How do I change the day

This is a simple one. Change the starting day of the week. The starting day seems to be Saturday for me.

Thanks, I'm not sure I understand what you mean, what day shall I change it to? Can I do it with Monday or Sunday? How do I change the day

I guess an option in config makes the most sense.

Another relatively simple feature would be current streak and max streak next to the habit name.

Another relatively simple feature would be current streak and max streak next to the habit name.

I agree, good idea!

Just want to give my +1 to the auto save feature. Just lost all my data.

I installed the app a week ago and left if open in a terminal windows that I closed yesterday. Now all my data is gone. Neighter the readme nor the 'Getting Startedpage mentions that we have to:write` manually.

I read in other issue that this behavior mimics the behavior of vim and other software. I don't think it makes sense to a habit tracker to mimic the behavior of a text editor. I think its more reaseanable to mimic an app like taskwarrior, that just saves everything you do.

Would it be possible to easily edit a previous day's habits? If I'm AFK in the evening or forget to update dijo until the next day I have to go into the json data to edit it.

Would it be possible to easily edit a previous day's habits? If I'm AFK in the evening or forget to update dijo until the next day I have to go into the json data to edit it.

You already can, if you are using a current version. See H, J, K, L, [, ], and } in https://github.com/NerdyPepper/dijo/wiki/Commands

Would it be possible to easily edit a previous day's habits? If I'm AFK in the evening or forget to update dijo until the next day I have to go into the json data to edit it.

You already can, if you are using a current version. See H, J, K, L, [, ], and } in https://github.com/NerdyPepper/dijo/wiki/Commands

My bad, I don't know how I missed this. Thank you!

There should be a configuration option for the start of the day. A lot of people stay up past twelve, and to have the day suddenly change really messes stuff up.