Skip to content

Instantly share code, notes, and snippets.

@yumaikas
Last active May 6, 2023 04:46
Show Gist options
  • Save yumaikas/39a8830adeb9e3556718e4be88d5380e to your computer and use it in GitHub Desktop.
Save yumaikas/39a8830adeb9e3556718e4be88d5380e to your computer and use it in GitHub Desktop.
Nushell snippet for timers, can be added to config.nu
def-env "timers init" [] {
if not ("~/.timers.nuon" | path exists) {
[{name: _default, start: (date now)}] | save -f ~/.timers.nuon
}
if not ("~/.timers_done.nuon" | path exists) {
[{name: '_default', duration: ((date now) - (date now)), ended: (date now)}] | save -f ~/.timers_done.nuon
}
}
def-env "timers start" [name] {
timers init
let timers = (open ~/.timers.nuon)
if $name in ($timers | get name) {
echo $"Timer ($name) already started"
} else {
$timers | append {name: $name, start: (date now)} | save -f ~/.timers.nuon
}
}
def to-duration [col] {
update $col { |it| (date now) - ($it | get $col) }
}
def-env "timers active" [] {
timers init
open ~/.timers.nuon | where name != "_default" | to-duration start | rename name duration
}
def-env "timers end" [name] {
timers init
let timers = (open ~/.timers.nuon)
let completed = (open ~/.timers_done.nuon)
if not ($name in ($timers | get name)) {
echo $"Timer ($name) not started"
} else {
$timers | where name != $name | save -f ~/.timers.nuon
$completed
| append (
$timers
| where name == $name
| select name start
| to-duration start
| rename name duration
| insert ended (date now)
)
| save -f ~/.timers_done.nuon
}
}
def is-today [dt] {
let to_compare = ($dt | date to-record | select year month day)
let today = (date now | date to-record | select year month day)
return ($to_compare == $today)
}
def-env "timers from today" [] {
timers init
open ~/.timers_done.nuon | where name != "_default" | where (is-today $it.ended)
}
def-env "timers summary" [] {
timers from today
| group-by name
| transpose name entries
| update entries { |it| $it.entries | get duration | math sum }
| rename name total_duration
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment