vault backup: 2026-06-01 17:13:50
This commit is contained in:
Vendored
+49
-25
@@ -1,35 +1,59 @@
|
|||||||
{
|
{
|
||||||
"items": [
|
"items": [
|
||||||
{
|
{
|
||||||
"type": "file",
|
"type": "group",
|
||||||
"ctime": 1754398939230,
|
"ctime": 1780330987866,
|
||||||
"path": "full-takeoff.md",
|
"items": [
|
||||||
"title": "Full Takeoff"
|
{
|
||||||
|
"type": "file",
|
||||||
|
"ctime": 1760361633886,
|
||||||
|
"path": "TODO.md"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "file",
|
||||||
|
"ctime": 1780330914026,
|
||||||
|
"path": "home.md",
|
||||||
|
"title": "Home"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "General"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "file",
|
"type": "group",
|
||||||
"ctime": 1760361633886,
|
"ctime": 1780330954006,
|
||||||
"path": "TODO.md"
|
"items": [
|
||||||
|
{
|
||||||
|
"type": "file",
|
||||||
|
"ctime": 1769779428614,
|
||||||
|
"path": "wishlist.md"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "Personal"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "file",
|
"type": "group",
|
||||||
"ctime": 1769779428614,
|
"ctime": 1780330940827,
|
||||||
"path": "wishlist.md"
|
"items": [
|
||||||
},
|
{
|
||||||
{
|
"type": "file",
|
||||||
"type": "file",
|
"ctime": 1754398939230,
|
||||||
"ctime": 1761313177282,
|
"path": "full-takeoff.md",
|
||||||
"path": "nfpa-70_national-electric-code.md"
|
"title": "Full Takeoff"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "file",
|
"type": "file",
|
||||||
"ctime": 1766074735360,
|
"ctime": 1761313177282,
|
||||||
"path": "consolidate-estimating-thoughts.md"
|
"path": "nfpa-70_national-electric-code.md"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "file",
|
"type": "file",
|
||||||
"ctime": 1769269535439,
|
"ctime": 1780328464803,
|
||||||
"path": "digital-garden-homepage.md"
|
"path": "timestamped/2026-05-22_11-57-18.md",
|
||||||
|
"subpath": "#ConEst's Purpose Considering its Accuracy",
|
||||||
|
"title": "ConEst's Purpose Considering its Accuracy"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "Occupational"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
Vendored
+5
-1
@@ -25,5 +25,9 @@
|
|||||||
"neighbouring-files",
|
"neighbouring-files",
|
||||||
"cmdr",
|
"cmdr",
|
||||||
"sheets",
|
"sheets",
|
||||||
"tabout"
|
"tabout",
|
||||||
|
"inline-spoilers",
|
||||||
|
"obsidian-quiet-outline",
|
||||||
|
"tasknotes",
|
||||||
|
"daily-notes-editor"
|
||||||
]
|
]
|
||||||
+16
@@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
"hideFrontmatter": true,
|
||||||
|
"hideBacklinks": false,
|
||||||
|
"createAndOpenOnStartup": false,
|
||||||
|
"useArrowUpOrDownToNavigate": false,
|
||||||
|
"preset": [
|
||||||
|
{
|
||||||
|
"type": "folder",
|
||||||
|
"target": "timestamped"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "folder",
|
||||||
|
"target": "daily"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
+4251
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"id": "daily-notes-editor",
|
||||||
|
"name": "Daily Notes Editor",
|
||||||
|
"version": "1.1.0",
|
||||||
|
"minAppVersion": "0.15.0",
|
||||||
|
"description": "Edit a bunch of daily notes in one page(inline), which works similar to Roam Research's default daily note view.",
|
||||||
|
"author": "Boninall",
|
||||||
|
"authorUrl": "https://github.com/Quorafind",
|
||||||
|
"fundingUrl": {
|
||||||
|
"Buy Me a Coffee": "https://www.buymeacoffee.com/boninall",
|
||||||
|
"爱发电": "https://afdian.net/a/boninall",
|
||||||
|
"支付宝": "https://cdn.jsdelivr.net/gh/Quorafind/.github@main/IMAGE/%E6%94%AF%E4%BB%98%E5%AE%9D%E4%BB%98%E6%AC%BE%E7%A0%81.jpg"
|
||||||
|
},
|
||||||
|
"isDesktopOnly": false
|
||||||
|
}
|
||||||
+220
@@ -0,0 +1,220 @@
|
|||||||
|
.dn-editor {
|
||||||
|
/*overflow-y: hidden;*/
|
||||||
|
}
|
||||||
|
|
||||||
|
.dn-editor .cm-scroller {
|
||||||
|
/*overflow-y: hidden;*/
|
||||||
|
padding: unset;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dn-editor .workspace-leaf {
|
||||||
|
all: unset;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dn-editor .dn-content {
|
||||||
|
display: none;
|
||||||
|
/*margin: 0;*/
|
||||||
|
/*border-radius: var(--he-popover-border-radius);*/
|
||||||
|
/*overflow: hidden;*/
|
||||||
|
/*height: 100%;*/
|
||||||
|
}
|
||||||
|
|
||||||
|
.dn-editor .workspace-leaf,
|
||||||
|
.dn-editor .workspace-split {
|
||||||
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dn-editor .markdown-source-view.mod-cm6 .cm-editor {
|
||||||
|
min-height: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dn-editor .cm-content {
|
||||||
|
padding-bottom: 0 !important;
|
||||||
|
padding-top: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dn-editor .view-content {
|
||||||
|
background: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dn-editor .cm-scroller {
|
||||||
|
padding: 0 !important;
|
||||||
|
overflow-y: clip;
|
||||||
|
}
|
||||||
|
.daily-note-view .daily-note-wrapper::before {
|
||||||
|
content: "";
|
||||||
|
display: block;
|
||||||
|
height: 1px;
|
||||||
|
width: var(--file-line-width);
|
||||||
|
margin-bottom: 30px;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
background-color: var(--background-modifier-border);
|
||||||
|
}
|
||||||
|
|
||||||
|
.daily-note-view .daily-note-wrapper:first-of-type::before {
|
||||||
|
height: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.daily-note-view .dn-range-indicator + .daily-note-container::before {
|
||||||
|
height: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.is-popout-window .dn-editor .dn-content {
|
||||||
|
margin: 0;
|
||||||
|
border-radius: var(--he-popover-border-radius);
|
||||||
|
overflow: hidden;
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.is-popout-window .dn-editor .workspace-leaf,
|
||||||
|
.is-popout-window .dn-editor .workspace-split {
|
||||||
|
height: auto;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.is-popout-window .dn-editor .cm-scroller {
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.is-popout-window .dn-editor .markdown-source-view.mod-cm6 {
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.is-popout-window .dn-editor .view-content {
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.is-popout-window .dn-editor .workspace-leaf-content {
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.daily-note-view .embedded-backlinks {
|
||||||
|
min-height: unset !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.daily-note-view {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: var(--size-4-4);
|
||||||
|
overflow-x: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
body.daily-notes-hide-frontmatter
|
||||||
|
.daily-note-view
|
||||||
|
.markdown-source-view.is-live-preview.show-properties
|
||||||
|
.metadata-container {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
body.daily-notes-hide-backlinks .daily-note-view .embedded-backlinks {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Custom Range Modal Styles */
|
||||||
|
.custom-range-date-container {
|
||||||
|
margin-bottom: var(--size-4-2);
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-range-date-container span {
|
||||||
|
width: 100px;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-range-date-container input {
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-range-button-container {
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-end;
|
||||||
|
margin-top: var(--size-4-4);
|
||||||
|
gap: var(--size-4-2);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Preset management styles */
|
||||||
|
.preset-container {
|
||||||
|
margin-bottom: var(--size-4-4);
|
||||||
|
}
|
||||||
|
|
||||||
|
.no-presets-message {
|
||||||
|
color: var(--text-muted);
|
||||||
|
font-style: italic;
|
||||||
|
margin: var(--size-4-2) 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.preset-list {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: var(--size-4-2);
|
||||||
|
margin: var(--size-4-2) 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.preset-item {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
padding: var(--size-2-4) var(--size-4-3);
|
||||||
|
background-color: var(--background-secondary);
|
||||||
|
border-radius: var(--radius-s);
|
||||||
|
}
|
||||||
|
|
||||||
|
.preset-info {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.preset-type {
|
||||||
|
font-weight: bold;
|
||||||
|
margin-right: var(--size-2-2);
|
||||||
|
}
|
||||||
|
|
||||||
|
.preset-actions {
|
||||||
|
display: flex;
|
||||||
|
gap: var(--size-4-2);
|
||||||
|
}
|
||||||
|
|
||||||
|
.preset-action-button {
|
||||||
|
padding: var(--size-2-2) var(--size-2-4);
|
||||||
|
border-radius: var(--radius-s);
|
||||||
|
font-size: var(--font-ui-small);
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.preset-open-button {
|
||||||
|
background-color: var(--interactive-accent);
|
||||||
|
color: var(--text-on-accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
.preset-delete-button {
|
||||||
|
background-color: var(--background-modifier-error);
|
||||||
|
color: var(--text-on-accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Add preset modal styles */
|
||||||
|
.setting-item {
|
||||||
|
margin-bottom: var(--size-4-4);
|
||||||
|
}
|
||||||
|
|
||||||
|
.target-input {
|
||||||
|
width: 100%;
|
||||||
|
padding: var(--size-2-3);
|
||||||
|
border-radius: var(--radius-s);
|
||||||
|
border: 1px solid var(--background-modifier-border);
|
||||||
|
background-color: var(--background-primary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-button-container {
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-end;
|
||||||
|
gap: var(--size-4-2);
|
||||||
|
margin-top: var(--size-4-4);
|
||||||
|
}
|
||||||
|
|
||||||
|
.is-phone .mod-root .workspace-tabs:not(.mod-visible):has(.daily-note-view) {
|
||||||
|
display: flex !important;
|
||||||
|
}
|
||||||
|
.daily-note.svelte-1d2sruf.svelte-1d2sruf{margin-bottom:var(--size-4-5);padding-bottom:var(--size-4-8)}.daily-note.svelte-1d2sruf.svelte-1d2sruf:has(.daily-note-editor[data-collapsed="true"]){margin-bottom:0;padding-bottom:0}.daily-note-editor.svelte-1d2sruf.svelte-1d2sruf{min-height:100px}.daily-note-editor[data-collapsed="true"].svelte-1d2sruf.svelte-1d2sruf{display:none}.daily-note.svelte-1d2sruf .collapse-button.svelte-1d2sruf{display:none}.daily-note.svelte-1d2sruf:hover .collapse-button.svelte-1d2sruf{display:block}.daily-note.svelte-1d2sruf .collapse-button.svelte-1d2sruf{color:var(--text-muted)}.daily-note.svelte-1d2sruf .collapse-button.svelte-1d2sruf:hover{color:var(--text-normal)}.daily-note.svelte-1d2sruf:has(.is-readable-line-width) .daily-note-title.svelte-1d2sruf{max-width:calc(var(--file-line-width) + var(--size-4-4));width:calc(var(--file-line-width) + var(--size-4-4));margin-left:auto;margin-right:auto;margin-bottom:var(--size-4-8);display:flex;align-items:center;justify-content:start;gap:var(--size-4-2)}.collapse-button.svelte-1d2sruf.svelte-1d2sruf{margin-left:calc(var(--size-4-8) * -1)}.collapse-button[data-collapsed="true"].svelte-1d2sruf.svelte-1d2sruf{transform:rotate(-90deg);transition:transform 0.2s ease}.daily-note.svelte-1d2sruf:not(:has(.is-readable-line-width)) .daily-note-title.svelte-1d2sruf{display:flex;justify-content:start;align-items:center;width:100%;padding-left:calc(calc(100% - var(--file-line-width)) / 2 - var(--size-4-2));padding-right:calc(calc(100% - var(--file-line-width)) / 2 - var(--size-4-2));margin-top:var(--size-4-8);gap:var(--size-4-2)}.clickable-link.svelte-1d2sruf.svelte-1d2sruf{cursor:pointer;text-decoration:none}.clickable-link.svelte-1d2sruf.svelte-1d2sruf:hover{color:var(--color-accent);text-decoration:underline}.editor-placeholder.svelte-1d2sruf.svelte-1d2sruf{display:flex;justify-content:center;align-items:center;height:100px;color:var(--text-muted);font-style:italic}.collapse-button.svelte-1d2sruf.svelte-1d2sruf{cursor:pointer;display:flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:4px;color:var(--text-muted);transition:background-color 0.2s ease}.collapse-button.svelte-1d2sruf.svelte-1d2sruf:hover{color:var(--text-normal)}.dn-stock.svelte-4q3cv7{height:1000px;width:100%;display:flex;justify-content:center;align-items:center}.dn-stock-text.svelte-4q3cv7{text-align:center}.no-more-text.svelte-4q3cv7{margin-left:auto;margin-right:auto;text-align:center}.dn-blank-day.svelte-4q3cv7{display:flex;margin-left:auto;margin-right:auto;max-width:var(--file-line-width);color:var(--color-base-40);padding-top:20px;padding-bottom:20px;transition:all 300ms}.dn-blank-day.svelte-4q3cv7:hover{padding-top:40px;padding-bottom:40px;transition:padding 300ms}.dn-blank-day-text.svelte-4q3cv7{margin-left:auto;margin-right:auto;text-align:center}.daily-note-wrapper.svelte-4q3cv7{width:100%}
|
||||||
+4
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"showAllSpoilers": false,
|
||||||
|
"enableEditorMode": true
|
||||||
|
}
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
{
|
||||||
|
"search_support": true,
|
||||||
|
"level_switch": true,
|
||||||
|
"markdown": true,
|
||||||
|
"expand_level": "0",
|
||||||
|
"hide_unsearched": true,
|
||||||
|
"auto_expand_ext": "only-expand",
|
||||||
|
"regex_search": false,
|
||||||
|
"ellipsis": false,
|
||||||
|
"label_direction": "left",
|
||||||
|
"drag_modify": false,
|
||||||
|
"locate_by_cursor": false,
|
||||||
|
"show_popover_key": "ctrlKey",
|
||||||
|
"persist_md_states": true,
|
||||||
|
"keep_search_input": false,
|
||||||
|
"export_format": "{title}",
|
||||||
|
"lang_direction_decide_by": "system",
|
||||||
|
"auto_scroll_into_view": true,
|
||||||
|
"vimlize_canvas": false,
|
||||||
|
"canvas_sort_by": "area",
|
||||||
|
"shown_node_types": [
|
||||||
|
"file",
|
||||||
|
"group",
|
||||||
|
"text",
|
||||||
|
"link"
|
||||||
|
],
|
||||||
|
"heading_truncate_length": 20,
|
||||||
|
"patch_color": false,
|
||||||
|
"primary_color_light": "#18a058",
|
||||||
|
"primary_color_dark": "#63e2b7",
|
||||||
|
"rainbow_line": false,
|
||||||
|
"rainbow_color_1": "#FD8B1F",
|
||||||
|
"rainbow_color_2": "#FFDF00",
|
||||||
|
"rainbow_color_3": "#07EB23",
|
||||||
|
"rainbow_color_4": "#2D8FF0",
|
||||||
|
"rainbow_color_5": "#BC01E2",
|
||||||
|
"font_size": "",
|
||||||
|
"font_family": "",
|
||||||
|
"font_weight": "",
|
||||||
|
"line_height": "",
|
||||||
|
"line_gap": "",
|
||||||
|
"custom_font_color": false,
|
||||||
|
"h1_color": "#000000",
|
||||||
|
"h2_color": "#000000",
|
||||||
|
"h3_color": "#000000",
|
||||||
|
"h4_color": "#000000",
|
||||||
|
"h5_color": "#000000",
|
||||||
|
"h6_color": "#000000",
|
||||||
|
"h1_color_dark": "#000000",
|
||||||
|
"h2_color_dark": "#000000",
|
||||||
|
"h3_color_dark": "#000000",
|
||||||
|
"h4_color_dark": "#000000",
|
||||||
|
"h5_color_dark": "#000000",
|
||||||
|
"h6_color_dark": "#000000"
|
||||||
|
}
|
||||||
@@ -0,0 +1,697 @@
|
|||||||
|
{
|
||||||
|
"timestamped/2026-05-22_11-57-18.md": {
|
||||||
|
"scroll": 8,
|
||||||
|
"cursor": {
|
||||||
|
"from": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
},
|
||||||
|
"to": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"expandedKeys": [
|
||||||
|
"item-1-0"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"home.md": {
|
||||||
|
"scroll": 3.870503487346841,
|
||||||
|
"cursor": {
|
||||||
|
"from": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
},
|
||||||
|
"to": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"expandedKeys": [
|
||||||
|
"item-1-0",
|
||||||
|
"item-2-1"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"periodic/daily/2026-06-01.md": {
|
||||||
|
"scroll": 0,
|
||||||
|
"cursor": {
|
||||||
|
"from": {
|
||||||
|
"line": 9,
|
||||||
|
"ch": 0
|
||||||
|
},
|
||||||
|
"to": {
|
||||||
|
"line": 9,
|
||||||
|
"ch": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"expandedKeys": []
|
||||||
|
},
|
||||||
|
"periodic/daily/2026-05-30.md": {
|
||||||
|
"scroll": 0,
|
||||||
|
"cursor": {
|
||||||
|
"from": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
},
|
||||||
|
"to": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"expandedKeys": []
|
||||||
|
},
|
||||||
|
"periodic/daily/2026-05-29.md": {
|
||||||
|
"scroll": 0,
|
||||||
|
"cursor": {
|
||||||
|
"from": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
},
|
||||||
|
"to": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"expandedKeys": []
|
||||||
|
},
|
||||||
|
"periodic/daily/2026-05-27.md": {
|
||||||
|
"scroll": 0,
|
||||||
|
"cursor": {
|
||||||
|
"from": {
|
||||||
|
"line": 9,
|
||||||
|
"ch": 0
|
||||||
|
},
|
||||||
|
"to": {
|
||||||
|
"line": 9,
|
||||||
|
"ch": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"expandedKeys": []
|
||||||
|
},
|
||||||
|
"periodic/daily/2026-05-28.md": {
|
||||||
|
"scroll": 0,
|
||||||
|
"cursor": {
|
||||||
|
"from": {
|
||||||
|
"line": 9,
|
||||||
|
"ch": 0
|
||||||
|
},
|
||||||
|
"to": {
|
||||||
|
"line": 9,
|
||||||
|
"ch": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"expandedKeys": []
|
||||||
|
},
|
||||||
|
"timestamped/2025-06-13_00-00-00.md": {
|
||||||
|
"scroll": 0,
|
||||||
|
"cursor": {
|
||||||
|
"from": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
},
|
||||||
|
"to": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"expandedKeys": [
|
||||||
|
"item-2-1",
|
||||||
|
"item-1-0"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"periodic/daily/2025-03-08.md": {
|
||||||
|
"scroll": 0,
|
||||||
|
"cursor": {
|
||||||
|
"from": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
},
|
||||||
|
"to": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"expandedKeys": []
|
||||||
|
},
|
||||||
|
"periodic/daily/2026-05-26.md": {
|
||||||
|
"scroll": 0,
|
||||||
|
"cursor": {
|
||||||
|
"from": {
|
||||||
|
"line": 9,
|
||||||
|
"ch": 0
|
||||||
|
},
|
||||||
|
"to": {
|
||||||
|
"line": 9,
|
||||||
|
"ch": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"expandedKeys": []
|
||||||
|
},
|
||||||
|
"periodic/daily/2026-05-25.md": {
|
||||||
|
"scroll": 0,
|
||||||
|
"cursor": {
|
||||||
|
"from": {
|
||||||
|
"line": 9,
|
||||||
|
"ch": 0
|
||||||
|
},
|
||||||
|
"to": {
|
||||||
|
"line": 9,
|
||||||
|
"ch": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"expandedKeys": []
|
||||||
|
},
|
||||||
|
"periodic/daily/2026-05-24.md": {
|
||||||
|
"scroll": 0,
|
||||||
|
"cursor": {
|
||||||
|
"from": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
},
|
||||||
|
"to": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"expandedKeys": []
|
||||||
|
},
|
||||||
|
"periodic/daily/2026-05-23.md": {
|
||||||
|
"scroll": 0,
|
||||||
|
"cursor": {
|
||||||
|
"from": {
|
||||||
|
"line": 9,
|
||||||
|
"ch": 0
|
||||||
|
},
|
||||||
|
"to": {
|
||||||
|
"line": 9,
|
||||||
|
"ch": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"expandedKeys": []
|
||||||
|
},
|
||||||
|
"timestamped/2025-11-01_08-25-00.md": {
|
||||||
|
"scroll": 0,
|
||||||
|
"cursor": {
|
||||||
|
"from": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
},
|
||||||
|
"to": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"expandedKeys": []
|
||||||
|
},
|
||||||
|
"timestamped/2025-11-04_14-52-05.md": {
|
||||||
|
"scroll": 0,
|
||||||
|
"cursor": {
|
||||||
|
"from": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
},
|
||||||
|
"to": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"expandedKeys": []
|
||||||
|
},
|
||||||
|
"timestamped/2025-11-05_00-00-00.md": {
|
||||||
|
"scroll": 0,
|
||||||
|
"cursor": {
|
||||||
|
"from": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
},
|
||||||
|
"to": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"expandedKeys": []
|
||||||
|
},
|
||||||
|
"timestamped/2025-11-06_18-12-00.md": {
|
||||||
|
"scroll": 0,
|
||||||
|
"cursor": {
|
||||||
|
"from": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
},
|
||||||
|
"to": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"expandedKeys": []
|
||||||
|
},
|
||||||
|
"timestamped/2025-11-10_06-53-00.md": {
|
||||||
|
"scroll": 0,
|
||||||
|
"cursor": {
|
||||||
|
"from": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
},
|
||||||
|
"to": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"expandedKeys": []
|
||||||
|
},
|
||||||
|
"timestamped/2025-11-10_10-40-00.md": {
|
||||||
|
"scroll": 0,
|
||||||
|
"cursor": {
|
||||||
|
"from": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
},
|
||||||
|
"to": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"expandedKeys": []
|
||||||
|
},
|
||||||
|
"timestamped/2025-11-10_11-14-00.md": {
|
||||||
|
"scroll": 0,
|
||||||
|
"cursor": {
|
||||||
|
"from": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
},
|
||||||
|
"to": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"expandedKeys": []
|
||||||
|
},
|
||||||
|
"timestamped/2025-11-10_15-15-00.md": {
|
||||||
|
"scroll": 0,
|
||||||
|
"cursor": {
|
||||||
|
"from": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
},
|
||||||
|
"to": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"expandedKeys": []
|
||||||
|
},
|
||||||
|
"timestamped/2025-11-10_20-00-00.md": {
|
||||||
|
"scroll": 0,
|
||||||
|
"cursor": {
|
||||||
|
"from": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
},
|
||||||
|
"to": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"expandedKeys": []
|
||||||
|
},
|
||||||
|
"timestamped/2025-11-11_00-00-00.md": {
|
||||||
|
"scroll": 0,
|
||||||
|
"cursor": {
|
||||||
|
"from": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
},
|
||||||
|
"to": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"expandedKeys": []
|
||||||
|
},
|
||||||
|
"timestamped/2025-11-11_06-06-00.md": {
|
||||||
|
"scroll": 0,
|
||||||
|
"cursor": {
|
||||||
|
"from": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
},
|
||||||
|
"to": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"expandedKeys": []
|
||||||
|
},
|
||||||
|
"timestamped/2025-11-11_14-41-00.md": {
|
||||||
|
"scroll": 0,
|
||||||
|
"cursor": {
|
||||||
|
"from": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
},
|
||||||
|
"to": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"expandedKeys": []
|
||||||
|
},
|
||||||
|
"timestamped/2025-11-13_08-03-00.md": {
|
||||||
|
"scroll": 0,
|
||||||
|
"cursor": {
|
||||||
|
"from": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
},
|
||||||
|
"to": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"expandedKeys": []
|
||||||
|
},
|
||||||
|
"timestamped/2025-11-13_08-19-00.md": {
|
||||||
|
"scroll": 0,
|
||||||
|
"cursor": {
|
||||||
|
"from": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
},
|
||||||
|
"to": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"expandedKeys": []
|
||||||
|
},
|
||||||
|
"timestamped/2025-11-13_08-19-01.md": {
|
||||||
|
"scroll": 0,
|
||||||
|
"cursor": {
|
||||||
|
"from": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
},
|
||||||
|
"to": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"expandedKeys": []
|
||||||
|
},
|
||||||
|
"timestamped/2025-11-13_13-25-27.md": {
|
||||||
|
"scroll": 0,
|
||||||
|
"cursor": {
|
||||||
|
"from": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
},
|
||||||
|
"to": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"expandedKeys": []
|
||||||
|
},
|
||||||
|
"timestamped/2025-11-13_20-41-00.md": {
|
||||||
|
"scroll": 0,
|
||||||
|
"cursor": {
|
||||||
|
"from": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
},
|
||||||
|
"to": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"expandedKeys": []
|
||||||
|
},
|
||||||
|
"timestamped/2025-11-14_13-41-00.md": {
|
||||||
|
"scroll": 0,
|
||||||
|
"cursor": {
|
||||||
|
"from": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
},
|
||||||
|
"to": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"expandedKeys": []
|
||||||
|
},
|
||||||
|
"timestamped/2025-11-16_08-09-00.md": {
|
||||||
|
"scroll": 0,
|
||||||
|
"cursor": {
|
||||||
|
"from": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
},
|
||||||
|
"to": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"expandedKeys": []
|
||||||
|
},
|
||||||
|
"timestamped/2026-05-25_15-02-03.md": {
|
||||||
|
"scroll": 40.27835051546392,
|
||||||
|
"cursor": {
|
||||||
|
"from": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
},
|
||||||
|
"to": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"expandedKeys": []
|
||||||
|
},
|
||||||
|
"the-failure-of-risk-management.md": {
|
||||||
|
"scroll": 110.97590067300452,
|
||||||
|
"cursor": {
|
||||||
|
"from": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
},
|
||||||
|
"to": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"expandedKeys": [
|
||||||
|
"item-1-0",
|
||||||
|
"item-3-8",
|
||||||
|
"item-2-2",
|
||||||
|
"item-3-11",
|
||||||
|
"item-2-15",
|
||||||
|
"item-2-18"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"timestamped/2026-01-25_21-02-00.md": {
|
||||||
|
"scroll": 0.4805194681340998,
|
||||||
|
"cursor": {
|
||||||
|
"from": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
},
|
||||||
|
"to": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"expandedKeys": []
|
||||||
|
},
|
||||||
|
"fooled-by-randomness.md": {
|
||||||
|
"scroll": 102.7064700909515,
|
||||||
|
"cursor": {
|
||||||
|
"from": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
},
|
||||||
|
"to": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"expandedKeys": [
|
||||||
|
"item-1-0",
|
||||||
|
"item-3-7",
|
||||||
|
"item-2-2"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"hubbard_2020_failure.md": {
|
||||||
|
"scroll": 296.0055643717448,
|
||||||
|
"cursor": {
|
||||||
|
"from": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
},
|
||||||
|
"to": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"expandedKeys": [
|
||||||
|
"item-3-46",
|
||||||
|
"item-2-28",
|
||||||
|
"item-1-0"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"consolidate-electrical-info.md": {
|
||||||
|
"scroll": 0,
|
||||||
|
"cursor": {
|
||||||
|
"from": {
|
||||||
|
"line": 11,
|
||||||
|
"ch": 0
|
||||||
|
},
|
||||||
|
"to": {
|
||||||
|
"line": 11,
|
||||||
|
"ch": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"expandedKeys": []
|
||||||
|
},
|
||||||
|
"timestamped/YYYY-MM-DD_HH-mm-ss.md": {
|
||||||
|
"scroll": 0,
|
||||||
|
"cursor": {
|
||||||
|
"from": {
|
||||||
|
"line": 13,
|
||||||
|
"ch": 33
|
||||||
|
},
|
||||||
|
"to": {
|
||||||
|
"line": 13,
|
||||||
|
"ch": 33
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"expandedKeys": []
|
||||||
|
},
|
||||||
|
"timestamped/2026-06-01_16-44-31.md": {
|
||||||
|
"scroll": 0,
|
||||||
|
"cursor": {
|
||||||
|
"from": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
},
|
||||||
|
"to": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"expandedKeys": []
|
||||||
|
},
|
||||||
|
"timestamped/2026-06-01_16-54-37.md": {
|
||||||
|
"scroll": 0,
|
||||||
|
"cursor": {
|
||||||
|
"from": {
|
||||||
|
"line": 11,
|
||||||
|
"ch": 0
|
||||||
|
},
|
||||||
|
"to": {
|
||||||
|
"line": 11,
|
||||||
|
"ch": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"expandedKeys": []
|
||||||
|
},
|
||||||
|
"templates/Untitled 1.md": {
|
||||||
|
"scroll": 0,
|
||||||
|
"cursor": {
|
||||||
|
"from": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
},
|
||||||
|
"to": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"expandedKeys": []
|
||||||
|
},
|
||||||
|
"templates/task.md": {
|
||||||
|
"scroll": 0,
|
||||||
|
"cursor": {
|
||||||
|
"from": {
|
||||||
|
"line": 9,
|
||||||
|
"ch": 82
|
||||||
|
},
|
||||||
|
"to": {
|
||||||
|
"line": 9,
|
||||||
|
"ch": 82
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"expandedKeys": []
|
||||||
|
},
|
||||||
|
"templates/timestamped.md": {
|
||||||
|
"scroll": 0,
|
||||||
|
"cursor": {
|
||||||
|
"from": {
|
||||||
|
"line": 6,
|
||||||
|
"ch": 2
|
||||||
|
},
|
||||||
|
"to": {
|
||||||
|
"line": 6,
|
||||||
|
"ch": 2
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"expandedKeys": []
|
||||||
|
},
|
||||||
|
"templates/untitled.md": {
|
||||||
|
"scroll": 0,
|
||||||
|
"cursor": {
|
||||||
|
"from": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
},
|
||||||
|
"to": {
|
||||||
|
"line": 0,
|
||||||
|
"ch": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"expandedKeys": []
|
||||||
|
},
|
||||||
|
"timestamped/2026-06-01_17-07-41.md": {
|
||||||
|
"scroll": 0,
|
||||||
|
"cursor": {
|
||||||
|
"from": {
|
||||||
|
"line": 8,
|
||||||
|
"ch": 40
|
||||||
|
},
|
||||||
|
"to": {
|
||||||
|
"line": 8,
|
||||||
|
"ch": 40
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"expandedKeys": []
|
||||||
|
},
|
||||||
|
"timestamped/2026-06-01_17-09-04.md": {
|
||||||
|
"scroll": 0,
|
||||||
|
"cursor": {
|
||||||
|
"from": {
|
||||||
|
"line": 11,
|
||||||
|
"ch": 0
|
||||||
|
},
|
||||||
|
"to": {
|
||||||
|
"line": 11,
|
||||||
|
"ch": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"expandedKeys": []
|
||||||
|
},
|
||||||
|
"timestamped/2026-06-01_08-31-48.md": {
|
||||||
|
"scroll": 0,
|
||||||
|
"cursor": {
|
||||||
|
"from": {
|
||||||
|
"line": 21,
|
||||||
|
"ch": 0
|
||||||
|
},
|
||||||
|
"to": {
|
||||||
|
"line": 21,
|
||||||
|
"ch": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"expandedKeys": []
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -25,6 +25,9 @@
|
|||||||
"filenameAsDateFolders": [],
|
"filenameAsDateFolders": [],
|
||||||
"recurrenceOnNextLine": false,
|
"recurrenceOnNextLine": false,
|
||||||
"removeScheduledDateOnRecurrence": false,
|
"removeScheduledDateOnRecurrence": false,
|
||||||
|
"searchResults": {
|
||||||
|
"taskCountLocation": "bottom"
|
||||||
|
},
|
||||||
"statusSettings": {
|
"statusSettings": {
|
||||||
"coreStatuses": [
|
"coreStatuses": [
|
||||||
{
|
{
|
||||||
|
|||||||
+518
@@ -0,0 +1,518 @@
|
|||||||
|
{
|
||||||
|
"tasksFolder": "tasks",
|
||||||
|
"moveArchivedTasks": false,
|
||||||
|
"archiveFolder": "TaskNotes/Archive",
|
||||||
|
"taskTag": "type/task",
|
||||||
|
"taskIdentificationMethod": "tag",
|
||||||
|
"hideIdentifyingTagsInCards": false,
|
||||||
|
"hideIdentifyingTagsMode": "all",
|
||||||
|
"taskPropertyName": "",
|
||||||
|
"taskPropertyValue": "",
|
||||||
|
"excludedFolders": "templates",
|
||||||
|
"defaultTaskPriority": "normal",
|
||||||
|
"defaultTaskStatus": "open",
|
||||||
|
"taskOrgFiltersCollapsed": false,
|
||||||
|
"taskFilenameFormat": "custom",
|
||||||
|
"storeTitleInFilename": false,
|
||||||
|
"customFilenameTemplate": "{{date}}_{{hourPadded}}-{{minute}}-{{second}}",
|
||||||
|
"taskCreationDefaults": {
|
||||||
|
"defaultContexts": "",
|
||||||
|
"defaultTags": "",
|
||||||
|
"defaultProjects": "",
|
||||||
|
"useParentNoteAsProject": false,
|
||||||
|
"useParentHeaderAsProject": false,
|
||||||
|
"inheritParentTaskProperties": false,
|
||||||
|
"defaultTimeEstimate": 0,
|
||||||
|
"defaultRecurrence": "none",
|
||||||
|
"defaultDueDate": "none",
|
||||||
|
"defaultDueTime": "none",
|
||||||
|
"defaultScheduledDate": "today",
|
||||||
|
"defaultScheduledTime": "none",
|
||||||
|
"bodyTemplate": "templates/task",
|
||||||
|
"useBodyTemplate": true,
|
||||||
|
"defaultReminders": []
|
||||||
|
},
|
||||||
|
"openTaskAfterCreation": "none",
|
||||||
|
"calendarViewSettings": {
|
||||||
|
"defaultView": "dayGridMonth",
|
||||||
|
"customDayCount": 3,
|
||||||
|
"slotDuration": "00:15:00",
|
||||||
|
"slotMinTime": "00:00:00",
|
||||||
|
"slotMaxTime": "24:00:00",
|
||||||
|
"scrollTime": "08:00:00",
|
||||||
|
"firstDay": 0,
|
||||||
|
"timeFormat": "24",
|
||||||
|
"showWeekends": true,
|
||||||
|
"locale": "",
|
||||||
|
"defaultShowScheduled": true,
|
||||||
|
"defaultShowDue": true,
|
||||||
|
"defaultShowDueWhenScheduled": true,
|
||||||
|
"defaultShowScheduledToDueSpan": false,
|
||||||
|
"defaultShowTimeEntries": false,
|
||||||
|
"defaultShowRecurring": true,
|
||||||
|
"defaultShowICSEvents": true,
|
||||||
|
"enableTimeblocking": true,
|
||||||
|
"defaultShowTimeblocks": true,
|
||||||
|
"defaultTimeblockColor": "#6366f1",
|
||||||
|
"timeblockAttachmentSearchOrder": "name-asc",
|
||||||
|
"nowIndicator": true,
|
||||||
|
"selectMirror": true,
|
||||||
|
"weekNumbers": true,
|
||||||
|
"showTodayHighlight": true,
|
||||||
|
"eventMinHeight": 15,
|
||||||
|
"slotEventOverlap": true,
|
||||||
|
"eventMaxStack": null,
|
||||||
|
"dayMaxEvents": true,
|
||||||
|
"dayMaxEventRows": false
|
||||||
|
},
|
||||||
|
"pomodoroWorkDuration": 25,
|
||||||
|
"pomodoroShortBreakDuration": 5,
|
||||||
|
"pomodoroLongBreakDuration": 15,
|
||||||
|
"pomodoroLongBreakInterval": 4,
|
||||||
|
"pomodoroAutoStartBreaks": false,
|
||||||
|
"pomodoroAutoStartWork": false,
|
||||||
|
"pomodoroNotifications": true,
|
||||||
|
"pomodoroSoundEnabled": true,
|
||||||
|
"pomodoroSoundVolume": 50,
|
||||||
|
"pomodoroStorageLocation": "daily-notes",
|
||||||
|
"pomodoroMobileSidebar": "tab",
|
||||||
|
"showPomodoroInStatusBar": true,
|
||||||
|
"enableTaskLinkOverlay": true,
|
||||||
|
"disableOverlayOnAlias": false,
|
||||||
|
"enableInstantTaskConvert": true,
|
||||||
|
"useDefaultsOnInstantConvert": true,
|
||||||
|
"preserveCheckboxOnConvert": false,
|
||||||
|
"taskModalTabMovesFocus": true,
|
||||||
|
"enableNaturalLanguageInput": false,
|
||||||
|
"nlpDefaultToScheduled": true,
|
||||||
|
"nlpLanguage": "en",
|
||||||
|
"uiLanguage": "system",
|
||||||
|
"statusSuggestionTrigger": "*",
|
||||||
|
"nlpTriggers": {
|
||||||
|
"triggers": [
|
||||||
|
{
|
||||||
|
"propertyId": "tags",
|
||||||
|
"trigger": "#",
|
||||||
|
"enabled": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"propertyId": "contexts",
|
||||||
|
"trigger": "@",
|
||||||
|
"enabled": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"propertyId": "projects",
|
||||||
|
"trigger": "+",
|
||||||
|
"enabled": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"propertyId": "status",
|
||||||
|
"trigger": "*",
|
||||||
|
"enabled": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"propertyId": "priority",
|
||||||
|
"trigger": "!",
|
||||||
|
"enabled": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"propertyId": "field_1780347153381",
|
||||||
|
"trigger": "daily:",
|
||||||
|
"enabled": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"singleClickAction": "edit",
|
||||||
|
"doubleClickAction": "openNote",
|
||||||
|
"projectAutosuggest": {
|
||||||
|
"enableFuzzy": false,
|
||||||
|
"rows": [
|
||||||
|
"{title|n(Title)}",
|
||||||
|
"{aliases|n(Aliases)}",
|
||||||
|
"{file.path|n(Path)}"
|
||||||
|
],
|
||||||
|
"showAdvanced": false,
|
||||||
|
"requiredTags": [],
|
||||||
|
"includeFolders": [],
|
||||||
|
"propertyKey": "",
|
||||||
|
"propertyValue": ""
|
||||||
|
},
|
||||||
|
"inlineTaskConvertFolder": "",
|
||||||
|
"disableNoteIndexing": false,
|
||||||
|
"suggestionDebounceMs": 0,
|
||||||
|
"fieldMapping": {
|
||||||
|
"title": "title",
|
||||||
|
"status": "status",
|
||||||
|
"priority": "priority",
|
||||||
|
"due": "due",
|
||||||
|
"scheduled": "scheduled",
|
||||||
|
"contexts": "contexts",
|
||||||
|
"projects": "projects",
|
||||||
|
"timeEstimate": "timeEstimate",
|
||||||
|
"completedDate": "completedDate",
|
||||||
|
"dateCreated": "dateCreated",
|
||||||
|
"dateModified": "dateModified",
|
||||||
|
"recurrence": "recurrence",
|
||||||
|
"recurrenceAnchor": "recurrence_anchor",
|
||||||
|
"recurrenceParent": "recurrence_parent",
|
||||||
|
"occurrenceDate": "occurrence_date",
|
||||||
|
"occurrenceMaterialization": "occurrence_materialization",
|
||||||
|
"occurrenceNextTrigger": "occurrence_next_trigger",
|
||||||
|
"occurrenceTemplate": "occurrence_template",
|
||||||
|
"occurrencePastHorizon": "occurrence_past_horizon",
|
||||||
|
"occurrenceFutureHorizon": "occurrence_future_horizon",
|
||||||
|
"archiveTag": "archived",
|
||||||
|
"timeEntries": "timeEntries",
|
||||||
|
"completeInstances": "complete_instances",
|
||||||
|
"skippedInstances": "skipped_instances",
|
||||||
|
"blockedBy": "blockedBy",
|
||||||
|
"pomodoros": "pomodoros",
|
||||||
|
"icsEventId": "icsEventId",
|
||||||
|
"icsEventTag": "ics_event",
|
||||||
|
"googleCalendarEventId": "googleCalendarEventId",
|
||||||
|
"googleCalendarExceptionEventId": "googleCalendarExceptionEventId",
|
||||||
|
"googleCalendarExceptionOriginalScheduled": "googleCalendarExceptionOriginalScheduled",
|
||||||
|
"googleCalendarMovedOriginalDates": "googleCalendarMovedOriginalDates",
|
||||||
|
"reminders": "reminders",
|
||||||
|
"sortOrder": "tasknotes_manual_order"
|
||||||
|
},
|
||||||
|
"customStatuses": [
|
||||||
|
{
|
||||||
|
"id": "none",
|
||||||
|
"value": "none",
|
||||||
|
"label": "None",
|
||||||
|
"color": "#cccccc",
|
||||||
|
"isCompleted": false,
|
||||||
|
"excludeFromCycle": false,
|
||||||
|
"order": 0,
|
||||||
|
"autoArchive": false,
|
||||||
|
"autoArchiveDelay": 5
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "open",
|
||||||
|
"value": "open",
|
||||||
|
"label": "Open",
|
||||||
|
"color": "#808080",
|
||||||
|
"isCompleted": false,
|
||||||
|
"excludeFromCycle": false,
|
||||||
|
"order": 1,
|
||||||
|
"autoArchive": false,
|
||||||
|
"autoArchiveDelay": 5
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "in-progress",
|
||||||
|
"value": "in-progress",
|
||||||
|
"label": "In progress",
|
||||||
|
"color": "#0066cc",
|
||||||
|
"isCompleted": false,
|
||||||
|
"excludeFromCycle": false,
|
||||||
|
"order": 2,
|
||||||
|
"autoArchive": false,
|
||||||
|
"autoArchiveDelay": 5
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "done",
|
||||||
|
"value": "done",
|
||||||
|
"label": "Done",
|
||||||
|
"color": "#00aa00",
|
||||||
|
"isCompleted": true,
|
||||||
|
"excludeFromCycle": false,
|
||||||
|
"order": 3,
|
||||||
|
"autoArchive": false,
|
||||||
|
"autoArchiveDelay": 5
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"customPriorities": [
|
||||||
|
{
|
||||||
|
"id": "none",
|
||||||
|
"value": "none",
|
||||||
|
"label": "None",
|
||||||
|
"color": "#cccccc",
|
||||||
|
"weight": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "low",
|
||||||
|
"value": "low",
|
||||||
|
"label": "Low",
|
||||||
|
"color": "#00aa00",
|
||||||
|
"weight": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "normal",
|
||||||
|
"value": "normal",
|
||||||
|
"label": "Normal",
|
||||||
|
"color": "#ffaa00",
|
||||||
|
"weight": 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "high",
|
||||||
|
"value": "high",
|
||||||
|
"label": "High",
|
||||||
|
"color": "#ff0000",
|
||||||
|
"weight": 3
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"recurrenceMigrated": false,
|
||||||
|
"lastSeenVersion": "4.10.0",
|
||||||
|
"showReleaseNotesOnUpdate": false,
|
||||||
|
"showTrackedTasksInStatusBar": false,
|
||||||
|
"autoStopTimeTrackingOnComplete": true,
|
||||||
|
"autoStopTimeTrackingNotification": false,
|
||||||
|
"showRelationships": true,
|
||||||
|
"relationshipsPosition": "bottom",
|
||||||
|
"showTaskCardInNote": true,
|
||||||
|
"showCompletedTaskStrikethrough": true,
|
||||||
|
"showExpandableSubtasks": true,
|
||||||
|
"expandSubtasksByDefault": false,
|
||||||
|
"subtaskChevronPosition": "right",
|
||||||
|
"viewsButtonAlignment": "right",
|
||||||
|
"hideCompletedFromOverdue": true,
|
||||||
|
"icsIntegration": {
|
||||||
|
"defaultNoteTemplate": "",
|
||||||
|
"defaultNoteFolder": "",
|
||||||
|
"icsNoteFilenameFormat": "title",
|
||||||
|
"customICSNoteFilenameTemplate": "{title}",
|
||||||
|
"enableAutoExport": false,
|
||||||
|
"autoExportPath": "tasknotes-calendar.ics",
|
||||||
|
"autoExportInterval": 60,
|
||||||
|
"useDurationForExport": false,
|
||||||
|
"excludeArchivedFromExport": false,
|
||||||
|
"excludeCompletedFromExport": false,
|
||||||
|
"requireDueDateForExport": false,
|
||||||
|
"requireScheduledDateForExport": false,
|
||||||
|
"useICSEndAsDue": false
|
||||||
|
},
|
||||||
|
"savedViews": [],
|
||||||
|
"enableNotifications": false,
|
||||||
|
"notificationType": "system",
|
||||||
|
"notificationSoundEnabled": false,
|
||||||
|
"notificationSoundVolume": 50,
|
||||||
|
"enableAPI": false,
|
||||||
|
"apiPort": 8080,
|
||||||
|
"apiAuthToken": "",
|
||||||
|
"enableMCP": false,
|
||||||
|
"webhooks": [],
|
||||||
|
"userFields": [],
|
||||||
|
"modalFieldsConfig": {
|
||||||
|
"version": 1,
|
||||||
|
"fields": [
|
||||||
|
{
|
||||||
|
"id": "title",
|
||||||
|
"fieldType": "core",
|
||||||
|
"group": "basic",
|
||||||
|
"displayName": "Title",
|
||||||
|
"visibleInCreation": true,
|
||||||
|
"visibleInEdit": true,
|
||||||
|
"order": 0,
|
||||||
|
"enabled": true,
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "details",
|
||||||
|
"fieldType": "core",
|
||||||
|
"group": "basic",
|
||||||
|
"displayName": "Details",
|
||||||
|
"visibleInCreation": true,
|
||||||
|
"visibleInEdit": true,
|
||||||
|
"order": 1,
|
||||||
|
"enabled": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "contexts",
|
||||||
|
"fieldType": "core",
|
||||||
|
"group": "metadata",
|
||||||
|
"displayName": "Contexts",
|
||||||
|
"visibleInCreation": true,
|
||||||
|
"visibleInEdit": true,
|
||||||
|
"order": 0,
|
||||||
|
"enabled": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "tags",
|
||||||
|
"fieldType": "core",
|
||||||
|
"group": "metadata",
|
||||||
|
"displayName": "Tags",
|
||||||
|
"visibleInCreation": true,
|
||||||
|
"visibleInEdit": true,
|
||||||
|
"order": 1,
|
||||||
|
"enabled": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "time-estimate",
|
||||||
|
"fieldType": "core",
|
||||||
|
"group": "metadata",
|
||||||
|
"displayName": "Time Estimate",
|
||||||
|
"visibleInCreation": true,
|
||||||
|
"visibleInEdit": true,
|
||||||
|
"order": 2,
|
||||||
|
"enabled": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "projects",
|
||||||
|
"fieldType": "organization",
|
||||||
|
"group": "organization",
|
||||||
|
"displayName": "Projects",
|
||||||
|
"visibleInCreation": true,
|
||||||
|
"visibleInEdit": true,
|
||||||
|
"order": 0,
|
||||||
|
"enabled": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "subtasks",
|
||||||
|
"fieldType": "organization",
|
||||||
|
"group": "organization",
|
||||||
|
"displayName": "Subtasks",
|
||||||
|
"visibleInCreation": true,
|
||||||
|
"visibleInEdit": true,
|
||||||
|
"order": 1,
|
||||||
|
"enabled": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "blocked-by",
|
||||||
|
"fieldType": "dependency",
|
||||||
|
"group": "dependencies",
|
||||||
|
"displayName": "Blocked By",
|
||||||
|
"visibleInCreation": true,
|
||||||
|
"visibleInEdit": true,
|
||||||
|
"order": 0,
|
||||||
|
"enabled": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "blocking",
|
||||||
|
"fieldType": "dependency",
|
||||||
|
"group": "dependencies",
|
||||||
|
"displayName": "Blocking",
|
||||||
|
"visibleInCreation": true,
|
||||||
|
"visibleInEdit": true,
|
||||||
|
"order": 1,
|
||||||
|
"enabled": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"groups": [
|
||||||
|
{
|
||||||
|
"id": "basic",
|
||||||
|
"displayName": "Basic Information",
|
||||||
|
"order": 0,
|
||||||
|
"collapsible": false,
|
||||||
|
"defaultCollapsed": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "metadata",
|
||||||
|
"displayName": "Metadata",
|
||||||
|
"order": 1,
|
||||||
|
"collapsible": true,
|
||||||
|
"defaultCollapsed": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "organization",
|
||||||
|
"displayName": "Organization",
|
||||||
|
"order": 2,
|
||||||
|
"collapsible": true,
|
||||||
|
"defaultCollapsed": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dependencies",
|
||||||
|
"displayName": "Dependencies",
|
||||||
|
"order": 3,
|
||||||
|
"collapsible": true,
|
||||||
|
"defaultCollapsed": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "custom",
|
||||||
|
"displayName": "Custom Fields",
|
||||||
|
"order": 4,
|
||||||
|
"collapsible": true,
|
||||||
|
"defaultCollapsed": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"enableModalSplitLayout": true,
|
||||||
|
"defaultVisibleProperties": [
|
||||||
|
"status",
|
||||||
|
"priority",
|
||||||
|
"blocked",
|
||||||
|
"blocking"
|
||||||
|
],
|
||||||
|
"inlineVisibleProperties": [
|
||||||
|
"status",
|
||||||
|
"priority",
|
||||||
|
"due",
|
||||||
|
"scheduled",
|
||||||
|
"recurrence"
|
||||||
|
],
|
||||||
|
"enableBases": true,
|
||||||
|
"enableMdbaseSpec": false,
|
||||||
|
"autoCreateDefaultBasesFiles": true,
|
||||||
|
"commandFileMapping": {
|
||||||
|
"open-calendar-view": "tasks/views/mini-calendar-default.base",
|
||||||
|
"open-kanban-view": "tasks/views/kanban-default.base",
|
||||||
|
"open-tasks-view": "tasks/views/tasks-default.base",
|
||||||
|
"open-advanced-calendar-view": "tasks/views/calendar-default.base",
|
||||||
|
"open-agenda-view": "tasks/views/agenda-default.base",
|
||||||
|
"pomodoro-stats-base": "tasks/views/pomodoro-stats.base",
|
||||||
|
"relationships": "tasks/views/relationships.base"
|
||||||
|
},
|
||||||
|
"maintainDueDateOffsetInRecurring": false,
|
||||||
|
"resetCheckboxesOnRecurrence": false,
|
||||||
|
"useFrontmatterMarkdownLinks": false,
|
||||||
|
"googleOAuthClientId": "",
|
||||||
|
"googleOAuthClientSecret": "",
|
||||||
|
"microsoftOAuthClientId": "",
|
||||||
|
"microsoftOAuthClientSecret": "",
|
||||||
|
"enableGoogleCalendar": false,
|
||||||
|
"enableMicrosoftCalendar": false,
|
||||||
|
"disableCalendarOnMobile": false,
|
||||||
|
"enabledGoogleCalendars": [],
|
||||||
|
"googleCalendarSyncTokens": {},
|
||||||
|
"enabledMicrosoftCalendars": [],
|
||||||
|
"microsoftCalendarSyncTokens": {},
|
||||||
|
"googleCalendarExport": {
|
||||||
|
"enabled": false,
|
||||||
|
"targetCalendarId": "",
|
||||||
|
"syncOnTaskCreate": true,
|
||||||
|
"syncOnTaskUpdate": true,
|
||||||
|
"syncOnTaskComplete": true,
|
||||||
|
"syncOnTaskDelete": true,
|
||||||
|
"eventTitleTemplate": "{{title}}",
|
||||||
|
"includeDescription": true,
|
||||||
|
"eventColorId": null,
|
||||||
|
"syncTrigger": "scheduled",
|
||||||
|
"createAsAllDay": true,
|
||||||
|
"defaultEventDuration": 60,
|
||||||
|
"includeObsidianLink": true,
|
||||||
|
"defaultReminderMinutes": null
|
||||||
|
},
|
||||||
|
"enableDebugLogging": false,
|
||||||
|
"googleCalendarSyncQueue": [
|
||||||
|
{
|
||||||
|
"taskPath": "timestamped/YYYY-MM-DD_HH-mm-ss.md",
|
||||||
|
"requestedAt": 1780346458397,
|
||||||
|
"attempts": 0,
|
||||||
|
"lastError": "Google Calendar sync is not ready"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"taskPath": "timestamped/2026-06-01_16-44-31.md",
|
||||||
|
"requestedAt": 1780346671952,
|
||||||
|
"attempts": 0,
|
||||||
|
"lastError": "Google Calendar sync is not ready"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"taskPath": "timestamped/2026-06-01_16-54-37.md",
|
||||||
|
"requestedAt": 1780347277788,
|
||||||
|
"attempts": 0,
|
||||||
|
"lastError": "Google Calendar sync is not ready"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"taskPath": "timestamped/2026-06-01_17-07-41.md",
|
||||||
|
"requestedAt": 1780348061498,
|
||||||
|
"attempts": 0,
|
||||||
|
"lastError": "Google Calendar sync is not ready"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"taskPath": "timestamped/2026-06-01_17-09-04.md",
|
||||||
|
"requestedAt": 1780348144101,
|
||||||
|
"attempts": 0,
|
||||||
|
"lastError": "Google Calendar sync is not ready"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
Vendored
+1155
File diff suppressed because one or more lines are too long
+10
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"id": "tasknotes",
|
||||||
|
"name": "TaskNotes",
|
||||||
|
"version": "4.10.0",
|
||||||
|
"minAppVersion": "1.12.2",
|
||||||
|
"description": "Note-based task management with calendar, pomodoro and time-tracking integration.",
|
||||||
|
"author": "Callum Alpass",
|
||||||
|
"authorUrl": "https://github.com/callumalpass",
|
||||||
|
"isDesktopOnly": false
|
||||||
|
}
|
||||||
+22230
File diff suppressed because it is too large
Load Diff
@@ -13,7 +13,7 @@ origlanguage: Czech
|
|||||||
translator: Dora Round
|
translator: Dora Round
|
||||||
type: incollection
|
type: incollection
|
||||||
year: 1935
|
year: 1935
|
||||||
up: "[[poetry]]"
|
|
||||||
---
|
---
|
||||||
# From the Point of View of a Cat
|
# From the Point of View of a Cat
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
---
|
||||||
|
title: Circular Mil
|
||||||
|
tags: []
|
||||||
|
up: "[[electrical-construction]]"
|
||||||
|
---
|
||||||
# Circular Mil
|
# Circular Mil
|
||||||
|
|
||||||
> A [**circular mil**](https://en.wikipedia.org/wiki/Circular_mil)
|
> A [**circular mil**](https://en.wikipedia.org/wiki/Circular_mil)
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ dg-home: true
|
|||||||
## TALK
|
## TALK
|
||||||
|
|
||||||
This is the homepage for the website only.
|
This is the homepage for the website only.
|
||||||
|
See [[home]] for the [[obsidian]] entry point.
|
||||||
|
|
||||||
%%
|
%%
|
||||||
|
|
||||||
|
|||||||
@@ -84,10 +84,12 @@ per [[fire-resistive-wiring-methods-takeoff]].
|
|||||||
.../`CONDENSOR HOME RUNS`
|
.../`CONDENSOR HOME RUNS`
|
||||||
|
|
||||||
* **Horizontal:** Distance from load center to FCU.
|
* **Horizontal:** Distance from load center to FCU.
|
||||||
(~50ft expected)
|
(~50ft expected)[^1]
|
||||||
|
|
||||||
* **Vertical:** floor-to-floor distance from FCU to CU
|
* **Vertical:** floor-to-floor distance from FCU to CU
|
||||||
|
|
||||||
|
[^1]: [[2026-05-04_14-57-49#Unit Condensing Units]]
|
||||||
|
|
||||||
| Level | Horizontal | Vertical | Length |
|
| Level | Horizontal | Vertical | Length |
|
||||||
| :------- | ---------: | -------: | -----: |
|
| :------- | ---------: | -------: | -----: |
|
||||||
| Level 01 | 150 | 40 | 190 |
|
| Level 01 | 150 | 40 | 190 |
|
||||||
@@ -117,7 +119,7 @@ with flex to the equipment.
|
|||||||
|
|
||||||
Max 20 disconnects per rack
|
Max 20 disconnects per rack
|
||||||
|
|
||||||
`DISTRIBUTION`/`TRAPEZE RACK SUPPORT ...`/`...`
|
`DISTRIBUTION`/`TRAPEZE RACK SUPPORT ...`/...
|
||||||
|
|
||||||
## Trash Chute
|
## Trash Chute
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ aliases:
|
|||||||
title: Jared DeFanti
|
title: Jared DeFanti
|
||||||
tags:
|
tags:
|
||||||
- type/person
|
- type/person
|
||||||
|
- occupational
|
||||||
up: "[[conest]]"
|
up: "[[conest]]"
|
||||||
---
|
---
|
||||||
# Jared DeFanti
|
# Jared DeFanti
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
title: Joshua Komis
|
||||||
|
tags:
|
||||||
|
- occupational
|
||||||
|
- type/person
|
||||||
|
up: "[[pdi-bid-estimating]]"
|
||||||
|
---
|
||||||
|
# Joshua Komis
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
title: Milan Hrvacevic
|
||||||
|
tags:
|
||||||
|
- occupational
|
||||||
|
- type/person
|
||||||
|
---
|
||||||
|
# Milan Hrvacevic
|
||||||
@@ -3,6 +3,7 @@ aliases:
|
|||||||
- NECA
|
- NECA
|
||||||
title: National Electrical Contractors Association (NECA)
|
title: National Electrical Contractors Association (NECA)
|
||||||
tags:
|
tags:
|
||||||
|
- topic/construction/electrical
|
||||||
- type/organization
|
- type/organization
|
||||||
---
|
---
|
||||||
# National Electrical Contractors Association (NECA)
|
# National Electrical Contractors Association (NECA)
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
---
|
||||||
|
id: 2026-06-01
|
||||||
|
title: 2026-06-01
|
||||||
|
tags: []
|
||||||
|
weekly: "[[2026w23]]"
|
||||||
|
monthly: "[[2026-06]]"
|
||||||
|
quarterly: "[[2026q2]]"
|
||||||
|
previous: "[[2026-05-31]]"
|
||||||
|
---
|
||||||
|
# 2026-06-01
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
title: 2026w23
|
||||||
|
tags: []
|
||||||
|
yearly: "[[2026]]"
|
||||||
|
previous: "[[2026w22]]"
|
||||||
|
---
|
||||||
|
# 2026w23
|
||||||
@@ -0,0 +1,68 @@
|
|||||||
|
# Agenda
|
||||||
|
|
||||||
|
filters:
|
||||||
|
and:
|
||||||
|
- file.hasTag("type/task")
|
||||||
|
- file.inFolder("templates") != true
|
||||||
|
|
||||||
|
formulas:
|
||||||
|
priorityWeight: 'if(priority=="none",0,if(priority=="low",1,if(priority=="normal",2,if(priority=="high",3,999))))'
|
||||||
|
daysUntilDue: 'if((due.isEmpty() == false), ((number(date(due)) - number(today())) / 86400000).floor(), null)'
|
||||||
|
dueIn: 'if(due.isEmpty(), "", if(formula.daysUntilDue == 0, "Today", if(formula.daysUntilDue == 1, "1 day", if(formula.daysUntilDue > 1, formula.daysUntilDue + " days", if(formula.daysUntilDue == -1, "1 day overdue", formula.daysUntilDue * -1 + " days overdue")))))'
|
||||||
|
daysUntilScheduled: 'if((scheduled.isEmpty() == false), ((number(date(scheduled)) - number(today())) / 86400000).floor(), null)'
|
||||||
|
daysSinceCreated: '((number(now()) - number(file.ctime)) / 86400000).floor()'
|
||||||
|
daysSinceModified: '((number(now()) - number(file.mtime)) / 86400000).floor()'
|
||||||
|
isOverdue: '(due.isEmpty() == false) && date(due) < today() && status != "done"'
|
||||||
|
isDueToday: '(due.isEmpty() == false) && date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")'
|
||||||
|
isDueThisWeek: '(due.isEmpty() == false) && date(due).format("YYYY-MM-DD") >= today().format("YYYY-MM-DD") && date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")'
|
||||||
|
isScheduledToday: '(scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")'
|
||||||
|
isRecurring: 'recurrence && !recurrence.isEmpty()'
|
||||||
|
hasTimeEstimate: 'timeEstimate && timeEstimate > 0'
|
||||||
|
timeRemaining: 'if(timeEstimate && timeEstimate > 0, timeEstimate - if(timeEntries, list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0), 0), null)'
|
||||||
|
efficiencyRatio: 'if(timeEstimate && timeEstimate > 0 && timeEntries, (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) / timeEstimate * 100).round(), null)'
|
||||||
|
timeTrackedThisWeek: 'if(timeEntries, list(timeEntries).filter(value.endTime && date(value.startTime) >= today() - "7d").map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round(), 0)'
|
||||||
|
timeTrackedToday: 'if(timeEntries, list(timeEntries).filter(value.endTime && date(value.startTime).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round(), 0)'
|
||||||
|
dueMonth: 'if((due.isEmpty() == false), date(due).format("YYYY-MM"), "No due date")'
|
||||||
|
dueWeek: 'if((due.isEmpty() == false), date(due).format("YYYY-[W]WW"), "No due date")'
|
||||||
|
scheduledMonth: 'if((scheduled.isEmpty() == false), date(scheduled).format("YYYY-MM"), "Not scheduled")'
|
||||||
|
scheduledWeek: 'if((scheduled.isEmpty() == false), date(scheduled).format("YYYY-[W]WW"), "Not scheduled")'
|
||||||
|
dueDateCategory: 'if(due.isEmpty(), "No due date", if(date(due) < today(), "Overdue", if(date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD"), "Today", if(date(due).format("YYYY-MM-DD") == (today() + "1 day").format("YYYY-MM-DD"), "Tomorrow", if(date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD"), "This week", "Later")))))'
|
||||||
|
timeEstimateCategory: 'if(!timeEstimate || timeEstimate == 0 || timeEstimate == null, "No estimate", if(timeEstimate < 30, "Quick (<30m)", if(timeEstimate <= 120, "Medium (30m-2h)", "Long (>2h)")))'
|
||||||
|
ageCategory: 'if(((number(now()) - number(file.ctime)) / 86400000) < 1, "Today", if(((number(now()) - number(file.ctime)) / 86400000) < 7, "This week", if(((number(now()) - number(file.ctime)) / 86400000) < 30, "This month", "Older")))'
|
||||||
|
createdMonth: 'file.ctime.format("YYYY-MM")'
|
||||||
|
modifiedMonth: 'file.mtime.format("YYYY-MM")'
|
||||||
|
priorityCategory: 'if(priority=="none","None",if(priority=="low","Low",if(priority=="normal","Normal",if(priority=="high","High","No priority"))))'
|
||||||
|
projectCount: 'if(!projects || list(projects).length == 0, "No projects", if(list(projects).length == 1, "Single project", "Multiple projects"))'
|
||||||
|
contextCount: 'if(!contexts || list(contexts).length == 0, "No contexts", if(list(contexts).length == 1, "Single context", "Multiple contexts"))'
|
||||||
|
trackingStatus: 'if(!timeEstimate || timeEstimate == 0 || timeEstimate == null, "No estimate", if(!timeEntries || list(timeEntries).length == 0, "Not started", if(formula.efficiencyRatio < 100, "Under estimate", "Over estimate")))'
|
||||||
|
nextDate: 'if((due.isEmpty() == false) && (scheduled.isEmpty() == false), if(date(due) < date(scheduled), due, scheduled), if((due.isEmpty() == false), due, scheduled))'
|
||||||
|
daysUntilNext: 'if((due.isEmpty() == false) && (scheduled.isEmpty() == false), min(formula.daysUntilDue, formula.daysUntilScheduled), if((due.isEmpty() == false), formula.daysUntilDue, formula.daysUntilScheduled))'
|
||||||
|
hasDate: '(due.isEmpty() == false) || (scheduled.isEmpty() == false)'
|
||||||
|
isToday: '((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") == today().format("YYYY-MM-DD"))'
|
||||||
|
isThisWeek: '((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") >= today().format("YYYY-MM-DD") && date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") >= today().format("YYYY-MM-DD") && date(scheduled).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD"))'
|
||||||
|
nextDateCategory: 'if(due.isEmpty() && scheduled.isEmpty(), "No date", if(((due.isEmpty() == false) && date(due) < today()) || ((scheduled.isEmpty() == false) && date(scheduled) < today()), "Overdue/Past", if(((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")), "Today", if(((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") == (today() + "1 day").format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") == (today() + "1 day").format("YYYY-MM-DD")), "Tomorrow", if(((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")), "This week", "Later")))))'
|
||||||
|
nextDateMonth: 'if((due.isEmpty() == false) && (scheduled.isEmpty() == false), if(date(due) < date(scheduled), date(due).format("YYYY-MM"), date(scheduled).format("YYYY-MM")), if((due.isEmpty() == false), date(due).format("YYYY-MM"), if((scheduled.isEmpty() == false), date(scheduled).format("YYYY-MM"), "No date")))'
|
||||||
|
nextDateWeek: 'if((due.isEmpty() == false) && (scheduled.isEmpty() == false), if(date(due) < date(scheduled), date(due).format("YYYY-[W]WW"), date(scheduled).format("YYYY-[W]WW")), if((due.isEmpty() == false), date(due).format("YYYY-[W]WW"), if((scheduled.isEmpty() == false), date(scheduled).format("YYYY-[W]WW"), "No date")))'
|
||||||
|
urgencyScore: 'if(due.isEmpty() && scheduled.isEmpty(), formula.priorityWeight, formula.priorityWeight + max(0, 10 - if(formula.daysUntilNext, formula.daysUntilNext, 0)) + (1 - ((number(date(formula.nextDate)) - number(date(date(formula.nextDate).format("YYYY-MM-DD")))) / 86400000)))'
|
||||||
|
timeTrackedFormatted: 'if(timeEntries, if(list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) >= 60, (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) / 60).floor() + "h " + (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) % 60).round() + "m", list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round() + "m"), "0m")'
|
||||||
|
dueDateDisplay: 'if(due.isEmpty(), "", if(date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD"), "Today", if(date(due).format("YYYY-MM-DD") == (today() + "1 day").format("YYYY-MM-DD"), "Tomorrow", if(date(due).format("YYYY-MM-DD") == (today() - "1 day").format("YYYY-MM-DD"), "Yesterday", if(date(due) < today(), formula.daysUntilDue * -1 + "d ago", if(date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD"), date(due).format("ddd"), date(due).format("MMM D")))))))'
|
||||||
|
|
||||||
|
|
||||||
|
views:
|
||||||
|
- type: tasknotesCalendar
|
||||||
|
name: "Agenda"
|
||||||
|
order:
|
||||||
|
- status
|
||||||
|
- priority
|
||||||
|
- blockedBy
|
||||||
|
- file.name
|
||||||
|
- recurrence
|
||||||
|
- complete_instances
|
||||||
|
- file.tasks
|
||||||
|
options:
|
||||||
|
showPropertyBasedEvents: false
|
||||||
|
createDailyNotesFromDateLinks: true
|
||||||
|
calendarView: "listWeek"
|
||||||
|
startDateProperty: file.ctime
|
||||||
|
listDayCount: 7
|
||||||
|
titleProperty: file.basename
|
||||||
@@ -0,0 +1,72 @@
|
|||||||
|
# Calendar
|
||||||
|
|
||||||
|
filters:
|
||||||
|
and:
|
||||||
|
- file.hasTag("type/task")
|
||||||
|
- file.inFolder("templates") != true
|
||||||
|
|
||||||
|
formulas:
|
||||||
|
priorityWeight: 'if(priority=="none",0,if(priority=="low",1,if(priority=="normal",2,if(priority=="high",3,999))))'
|
||||||
|
daysUntilDue: 'if((due.isEmpty() == false), ((number(date(due)) - number(today())) / 86400000).floor(), null)'
|
||||||
|
dueIn: 'if(due.isEmpty(), "", if(formula.daysUntilDue == 0, "Today", if(formula.daysUntilDue == 1, "1 day", if(formula.daysUntilDue > 1, formula.daysUntilDue + " days", if(formula.daysUntilDue == -1, "1 day overdue", formula.daysUntilDue * -1 + " days overdue")))))'
|
||||||
|
daysUntilScheduled: 'if((scheduled.isEmpty() == false), ((number(date(scheduled)) - number(today())) / 86400000).floor(), null)'
|
||||||
|
daysSinceCreated: '((number(now()) - number(file.ctime)) / 86400000).floor()'
|
||||||
|
daysSinceModified: '((number(now()) - number(file.mtime)) / 86400000).floor()'
|
||||||
|
isOverdue: '(due.isEmpty() == false) && date(due) < today() && status != "done"'
|
||||||
|
isDueToday: '(due.isEmpty() == false) && date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")'
|
||||||
|
isDueThisWeek: '(due.isEmpty() == false) && date(due).format("YYYY-MM-DD") >= today().format("YYYY-MM-DD") && date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")'
|
||||||
|
isScheduledToday: '(scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")'
|
||||||
|
isRecurring: 'recurrence && !recurrence.isEmpty()'
|
||||||
|
hasTimeEstimate: 'timeEstimate && timeEstimate > 0'
|
||||||
|
timeRemaining: 'if(timeEstimate && timeEstimate > 0, timeEstimate - if(timeEntries, list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0), 0), null)'
|
||||||
|
efficiencyRatio: 'if(timeEstimate && timeEstimate > 0 && timeEntries, (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) / timeEstimate * 100).round(), null)'
|
||||||
|
timeTrackedThisWeek: 'if(timeEntries, list(timeEntries).filter(value.endTime && date(value.startTime) >= today() - "7d").map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round(), 0)'
|
||||||
|
timeTrackedToday: 'if(timeEntries, list(timeEntries).filter(value.endTime && date(value.startTime).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round(), 0)'
|
||||||
|
dueMonth: 'if((due.isEmpty() == false), date(due).format("YYYY-MM"), "No due date")'
|
||||||
|
dueWeek: 'if((due.isEmpty() == false), date(due).format("YYYY-[W]WW"), "No due date")'
|
||||||
|
scheduledMonth: 'if((scheduled.isEmpty() == false), date(scheduled).format("YYYY-MM"), "Not scheduled")'
|
||||||
|
scheduledWeek: 'if((scheduled.isEmpty() == false), date(scheduled).format("YYYY-[W]WW"), "Not scheduled")'
|
||||||
|
dueDateCategory: 'if(due.isEmpty(), "No due date", if(date(due) < today(), "Overdue", if(date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD"), "Today", if(date(due).format("YYYY-MM-DD") == (today() + "1 day").format("YYYY-MM-DD"), "Tomorrow", if(date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD"), "This week", "Later")))))'
|
||||||
|
timeEstimateCategory: 'if(!timeEstimate || timeEstimate == 0 || timeEstimate == null, "No estimate", if(timeEstimate < 30, "Quick (<30m)", if(timeEstimate <= 120, "Medium (30m-2h)", "Long (>2h)")))'
|
||||||
|
ageCategory: 'if(((number(now()) - number(file.ctime)) / 86400000) < 1, "Today", if(((number(now()) - number(file.ctime)) / 86400000) < 7, "This week", if(((number(now()) - number(file.ctime)) / 86400000) < 30, "This month", "Older")))'
|
||||||
|
createdMonth: 'file.ctime.format("YYYY-MM")'
|
||||||
|
modifiedMonth: 'file.mtime.format("YYYY-MM")'
|
||||||
|
priorityCategory: 'if(priority=="none","None",if(priority=="low","Low",if(priority=="normal","Normal",if(priority=="high","High","No priority"))))'
|
||||||
|
projectCount: 'if(!projects || list(projects).length == 0, "No projects", if(list(projects).length == 1, "Single project", "Multiple projects"))'
|
||||||
|
contextCount: 'if(!contexts || list(contexts).length == 0, "No contexts", if(list(contexts).length == 1, "Single context", "Multiple contexts"))'
|
||||||
|
trackingStatus: 'if(!timeEstimate || timeEstimate == 0 || timeEstimate == null, "No estimate", if(!timeEntries || list(timeEntries).length == 0, "Not started", if(formula.efficiencyRatio < 100, "Under estimate", "Over estimate")))'
|
||||||
|
nextDate: 'if((due.isEmpty() == false) && (scheduled.isEmpty() == false), if(date(due) < date(scheduled), due, scheduled), if((due.isEmpty() == false), due, scheduled))'
|
||||||
|
daysUntilNext: 'if((due.isEmpty() == false) && (scheduled.isEmpty() == false), min(formula.daysUntilDue, formula.daysUntilScheduled), if((due.isEmpty() == false), formula.daysUntilDue, formula.daysUntilScheduled))'
|
||||||
|
hasDate: '(due.isEmpty() == false) || (scheduled.isEmpty() == false)'
|
||||||
|
isToday: '((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") == today().format("YYYY-MM-DD"))'
|
||||||
|
isThisWeek: '((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") >= today().format("YYYY-MM-DD") && date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") >= today().format("YYYY-MM-DD") && date(scheduled).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD"))'
|
||||||
|
nextDateCategory: 'if(due.isEmpty() && scheduled.isEmpty(), "No date", if(((due.isEmpty() == false) && date(due) < today()) || ((scheduled.isEmpty() == false) && date(scheduled) < today()), "Overdue/Past", if(((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")), "Today", if(((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") == (today() + "1 day").format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") == (today() + "1 day").format("YYYY-MM-DD")), "Tomorrow", if(((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")), "This week", "Later")))))'
|
||||||
|
nextDateMonth: 'if((due.isEmpty() == false) && (scheduled.isEmpty() == false), if(date(due) < date(scheduled), date(due).format("YYYY-MM"), date(scheduled).format("YYYY-MM")), if((due.isEmpty() == false), date(due).format("YYYY-MM"), if((scheduled.isEmpty() == false), date(scheduled).format("YYYY-MM"), "No date")))'
|
||||||
|
nextDateWeek: 'if((due.isEmpty() == false) && (scheduled.isEmpty() == false), if(date(due) < date(scheduled), date(due).format("YYYY-[W]WW"), date(scheduled).format("YYYY-[W]WW")), if((due.isEmpty() == false), date(due).format("YYYY-[W]WW"), if((scheduled.isEmpty() == false), date(scheduled).format("YYYY-[W]WW"), "No date")))'
|
||||||
|
urgencyScore: 'if(due.isEmpty() && scheduled.isEmpty(), formula.priorityWeight, formula.priorityWeight + max(0, 10 - if(formula.daysUntilNext, formula.daysUntilNext, 0)) + (1 - ((number(date(formula.nextDate)) - number(date(date(formula.nextDate).format("YYYY-MM-DD")))) / 86400000)))'
|
||||||
|
timeTrackedFormatted: 'if(timeEntries, if(list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) >= 60, (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) / 60).floor() + "h " + (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) % 60).round() + "m", list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round() + "m"), "0m")'
|
||||||
|
dueDateDisplay: 'if(due.isEmpty(), "", if(date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD"), "Today", if(date(due).format("YYYY-MM-DD") == (today() + "1 day").format("YYYY-MM-DD"), "Tomorrow", if(date(due).format("YYYY-MM-DD") == (today() - "1 day").format("YYYY-MM-DD"), "Yesterday", if(date(due) < today(), formula.daysUntilDue * -1 + "d ago", if(date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD"), date(due).format("ddd"), date(due).format("MMM D")))))))'
|
||||||
|
|
||||||
|
views:
|
||||||
|
- type: tasknotesCalendar
|
||||||
|
name: "Calendar"
|
||||||
|
order:
|
||||||
|
- status
|
||||||
|
- priority
|
||||||
|
- blockedBy
|
||||||
|
- file.name
|
||||||
|
- recurrence
|
||||||
|
- complete_instances
|
||||||
|
- file.tasks
|
||||||
|
options:
|
||||||
|
showScheduled: true
|
||||||
|
showDue: true
|
||||||
|
showRecurring: true
|
||||||
|
showTimeEntries: true
|
||||||
|
showTimeblocks: true
|
||||||
|
showPropertyBasedEvents: true
|
||||||
|
createDailyNotesFromDateLinks: true
|
||||||
|
calendarView: "timeGridWeek"
|
||||||
|
customDayCount: 3
|
||||||
|
firstDay: 0
|
||||||
|
slotDuration: "00:30:00"
|
||||||
@@ -0,0 +1,69 @@
|
|||||||
|
# Kanban Board
|
||||||
|
|
||||||
|
filters:
|
||||||
|
and:
|
||||||
|
- file.hasTag("type/task")
|
||||||
|
- file.inFolder("templates") != true
|
||||||
|
|
||||||
|
formulas:
|
||||||
|
priorityWeight: 'if(priority=="none",0,if(priority=="low",1,if(priority=="normal",2,if(priority=="high",3,999))))'
|
||||||
|
daysUntilDue: 'if((due.isEmpty() == false), ((number(date(due)) - number(today())) / 86400000).floor(), null)'
|
||||||
|
dueIn: 'if(due.isEmpty(), "", if(formula.daysUntilDue == 0, "Today", if(formula.daysUntilDue == 1, "1 day", if(formula.daysUntilDue > 1, formula.daysUntilDue + " days", if(formula.daysUntilDue == -1, "1 day overdue", formula.daysUntilDue * -1 + " days overdue")))))'
|
||||||
|
daysUntilScheduled: 'if((scheduled.isEmpty() == false), ((number(date(scheduled)) - number(today())) / 86400000).floor(), null)'
|
||||||
|
daysSinceCreated: '((number(now()) - number(file.ctime)) / 86400000).floor()'
|
||||||
|
daysSinceModified: '((number(now()) - number(file.mtime)) / 86400000).floor()'
|
||||||
|
isOverdue: '(due.isEmpty() == false) && date(due) < today() && status != "done"'
|
||||||
|
isDueToday: '(due.isEmpty() == false) && date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")'
|
||||||
|
isDueThisWeek: '(due.isEmpty() == false) && date(due).format("YYYY-MM-DD") >= today().format("YYYY-MM-DD") && date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")'
|
||||||
|
isScheduledToday: '(scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")'
|
||||||
|
isRecurring: 'recurrence && !recurrence.isEmpty()'
|
||||||
|
hasTimeEstimate: 'timeEstimate && timeEstimate > 0'
|
||||||
|
timeRemaining: 'if(timeEstimate && timeEstimate > 0, timeEstimate - if(timeEntries, list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0), 0), null)'
|
||||||
|
efficiencyRatio: 'if(timeEstimate && timeEstimate > 0 && timeEntries, (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) / timeEstimate * 100).round(), null)'
|
||||||
|
timeTrackedThisWeek: 'if(timeEntries, list(timeEntries).filter(value.endTime && date(value.startTime) >= today() - "7d").map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round(), 0)'
|
||||||
|
timeTrackedToday: 'if(timeEntries, list(timeEntries).filter(value.endTime && date(value.startTime).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round(), 0)'
|
||||||
|
dueMonth: 'if((due.isEmpty() == false), date(due).format("YYYY-MM"), "No due date")'
|
||||||
|
dueWeek: 'if((due.isEmpty() == false), date(due).format("YYYY-[W]WW"), "No due date")'
|
||||||
|
scheduledMonth: 'if((scheduled.isEmpty() == false), date(scheduled).format("YYYY-MM"), "Not scheduled")'
|
||||||
|
scheduledWeek: 'if((scheduled.isEmpty() == false), date(scheduled).format("YYYY-[W]WW"), "Not scheduled")'
|
||||||
|
dueDateCategory: 'if(due.isEmpty(), "No due date", if(date(due) < today(), "Overdue", if(date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD"), "Today", if(date(due).format("YYYY-MM-DD") == (today() + "1 day").format("YYYY-MM-DD"), "Tomorrow", if(date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD"), "This week", "Later")))))'
|
||||||
|
timeEstimateCategory: 'if(!timeEstimate || timeEstimate == 0 || timeEstimate == null, "No estimate", if(timeEstimate < 30, "Quick (<30m)", if(timeEstimate <= 120, "Medium (30m-2h)", "Long (>2h)")))'
|
||||||
|
ageCategory: 'if(((number(now()) - number(file.ctime)) / 86400000) < 1, "Today", if(((number(now()) - number(file.ctime)) / 86400000) < 7, "This week", if(((number(now()) - number(file.ctime)) / 86400000) < 30, "This month", "Older")))'
|
||||||
|
createdMonth: 'file.ctime.format("YYYY-MM")'
|
||||||
|
modifiedMonth: 'file.mtime.format("YYYY-MM")'
|
||||||
|
priorityCategory: 'if(priority=="none","None",if(priority=="low","Low",if(priority=="normal","Normal",if(priority=="high","High","No priority"))))'
|
||||||
|
projectCount: 'if(!projects || list(projects).length == 0, "No projects", if(list(projects).length == 1, "Single project", "Multiple projects"))'
|
||||||
|
contextCount: 'if(!contexts || list(contexts).length == 0, "No contexts", if(list(contexts).length == 1, "Single context", "Multiple contexts"))'
|
||||||
|
trackingStatus: 'if(!timeEstimate || timeEstimate == 0 || timeEstimate == null, "No estimate", if(!timeEntries || list(timeEntries).length == 0, "Not started", if(formula.efficiencyRatio < 100, "Under estimate", "Over estimate")))'
|
||||||
|
nextDate: 'if((due.isEmpty() == false) && (scheduled.isEmpty() == false), if(date(due) < date(scheduled), due, scheduled), if((due.isEmpty() == false), due, scheduled))'
|
||||||
|
daysUntilNext: 'if((due.isEmpty() == false) && (scheduled.isEmpty() == false), min(formula.daysUntilDue, formula.daysUntilScheduled), if((due.isEmpty() == false), formula.daysUntilDue, formula.daysUntilScheduled))'
|
||||||
|
hasDate: '(due.isEmpty() == false) || (scheduled.isEmpty() == false)'
|
||||||
|
isToday: '((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") == today().format("YYYY-MM-DD"))'
|
||||||
|
isThisWeek: '((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") >= today().format("YYYY-MM-DD") && date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") >= today().format("YYYY-MM-DD") && date(scheduled).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD"))'
|
||||||
|
nextDateCategory: 'if(due.isEmpty() && scheduled.isEmpty(), "No date", if(((due.isEmpty() == false) && date(due) < today()) || ((scheduled.isEmpty() == false) && date(scheduled) < today()), "Overdue/Past", if(((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")), "Today", if(((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") == (today() + "1 day").format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") == (today() + "1 day").format("YYYY-MM-DD")), "Tomorrow", if(((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")), "This week", "Later")))))'
|
||||||
|
nextDateMonth: 'if((due.isEmpty() == false) && (scheduled.isEmpty() == false), if(date(due) < date(scheduled), date(due).format("YYYY-MM"), date(scheduled).format("YYYY-MM")), if((due.isEmpty() == false), date(due).format("YYYY-MM"), if((scheduled.isEmpty() == false), date(scheduled).format("YYYY-MM"), "No date")))'
|
||||||
|
nextDateWeek: 'if((due.isEmpty() == false) && (scheduled.isEmpty() == false), if(date(due) < date(scheduled), date(due).format("YYYY-[W]WW"), date(scheduled).format("YYYY-[W]WW")), if((due.isEmpty() == false), date(due).format("YYYY-[W]WW"), if((scheduled.isEmpty() == false), date(scheduled).format("YYYY-[W]WW"), "No date")))'
|
||||||
|
urgencyScore: 'if(due.isEmpty() && scheduled.isEmpty(), formula.priorityWeight, formula.priorityWeight + max(0, 10 - if(formula.daysUntilNext, formula.daysUntilNext, 0)) + (1 - ((number(date(formula.nextDate)) - number(date(date(formula.nextDate).format("YYYY-MM-DD")))) / 86400000)))'
|
||||||
|
timeTrackedFormatted: 'if(timeEntries, if(list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) >= 60, (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) / 60).floor() + "h " + (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) % 60).round() + "m", list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round() + "m"), "0m")'
|
||||||
|
dueDateDisplay: 'if(due.isEmpty(), "", if(date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD"), "Today", if(date(due).format("YYYY-MM-DD") == (today() + "1 day").format("YYYY-MM-DD"), "Tomorrow", if(date(due).format("YYYY-MM-DD") == (today() - "1 day").format("YYYY-MM-DD"), "Yesterday", if(date(due) < today(), formula.daysUntilDue * -1 + "d ago", if(date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD"), date(due).format("ddd"), date(due).format("MMM D")))))))'
|
||||||
|
|
||||||
|
views:
|
||||||
|
- type: tasknotesKanban
|
||||||
|
name: "Kanban Board"
|
||||||
|
order:
|
||||||
|
- status
|
||||||
|
- priority
|
||||||
|
- blockedBy
|
||||||
|
- file.name
|
||||||
|
- recurrence
|
||||||
|
- complete_instances
|
||||||
|
- file.tasks
|
||||||
|
sort:
|
||||||
|
- column: tasknotes_manual_order
|
||||||
|
direction: DESC
|
||||||
|
groupBy:
|
||||||
|
property: status
|
||||||
|
direction: ASC
|
||||||
|
options:
|
||||||
|
columnWidth: 280
|
||||||
|
hideEmptyColumns: false
|
||||||
@@ -0,0 +1,75 @@
|
|||||||
|
# Mini Calendar
|
||||||
|
# Generated with your TaskNotes settings
|
||||||
|
|
||||||
|
filters:
|
||||||
|
and:
|
||||||
|
- file.hasTag("type/task")
|
||||||
|
- file.inFolder("templates") != true
|
||||||
|
|
||||||
|
formulas:
|
||||||
|
priorityWeight: 'if(priority=="none",0,if(priority=="low",1,if(priority=="normal",2,if(priority=="high",3,999))))'
|
||||||
|
daysUntilDue: 'if((due.isEmpty() == false), ((number(date(due)) - number(today())) / 86400000).floor(), null)'
|
||||||
|
dueIn: 'if(due.isEmpty(), "", if(formula.daysUntilDue == 0, "Today", if(formula.daysUntilDue == 1, "1 day", if(formula.daysUntilDue > 1, formula.daysUntilDue + " days", if(formula.daysUntilDue == -1, "1 day overdue", formula.daysUntilDue * -1 + " days overdue")))))'
|
||||||
|
daysUntilScheduled: 'if((scheduled.isEmpty() == false), ((number(date(scheduled)) - number(today())) / 86400000).floor(), null)'
|
||||||
|
daysSinceCreated: '((number(now()) - number(file.ctime)) / 86400000).floor()'
|
||||||
|
daysSinceModified: '((number(now()) - number(file.mtime)) / 86400000).floor()'
|
||||||
|
isOverdue: '(due.isEmpty() == false) && date(due) < today() && status != "done"'
|
||||||
|
isDueToday: '(due.isEmpty() == false) && date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")'
|
||||||
|
isDueThisWeek: '(due.isEmpty() == false) && date(due).format("YYYY-MM-DD") >= today().format("YYYY-MM-DD") && date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")'
|
||||||
|
isScheduledToday: '(scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")'
|
||||||
|
isRecurring: 'recurrence && !recurrence.isEmpty()'
|
||||||
|
hasTimeEstimate: 'timeEstimate && timeEstimate > 0'
|
||||||
|
timeRemaining: 'if(timeEstimate && timeEstimate > 0, timeEstimate - if(timeEntries, list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0), 0), null)'
|
||||||
|
efficiencyRatio: 'if(timeEstimate && timeEstimate > 0 && timeEntries, (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) / timeEstimate * 100).round(), null)'
|
||||||
|
timeTrackedThisWeek: 'if(timeEntries, list(timeEntries).filter(value.endTime && date(value.startTime) >= today() - "7d").map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round(), 0)'
|
||||||
|
timeTrackedToday: 'if(timeEntries, list(timeEntries).filter(value.endTime && date(value.startTime).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round(), 0)'
|
||||||
|
dueMonth: 'if((due.isEmpty() == false), date(due).format("YYYY-MM"), "No due date")'
|
||||||
|
dueWeek: 'if((due.isEmpty() == false), date(due).format("YYYY-[W]WW"), "No due date")'
|
||||||
|
scheduledMonth: 'if((scheduled.isEmpty() == false), date(scheduled).format("YYYY-MM"), "Not scheduled")'
|
||||||
|
scheduledWeek: 'if((scheduled.isEmpty() == false), date(scheduled).format("YYYY-[W]WW"), "Not scheduled")'
|
||||||
|
dueDateCategory: 'if(due.isEmpty(), "No due date", if(date(due) < today(), "Overdue", if(date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD"), "Today", if(date(due).format("YYYY-MM-DD") == (today() + "1 day").format("YYYY-MM-DD"), "Tomorrow", if(date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD"), "This week", "Later")))))'
|
||||||
|
timeEstimateCategory: 'if(!timeEstimate || timeEstimate == 0 || timeEstimate == null, "No estimate", if(timeEstimate < 30, "Quick (<30m)", if(timeEstimate <= 120, "Medium (30m-2h)", "Long (>2h)")))'
|
||||||
|
ageCategory: 'if(((number(now()) - number(file.ctime)) / 86400000) < 1, "Today", if(((number(now()) - number(file.ctime)) / 86400000) < 7, "This week", if(((number(now()) - number(file.ctime)) / 86400000) < 30, "This month", "Older")))'
|
||||||
|
createdMonth: 'file.ctime.format("YYYY-MM")'
|
||||||
|
modifiedMonth: 'file.mtime.format("YYYY-MM")'
|
||||||
|
priorityCategory: 'if(priority=="none","None",if(priority=="low","Low",if(priority=="normal","Normal",if(priority=="high","High","No priority"))))'
|
||||||
|
projectCount: 'if(!projects || list(projects).length == 0, "No projects", if(list(projects).length == 1, "Single project", "Multiple projects"))'
|
||||||
|
contextCount: 'if(!contexts || list(contexts).length == 0, "No contexts", if(list(contexts).length == 1, "Single context", "Multiple contexts"))'
|
||||||
|
trackingStatus: 'if(!timeEstimate || timeEstimate == 0 || timeEstimate == null, "No estimate", if(!timeEntries || list(timeEntries).length == 0, "Not started", if(formula.efficiencyRatio < 100, "Under estimate", "Over estimate")))'
|
||||||
|
nextDate: 'if((due.isEmpty() == false) && (scheduled.isEmpty() == false), if(date(due) < date(scheduled), due, scheduled), if((due.isEmpty() == false), due, scheduled))'
|
||||||
|
daysUntilNext: 'if((due.isEmpty() == false) && (scheduled.isEmpty() == false), min(formula.daysUntilDue, formula.daysUntilScheduled), if((due.isEmpty() == false), formula.daysUntilDue, formula.daysUntilScheduled))'
|
||||||
|
hasDate: '(due.isEmpty() == false) || (scheduled.isEmpty() == false)'
|
||||||
|
isToday: '((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") == today().format("YYYY-MM-DD"))'
|
||||||
|
isThisWeek: '((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") >= today().format("YYYY-MM-DD") && date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") >= today().format("YYYY-MM-DD") && date(scheduled).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD"))'
|
||||||
|
nextDateCategory: 'if(due.isEmpty() && scheduled.isEmpty(), "No date", if(((due.isEmpty() == false) && date(due) < today()) || ((scheduled.isEmpty() == false) && date(scheduled) < today()), "Overdue/Past", if(((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")), "Today", if(((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") == (today() + "1 day").format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") == (today() + "1 day").format("YYYY-MM-DD")), "Tomorrow", if(((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")), "This week", "Later")))))'
|
||||||
|
nextDateMonth: 'if((due.isEmpty() == false) && (scheduled.isEmpty() == false), if(date(due) < date(scheduled), date(due).format("YYYY-MM"), date(scheduled).format("YYYY-MM")), if((due.isEmpty() == false), date(due).format("YYYY-MM"), if((scheduled.isEmpty() == false), date(scheduled).format("YYYY-MM"), "No date")))'
|
||||||
|
nextDateWeek: 'if((due.isEmpty() == false) && (scheduled.isEmpty() == false), if(date(due) < date(scheduled), date(due).format("YYYY-[W]WW"), date(scheduled).format("YYYY-[W]WW")), if((due.isEmpty() == false), date(due).format("YYYY-[W]WW"), if((scheduled.isEmpty() == false), date(scheduled).format("YYYY-[W]WW"), "No date")))'
|
||||||
|
urgencyScore: 'if(due.isEmpty() && scheduled.isEmpty(), formula.priorityWeight, formula.priorityWeight + max(0, 10 - if(formula.daysUntilNext, formula.daysUntilNext, 0)) + (1 - ((number(date(formula.nextDate)) - number(date(date(formula.nextDate).format("YYYY-MM-DD")))) / 86400000)))'
|
||||||
|
timeTrackedFormatted: 'if(timeEntries, if(list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) >= 60, (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) / 60).floor() + "h " + (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) % 60).round() + "m", list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round() + "m"), "0m")'
|
||||||
|
dueDateDisplay: 'if(due.isEmpty(), "", if(date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD"), "Today", if(date(due).format("YYYY-MM-DD") == (today() + "1 day").format("YYYY-MM-DD"), "Tomorrow", if(date(due).format("YYYY-MM-DD") == (today() - "1 day").format("YYYY-MM-DD"), "Yesterday", if(date(due) < today(), formula.daysUntilDue * -1 + "d ago", if(date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD"), date(due).format("ddd"), date(due).format("MMM D")))))))'
|
||||||
|
|
||||||
|
views:
|
||||||
|
- type: tasknotesMiniCalendar
|
||||||
|
name: "Due"
|
||||||
|
order:
|
||||||
|
- status
|
||||||
|
- priority
|
||||||
|
- blockedBy
|
||||||
|
- file.name
|
||||||
|
- recurrence
|
||||||
|
- complete_instances
|
||||||
|
- file.tasks
|
||||||
|
sort:
|
||||||
|
- property: due
|
||||||
|
direction: ASC
|
||||||
|
dateProperty: due
|
||||||
|
- type: tasknotesMiniCalendar
|
||||||
|
name: "Scheduled"
|
||||||
|
order: []
|
||||||
|
dateProperty: scheduled
|
||||||
|
- type: tasknotesMiniCalendar
|
||||||
|
name: "Created"
|
||||||
|
dateProperty: file.ctime
|
||||||
|
- type: tasknotesMiniCalendar
|
||||||
|
name: "Modified"
|
||||||
|
dateProperty: file.mtime
|
||||||
@@ -0,0 +1,85 @@
|
|||||||
|
# Pomodoro statistics
|
||||||
|
# Generated with your TaskNotes settings
|
||||||
|
# Requires Pomodoro data storage to be set to Daily notes.
|
||||||
|
|
||||||
|
filters:
|
||||||
|
and:
|
||||||
|
- file.hasProperty("pomodoros")
|
||||||
|
- list(note["pomodoros"]).filter(value.startTime).isEmpty() == false
|
||||||
|
|
||||||
|
formulas:
|
||||||
|
pomodoroDate: 'if(note["pomodoros"], list(note["pomodoros"]).filter(value.startTime).map(date(value.startTime).format("YYYY-MM-DD")).unique().join(", "), file.basename)'
|
||||||
|
pomodoroMonth: 'if(note["pomodoros"], list(note["pomodoros"]).filter(value.startTime).map(date(value.startTime).format("YYYY-MM")).unique().join(", "), "")'
|
||||||
|
completedPomos: 'if(note["pomodoros"], list(note["pomodoros"]).filter(value.type == "work" && value.completed == true).length, 0)'
|
||||||
|
attemptedPomos: 'if(note["pomodoros"], list(note["pomodoros"]).filter(value.type == "work").length, 0)'
|
||||||
|
interruptedPomos: 'if(note["pomodoros"], list(note["pomodoros"]).filter(value.type == "work" && value.completed == false).length, 0)'
|
||||||
|
focusMinutes: 'if(note["pomodoros"], list(note["pomodoros"]).filter(value.type == "work" && value.completed == true).map(if(value.plannedDuration && value.plannedDuration > 0, value.plannedDuration, if(value.startTime && value.endTime, ((number(date(value.endTime)) - number(date(value.startTime))) / 60000).round(), 0))).reduce(acc + value, 0).round(), 0)'
|
||||||
|
focusTime: 'if(formula.focusMinutes >= 60, (formula.focusMinutes / 60).floor() + "h " + (formula.focusMinutes % 60).round() + "m", formula.focusMinutes + "m")'
|
||||||
|
completionRate: 'if(formula.attemptedPomos > 0, (formula.completedPomos / formula.attemptedPomos * 100).round() + "%", "0%")'
|
||||||
|
shortBreaks: 'if(note["pomodoros"], list(note["pomodoros"]).filter(value.type == "short-break").length, 0)'
|
||||||
|
longBreaks: 'if(note["pomodoros"], list(note["pomodoros"]).filter(value.type == "long-break").length, 0)'
|
||||||
|
|
||||||
|
properties:
|
||||||
|
formula.pomodoroDate:
|
||||||
|
displayName: Date
|
||||||
|
formula.pomodoroMonth:
|
||||||
|
displayName: Month
|
||||||
|
formula.completedPomos:
|
||||||
|
displayName: Completed
|
||||||
|
formula.attemptedPomos:
|
||||||
|
displayName: Attempted
|
||||||
|
formula.interruptedPomos:
|
||||||
|
displayName: Interrupted
|
||||||
|
formula.focusMinutes:
|
||||||
|
displayName: Focus minutes
|
||||||
|
formula.focusTime:
|
||||||
|
displayName: Focus time
|
||||||
|
formula.completionRate:
|
||||||
|
displayName: Completion
|
||||||
|
formula.shortBreaks:
|
||||||
|
displayName: Short breaks
|
||||||
|
formula.longBreaks:
|
||||||
|
displayName: Long breaks
|
||||||
|
|
||||||
|
views:
|
||||||
|
- type: table
|
||||||
|
name: "Daily"
|
||||||
|
order:
|
||||||
|
- formula.pomodoroDate
|
||||||
|
- formula.completedPomos
|
||||||
|
- formula.focusTime
|
||||||
|
- formula.attemptedPomos
|
||||||
|
- formula.completionRate
|
||||||
|
- formula.interruptedPomos
|
||||||
|
- formula.shortBreaks
|
||||||
|
- formula.longBreaks
|
||||||
|
- file.name
|
||||||
|
sort:
|
||||||
|
- column: formula.pomodoroDate
|
||||||
|
direction: DESC
|
||||||
|
- type: table
|
||||||
|
name: "Monthly"
|
||||||
|
groupBy:
|
||||||
|
property: formula.pomodoroMonth
|
||||||
|
direction: DESC
|
||||||
|
order:
|
||||||
|
- formula.pomodoroDate
|
||||||
|
- formula.completedPomos
|
||||||
|
- formula.focusMinutes
|
||||||
|
- formula.focusTime
|
||||||
|
- formula.attemptedPomos
|
||||||
|
- formula.completionRate
|
||||||
|
- formula.interruptedPomos
|
||||||
|
- formula.shortBreaks
|
||||||
|
- formula.longBreaks
|
||||||
|
- file.name
|
||||||
|
summaries:
|
||||||
|
formula.completedPomos: Sum
|
||||||
|
formula.focusMinutes: Sum
|
||||||
|
formula.attemptedPomos: Sum
|
||||||
|
formula.interruptedPomos: Sum
|
||||||
|
formula.shortBreaks: Sum
|
||||||
|
formula.longBreaks: Sum
|
||||||
|
sort:
|
||||||
|
- column: formula.pomodoroDate
|
||||||
|
direction: DESC
|
||||||
@@ -0,0 +1,121 @@
|
|||||||
|
# Relationships
|
||||||
|
# This view shows all relationships for the current file
|
||||||
|
# Dynamically shows/hides tabs based on available data
|
||||||
|
|
||||||
|
formulas:
|
||||||
|
priorityWeight: 'if(priority=="none",0,if(priority=="low",1,if(priority=="normal",2,if(priority=="high",3,999))))'
|
||||||
|
daysUntilDue: 'if((due.isEmpty() == false), ((number(date(due)) - number(today())) / 86400000).floor(), null)'
|
||||||
|
dueIn: 'if(due.isEmpty(), "", if(formula.daysUntilDue == 0, "Today", if(formula.daysUntilDue == 1, "1 day", if(formula.daysUntilDue > 1, formula.daysUntilDue + " days", if(formula.daysUntilDue == -1, "1 day overdue", formula.daysUntilDue * -1 + " days overdue")))))'
|
||||||
|
daysUntilScheduled: 'if((scheduled.isEmpty() == false), ((number(date(scheduled)) - number(today())) / 86400000).floor(), null)'
|
||||||
|
daysSinceCreated: '((number(now()) - number(file.ctime)) / 86400000).floor()'
|
||||||
|
daysSinceModified: '((number(now()) - number(file.mtime)) / 86400000).floor()'
|
||||||
|
isOverdue: '(due.isEmpty() == false) && date(due) < today() && status != "done"'
|
||||||
|
isDueToday: '(due.isEmpty() == false) && date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")'
|
||||||
|
isDueThisWeek: '(due.isEmpty() == false) && date(due).format("YYYY-MM-DD") >= today().format("YYYY-MM-DD") && date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")'
|
||||||
|
isScheduledToday: '(scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")'
|
||||||
|
isRecurring: 'recurrence && !recurrence.isEmpty()'
|
||||||
|
hasTimeEstimate: 'timeEstimate && timeEstimate > 0'
|
||||||
|
timeRemaining: 'if(timeEstimate && timeEstimate > 0, timeEstimate - if(timeEntries, list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0), 0), null)'
|
||||||
|
efficiencyRatio: 'if(timeEstimate && timeEstimate > 0 && timeEntries, (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) / timeEstimate * 100).round(), null)'
|
||||||
|
timeTrackedThisWeek: 'if(timeEntries, list(timeEntries).filter(value.endTime && date(value.startTime) >= today() - "7d").map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round(), 0)'
|
||||||
|
timeTrackedToday: 'if(timeEntries, list(timeEntries).filter(value.endTime && date(value.startTime).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round(), 0)'
|
||||||
|
dueMonth: 'if((due.isEmpty() == false), date(due).format("YYYY-MM"), "No due date")'
|
||||||
|
dueWeek: 'if((due.isEmpty() == false), date(due).format("YYYY-[W]WW"), "No due date")'
|
||||||
|
scheduledMonth: 'if((scheduled.isEmpty() == false), date(scheduled).format("YYYY-MM"), "Not scheduled")'
|
||||||
|
scheduledWeek: 'if((scheduled.isEmpty() == false), date(scheduled).format("YYYY-[W]WW"), "Not scheduled")'
|
||||||
|
dueDateCategory: 'if(due.isEmpty(), "No due date", if(date(due) < today(), "Overdue", if(date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD"), "Today", if(date(due).format("YYYY-MM-DD") == (today() + "1 day").format("YYYY-MM-DD"), "Tomorrow", if(date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD"), "This week", "Later")))))'
|
||||||
|
timeEstimateCategory: 'if(!timeEstimate || timeEstimate == 0 || timeEstimate == null, "No estimate", if(timeEstimate < 30, "Quick (<30m)", if(timeEstimate <= 120, "Medium (30m-2h)", "Long (>2h)")))'
|
||||||
|
ageCategory: 'if(((number(now()) - number(file.ctime)) / 86400000) < 1, "Today", if(((number(now()) - number(file.ctime)) / 86400000) < 7, "This week", if(((number(now()) - number(file.ctime)) / 86400000) < 30, "This month", "Older")))'
|
||||||
|
createdMonth: 'file.ctime.format("YYYY-MM")'
|
||||||
|
modifiedMonth: 'file.mtime.format("YYYY-MM")'
|
||||||
|
priorityCategory: 'if(priority=="none","None",if(priority=="low","Low",if(priority=="normal","Normal",if(priority=="high","High","No priority"))))'
|
||||||
|
projectCount: 'if(!projects || list(projects).length == 0, "No projects", if(list(projects).length == 1, "Single project", "Multiple projects"))'
|
||||||
|
contextCount: 'if(!contexts || list(contexts).length == 0, "No contexts", if(list(contexts).length == 1, "Single context", "Multiple contexts"))'
|
||||||
|
trackingStatus: 'if(!timeEstimate || timeEstimate == 0 || timeEstimate == null, "No estimate", if(!timeEntries || list(timeEntries).length == 0, "Not started", if(formula.efficiencyRatio < 100, "Under estimate", "Over estimate")))'
|
||||||
|
nextDate: 'if((due.isEmpty() == false) && (scheduled.isEmpty() == false), if(date(due) < date(scheduled), due, scheduled), if((due.isEmpty() == false), due, scheduled))'
|
||||||
|
daysUntilNext: 'if((due.isEmpty() == false) && (scheduled.isEmpty() == false), min(formula.daysUntilDue, formula.daysUntilScheduled), if((due.isEmpty() == false), formula.daysUntilDue, formula.daysUntilScheduled))'
|
||||||
|
hasDate: '(due.isEmpty() == false) || (scheduled.isEmpty() == false)'
|
||||||
|
isToday: '((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") == today().format("YYYY-MM-DD"))'
|
||||||
|
isThisWeek: '((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") >= today().format("YYYY-MM-DD") && date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") >= today().format("YYYY-MM-DD") && date(scheduled).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD"))'
|
||||||
|
nextDateCategory: 'if(due.isEmpty() && scheduled.isEmpty(), "No date", if(((due.isEmpty() == false) && date(due) < today()) || ((scheduled.isEmpty() == false) && date(scheduled) < today()), "Overdue/Past", if(((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")), "Today", if(((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") == (today() + "1 day").format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") == (today() + "1 day").format("YYYY-MM-DD")), "Tomorrow", if(((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")), "This week", "Later")))))'
|
||||||
|
nextDateMonth: 'if((due.isEmpty() == false) && (scheduled.isEmpty() == false), if(date(due) < date(scheduled), date(due).format("YYYY-MM"), date(scheduled).format("YYYY-MM")), if((due.isEmpty() == false), date(due).format("YYYY-MM"), if((scheduled.isEmpty() == false), date(scheduled).format("YYYY-MM"), "No date")))'
|
||||||
|
nextDateWeek: 'if((due.isEmpty() == false) && (scheduled.isEmpty() == false), if(date(due) < date(scheduled), date(due).format("YYYY-[W]WW"), date(scheduled).format("YYYY-[W]WW")), if((due.isEmpty() == false), date(due).format("YYYY-[W]WW"), if((scheduled.isEmpty() == false), date(scheduled).format("YYYY-[W]WW"), "No date")))'
|
||||||
|
urgencyScore: 'if(due.isEmpty() && scheduled.isEmpty(), formula.priorityWeight, formula.priorityWeight + max(0, 10 - if(formula.daysUntilNext, formula.daysUntilNext, 0)) + (1 - ((number(date(formula.nextDate)) - number(date(date(formula.nextDate).format("YYYY-MM-DD")))) / 86400000)))'
|
||||||
|
timeTrackedFormatted: 'if(timeEntries, if(list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) >= 60, (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) / 60).floor() + "h " + (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) % 60).round() + "m", list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round() + "m"), "0m")'
|
||||||
|
dueDateDisplay: 'if(due.isEmpty(), "", if(date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD"), "Today", if(date(due).format("YYYY-MM-DD") == (today() + "1 day").format("YYYY-MM-DD"), "Tomorrow", if(date(due).format("YYYY-MM-DD") == (today() - "1 day").format("YYYY-MM-DD"), "Yesterday", if(date(due) < today(), formula.daysUntilDue * -1 + "d ago", if(date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD"), date(due).format("ddd"), date(due).format("MMM D")))))))'
|
||||||
|
|
||||||
|
views:
|
||||||
|
- type: tasknotesKanban
|
||||||
|
name: "Subtasks"
|
||||||
|
filters:
|
||||||
|
and:
|
||||||
|
- file.hasTag("type/task")
|
||||||
|
- file.inFolder("templates") != true
|
||||||
|
- file.hasLink(this.file) && list(note.projects).map(file(value.replace(/^\[[^\]]+\]\((.*)\)$/, "$1").replace(/%20/g, " ")).asLink()).contains(this.file.asLink())
|
||||||
|
order:
|
||||||
|
- status
|
||||||
|
- priority
|
||||||
|
- blockedBy
|
||||||
|
- file.name
|
||||||
|
- recurrence
|
||||||
|
- complete_instances
|
||||||
|
- file.tasks
|
||||||
|
sort:
|
||||||
|
- column: tasknotes_manual_order
|
||||||
|
direction: DESC
|
||||||
|
groupBy:
|
||||||
|
property: status
|
||||||
|
direction: ASC
|
||||||
|
- type: tasknotesTaskList
|
||||||
|
name: "Projects"
|
||||||
|
filters:
|
||||||
|
and:
|
||||||
|
- file.inFolder("templates") != true
|
||||||
|
- list(this.projects).map(file(value.replace(/^\[[^\]]+\]\((.*)\)$/, "$1").replace(/%20/g, " ")).asLink()).contains(file.asLink())
|
||||||
|
order:
|
||||||
|
- status
|
||||||
|
- priority
|
||||||
|
- blockedBy
|
||||||
|
- file.name
|
||||||
|
- recurrence
|
||||||
|
- complete_instances
|
||||||
|
- file.tasks
|
||||||
|
- type: tasknotesTaskList
|
||||||
|
name: "Blocked By"
|
||||||
|
filters:
|
||||||
|
and:
|
||||||
|
- file.hasTag("type/task")
|
||||||
|
- file.inFolder("templates") != true
|
||||||
|
- list(this.note.blockedBy).map(file(if(value.isType("object"), value.uid, value)).asLink()).contains(file.asLink())
|
||||||
|
order:
|
||||||
|
- status
|
||||||
|
- priority
|
||||||
|
- blockedBy
|
||||||
|
- file.name
|
||||||
|
- recurrence
|
||||||
|
- complete_instances
|
||||||
|
- file.tasks
|
||||||
|
sort:
|
||||||
|
- column: tasknotes_manual_order
|
||||||
|
direction: DESC
|
||||||
|
- type: tasknotesKanban
|
||||||
|
name: "Blocking"
|
||||||
|
filters:
|
||||||
|
and:
|
||||||
|
- file.hasTag("type/task")
|
||||||
|
- file.inFolder("templates") != true
|
||||||
|
- list(note.blockedBy).map(file(if(value.isType("object"), value.uid, value)).asLink()).contains(this.file.asLink())
|
||||||
|
order:
|
||||||
|
- status
|
||||||
|
- priority
|
||||||
|
- blockedBy
|
||||||
|
- file.name
|
||||||
|
- recurrence
|
||||||
|
- complete_instances
|
||||||
|
- file.tasks
|
||||||
|
sort:
|
||||||
|
- column: tasknotes_manual_order
|
||||||
|
direction: DESC
|
||||||
|
groupBy:
|
||||||
|
property: status
|
||||||
|
direction: ASC
|
||||||
@@ -0,0 +1,239 @@
|
|||||||
|
# All Tasks
|
||||||
|
|
||||||
|
filters:
|
||||||
|
and:
|
||||||
|
- file.hasTag("type/task")
|
||||||
|
- file.inFolder("templates") != true
|
||||||
|
|
||||||
|
formulas:
|
||||||
|
priorityWeight: 'if(priority=="none",0,if(priority=="low",1,if(priority=="normal",2,if(priority=="high",3,999))))'
|
||||||
|
daysUntilDue: 'if((due.isEmpty() == false), ((number(date(due)) - number(today())) / 86400000).floor(), null)'
|
||||||
|
dueIn: 'if(due.isEmpty(), "", if(formula.daysUntilDue == 0, "Today", if(formula.daysUntilDue == 1, "1 day", if(formula.daysUntilDue > 1, formula.daysUntilDue + " days", if(formula.daysUntilDue == -1, "1 day overdue", formula.daysUntilDue * -1 + " days overdue")))))'
|
||||||
|
daysUntilScheduled: 'if((scheduled.isEmpty() == false), ((number(date(scheduled)) - number(today())) / 86400000).floor(), null)'
|
||||||
|
daysSinceCreated: '((number(now()) - number(file.ctime)) / 86400000).floor()'
|
||||||
|
daysSinceModified: '((number(now()) - number(file.mtime)) / 86400000).floor()'
|
||||||
|
isOverdue: '(due.isEmpty() == false) && date(due) < today() && status != "done"'
|
||||||
|
isDueToday: '(due.isEmpty() == false) && date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")'
|
||||||
|
isDueThisWeek: '(due.isEmpty() == false) && date(due).format("YYYY-MM-DD") >= today().format("YYYY-MM-DD") && date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")'
|
||||||
|
isScheduledToday: '(scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")'
|
||||||
|
isRecurring: 'recurrence && !recurrence.isEmpty()'
|
||||||
|
hasTimeEstimate: 'timeEstimate && timeEstimate > 0'
|
||||||
|
timeRemaining: 'if(timeEstimate && timeEstimate > 0, timeEstimate - if(timeEntries, list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0), 0), null)'
|
||||||
|
efficiencyRatio: 'if(timeEstimate && timeEstimate > 0 && timeEntries, (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) / timeEstimate * 100).round(), null)'
|
||||||
|
timeTrackedThisWeek: 'if(timeEntries, list(timeEntries).filter(value.endTime && date(value.startTime) >= today() - "7d").map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round(), 0)'
|
||||||
|
timeTrackedToday: 'if(timeEntries, list(timeEntries).filter(value.endTime && date(value.startTime).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round(), 0)'
|
||||||
|
dueMonth: 'if((due.isEmpty() == false), date(due).format("YYYY-MM"), "No due date")'
|
||||||
|
dueWeek: 'if((due.isEmpty() == false), date(due).format("YYYY-[W]WW"), "No due date")'
|
||||||
|
scheduledMonth: 'if((scheduled.isEmpty() == false), date(scheduled).format("YYYY-MM"), "Not scheduled")'
|
||||||
|
scheduledWeek: 'if((scheduled.isEmpty() == false), date(scheduled).format("YYYY-[W]WW"), "Not scheduled")'
|
||||||
|
dueDateCategory: 'if(due.isEmpty(), "No due date", if(date(due) < today(), "Overdue", if(date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD"), "Today", if(date(due).format("YYYY-MM-DD") == (today() + "1 day").format("YYYY-MM-DD"), "Tomorrow", if(date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD"), "This week", "Later")))))'
|
||||||
|
timeEstimateCategory: 'if(!timeEstimate || timeEstimate == 0 || timeEstimate == null, "No estimate", if(timeEstimate < 30, "Quick (<30m)", if(timeEstimate <= 120, "Medium (30m-2h)", "Long (>2h)")))'
|
||||||
|
ageCategory: 'if(((number(now()) - number(file.ctime)) / 86400000) < 1, "Today", if(((number(now()) - number(file.ctime)) / 86400000) < 7, "This week", if(((number(now()) - number(file.ctime)) / 86400000) < 30, "This month", "Older")))'
|
||||||
|
createdMonth: 'file.ctime.format("YYYY-MM")'
|
||||||
|
modifiedMonth: 'file.mtime.format("YYYY-MM")'
|
||||||
|
priorityCategory: 'if(priority=="none","None",if(priority=="low","Low",if(priority=="normal","Normal",if(priority=="high","High","No priority"))))'
|
||||||
|
projectCount: 'if(!projects || list(projects).length == 0, "No projects", if(list(projects).length == 1, "Single project", "Multiple projects"))'
|
||||||
|
contextCount: 'if(!contexts || list(contexts).length == 0, "No contexts", if(list(contexts).length == 1, "Single context", "Multiple contexts"))'
|
||||||
|
trackingStatus: 'if(!timeEstimate || timeEstimate == 0 || timeEstimate == null, "No estimate", if(!timeEntries || list(timeEntries).length == 0, "Not started", if(formula.efficiencyRatio < 100, "Under estimate", "Over estimate")))'
|
||||||
|
nextDate: 'if((due.isEmpty() == false) && (scheduled.isEmpty() == false), if(date(due) < date(scheduled), due, scheduled), if((due.isEmpty() == false), due, scheduled))'
|
||||||
|
daysUntilNext: 'if((due.isEmpty() == false) && (scheduled.isEmpty() == false), min(formula.daysUntilDue, formula.daysUntilScheduled), if((due.isEmpty() == false), formula.daysUntilDue, formula.daysUntilScheduled))'
|
||||||
|
hasDate: '(due.isEmpty() == false) || (scheduled.isEmpty() == false)'
|
||||||
|
isToday: '((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") == today().format("YYYY-MM-DD"))'
|
||||||
|
isThisWeek: '((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") >= today().format("YYYY-MM-DD") && date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") >= today().format("YYYY-MM-DD") && date(scheduled).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD"))'
|
||||||
|
nextDateCategory: 'if(due.isEmpty() && scheduled.isEmpty(), "No date", if(((due.isEmpty() == false) && date(due) < today()) || ((scheduled.isEmpty() == false) && date(scheduled) < today()), "Overdue/Past", if(((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")), "Today", if(((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") == (today() + "1 day").format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") == (today() + "1 day").format("YYYY-MM-DD")), "Tomorrow", if(((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")), "This week", "Later")))))'
|
||||||
|
nextDateMonth: 'if((due.isEmpty() == false) && (scheduled.isEmpty() == false), if(date(due) < date(scheduled), date(due).format("YYYY-MM"), date(scheduled).format("YYYY-MM")), if((due.isEmpty() == false), date(due).format("YYYY-MM"), if((scheduled.isEmpty() == false), date(scheduled).format("YYYY-MM"), "No date")))'
|
||||||
|
nextDateWeek: 'if((due.isEmpty() == false) && (scheduled.isEmpty() == false), if(date(due) < date(scheduled), date(due).format("YYYY-[W]WW"), date(scheduled).format("YYYY-[W]WW")), if((due.isEmpty() == false), date(due).format("YYYY-[W]WW"), if((scheduled.isEmpty() == false), date(scheduled).format("YYYY-[W]WW"), "No date")))'
|
||||||
|
urgencyScore: 'if(due.isEmpty() && scheduled.isEmpty(), formula.priorityWeight, formula.priorityWeight + max(0, 10 - if(formula.daysUntilNext, formula.daysUntilNext, 0)) + (1 - ((number(date(formula.nextDate)) - number(date(date(formula.nextDate).format("YYYY-MM-DD")))) / 86400000)))'
|
||||||
|
timeTrackedFormatted: 'if(timeEntries, if(list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) >= 60, (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) / 60).floor() + "h " + (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) % 60).round() + "m", list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round() + "m"), "0m")'
|
||||||
|
dueDateDisplay: 'if(due.isEmpty(), "", if(date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD"), "Today", if(date(due).format("YYYY-MM-DD") == (today() + "1 day").format("YYYY-MM-DD"), "Tomorrow", if(date(due).format("YYYY-MM-DD") == (today() - "1 day").format("YYYY-MM-DD"), "Yesterday", if(date(due) < today(), formula.daysUntilDue * -1 + "d ago", if(date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD"), date(due).format("ddd"), date(due).format("MMM D")))))))'
|
||||||
|
|
||||||
|
views:
|
||||||
|
- type: tasknotesTaskList
|
||||||
|
name: "Manual Order"
|
||||||
|
order:
|
||||||
|
- status
|
||||||
|
- priority
|
||||||
|
- blockedBy
|
||||||
|
- file.name
|
||||||
|
- recurrence
|
||||||
|
- complete_instances
|
||||||
|
- file.tasks
|
||||||
|
sort:
|
||||||
|
- column: tasknotes_manual_order
|
||||||
|
direction: DESC
|
||||||
|
groupBy:
|
||||||
|
property: status
|
||||||
|
direction: ASC
|
||||||
|
- type: tasknotesTaskList
|
||||||
|
name: "All Tasks"
|
||||||
|
order:
|
||||||
|
- status
|
||||||
|
- priority
|
||||||
|
- blockedBy
|
||||||
|
- file.name
|
||||||
|
- recurrence
|
||||||
|
- complete_instances
|
||||||
|
- file.tasks
|
||||||
|
sort:
|
||||||
|
- column: due
|
||||||
|
direction: ASC
|
||||||
|
- type: tasknotesTaskList
|
||||||
|
name: "Not Blocked"
|
||||||
|
filters:
|
||||||
|
and:
|
||||||
|
# Incomplete tasks
|
||||||
|
- or:
|
||||||
|
# Non-recurring task that's not in any completed status
|
||||||
|
- and:
|
||||||
|
- recurrence.isEmpty()
|
||||||
|
- status != "done"
|
||||||
|
# Recurring task where today is not in complete_instances
|
||||||
|
- and:
|
||||||
|
- recurrence.isEmpty() == false
|
||||||
|
- complete_instances.map(date(value).format("YYYY-MM-DD")).contains(today().format("YYYY-MM-DD")) != true
|
||||||
|
# Not blocked by any incomplete tasks
|
||||||
|
- or:
|
||||||
|
# No blocking dependencies at all
|
||||||
|
- blockedBy.isEmpty()
|
||||||
|
# All blocking tasks are completed (filter returns only incomplete, then check if empty)
|
||||||
|
- 'list(blockedBy).filter(file(if(value.isType("object"), value.uid, value)).properties.status != "done").isEmpty()'
|
||||||
|
order:
|
||||||
|
- status
|
||||||
|
- priority
|
||||||
|
- blockedBy
|
||||||
|
- file.name
|
||||||
|
- recurrence
|
||||||
|
- complete_instances
|
||||||
|
- file.tasks
|
||||||
|
sort:
|
||||||
|
- column: formula.urgencyScore
|
||||||
|
direction: DESC
|
||||||
|
- type: tasknotesTaskList
|
||||||
|
name: "Today"
|
||||||
|
filters:
|
||||||
|
and:
|
||||||
|
# Incomplete tasks (handles both recurring and non-recurring)
|
||||||
|
- or:
|
||||||
|
# Non-recurring task that's not in any completed status
|
||||||
|
- and:
|
||||||
|
- recurrence.isEmpty()
|
||||||
|
- status != "done"
|
||||||
|
# Recurring task where today is not in complete_instances
|
||||||
|
- and:
|
||||||
|
- recurrence.isEmpty() == false
|
||||||
|
- complete_instances.map(date(value).format("YYYY-MM-DD")).contains(today().format("YYYY-MM-DD")) != true
|
||||||
|
# Due or scheduled today
|
||||||
|
- or:
|
||||||
|
- and:
|
||||||
|
- due.isEmpty() == false
|
||||||
|
- date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")
|
||||||
|
- and:
|
||||||
|
- scheduled.isEmpty() == false
|
||||||
|
- date(scheduled).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")
|
||||||
|
order:
|
||||||
|
- status
|
||||||
|
- priority
|
||||||
|
- blockedBy
|
||||||
|
- file.name
|
||||||
|
- recurrence
|
||||||
|
- complete_instances
|
||||||
|
- file.tasks
|
||||||
|
sort:
|
||||||
|
- column: formula.urgencyScore
|
||||||
|
direction: DESC
|
||||||
|
- type: tasknotesTaskList
|
||||||
|
name: "Overdue"
|
||||||
|
filters:
|
||||||
|
and:
|
||||||
|
# Incomplete tasks
|
||||||
|
- or:
|
||||||
|
# Non-recurring task that's not in any completed status
|
||||||
|
- and:
|
||||||
|
- recurrence.isEmpty()
|
||||||
|
- status != "done"
|
||||||
|
# Recurring task where today is not in complete_instances
|
||||||
|
- and:
|
||||||
|
- recurrence.isEmpty() == false
|
||||||
|
- complete_instances.map(date(value).format("YYYY-MM-DD")).contains(today().format("YYYY-MM-DD")) != true
|
||||||
|
# Due or scheduled in the past
|
||||||
|
- or:
|
||||||
|
- and:
|
||||||
|
- due.isEmpty() == false
|
||||||
|
- date(due) < today()
|
||||||
|
- and:
|
||||||
|
- scheduled.isEmpty() == false
|
||||||
|
- date(scheduled) < today()
|
||||||
|
order:
|
||||||
|
- status
|
||||||
|
- priority
|
||||||
|
- blockedBy
|
||||||
|
- file.name
|
||||||
|
- recurrence
|
||||||
|
- complete_instances
|
||||||
|
- file.tasks
|
||||||
|
sort:
|
||||||
|
- column: formula.urgencyScore
|
||||||
|
direction: DESC
|
||||||
|
- type: tasknotesTaskList
|
||||||
|
name: "This Week"
|
||||||
|
filters:
|
||||||
|
and:
|
||||||
|
# Incomplete tasks
|
||||||
|
- or:
|
||||||
|
# Non-recurring task that's not in any completed status
|
||||||
|
- and:
|
||||||
|
- recurrence.isEmpty()
|
||||||
|
- status != "done"
|
||||||
|
# Recurring task where today is not in complete_instances
|
||||||
|
- and:
|
||||||
|
- recurrence.isEmpty() == false
|
||||||
|
- complete_instances.map(date(value).format("YYYY-MM-DD")).contains(today().format("YYYY-MM-DD")) != true
|
||||||
|
# Due or scheduled this week
|
||||||
|
- or:
|
||||||
|
- and:
|
||||||
|
- due.isEmpty() == false
|
||||||
|
- date(due).format("YYYY-MM-DD") >= today().format("YYYY-MM-DD")
|
||||||
|
- date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")
|
||||||
|
- and:
|
||||||
|
- scheduled.isEmpty() == false
|
||||||
|
- date(scheduled).format("YYYY-MM-DD") >= today().format("YYYY-MM-DD")
|
||||||
|
- date(scheduled).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")
|
||||||
|
order:
|
||||||
|
- status
|
||||||
|
- priority
|
||||||
|
- blockedBy
|
||||||
|
- file.name
|
||||||
|
- recurrence
|
||||||
|
- complete_instances
|
||||||
|
- file.tasks
|
||||||
|
sort:
|
||||||
|
- column: formula.urgencyScore
|
||||||
|
direction: DESC
|
||||||
|
- type: tasknotesTaskList
|
||||||
|
name: "Unscheduled"
|
||||||
|
filters:
|
||||||
|
and:
|
||||||
|
# Incomplete tasks
|
||||||
|
- or:
|
||||||
|
# Non-recurring task that's not in any completed status
|
||||||
|
- and:
|
||||||
|
- recurrence.isEmpty()
|
||||||
|
- status != "done"
|
||||||
|
# Recurring task where today is not in complete_instances
|
||||||
|
- and:
|
||||||
|
- recurrence.isEmpty() == false
|
||||||
|
- complete_instances.map(date(value).format("YYYY-MM-DD")).contains(today().format("YYYY-MM-DD")) != true
|
||||||
|
# No due date and no scheduled date
|
||||||
|
- date(due).isEmpty()
|
||||||
|
- date(scheduled).isEmpty()
|
||||||
|
order:
|
||||||
|
- status
|
||||||
|
- priority
|
||||||
|
- blockedBy
|
||||||
|
- file.name
|
||||||
|
- recurrence
|
||||||
|
- complete_instances
|
||||||
|
- file.tasks
|
||||||
|
sort:
|
||||||
|
- column: status
|
||||||
|
direction: ASC
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
---
|
||||||
|
title: {{title}}
|
||||||
|
tags:
|
||||||
|
- type/task
|
||||||
|
daily: "[[{{date}}]]"
|
||||||
|
priority: {{priority}}
|
||||||
|
scheduled: {{scheduledDate}}
|
||||||
|
status: {{status}}
|
||||||
|
---
|
||||||
|
# <% moment(tp.file.title, 'YYYY-MM-DD_HH-mm-ss').format('YYYY-MM-DD HH:mm:ss') %>
|
||||||
@@ -10,7 +10,7 @@ daily: "[[2025-12-03]]"
|
|||||||
## Excluding Vs. Ignoring Project Requirements
|
## Excluding Vs. Ignoring Project Requirements
|
||||||
|
|
||||||
%%
|
%%
|
||||||
A criticism of an observed lack of [[transparency]] in [[construction-estimating]].
|
A criticism of an observed lack of [[transparency-in-construction-estimating]].
|
||||||
%%
|
%%
|
||||||
|
|
||||||
There is a distinct difference between _excluding_ and _ignoring_ requirements.
|
There is a distinct difference between _excluding_ and _ignoring_ requirements.
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ The probability that any construction will be performed
|
|||||||
according the drawings that we take off
|
according the drawings that we take off
|
||||||
(or even their immediate successors)
|
(or even their immediate successors)
|
||||||
I suspect is slim to zero.
|
I suspect is slim to zero.
|
||||||
That Ops would have the patience to add the revisions,
|
That [[pdi-operations|Ops]] would have the patience to add the revisions,
|
||||||
fighting with Trimble Connect as they would be,
|
fighting with Trimble Connect as they would be,
|
||||||
I suspect is even less.
|
I suspect is even less.
|
||||||
|
|
||||||
|
|||||||
@@ -63,5 +63,5 @@ to ask for a revision to a WBS
|
|||||||
|
|
||||||
Bid receives bonuses based on _awarded GP_ ([[markup-vs-margin|margin]]),
|
Bid receives bonuses based on _awarded GP_ ([[markup-vs-margin|margin]]),
|
||||||
thus they are incentivized to underestimate cost.
|
thus they are incentivized to underestimate cost.
|
||||||
Ops receives bonuses based on _positive GP variance_,
|
[[pdi-operations|Ops]] receives bonuses based on _positive GP variance_,
|
||||||
thus they are incentivized to overestimate cost.
|
thus they are incentivized to overestimate cost.
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ Carried labor for lost time due to badging
|
|||||||
|
|
||||||
### Free Notes
|
### Free Notes
|
||||||
|
|
||||||
Ops creates, approves the labor plan.
|
[[pdi-operations|Ops]] creates, approves the labor plan.
|
||||||
This limits our ability to make interesting decisions:
|
This limits our ability to make interesting decisions:
|
||||||
MC cable ILO PVC in-slab pushes the schedule out.
|
MC cable ILO PVC in-slab pushes the schedule out.
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,11 @@ date-created: 2026-03-11T11:58:49-04:00
|
|||||||
---
|
---
|
||||||
# 2026-03-11 11:58:49
|
# 2026-03-11 11:58:49
|
||||||
|
|
||||||
|
%%
|
||||||
|
Note concerning [[ambiguity-in-construction-estimating]]
|
||||||
|
and [[transparency-in-construction-estimating]].
|
||||||
|
%%
|
||||||
|
|
||||||
## Selling Scope
|
## Selling Scope
|
||||||
|
|
||||||
When an estimator provides a proposal,
|
When an estimator provides a proposal,
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ potentially to be qualified in future bids.
|
|||||||
>
|
>
|
||||||
> 2. Awarded contract does not include respect for the direction
|
> 2. Awarded contract does not include respect for the direction
|
||||||
>
|
>
|
||||||
> 3. Ops, not aware of direction, believes ConEst takeoff was in error.
|
> 3. [[pdi-operations|Ops]], not aware of direction, believes ConEst takeoff was in error.
|
||||||
|
|
||||||
Intent is to improve transparency,
|
Intent is to improve transparency,
|
||||||
an area the OneNote is poor in.
|
an area the OneNote is poor in.
|
||||||
|
|||||||
@@ -15,8 +15,8 @@ and replaced with [[heating-designations]],
|
|||||||
I suggested leaving the existing work alone,
|
I suggested leaving the existing work alone,
|
||||||
citing that the limited information
|
citing that the limited information
|
||||||
makes likely our superiors will have a different interpretation than us.
|
makes likely our superiors will have a different interpretation than us.
|
||||||
**If we changed the takeoff then**
|
**If we changed the takeoff now**
|
||||||
**we would have to change it again.**
|
**then we would have to change it again.**
|
||||||
|
|
||||||
> Ultimately we did change the takeoff
|
> Ultimately we did change the takeoff
|
||||||
> because there were less than a dozen outlets in the project.
|
> because there were less than a dozen outlets in the project.
|
||||||
@@ -27,7 +27,8 @@ This is a good example of a scope question
|
|||||||
which I believe should be saved for review,
|
which I believe should be saved for review,
|
||||||
not raised with the senior.
|
not raised with the senior.
|
||||||
|
|
||||||
1. The maximum project cost impact of the decision is low,
|
1. The maximum project cost impact of the decision is low
|
||||||
|
(final cost is not especially [[sensitivity|sensitive]] to it),
|
||||||
being only the difference between RG6 and Cat5e.
|
being only the difference between RG6 and Cat5e.
|
||||||
|
|
||||||
2. The result of the decision will not affect our future takeoff.
|
2. The result of the decision will not affect our future takeoff.
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ with no coordination with other disciplines.
|
|||||||
|
|
||||||
Water Feature plans are a similar case.
|
Water Feature plans are a similar case.
|
||||||
|
|
||||||
> [!quote] [[josh-komis]] 2026-05-28 around 10:30 (pp.)
|
> [!quote] [[joshua-komis]] 2026-05-28 around 10:30 (pp.)
|
||||||
> Assume a single-point connection
|
> Assume a single-point connection
|
||||||
> to a pool equipment panel.
|
> to a pool equipment panel.
|
||||||
> 100A for the spa.
|
> 100A for the spa.
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ daily: "[[2026-05-30]]"
|
|||||||
|
|
||||||
Hubbard doesn't explain the concept
|
Hubbard doesn't explain the concept
|
||||||
of "record-breaking probability" to my tastes.
|
of "record-breaking probability" to my tastes.
|
||||||
more to the point,
|
More to the point,
|
||||||
he gives special attention to minimum and maximum
|
he gives special attention to minimum and maximum
|
||||||
when the probability that the next sample will have _any_ rank
|
when the probability that the next sample will have _any_ rank
|
||||||
is given by 1/(n+1).
|
is given by 1/(n+1).
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
---
|
||||||
|
id: 2026-06-01T08:31:48-0400
|
||||||
|
title: 2026-06-01 08:31:48
|
||||||
|
tags: []
|
||||||
|
daily: "[[2026-06-01]]"
|
||||||
|
---
|
||||||
|
# 2026-06-01 08:31:48
|
||||||
|
|
||||||
|
## ConEst Schedule Meeting 2026w23
|
||||||
|
|
||||||
|
[[conest-schedule-meeting]] for [[2026w23]].
|
||||||
|
|
||||||
|
Recently received several WBS approvals,
|
||||||
|
expect bells rung for them soon.
|
||||||
|
|
||||||
|
[[milan-hrvacevic|Milan]]'s team
|
||||||
|
just returned from Albuquerque,
|
||||||
|
visiting a data center there.
|
||||||
|
|
||||||
|
Committed to finishing [[303-mariposa-residence]]
|
||||||
|
and [[cincinnati-convention-center-hotel]] this week.
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
title: Transparency
|
||||||
|
tags: []
|
||||||
|
---
|
||||||
|
# Transparency
|
||||||
|
|
||||||
|
**Transparency** is a state of open honesty.
|
||||||
Reference in New Issue
Block a user