Obsidian

Open tasks in Obsidian

filter by function ! task.isDone
path includes {{query.file.path}}
group by heading
sort by priority

https://help.obsidian.md/Editing+and+formatting/Properties
#idea #obsidian add a glossary
2025-10-10 Vault disappeared!! Resynched with cloud vesion
2024-11-21 So, realized that crostini does not have a trash folder. Send Obsidian deletion to vault trash
#tip Images in obsidian :
in terminal run the command base64 picture.png copy the output (it might be long!, thus you can use a program to copy in terminal, such as xclip or xbcopy(?))
in markdown file, type ![](data:image/png;base64, and then paste the base64 encoded image content, then close the parenthesis.

Installation

2026-03-02 reinstall after Powrwash

Download Debian version
double click on f .deb file installer starts
Appimage istructions mention Chromebook
https://help.obsidian.md/Getting+started/Download+and+install+Obsidian

log

2024-09-13 set up #Digital Garden following instruction

2024-09-13 Set up Obsidian Synch. I choose to let them manage encryption key

Attention

In Windows, the vault should not be on the desktop or in a folder that is saved by OneDrive

Plugins

Daily notes

https://obsidian.rocks/supercharge-your-daily-notes-in-obsidian/

Dataview

https://blacksmithgu.github.io/obsidian-dataview/

Tasks

Tasks
User guide

https://obsidian.rocks/how-to-manage-tasks-in-obsidian/

Zotero Sync

Zotero sync creates a files in the References folder
The filenaname is includes data.title This generates errors in dowloading files in the Android app

code

Exploring the data structure

insert console.log(data) then CTRL-SHIFT-I to open console
the Zotero data structure https://gist.githubusercontent.com/pchemguy/19fa69fb4e74ef0cca0026aa0dbf5f42/raw/e82b2367256246c5ae2db07bdc2cb595bd2e75e5/Zotero_MainDB_ERD.svg

The following only extracts attachmens

if (data.children) {
	const notes = data.children
n += '## Notes' +  '\n\n';
	notes.forEach(c => {
		n += c.itemType + ' -- ';
		n += c.title + '\n\n';
	});
}

2026-01-24 code for filename

added property 'Notetype : - ZoteroSync

let fp = '';
if (data.creators && data.creators.length > 0) {
fp += data.creators[0]?.lastName;
if (data.creators.length == 2) {
	fp += '+';
	fp += data.creators[1]?.lastName;
} else if (data.creators.length > 2) { // add a + if more than one author
	fp += '+';
} 


} else fp+= 'Anon' // for references with no valid author name 

// add a space after author
fp += ' ';

n += '\n\n **URL** ' + data.url; /* retrieve the iten URL */


if (data.abstractNote){
n+=  '\n\n' +  "## Abstract" + '\n\n' + data.abstractNote + '\n\n';
} 

n+= data.marker;  // make sure data marker is placed  at the end of the file

return n;

2026-01-23 Code for filename

let fp = '';
if (data.creators && data.creators.length > 0) {
fp += data.creators[0]?.lastName;
if (data.creators.length == 2) {
	fp += '+';
	fp += data.creators[1]?.lastName;
} else if (data.creators.length > 2) { // add a + if more than one author
	fp += '+';
} 

} else fp+= 'Anon'

if (data.date) {
	let year = new Date(data.date).getFullYear();
	fp += year.toString();
}

if (data.title)
return 'References/' + fp  + ' ' + data.title.replace(/[^A-Za-z0-9 ]+/g, "_"); // 2026-01-21 remove special chars except space
else return 'References/Notitle'

2026-01-21 Code to generate filename

let fp = '';
if (data.creators && data.creators.length > 0) {
fp += data.creators[0]?.lastName;
if (data.creators.length == 2) {
	fp += '+';
	fp += data.creators[1]?.lastName;
} else if (data.creators.length > 2) { // add a + if more than one author
	fp += '+';
}
if (data.date) {
	let year = new Date(data.date).getFullYear();
	fp += year.toString();note
}
return 'References/' + fp  + ' ' + 
data.title.replace(/[^A-Za-z0-9 ]+/g, "_"); // 2026-01-21 remove special chars except space

}

code to generate filename OLD

let fp = '';
if (data.creators && data.creators.length > 0) {
fp += data.creators[0]?.lastName;
if (data.creators.length == 2) {
	fp += '+';
	fp += data.creators[1]?.lastName;
} else if (data.creators.length > 2) {
	fp += '+';
}
if (data.date) {
	let year = new Date(data.date).getFullYear();
	fp += year.toString();
}
return 'References/' + fp + ' ' + data.title;
}

2026-01-26 code for note

// console.log(data)  // uncomment and ctrl shift i to explore the data in console
let n = '';
// generate properties

n += '---\n';
n += 'Notetype :\n  - ZoteroSync\n';
if (data.abstractNote){
n += 'Description: "' +  
      data.abstractNote.replace ("\n"," ") +
      '"\n';
} 
if (data.extra){
n += 'Extra: "' +  
      data.extra.replace ("\n"," ") +
      '"\n';
} 



if (data.tags){ // find tags

n += 'Tags:\n';
n += data.tags.map(t => {
    // remove spaces around hyphens and replace other spaces with underscores
    let formattedTag = t.tag.replace(/\s*-\s*/g, '-').replace(/\s+/g, '_');
       return '- "' + formattedTag + '"';
}).join('\n');
}

n+='\n---\n'
/* List the authors adding markdown to link to the note in vault*/
if (data.creators) {
	data.creators.forEach(author => {
	n += '[[People/' + author.lastName + ', ' + author.firstName + ']] '; 
	});
	n += '\n';


}

n += '# ' + data.title;


if (data.date) {
	let year = new Date(data.date).getFullYear();
	n += ' (' + year.toString() + ')';
}

n += '\n\n **URL** ' + data.url; /* retrieve the iten URL */


if (data.abstractNote){
n+=  '\n\n' +  "## Abstract" + '\n\n' + data.abstractNote + '\n\n';
} 


n += '\n\n';
if (data.children) {
	const notes = data.children.filter(
		c => c.itemType.toLowerCase() == 'note'
	)
n += '## Notes' +  '\n\n';
	notes.forEach(c => {
		n += c.note_markdown + '\n\n';
	});
}

n+= data.marker;  // make sure data marker is placed  at the end of the file

return n;

2026-01-23 code to generate note


// console.log(data)  // uncomment and ctrl shift i to explore the data in console
let n = '';
// generate properties

if (data.tags){ // find tags
n += '---\n';
n += 'Tags:\n';
n += data.tags.map(t => {
    // remove spaces around hyphens and replace other spaces with underscores
    let formattedTag = t.tag.replace(/\s*-\s*/g, '-').replace(/\s+/g, '_');
       return '- "' + formattedTag + '"';
}).join('\n');
}

n+='\n---\n'
/* List the authors adding markdown to link to the note in vault*/
if (data.creators) {
	data.creators.forEach(author => {
	n += '[[People/' + author.lastName + ', ' + author.firstName + ']] '; 
	});
	n += '\n';
}

n += '# ' + data.title;

if (data.date) {
	let year = new Date(data.date).getFullYear();
	n += ' (' + year.toString() + ')';
}

n += '\n\n **URL** ' + data.url; /* retrieve the iten URL */







if (data.abstractNote){
n+=  '\n\n' +  "## Abstract" + '\n\n' + data.abstractNote + '\n\n';
} 



n += '\n\n';
if (data.children) {
	const notes = data.children.filter(
		c => c.itemType.toLowerCase() == 'note'
	)
n += '## Notes' +  '\n\n';
	notes.forEach(c => {
		n += c.note_markdown + '\n\n';
	});
}

n+= data.marker;  // make sure data marker is placed  at the end of the file

return n;

Code to generate note 2026-01-22

correcly import tags There is still the problem tht the Z reference appears before the tags

let n = '';
// generate properties
n += '---\n';
n += 'Tags:\n';
n += data.tags.map(t => {
    // remove spaces around hyphens and replace other spaces with underscores
    let formattedTag = t.tag.replace(/\s*-\s*/g, '-').replace(/\s+/g, '_');
    return '- "' + formattedTag + '"';
}).join('\n');

n+='\n---\n'
/* List the authors adding markdown to link to the note in vault*/
if (data.creators) {
	data.creators.forEach(author => {
	n += '[[People/' + author.lastName + ', ' + author.firstName + ']] '; 
	});
	n += '\n';
}

n += '# ' + data.title;

if (data.date) {
	let year = new Date(data.date).getFullYear();
	n += ' (' + year.toString() + ')';
}

n += '\n\n **URL** ' + data.url; /* retrieve the iten URL */







if (data.abstractNote){
n+=  '\n\n' +  "## Abstract" + '\n\n' + data.abstractNote + '\n\n';
} 

n += '\n\n';
if (data.children) {
	const notes = data.children.filter(
		c => c.itemType.toLowerCase() == 'note'
	)
n += '## Notes' +  '\n\n';
	notes.forEach(c => {
		n += c.note_markdown + '\n\n';
	});
}
n+= data.marker;  // make sure data marker is placed  at the end of the file
return n;

javascript code to create the note 2025-10-14

Added code to capture tags from zotero
Obsidian does not allow for multi words tags

let n = '';
/* Add tags as Obsidian tags */
if (data.tags && data.tags.length > 0) {
    const zoteroTags = data.tags.map(tag => `#${tag.tag}`).join(' ');
    n += '\n  # tags: \n\n' + zoteroTags + '\n\n --- \n';
}


/* List the authors adding markdown to link to the note in vault*/
if (data.creators) {
	data.creators.forEach(author => {
	n += '[[People/' + author.lastName + ', ' + author.firstName + ']] '; 
	});
	n += '\n';
}

n += '# ' + data.title;

if (data.date) {
	let year = new Date(data.date).getFullYear();
	n += ' (' + year.toString() + ')';
}

n += '\n\n **URL** ' + data.url; /* retrieve the iten URL */
if (data.abstractNote){
n+=  '\n\n' +  "## Abstract" + '\n\n' + data.abstractNote + '\n\n';
} 



n += '\n\n';
if (data.children) {
	const notes = data.children.filter(
		c => c.itemType.toLowerCase() == 'note'
	)
n += '## Notes' +  '\n\n';
	notes.forEach(c => {
		n += c.note_markdown + '\n\n';
	});
}



return n;

javascript code to create the note OLD

let n = '';

/* List the authors adding markdown to link to the note in vault*/
if (data.creators) {
	data.creators.forEach(author => {
	n += '[[People/' + author.lastName + ', ' + author.firstName + ']] '; 
	});
	n += '\n';
}

n += '# ' + data.title;

if (data.date) {
	let year = new Date(data.date).getFullYear();
	n += ' (' + year.toString() + ')';
}

n += '\n\n **URL** ' + data.url; /* retrieve the iten URL */


if (data.abstractNote){
n+=  '\n\n' +  "## Abstract" + '\n\n' + data.abstractNote + '\n\n';
} 



n += '\n\n';
if (data.children) {
	const notes = data.children.filter(
		c => c.itemType.toLowerCase() == 'note'
	)
n += '## Notes' +  '\n\n';
	notes.forEach(c => {
		n += c.note_markdown + '\n\n';
	});
}
return n;

Zotero Import

The following code creates a filename based on the reference parameters

! format("YYYY")}} {%- else %} nd {%- endif -%}     {{title

Map view

https://www.youtube.com/watch?v=sZdmJdOZuSs
2024-10-01 installed

Tried and removed

2024-10-01 Tried, could not figure it our: should be used to select for a property and et tags
https://forum.obsidian.md/t/how-can-i-add-one-tag-to-muliple-notes-that-all-have-the-same-specific-property-at-once/70677

Timeline revamped

Markwhen

Web site publishing

#idea Options for web publishing
Obsidian Publish ( 96 $/year) or

Digital Garden

Web site | The Vercel back office |Digital Garden Docs | GitHub Account
2024-11-03 Removing Quantym physics , update is ok
2024-11-03 errors are listed in GitHb, point to Vercel https://vercel.com/robertos-projects-75b2d00c/rboninodg/BsEpG9W7SKGN71CQ3rmz5csQjtjo?filter=errors
##### [Published multiple files](https://github.com/rboninoParis/rboninodg/commit/0189e580e8b3e798d1a46a66650c45a74a0c4c7c) Active
Status: Failed to deploy (completed).
Failed to deploy toProductionby
By expanding error message I find
[11ty] 1. Having trouble rendering md template ./src/site/notes/01 Projects & activities/Writing/Note Scienza/Quantum Physics.md (via TemplateContentRenderError)

22:41:35.961[11ty] 2. Cannot read properties of undefined (reading 'docId') (via TypeError)
2024-11-03 pages do not seem to update on the web
2024-10-28 An error concerning production when publishing notes on digital garden appeared. Maybe should really move to Obsidian Publishing
A free alternative to Obsidian publish
https://dg-docs.ole.dev/getting-started/01-getting-started/ free
Set up Vercel and GitHub

Custom filter to hide part of a note from publishing

See https://dg-docs.ole.dev/getting-started/05-other-settings/ and https://www.reddit.com/r/ObsidianMD/comments/18wv6gm/digital_garden_plugin_custom_filters/

The actual custom filter is: :::hidden(.*\n)*?:::
I'll try explaining the regex, but its notoriously hard to grasp and read:
The ":::hidden" part matches the literal character
A dot, "." ,means match any single character.
Putting a star, "*", behind means match any single character 0 to infinite times.
The "\n" means any new line. So the ":::hidden(.\n)" part reads: Match any text starting with ":::hidden" and followed by a single line of 0-inifinite characters. Lastly, behind the (.\n) we put ? meaning: Match the previous group, (.\n), 0 to unlimited times as few times as possible. Then, lastly, ":::" just means the literal characters.
So all in all it means whatever is inside of ":::hidden" and ":::". You can change those to whatever you like. For example ":h", "h:" for faster typing.
Hope that helps, glad to hear you're enjoying the plugin!

Flowershow

Digital garden with flowershow https://flowershow.app/#features

Review and check your Statuses

About this file

This file was created by the Obsidian Tasks plugin (version 6.1.2) to help visualise the task statuses in this vault.

If you change the Tasks status settings, you can get an updated report by:

You can delete this file any time.

Status Settings

These are the status values in the Core and Custom statuses sections.

Status Symbol Next Status Symbol Status Name Status Type Problems (if any)
space x Todo TODO
x space Done DONE
/ x In Progress IN_PROGRESS
- space Cancelled CANCELLED

Loaded Settings

These are the settings actually used by Tasks.

flowchart LR

classDef TODO        stroke:#f33,stroke-width:3px;
classDef DONE        stroke:#0c0,stroke-width:3px;
classDef IN_PROGRESS stroke:#fa0,stroke-width:3px;
classDef CANCELLED   stroke:#ddd,stroke-width:3px;
classDef NON_TASK    stroke:#99e,stroke-width:3px;

1["'Todo'
[ ] -> [x]
(TODO)"]:::TODO 2["'Done'
[x] -> [ ]
(DONE)"]:::DONE 3["'In Progress'
[/] -> [x]
(IN_PROGRESS)"]:::IN_PROGRESS 4["'Cancelled'
[-] -> [ ]
(CANCELLED)"]:::CANCELLED 1 --> 2 2 --> 1 3 --> 2 4 --> 1 linkStyle default stroke:gray

Vault maintenance

Mass edit

https://forum.obsidian.md/t/mass-edit-properties-without-plugins/
https://forum.obsidian.md/t/mass-edit-properties-without-plugins/83666

Powered by Forestry.md