vault backup: 2025-07-03 17:03:26
This commit is contained in:
Vendored
+10
-1
@@ -1 +1,10 @@
|
||||
{}
|
||||
{
|
||||
"livePreview": false,
|
||||
"readableLineLength": false,
|
||||
"strictLineBreaks": false,
|
||||
"propertiesInDocument": "source",
|
||||
"showLineNumber": true,
|
||||
"autoPairMarkdown": false,
|
||||
"useTab": false,
|
||||
"alwaysUpdateLinks": true
|
||||
}
|
||||
Vendored
+7
-1
@@ -1 +1,7 @@
|
||||
{}
|
||||
{
|
||||
"textFontFamily": "jetbrains mono",
|
||||
"monospaceFontFamily": "jetbrains mono",
|
||||
"interfaceFontFamily": "jetbrains mono",
|
||||
"cssTheme": "Obsidian gruvbox",
|
||||
"theme": "obsidian"
|
||||
}
|
||||
Vendored
+8
@@ -0,0 +1,8 @@
|
||||
[
|
||||
"obsidian-git",
|
||||
"homepage",
|
||||
"tag-wrangler",
|
||||
"obsidian-tasks-plugin",
|
||||
"table-editor-obsidian",
|
||||
"dataview"
|
||||
]
|
||||
Vendored
+4
-4
@@ -1,13 +1,13 @@
|
||||
{
|
||||
"collapse-filter": true,
|
||||
"collapse-filter": false,
|
||||
"search": "",
|
||||
"showTags": false,
|
||||
"showAttachments": false,
|
||||
"hideUnresolved": false,
|
||||
"showOrphans": true,
|
||||
"collapse-color-groups": true,
|
||||
"collapse-color-groups": false,
|
||||
"colorGroups": [],
|
||||
"collapse-display": true,
|
||||
"collapse-display": false,
|
||||
"showArrow": false,
|
||||
"textFadeMultiplier": 0,
|
||||
"nodeSizeMultiplier": 1,
|
||||
@@ -17,6 +17,6 @@
|
||||
"repelStrength": 10,
|
||||
"linkStrength": 1,
|
||||
"linkDistance": 250,
|
||||
"scale": 1.000000000000001,
|
||||
"scale": 0.6542239853675967,
|
||||
"close": false
|
||||
}
|
||||
Vendored
+36
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"editor:add-cursor-above": [
|
||||
{
|
||||
"modifiers": [
|
||||
"Alt",
|
||||
"Mod"
|
||||
],
|
||||
"key": "ArrowUp"
|
||||
}
|
||||
],
|
||||
"editor:add-cursor-below": [
|
||||
{
|
||||
"modifiers": [
|
||||
"Alt",
|
||||
"Mod"
|
||||
],
|
||||
"key": "ArrowDown"
|
||||
}
|
||||
],
|
||||
"editor:swap-line-up": [
|
||||
{
|
||||
"modifiers": [
|
||||
"Alt"
|
||||
],
|
||||
"key": "ArrowUp"
|
||||
}
|
||||
],
|
||||
"editor:swap-line-down": [
|
||||
{
|
||||
"modifiers": [
|
||||
"Alt"
|
||||
],
|
||||
"key": "ArrowDown"
|
||||
}
|
||||
]
|
||||
}
|
||||
Vendored
+20876
File diff suppressed because one or more lines are too long
+11
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"id": "dataview",
|
||||
"name": "Dataview",
|
||||
"version": "0.5.68",
|
||||
"minAppVersion": "0.13.11",
|
||||
"description": "Complex data views for the data-obsessed.",
|
||||
"author": "Michael Brenan <blacksmithgu@gmail.com>",
|
||||
"authorUrl": "https://github.com/blacksmithgu",
|
||||
"helpUrl": "https://blacksmithgu.github.io/obsidian-dataview/",
|
||||
"isDesktopOnly": false
|
||||
}
|
||||
+141
@@ -0,0 +1,141 @@
|
||||
.block-language-dataview {
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
/*****************/
|
||||
/** Table Views **/
|
||||
/*****************/
|
||||
|
||||
/* List View Default Styling; rendered internally as a table. */
|
||||
.table-view-table {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.table-view-table > thead > tr, .table-view-table > tbody > tr {
|
||||
margin-top: 1em;
|
||||
margin-bottom: 1em;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.table-view-table > tbody > tr:hover {
|
||||
background-color: var(--table-row-background-hover);
|
||||
}
|
||||
|
||||
.table-view-table > thead > tr > th {
|
||||
font-weight: 700;
|
||||
font-size: larger;
|
||||
border-top: none;
|
||||
border-left: none;
|
||||
border-right: none;
|
||||
border-bottom: solid;
|
||||
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.table-view-table > tbody > tr > td {
|
||||
text-align: left;
|
||||
border: none;
|
||||
font-weight: 400;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.table-view-table ul, .table-view-table ol {
|
||||
margin-block-start: 0.2em !important;
|
||||
margin-block-end: 0.2em !important;
|
||||
}
|
||||
|
||||
/** Rendered value styling for any view. */
|
||||
.dataview-result-list-root-ul {
|
||||
padding: 0em !important;
|
||||
margin: 0em !important;
|
||||
}
|
||||
|
||||
.dataview-result-list-ul {
|
||||
margin-block-start: 0.2em !important;
|
||||
margin-block-end: 0.2em !important;
|
||||
}
|
||||
|
||||
/** Generic grouping styling. */
|
||||
.dataview.result-group {
|
||||
padding-left: 8px;
|
||||
}
|
||||
|
||||
/*******************/
|
||||
/** Inline Fields **/
|
||||
/*******************/
|
||||
|
||||
.dataview.inline-field-key {
|
||||
padding-left: 8px;
|
||||
padding-right: 8px;
|
||||
font-family: var(--font-monospace);
|
||||
background-color: var(--background-primary-alt);
|
||||
color: var(--nav-item-color-selected);
|
||||
}
|
||||
|
||||
.dataview.inline-field-value {
|
||||
padding-left: 8px;
|
||||
padding-right: 8px;
|
||||
font-family: var(--font-monospace);
|
||||
background-color: var(--background-secondary-alt);
|
||||
color: var(--nav-item-color-selected);
|
||||
}
|
||||
|
||||
.dataview.inline-field-standalone-value {
|
||||
padding-left: 8px;
|
||||
padding-right: 8px;
|
||||
font-family: var(--font-monospace);
|
||||
background-color: var(--background-secondary-alt);
|
||||
color: var(--nav-item-color-selected);
|
||||
}
|
||||
|
||||
/***************/
|
||||
/** Task View **/
|
||||
/***************/
|
||||
|
||||
.dataview.task-list-item, .dataview.task-list-basic-item {
|
||||
margin-top: 3px;
|
||||
margin-bottom: 3px;
|
||||
transition: 0.4s;
|
||||
}
|
||||
|
||||
.dataview.task-list-item:hover, .dataview.task-list-basic-item:hover {
|
||||
background-color: var(--text-selection);
|
||||
box-shadow: -40px 0 0 var(--text-selection);
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
/*****************/
|
||||
/** Error Views **/
|
||||
/*****************/
|
||||
|
||||
div.dataview-error-box {
|
||||
width: 100%;
|
||||
min-height: 150px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border: 4px dashed var(--background-secondary);
|
||||
}
|
||||
|
||||
.dataview-error-message {
|
||||
color: var(--text-muted);
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/*************************/
|
||||
/** Additional Metadata **/
|
||||
/*************************/
|
||||
|
||||
.dataview.small-text {
|
||||
font-size: smaller;
|
||||
color: var(--text-muted);
|
||||
margin-left: 3px;
|
||||
}
|
||||
|
||||
.dataview.small-text::before {
|
||||
content: "(";
|
||||
}
|
||||
|
||||
.dataview.small-text::after {
|
||||
content: ")";
|
||||
}
|
||||
Vendored
+23
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"version": 4,
|
||||
"homepages": {
|
||||
"Main Homepage": {
|
||||
"value": "README",
|
||||
"kind": "File",
|
||||
"openOnStartup": true,
|
||||
"openMode": "Replace all open notes",
|
||||
"manualOpenMode": "Keep open notes",
|
||||
"view": "Default view",
|
||||
"revertView": true,
|
||||
"openWhenEmpty": true,
|
||||
"refreshDataview": false,
|
||||
"autoCreate": false,
|
||||
"autoScroll": false,
|
||||
"pin": false,
|
||||
"commands": [],
|
||||
"alwaysApply": false,
|
||||
"hideReleaseNotes": false
|
||||
}
|
||||
},
|
||||
"separateMobile": false
|
||||
}
|
||||
Vendored
+4
File diff suppressed because one or more lines are too long
+13
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"id": "homepage",
|
||||
"name": "Homepage",
|
||||
"version": "4.2.2",
|
||||
"minAppVersion": "1.4.10",
|
||||
"description": "Open a specified note, canvas, base, or workspace on startup, or set it for quick access later.",
|
||||
"author": "novov",
|
||||
"authorUrl": "https://novov.me",
|
||||
"isDesktopOnly": false,
|
||||
"fundingUrl": {
|
||||
"Ko-fi": "https://ko-fi.com/novov"
|
||||
}
|
||||
}
|
||||
+244
@@ -0,0 +1,244 @@
|
||||
.nv-homepage-interstitial {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
background: var(--background-primary);
|
||||
z-index: 9999;
|
||||
animation: 0.02s ease-in 0.5s forwards nv-interstitial-destroy;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
@keyframes nv-interstitial-destroy {
|
||||
from { opacity: 1; }
|
||||
to { opacity: 0; }
|
||||
}
|
||||
|
||||
.setting-item[nv-greyed] {
|
||||
opacity: .5;
|
||||
pointer-events: none !important;
|
||||
}
|
||||
|
||||
#nv-main-setting {
|
||||
flex-wrap: wrap;
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
#nv-main-setting .setting-item-control {
|
||||
padding-top: var(--size-4-2);
|
||||
flex-basis: 100%;
|
||||
align-items: stretch;
|
||||
}
|
||||
|
||||
#nv-main-setting .setting-item-control input, #nv-main-setting .setting-item-control select {
|
||||
font-size: var(--font-ui-medium);
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
#nv-main-setting .setting-item-control select {
|
||||
padding: var(--size-4-3) var(--size-4-4);
|
||||
padding-right: var(--size-4-8);
|
||||
height: auto;
|
||||
}
|
||||
|
||||
#nv-main-setting .setting-item-control input {
|
||||
flex-grow: 1;
|
||||
padding: var(--size-4-5) var(--size-4-4);
|
||||
}
|
||||
|
||||
#nv-main-setting .setting-item-control input[disabled] {
|
||||
opacity: 0.3;
|
||||
}
|
||||
|
||||
#nv-main-setting #nv-desc, #nv-main-setting #nv-info {
|
||||
flex-basis: 100%;
|
||||
}
|
||||
|
||||
#nv-main-setting #nv-desc {
|
||||
font-weight: 500;
|
||||
color: var(--text-normal);
|
||||
font-size: var(--font-ui-small);
|
||||
padding: 10px 0 0;
|
||||
}
|
||||
|
||||
#nv-main-setting #nv-desc.mod-warning {
|
||||
color: var(--text-error);
|
||||
}
|
||||
|
||||
#nv-main-setting #nv-desc code {
|
||||
font-family: var(--font-monospace);
|
||||
font-size: var(--font-smaller);
|
||||
border-radius: var(--radius-s);
|
||||
}
|
||||
|
||||
#nv-main-setting #nv-desc small {
|
||||
display: block;
|
||||
font-weight: 400;
|
||||
color: var(--text-muted);
|
||||
font-size: calc(var(--font-ui-smaller) * 0.9);
|
||||
padding: 5px 0 0;
|
||||
}
|
||||
|
||||
.nv-homepage-file-tag {
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
margin-left: var(--size-2-2);
|
||||
}
|
||||
|
||||
.nv-mobile-setting {
|
||||
flex-wrap: wrap;
|
||||
row-gap: var(--size-2-2);
|
||||
}
|
||||
|
||||
.nv-mobile-setting .nv-mobile-info {
|
||||
font-size: var(--font-ui-smaller);
|
||||
width: 100%;
|
||||
margin-right: var(--size-4-18);
|
||||
}
|
||||
|
||||
.nv-command-desc {
|
||||
padding: 1.2em 0 0;
|
||||
border-top: 1px solid var(--background-modifier-border);
|
||||
}
|
||||
|
||||
.nv-command-box {
|
||||
margin: 1em 0 1.75em;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 12px;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.nv-command-pill {
|
||||
background-color: var(--background-secondary);
|
||||
border: 1px solid var(--background-modifier-border-hover);
|
||||
border-radius: var(--radius-s);
|
||||
font-size: var(--font-ui-small);
|
||||
padding: var(--size-2-1) var(--size-2-2) var(--size-2-1) var(--size-2-3) ;
|
||||
}
|
||||
|
||||
.nv-command-pill.nv-command-invalid {
|
||||
color: var(--text-faint);
|
||||
}
|
||||
|
||||
.nv-command-pill button {
|
||||
display: inline-block;
|
||||
padding: 0;
|
||||
margin: 0 0 0 3px;
|
||||
vertical-align: bottom;
|
||||
}
|
||||
|
||||
.nv-command-pill button:first-of-type {
|
||||
margin-left: var(--size-4-2);
|
||||
}
|
||||
|
||||
.nv-command-pill button.nv-command-selected {
|
||||
margin-left: var(--size-2-2);
|
||||
padding: 0 var(--size-2-1);
|
||||
}
|
||||
|
||||
.nv-command-pill button.nv-command-selected span {
|
||||
color: var(--text-accent);
|
||||
display: inline-block;
|
||||
font-size: 0.9em;
|
||||
vertical-align: top;
|
||||
position: relative;
|
||||
top: -1px;
|
||||
}
|
||||
|
||||
.nv-command-pill > .svg-icon, .nv-command-pill button .svg-icon {
|
||||
height: 1em;
|
||||
width: 1em;
|
||||
}
|
||||
|
||||
.nv-command-pill > .svg-icon {
|
||||
vertical-align: text-bottom;
|
||||
position: relative;
|
||||
margin: 0 var(--size-2-1) 0 0;
|
||||
}
|
||||
|
||||
.nv-command-pill.nv-dragging {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.nv-command-add-button {
|
||||
font-size: var(--font-ui-small);
|
||||
padding: var(--size-2-2) var(--size-4-2);
|
||||
height: auto;
|
||||
}
|
||||
|
||||
#nv-main-setting + .setting-item, .nv-command-desc + .setting-item {
|
||||
padding-top: 20px;
|
||||
border-top: none !important;
|
||||
}
|
||||
|
||||
.nv-debug-button {
|
||||
margin: 3em 0 -0.2em;
|
||||
font-size: var(--font-ui-smaller);
|
||||
padding: 0;
|
||||
height: auto;
|
||||
float: right;
|
||||
box-shadow: none !important;
|
||||
background: none !important;
|
||||
color: var(--text-accent);
|
||||
font-weight: 600;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.nv-debug-button:hover, .nv-debug-button:active {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.is-phone #nv-main-setting .setting-item-control {
|
||||
flex-wrap: wrap;
|
||||
justify-content: flex-start;
|
||||
}
|
||||
|
||||
.is-phone #nv-main-setting .setting-item-control select {
|
||||
width: auto;
|
||||
max-width: auto;
|
||||
}
|
||||
|
||||
.is-phone .nv-mobile-setting {
|
||||
row-gap: var(--size-4-2);
|
||||
}
|
||||
|
||||
.is-phone .nv-mobile-setting .setting-item-info {
|
||||
max-width: calc(100% - 100px);
|
||||
}
|
||||
|
||||
.is-phone .nv-mobile-setting {
|
||||
row-gap: var(--size-4-2);
|
||||
}
|
||||
|
||||
.is-phone .nv-mobile-setting .setting-item-info {
|
||||
max-width: calc(100% - 100px);
|
||||
}
|
||||
|
||||
.is-phone .nv-command-pill {
|
||||
width: 100%;
|
||||
border: none;
|
||||
background: none;
|
||||
padding: 0 0 var(--size-4-2);
|
||||
display: flex;
|
||||
gap: var(--size-4-4);
|
||||
align-items: baseline;
|
||||
}
|
||||
|
||||
.is-phone .nv-command-pill .nv-command-text {
|
||||
flex-grow: 1;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.is-phone .nv-command-pill, .is-phone .nv-command-add-button {
|
||||
font-size: var(--font-ui-medium);
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.is-phone .nv-command-pill button {
|
||||
line-height: var(--font-ui-medium);
|
||||
height: 100%;
|
||||
margin: 0 !important;
|
||||
}
|
||||
+61
@@ -0,0 +1,61 @@
|
||||
{
|
||||
"commitMessage": "vault backup: {{date}}",
|
||||
"autoCommitMessage": "vault backup: {{date}}",
|
||||
"commitMessageScript": "",
|
||||
"commitDateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||
"autoSaveInterval": 0,
|
||||
"autoPushInterval": 0,
|
||||
"autoPullInterval": 0,
|
||||
"autoPullOnBoot": false,
|
||||
"disablePush": false,
|
||||
"pullBeforePush": true,
|
||||
"disablePopups": false,
|
||||
"showErrorNotices": true,
|
||||
"disablePopupsForNoChanges": false,
|
||||
"listChangedFilesInMessageBody": false,
|
||||
"showStatusBar": true,
|
||||
"updateSubmodules": false,
|
||||
"syncMethod": "merge",
|
||||
"customMessageOnAutoBackup": false,
|
||||
"autoBackupAfterFileChange": false,
|
||||
"treeStructure": false,
|
||||
"refreshSourceControl": true,
|
||||
"basePath": "",
|
||||
"differentIntervalCommitAndPush": false,
|
||||
"changedFilesInStatusBar": false,
|
||||
"showedMobileNotice": true,
|
||||
"refreshSourceControlTimer": 7000,
|
||||
"showBranchStatusBar": true,
|
||||
"setLastSaveToLastCommit": false,
|
||||
"submoduleRecurseCheckout": false,
|
||||
"gitDir": "",
|
||||
"showFileMenu": true,
|
||||
"authorInHistoryView": "hide",
|
||||
"dateInHistoryView": false,
|
||||
"diffStyle": "split",
|
||||
"lineAuthor": {
|
||||
"show": true,
|
||||
"followMovement": "inactive",
|
||||
"authorDisplay": "initials",
|
||||
"showCommitHash": false,
|
||||
"dateTimeFormatOptions": "date",
|
||||
"dateTimeFormatCustomString": "YYYY-MM-DD HH:mm",
|
||||
"dateTimeTimezone": "viewer-local",
|
||||
"coloringMaxAge": "1y",
|
||||
"colorNew": {
|
||||
"r": 255,
|
||||
"g": 150,
|
||||
"b": 150
|
||||
},
|
||||
"colorOld": {
|
||||
"r": 120,
|
||||
"g": 160,
|
||||
"b": 255
|
||||
},
|
||||
"textColorCss": "var(--text-muted)",
|
||||
"ignoreWhitespace": false,
|
||||
"gutterSpacingFallbackLength": 13,
|
||||
"lastShownAuthorDisplay": "initials",
|
||||
"lastShownDateTimeFormatOptions": "date"
|
||||
}
|
||||
}
|
||||
+418
File diff suppressed because one or more lines are too long
+10
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"author": "Vinzent",
|
||||
"authorUrl": "https://github.com/Vinzent03",
|
||||
"id": "obsidian-git",
|
||||
"name": "Git",
|
||||
"description": "Integrate Git version control with automatic backup and other advanced features.",
|
||||
"isDesktopOnly": false,
|
||||
"fundingUrl": "https://ko-fi.com/vinzent",
|
||||
"version": "2.34.0"
|
||||
}
|
||||
+605
@@ -0,0 +1,605 @@
|
||||
@keyframes loading {
|
||||
0% {
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
|
||||
100% {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="git-view"] .button-border {
|
||||
border: 2px solid var(--interactive-accent);
|
||||
border-radius: var(--radius-s);
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="git-view"] .view-content {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="git-history-view"] .view-content {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.loading > svg {
|
||||
animation: 2s linear infinite loading;
|
||||
transform-origin: 50% 50%;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.obsidian-git-center {
|
||||
margin: auto;
|
||||
text-align: center;
|
||||
width: 50%;
|
||||
}
|
||||
|
||||
.obsidian-git-textarea {
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
.obsidian-git-disabled {
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
.obsidian-git-center-button {
|
||||
display: block;
|
||||
margin: 20px auto;
|
||||
}
|
||||
|
||||
.tooltip.mod-left {
|
||||
overflow-wrap: break-word;
|
||||
}
|
||||
|
||||
.tooltip.mod-right {
|
||||
overflow-wrap: break-word;
|
||||
}
|
||||
.git-tools {
|
||||
display: flex;
|
||||
margin-left: auto;
|
||||
}
|
||||
.git-tools .type {
|
||||
padding-left: var(--size-2-1);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 11px;
|
||||
}
|
||||
|
||||
.git-tools .type[data-type="M"] {
|
||||
color: orange;
|
||||
}
|
||||
.git-tools .type[data-type="D"] {
|
||||
color: red;
|
||||
}
|
||||
.git-tools .buttons {
|
||||
display: flex;
|
||||
}
|
||||
.git-tools .buttons > * {
|
||||
padding: 0 0;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.is-active .git-tools .buttons > * {
|
||||
color: var(--nav-item-color-active);
|
||||
}
|
||||
|
||||
.git-author {
|
||||
color: var(--text-accent);
|
||||
}
|
||||
|
||||
.git-date {
|
||||
color: var(--text-accent);
|
||||
}
|
||||
|
||||
.git-ref {
|
||||
color: var(--text-accent);
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-d-none {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-wrapper {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-file-header {
|
||||
background-color: var(--background-primary);
|
||||
border-bottom: 1px solid var(--interactive-accent);
|
||||
font-family: var(--font-monospace);
|
||||
height: 35px;
|
||||
padding: 5px 10px;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-file-header,
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-file-stats {
|
||||
display: -webkit-box;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-file-stats {
|
||||
font-size: 14px;
|
||||
margin-left: auto;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-lines-added {
|
||||
border: 1px solid #b4e2b4;
|
||||
border-radius: 5px 0 0 5px;
|
||||
color: #399839;
|
||||
padding: 2px;
|
||||
text-align: right;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-lines-deleted {
|
||||
border: 1px solid #e9aeae;
|
||||
border-radius: 0 5px 5px 0;
|
||||
color: #c33;
|
||||
margin-left: 1px;
|
||||
padding: 2px;
|
||||
text-align: left;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-file-name-wrapper {
|
||||
-webkit-box-align: center;
|
||||
-ms-flex-align: center;
|
||||
align-items: center;
|
||||
display: -webkit-box;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
font-size: 15px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-file-name {
|
||||
overflow-x: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-file-wrapper {
|
||||
border: 1px solid var(--background-modifier-border);
|
||||
border-radius: 3px;
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-file-collapse {
|
||||
-webkit-box-pack: end;
|
||||
-ms-flex-pack: end;
|
||||
-webkit-box-align: center;
|
||||
-ms-flex-align: center;
|
||||
align-items: center;
|
||||
border: 1px solid var(--background-modifier-border);
|
||||
border-radius: 3px;
|
||||
cursor: pointer;
|
||||
display: none;
|
||||
font-size: 12px;
|
||||
justify-content: flex-end;
|
||||
padding: 4px 8px;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-file-collapse.d2h-selected {
|
||||
background-color: #c8e1ff;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-file-collapse-input {
|
||||
margin: 0 4px 0 0;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-diff-table {
|
||||
border-collapse: collapse;
|
||||
font-family: Menlo, Consolas, monospace;
|
||||
font-size: 13px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-files-diff {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-file-diff {
|
||||
overflow-y: hidden;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-file-side-diff {
|
||||
display: inline-block;
|
||||
margin-bottom: -8px;
|
||||
margin-right: -4px;
|
||||
overflow-x: scroll;
|
||||
overflow-y: hidden;
|
||||
width: 50%;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-code-line {
|
||||
padding: 0 8em;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-code-line,
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-line {
|
||||
display: inline-block;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
white-space: nowrap;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-line {
|
||||
padding: 0 4.5em;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-code-line-ctn {
|
||||
word-wrap: normal;
|
||||
background: none;
|
||||
display: inline-block;
|
||||
padding: 0;
|
||||
-webkit-user-select: text;
|
||||
-moz-user-select: text;
|
||||
-ms-user-select: text;
|
||||
user-select: text;
|
||||
vertical-align: middle;
|
||||
white-space: pre;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.theme-light .workspace-leaf-content[data-type="diff-view"] .d2h-code-line del,
|
||||
.theme-light
|
||||
.workspace-leaf-content[data-type="diff-view"]
|
||||
.d2h-code-side-line
|
||||
del {
|
||||
background-color: #ffb6ba;
|
||||
}
|
||||
|
||||
.theme-dark .workspace-leaf-content[data-type="diff-view"] .d2h-code-line del,
|
||||
.theme-dark
|
||||
.workspace-leaf-content[data-type="diff-view"]
|
||||
.d2h-code-side-line
|
||||
del {
|
||||
background-color: #8d232881;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-code-line del,
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-code-line ins,
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-line del,
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-line ins {
|
||||
border-radius: 0.2em;
|
||||
display: inline-block;
|
||||
margin-top: -1px;
|
||||
text-decoration: none;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.theme-light .workspace-leaf-content[data-type="diff-view"] .d2h-code-line ins,
|
||||
.theme-light
|
||||
.workspace-leaf-content[data-type="diff-view"]
|
||||
.d2h-code-side-line
|
||||
ins {
|
||||
background-color: #97f295;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.theme-dark .workspace-leaf-content[data-type="diff-view"] .d2h-code-line ins,
|
||||
.theme-dark
|
||||
.workspace-leaf-content[data-type="diff-view"]
|
||||
.d2h-code-side-line
|
||||
ins {
|
||||
background-color: #1d921996;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-code-line-prefix {
|
||||
word-wrap: normal;
|
||||
background: none;
|
||||
display: inline;
|
||||
padding: 0;
|
||||
white-space: pre;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .line-num1 {
|
||||
float: left;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .line-num1,
|
||||
.workspace-leaf-content[data-type="diff-view"] .line-num2 {
|
||||
-webkit-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
overflow: hidden;
|
||||
padding: 0 0.5em;
|
||||
text-overflow: ellipsis;
|
||||
width: 3.5em;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .line-num2 {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-code-linenumber {
|
||||
background-color: var(--background-primary);
|
||||
border: solid var(--background-modifier-border);
|
||||
border-width: 0 1px;
|
||||
-webkit-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
color: var(--text-muted);
|
||||
cursor: pointer;
|
||||
display: inline-block;
|
||||
position: absolute;
|
||||
text-align: right;
|
||||
width: 7.5em;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-code-linenumber:after {
|
||||
content: "\200b";
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-linenumber {
|
||||
background-color: var(--background-primary);
|
||||
border: solid var(--background-modifier-border);
|
||||
border-width: 0 1px;
|
||||
-webkit-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
color: var(--text-muted);
|
||||
cursor: pointer;
|
||||
display: inline-block;
|
||||
overflow: hidden;
|
||||
padding: 0 0.5em;
|
||||
position: absolute;
|
||||
text-align: right;
|
||||
text-overflow: ellipsis;
|
||||
width: 4em;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-diff-tbody tr {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-linenumber:after {
|
||||
content: "\200b";
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-emptyplaceholder,
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-emptyplaceholder {
|
||||
background-color: var(--background-primary);
|
||||
border-color: var(--background-modifier-border);
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-code-line-prefix,
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-code-linenumber,
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-linenumber,
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-emptyplaceholder {
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-code-linenumber,
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-linenumber {
|
||||
direction: rtl;
|
||||
}
|
||||
|
||||
.theme-light .workspace-leaf-content[data-type="diff-view"] .d2h-del {
|
||||
background-color: #fee8e9;
|
||||
border-color: #e9aeae;
|
||||
}
|
||||
|
||||
.theme-light .workspace-leaf-content[data-type="diff-view"] .d2h-ins {
|
||||
background-color: #dfd;
|
||||
border-color: #b4e2b4;
|
||||
}
|
||||
|
||||
.theme-dark .workspace-leaf-content[data-type="diff-view"] .d2h-del {
|
||||
background-color: #521b1d83;
|
||||
border-color: #691d1d73;
|
||||
}
|
||||
|
||||
.theme-dark .workspace-leaf-content[data-type="diff-view"] .d2h-ins {
|
||||
background-color: rgba(30, 71, 30, 0.5);
|
||||
border-color: #13501381;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-info {
|
||||
background-color: var(--background-primary);
|
||||
border-color: var(--background-modifier-border);
|
||||
color: var(--text-normal);
|
||||
}
|
||||
|
||||
.theme-light
|
||||
.workspace-leaf-content[data-type="diff-view"]
|
||||
.d2h-file-diff
|
||||
.d2h-del.d2h-change {
|
||||
background-color: #fdf2d0;
|
||||
}
|
||||
|
||||
.theme-dark
|
||||
.workspace-leaf-content[data-type="diff-view"]
|
||||
.d2h-file-diff
|
||||
.d2h-del.d2h-change {
|
||||
background-color: #55492480;
|
||||
}
|
||||
|
||||
.theme-light
|
||||
.workspace-leaf-content[data-type="diff-view"]
|
||||
.d2h-file-diff
|
||||
.d2h-ins.d2h-change {
|
||||
background-color: #ded;
|
||||
}
|
||||
|
||||
.theme-dark
|
||||
.workspace-leaf-content[data-type="diff-view"]
|
||||
.d2h-file-diff
|
||||
.d2h-ins.d2h-change {
|
||||
background-color: rgba(37, 78, 37, 0.418);
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-file-list-wrapper {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-file-list-wrapper a {
|
||||
color: #3572b0;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"]
|
||||
.d2h-file-list-wrapper
|
||||
a:visited {
|
||||
color: #3572b0;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-file-list-header {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-file-list-title {
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-file-list-line {
|
||||
display: -webkit-box;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-file-list {
|
||||
display: block;
|
||||
list-style: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-file-list > li {
|
||||
border-bottom: 1px solid var(--background-modifier-border);
|
||||
margin: 0;
|
||||
padding: 5px 10px;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-file-list > li:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-file-switch {
|
||||
cursor: pointer;
|
||||
display: none;
|
||||
font-size: 10px;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-icon {
|
||||
fill: currentColor;
|
||||
margin-right: 10px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-deleted {
|
||||
color: #c33;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-added {
|
||||
color: #399839;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-changed {
|
||||
color: #d0b44c;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-moved {
|
||||
color: #3572b0;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-tag {
|
||||
background-color: var(--background-primary);
|
||||
display: -webkit-box;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
font-size: 10px;
|
||||
margin-left: 5px;
|
||||
padding: 0 2px;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-deleted-tag {
|
||||
border: 2px solid #c33;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-added-tag {
|
||||
border: 1px solid #399839;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-changed-tag {
|
||||
border: 1px solid #d0b44c;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-moved-tag {
|
||||
border: 1px solid #3572b0;
|
||||
}
|
||||
|
||||
/* ====================== Line Authoring Information ====================== */
|
||||
|
||||
.cm-gutterElement.obs-git-blame-gutter {
|
||||
/* Add background color to spacing inbetween and around the gutter for better aesthetics */
|
||||
border-width: 0px 2px 0.2px 2px;
|
||||
border-style: solid;
|
||||
border-color: var(--background-secondary);
|
||||
background-color: var(--background-secondary);
|
||||
}
|
||||
|
||||
.cm-gutterElement.obs-git-blame-gutter > div,
|
||||
.line-author-settings-preview {
|
||||
/* delegate text color to settings */
|
||||
color: var(--obs-git-gutter-text);
|
||||
font-family: monospace;
|
||||
height: 100%; /* ensure, that age-based background color occupies entire parent */
|
||||
text-align: right;
|
||||
padding: 0px 6px 0px 6px;
|
||||
white-space: pre; /* Keep spaces and do not collapse them. */
|
||||
}
|
||||
|
||||
@media (max-width: 800px) {
|
||||
/* hide git blame gutter not to superpose text */
|
||||
.cm-gutterElement.obs-git-blame-gutter {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.git-unified-diff-view,
|
||||
.git-split-diff-view .cm-deletedLine .cm-changedText {
|
||||
background-color: #ee443330;
|
||||
}
|
||||
|
||||
.git-unified-diff-view,
|
||||
.git-split-diff-view .cm-insertedLine .cm-changedText {
|
||||
background-color: #22bb2230;
|
||||
}
|
||||
|
||||
/* Limits the scrollbar to the view body */
|
||||
.git-view {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
position: relative;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.git-obscure-prompt[git-is-obscured="true"] #git-show-password:after {
|
||||
-webkit-mask-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svg-icon lucide-eye"><path d="M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0"></path><circle cx="12" cy="12" r="3"></circle></svg>');
|
||||
}
|
||||
|
||||
.git-obscure-prompt[git-is-obscured="false"] #git-show-password:after {
|
||||
-webkit-mask-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svg-icon lucide-eye-off"><path d="M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49"></path><path d="M14.084 14.158a3 3 0 0 1-4.242-4.242"></path><path d="M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143"></path><path d="m2 2 20 20"></path></svg>');
|
||||
}
|
||||
|
||||
/* Override styling of Codemirror merge view "collapsed lines" indicator */
|
||||
.git-split-diff-view .ͼ2 .cm-collapsedLines {
|
||||
background: var(--interactive-normal);
|
||||
border-radius: var(--radius-m);
|
||||
color: var(--text-accent);
|
||||
font-size: var(--font-small);
|
||||
padding: var(--size-4-1) var(--size-4-1);
|
||||
}
|
||||
.git-split-diff-view .ͼ2 .cm-collapsedLines:hover {
|
||||
background: var(--interactive-hover);
|
||||
color: var(--text-accent-hover);
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
{
|
||||
"presets": {
|
||||
"this_file": "path includes {{query.file.path}}",
|
||||
"this_folder": "folder includes {{query.file.folder}}",
|
||||
"this_folder_only": "filter by function task.file.folder === query.file.folder",
|
||||
"this_root": "root includes {{query.file.root}}",
|
||||
"hide_date_fields": "# Hide any values for all date fields\nhide due date\nhide scheduled date\nhide start date\nhide created date\nhide done date\nhide cancelled date",
|
||||
"hide_non_date_fields": "# Hide all the non-date fields, but not tags\nhide id\nhide depends on\nhide recurrence rule\nhide on completion\nhide priority",
|
||||
"hide_query_elements": "# Hide postpone, edit and backinks\nhide postpone button\nhide edit button\nhide backlinks",
|
||||
"hide_everything": "# Hide everything except description and any tags\npreset hide_date_fields\npreset hide_non_date_fields\npreset hide_query_elements"
|
||||
},
|
||||
"globalQuery": "",
|
||||
"globalFilter": "",
|
||||
"removeGlobalFilter": false,
|
||||
"taskFormat": "tasksPluginEmoji",
|
||||
"setCreatedDate": false,
|
||||
"setDoneDate": true,
|
||||
"setCancelledDate": true,
|
||||
"autoSuggestInEditor": true,
|
||||
"autoSuggestMinMatch": 0,
|
||||
"autoSuggestMaxItems": 20,
|
||||
"provideAccessKeys": true,
|
||||
"useFilenameAsScheduledDate": false,
|
||||
"filenameAsScheduledDateFormat": "",
|
||||
"filenameAsDateFolders": [],
|
||||
"recurrenceOnNextLine": false,
|
||||
"removeScheduledDateOnRecurrence": false,
|
||||
"statusSettings": {
|
||||
"coreStatuses": [
|
||||
{
|
||||
"symbol": " ",
|
||||
"name": "Todo",
|
||||
"nextStatusSymbol": "x",
|
||||
"availableAsCommand": true,
|
||||
"type": "TODO"
|
||||
},
|
||||
{
|
||||
"symbol": "x",
|
||||
"name": "Done",
|
||||
"nextStatusSymbol": " ",
|
||||
"availableAsCommand": true,
|
||||
"type": "DONE"
|
||||
}
|
||||
],
|
||||
"customStatuses": [
|
||||
{
|
||||
"symbol": "/",
|
||||
"name": "In Progress",
|
||||
"nextStatusSymbol": "x",
|
||||
"availableAsCommand": true,
|
||||
"type": "IN_PROGRESS"
|
||||
},
|
||||
{
|
||||
"symbol": "-",
|
||||
"name": "Cancelled",
|
||||
"nextStatusSymbol": " ",
|
||||
"availableAsCommand": true,
|
||||
"type": "CANCELLED"
|
||||
}
|
||||
]
|
||||
},
|
||||
"features": {
|
||||
"INTERNAL_TESTING_ENABLED_BY_DEFAULT": true
|
||||
},
|
||||
"generalSettings": {},
|
||||
"headingOpened": {
|
||||
"Core Statuses": true,
|
||||
"Custom Statuses": true
|
||||
},
|
||||
"debugSettings": {
|
||||
"ignoreSortInstructions": false,
|
||||
"showTaskHiddenData": false,
|
||||
"recordTimings": false
|
||||
},
|
||||
"loggingOptions": {
|
||||
"minLevels": {
|
||||
"": "info",
|
||||
"tasks": "info",
|
||||
"tasks.Cache": "info",
|
||||
"tasks.Events": "info",
|
||||
"tasks.File": "info",
|
||||
"tasks.Query": "info",
|
||||
"tasks.Task": "info"
|
||||
}
|
||||
}
|
||||
}
|
||||
+500
File diff suppressed because one or more lines are too long
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"id": "obsidian-tasks-plugin",
|
||||
"name": "Tasks",
|
||||
"version": "7.20.0",
|
||||
"minAppVersion": "1.4.0",
|
||||
"description": "Track tasks across your vault. Supports due dates, recurring tasks, done dates, sub-set of checklist items, and filtering.",
|
||||
"helpUrl": "https://publish.obsidian.md/tasks/",
|
||||
"author": "Clare Macrae and Ilyas Landikov (created by Martin Schenck)",
|
||||
"authorUrl": "https://github.com/obsidian-tasks-group",
|
||||
"fundingUrl": "https://github.com/sponsors/claremacrae",
|
||||
"isDesktopOnly": false
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"formatType": "normal",
|
||||
"showRibbonIcon": true,
|
||||
"bindEnter": true,
|
||||
"bindTab": true
|
||||
}
|
||||
+236
File diff suppressed because one or more lines are too long
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "table-editor-obsidian",
|
||||
"name": "Advanced Tables",
|
||||
"author": "Tony Grosinger",
|
||||
"authorUrl": "https://grosinger.net",
|
||||
"description": "Improved table navigation, formatting, manipulation, and formulas",
|
||||
"isDesktopOnly": false,
|
||||
"minAppVersion": "1.0.0",
|
||||
"version": "0.22.1",
|
||||
"js": "main.js",
|
||||
"fundingUrl": {
|
||||
"Github Sponsor": "https://github.com/sponsors/tgrosinger",
|
||||
"Buy me a Coffee": "https://buymeacoffee.com/tgrosinger",
|
||||
"Paypal": "https://paypal.me/tgrosinger"
|
||||
},
|
||||
"donation": "https://buymeacoffee.com/tgrosinger"
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
:root {
|
||||
--advanced-tables-helper-size: 28px;
|
||||
}
|
||||
|
||||
.HyperMD-table-row span.cm-inline-code {
|
||||
font-size: 100%;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
.advanced-tables-buttons>div>.title {
|
||||
font-weight: var(--font-medium);
|
||||
font-size: var(--nav-item-size);
|
||||
color: var(--nav-item-color);
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
[data-type="advanced-tables-toolbar"] .nav-buttons-container {
|
||||
column-gap: 0.2rem;
|
||||
margin: 0.2rem 0 0.2rem 0;
|
||||
justify-content: start;
|
||||
}
|
||||
|
||||
[data-type="advanced-tables-toolbar"] .nav-buttons-container::before {
|
||||
min-width: 2.6rem;
|
||||
line-height: var(--advanced-tables-helper-size);
|
||||
font-size: var(--nav-item-size);
|
||||
font-weight: var(--nav-item-weight);
|
||||
color: var(--nav-item-color);
|
||||
}
|
||||
|
||||
[data-type="advanced-tables-toolbar"] .nav-buttons-container>* {
|
||||
height: var(--advanced-tables-helper-size);
|
||||
line-height: var(--advanced-tables-helper-size);
|
||||
}
|
||||
|
||||
[data-type="advanced-tables-toolbar"] .nav-buttons-container .nav-action-button {
|
||||
width: var(--advanced-tables-helper-size);
|
||||
height: var(--advanced-tables-helper-size);
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
border-radius: var(--radius-s);
|
||||
}
|
||||
|
||||
[data-type="advanced-tables-toolbar"] .nav-buttons-container .nav-action-button:hover {
|
||||
background-color: var(--nav-item-background-hover);
|
||||
color: var(--nav-item-color-hover);
|
||||
font-weight: var(--nav-item-weight-hover);
|
||||
}
|
||||
|
||||
.advanced-tables-row-label {
|
||||
width: 50px;
|
||||
}
|
||||
|
||||
.widget-icon {
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
fill: var(--text-muted);
|
||||
}
|
||||
|
||||
.widget-icon:hover {
|
||||
fill: var(--text-normal);
|
||||
}
|
||||
|
||||
.advanced-tables-csv-export textarea {
|
||||
height: 200px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.advanced-tables-donation {
|
||||
width: 70%;
|
||||
margin: 0 auto;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.advanced-tables-donate-button {
|
||||
margin: 10px;
|
||||
}
|
||||
+165
File diff suppressed because one or more lines are too long
+11
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"id": "tag-wrangler",
|
||||
"name": "Tag Wrangler",
|
||||
"author": "PJ Eby",
|
||||
"authorUrl": "https://github.com/pjeby",
|
||||
"version": "0.6.4",
|
||||
"minAppVersion": "1.5.8",
|
||||
"description": "Rename, merge, toggle, and search tags from the tags view",
|
||||
"fundingUrl": "https://dirtsimple.org/tips/tag-wrangler",
|
||||
"isDesktopOnly": false
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"name": "Obsidian gruvbox",
|
||||
"version": "0.2.1",
|
||||
"minAppVersion": "0.16.0",
|
||||
"author": "insanum",
|
||||
"authorUrl": "https://insanum.com"
|
||||
}
|
||||
+579
@@ -0,0 +1,579 @@
|
||||
|
||||
:root
|
||||
{
|
||||
--dark0-hard_x: 29,32,33; /* #1d2021 */
|
||||
--dark0-hard: rgb(var(--dark0-hard_x));
|
||||
--dark0_x: 40,40,40; /* #282828 */
|
||||
--dark0: rgb(var(--dark0_x));
|
||||
--dark0-soft_x: 50,48,47; /* #32302f */
|
||||
--dark0-soft: rgb(var(--dark0-soft_x));
|
||||
--dark1_x: 60,56,54; /* #3c3836 */
|
||||
--dark1: rgb(var(--dark1_x));
|
||||
--dark2_x: 80,73,69; /* #504945 */
|
||||
--dark2: rgb(var(--dark2_x));
|
||||
--dark3_x: 102,92,84; /* #665c54 */
|
||||
--dark3: rgb(var(--dark3_x));
|
||||
--dark4_x: 124,111,100; /* #7c6f64 */
|
||||
--dark4: rgb(var(--dark4_x));
|
||||
--gray_x: 146,131,116; /* #928374 */
|
||||
--gray: rgb(var(--gray_x));
|
||||
|
||||
--light0-hard_x: 249,245,215; /* #f9f5d7 */
|
||||
--light0-hard: rgb(var(--light0-hard_x));
|
||||
--light0_x: 251,241,199; /* #fbf1c7 */
|
||||
--light0: rgb(var(--light0_x));
|
||||
--light0-soft_x: 242,229,188; /* #f2e5bc */
|
||||
--light0-soft: rgb(var(--light0-soft_x));
|
||||
--light1_x: 235,219,178; /* #ebdbb2 */
|
||||
--light1: rgb(var(--light1_x));
|
||||
--light2_x: 213,196,161; /* #d5c4a1 */
|
||||
--light2: rgb(var(--light2_x));
|
||||
--light3_x: 189,174,147; /* #bdae93 */
|
||||
--light3: rgb(var(--light3_x));
|
||||
--light4_x: 168,153,132; /* #a89984 */
|
||||
--light4: rgb(var(--light4_x));
|
||||
|
||||
--bright-red_x: 251,73,52; /* #fb4934 */
|
||||
--bright-red: rgb(var(--bright-red_x));
|
||||
--bright-green_x: 184,187,38; /* #b8bb26 */
|
||||
--bright-green: rgb(var(--bright-green_x));
|
||||
--bright-yellow_x: 250,189,47; /* #fabd2f */
|
||||
--bright-yellow: rgb(var(--bright-yellow_x));
|
||||
--bright-blue_x: 131,165,152; /* #83a598 */
|
||||
--bright-blue: rgb(var(--bright-blue_x));
|
||||
--bright-purple_x: 211,134,155; /* #d3869b */
|
||||
--bright-purple: rgb(var(--bright-purple_x));
|
||||
--bright-aqua_x: 142,192,124; /* #8ec07c */
|
||||
--bright-aqua: rgb(var(--bright-aqua_x));
|
||||
--bright-orange_x: 254,128,25; /* #fe8019 */
|
||||
--bright-orange: rgb(var(--bright-orange_x));
|
||||
|
||||
--neutral-red_x: 204,36,29; /* #cc241d */
|
||||
--neutral-red: rgb(var(--neutral-red_x));
|
||||
--neutral-green_x: 152,151,26; /* #98971a */
|
||||
--neutral-green: rgb(var(--neutral-green_x));
|
||||
--neutral-yellow_x: 215,153,33; /* #d79921 */
|
||||
--neutral-yellow: rgb(var(--neutral-yellow_x));
|
||||
--neutral-blue_x: 69,133,136; /* #458588 */
|
||||
--neutral-blue: rgb(var(--neutral-blue_x));
|
||||
--neutral-purple_x: 177,98,134; /* #b16286 */
|
||||
--neutral-purple: rgb(var(--neutral-purple_x));
|
||||
--neutral-aqua_x: 104,157,106; /* #689d6a */
|
||||
--neutral-aqua: rgb(var(--neutral-aqua_x));
|
||||
--neutral-orange_x: 214,93,14; /* #d65d0e */
|
||||
--neutral-orange: rgb(var(--neutral-orange_x));
|
||||
|
||||
--faded-red_x: 157,0,6; /* #9d0006 */
|
||||
--faded-red: rgb(var(--faded-red_x));
|
||||
--faded-green_x: 121,116,14; /* #79740e */
|
||||
--faded-green: rgb(var(--faded-green_x));
|
||||
--faded-yellow_x: 181,118,20; /* #b57614 */
|
||||
--faded-yellow: rgb(var(--faded-yellow_x));
|
||||
--faded-blue_x: 7,102,120; /* #076678 */
|
||||
--faded-blue: rgb(var(--faded-blue_x));
|
||||
--faded-purple_x: 143,63,113; /* #8f3f71 */
|
||||
--faded-purple: rgb(var(--faded-purple_x));
|
||||
--faded-aqua_x: 66,123,88; /* #427b58 */
|
||||
--faded-aqua: rgb(var(--faded-aqua_x));
|
||||
--faded-orange_x: 175,58,3; /* #af3a03 */
|
||||
--faded-orange: rgb(var(--faded-orange_x));
|
||||
}
|
||||
|
||||
body
|
||||
{
|
||||
--accent-h: 12; /* --faded-red #9d0006 */
|
||||
--accent-s: 107%;
|
||||
--accent-l: 32%;
|
||||
|
||||
--link-decoration: none;
|
||||
--link-decoration-hover: none;
|
||||
--link-external-decoration: none;
|
||||
--link-external-decoration-hover: none;
|
||||
|
||||
--tag-decoration: none;
|
||||
--tag-decoration-hover: underline;
|
||||
--tag-padding-x: .5em;
|
||||
--tag-padding-y: .2em;
|
||||
--tag-radius: .5em;
|
||||
|
||||
--tab-font-weight: 600;
|
||||
--bold-weight: 600;
|
||||
|
||||
--checkbox-radius: 0;
|
||||
|
||||
/* --list-indent: 2em; */
|
||||
|
||||
--embed-border-left: 6px double var(--interactive-accent);
|
||||
}
|
||||
|
||||
.theme-dark
|
||||
{
|
||||
--color-red-rgb: var(--neutral-red_x);
|
||||
--color-red: var(--neutral-red);
|
||||
--color-purple-rgb: var(--neutral-purple_x);
|
||||
--color-purple: var(--neutral-purple);
|
||||
--color-green-rgb: var(--neutral-green_x);
|
||||
--color-green: var(--neutral-green);
|
||||
--color-cyan-rgb: var(--neutral-blue_x);
|
||||
--color-cyan: var(--neutral-blue);
|
||||
--color-blue-rgb: var(--faded-blue_x);
|
||||
--color-blue: var(--faded-blue);
|
||||
--color-yellow-rgb: var(--neutral-yellow_x);
|
||||
--color-yellow: var(--neutral-yellow);
|
||||
--color-orange-rgb: var(--neutral-orange_x);
|
||||
--color-orange: var(--neutral-orange);
|
||||
--color-pink-rgb: var(--bright-purple_x);
|
||||
--color-pink: var(--bright-purple);
|
||||
|
||||
--background-primary: var(--dark0);
|
||||
--background-primary-alt: var(--dark0);
|
||||
--background-secondary: var(--dark0-hard);
|
||||
--background-secondary-alt: var(--dark1);
|
||||
--background-modifier-border: var(--dark1);
|
||||
|
||||
--cursor-line-background: rgba(var(--dark1_x), 0.5);
|
||||
|
||||
--text-normal: var(--light0);
|
||||
--text-faint: var(--light1);
|
||||
--text-muted: var(--light2);
|
||||
|
||||
--link-url: var(--neutral-green);
|
||||
|
||||
--h1-color: var(--neutral-red);
|
||||
--h2-color: var(--neutral-yellow);
|
||||
--h3-color: var(--neutral-green);
|
||||
--h4-color: var(--neutral-aqua);
|
||||
--h5-color: var(--neutral-blue);
|
||||
--h6-color: var(--neutral-purple);
|
||||
|
||||
--text-highlight-bg: var(--neutral-yellow);
|
||||
--text-highlight-fg: var(--dark0-hard);
|
||||
|
||||
--text-accent: var(--neutral-orange);
|
||||
--text-accent-hover: var(--bright-aqua);
|
||||
|
||||
--tag-color: var(--bright-aqua);
|
||||
--tag-background: var(--dark2);
|
||||
--tag-background-hover: var(--dark1);
|
||||
|
||||
--titlebar-text-color-focused: var(--bright-red);
|
||||
|
||||
--inline-title-color: var(--bright-yellow);
|
||||
|
||||
--bold-color: var(--neutral-yellow);
|
||||
--italic-color: var(--neutral-yellow);
|
||||
|
||||
--checkbox-color: var(--light4);
|
||||
--checkbox-color-hover: var(--light4);
|
||||
--checkbox-border-color: var(--light4);
|
||||
--checkbox-border-color-hover: var(--light4);
|
||||
--checklist-done-color: rgba(var(--light2_x), 0.5);
|
||||
|
||||
--table-header-background: rgba(var(--dark0_x), 0.2);
|
||||
--table-header-background-hover: var(--dark2);
|
||||
--table-row-even-background: rgba(var(--dark2_x), 0.2);
|
||||
--table-row-odd-background: rgba(var(--dark2_x), 0.4);
|
||||
--table-row-background-hover: var(--dark2);
|
||||
|
||||
--text-selection: rgba(var(--neutral-red_x), 0.6);
|
||||
--flashing-background: rgba(var(--neutral-red_x), 0.3);
|
||||
|
||||
--code-normal: var(--bright-blue);
|
||||
--code-background: var(--dark1);
|
||||
|
||||
--mermaid-note: var(--neutral-blue);
|
||||
--mermaid-actor: var(--dark2);
|
||||
--mermaid-loopline: var(--neutral-blue);
|
||||
--mermaid-exclude: var(--dark4);
|
||||
--mermaid-seqnum: var(--dark0);
|
||||
|
||||
--icon-color-hover: var(--bright-red);
|
||||
--icon-color-focused: var(--bright-blue);
|
||||
|
||||
--nav-item-color-hover: var(--bright-red);
|
||||
--nav-item-color-active: var(--bright-aqua);
|
||||
--nav-file-tag: rgba(var(--neutral-yellow_x), 0.9);
|
||||
|
||||
--graph-line: var(--dark2);
|
||||
--graph-node: var(--light3);
|
||||
--graph-node-tag: var(--neutral-red);
|
||||
--graph-node-attachment: var(--neutral-green);
|
||||
|
||||
--calendar-hover: var(--bright-red);
|
||||
--calendar-background-hover: var(--dark1);
|
||||
--calendar-week: var(--neutral-orange);
|
||||
--calendar-today: var(--neutral-orange);
|
||||
|
||||
--dataview-key: var(--text-faint);
|
||||
--dataview-key-background: rgba(var(--faded-red_x), 0.5);
|
||||
--dataview-value: var(--text-faint);
|
||||
--dataview-value-background: rgba(var(--neutral-green_x), 0.3);
|
||||
|
||||
--tab-text-color-focused-active: var(--neutral-yellow);
|
||||
--tab-text-color-focused-active-current: var(--bright-red);
|
||||
}
|
||||
|
||||
.theme-light
|
||||
{
|
||||
--color-red-rgb: var(--neutral-red_x);
|
||||
--color-red: var(--neutral-red);
|
||||
--color-purple-rgb: var(--neutral-purple_x);
|
||||
--color-purple: var(--neutral-purple);
|
||||
--color-green-rgb: var(--neutral-green_x);
|
||||
--color-green: var(--neutral-green);
|
||||
--color-cyan-rgb: var(--neutral-blue_x);
|
||||
--color-cyan: var(--neutral-blue);
|
||||
--color-blue-rgb: var(--faded-blue_x);
|
||||
--color-blue: var(--faded-blue);
|
||||
--color-yellow-rgb: var(--neutral-yellow_x);
|
||||
--color-yellow: var(--neutral-yellow);
|
||||
--color-orange-rgb: var(--neutral-orange_x);
|
||||
--color-orange: var(--neutral-orange);
|
||||
--color-pink-rgb: var(--bright-purple_x);
|
||||
--color-pink: var(--bright-purple);
|
||||
|
||||
--background-primary: var(--light0-hard);
|
||||
--background-primary-alt: var(--light0-hard);
|
||||
--background-secondary: var(--light1);
|
||||
--background-secondary-alt: var(--light1);
|
||||
--background-modifier-border: var(--light2);
|
||||
|
||||
--cursor-line-background: rgba(var(--light1_x), 0.5);
|
||||
|
||||
--text-normal: var(--dark0);
|
||||
--text-faint: var(--dark3);
|
||||
--text-muted: var(--dark2);
|
||||
|
||||
--link-url: var(--neutral-green);
|
||||
|
||||
--h1-color: var(--neutral-red);
|
||||
--h2-color: var(--neutral-yellow);
|
||||
--h3-color: var(--neutral-green);
|
||||
--h4-color: var(--neutral-aqua);
|
||||
--h5-color: var(--neutral-blue);
|
||||
--h6-color: var(--neutral-purple);
|
||||
|
||||
--text-highlight-bg: var(--bright-yellow);
|
||||
--text-highlight-fg: var(--dark0);
|
||||
|
||||
--text-accent: var(--neutral-orange);
|
||||
--text-accent-hover: var(--bright-aqua);
|
||||
|
||||
--tag-color: var(--neutral-aqua);
|
||||
--tag-background: var(--light1);
|
||||
--tag-background-hover: rgba(var(--light1_x), 0.6);
|
||||
|
||||
--titlebar-text-color-focused: var(--bright-red);
|
||||
|
||||
--inline-title-color: var(--bright-yellow);
|
||||
|
||||
--bold-color: var(--neutral-yellow);
|
||||
--italic-color: var(--neutral-yellow);
|
||||
|
||||
--checkbox-color: var(--light4);
|
||||
--checkbox-color-hover: var(--light4);
|
||||
--checkbox-border-color: var(--light4);
|
||||
--checkbox-border-color-hover: var(--light4);
|
||||
--checklist-done-color: rgba(var(--dark2_x), 0.4);
|
||||
|
||||
--table-header-background: rgba(var(--light3_x), 0.4);
|
||||
--table-header-background-hover: var(--light2);
|
||||
--table-row-even-background: rgba(var(--light1_x), 0.2);
|
||||
--table-row-odd-background: rgba(var(--light1_x), 0.7);
|
||||
--table-row-background-hover: var(--light2);
|
||||
|
||||
--text-selection: rgba(var(--neutral-red_x), 0.6);
|
||||
--flashing-background: rgba(var(--neutral-red_x), 0.3);
|
||||
|
||||
--code-normal: var(--bright-blue);
|
||||
--code-background: var(--light1);
|
||||
|
||||
--mermaid-note: var(--bright-blue);
|
||||
--mermaid-actor: var(--light3);
|
||||
--mermaid-loopline: var(--neutral-blue);
|
||||
--mermaid-exclude: var(--light2);
|
||||
--mermaid-seqnum: var(--light0);
|
||||
|
||||
--icon-color-hover: var(--bright-red);
|
||||
--icon-color-focused: var(--bright-blue);
|
||||
|
||||
--nav-item-color-hover: var(--bright-red);
|
||||
--nav-item-color-active: var(--neutral-blue);
|
||||
--nav-file-tag: rgba(var(--neutral-blue_x), 0.9);
|
||||
|
||||
--graph-line: var(--light1);
|
||||
--graph-node: var(--gray);
|
||||
--graph-node-tag: var(--neutral-red);
|
||||
--graph-node-attachment: var(--bright-green);
|
||||
|
||||
--calendar-hover: var(--bright-red);
|
||||
--calendar-background-hover: var(--light1);
|
||||
--calendar-week: var(--bright-red);
|
||||
--calendar-today: var(--bright-red);
|
||||
|
||||
--dataview-key: var(--text-faint);
|
||||
--dataview-key-background: rgba(var(--faded-red_x), 0.3);
|
||||
--dataview-value: var(--text-faint);
|
||||
--dataview-value-background: rgba(var(--neutral-green_x), 0.2);
|
||||
|
||||
--tab-text-color-focused-active: var(--neutral-yellow);
|
||||
--tab-text-color-focused-active-current: var(--bright-red);
|
||||
}
|
||||
|
||||
table
|
||||
{
|
||||
border: 1px solid var(--background-secondary) !important;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
thead
|
||||
{
|
||||
border-bottom: 2px solid var(--background-modifier-border) !important;
|
||||
}
|
||||
|
||||
th
|
||||
{
|
||||
font-weight: 600 !important;
|
||||
border: 1px solid var(--background-secondary) !important;
|
||||
}
|
||||
|
||||
td
|
||||
{
|
||||
border-left: 1px solid var(--background-secondary) !important;
|
||||
border-right: 1px solid var(--background-secondary) !important;
|
||||
border-bottom: 1px solid var(--background-secondary) !important;
|
||||
}
|
||||
|
||||
.markdown-rendered tbody tr:nth-child(even)
|
||||
{
|
||||
background-color: var(--table-row-even-background) !important;
|
||||
}
|
||||
|
||||
.markdown-rendered tbody tr:nth-child(odd)
|
||||
{
|
||||
background-color: var(--table-row-odd-background) !important;
|
||||
}
|
||||
|
||||
.markdown-rendered tbody tr:nth-child(even):hover,
|
||||
.markdown-rendered tbody tr:nth-child(odd):hover
|
||||
{
|
||||
background-color: var(--table-row-background-hover) !important;
|
||||
}
|
||||
|
||||
.markdown-rendered mark
|
||||
{
|
||||
background-color: var(--text-highlight-bg);
|
||||
color: var(--text-highlight-fg);
|
||||
}
|
||||
|
||||
.markdown-rendered mark a
|
||||
{
|
||||
color: var(--red) !important;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.search-result-file-matched-text
|
||||
{
|
||||
color: var(--text-highlight-fg) !important;
|
||||
}
|
||||
|
||||
.cm-hashtag-begin:hover, .cm-hashtag-end:hover
|
||||
{
|
||||
color: var(--text-accent);
|
||||
/* background-color: var(--tag-background-hover); */
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
input[type=checkbox]
|
||||
{
|
||||
border: 1px solid var(--checkbox-color);
|
||||
}
|
||||
|
||||
input[type=checkbox]:checked
|
||||
{
|
||||
background-color: var(--checkbox-color);
|
||||
box-shadow: inset 0 0 0 2px var(--background-primary);
|
||||
}
|
||||
|
||||
input[type=checkbox]:checked:after
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
|
||||
code[class*="language-"],
|
||||
pre[class*="language-"]
|
||||
{
|
||||
line-height: var(--line-height-tight) !important;
|
||||
}
|
||||
|
||||
.cm-url
|
||||
{
|
||||
color: var(--link-url) !important;
|
||||
}
|
||||
|
||||
.cm-url:hover
|
||||
{
|
||||
color: var(--text-accent-color) !important;
|
||||
}
|
||||
|
||||
/* Keep highlight/marks the same between viewer and editor. */
|
||||
.cm-highlight
|
||||
{
|
||||
color: var(--text-highlight-fg) !important;
|
||||
}
|
||||
|
||||
/* Keep inline code the same between viewer and editor. */
|
||||
.cm-inline-code
|
||||
{
|
||||
border-radius: var(--radius-s);
|
||||
font-size: var(--code-size);
|
||||
padding: 0.1em 0.25em;
|
||||
}
|
||||
|
||||
.cm-line .cm-strong
|
||||
{
|
||||
color: var(--bold-color) !important;
|
||||
}
|
||||
|
||||
/*
|
||||
* Keep list bullet padding the same between viewer and editor.
|
||||
* This is annoying with the cursor in the editor as there is a gap.
|
||||
*/
|
||||
/*
|
||||
.cm-formatting-list
|
||||
{
|
||||
padding-right: 4px !important;
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
* Keep sub-list indenting the same between viewer and editor.
|
||||
* This assumes --list-indent is default at 2em.
|
||||
*/
|
||||
/*
|
||||
.cm-indent
|
||||
{
|
||||
text-indent: 1em !important;
|
||||
}
|
||||
*/
|
||||
|
||||
.mermaid .note
|
||||
{
|
||||
fill: var(--mermaid-note) !important;
|
||||
}
|
||||
|
||||
.mermaid .actor
|
||||
{
|
||||
fill: var(--mermaid-actor) !important;
|
||||
}
|
||||
|
||||
.mermaid .loopLine
|
||||
{
|
||||
stroke: var(--mermaid-loopline) !important;
|
||||
}
|
||||
|
||||
.mermaid .loopText>tspan,
|
||||
.mermaid .entityLabel
|
||||
{
|
||||
fill: var(--neutral-red) !important;
|
||||
}
|
||||
|
||||
.mermaid .exclude-range
|
||||
{
|
||||
fill: var(--mermaid-exclude) !important;
|
||||
}
|
||||
|
||||
.mermaid .sequenceNumber
|
||||
{
|
||||
fill: var(--mermaid-seqnum) !important;
|
||||
}
|
||||
|
||||
.calendar .week-num
|
||||
{
|
||||
color: var(--calendar-week) !important;
|
||||
}
|
||||
|
||||
.calendar .today
|
||||
{
|
||||
color: var(--calendar-today) !important;
|
||||
}
|
||||
|
||||
.calendar .week-num:hover,
|
||||
.calendar .day:hover
|
||||
{
|
||||
color: var(--calendar-hover) !important;
|
||||
background-color: var(--calendar-background-hover) !important;
|
||||
}
|
||||
|
||||
.markdown-embed-title
|
||||
{
|
||||
color: var(--yellow);
|
||||
font-weight: 600 !important;
|
||||
}
|
||||
|
||||
.cm-active
|
||||
{
|
||||
background-color: var(--cursor-line-background) !important;
|
||||
}
|
||||
|
||||
.nav-file-tag
|
||||
{
|
||||
color: var(--nav-file-tag) !important;
|
||||
}
|
||||
|
||||
.is-flashing
|
||||
{
|
||||
background-color: var(--flashing-background) !important;
|
||||
}
|
||||
|
||||
.dataview.inline-field-key
|
||||
{
|
||||
border-top-left-radius: var(--radius-s);
|
||||
border-bottom-left-radius: var(--radius-s);
|
||||
padding-left: 4px;
|
||||
font-family: var(--font-monospace);
|
||||
font-size: var(--font-smaller);
|
||||
color: var(--dataview-key) !important;
|
||||
background-color: var(--dataview-key-background) !important;
|
||||
}
|
||||
|
||||
.dataview.inline-field-value
|
||||
{
|
||||
border-top-right-radius: var(--radius-s);
|
||||
border-bottom-right-radius: var(--radius-s);
|
||||
padding-right: 4px;
|
||||
font-family: var(--font-monospace);
|
||||
font-size: var(--font-smaller);
|
||||
color: var(--dataview-value) !important;
|
||||
background-color: var(--dataview-value-background) !important;
|
||||
}
|
||||
|
||||
.suggestion-highlight
|
||||
{
|
||||
color: var(--bright-red);
|
||||
}
|
||||
|
||||
body {
|
||||
--callout-border-width: 1px;
|
||||
--callout-border-opacity: 0.4;
|
||||
/* Order as defined in app.css */
|
||||
--callout-default: var(--neutral-blue_x);
|
||||
--callout-note: var(--neutral-blue_x);
|
||||
--callout-summary: var(--neutral-aqua_x);
|
||||
--callout-info: var(--neutral-blue_x);
|
||||
--callout-todo: var(--neutral-blue_x);
|
||||
--callout-important: var(--neutral-aqua_x);
|
||||
--callout-tip: var(--neutral-aqua_x);
|
||||
--callout-success: var(--neutral-green_x);
|
||||
--callout-question: var(--neutral-yellow_x);
|
||||
--callout-warning: var(--neutral-orange_x);
|
||||
--callout-fail: var(--neutral-red_x);
|
||||
--callout-error: var(--neutral-red_x);
|
||||
--callout-bug: var(--neutral-red_x);
|
||||
--callout-example: var(--neutral-purple_x);
|
||||
--callout-quote: var(--gray_x);
|
||||
}
|
||||
|
||||
.callout {
|
||||
background-color: rgba(var(--callout-color), 0.2);
|
||||
}
|
||||
Vendored
+28
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"types": {
|
||||
"aliases": "aliases",
|
||||
"cssclasses": "multitext",
|
||||
"tags": "tags",
|
||||
"TQ_explain": "checkbox",
|
||||
"TQ_extra_instructions": "text",
|
||||
"TQ_short_mode": "checkbox",
|
||||
"TQ_show_backlink": "checkbox",
|
||||
"TQ_show_cancelled_date": "checkbox",
|
||||
"TQ_show_created_date": "checkbox",
|
||||
"TQ_show_depends_on": "checkbox",
|
||||
"TQ_show_done_date": "checkbox",
|
||||
"TQ_show_due_date": "checkbox",
|
||||
"TQ_show_edit_button": "checkbox",
|
||||
"TQ_show_id": "checkbox",
|
||||
"TQ_show_on_completion": "checkbox",
|
||||
"TQ_show_postpone_button": "checkbox",
|
||||
"TQ_show_priority": "checkbox",
|
||||
"TQ_show_recurrence_rule": "checkbox",
|
||||
"TQ_show_scheduled_date": "checkbox",
|
||||
"TQ_show_start_date": "checkbox",
|
||||
"TQ_show_tags": "checkbox",
|
||||
"TQ_show_task_count": "checkbox",
|
||||
"TQ_show_tree": "checkbox",
|
||||
"TQ_show_urgency": "checkbox"
|
||||
}
|
||||
}
|
||||
Vendored
+44
-69
@@ -1,70 +1,27 @@
|
||||
{
|
||||
"main": {
|
||||
"id": "b92957235b91b843",
|
||||
"id": "5324373015726ba8",
|
||||
"type": "split",
|
||||
"children": [
|
||||
{
|
||||
"id": "1073c7b6a13212b0",
|
||||
"id": "4509724f8bf84da7",
|
||||
"type": "tabs",
|
||||
"children": [
|
||||
{
|
||||
"id": "75ad31924c36980c",
|
||||
"id": "e7a7b303c61786dc",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "markdown",
|
||||
"state": {
|
||||
"file": "traditional-estimating-methods.md",
|
||||
"file": "README.md",
|
||||
"mode": "source",
|
||||
"source": false
|
||||
"source": true
|
||||
},
|
||||
"icon": "lucide-file",
|
||||
"title": "traditional-estimating-methods"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "ad733ffda12ffada",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "markdown",
|
||||
"state": {
|
||||
"file": "purpose-of-estimating.md",
|
||||
"mode": "source",
|
||||
"source": false
|
||||
},
|
||||
"icon": "lucide-file",
|
||||
"title": "purpose-of-estimating"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "099529ff983387d7",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "markdown",
|
||||
"state": {
|
||||
"file": "software-based-estimating.md",
|
||||
"mode": "source",
|
||||
"source": false
|
||||
},
|
||||
"icon": "lucide-file",
|
||||
"title": "software-based-estimating"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "737e6543fa4b8437",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "markdown",
|
||||
"state": {
|
||||
"file": "traditional-estimating-methods.md",
|
||||
"mode": "source",
|
||||
"source": false
|
||||
},
|
||||
"icon": "lucide-file",
|
||||
"title": "traditional-estimating-methods"
|
||||
"title": "README"
|
||||
}
|
||||
}
|
||||
],
|
||||
"currentTab": 1
|
||||
]
|
||||
}
|
||||
],
|
||||
"direction": "vertical"
|
||||
@@ -193,46 +150,64 @@
|
||||
"icon": "lucide-list",
|
||||
"title": "Outline of assembly-philosophy"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "c95dd7731b2c47b7",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "git-view",
|
||||
"state": {},
|
||||
"icon": "git-pull-request",
|
||||
"title": "Source Control"
|
||||
}
|
||||
}
|
||||
]
|
||||
],
|
||||
"currentTab": 4
|
||||
}
|
||||
],
|
||||
"direction": "horizontal",
|
||||
"width": 300,
|
||||
"collapsed": true
|
||||
"width": 300
|
||||
},
|
||||
"left-ribbon": {
|
||||
"hiddenItems": {
|
||||
"obsidian-git:Open Git source control": false,
|
||||
"homepage:Open homepage": false,
|
||||
"switcher:Open quick switcher": false,
|
||||
"graph:Open graph view": false,
|
||||
"canvas:Create new canvas": false,
|
||||
"daily-notes:Open today's daily note": false,
|
||||
"templates:Insert template": false,
|
||||
"command-palette:Open command palette": false
|
||||
"command-palette:Open command palette": false,
|
||||
"table-editor-obsidian:Advanced Tables Toolbar": false
|
||||
}
|
||||
},
|
||||
"active": "ad733ffda12ffada",
|
||||
"active": "e7a7b303c61786dc",
|
||||
"lastOpenFiles": [
|
||||
"README.md",
|
||||
"2025-07-01.md",
|
||||
"risk-oriented-estimating.md",
|
||||
"risk.md",
|
||||
"construction-estimating-software.md",
|
||||
"gut-feel.md",
|
||||
"uncertainty.md",
|
||||
"traditional-estimating-methods.md",
|
||||
"this-notebook.md",
|
||||
"supertopics.md",
|
||||
"strategy.md",
|
||||
"software-based-estimating.md",
|
||||
"separation-of-concerns.md",
|
||||
"risk-registers.md",
|
||||
"expected-value-of-perfect-information.md",
|
||||
"estimating-ergonomics.md",
|
||||
"estimating-culture.md",
|
||||
"purpose-of-estimating.md",
|
||||
"estimating-philosophy.md",
|
||||
"project-management-tm.md",
|
||||
"possible-automation.md",
|
||||
"portable-tools.md",
|
||||
"necessary-automation.md",
|
||||
"open-problems.md",
|
||||
"me.md",
|
||||
"gold-plating.md",
|
||||
"estimating-philosophy.md",
|
||||
"design-patterns.md",
|
||||
"construction-estimating-software.md",
|
||||
"assembly-philosophy.md",
|
||||
"assemblies.md",
|
||||
"software-based-estimating.md",
|
||||
"risk.md",
|
||||
"uncertainty.md",
|
||||
"estimating-culture.md",
|
||||
"estimating-dimensionality.md",
|
||||
"estimating-ergonomics.md",
|
||||
"estimating-misconceptions.md",
|
||||
"pmi.org.md"
|
||||
"estimating-misconceptions.md"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
# 2025-07-01
|
||||
|
||||
I take increasing issue with the common model
|
||||
of measuring operational success by negative overrun,
|
||||
as it is incompatible with the preferable target of estimate certainty.
|
||||
@@ -1 +1,22 @@
|
||||
# zmVault
|
||||
|
||||
This obsidian vault collects my thoughts on my most developed [[supertopics|supertopic]],
|
||||
which I would call "[[construction-estimating]]",
|
||||
but that includes fields far more disparate
|
||||
than my peers would traditionally consider relevant.
|
||||
|
||||
## Purpose
|
||||
|
||||
I want to be involved construction estimating for the rest of my working life.
|
||||
Current discourse on the subject is self-similar and sanitized.
|
||||
I'd like to be known as an innovator in [[estimating-philosophy]],
|
||||
and for solving some of its [[open-problems]].
|
||||
|
||||
## Contents
|
||||
|
||||
Despite how alien my approach may seem to most estimators,
|
||||
I believe its all merely extrapolation on the conventional practice.
|
||||
|
||||
* Industry Knowledge
|
||||
* Statistics
|
||||
* [[strategy]]
|
||||
|
||||
+24
-24
@@ -1,25 +1,25 @@
|
||||
---
|
||||
tags:
|
||||
- estimating
|
||||
- software
|
||||
---
|
||||
# AI in Estimating
|
||||
|
||||
Most estimators are already pigeon holed into poor SaaS like Accubid and the rest already,
|
||||
but the need to increase efficiency with AI will be the nail in the coffin.
|
||||
The myth that "full package" estimating software is most efficient
|
||||
will only be exacerbated by the inclusion of AI features
|
||||
that ought to have been available for decades already.
|
||||
|
||||
It has unfortunately been the case that construction estimators have, by and large,
|
||||
been unable to recognize the bushels of low hanging fruit for automation in our field for decades.
|
||||
Now that AI grifters have run out of other industries to sell to,
|
||||
we are first introduced to supposedly revolutionary concepts like:
|
||||
|
||||
* automatically reading and setting the scale of a drawing
|
||||
|
||||
Estimating specific AI features, being unpredictable literally by design,
|
||||
will inevitably be inconsistent in reliability between implementations;
|
||||
a glaring issue since they will be provided by apps with no external compatibility.
|
||||
|
||||
---
|
||||
tags:
|
||||
- estimating
|
||||
- software
|
||||
---
|
||||
# AI in Estimating
|
||||
|
||||
Most estimators are already pigeon holed into poor SaaS like Accubid and the rest already,
|
||||
but the need to increase efficiency with AI will be the nail in the coffin.
|
||||
The myth that "full package" estimating software is most efficient
|
||||
will only be exacerbated by the inclusion of AI features
|
||||
that ought to have been available for decades already.
|
||||
|
||||
It has unfortunately been the case that construction estimators have, by and large,
|
||||
been unable to recognize the bushels of low hanging fruit for automation in our field for decades.
|
||||
Now that AI grifters have run out of other industries to sell to,
|
||||
we are first introduced to supposedly revolutionary concepts like:
|
||||
|
||||
* automatically reading and setting the scale of a drawing
|
||||
|
||||
Estimating specific AI features, being unpredictable literally by design,
|
||||
will inevitably be inconsistent in reliability between implementations;
|
||||
a glaring issue since they will be provided by apps with no external compatibility.
|
||||
|
||||
Most of these features are far better implemented with traditional computing.
|
||||
@@ -31,8 +31,3 @@ possible with several tools an estimator should be familiar with:
|
||||
* `XLOOKUP()` - Excel
|
||||
* `Table.Join` - MS Power Query
|
||||
* `JOIN` - SQL
|
||||
|
||||
## Abstraction
|
||||
|
||||
An abstraction is a model that intentionally ignores details
|
||||
that are irrelevant to problem it is used to solve
|
||||
|
||||
@@ -15,6 +15,10 @@ More generally, it is minimizing the effort required for measurement.
|
||||
|
||||
## Abstract Assemblies
|
||||
|
||||
> [!info] Abstractions
|
||||
> An abstraction is a model that intentionally ignores details
|
||||
> that are irrelevant to problem it is used to solve
|
||||
|
||||
As useful a concept as assemblies are,
|
||||
the same concept can be applied as a test of potential efficiency gains
|
||||
in areas other than material takeoff.
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
# Construction Estimating
|
||||
|
||||
Construction estimating is a subset of cost estimation.
|
||||
@@ -5,7 +5,7 @@ tags:
|
||||
---
|
||||
# Estimating Culture
|
||||
|
||||
The nature of relationships between estimators
|
||||
The nature of relationships between [[construction-estimating|estimators]]
|
||||
and between estimators and adjacent professions,
|
||||
is a difficult concept to navigate
|
||||
for an estimator who is purely interested in improving their skills.
|
||||
@@ -35,6 +35,11 @@ With intelligent work breakdown, jobs can be cleanly segmented for work in paral
|
||||
Estimators working in the same room can be an invaluable resource
|
||||
for brainstorming ideas and beneficial conversation.
|
||||
|
||||
It is the failure of [[estimating-culture]] and of [[construction-estimating-software]]
|
||||
that so many estimators are wary of collaboration
|
||||
|
||||
The value of a second set of eyes can not be overstated.
|
||||
|
||||
It can be impossible for one estimator to parse the work of another;
|
||||
the strategies enjoyed by some may seem counterintuitive to others.
|
||||
It is not practical to mandate a single methodology
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
# Estimating Detail
|
||||
|
||||
In [[construction-estimating]], the acceptable level of detail of an estimate is a contentious subject.
|
||||
What's worse, estimators often disagree on what makes an estimate more detailed than another.
|
||||
With our [[risk-oriented-estimating]] approach,
|
||||
detail is essentially the inverse of epistemic [[uncertainty]].
|
||||
|
||||
That said, the correct answer is this.
|
||||
|
||||
> As detailed as possible, given required turnaround and available estimating resources.
|
||||
|
||||
An estimate's detail is irrelevant to its quality.
|
||||
A less detailed estimate is a more [[risk]]y bid,
|
||||
but **it is not the role of the estimator to determine acceptable risk**.
|
||||
|
||||
## Experiment
|
||||
|
||||
Perform a system takeoff (lighting for example) in exacting detail,
|
||||
the maximum amount you would ever consider using,
|
||||
and measure the time required to do so,
|
||||
as well as the cost of the scope.
|
||||
|
||||
Have another estimator takeoff the same scope using the proposed time saving strategy.
|
||||
|
||||
Repeat the test on additional projects.
|
||||
|
||||
Treat the detailed takeoff as the true value
|
||||
and find the error of the time saving strategy.
|
||||
|
||||
$\frac{d\sigma}{dt}$
|
||||
|
||||
### Expectation
|
||||
|
||||
Time-saving strategies will overestimate or underestimate detailed takeoff
|
||||
depending on the assumptions used in their creation.
|
||||
@@ -4,7 +4,7 @@ tags:
|
||||
---
|
||||
# Estimating Dimensionality
|
||||
|
||||
Lorem ipsum
|
||||
I think of most things as existing in n-dimensional space.
|
||||
|
||||
## Generic
|
||||
|
||||
|
||||
@@ -5,6 +5,9 @@ tags:
|
||||
---
|
||||
# Estimating Ergonomics
|
||||
|
||||
[[construction-estimating-software]] consistently fails to innovate
|
||||
on the stale patterns developed for marginally similar applications decades ago.
|
||||
|
||||
## More Optimal Patterns
|
||||
|
||||
It must be noted that, while these optimizations are better patterns than those of traditional applications,
|
||||
@@ -76,8 +79,7 @@ that, in a lot of cases, don't even need to exist.
|
||||
the language exists purely to roughly communicate ideas
|
||||
that are intuitive in even a crude sketch.
|
||||
|
||||
Estimating is a perfect use case
|
||||
for a purely stylus and handwriting recognition based workflow,
|
||||
Estimating is a perfect use case for a purely stylus and handwriting recognition based workflow,
|
||||
probably more perfect than whatever Ink & Switch is using.
|
||||
|
||||
### Spatial Indexing
|
||||
|
||||
@@ -8,12 +8,6 @@ Construction estimating is a highly opinionated field, and I am no exception.
|
||||
This page collects my opinions on topics related to the subject,
|
||||
usually as a response to those held by my peers.
|
||||
|
||||
## The Purpose of Construction Cost Estimation
|
||||
|
||||
The purpose of construction cost estimation in practice
|
||||
is not to determine the cost of the scope,
|
||||
which would take far longer than allotted for bid,
|
||||
|
||||
## Estimating Tools
|
||||
|
||||
I am likely one of likely very few estimators with the necessary background
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
# Expected Value of Perfect Information
|
||||
|
||||
In [[decision-theory]], the expected value of perfect information (EVPI)
|
||||
is the price that one would be willing to pay
|
||||
in order to gain access to [[perfect-information]]
|
||||
|
||||
This concept provides the basis for the solution of one or more [[open-problems]].
|
||||
To reduce [[risk]] in [[construction-estimating]],
|
||||
an organization pays in estimator hours.
|
||||
These hours have a direct cost in salary and benefits,
|
||||
however the greater cost is the opportunity cost
|
||||
of tying up an estimator who could otherwise be starting a new project.
|
||||
+3
-2
@@ -4,10 +4,11 @@ tags:
|
||||
---
|
||||
# Gold Plating
|
||||
|
||||
Gold plating, also overengineering, is the frustratingly common design practice
|
||||
Gold plating, also "overengineering", is the frustratingly common design practice
|
||||
of arbitrarily requiring components or methods far more stringent than typical.
|
||||
|
||||
Such cases quickly reveal every error of assumption made by the estimator.
|
||||
In [[construction-estimating]],
|
||||
such cases quickly reveal every error of assumption made by the estimator.
|
||||
|
||||
## Example: Aluminum Feeders ILO Copper
|
||||
|
||||
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
# Gut Feel
|
||||
|
||||
Gut feel is the sensation one acquires with subject experience
|
||||
that answers questions that the host can not.
|
||||
|
||||
The subconscious can recall information the conscious mind has forgotten.
|
||||
The conscious mind understands concepts abstractly
|
||||
|
||||
Gut feel is valuable, but is often given precedent over logic.
|
||||
It is not special, and is subject to the same follies as conventional logic.
|
||||
@@ -22,6 +22,12 @@ I see the same signs in other people and it reminds me of my own weakness.
|
||||
I get frustrated at others for not making efforts that I don't make myself.
|
||||
I don't use this notebook as often or as well as I should.
|
||||
|
||||
> [!note]
|
||||
> I give myself a hard time here,
|
||||
> but my "failure" to make lasting mental connections
|
||||
> is relative to my perception of my ability,
|
||||
> not to observation of others'.
|
||||
|
||||
## My Productivity
|
||||
|
||||
In as few words as possible,
|
||||
@@ -48,9 +54,3 @@ around 90% progress, where I'm able to visualize the end result.
|
||||
I find it near impossible to do work I'm not curious of
|
||||
until my subconscious determines that we have exactly enough time
|
||||
to finish it before the deadline.
|
||||
|
||||
## My Dreams
|
||||
|
||||
I want to be involved construction estimating for the rest of my working life.
|
||||
Current discourse is self-similar and sanitized.
|
||||
I'd like to be known as an innovator in [[estimating-philosophy]].
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
# Open Problems
|
||||
|
||||
[[construction-estimating]] being a nascent and unstudied field,
|
||||
there are several fundamental questions of the craft
|
||||
without satisfying answers.
|
||||
|
||||
* How detailed should an estimate be? How can you know?
|
||||
+8
-1
@@ -11,4 +11,11 @@ tags:
|
||||
* PortableGit
|
||||
* VSCode
|
||||
* FlaUInspect
|
||||
* gnuplot
|
||||
* gnuplot
|
||||
|
||||
Ruby may be possible to make portable,
|
||||
which may make these possible as well:
|
||||
|
||||
* Asciidoctor
|
||||
* Antora
|
||||
* taskjuggler
|
||||
@@ -28,6 +28,12 @@ I would posit that, despite its cross-discipline language,
|
||||
Project Management™ practice is only _universally_ applicable
|
||||
to _software_ project management.
|
||||
|
||||
> [!aside]
|
||||
> [[the-failure-of-risk-management]] humorously points out
|
||||
> that PMI may not be in touch with _any_ part of its audience
|
||||
> if they are able to release a publication "3 years overdue"
|
||||
> without embarrassment (p. 103)
|
||||
|
||||
That's not to say that it should be overlooked in construction applications.
|
||||
There's no better source for solutions to problems that our industries share.
|
||||
Specialized practices like [[lean-construction]] are decades behind PMI.
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
# The Purpose of Estimating
|
||||
|
||||
## The Purpose of Construction Cost Estimation
|
||||
|
||||
The purpose of [[construction-estimating]] in practice
|
||||
is not to determine the cost of the scope,
|
||||
which would take far longer than allotted for bid,
|
||||
|
||||
## For the Solicitor
|
||||
|
||||
* Determine feasibility of functional requirements
|
||||
@@ -14,4 +20,21 @@ These owners can be expected to decline every [[value-engineering]] option offer
|
||||
|
||||
## For the Contractor
|
||||
|
||||
* Fill backlog
|
||||
* Make profit to meet growth target
|
||||
* Secure work for current and projected employees (fill backlog)
|
||||
|
||||
### The Role of the Estimator
|
||||
|
||||
The role of the estimator is to model the potential cost distribution of the project,
|
||||
taking actions to reduce the model's uncertainty.
|
||||
The progress of the estimator can be measured by $\frac{d\sigma}{dt}$
|
||||
|
||||
### The Role of the Executive
|
||||
|
||||
The role of the executive is to allocate profit and contingency
|
||||
according to the potential cost distribution
|
||||
weighted by the organizational desire to win the project.
|
||||
|
||||
$$
|
||||
{E}[P]=
|
||||
$$
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
# Risk Oriented Estimating
|
||||
|
||||
Risk-Oriented Estimating (ROE), is a methodology for [[construction-estimating]]
|
||||
which prioritizes estimating tasks by their contribution to cost certainty,
|
||||
and determines the appropriate level of [[estimating-detail]]
|
||||
given [[risk#Risk Tolerance]]
|
||||
|
||||
ROE leans heavily on [[expected-value-of-perfect-information]],
|
||||
which challenges the natural tendency to shy from uncertainty
|
||||
with the reality of the cost of certainty.
|
||||
|
||||
ROE does not endorse common shortcuts which round up to "cover" uncertainty,
|
||||
as these ultimately _increase_ risk by inflating the apparent project cost,
|
||||
increasing the probability of loss to a competitor.
|
||||
|
||||
Bid risk may fit a [Taleb distribution](https://en.wikipedia.org/wiki/Taleb_distribution).
|
||||
|
||||
Actuarial Science
|
||||
+7
-7
@@ -1,8 +1,8 @@
|
||||
---
|
||||
tags:
|
||||
- project-management
|
||||
---
|
||||
# Risk Registers
|
||||
|
||||
Risk Registers are a standard method of documenting [[risk]].
|
||||
---
|
||||
tags:
|
||||
- project-management
|
||||
---
|
||||
# Risk Registers
|
||||
|
||||
Risk Registers are a standard method of documenting [[risk]].
|
||||
They are a hallmark of [[project-management-tm]] practice.
|
||||
@@ -9,7 +9,8 @@ tags:
|
||||
Risk, in common parlance, is the chance that something "bad" will happen.
|
||||
As such, it is generally understood as a binary, win/loss relationship.
|
||||
|
||||
This model of [[discrete-probability]] is ubiquitous of [[project-management-tm|Project Management™]],
|
||||
This model of [[discrete-probability]] is ubiquitous of
|
||||
[[project-management-tm|Project Management™]],
|
||||
and is the sort assumed when using [[risk-registers]].
|
||||
|
||||
> This scope of work presents a 1 in 10 chance of significant delay.
|
||||
@@ -35,51 +36,24 @@ in the most likely case of each axis of uncertainty.
|
||||
"Escalation" means projecting recent pricing to a later date of purchase
|
||||
based on anticipated market conditions.
|
||||
|
||||
### The Problem
|
||||
|
||||
An incongruity exists between estimators and management.
|
||||
Estimators know that estimation isn't even close to 100% accurate,
|
||||
however for management to admit this would require them to admit to executives
|
||||
that they allowed the bid despite the potential that it would not return the expected margin.
|
||||
|
||||
This is an obviously immature mindset.
|
||||
More competent organizations would attempt to quantify this potential as risk,
|
||||
however words like "risk" and "assumption" are upsetting to management
|
||||
who would maintain that a "good" estimate has no risk or assumptions,
|
||||
so instead of quantifying risk we use qualitative queries and expressions.
|
||||
The usual call-and-response looks something like this:
|
||||
|
||||
> "Are you confident in this price?"
|
||||
> "Yes, I feel good about it."
|
||||
|
||||
The reality of estimation is that it involves approximations, assumptions, and judgment under uncertainty.
|
||||
Incomplete design information, market volatility, and unforeseen site conditions inherently affect accuracy.
|
||||
|
||||
In contrast, management often expect deterministic results,
|
||||
treating estimates as precise forecasts rather than probabilistic assessments.
|
||||
This expectation can stem from a lack of understanding about the estimation process
|
||||
or a desire to simplify communication with higher-level executives.
|
||||
|
||||
The terms "risk" and "assumption" while common in mature parlance,
|
||||
require acknowledgement of [[uncertainty]], a threatening concept
|
||||
when personal accountability is ignorantly placed above organizational responsibility.
|
||||
|
||||
Assuming a manager was interested in preserving risk analysis details,
|
||||
frameworks for presenting job details usually lack the detail required to do so,
|
||||
and are sometimes even incompatible with the concept of multiple possible prices due to optional scope.
|
||||
|
||||
## ISO 31000
|
||||
|
||||
ISO 31000 defines risk as the "effect of [[uncertainty]] on objectives"
|
||||
therefore referring to positive consequences of uncertainty,
|
||||
as well as negative ones.
|
||||
|
||||
The standard gives a list on how to deal with risk:
|
||||
|
||||
> [!aside] ISO 31000
|
||||
> ISO 31000 defines risk as the "effect of [[uncertainty]] on objectives"
|
||||
> therefore referring to positive consequences of uncertainty, as well as negative ones.
|
||||
>
|
||||
> The standard gives a list on how to deal with risk:
|
||||
>
|
||||
> 1. Avoiding the risk by deciding not to start or continue with the activity that gives rise to the risk
|
||||
> 2. Accepting or increasing the risk in order to pursue an opportunity
|
||||
> 3. Removing the risk source
|
||||
> 4. Changing the likelihood
|
||||
> 5. Changing the consequences
|
||||
> 6. Sharing the risk with another party or parties (including contracts and risk financing)
|
||||
> 7. Retaining the risk by informed decision
|
||||
> 7. Retaining the risk by informed decision
|
||||
|
||||
## Risk Tolerance
|
||||
|
||||
Determining risk tolerance is a task usually appropriated by executives,
|
||||
often based on [[gut-feel]],
|
||||
but that is better determined mathematically.
|
||||
|
||||
[Risk of ruin](https://en.wikipedia.org/wiki/Risk_of_ruin)
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
# Separation of Concerns
|
||||
|
||||
Separation of concerns is a design philosophy
|
||||
of eliminating unnecessary process coupling,
|
||||
or in other words preferring specialization.
|
||||
It is traditionally understood as a principle strictly of _software_ design,
|
||||
however its applications are universal.
|
||||
|
||||
## As Process Optimization
|
||||
|
||||
Suppose a small company has a single "administrative assistant"
|
||||
whose main functions include:
|
||||
|
||||
1. writing the company newsletter, and
|
||||
2. onboarding new hires.
|
||||
|
||||
Suppose this company doubles in size
|
||||
and these tasks can no longer be fulfilled by one employee.
|
||||
Separation of Concerns dictates that the role should be split by function.
|
||||
@@ -1,35 +1,35 @@
|
||||
---
|
||||
tags:
|
||||
- estimating
|
||||
- software
|
||||
---
|
||||
# Software Based Estimating
|
||||
|
||||
## Software Based Estimating vs Estimating Software
|
||||
|
||||
This document describes the philosophy of software based estimating as a concept,
|
||||
independent of any specific example of [[construction-estimating-software]]
|
||||
|
||||
## Software Based Estimating vs Manual
|
||||
|
||||
Most estimating manuals treat "software based estimating" as an afterthought,
|
||||
when in practice there's no meaningful difference in practice from manual.
|
||||
|
||||
* Manual estimation is best done in terms of [[assemblies]] anyway.
|
||||
* On-screen takeoff just eliminates a single manual process.
|
||||
* Any estimator trained on Accubid could do the same by hand, the methodology is quite transparent.
|
||||
* At what point in Excel automation does manual estimation become software based?
|
||||
|
||||
There is no place for truly manual estimation (pencil and paper)
|
||||
with the availability of better options,
|
||||
even to teach the basics of the trade.
|
||||
|
||||
* Spreadsheet software is older than personal computers (LANPAR, 1969; VisiCalc, 1979)
|
||||
* Dedicated estimating software has been available longer than most estimators have been in the field. (McCormick, 1979?)
|
||||
|
||||
I don't generally accept that dedicated estimating software
|
||||
is strictly superior to spreadsheets (see [[estimating-philosophy]]),
|
||||
but it usually is for less technical estimators.
|
||||
|
||||
Manual estimation invites inaccuracy and inconsistency,
|
||||
and prohibits collaboration and flexibility.
|
||||
---
|
||||
tags:
|
||||
- estimating
|
||||
- software
|
||||
---
|
||||
# Software Based Estimating
|
||||
|
||||
## Software Based Estimating vs Estimating Software
|
||||
|
||||
This document describes the philosophy of software based estimating as a concept,
|
||||
independent of any specific example of [[construction-estimating-software]]
|
||||
|
||||
## Software Based Estimating vs Manual
|
||||
|
||||
Most estimating manuals treat "software based estimating" as an afterthought,
|
||||
when in practice there's no meaningful difference in practice from manual.
|
||||
|
||||
* Manual estimation is best done in terms of [[assemblies]] anyway.
|
||||
* On-screen takeoff just eliminates a single manual process.
|
||||
* Any estimator trained on Accubid could do the same by hand, the methodology is quite transparent.
|
||||
* At what point in Excel automation does manual estimation become software based?
|
||||
|
||||
There is no place for truly manual estimation (pencil and paper)
|
||||
with the availability of better options,
|
||||
even to teach the basics of the trade.
|
||||
|
||||
* Spreadsheet software is older than personal computers (LANPAR, 1969; VisiCalc, 1979)
|
||||
* Dedicated estimating software has been available longer than most estimators have been in the field. (McCormick, 1979?)
|
||||
|
||||
I don't generally accept that dedicated estimating software
|
||||
is strictly superior to spreadsheets (see [[estimating-philosophy]]),
|
||||
but it usually is for less technical estimators.
|
||||
|
||||
Manual estimation invites inaccuracy and inconsistency,
|
||||
and prohibits collaboration and flexibility.
|
||||
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
# Strategy
|
||||
|
||||
The field of strategy is concerned with the optimal solutions of problematic scenarios.
|
||||
|
||||
## Decision Theory
|
||||
|
||||
Decision theory concerns
|
||||
|
||||
~~internal problems~~
|
||||
~~no competition~~
|
||||
~~internal optimization~~
|
||||
|
||||
## Game Theory
|
||||
|
||||
Game theory concerns decisions made in competition with other intelligent actors.
|
||||
|
||||
Predictions of competitor behavior in bids and market movements
|
||||
are made with a game-theoretic lens.
|
||||
|
||||
### Auction Theory
|
||||
|
||||
Auction theory is a subset of game theory
|
||||
that specifically addresses the
|
||||
@@ -0,0 +1,3 @@
|
||||
# Supertopics
|
||||
|
||||
Supertopics are a concept I use to visualize and categorize my knowledge and interests.
|
||||
+45
-45
@@ -1,46 +1,46 @@
|
||||
---
|
||||
tags:
|
||||
|
||||
---
|
||||
# This Notebook
|
||||
|
||||
#meta
|
||||
|
||||
This journal is for [[me|my]] rough ideas that I'm likely to change my opinion on
|
||||
as my understanding of them develops.
|
||||
|
||||
It's my intent that any outside sources used here will be properly cited,
|
||||
and that work can be assumed to be my own unless otherwise stated.
|
||||
|
||||
This is not an appropriate place for definition lists, tables,
|
||||
or other resources provided without context or analysis.
|
||||
|
||||
## Purpose
|
||||
|
||||
* Compensate for my poor memory
|
||||
* Make my achievements in understanding more "real"
|
||||
|
||||
## Tone
|
||||
|
||||
I write as if someone else will read these notes.
|
||||
I find this beneficial for my current and future selves.
|
||||
Explaining concepts completely
|
||||
forces me to understand them completely
|
||||
and to provide context I may be tempted to omit
|
||||
because it is obvious at the time of writing.
|
||||
When revisiting notes its then much easier to pick up where I left off.
|
||||
|
||||
I often use an arrogant tone
|
||||
which helps me stop fiddling over specific wording and just write;
|
||||
somewhat similar to the technique of pretending you hate your audience
|
||||
to sound more confident.
|
||||
|
||||
## Conventions
|
||||
|
||||
### Semantic Line Breaks
|
||||
|
||||
I didn't like them at first,
|
||||
but this notebook uses [semantic line breaks](https://sembr.org/)
|
||||
for text wrapping.
|
||||
|
||||
---
|
||||
tags:
|
||||
|
||||
---
|
||||
# This Notebook
|
||||
|
||||
#meta
|
||||
|
||||
This journal is for [[me|my]] rough ideas that I'm likely to change my opinion on
|
||||
as my understanding of them develops.
|
||||
|
||||
It's my intent that any outside sources used here will be properly cited,
|
||||
and that work can be assumed to be my own unless otherwise stated.
|
||||
|
||||
This is not an appropriate place for definition lists, tables,
|
||||
or other resources provided without context or analysis.
|
||||
|
||||
## Purpose
|
||||
|
||||
* Compensate for my poor memory
|
||||
* Make my achievements in understanding more "real"
|
||||
|
||||
## Tone
|
||||
|
||||
I write as if someone else will read these notes.
|
||||
I find this beneficial for my current and future selves.
|
||||
Explaining concepts completely
|
||||
forces me to understand them completely
|
||||
and to provide context I may be tempted to omit
|
||||
because it is obvious at the time of writing.
|
||||
When revisiting notes its then much easier to pick up where I left off.
|
||||
|
||||
I often use an arrogant tone
|
||||
which helps me stop fiddling over specific wording and just write;
|
||||
somewhat similar to the technique of pretending you hate your audience
|
||||
to sound more confident.
|
||||
|
||||
## Conventions
|
||||
|
||||
### Semantic Line Breaks
|
||||
|
||||
I didn't like them at first,
|
||||
but this notebook uses [semantic line breaks](https://sembr.org/)
|
||||
for text wrapping.
|
||||
|
||||
I shoot for less than 90 columns.
|
||||
@@ -2,8 +2,8 @@
|
||||
|
||||
Also "single-point estimation" as opposed to the standard three-point.
|
||||
|
||||
"Traditional estimating methods" as referenced frequently in this notebook
|
||||
are those
|
||||
"Traditional estimating methods" as referenced frequently in [[this notebook]]
|
||||
are those [[construction-estimating]] methods that produce:
|
||||
|
||||
* an exhaustive and specific bill of materials
|
||||
* a single definitive final price for each bid item
|
||||
* an exhaustive and specific bill of material
|
||||
* a single definitive final price for each bid item
|
||||
|
||||
+9
-9
@@ -8,17 +8,17 @@ The term "uncertainty" refers to the possibility of multiple outcomes.
|
||||
|
||||
## Aleatory Uncertainty
|
||||
|
||||
Aleatory uncertainty is inherent randomness in data that can't be explained away.
|
||||
> [!info] Also Known As
|
||||
> * statistical uncertainty
|
||||
> * stochastic uncertainty
|
||||
> * random error
|
||||
|
||||
Also Known As:
|
||||
* statistical uncertainty
|
||||
* stochastic uncertainty
|
||||
* random error
|
||||
Aleatory uncertainty is inherent randomness in data that can't be explained away.
|
||||
|
||||
## Epistemic Uncertainty
|
||||
|
||||
Epistemic uncertainty is that which arises from a lack of knowledge.
|
||||
> [!info] Also Known As
|
||||
> * systematic uncertainty
|
||||
> * model uncertainty
|
||||
|
||||
Also Known As:
|
||||
* systematic uncertainty
|
||||
* model uncertainty
|
||||
Epistemic uncertainty is that which arises from a lack of knowledge.
|
||||
|
||||
Reference in New Issue
Block a user