Compare commits
265 Commits
1403a6dfe7
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 79f7c42e5b | |||
| ef304b21dc | |||
| edeb72bcbe | |||
| 6d0b7f153a | |||
| 2309764522 | |||
| 7e78fe06db | |||
| ca065a132a | |||
| 658d877c57 | |||
| b311a961ab | |||
| b1732a2289 | |||
| 141ec5aa05 | |||
| f3db7cb65e | |||
| 6b54ee374e | |||
| b107936fd0 | |||
| f82ff03b1c | |||
| c0136c7502 | |||
| bc2cd3554b | |||
| f3a918746a | |||
| e1605f3589 | |||
| aa5431c280 | |||
| a1b1d7e090 | |||
| 364bd496b7 | |||
| e8b777fa24 | |||
| 44dc4dd088 | |||
| 5e941486dd | |||
| 5cfc9ebbc0 | |||
| bbc6c94924 | |||
| f923ca686e | |||
| 4f9560fc1e | |||
| 5b339c57bc | |||
| 4fcfafd7a9 | |||
| 7633b3daaa | |||
| 84397ea6ba | |||
| 501f88eeb6 | |||
| 28862c2d12 | |||
| 66359f847c | |||
| 574f050907 | |||
| 546605759f | |||
| ac48760742 | |||
| 9b83cb2f49 | |||
| be1e8c6696 | |||
| ac8a8603ff | |||
| a97da04177 | |||
| 5a3142e8f5 | |||
| 1e30897d8e | |||
| a133d63923 | |||
| 443d44abeb | |||
| 6c4f805501 | |||
| a3baf0086b | |||
| 34c132569d | |||
| 1fb65e616a | |||
| 8b3e6b2df4 | |||
| f24f7b5ed4 | |||
| 2d52c7dc36 | |||
| cc842ba3d3 | |||
| 73f60fe3c8 | |||
| 6d240b97d8 | |||
| 1fb7a95ac7 | |||
| 5624ec5523 | |||
| 41fa8e657f | |||
| a3ded544a6 | |||
| 5958b6dbed | |||
| 2dc08e7d05 | |||
| fa7121f443 | |||
| b189952e8b | |||
| 895ca7942f | |||
| 115b337e3a | |||
| 0d62095206 | |||
| f0634603ee | |||
| 367e69faf6 | |||
| 81467ee075 | |||
| 47552367b6 | |||
| d28f64ceb7 | |||
| b3b3c9cde0 | |||
| 7cde42eb75 | |||
| ba48fa5303 | |||
| ea3dce9ec9 | |||
| 73fac49347 | |||
| 11fcdae114 | |||
| e4a12af050 | |||
| 9637bab983 | |||
| f6f499ab8a | |||
| c429a855da | |||
| b06c145575 | |||
| 47e960449c | |||
| 6acee9b716 | |||
| ba087a8fe3 | |||
| 2fc8080666 | |||
| 1d2a258823 | |||
| 9b500703c5 | |||
| 016540aae3 | |||
| a27a22e669 | |||
| 5aa5fe4978 | |||
| bd80ee74d3 | |||
| 1df6ed2e32 | |||
| 594c2ab3f8 | |||
| cd0903ce53 | |||
| 2e4842e649 | |||
| 9be353d908 | |||
| a63cc408f5 | |||
| b49020e3d5 | |||
| 306ee0619c | |||
| 096bae0e84 | |||
| b26ccf1391 | |||
| e8f83829bb | |||
| 8fb004d9cd | |||
| 55089b85b1 | |||
| ff1de37b74 | |||
| bd00234aad | |||
| 69fbf249b6 | |||
| d75775b98a | |||
| 38c719b7cb | |||
| 6e3a2434ea | |||
| 303f3fcce6 | |||
| 1dad7e5892 | |||
| 3f9a9aa859 | |||
| 1ad57b1625 | |||
| 1e11572535 | |||
| dfb6363a11 | |||
| c320e34e67 | |||
| 2a34095236 | |||
| 5ff96990d2 | |||
| 027e882e6f | |||
| ee5f9e7030 | |||
| cfa16f2048 | |||
| 19013efa3d | |||
| 4c02ea4959 | |||
| 29c34d203e | |||
| 84991f3e48 | |||
| dc8ef80cc6 | |||
| 6e31eb68ab | |||
| 66aed86542 | |||
| b40492d5a7 | |||
| 77e96dd03d | |||
| 93a3094392 | |||
| a5c1aa286b | |||
| 159bc09c86 | |||
| 8068f5378c | |||
| d327ab1532 | |||
| fb6322c8e9 | |||
| a6a419160d | |||
| 6a6a4fb701 | |||
| 5654f2634e | |||
| 537cb747cb | |||
| 4eb9db50d9 | |||
| aa553995a9 | |||
| d6d906c715 | |||
| f29af0e155 | |||
| e6b24eaff5 | |||
| d9f9d2be9e | |||
| 7b84e178b8 | |||
| 373da648f1 | |||
| 8539174c95 | |||
| ff08ec3e3b | |||
| 455c290894 | |||
| 82a1826280 | |||
| 0df77e29ea | |||
| 6c733c8049 | |||
| 47ece60efe | |||
| 85cc329349 | |||
| ec0ca106d6 | |||
| 295f33964a | |||
| d6257c4419 | |||
| 1187547c1b | |||
| 543964c79d | |||
| e5ff5b72e3 | |||
| 1fb0d38ebf | |||
| 331261ac73 | |||
| 3c23449d1c | |||
| 1d2c7af6fc | |||
| a8b25953d0 | |||
| 7a2fe9b1c1 | |||
| 030c7d0d92 | |||
| 0c5101c77d | |||
| 2cd6533e53 | |||
| 3f0ea6a0f2 | |||
| f3701042c9 | |||
| 1b9ff5334f | |||
| 9cda4ed47d | |||
| 4ae4678374 | |||
| 0743a76f5d | |||
| fd0186fb3b | |||
| e2fc925029 | |||
| cc35a0b8d6 | |||
| 14bcf98f85 | |||
| 9834514053 | |||
| f49d4647dd | |||
| 65ce3cd800 | |||
| a40e04dc70 | |||
| 7ab7008eb8 | |||
| 7e46c2704e | |||
| d5ca7cf365 | |||
| 72523d1785 | |||
| c1cc8b482e | |||
| 1439b682d6 | |||
| eb8b59ee9f | |||
| 3ed3847dd2 | |||
| 8ab3e878be | |||
| 2f4f8e11da | |||
| d595694269 | |||
| 80a98b4fdd | |||
| d10c85b295 | |||
| 005fa587c4 | |||
| 642cf06a79 | |||
| da806e9c62 | |||
| f51a827fae | |||
| 147e7cdf8c | |||
| 42dfaee83d | |||
| d6d5ef3fc7 | |||
| 202cd1c74b | |||
| f414d20381 | |||
| 02ea3f5790 | |||
| 42d09acaf2 | |||
| b24b461979 | |||
| 82a7b50396 | |||
| 75c9e79312 | |||
| 3384735351 | |||
| c66c43d2e6 | |||
| e4fe410bc9 | |||
| a4d89f66aa | |||
| cd3718741c | |||
| 093722d713 | |||
| c61d1025cd | |||
| 58199b5de3 | |||
| 6a0cb12ff7 | |||
| 46aa6a8390 | |||
| 46f4eca145 | |||
| f2c1832ab2 | |||
| 32d0bbf44b | |||
| 6574564492 | |||
| e472fa31c1 | |||
| 23ef09f1bd | |||
| f38d069d45 | |||
| 073ab6a9b4 | |||
| 1490d0da6d | |||
| 12a03af62b | |||
| f743a26770 | |||
| 2af48c410d | |||
| 3866609e9b | |||
| cf318c4ec8 | |||
| 717fc7e779 | |||
| da018b4206 | |||
| 2deabb44bf | |||
| 645240df2a | |||
| 88199a04ea | |||
| 4bc369d0c8 | |||
| 489ed99d13 | |||
| 3c1e40a169 | |||
| 5c519a0d87 | |||
| 685ba7509c | |||
| cb56f32680 | |||
| b775d5eaea | |||
| 061fe0e00a | |||
| b217b5742b | |||
| b61ae5a15a | |||
| a0afb7104e | |||
| 55608cb64e | |||
| a06bafff48 | |||
| d671a271b0 | |||
| 71c0e8a477 | |||
| 175ecbbdb2 | |||
| 1f6c9c19a1 | |||
| d82820575d | |||
| b90eb07935 | |||
| 158665acb0 |
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
# .gitignore
|
||||||
|
.logs/
|
||||||
@ -5,6 +5,9 @@
|
|||||||
// Foam's own extension
|
// Foam's own extension
|
||||||
"foam.foam-vscode",
|
"foam.foam-vscode",
|
||||||
|
|
||||||
|
// Tons of markdown goodies (lists, tables of content, so much more)
|
||||||
|
"yzhang.markdown-all-in-one",
|
||||||
|
|
||||||
// Prettier for auto formatting code
|
// Prettier for auto formatting code
|
||||||
"esbenp.prettier-vscode",
|
"esbenp.prettier-vscode",
|
||||||
|
|
||||||
@ -18,5 +18,8 @@
|
|||||||
"_site/**": true
|
"_site/**": true
|
||||||
},
|
},
|
||||||
"files.insertFinalNewline": true,
|
"files.insertFinalNewline": true,
|
||||||
"markdown.styles": [".vscode/custom-tag-style.css"]
|
"markdown.styles": [
|
||||||
|
".vscode/custom-tag-style.css"
|
||||||
|
],
|
||||||
|
"gitdoc.enabled": false
|
||||||
}
|
}
|
||||||
1
2025-06-15.md
Normal file
1
2025-06-15.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
# 2025-06-15
|
||||||
1
2025-06-17.md
Normal file
1
2025-06-17.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
# 2025-06-17
|
||||||
1
2025-06-18.md
Normal file
1
2025-06-18.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
# 2025-06-18
|
||||||
1
2025-06-19.md
Normal file
1
2025-06-19.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
# 2025-06-19
|
||||||
1
2025-06-30.md
Normal file
1
2025-06-30.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
# 2025-06-30
|
||||||
1
2025-07-01.md
Normal file
1
2025-07-01.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
# 2025-07-01
|
||||||
1
2025-07-03.md
Normal file
1
2025-07-03.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
# 2025-07-03
|
||||||
1
2025-07-06.md
Normal file
1
2025-07-06.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
# 2025-07-06
|
||||||
1
2025-08-15.md
Normal file
1
2025-08-15.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
# 2025-08-15
|
||||||
1
2025-08-24.md
Normal file
1
2025-08-24.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
# 2025-08-24
|
||||||
1
2025-08-29.md
Normal file
1
2025-08-29.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
# 2025-08-29
|
||||||
1
2025-08-30.md
Normal file
1
2025-08-30.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
# 2025-08-30
|
||||||
1
2025-09-09.md
Normal file
1
2025-09-09.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
# 2025-09-09
|
||||||
1
2025-09-10.md
Normal file
1
2025-09-10.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
# 2025-09-10
|
||||||
33
AI.md
Normal file
33
AI.md
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
# AI
|
||||||
|
|
||||||
|
## Learning
|
||||||
|
|
||||||
|
* [The Ultimate Guide to Local AI and AI Agents (The Future is Here) - YouTube](https://www.youtube.com/watch?v=mNcXue7X8H0)
|
||||||
|
* Docker Compose based framework for running AI locally
|
||||||
|
* https://github.com/coleam00/local-ai-packaged
|
||||||
|
* https://www.reddit.com/r/LocalLLaMA/
|
||||||
|
*
|
||||||
|
|
||||||
|
## LocalAI Packaged
|
||||||
|
|
||||||
|
### Services
|
||||||
|
|
||||||
|
* [Open WebUI](http://localhost:8080/)
|
||||||
|
* [n8n](http://localhost:5678/)
|
||||||
|
* [Langfuse](http://localhost:3000/)
|
||||||
|
* [Ollama](http://localhost:11434/)
|
||||||
|
* [Qdrant](http://localhost:6333/)
|
||||||
|
|
||||||
|
### Start services
|
||||||
|
|
||||||
|
```shell
|
||||||
|
python start_services.py --profile gpu-nvidia
|
||||||
|
```
|
||||||
|
|
||||||
|
## AgentOS
|
||||||
|
|
||||||
|
* https://github.com/buildermethods/agent-os
|
||||||
|
|
||||||
|
## AG2
|
||||||
|
|
||||||
|
* https://github.com/ag2ai/ag2
|
||||||
9
TODO homelab.md
Normal file
9
TODO homelab.md
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
---
|
||||||
|
created: 2025-06-26T08:08:31-06:00
|
||||||
|
modified: 2025-06-26T08:10:18-06:00
|
||||||
|
type: Checklist
|
||||||
|
---
|
||||||
|
|
||||||
|
# TODO homelab
|
||||||
|
|
||||||
|
- [ ] https://marketplace.visualstudio.com/items?itemName=OpenTofu.vscode-opentofu
|
||||||
BIN
a35a74314775063c5d51232552b5cd8c.jpg
Normal file
BIN
a35a74314775063c5d51232552b5cd8c.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.2 MiB |
0
assets/images/graph-filter.gif
Executable file → Normal file
0
assets/images/graph-filter.gif
Executable file → Normal file
|
Before Width: | Height: | Size: 7.1 MiB After Width: | Height: | Size: 7.1 MiB |
BIN
assets/images/pdf_output.png
Normal file
BIN
assets/images/pdf_output.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 102 KiB |
26
booloumud.md
Normal file
26
booloumud.md
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
# booloumud
|
||||||
|
|
||||||
|
* https://store.booloumud.com
|
||||||
|
*
|
||||||
|
|
||||||
|
## Tech
|
||||||
|
|
||||||
|
### DNS
|
||||||
|
|
||||||
|
* Squarespace
|
||||||
|
* booloumud.com --> store.booloumud.com (Shopify)
|
||||||
|
* Porkbun
|
||||||
|
* Transfer in progress, need to re-establish after transfer
|
||||||
|
* booloumud.org --> booloumud.com
|
||||||
|
* booloumud.net --> booloumud.com
|
||||||
|
|
||||||
|
## Designs
|
||||||
|
|
||||||
|
### Earring holders and storage
|
||||||
|
|
||||||
|
* `G:\My Drive\booloumud\designs\earring_display`
|
||||||
|
|
||||||
|
### Tooth pendants
|
||||||
|
|
||||||
|
* [🦷 Real Anatomy Tooth Seth #1・ 3D File for 3D printing・Cults](https://cults3d.com/en/3d-model/art/real-anatomy-tooth-seth-1)
|
||||||
|
* https://cults3d.com/en/orders/128683287
|
||||||
3
booloumud_store.code-workspace
Normal file
3
booloumud_store.code-workspace
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"folders": []
|
||||||
|
}
|
||||||
145
cigars.md
Normal file
145
cigars.md
Normal file
@ -0,0 +1,145 @@
|
|||||||
|
# cigars
|
||||||
|
|
||||||
|
## to try
|
||||||
|
|
||||||
|
* Drew Estate
|
||||||
|
* Deadwood Crazy Alice
|
||||||
|
* Java Mint Maduro
|
||||||
|
* https://www.reddit.com/r/cigars/s/gEAeA9gw2o
|
||||||
|
* https://www.reddit.com/r/cigars/s/O42EdsJXSf
|
||||||
|
* Johnny Tabaconaught
|
||||||
|
* https://www.reddit.com/r/cigars/s/A8KFQ9sovB
|
||||||
|
* Brickhouse
|
||||||
|
* Maduro
|
||||||
|
* https://www.reddit.com/r/cigars/s/bRg03rKkZ1
|
||||||
|
* Crowned Heads Le Careme
|
||||||
|
* https://www.reddit.com/r/cigars/s/798wqgYHMp
|
||||||
|
|
||||||
|
## I like
|
||||||
|
|
||||||
|
* Deadwood
|
||||||
|
* Leather Rose
|
||||||
|
* Girl with No Name
|
||||||
|
* Undercrown Shade
|
||||||
|
* Mild flavor, strong buzz
|
||||||
|
* Famous Smoke Shop
|
||||||
|
* Nicaraguan Selection 3000
|
||||||
|
* Foundation
|
||||||
|
* Tabernacle Havana Seed
|
||||||
|
* Maduro
|
||||||
|
* Dark Natural - a little strong
|
||||||
|
* Gurkha
|
||||||
|
* Rogue
|
||||||
|
* Chateau de Prive - nice burn, very mild, toasted
|
||||||
|
* Evil - leather and mild pepper
|
||||||
|
* L'Atelier
|
||||||
|
* Surrogates Bone Crusher
|
||||||
|
* Oliva
|
||||||
|
* Serie O Corona
|
||||||
|
* 3rd Degree
|
||||||
|
* Master Blends 3
|
||||||
|
* Kentuky Fire Cured
|
||||||
|
* Just a Friend
|
||||||
|
* Fat Molly
|
||||||
|
* Arturo Fuente
|
||||||
|
* Gran Reserva Curly Head Deluxe Maduro - a little shaggy, but inexpensive
|
||||||
|
* Selection Privada No. 1 Double Claro
|
||||||
|
* Rojas
|
||||||
|
* Street Tacos Barbacoa Robusta
|
||||||
|
* Breakfast Tacos Sumatra
|
||||||
|
* Tatuaje
|
||||||
|
* Reserva Broadleaf
|
||||||
|
|
||||||
|
## I don't like
|
||||||
|
|
||||||
|
* Rocky Patel Seed to Smoke Share Toro
|
||||||
|
* Just, gross. Tastes like a book depository.
|
||||||
|
|
||||||
|
## meh
|
||||||
|
|
||||||
|
* Drew Estate
|
||||||
|
* Factory Smokes Belicoso Sweet
|
||||||
|
* Rocky Patel
|
||||||
|
* Seed to Smoke Classic
|
||||||
|
|
||||||
|
## shops
|
||||||
|
|
||||||
|
* https://www.cigarsdirect.com/
|
||||||
|
* Neptune
|
||||||
|
* Famous Smoke Shop
|
||||||
|
|
||||||
|
## Journal
|
||||||
|
|
||||||
|
|
||||||
|
* [[2025-09-18]] - Tatuaje Reserva Broadleaf ([[2024-09-13]])
|
||||||
|
* [[2025-09-16]] - Arturo Fuente Curly Head Delux Maduro ([[2024-11-20]])
|
||||||
|
* [[2025-09-15]] - Acid Twenty (2024-01-16)
|
||||||
|
* [[2025-09-14]] - Gurkha The Tabernacle (2024-11-20)
|
||||||
|
* Chocolate, leather
|
||||||
|
* [[2025-09-13]] - L'Atelier Surrogates Bone Crusher ([[2024-09-13]])
|
||||||
|
* Earthy soil, dark roast coffee. Tight ash, even burn.
|
||||||
|
* [[2025-09-12]] - Arturo Fuente Curly Head Delux Maduro ([[2024-11-20]])
|
||||||
|
* [[2025-09-11]] - Arturo Fuente Curly Head Delux Maduro ([[2024-11-20]])
|
||||||
|
* [[2025-09-10]]
|
||||||
|
* Nub Habano ([[2024-07-08]])
|
||||||
|
* Not bad - mild to medium. Lumber and leather. Wrapper was really thin and fell apart, had to relight a few times
|
||||||
|
* Arturo Fuente Curly Head Delux Maduro ([[2024-11-20]])
|
||||||
|
* [[2025-09-09]] - Famous Smoke Shop Nicaraguan Selection 3000
|
||||||
|
* [[2025-09-05]] - Gurkha Cellar Reserve 18 Years
|
||||||
|
* [[2025-09-04]]
|
||||||
|
* Rojas Breakfast Tacos Sumatra ([[2025-08-01]])
|
||||||
|
* Oliva Serie O ([[2024-11-20]])
|
||||||
|
* [[2025-09-03]] - Gurkha Castle Hall ([[2025-08-01]])
|
||||||
|
* [[2025-08-30]] - Gurkha Beast ([[2025-08-01]])
|
||||||
|
* tight, horrible draw on this stick
|
||||||
|
* once loosened up, not bad - medium-dark, gassy, dark wood
|
||||||
|
* [[2025-08-29]] - Gurkha Evil ([[2025-08-01]])
|
||||||
|
* Mild to medium - leather, a little pepper
|
||||||
|
* [[2025-08-24]] - Gurkha Marquesa ([[2025-08-01]])
|
||||||
|
* [[2025-08-15]] - Oliva Serie O ([[2024-11-20]])
|
||||||
|
* [[2025-08-13]] - Gurkha Chateau de Prive ([[2025-08-01]])
|
||||||
|
* [[2025-08-12]] - Kentucky Fire Cured Fat Molly ([[2025-08-01]])
|
||||||
|
* [[2025-08-11]] - Gurkha Rogue ([[2025-08-01]])
|
||||||
|
* Good medium strength. Some burn issues, esp towards the end
|
||||||
|
* ~[[2025-08-11]] - Rocky Patel Seed to Smoke Shade Toro ([[2025-08-01]])~
|
||||||
|
* Abandoned after one draw - nasty!
|
||||||
|
* [[2025-08-09]] - Rojas Street Tacos Carnitas Toro ([[2025-08-01]])
|
||||||
|
* [[2025-08-07]] - Kentucky Fire Cured Fat Molly ([[2025-08-01]])
|
||||||
|
* [[2025-08-05]] - Rojas Street Tacos Barbacoa Robusta ([[2025-08-01]])
|
||||||
|
* Easy draw, lots of smoke. Pepper, leather, medium strong
|
||||||
|
* [[2025-08-01]] - Rocky Patel Seed to Smoke Classic ([[2025-08-01]])
|
||||||
|
* Dry leaves, flat, not offensive, but not very good
|
||||||
|
* [[2025-07-31]] - Kentuky Fire Cured Muwat ([[2024-07-08]])
|
||||||
|
* [[2025-07-30]] - Oliva Master Blends 3 ([[2024-07-08]])
|
||||||
|
* [[2025-07-20]] - Inferno by Oliva ([[2024-07-08]])
|
||||||
|
* [[2025-07-18]]
|
||||||
|
* Oliva Serie O ([[2024-11-20]])
|
||||||
|
* Selection Privada No. 1 Double Claro ([[2024-01-19]])
|
||||||
|
* [[2025-07-16]] - Oliva Serie O ([[2024-11-20]])
|
||||||
|
* [[2025-07-14]] - Selection Privada No. 1 Double Claro ([[2024-01-19]])
|
||||||
|
* [[2025-07-11]] - Oliva Serie V ([[2024-12-25]])
|
||||||
|
* [[2025-07-10]] - Acid Progeny ([[2024-01-16]])
|
||||||
|
* Cedary, spicy wood
|
||||||
|
* [[2025-07-08]] - Selection Privada No. 1 Double Claro ([[2024-01-19]])
|
||||||
|
* [[2025-07-08]] - Oliva Serie O ([[2024-11-20]])
|
||||||
|
* [[2025-07-07]] - Oliva 3rd Degree ([[2024-07-08]])
|
||||||
|
* Strong, but not smoky. Tight, even burn. Took a while to get through, pretty buzzy.
|
||||||
|
* [[2025-07-06]] - Undercrown Shade ([[2024-01]])
|
||||||
|
* [[2025-07-03]] - Oliva Serie O ([[2024-11-20]])
|
||||||
|
* [[2025-07-01]] - Factory Smokes Belicoso Sweet ([[2024-01-16]])
|
||||||
|
* [[2025-06-30]] - Selection Privada No. 1 Double Claro ([[2024-01-19]])
|
||||||
|
* [[2025-06-25]] - Selection Privada No. 1 Double Claro
|
||||||
|
|
||||||
|
|
||||||
|
[//begin]: # "Autogenerated link references for markdown compatibility"
|
||||||
|
[2025-09-10]: 2025-09-10.md "2025-09-10"
|
||||||
|
[2025-09-09]: 2025-09-09.md "2025-09-09"
|
||||||
|
[2025-08-30]: 2025-08-30.md "2025-08-30"
|
||||||
|
[2025-08-29]: 2025-08-29.md "2025-08-29"
|
||||||
|
[2025-08-24]: 2025-08-24.md "2025-08-24"
|
||||||
|
[2025-08-15]: 2025-08-15.md "2025-08-15"
|
||||||
|
[2025-07-06]: 2025-07-06.md "2025-07-06"
|
||||||
|
[2025-07-03]: 2025-07-03.md "2025-07-03"
|
||||||
|
[2025-07-01]: 2025-07-01.md "2025-07-01"
|
||||||
|
[2025-06-30]: 2025-06-30.md "2025-06-30"
|
||||||
|
[//end]: # "Autogenerated link references"
|
||||||
BIN
dd75f62871a045217d36e3156fa2fc7e.jpg
Normal file
BIN
dd75f62871a045217d36e3156fa2fc7e.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.6 MiB |
3
dev environments.md
Normal file
3
dev environments.md
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# dev environments
|
||||||
|
|
||||||
|
* https://bitwarden.com/help/ssh-agent/
|
||||||
@ -10,13 +10,13 @@ This command creates a note.
|
|||||||
Although it works fine on its own, it can be customized to achieve various use cases.
|
Although it works fine on its own, it can be customized to achieve various use cases.
|
||||||
Here are the settings available for the command:
|
Here are the settings available for the command:
|
||||||
|
|
||||||
- notePath: The path of the note to create. If relative it will be resolved against the workspace root.
|
- `notePath`: The path of the note to create. If relative it will be resolved against the workspace root.
|
||||||
- templatePath: The path of the template to use. If relative it will be resolved against the workspace root.
|
- `templatePath`: The path of the template to use. If relative it will be resolved against the workspace root.
|
||||||
- title: The title of the note (that is, the `FOAM_TITLE` variable)
|
- `title`: The title of the note (that is, the `FOAM_TITLE` variable)
|
||||||
- text: The text to use for the note. If also a template is provided, the template has precedence
|
- `text`: The text to use for the note. If also a template is provided, the template has precedence
|
||||||
- variables: Variables to use in the text or template
|
- `variables`: Variables to use in the text or template
|
||||||
- date: The date used to resolve the FOAM*DATE*\* variables. in `YYYY-MM-DD` format
|
- `date`: The date used to resolve the FOAM*DATE*\* variables. in `YYYY-MM-DD` format
|
||||||
- onFileExists?: 'overwrite' | 'open' | 'ask' | 'cancel': What to do in case the target file already exists
|
- `onFileExists?: 'overwrite' | 'open' | 'ask' | 'cancel'`: What to do in case the target file already exists
|
||||||
|
|
||||||
To customize a command and associate a key binding to it, open the key binding settings and add the appropriate configuration, here are some examples:
|
To customize a command and associate a key binding to it, open the key binding settings and add the appropriate configuration, here are some examples:
|
||||||
|
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
# Daily Notes
|
# Daily Notes
|
||||||
|
|
||||||
Daily notes allow you to quickly create and access a new notes file for each day. This is a surpisingly effective and increasingly common strategy to organize notes and manage events.
|
Daily notes allow you to quickly create and access a new notes file for each day. This is a surprisingly effective and increasingly common strategy to organize notes and manage events.
|
||||||
|
|
||||||
View today's note file by running the `Foam: Open Daily Note` command, by using the shortcut `alt+d` (note: shortcuts can be [overridden](https://code.visualstudio.com/docs/getstarted/keybindings)), or by using [#snippets](#Snippets). The name, location, and title of daily notes files is [#configurable](#Configuration).
|
View today's note file by running the `Foam: Open Daily Note` command, by using the shortcut `alt+d` (note: shortcuts can be [overridden](https://code.visualstudio.com/docs/getstarted/keybindings)), or by using [#snippets](#Snippets). The name, location, and title of daily notes files are [#configurable](#Configuration).
|
||||||
|
|
||||||
## Roam-style Automatic Daily Notes
|
## Roam-style Automatic Daily Notes
|
||||||
|
|
||||||
@ -29,11 +29,11 @@ Create a link to a recent daily note using [snippets](https://code.visualstudio.
|
|||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
|
|
||||||
By default, Daily Notes will be created in a file called `yyyy-mm-dd.md` in the workspace's `journals` folder, with a heading `yyyy-mm-dd`.
|
By default, Daily Notes will be created in a file called `yyyy-mm-dd.md` in the workspace's `journals` folder, with the heading `yyyy-mm-dd`.
|
||||||
|
|
||||||
These settings can be overridden in your workspace or global `.vscode/settings.json` file, using the [**dateformat** date masking syntax](https://github.com/felixge/node-dateformat#mask-options):
|
These settings can be overridden in your workspace or global `.vscode/settings.json` file, using the [**dateformat** date masking syntax](https://github.com/felixge/node-dateformat#mask-options):
|
||||||
|
|
||||||
It's possible to customize path and heading of your daily notes, by following the [dateformat masking syntax](https://github.com/felixge/node-dateformat#mask-options).
|
It's possible to customize the path and heading of your daily notes, by following the [dateformat masking syntax](https://github.com/felixge/node-dateformat#mask-options).
|
||||||
The following properties can be used:
|
The following properties can be used:
|
||||||
|
|
||||||
```json
|
```json
|
||||||
@ -45,7 +45,7 @@ The following properties can be used:
|
|||||||
|
|
||||||
The above configuration would create a file `journal/daily-note-2020-07-25.mdx`, with the heading `Journal Entry, Sunday, July 25`.
|
The above configuration would create a file `journal/daily-note-2020-07-25.mdx`, with the heading `Journal Entry, Sunday, July 25`.
|
||||||
|
|
||||||
> NOTE: It is possible to set the filepath of a daily note according to the date using the special [[note-properties]] configurable for [[Note Templates]]. Specifically see [[note-templates#Example of date-based|Example of date-based filepath]]. Using the template property will override any setting configured through `.vscode/settings.json`.
|
> NOTE: It is possible to set the filepath of a daily note according to the date using the special [[note-properties]] configurable for [[Note Templates]]. Specifically, see [[note-templates#Example of date-based|Example of date-based filepath]]. Using the template property will override any setting configured through `.vscode/settings.json`.
|
||||||
|
|
||||||
## Extend Functionality (Weekly, Monthly, Quarterly Notes)
|
## Extend Functionality (Weekly, Monthly, Quarterly Notes)
|
||||||
|
|
||||||
|
|||||||
@ -38,6 +38,7 @@ A sample configuration object is provided below, you can provide as many or as l
|
|||||||
"foam.graph.style": {
|
"foam.graph.style": {
|
||||||
"background": "#202020",
|
"background": "#202020",
|
||||||
"fontSize": 12,
|
"fontSize": 12,
|
||||||
|
"fontFamily": "Sans-Serif",
|
||||||
"lineColor": "#277da1",
|
"lineColor": "#277da1",
|
||||||
"lineWidth": 0.2,
|
"lineWidth": 0.2,
|
||||||
"particleWidth": 1.0,
|
"particleWidth": 1.0,
|
||||||
@ -50,6 +51,7 @@ A sample configuration object is provided below, you can provide as many or as l
|
|||||||
|
|
||||||
- `background` background color of the graph, adjust to increase contrast
|
- `background` background color of the graph, adjust to increase contrast
|
||||||
- `fontSize` size of the title font for each node
|
- `fontSize` size of the title font for each node
|
||||||
|
- `fontFamily` font of the title font for each node
|
||||||
- `lineColor` color of the edges between nodes in the graph
|
- `lineColor` color of the edges between nodes in the graph
|
||||||
- `lineWidth` thickness of the edges between nodes
|
- `lineWidth` thickness of the edges between nodes
|
||||||
- `particleWidth` size of the particle animation showing link direction when highlighting a node
|
- `particleWidth` size of the particle animation showing link direction when highlighting a node
|
||||||
|
|||||||
@ -1,22 +1,22 @@
|
|||||||
# Link Reference Definitions
|
# Link Reference Definitions
|
||||||
|
|
||||||
When you use `[[wikilinks]]`, the [foam-vscode](https://github.com/foambubble/foam/tree/master/packages/foam-vscode) extension can automatically generate [Markdown Link Reference Definitions](https://spec.commonmark.org/0.29/#link-reference-definitions) at the bottom of the file. This is not needed to navigate your workspace with foam-vscode, but is useful for files to remain compatible with various Markdown tools (e.g. parsers, static site generators, VS code plugins etc), which don't support `[[wikilinks]]`.
|
When you use `[[wikilinks]]`, the [foam-vscode](https://github.com/foambubble/foam/tree/main/packages/foam-vscode) extension can automatically generate [Markdown Link Reference Definitions](https://spec.commonmark.org/0.29/#link-reference-definitions) at the bottom of the file. This is not needed to navigate your workspace with foam-vscode, but is useful for files to remain compatible with various Markdown tools (e.g. parsers, static site generators, VS code plugins etc), which don't support `[[wikilinks]]`.
|
||||||
|
|
||||||
## Example
|
## Example
|
||||||
|
|
||||||
The following example:
|
The following example:
|
||||||
|
|
||||||
```md
|
```md
|
||||||
- [[wikilinks]]
|
- [[wikilinks]]
|
||||||
- [[github-pages]]
|
- [[github-pages]]
|
||||||
```
|
```
|
||||||
|
|
||||||
...generates the following link reference definitions to the bottom of the file:
|
...generates the following link reference definitions to the bottom of the file:
|
||||||
|
|
||||||
```md
|
```md
|
||||||
[wikilinks]: wikilinks "Wikilinks"
|
[wikilinks]: wikilinks 'Wikilinks'
|
||||||
[github-pages]: github-pages "GitHub Pages"
|
[github-pages]: github-pages 'GitHub Pages'
|
||||||
```
|
```
|
||||||
|
|
||||||
You can open the [raw markdown](https://foambubble.github.io/foam/features/link-reference-definitions.md) to see them at the bottom of this file
|
You can open the [raw markdown](https://foambubble.github.io/foam/features/link-reference-definitions.md) to see them at the bottom of this file
|
||||||
You can open the [raw markdown](https://foambubble.github.io/foam/user/features/link-reference-definitions.md) to see them at the bottom of this file
|
You can open the [raw markdown](https://foambubble.github.io/foam/user/features/link-reference-definitions.md) to see them at the bottom of this file
|
||||||
|
|||||||
@ -32,6 +32,7 @@ Some properties have special meaning for Foam:
|
|||||||
| `title` | will assign the name to the note that you will see in the graph, regardless of the filename or the first heading (also see how to [[write-notes-in-foam]]) |
|
| `title` | will assign the name to the note that you will see in the graph, regardless of the filename or the first heading (also see how to [[write-notes-in-foam]]) |
|
||||||
| `type` | can be used to style notes differently in the graph (also see [[graph-visualization]]). The default type for a document is `note` unless otherwise specified with this property. |
|
| `type` | can be used to style notes differently in the graph (also see [[graph-visualization]]). The default type for a document is `note` unless otherwise specified with this property. |
|
||||||
| `tags` | can be used to add tags to a note (see [[tags]]) |
|
| `tags` | can be used to add tags to a note (see [[tags]]) |
|
||||||
|
| `alias` | can be used to add aliases to the note. an alias will show up in the link autocompletion |
|
||||||
|
|
||||||
For example:
|
For example:
|
||||||
|
|
||||||
@ -40,7 +41,7 @@ For example:
|
|||||||
title: "Note Title"
|
title: "Note Title"
|
||||||
type: "daily-note"
|
type: "daily-note"
|
||||||
tags: daily, funny, planning
|
tags: daily, funny, planning
|
||||||
|
alias: alias1, alias2
|
||||||
---
|
---
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@ -8,8 +8,8 @@ Note templates are `.md` files located in the special `.foam/templates` director
|
|||||||
|
|
||||||
Create a template:
|
Create a template:
|
||||||
|
|
||||||
* Run the `Foam: Create New Template` command from the command palette
|
- Run the `Foam: Create New Template` command from the command palette
|
||||||
* OR manually create a regular `.md` file in the `.foam/templates` directory
|
- OR manually create a regular `.md` file in the `.foam/templates` directory
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
@ -17,8 +17,8 @@ _Theme: Ayu Light_
|
|||||||
|
|
||||||
To create a note from a template:
|
To create a note from a template:
|
||||||
|
|
||||||
* Run the `Foam: Create New Note From Template` command and follow the instructions. Don't worry if you've not created a template yet! You'll be prompted to create a new template if none exist.
|
- Run the `Foam: Create New Note From Template` command and follow the instructions. Don't worry if you've not created a template yet! You'll be prompted to create a new template if none exist.
|
||||||
* OR run the `Foam: Create New Note` command, which uses the special default template (`.foam/templates/new-note.md`, if it exists)
|
- OR run the `Foam: Create New Note` command, which uses the special default template (`.foam/templates/new-note.md`, if it exists)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
@ -29,7 +29,7 @@ _Theme: Ayu Light_
|
|||||||
### Default template
|
### Default template
|
||||||
|
|
||||||
The `.foam/templates/new-note.md` template is special in that it is the template that will be used by the `Foam: Create New Note` command.
|
The `.foam/templates/new-note.md` template is special in that it is the template that will be used by the `Foam: Create New Note` command.
|
||||||
Customize this template to contain content that you want included every time you create a note. To begin it is *recommended* to define the YAML Front-Matter of the template similar to the following:
|
Customize this template to contain content that you want included every time you create a note. To begin it is _recommended_ to define the YAML Front-Matter of the template similar to the following:
|
||||||
|
|
||||||
```markdown
|
```markdown
|
||||||
---
|
---
|
||||||
@ -40,7 +40,7 @@ type: basic-note
|
|||||||
### Default daily note template
|
### Default daily note template
|
||||||
|
|
||||||
The `.foam/templates/daily-note.md` template is special in that it is the template that will be used when creating daily notes (e.g. by using `Foam: Open Daily Note`).
|
The `.foam/templates/daily-note.md` template is special in that it is the template that will be used when creating daily notes (e.g. by using `Foam: Open Daily Note`).
|
||||||
Customize this template to contain content that you want included every time you create a daily note. To begin it is *recommended* to define the YAML Front-Matter of the template similar to the following:
|
Customize this template to contain content that you want included every time you create a daily note. To begin it is _recommended_ to define the YAML Front-Matter of the template similar to the following:
|
||||||
|
|
||||||
```markdown
|
```markdown
|
||||||
---
|
---
|
||||||
@ -55,7 +55,7 @@ Templates can use all the variables available in [VS Code Snippets](https://code
|
|||||||
In addition, you can also use variables provided by Foam:
|
In addition, you can also use variables provided by Foam:
|
||||||
|
|
||||||
| Name | Description |
|
| Name | Description |
|
||||||
| -------------------- | ------------ |
|
| -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||||
| `FOAM_SELECTED_TEXT` | Foam will fill it with selected text when creating a new note, if any text is selected. Selected text will be replaced with a wikilink to the new |
|
| `FOAM_SELECTED_TEXT` | Foam will fill it with selected text when creating a new note, if any text is selected. Selected text will be replaced with a wikilink to the new |
|
||||||
| `FOAM_TITLE` | The title of the note. If used, Foam will prompt you to enter a title for the note. |
|
| `FOAM_TITLE` | The title of the note. If used, Foam will prompt you to enter a title for the note. |
|
||||||
| `FOAM_TITLE_SAFE` | The title of the note in a file system safe format. If used, Foam will prompt you to enter a title for the note unless `FOAM_TITLE` has already caused the prompt. |
|
| `FOAM_TITLE_SAFE` | The title of the note in a file system safe format. If used, Foam will prompt you to enter a title for the note unless `FOAM_TITLE` has already caused the prompt. |
|
||||||
@ -70,7 +70,7 @@ For example, `FOAM_DATE_YEAR` has the same behaviour as VS Code's `CURRENT_YEAR`
|
|||||||
|
|
||||||
By default, prefer using the `FOAM_DATE_` versions. The datetime used to compute the values will be the same for both `FOAM_DATE_` and VS Code's variables, with the exception of the creation notes using the daily note template.
|
By default, prefer using the `FOAM_DATE_` versions. The datetime used to compute the values will be the same for both `FOAM_DATE_` and VS Code's variables, with the exception of the creation notes using the daily note template.
|
||||||
|
|
||||||
For more nitty-gritty details about the supported date formats, [see here](https://github.com/foambubble/foam/blob/master/packages/foam-vscode/src/services/variable-resolver.ts).
|
For more nitty-gritty details about the supported date formats, [see here](https://github.com/foambubble/foam/blob/main/packages/foam-vscode/src/services/variable-resolver.ts).
|
||||||
|
|
||||||
#### Relative daily notes
|
#### Relative daily notes
|
||||||
|
|
||||||
@ -84,8 +84,8 @@ For example, given this daily note template (`.foam/templates/daily-note.md`):
|
|||||||
|
|
||||||
## Here's what I'm going to do today
|
## Here's what I'm going to do today
|
||||||
|
|
||||||
* Thing 1
|
- Thing 1
|
||||||
* Thing 2
|
- Thing 2
|
||||||
```
|
```
|
||||||
|
|
||||||
When the `/tomorrow` snippet is used, `FOAM_DATE_` variables will be populated with tomorrow's date, as expected.
|
When the `/tomorrow` snippet is used, `FOAM_DATE_` variables will be populated with tomorrow's date, as expected.
|
||||||
@ -98,7 +98,7 @@ When creating notes in any other scenario, the `FOAM_DATE_` values are computed
|
|||||||
Templates can also contain metadata about the templates themselves. The metadata is defined in YAML "Frontmatter" blocks within the templates.
|
Templates can also contain metadata about the templates themselves. The metadata is defined in YAML "Frontmatter" blocks within the templates.
|
||||||
|
|
||||||
| Name | Description |
|
| Name | Description |
|
||||||
| ------------- | ---------------------- |
|
| ------------- | -------------------------------------------------------------------------------------------------------------------------------- |
|
||||||
| `filepath` | The filepath to use when creating the new note. If the filepath is a relative filepath, it is relative to the current workspace. |
|
| `filepath` | The filepath to use when creating the new note. If the filepath is a relative filepath, it is relative to the current workspace. |
|
||||||
| `name` | A human readable name to show in the template picker. |
|
| `name` | A human readable name to show in the template picker. |
|
||||||
| `description` | A human readable description to show in the template picker. |
|
| `description` | A human readable description to show in the template picker. |
|
||||||
@ -149,6 +149,7 @@ foam_template:
|
|||||||
description: Daily Note for $FOAM_TITLE
|
description: Daily Note for $FOAM_TITLE
|
||||||
filepath: "C:\\Users\\foam_user\\foam_notes\\journal\\$FOAM_DATE_YEAR\\$FOAM_DATE_MONTH-$FOAM_DATE_MONTH_NAME_SHORT\\$FOAM_DATE_YEAR-$FOAM_DATE_MONTH-$FOAM_DATE_DATE-daily-note.md"
|
filepath: "C:\\Users\\foam_user\\foam_notes\\journal\\$FOAM_DATE_YEAR\\$FOAM_DATE_MONTH-$FOAM_DATE_MONTH_NAME_SHORT\\$FOAM_DATE_YEAR-$FOAM_DATE_MONTH-$FOAM_DATE_DATE-daily-note.md"
|
||||||
---
|
---
|
||||||
|
|
||||||
# $FOAM_DATE_YEAR-$FOAM_DATE_MONTH-$FOAM_DATE_DATE Daily Notes
|
# $FOAM_DATE_YEAR-$FOAM_DATE_MONTH-$FOAM_DATE_DATE Daily Notes
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -166,7 +167,7 @@ If your template already has a YAML Frontmatter block, you can add the Foam temp
|
|||||||
|
|
||||||
#### Limitations
|
#### Limitations
|
||||||
|
|
||||||
Foam only supports adding the template metadata to *YAML* Frontmatter blocks. If the existing Frontmatter block uses some other format (e.g. JSON), you will have to add the template metadata to its own YAML Frontmatter block.
|
Foam only supports adding the template metadata to _YAML_ Frontmatter blocks. If the existing Frontmatter block uses some other format (e.g. JSON), you will have to add the template metadata to its own YAML Frontmatter block.
|
||||||
|
|
||||||
Further, the template metadata must be provided as a [YAML block mapping](https://yaml.org/spec/1.2/spec.html#id2798057), with the attributes placed on the lines immediately following the `foam_template` line:
|
Further, the template metadata must be provided as a [YAML block mapping](https://yaml.org/spec/1.2/spec.html#id2798057), with the attributes placed on the lines immediately following the `foam_template` line:
|
||||||
|
|
||||||
@ -210,7 +211,7 @@ foam_template:
|
|||||||
---
|
---
|
||||||
|
|
||||||
---
|
---
|
||||||
existing_frontmatter: "Existing Frontmatter block"
|
existing_frontmatter: 'Existing Frontmatter block'
|
||||||
---
|
---
|
||||||
This is the rest of the template
|
This is the rest of the template
|
||||||
```
|
```
|
||||||
|
|||||||
@ -1,9 +0,0 @@
|
|||||||
# Spell Checking
|
|
||||||
|
|
||||||
There are many spell checking extensions for VS Code.
|
|
||||||
|
|
||||||
The most popular spell checker for VS Code is [Code Spell Checker](https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker).
|
|
||||||
|
|
||||||
Another one of our favorites is [LTeX](https://marketplace.visualstudio.com/items?itemName=valentjn.vscode-ltex&ssr=false#overview), which is a bit heavier but offers some extra functionality.
|
|
||||||
|
|
||||||
Another popular one is [Spellright](https://marketplace.visualstudio.com/items?itemName=ban.spellright), but be mindful that there have been reports of incompatibility with the `vscode-markdown` extension (see https://github.com/foambubble/foam/issues/1068).
|
|
||||||
@ -21,6 +21,9 @@ Remember, with `CTRL/CMD+click` on a wikilink you can navigate to the note, or c
|
|||||||
## Support for sections
|
## Support for sections
|
||||||
|
|
||||||
Foam supports autocompletion, navigation, embedding and diagnostics for note sections. Just use the standard wiki syntax of `[[resource#Section Title]]`.
|
Foam supports autocompletion, navigation, embedding and diagnostics for note sections. Just use the standard wiki syntax of `[[resource#Section Title]]`.
|
||||||
|
- If it's an external file, `[your link will need the filename](other-file.md#that-section-I-want-to-link-to)`, but
|
||||||
|
- if it's an anchor within the same document, `[you just need an octothorpe and the section name](#that-section-above)`.
|
||||||
|
- Doesn't matter what heading-level the anchor is; whether you're linking to an `H1` like `# MEN WALK ON MOON` or an `H2` like `## Astronauts Land on Plain`, the link syntax uses a single octothorpe: `[Walk!](#men-walk-on-moon)` and `[Land!](#astronauts-land-on-plain-collect-rocks-plant-flag)`. Autocomplete is your friend here.
|
||||||
|
|
||||||
## Markdown compatibility
|
## Markdown compatibility
|
||||||
|
|
||||||
|
|||||||
@ -6,11 +6,11 @@ This list is subject to change.
|
|||||||
|
|
||||||
- [Foam for VSCode](https://marketplace.visualstudio.com/items?itemName=foam.foam-vscode) (alpha)
|
- [Foam for VSCode](https://marketplace.visualstudio.com/items?itemName=foam.foam-vscode) (alpha)
|
||||||
- [Markdown All In One](https://marketplace.visualstudio.com/items?itemName=yzhang.markdown-all-in-one)
|
- [Markdown All In One](https://marketplace.visualstudio.com/items?itemName=yzhang.markdown-all-in-one)
|
||||||
- [Paste Image](https://marketplace.visualstudio.com/items?itemName=mushan.vscode-paste-image)
|
- [Prettier](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode)
|
||||||
|
|
||||||
## Extensions For Additional Features
|
## Extensions For Additional Features
|
||||||
|
|
||||||
These extensions are not (yet?) defined in `.vscode/extensions.json`, but have been used by others and shown to play nice with Foam.
|
These extensions are not defined in `.vscode/extensions.json`, but have been used by others and shown to play nice with Foam.
|
||||||
|
|
||||||
- [Emojisense](https://marketplace.visualstudio.com/items?itemName=bierner.emojisense)
|
- [Emojisense](https://marketplace.visualstudio.com/items?itemName=bierner.emojisense)
|
||||||
- [Markdown Emoji](https://marketplace.visualstudio.com/items?itemName=bierner.markdown-emoji) (adds `:smile:` syntax, works with emojisense to provide autocomplete for this syntax)
|
- [Markdown Emoji](https://marketplace.visualstudio.com/items?itemName=bierner.markdown-emoji) (adds `:smile:` syntax, works with emojisense to provide autocomplete for this syntax)
|
||||||
|
|||||||
@ -1,66 +0,0 @@
|
|||||||
# Publish to Azure DevOps Wiki
|
|
||||||
|
|
||||||
Publish your Foam workspace as an Azure DevOps wiki.
|
|
||||||
|
|
||||||
[Azure DevOps](https://azure.microsoft.com/en-us/services/devops/) is Microsoft's collaboration software for software development teams, formerly known as Team Foundation Server (TFS) and Visual Studio Team Services. It is available as an on-premise or SaaS version. The following recipe was tested with the SaaS version, but should work the same way for the on-premise.
|
|
||||||
|
|
||||||
The following recipe is written with the assumption that you already have an [Azure DevOps](https://azure.microsoft.com/en-us/services/devops/) project.
|
|
||||||
|
|
||||||
## Setup a Foam workspace
|
|
||||||
|
|
||||||
1. Generate a Foam workspace using the [foam-template project](https://github.com/foambubble/foam-template).
|
|
||||||
2. Change the remote to a git repository in Azure DevOps (Repos -> Import a Repository -> Add Clone URL with Authentication), or copy all the files into a new Azure DevOps git repository.
|
|
||||||
3. Define which document will be the wiki home page. To do that, create a file called `.order` in the Foam workspace root folder, with first line being the document filename without `.md` extension. For a project created from the Foam template, the file would look like this:
|
|
||||||
|
|
||||||
```
|
|
||||||
readme
|
|
||||||
```
|
|
||||||
|
|
||||||
4. Push the repository to remote in Azure DevOps.
|
|
||||||
|
|
||||||
## Publish repository to a wiki
|
|
||||||
|
|
||||||
1. Navigate to your Azure DevOps project in a web browser.
|
|
||||||
2. Choose **Overview** > **Wiki**. If you don't have wikis for your project, choose **Publish code as a wiki** on welcome page.
|
|
||||||
3. Choose repository with your Foam workspace, branch (usually `master` or `main`), folder (for workspace created from foam-template it is `/`), and wiki name, and press **Publish**.
|
|
||||||
|
|
||||||
A published workspace looks like this:
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
There is default table of contents pane to the left of the wiki content. Here, you'll find a list of all directories that are present in your Foam workspace, and all wiki pages. Page names are derived from files names, and they are listed in alphabetical order. You may reorder pages by adding filenames without `.md` extension to `.order` file.
|
|
||||||
|
|
||||||
_Note that first entry in `.order` file defines wiki's home page._
|
|
||||||
|
|
||||||
## Update wiki
|
|
||||||
|
|
||||||
While you are pushing changes to GitHub, you won't see the wiki updated if you don't add Azure as a remote. You can push to multiple repositories simultaneously.
|
|
||||||
|
|
||||||
1. First open a terminal and check if Azure is added running: `git remote show origin`. If you don't see Azure add it in the output then follow these steps.
|
|
||||||
2. Rename your current remote (most likely named origin) to a different name by running: `git remote rename origin main`
|
|
||||||
3. You can then add the remote for your second remote repository, in this case, Azure. e.g `git remote add azure https://<YOUR_ID>@dev.azure.com/<YOUR_ID>/foam-notes/_git/foam-notes`. You can get it from: Repos->Files->Clone and copy the URL.
|
|
||||||
4. Now, you need to set up your origin remote to push to both of these. So run: `git config -e` and edit it.
|
|
||||||
5. Add the `remote origin` section to the bottom of the file with the URLs from each remote repository you'd like to push to. You'll see something like that:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
[core]
|
|
||||||
...
|
|
||||||
(ignore this part)
|
|
||||||
...
|
|
||||||
[branch "master"]
|
|
||||||
remote = github
|
|
||||||
merge = refs/heads/master
|
|
||||||
[remote "github"]
|
|
||||||
url = git@github.com:username/repo.git
|
|
||||||
fetch = +refs/heads/*:refs/remotes/github/*
|
|
||||||
[remote "azure"]
|
|
||||||
url = https://<YOUR_ID>@dev.azure.com/<YOUR_ID>/foam-notes/_git/foam-notes
|
|
||||||
fetch = +refs/heads/*:refs/remotes/azure/*
|
|
||||||
[remote "origin"]
|
|
||||||
url = git@github.com:username/repo.git
|
|
||||||
url = https://<YOUR_ID>@dev.azure.com/<YOUR_ID>/foam-notes/_git/foam-notes
|
|
||||||
```
|
|
||||||
|
|
||||||
6. You can then push to both repositories by: `git push origin master` or a single one using: `git push github master` or `git push azure master`
|
|
||||||
|
|
||||||
For more information, read the [Azure DevOps documentation](https://docs.microsoft.com/en-us/azure/devops/project/wiki/publish-repo-to-wiki).
|
|
||||||
@ -2,8 +2,12 @@
|
|||||||
|
|
||||||
This #recipe allows you to paste images on to your notes.
|
This #recipe allows you to paste images on to your notes.
|
||||||
|
|
||||||
You can directly link and paste images that are copied to the clipboard using either the [Paste
|
VScode (since
|
||||||
Image](https://marketplace.visualstudio.com/items?itemName=mushan.vscode-paste-image)
|
[1.79](https://code.visualstudio.com/updates/v1_79#_copy-external-media-files-into-workspace-on-drop-or-paste-for-markdown))
|
||||||
extension, or the [Markdown Image](https://marketplace.visualstudio.com/items?itemName=hancel.markdown-image) extension.
|
now has the ability to paste images from the clipboard, or drag-and-drop image
|
||||||
|
files, directly into markdown documents. The file will be created in the
|
||||||
|
workspace, and a link generated in Markdown format.
|
||||||
|
|
||||||
The former does not have MDX support (yet), the latter does.
|
VSCode settings under `Markdown > Copy Files` and `Markdown > Editor > Drop` can
|
||||||
|
be used to configure where the files get placed in your workspace, how they're
|
||||||
|
named, how conflicts with existing files are handled, and more.
|
||||||
|
|||||||
@ -1,20 +0,0 @@
|
|||||||
# Automatically Sync with Git
|
|
||||||
|
|
||||||
With this #recipe you can regularly commit and push to git, to keep your repo in always synched.
|
|
||||||
You can also easily manipulate the git history to reduce clutter.
|
|
||||||
|
|
||||||
## Required Extensions
|
|
||||||
|
|
||||||
- [GitDoc](https://marketplace.visualstudio.com/items?itemName=vsls-contrib.gitdoc)
|
|
||||||
|
|
||||||
## Instructions
|
|
||||||
|
|
||||||
Click on the extension link above to see how to use it.
|
|
||||||
|
|
||||||
__For Foam specific needs, you can add a comment here by following the [[contribution-guide]]__
|
|
||||||
|
|
||||||
## Feedback and issues
|
|
||||||
|
|
||||||
- Feedback and issues with the extension should be reported to the authors themselves
|
|
||||||
- Feedback and issues with the integration of the extension in Foam can be reported in our [issue tracker](https://github.com/foambubble/foam/issues)
|
|
||||||
|
|
||||||
@ -29,6 +29,9 @@ on:
|
|||||||
jobs:
|
jobs:
|
||||||
store_data:
|
store_data:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
# If you encounter a 403 error from a workflow run, try uncommenting the following 2 lines (taken from: https://stackoverflow.com/questions/75880266/cant-make-push-on-a-repo-with-github-actions accepted answer)
|
||||||
|
# permissions:
|
||||||
|
# contents: write
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@master
|
- uses: actions/checkout@master
|
||||||
- uses: anglinb/foam-capture-action@main
|
- uses: anglinb/foam-capture-action@main
|
||||||
|
|||||||
53
docs/recipes/export-to-pdf.md
Normal file
53
docs/recipes/export-to-pdf.md
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
# Export to PDF
|
||||||
|
|
||||||
|
This #recipe shows how to export a note to PDF.
|
||||||
|
|
||||||
|
## Required extensions
|
||||||
|
|
||||||
|
- **[vscode-pandoc](https://marketplace.visualstudio.com/items?itemName=chrischinchilla.vscode-pandoc)**
|
||||||
|
|
||||||
|
## Required third-party tools
|
||||||
|
|
||||||
|
- [Pandoc](https://pandoc.org/installing.html)
|
||||||
|
- A [LaTeX distribution](https://www.latex-project.org/get/) such as TeXLive (Linux), MacTeX (MacOS), or MikTeX (Windows)
|
||||||
|
|
||||||
|
Check that Pandoc is installed by opening a terminal and running `pandoc --version`.
|
||||||
|
|
||||||
|
Check that Pandoc can produce PDFs with LaTeX by running the following in the terminal.
|
||||||
|
|
||||||
|
```
|
||||||
|
echo It is working > test.md
|
||||||
|
pandoc test.md -o test.pdf
|
||||||
|
```
|
||||||
|
|
||||||
|
## Instructions
|
||||||
|
|
||||||
|
1. Create a folder in your workspace named `.pandoc`. Take note of the full path to this directory. The rest of this recipe will refer to this path as `$WORKSPACE/.pandoc`.
|
||||||
|
|
||||||
|
2. Download the template file [`foam.latex`](https://raw.githubusercontent.com/Hegghammer/foam-templates/main/foam.latex) from [Hegghammer/foam-templates](https://github.com/Hegghammer/foam-templates) and place it in `$WORKSPACE/.pandoc`.
|
||||||
|
|
||||||
|
3. In VSCode, open `settings.json` for your user (or just for your workspace if you prefer), and add the following line:
|
||||||
|
|
||||||
|
```
|
||||||
|
"pandoc.pdfOptString": "--from=markdown+wikilinks_title_after_pipe --resource-path $WORKSPACE/.pandoc --template foam --listings",
|
||||||
|
```
|
||||||
|
|
||||||
|
Make sure to replace `$WORKSPACE/.pandoc` with the real full path to the `.pandoc` directory you created earlier.
|
||||||
|
|
||||||
|
4. Open a Foam note in VSCode.
|
||||||
|
|
||||||
|
5. Press `Ctrl` + `k`, `p`. Choose "pdf", and press `Enter`.
|
||||||
|
|
||||||
|
The PDF should look something like this:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Options
|
||||||
|
|
||||||
|
If you include a name in the `author` parameter in the YAML of the Foam note, that name will feature in the PDF header on the top left.
|
||||||
|
|
||||||
|
If you don't want syntax highlighting and frames around the codeblocks, remove `--listings` from the `pandoc.pdfOptString` parameter in `settings.json`.
|
||||||
|
|
||||||
|
## Further customization
|
||||||
|
|
||||||
|
If you know some LaTeX, you can [tweak](https://bookdown.org/yihui/rmarkdown-cookbook/latex-template.html) the `foam.latex` template to your needs. Alternatively, you can supply another ready-made template such as [Eisvogel](https://github.com/Wandmalfarbe/pandoc-latex-template); just place the `TEMPLATE_NAME.latex` file in `$WORKSPACE/.pandoc`. You can also use all of Pandoc's [other functionalities](https://learnbyexample.github.io/customizing-pandoc/) by tweaking the `pandoc.pdfOptString` parameter in `settings.json`.
|
||||||
@ -1,3 +0,0 @@
|
|||||||
# Real-time Collaboration
|
|
||||||
|
|
||||||
This #recipe is here to just tell you that VS Code Live Share will allow you to collaborate live on your notes.
|
|
||||||
@ -1,19 +1,21 @@
|
|||||||
<!-- omit in toc -->
|
<!-- omit in toc -->
|
||||||
|
|
||||||
# Recipes
|
# Recipes
|
||||||
|
|
||||||
A #recipe is a guide, tip or strategy for getting the most out of your Foam workspace!
|
A #recipe is a guide, tip or strategy for getting the most out of your Foam workspace!
|
||||||
|
|
||||||
- [Contribute](#contribute)
|
- [Recipes](#recipes)
|
||||||
- [Take smart notes](#take-smart-notes)
|
- [Contribute](#contribute)
|
||||||
- [Discover](#discover)
|
- [Take smart notes](#take-smart-notes)
|
||||||
- [Organise](#organise)
|
- [Discover](#discover)
|
||||||
- [Write](#write)
|
- [Organise](#organise)
|
||||||
- [Version control](#version-control)
|
- [Write](#write)
|
||||||
- [Publish](#publish)
|
- [Version control](#version-control)
|
||||||
- [Collaborate](#collaborate)
|
- [Publish](#publish)
|
||||||
- [Workflow](#workflow)
|
- [Collaborate](#collaborate)
|
||||||
- [Creative ideas](#creative-ideas)
|
- [Workflow](#workflow)
|
||||||
- [Other](#other)
|
- [Creative ideas](#creative-ideas)
|
||||||
|
- [Other](#other)
|
||||||
|
|
||||||
## Contribute
|
## Contribute
|
||||||
|
|
||||||
@ -75,11 +77,11 @@ A #recipe is a guide, tip or strategy for getting the most out of your Foam work
|
|||||||
- Publish using community templates
|
- Publish using community templates
|
||||||
- [[publish-to-netlify-with-eleventy]] by [@juanfrank77](https://github.com/juanfrank77)
|
- [[publish-to-netlify-with-eleventy]] by [@juanfrank77](https://github.com/juanfrank77)
|
||||||
- [[generate-gatsby-site]] by [@mathieudutour](https://github.com/mathieudutour) and [@hikerpig](https://github.com/hikerpig)
|
- [[generate-gatsby-site]] by [@mathieudutour](https://github.com/mathieudutour) and [@hikerpig](https://github.com/hikerpig)
|
||||||
- [foamy-nextjs](https://github.com/yenly/foamy-nextjs) by [@yenly](https://github.com/yenly)
|
|
||||||
- Make the site your own by [[publish-to-github]].
|
- Make the site your own by [[publish-to-github]].
|
||||||
- Render math symbols, by either
|
- Render math symbols, by either
|
||||||
- adding client-side [[math-support-with-mathjax]] to the default [[publish-to-github-pages]] site
|
- adding client-side [[math-support-with-mathjax]] to the default [[publish-to-github-pages]] site
|
||||||
- adding a custom Jekyll plugin to support [[math-support-with-katex]]
|
- adding a custom Jekyll plugin to support [[math-support-with-katex]]
|
||||||
|
- Export note to PDF [[export-to-pdf]]
|
||||||
|
|
||||||
## Collaborate
|
## Collaborate
|
||||||
|
|
||||||
|
|||||||
@ -1,60 +0,0 @@
|
|||||||
# Take notes on mobile phones
|
|
||||||
|
|
||||||
This #recipe offers solutions to taking Foam notes on the go.
|
|
||||||
|
|
||||||
For the time being we have decided to not build a mobile app, but rely on third parties (see [[build-vs-assemble]]).
|
|
||||||
|
|
||||||
The most promising options are:
|
|
||||||
|
|
||||||
### [GitJournal](https://gitjournal.io/)
|
|
||||||
|
|
||||||
Pros
|
|
||||||
|
|
||||||
- Open source
|
|
||||||
- Already a usable solution.
|
|
||||||
- Provides functionality to edit, create, and browser markdown files.
|
|
||||||
- Support journal mode, todo lists, and free writing
|
|
||||||
- Syncs to GitHub repo
|
|
||||||
- Supports Wikilinks
|
|
||||||
- Supports Backlinks
|
|
||||||
- Developer is happy to prioritize Foam compatibility
|
|
||||||
|
|
||||||
Cons
|
|
||||||
|
|
||||||
- Doesn't generate link reference lists (but this is ok, since [[workspace-janitor]] as a GitHub action can solve this)
|
|
||||||
- Not as sleek as Apple/Google notes, some keyboard state glitching on Android, etc.
|
|
||||||
- Lack of control over roadmap. Established product with a paid plan, so may not be open to Foam-supportive changes and additions that don't benefit most users.
|
|
||||||
|
|
||||||
Verdict: Good. By far best effort/outcome ratio would be to help improve GitJournal rather than building a [bespoke mobile app](#bespoke-mobile-app-for-foam).
|
|
||||||
|
|
||||||
### GitHub Codespaces
|
|
||||||
|
|
||||||
Pros
|
|
||||||
|
|
||||||
- Works out of the box just like the desktop app
|
|
||||||
|
|
||||||
Cons
|
|
||||||
|
|
||||||
- not generally available quite yet
|
|
||||||
- [Pricing](https://docs.github.com/en/free-pro-team@latest/github/developing-online-with-codespaces/about-billing-for-codespaces)
|
|
||||||
|
|
||||||
For a quick demo, see <https://www.youtube.com/watch?v=KI5m4Uy8_4I>.
|
|
||||||
|
|
||||||
Verdict: Good. Pricing should be reasonable for taking notes on the fly. Harder to assess for people who would constantly use Foam from mobile phone.
|
|
||||||
|
|
||||||
## Bespoke mobile app for Foam
|
|
||||||
|
|
||||||
Given we already have a solution, why would we spend time and effort building a bespoke mobile app?
|
|
||||||
|
|
||||||
- Taking notes on the go is a key part of a good note taking process, and the process should feel effortless
|
|
||||||
- Having a custom app could help us support key user workflows in a more Foam-specific manner
|
|
||||||
|
|
||||||
If such an app was worth building, it would have to have the following features:
|
|
||||||
|
|
||||||
- Instant loading and syncing for quick notes
|
|
||||||
- Sleek, simple, beautifully designed user experience.
|
|
||||||
- Ability to search and navigate forward links and back links (only in paid GitJournal version)
|
|
||||||
- Killer feature that makes it the best note taking tool for Foam (?)
|
|
||||||
|
|
||||||
Given the effort vs reward ratio, it's a low priority for core team, but if someone wants to work on this, we can provide support! Talk to us on the #mobile-apps channel on [Foam Discord](https://foambubble.github.io/join-discord/w).
|
|
||||||
|
|
||||||
6
finance.md
Normal file
6
finance.md
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
# finance
|
||||||
|
|
||||||
|
## purchases
|
||||||
|
|
||||||
|
* https://www.etsy.com/your/purchases
|
||||||
|
* https://www.ebay.com/mye/myebay/purchase?page=1&q=wizard&mp=purchase-search-module-v2&type=v2&pg=purchase
|
||||||
259
foam_sync.ps1
Normal file
259
foam_sync.ps1
Normal file
@ -0,0 +1,259 @@
|
|||||||
|
#Requires -Version 5.1
|
||||||
|
|
||||||
|
[CmdletBinding()]
|
||||||
|
param ()
|
||||||
|
|
||||||
|
Set-StrictMode -Version 3.0
|
||||||
|
|
||||||
|
$scriptPath = $MyInvocation.MyCommand.Path
|
||||||
|
$scriptDir = Split-Path -Path $scriptPath -Parent
|
||||||
|
$logDir = Join-Path -Path $scriptDir -ChildPath ".logs"
|
||||||
|
$logName = "foam_sync.log"
|
||||||
|
$logFilePath = Join-Path -Path $logDir -ChildPath $logName
|
||||||
|
$scriptName = (Get-Item $scriptPath).Name
|
||||||
|
|
||||||
|
# --- Task Setup ---
|
||||||
|
$taskName = 'FoamGitSync'
|
||||||
|
$taskDescription = "Periodically synchronizes the Git repository at $scriptDir using $scriptName."
|
||||||
|
$taskExecute = 'c:\windows\system32\conhost.exe'
|
||||||
|
$taskArguments = "--headless powershell.exe -WindowStyle Hidden -NoProfile -NonInteractive -ExecutionPolicy Bypass -File $scriptPath -Verbose"
|
||||||
|
$frequencyMinutes = 2
|
||||||
|
$timeLimitSeconds = 30
|
||||||
|
|
||||||
|
if (-not (Test-Path -Path $logDir)) {
|
||||||
|
New-Item -ItemType Directory -Path $logDir -Force | Out-Null
|
||||||
|
}
|
||||||
|
Start-Transcript -Path $logFilePath -IncludeInvocationHeader -Force
|
||||||
|
|
||||||
|
try {
|
||||||
|
Write-Verbose "Script: $scriptName at $scriptPath"
|
||||||
|
Write-Verbose "Repository directory: $scriptDir"
|
||||||
|
Write-Verbose "Sync frequency: Every $frequencyMinutes minutes"
|
||||||
|
Write-Verbose "Log file: $logFilePath"
|
||||||
|
|
||||||
|
# Run as the user who executes this script.
|
||||||
|
$taskPrincipal = New-ScheduledTaskPrincipal -UserId $env:USERNAME -LogonType Interactive
|
||||||
|
$repetitionInterval = New-TimeSpan -Minutes $frequencyMinutes
|
||||||
|
$trigger = New-ScheduledTaskTrigger -Once -At (Get-Date) -RepetitionInterval $repetitionInterval
|
||||||
|
$action = New-ScheduledTaskAction -Execute $taskExecute -Argument $taskArguments
|
||||||
|
$settings = New-ScheduledTaskSettingsSet -ExecutionTimeLimit $(New-TimeSpan -Seconds $timeLimitSeconds)
|
||||||
|
Write-Verbose "Task name: $taskName"
|
||||||
|
Write-Verbose "Description: $taskDescription"
|
||||||
|
Write-Verbose "Execute: $taskExecute"
|
||||||
|
Write-Verbose "Arguments: $taskArguments"
|
||||||
|
Write-Verbose "Frequency: $frequencyMinutes minutes"
|
||||||
|
Write-Verbose "Time limit: $timeLimitSeconds seconds"
|
||||||
|
Write-Verbose "Trigger: $trigger"
|
||||||
|
Write-Verbose "Action: $action"
|
||||||
|
Write-Verbose "Principal: $taskPrincipal"
|
||||||
|
Write-Verbose "Settings: $settings"
|
||||||
|
|
||||||
|
# Check and configure the scheduled task
|
||||||
|
try {
|
||||||
|
$existingTask = Get-ScheduledTask -TaskName $taskName -ErrorAction SilentlyContinue
|
||||||
|
|
||||||
|
if ($existingTask) {
|
||||||
|
Write-Verbose "Scheduled task '$taskName' already exists. Checking configuration..."
|
||||||
|
$currentTrigger = $existingTask.Triggers[0]
|
||||||
|
$currentAction = $existingTask.Actions[0]
|
||||||
|
|
||||||
|
# Check Trigger
|
||||||
|
Write-Verbose "Checking trigger..."
|
||||||
|
$triggerMatches = $false
|
||||||
|
if ($currentTrigger -is [Microsoft.Management.Infrastructure.CimInstance] `
|
||||||
|
-and $currentTrigger.Repetition.Interval -eq $trigger.Repetition.Interval) {
|
||||||
|
$triggerMatches = $true
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Write-Warning "trigger does not match:`n $(Compare-Object -IncludeEqual -ReferenceObject $currentTrigger -DifferenceObject $trigger)"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check Action
|
||||||
|
Write-Verbose "Checking action..."
|
||||||
|
$actionMatches = $false
|
||||||
|
if ($currentAction -is [Microsoft.Management.Infrastructure.CimInstance] `
|
||||||
|
-and $currentAction.Execute -eq $taskExecute `
|
||||||
|
-and $currentAction.Arguments -eq $taskArguments) {
|
||||||
|
$actionMatches = $true
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Write-Warning "action does not match:"
|
||||||
|
Write-Warning " Current action: $($currentAction.Execute) $($currentAction.Arguments)"
|
||||||
|
Write-Warning " Expected action: $taskExecute $taskArguments"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check Principal
|
||||||
|
Write-Verbose "Checking principal..."
|
||||||
|
$principalMatches = ($existingTask.Principal.UserId -eq $taskPrincipal.UserId)
|
||||||
|
|
||||||
|
# Check Settings (specifically ExecutionTimeLimit for this change)
|
||||||
|
$settingsMatch = $false
|
||||||
|
if ($existingTask.Settings.ExecutionTimeLimit -eq $settings.ExecutionTimeLimit) {
|
||||||
|
$settingsMatch = $true
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Write-Warning "settings do not match: want $($settings.ExecutionTimeLimit), got $($existingTask.Settings.ExecutionTimeLimit)"
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($triggerMatches -and $actionMatches -and $principalMatches -and $settingsMatch) {
|
||||||
|
Write-Verbose "Scheduled task '$taskName' is already correctly configured."
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Write-Verbose "Scheduled task '$taskName' configuration differs."
|
||||||
|
Write-Verbose "`$triggerMatches: $triggerMatches, `$actionMatches: $actionMatches, `$principalMatches: $principalMatches, `$settingsMatch: $settingsMatch"
|
||||||
|
Write-Verbose "Attempting to update in-place..."
|
||||||
|
try {
|
||||||
|
Set-ScheduledTask -TaskName $taskName -Action $action -Trigger $trigger -Settings $settings -Principal $taskPrincipal -ErrorAction Stop
|
||||||
|
Write-Verbose "Scheduled task '$taskName' updated successfully."
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
Write-Warning "Failed to update scheduled task '$taskName' in-place. Error: $($_.Exception.Message)"
|
||||||
|
Write-Warning "The task remains in its previous state. Manual intervention may be required or re-run with Administrator privileges."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Write-Verbose "Creating scheduled task '$taskName'..."
|
||||||
|
try {
|
||||||
|
Register-ScheduledTask -TaskName $taskName -Description $taskDescription -Principal $taskPrincipal -Trigger $trigger -Action $action -Settings $settings -ErrorAction Stop
|
||||||
|
Write-Verbose "Scheduled task '$taskName' created successfully."
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
Write-Warning "Failed to create scheduled task '$taskName'. Error: $($_.Exception.Message)"
|
||||||
|
Write-Warning "You may need to run this script as Administrator."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
# This outer catch is for unexpected errors, e.g., if Get-ScheduledTask had -ErrorAction Stop
|
||||||
|
Write-Warning "An unexpected error occurred during scheduled task setup for '$taskName'. Error: $($_.Exception.Message)"
|
||||||
|
}
|
||||||
|
|
||||||
|
# --- Git Operations ---
|
||||||
|
Write-Information "Navigating to repository: $scriptDir"
|
||||||
|
try {
|
||||||
|
Set-Location -Path $scriptDir -ErrorAction Stop
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
Write-Error "Unable to find repository at $scriptDir. Exiting script."
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Information "Staging all changes with 'git add .'"
|
||||||
|
git add .
|
||||||
|
if ($LASTEXITCODE -ne 0) {
|
||||||
|
Write-Warning "'git add .' command failed with exit code $LASTEXITCODE."
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Information "Checking for staged changes with 'git diff --staged --quiet'..."
|
||||||
|
git diff --staged --quiet
|
||||||
|
$changesStaged = ($LASTEXITCODE -ne 0)
|
||||||
|
|
||||||
|
if ($changesStaged) {
|
||||||
|
Write-Information "Staged changes detected. Creating commit..."
|
||||||
|
$commitMessage = "$scriptName ($($env:COMPUTERNAME)) $(Get-Date -Format 'yyyy-MM-ddTHH:mm:ssZ')"
|
||||||
|
Write-Information "Commit message: $commitMessage"
|
||||||
|
git commit -m $commitMessage
|
||||||
|
if ($LASTEXITCODE -ne 0) {
|
||||||
|
Write-Warning "'git commit' command failed with exit code $LASTEXITCODE."
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Write-Information "Commit created successfully."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Write-Information "No relevant changes detected to commit."
|
||||||
|
Write-Information "Resetting staging area with 'git reset HEAD --quiet'."
|
||||||
|
git reset HEAD --quiet
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Information "Updating remote 'origin' with 'git remote update origin --prune'..."
|
||||||
|
git remote update origin --prune
|
||||||
|
if ($LASTEXITCODE -ne 0) {
|
||||||
|
Write-Error "Unable to update remote 'origin'. Exiting script."
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
$localCommit = (git rev-parse HEAD 2>$null).Trim()
|
||||||
|
if ($LASTEXITCODE -ne 0 -or -not $localCommit) { Write-Error "Failed to get local HEAD commit. Exiting script."; exit 1 }
|
||||||
|
|
||||||
|
$remoteBranch = "origin/main"
|
||||||
|
$remoteCommit = (git rev-parse $remoteBranch 2>$null).Trim()
|
||||||
|
if ($LASTEXITCODE -ne 0 -or -not $remoteCommit) { Write-Error "Failed to get remote '$remoteBranch' commit. Exiting script."; exit 1 }
|
||||||
|
|
||||||
|
Write-Information "Local HEAD commit: $localCommit"
|
||||||
|
Write-Information "Remote '$remoteBranch' commit: $remoteCommit"
|
||||||
|
|
||||||
|
if ($localCommit -eq $remoteCommit) {
|
||||||
|
Write-Information "Local and remote are already in sync."
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
|
||||||
|
$sleepyTime = Get-Random -Minimum 1 -Maximum 15
|
||||||
|
Write-Information "Local and remote differ. Sleeping for $sleepyTime seconds..."
|
||||||
|
Start-Sleep -Seconds $sleepyTime
|
||||||
|
|
||||||
|
$localCommitAfterSleep = (git rev-parse HEAD 2>$null).Trim()
|
||||||
|
if ($LASTEXITCODE -ne 0 -or -not $localCommitAfterSleep) { Write-Error "Failed to re-get local HEAD commit. Exiting script."; exit 1 }
|
||||||
|
$remoteCommitAfterSleep = (git rev-parse $remoteBranch 2>$null).Trim()
|
||||||
|
if ($LASTEXITCODE -ne 0 -or -not $remoteCommitAfterSleep) { Write-Error "Failed to re-get remote '$remoteBranch' commit. Exiting script."; exit 1 }
|
||||||
|
|
||||||
|
if ($localCommitAfterSleep -eq $remoteCommitAfterSleep) {
|
||||||
|
Write-Information "Local and remote became synchronized during sleep."
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
$localCommit = $localCommitAfterSleep
|
||||||
|
$remoteCommit = $remoteCommitAfterSleep
|
||||||
|
|
||||||
|
Write-Information "Proceeding with sync logic..."
|
||||||
|
|
||||||
|
git merge-base --is-ancestor $localCommit $remoteCommit
|
||||||
|
$localIsAncestorOfRemote = ($LASTEXITCODE -eq 0)
|
||||||
|
|
||||||
|
git merge-base --is-ancestor $remoteCommit $localCommit
|
||||||
|
$remoteIsAncestorOfLocal = ($LASTEXITCODE -eq 0)
|
||||||
|
|
||||||
|
if ($localIsAncestorOfRemote) {
|
||||||
|
Write-Information "Remote '$remoteBranch' is ahead. Pulling with rebase..."
|
||||||
|
git pull --rebase origin main
|
||||||
|
if ($LASTEXITCODE -ne 0) { Write-Error "'git pull --rebase' failed. Manual intervention may be required."; exit 1 }
|
||||||
|
}
|
||||||
|
elseif ($remoteIsAncestorOfLocal) {
|
||||||
|
Write-Information "Local HEAD is ahead. Pushing..."
|
||||||
|
git push origin main
|
||||||
|
if ($LASTEXITCODE -ne 0) { Write-Error "'git push' failed. Manual intervention may be required."; exit 1 }
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Write-Information "Local HEAD and remote '$remoteBranch' have diverged."
|
||||||
|
$remoteTimestampStr = (git log --pretty=format:"%at" -n 1 $remoteBranch 2>$null).Trim()
|
||||||
|
if ($LASTEXITCODE -ne 0 -or -not $remoteTimestampStr) { Write-Error "Failed to get remote commit timestamp for '$remoteBranch'. Exiting script."; exit 1 }
|
||||||
|
$remoteTimestamp = [long]$remoteTimestampStr
|
||||||
|
|
||||||
|
$localTimestampStr = (git log --pretty=format:"%at" -n 1 HEAD 2>$null).Trim()
|
||||||
|
if ($LASTEXITCODE -ne 0 -or -not $localTimestampStr) { Write-Error "Failed to get local commit timestamp for HEAD. Exiting script."; exit 1 }
|
||||||
|
$localTimestamp = [long]$localTimestampStr
|
||||||
|
|
||||||
|
Write-Verbose "Local timestamp: $localTimestamp, Remote timestamp: $remoteTimestamp"
|
||||||
|
|
||||||
|
if ($remoteTimestamp -gt $localTimestamp) {
|
||||||
|
Write-Information "Remote is newer. Pulling with rebase, strategy 'theirs'..."
|
||||||
|
git pull --rebase --strategy recursive --strategy-option theirs origin main
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Write-Information "Local is newer or same age. Pulling with rebase, strategy 'ours'..."
|
||||||
|
git pull --rebase --strategy recursive --strategy-option ours origin main
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($LASTEXITCODE -ne 0) { Write-Error "Rebase during divergence failed. Manual intervention may be required."; exit 1 }
|
||||||
|
|
||||||
|
Write-Information "Pushing changes after rebase..."
|
||||||
|
git push origin main
|
||||||
|
if ($LASTEXITCODE -ne 0) { Write-Error "'git push' after rebase failed. Manual intervention may be required."; exit 1 }
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Information "Synchronization process completed successfully."
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
Stop-Transcript
|
||||||
|
}
|
||||||
110
foam_sync.sh
Normal file
110
foam_sync.sh
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# debug script
|
||||||
|
set -x
|
||||||
|
|
||||||
|
# These are the only lines that should require updating
|
||||||
|
frequency_mins=2
|
||||||
|
|
||||||
|
# These values are automatically determined based on the scipt path
|
||||||
|
sync_script=$(readlink -f "${BASH_SOURCE[0]}")
|
||||||
|
script_dir=$(dirname "$sync_script")
|
||||||
|
cronjob="*/${frequency_mins} * * * * ${sync_script}"
|
||||||
|
script_name=$(basename "$sync_script")
|
||||||
|
|
||||||
|
# Get current crontab content, suppress error if crontab is empty
|
||||||
|
current_crontab=$(crontab -l 2>/dev/null)
|
||||||
|
|
||||||
|
# Check if the exact cron job already exists using fixed string (-F) and whole line (-x) match
|
||||||
|
if echo "$current_crontab" | grep -Fxq "$cronjob"; then
|
||||||
|
echo "${script_name} cron job is already correctly configured."
|
||||||
|
else
|
||||||
|
echo "${script_name} cron job needs update or addition."
|
||||||
|
|
||||||
|
# Use command grouping to construct the new crontab content:
|
||||||
|
# 1. List current crontab (or nothing if empty), suppressing errors.
|
||||||
|
# 2. Filter out any existing lines related to this specific script.
|
||||||
|
# 3. Echo the desired cron job line.
|
||||||
|
{ crontab -l 2>/dev/null | grep -v "$sync_script"; echo "$cronjob"; } | crontab -
|
||||||
|
update_result=$?
|
||||||
|
|
||||||
|
if [[ $update_result -eq 0 ]]; then
|
||||||
|
echo "cron job updated/added successfully."
|
||||||
|
else
|
||||||
|
echo "Warning: Failed to update crontab." >&2
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# navigate to the repo
|
||||||
|
cd "${script_dir}" || (echo 'unable to find repo' && exit 1)
|
||||||
|
|
||||||
|
# if this is macos, make sure '/usr/local/git/git-google/bin' is in $PATH
|
||||||
|
if [[ "$OSTYPE" == "darwin"* ]]; then
|
||||||
|
if ! echo "$PATH" | grep -q "/usr/local/git/git-google/bin"; then
|
||||||
|
export PATH="/usr/local/git/git-google/bin:$PATH"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Stage ALL changes, including new files and modifications
|
||||||
|
git add .
|
||||||
|
|
||||||
|
# Check if there are any *meaningful* staged changes (respecting diff filters)
|
||||||
|
# git diff --staged --quiet exits with 0 if NO differences, 1 if differences exist.
|
||||||
|
# The '!' negates the exit status, so the 'if' block runs if there ARE differences.
|
||||||
|
if ! git diff --staged --quiet; then
|
||||||
|
# Only commit if there are staged changes visible after filtering
|
||||||
|
echo "Staged changes detected, creating commit..."
|
||||||
|
# Use -m because we already staged everything with 'git add .'
|
||||||
|
git commit -m "${script_name} ($(hostname -s)) $(date +"%Y-%m-%dT%H:%M:%SZ")"
|
||||||
|
else
|
||||||
|
echo "No relevant changes detected to commit (changes might be filtered)."
|
||||||
|
# Optional but recommended: Reset the index if the only staged changes were filtered out.
|
||||||
|
# This prevents the file from showing as "changes staged for commit" on a later 'git status'
|
||||||
|
# if only the filtered line was changed and staged by 'git add .'.
|
||||||
|
git reset HEAD --quiet
|
||||||
|
fi
|
||||||
|
|
||||||
|
# make sure we are authenticated with git origin
|
||||||
|
if ! git remote update origin --prune; then
|
||||||
|
echo 'unable to authenticate to remote'
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
local_commit=$(git rev-parse HEAD)
|
||||||
|
remote_commit=$(git rev-parse origin/main)
|
||||||
|
|
||||||
|
if [[ "$local_commit" != "$remote_commit" ]]; then
|
||||||
|
# sleep for a random time between 1-45 seconds to avoid collisions
|
||||||
|
sleepy_time=$(( ( RANDOM % 45 ) + 1 ))
|
||||||
|
echo "sleeping for $sleepy_time seconds..."
|
||||||
|
sleep $sleepy_time
|
||||||
|
else
|
||||||
|
echo 'no pending changes to sync, exiting...'
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# which is newer, our code or the origin?
|
||||||
|
local_commit=$(git rev-parse HEAD)
|
||||||
|
remote_commit=$(git rev-parse origin/main)
|
||||||
|
|
||||||
|
if [[ "$local_commit" == "$remote_commit" ]]; then
|
||||||
|
echo "local and remote are in sync"
|
||||||
|
elif git merge-base --is-ancestor "$local_commit" "$remote_commit"; then
|
||||||
|
echo "remote is ahead of local"
|
||||||
|
git pull --rebase origin main
|
||||||
|
elif git merge-base --is-ancestor "$remote_commit" "$local_commit"; then
|
||||||
|
echo "local is ahead of remote"
|
||||||
|
git push origin main
|
||||||
|
else
|
||||||
|
echo "local and remote have diverged"
|
||||||
|
# if remote is newer, use a 'theirs' strategy
|
||||||
|
if [[ $(git log --pretty=format:"%at" -n 1 origin/main) -gt $(git log --pretty=format:"%at" -n 1 HEAD) ]]; then
|
||||||
|
echo "remote is newer"
|
||||||
|
git pull --rebase --strategy recursive --strategy-option theirs origin main
|
||||||
|
else
|
||||||
|
echo "local is newer"
|
||||||
|
git pull --rebase --strategy recursive --strategy-option ours origin main
|
||||||
|
fi
|
||||||
|
git push origin main
|
||||||
|
fi
|
||||||
|
|
||||||
5
gitea.md
Normal file
5
gitea.md
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
# gitea
|
||||||
|
|
||||||
|
user:pass is `compose:compose` for now, used docker compose template
|
||||||
|
|
||||||
|
external access for SSH is `ssh://git@git.hobbithole.org:4222`
|
||||||
16
home improvement.md
Normal file
16
home improvement.md
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
# home improvement
|
||||||
|
|
||||||
|
## trailer
|
||||||
|
|
||||||
|
* [Trailers - Boulder County](https://bouldercounty.gov/records/motor-vehicle/trailers/)
|
||||||
|
* https://csp.colorado.gov/services-we-provide/get-a-vin-inspection
|
||||||
|
*
|
||||||
|
|
||||||
|
## hvac
|
||||||
|
|
||||||
|
* Fresh air
|
||||||
|
* [Heat recovery ventilation - Wikipedia](https://en.wikipedia.org/wiki/Heat_recovery_ventilation)
|
||||||
|
* [Reddit - The heart of the internet](https://www.reddit.com/r/buildingscience/comments/18z9q0w/window_energy_recovery_ventilator_diy/)
|
||||||
|
* Zones
|
||||||
|
* [Amazon.com: AC Infinity 8” Backdraft Damper, One-Way Airflow Ducting Insert with Spring-Loaded Folding Blades for 8” Ducting in Range Hoods and Bathrooms Fans : Tools & Home Improvement](https://www.amazon.com/AC-Infinity-Backdraft-Spring-Loaded-Bathrooms/dp/B0842Y637Z/ref=sr_1_8?crid=1PPHHLXZ8LID4&keywords=8%2Bin%2Bspring%2Bloaded%2Bbackdraft%2Bdamper&qid=1640711102&s=hi&sprefix=8in%2Bspring%2Bloaded%2Bbackdraft%2Bdamper%2Ctools%2C76&sr=1-8&th=1)
|
||||||
|
* [Tamarack TTi-cbd8 8 In. Backdraft Damper - Ceiling Fans - Amazon.com](https://www.amazon.com/Tamarack-TTi-CBD8-Cape-Backdraft-Damper/dp/B008D7L8H6?th=1)
|
||||||
11
homefoam.code-workspace
Normal file
11
homefoam.code-workspace
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"folders": [
|
||||||
|
{
|
||||||
|
"path": "."
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"settings": {
|
||||||
|
"foam.edit.linkReferenceDefinitions": "withExtensions",
|
||||||
|
"gitdoc.enabled": false
|
||||||
|
}
|
||||||
|
}
|
||||||
175
homelab.md
Normal file
175
homelab.md
Normal file
@ -0,0 +1,175 @@
|
|||||||
|
# homelab
|
||||||
|
|
||||||
|
* OPNsense firewall: https://opnsense.hh.lan:8443
|
||||||
|
* 192.168.86.45
|
||||||
|
* Proxmox virtualization cluster: https://proxmox1.hh.lan
|
||||||
|
|
||||||
|
## services
|
||||||
|
|
||||||
|
* HomeAssistant home automation
|
||||||
|
* http://homeassistant.local:8123/
|
||||||
|
* https://ha.hh.lan
|
||||||
|
* Frigate NVR (security cameras): https://frigate.local:8971
|
||||||
|
* Paperless document repository
|
||||||
|
* https://paperless.hobbithole.org
|
||||||
|
* https://paperless.hh.lan
|
||||||
|
|
||||||
|
### Gitea
|
||||||
|
|
||||||
|
* https://git.hobbithole.org
|
||||||
|
* http://gitea.hh.lan:3000
|
||||||
|
* SSH key stored in bitwarden
|
||||||
|
* used `docker-compose-template` VM template
|
||||||
|
* Moved host `sshd` to `tcp:2222` so gitea container can use `tcp:22`
|
||||||
|
|
||||||
|
## things to set up
|
||||||
|
|
||||||
|
* Network UPS Tool? (NUT)
|
||||||
|
* Monitor reservoir levels
|
||||||
|
* https://dwr.state.co.us/Tools/StationsLite/UNIRESCO?params=STORAGE
|
||||||
|
* Caddy
|
||||||
|
* Authentik
|
||||||
|
* Proxmox backup
|
||||||
|
* CrashPlan (or other backup service)
|
||||||
|
* [Proxmox Crashplan](https://nguvu.org/proxmox/proxmox-crashplan-install/)
|
||||||
|
* https://github.com/nix-community/terraform-nixos/blob/master/examples/hermetic_config/default.tf
|
||||||
|
* https://spacelift.io/blog/terraform-proxmox-provider#5-run-terraform-to-create-the-vm
|
||||||
|
* Home auth
|
||||||
|
* Windows auth
|
||||||
|
* SSO access to services
|
||||||
|
* Bitwarden self-hosted org
|
||||||
|
* [Self-host an Organization](https://bitwarden.com/help/self-host-an-organization/)
|
||||||
|
* OpenBao (Vault fork) - https://openbao.org/docs/install/
|
||||||
|
|
||||||
|
## things to research
|
||||||
|
|
||||||
|
* Pangolin
|
||||||
|
* Suricata
|
||||||
|
* [Wiki.js](https://js.wiki/)
|
||||||
|
* Komodo
|
||||||
|
* https://github.com/moghtech/komodo
|
||||||
|
* 🦎 a tool to build and deploy software on many servers 🦎
|
||||||
|
* headscale / tailscale
|
||||||
|
* [GitHub - juanfont/headscale: An open source, self-hosted implementation of the Tailscale control server](https://github.com/juanfont/headscale)
|
||||||
|
* [Tailscale · Best VPN Service for Secure Networks](https://tailscale.com/)
|
||||||
|
|
||||||
|
### Home auth
|
||||||
|
|
||||||
|
## Hardware
|
||||||
|
|
||||||
|
* unnamed switch (TODO)
|
||||||
|
* [Mikrotik CSS318-16G-2S+IN](https://mikrotik.com/product/css318_16g_2s_in#fndtn-downloads)
|
||||||
|
* SwOS management interface: http://192.168.86.54
|
||||||
|
* [manual](https://help.mikrotik.com/docs/spaces/SWOS/pages/76415036/CRS3xx+and+CSS326-24G-2S+series+Manual#CRS3xxandCSS32624G2S+seriesManual-LAG)
|
||||||
|
* proxmox1
|
||||||
|
* Beelink Mini PC EQi12, Intel Core 1220P(Max 4.4GHz 10C/12T), 16GB DDR4 500GB PCle4.0 SSD Mini Computers,Dual LAN/Wifi6/BT5.2,Dual 4K Display,Built-in Power Supply Office PC
|
||||||
|
* proxmox2
|
||||||
|
* Beelink Mini PC EQi12, Intel Core 1220P(Max 4.4GHz 10C/12T), 16GB DDR4 500GB PCle4.0 SSD Mini Computers,Dual LAN/Wifi6/BT5.2,Dual 4K Display,Built-in Power Supply Office PC
|
||||||
|
* proxmox3
|
||||||
|
* Beelink Mini PC EQi12, Intel Core 1220P(Max 4.4GHz 10C/12T), 16GB DDR4 500GB PCle4.0 SSD Mini Computers,Dual LAN/Wifi6/BT5.2,Dual 4K Display,Built-in Power Supply Office PC
|
||||||
|
* frigate
|
||||||
|
* Beelink EQ14 Mini PC, Intel Twin Lake N150(Up to 3.6GHz) 16GB DDR4 500GB NVMe SSD, 2.5G Dual LAN Mini Computer Supports WiFi6, BT5.2, USB3.2, 4K@60Hz Dual HDMI Display, Home-Server/Network Firewall
|
||||||
|
|
||||||
|
## Network
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
graph TD;
|
||||||
|
internet((Internet))<-->nest_wifi_pro(Nest Wifi Pro);
|
||||||
|
nest_wifi_pro<-->mikrotik;
|
||||||
|
mikrotik<==>LACP(LACP/VLAN trunk);
|
||||||
|
vlan42("vlan42 (home)");
|
||||||
|
vlan86("vlan86 (wifi)");
|
||||||
|
vlan60("vlan60 (work)");
|
||||||
|
vlan200("vlan200 (services)");
|
||||||
|
LACP<-->vlan42;
|
||||||
|
LACP<-->vlan60;
|
||||||
|
LACP<-->vlan86;
|
||||||
|
LACP<-->vlan200;
|
||||||
|
vlan42<-->proxmox_eth0[eth0]<-->proxmox;
|
||||||
|
vlan42<-->proxmox_eth1[eth1]<-->proxmox;
|
||||||
|
vlan60<-->proxmox_eth0[eth0]<-->proxmox;
|
||||||
|
vlan60<-->proxmox_eth1[eth1]<-->proxmox;
|
||||||
|
vlan86<-->proxmox_eth0[eth0]<-->proxmox;
|
||||||
|
vlan86<-->proxmox_eth1[eth1]<-->proxmox;
|
||||||
|
vlan200<-->proxmox_eth0[eth0]<-->proxmox;
|
||||||
|
vlan200<-->proxmox_eth1[eth1]<-->proxmox;
|
||||||
|
proxmox<-->bond0<-->vmbr0<-->VMs;
|
||||||
|
vlan200<-->vault_eth3[eth3]<-->vault;
|
||||||
|
vlan200<-->vault_eth4[eth4]<-->vault;
|
||||||
|
```
|
||||||
|
|
||||||
|
### DNS
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
graph LR;
|
||||||
|
internet((Internet))<-->porkbun;
|
||||||
|
porkbun<-->hobbithole_org(hobbithole.org);
|
||||||
|
hobbithole_org<-->opnsense;
|
||||||
|
opnsense<-->caddy;
|
||||||
|
caddy<-->vault;
|
||||||
|
caddy<-->proxmox;
|
||||||
|
opnsense<-->hh_lan(hh.lan)<-->bind<-->unbound;
|
||||||
|
unbound<-->vault;
|
||||||
|
unbound<-->proxmox;
|
||||||
|
proxmox[proxmox + VMs];
|
||||||
|
```
|
||||||
|
|
||||||
|
* External domain: `hobbithole.org`
|
||||||
|
* Hosted on SquareSpace, about to move over to PorkBun
|
||||||
|
* Transfer requested [[2025-06-15]]
|
||||||
|
* Email forwarding
|
||||||
|
* gandalf@hobbithole.org --> gibsta@gmail.com
|
||||||
|
* treasury@hobbithole.org --> hobbitholetreasury@googlegroups.com
|
||||||
|
* Records
|
||||||
|
|
||||||
|
| Host | Type | Priority | TTL | Data |
|
||||||
|
| -------------- | ----- | -------- | ----- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||||
|
| @ | A | N/A | 4 hrs | 66.186.208.83 |
|
||||||
|
| backup | CNAME | N/A | 4 hrs | hobbithole.org |
|
||||||
|
| frigate | CNAME | N/A | 4 hrs | hobbithole.org |
|
||||||
|
| home | CNAME | N/A | 4 hrs | hobbithole.org |
|
||||||
|
| nestmtx | CNAME | N/A | 4 hrs | hobbithole.org |
|
||||||
|
| radarr | CNAME | N/A | 4 hrs | hobbithole.org |
|
||||||
|
| sab | CNAME | N/A | 4 hrs | hobbithole.org |
|
||||||
|
| sonarr | CNAME | N/A | 4 hrs | hobbithole.org |
|
||||||
|
| tv | CNAME | N/A | 4 hrs | hobbithole.org |
|
||||||
|
| vault | CNAME | N/A | 4 hrs | hobbithole.org |
|
||||||
|
| y3t4fz4ttvom | CNAME | N/A | 4 hrs | gv-3ccjjbudvp5ki7.dv.googlehosted.com |
|
||||||
|
| @ | MX | N/A | 4 hrs | mxa.mailgun.org |
|
||||||
|
| @ | MX | N/A | 4 hrs | mxb.mailgun.org |
|
||||||
|
| @ | TXT | N/A | 4 hrs | v=spf1 include:mailgun.org ~all |
|
||||||
|
| krs._domainkey | TXT | N/A | 4 hrs | k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDDjzUREnJNjiTg2oKAUdaFixMkblPmbiQTW2kinGFIFji16qN50L02DyBxanRz9Z2IK/uhLJ0I4angMTuSr338/ZE6xfjuJIqNMIOw0kgPnxo4qj5HxDiygUSbLHuxMnWzlOddzGgHpytPgpk9gYlw3b2Tt0K5Ym20ie7GaAXv+QIDAQAB |
|
||||||
|
|
||||||
|
* Internal domain: `hh.lan`
|
||||||
|
* Unbound transparent domain --> BIND authoritative domain
|
||||||
|
* Hosted on OPNsense
|
||||||
|
*
|
||||||
|
|
||||||
|
* hobby domains
|
||||||
|
* Transferring to Porkbun
|
||||||
|
* b3n.ooo
|
||||||
|
* benmiller.xyz
|
||||||
|
* beepmill.com
|
||||||
|
|
||||||
|
### IPAM
|
||||||
|
|
||||||
|
* wifi: `192.168.86.0/24`
|
||||||
|
* home: `192.168.42.0/24`
|
||||||
|
* services: `192.168.200.0/24`
|
||||||
|
* work: `172.16.60.0/24`
|
||||||
|
|
||||||
|
## Proxmox
|
||||||
|
|
||||||
|
### Hosts
|
||||||
|
|
||||||
|
* `proxmox1.hh.lan`
|
||||||
|
* 192.168.200.101
|
||||||
|
* `proxmox2.hh.lan`
|
||||||
|
* 192.168.200.102
|
||||||
|
* `proxmox3.hh.lan`
|
||||||
|
* 192.168.200.103
|
||||||
|
|
||||||
|
|
||||||
|
[//begin]: # "Autogenerated link references for markdown compatibility"
|
||||||
|
[2025-06-15]: 2025-06-15.md "2025-06-15"
|
||||||
|
[//end]: # "Autogenerated link references"
|
||||||
BIN
image-1.png
Normal file
BIN
image-1.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.9 MiB |
31
keyboards.md
Normal file
31
keyboards.md
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
# keyboards
|
||||||
|
|
||||||
|
* [Cosmos Keyboard](https://ryanis.cool/cosmos/) - keyboard customizer
|
||||||
|
* [First attempt](https://ryanis.cool/cosmos/beta#cm:Cp8BChUSBRCAbyAnEgASABIAOB5AgIaKwAcKGRIFEIBjICcSABIAEgMQsDsSAxCwazgKQAAKHBIFEIBXICcSABIAEgMQsC8SAxCwXzgJQIDwvAIKERIFEIBLICcSABIAEgA4HUAAChESBRCAPyAnEgASABIAODFAAAoYEgIgJxIAEgQQoIAKEgIQMDgyQICGisAHGABA6IWgrvBVSNyMq9ABCmcKChIFEEBQ8gI4wAwKCxIGEMCAAiAoOKgUCgkSBBBAICg4kBwKCxIGEEAgKEAAOPgjChgSEhBAIAAwyAFAgICADUiAgLCsATAWOAAYCiIKCMgBEMgBGAAgAEDbkaSc8DdIhI+U1qB4CpUBCnYSFgiAMBDAgAIgAECMhdiWEEiNhYC43Q0SEwiAMBBAIABAmcSWCEiNhYC43Q0SDyAAQK6F3ANImYmIntDcEBIQIABA4YPY0AFI6ZOgl5DwERIPIABA0OKPOEiDj6CXkL0SEhEgAEDvhbyXsAFI4Z3QjbDYEjgAGAMiCgjIARDIARgAIABAno3MrPAzSKap3MaAtAgYhCCCAQIEAmAD)
|
||||||
|
* Svalboard
|
||||||
|
* https://svalboard.com/
|
||||||
|
* Characorder
|
||||||
|
* Control panel: https://charachorder.io/
|
||||||
|
* Practice: https://www.iq-eq.io/#/
|
||||||
|
*
|
||||||
|
|
||||||
|
## Custom Build 1
|
||||||
|
|
||||||
|
* Dactyl Manuform style built with Cosmos Keyboard Configurator
|
||||||
|
* https://ryanis.cool/cosmos/beta#cm:Cn4KDxIFEJBBIBMSABIAODFAAAoPEgUQkE0gExIAEgA4HUAAChsSBRCQWSATEgASAxCwLxIDELBfOAlAgPCG+AEKGRIFEJBlIBMSABIDELA7EgMQsGs4CkCAgAwKExIFEJBxIBMSABIAOB5AgJqL0AIYAEDqhaCu8FVI3Iyr0AEKaAoXEhMQwIACQICAmAJIwpmglZC8AVBDOAgKFRIQEEBAgIAgSNCVgN2Q9QNQC1CeAgoUEhAQQECAgPgBSOaZ/KeQC1BXUH8KA1CCAhgCIgoIyAEQyAEYACAAQMuL/J/QMUitkdyNwZMGCngKDxIFEJA1IBMSABIAODJAAAoPEgUQkCkgExIAEgA4HkAAChgSBRCQHSATEgASABIDELBfOApAgISK2AIKFhIFEJARIBMSABIAEgMQsGs4CUCA6DQKExIFEJAFIBMSABIAOB1AgJqOsAMYAUDphaCu8FVI3IqryAEKaQoXEhMQwIACQICAmAJIwpmclaC8AVBDOAcKFRIQEEBAgIAgSNCV/Nyg9QNQC1CdAgoVEhAQQECAgPgBSOaZgKygC1BXUIABCgNQgQIYAyIKCMgBEMgBGAAgAEDMi/yf0DFIrZHgjbGTBiIDIK4NggEKAJ4FyAFllwEBAlhCYANoAPoBCRCIDhg8KGQoMg==
|
||||||
|
* https://www.printables.com/model/158559-handwire-hot-swap-socket-for-mechanical-keyboard-s
|
||||||
|
* `G:\My Drive\making\files\cosmotyl`
|
||||||
|
|
||||||
|
### Wiring
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
* https://ryanis.cool/cosmos/docs/qmk-rp2040/#wire-the-keyboard
|
||||||
|
*
|
||||||
|
|
||||||
|
|
||||||
|
## Training
|
||||||
|
|
||||||
|
* https://typecelerate.com/
|
||||||
29
local-ai-beepmill.code-workspace
Normal file
29
local-ai-beepmill.code-workspace
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"folders": [
|
||||||
|
{
|
||||||
|
"path": "../local-ai-beepmill"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"settings": {
|
||||||
|
"workbench.colorCustomizations": {
|
||||||
|
"activityBar.activeBackground": "#982a11",
|
||||||
|
"activityBar.background": "#982a11",
|
||||||
|
"activityBar.foreground": "#e7e7e7",
|
||||||
|
"activityBar.inactiveForeground": "#e7e7e799",
|
||||||
|
"activityBarBadge.background": "#031d08",
|
||||||
|
"activityBarBadge.foreground": "#e7e7e7",
|
||||||
|
"commandCenter.border": "#e7e7e799",
|
||||||
|
"sash.hoverBorder": "#982a11",
|
||||||
|
"statusBar.background": "#6a1d0c",
|
||||||
|
"statusBar.foreground": "#e7e7e7",
|
||||||
|
"statusBarItem.hoverBackground": "#982a11",
|
||||||
|
"statusBarItem.remoteBackground": "#6a1d0c",
|
||||||
|
"statusBarItem.remoteForeground": "#e7e7e7",
|
||||||
|
"titleBar.activeBackground": "#6a1d0c",
|
||||||
|
"titleBar.activeForeground": "#e7e7e7",
|
||||||
|
"titleBar.inactiveBackground": "#6a1d0c99",
|
||||||
|
"titleBar.inactiveForeground": "#e7e7e799"
|
||||||
|
},
|
||||||
|
"peacock.color": "#6a1d0c"
|
||||||
|
}
|
||||||
|
}
|
||||||
81
making.md
Normal file
81
making.md
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
# making
|
||||||
|
|
||||||
|
## Collections
|
||||||
|
|
||||||
|
* https://makerworld.com/en/@beepmill/collections
|
||||||
|
* https://www.printables.com/@beepmill_1805142/collections
|
||||||
|
* [Gumroad](https://gumroad.com/library)
|
||||||
|
* https://cults3d.com/en/design-collections
|
||||||
|
* https://www.thingiverse.com/beepmill/collections
|
||||||
|
|
||||||
|
## Systems
|
||||||
|
|
||||||
|
* [Multiboard](https://multiboard.io)
|
||||||
|
* [NODE DOJO](https://www.node-dojo.com/)
|
||||||
|
* [Rebox Supporter](https://gumroad.com/d/2138fb54a49e2207e4f43c89d7e64d60)
|
||||||
|
* [Underware 2.0 – Infinite Cable Management – Hands on Katie](https://handsonkatie.com/underware-2-0-the-made-to-measure-collection/)
|
||||||
|
* [Underware 2.0 - Infinite Cable Management!](https://makerworld.com/en/models/783010-underware-2-0-infinite-cable-management#profileId-808979)
|
||||||
|
*
|
||||||
|
|
||||||
|
## Things to design
|
||||||
|
|
||||||
|
* Frit tray 
|
||||||
|
* 
|
||||||
|
* 5gal water bottle opal extension
|
||||||
|
* https://a.co/d/blahX4M
|
||||||
|
|
||||||
|
## Things to print
|
||||||
|
|
||||||
|
* https://thangs.com/designer/ForgeCore
|
||||||
|
* Desk plants
|
||||||
|
* Resin teeth #booloumud
|
||||||
|
* [Modern Gridifinity Case](https://www.printables.com/model/894202-modern-gridfinity-case)
|
||||||
|
* [Space Efficient Socket Holders - Gridfinity](https://www.printables.com/model/1101988-space-efficient-socket-holders-gridfinity/files)
|
||||||
|
* Printing metric [[2025-06-15]]
|
||||||
|
* Printing imperial [[2025-06-17]]
|
||||||
|
* [AMS Driven Rear Roller replacement](https://makerworld.com/en/models/80150-ams-driven-rear-roller-replacement#profileId-85113)
|
||||||
|
* Zip bag holder for spare parts etc
|
||||||
|
* Multiboard ziplog bag dispensers
|
||||||
|
* "Yours and Theirs" phone holder for RAV4
|
||||||
|
* Cupholder for RAV4
|
||||||
|
|
||||||
|
## Things that I've printed
|
||||||
|
|
||||||
|
* [[2025-07-01]] - [Rubber Duck straw cap for Stanley tumbler](https://makerworld.com/en/models/495619-rubber-duck-straw-cap-for-stanley-tumbler#profileId-409800)
|
||||||
|
* [[2025-06-30]] - https://www.printables.com/model/836037-earring-holder-earring-display-stand-t-shape
|
||||||
|
* [[2025-06-19]] - [Anti-Stress Spikeroll by Paul_Drosser - Thingiverse](https://www.thingiverse.com/thing:4575204)
|
||||||
|
* [[2025-06-18]] - [Lid Riser for Bambu Lab AMS](https://www.printables.com/model/602705-ams-lid-riser-for-bambu-lab-ams/comments)
|
||||||
|
* [[2025-06-18]] - [Bambu Lab AMS Ultimate Front Rollers](https://makerworld.com/en/models/452104-bambu-lab-ams-ultimate-front-rollers#profileId-359257)
|
||||||
|
* [[2025-06-15]] - https://makerworld.com/en/models/192760-multiboard-pliers-holder#profileId-213102
|
||||||
|
|
||||||
|
## Calibration guides
|
||||||
|
|
||||||
|
* [Ellis’ Print Tuning Guide](https://ellis3dp.com/Print-Tuning-Guide/)
|
||||||
|
* [J3DTech Guide to Resin 3D Printing - Google Docs](https://docs.google.com/document/d/1aoMSE6GBGMcoYXNGfPP9s_Jg8vr1wQmmZuvqP3suago/edit?tab=t.0#heading=h.gjdgxs)
|
||||||
|
* [Printer Calibration – Lychee Documentation](https://doc.mango3d.io/doc/printer-calibration/)
|
||||||
|
|
||||||
|
## Profiles
|
||||||
|
|
||||||
|
### Anycubic Photon M3 Plus
|
||||||
|
|
||||||
|
* Manual: https://paperless.hobbithole.org/share/fyqLOQ64q0UQBWwwI1RXRUvalNPpzrehYPkKax0ihZkErAmQwu
|
||||||
|
|
||||||
|
#### Build plate leveling
|
||||||
|
|
||||||
|
1. With resin tub and resin in, loosen build plate
|
||||||
|
2. Press Home
|
||||||
|
3. Press down with medium pressure, tighten in X pattern
|
||||||
|
4. Set `Z=0`
|
||||||
|
|
||||||
|
#### Standard Resin + White 50um
|
||||||
|
|
||||||
|
* Layer thickness
|
||||||
|
|
||||||
|
[//begin]: # "Autogenerated link references for markdown compatibility"
|
||||||
|
[2025-06-15]: 2025-06-15.md "2025-06-15"
|
||||||
|
[2025-06-17]: 2025-06-17.md "2025-06-17"
|
||||||
|
[2025-07-01]: 2025-07-01.md "2025-07-01"
|
||||||
|
[2025-06-30]: 2025-06-30.md "2025-06-30"
|
||||||
|
[2025-06-19]: 2025-06-19.md "2025-06-19"
|
||||||
|
[2025-06-18]: 2025-06-18.md "2025-06-18"
|
||||||
|
[//end]: # "Autogenerated link references"
|
||||||
5
opentofu.md
Normal file
5
opentofu.md
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
# opentofu
|
||||||
|
|
||||||
|
* https://search.opentofu.org/provider/bpg/proxmox/latest
|
||||||
|
* http://gitea.hh.lan:3000/ben/homelab_tofu
|
||||||
|
* GCS backend: [`gs://deskbound-mournful-synthetic4`](https://console.cloud.google.com/storage/browser/deskbound-mournful-synthetic4)
|
||||||
11
pool.md
Normal file
11
pool.md
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
---
|
||||||
|
created: 2025-06-28T14:27:34-06:00
|
||||||
|
modified: 2025-06-28T14:30:15-06:00
|
||||||
|
---
|
||||||
|
|
||||||
|
# pool
|
||||||
|
|
||||||
|
# upgrades TODO
|
||||||
|
|
||||||
|
* valve upgrade, pvc
|
||||||
|
* https://youtu.be/4gmdtYiSq9g?si=aD4ZbZJyZU8ngQHE
|
||||||
29
shopify_theme.code-workspace
Normal file
29
shopify_theme.code-workspace
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"folders": [
|
||||||
|
{
|
||||||
|
"path": "../shopify_theme"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"settings": {
|
||||||
|
"workbench.colorCustomizations": {
|
||||||
|
"activityBar.activeBackground": "#accc6e",
|
||||||
|
"activityBar.background": "#accc6e",
|
||||||
|
"activityBar.foreground": "#15202b",
|
||||||
|
"activityBar.inactiveForeground": "#15202b99",
|
||||||
|
"activityBarBadge.background": "#3a81a5",
|
||||||
|
"activityBarBadge.foreground": "#e7e7e7",
|
||||||
|
"commandCenter.border": "#15202b99",
|
||||||
|
"sash.hoverBorder": "#accc6e",
|
||||||
|
"statusBar.background": "#96bf48",
|
||||||
|
"statusBar.foreground": "#15202b",
|
||||||
|
"statusBarItem.hoverBackground": "#7a9d37",
|
||||||
|
"statusBarItem.remoteBackground": "#96bf48",
|
||||||
|
"statusBarItem.remoteForeground": "#15202b",
|
||||||
|
"titleBar.activeBackground": "#96bf48",
|
||||||
|
"titleBar.activeForeground": "#15202b",
|
||||||
|
"titleBar.inactiveBackground": "#96bf4899",
|
||||||
|
"titleBar.inactiveForeground": "#15202b99"
|
||||||
|
},
|
||||||
|
"peacock.color": "#96bf48"
|
||||||
|
}
|
||||||
|
}
|
||||||
22
to watch.md
Normal file
22
to watch.md
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
---
|
||||||
|
created: 2025-08-20T11:26:28-06:00
|
||||||
|
modified: 2025-09-25T21:29:44-06:00
|
||||||
|
---
|
||||||
|
|
||||||
|
# to watch
|
||||||
|
|
||||||
|
- [x] Department Q
|
||||||
|
- [ ] Superman
|
||||||
|
- [ ] Thunderbolts
|
||||||
|
- [ ] Alien Earth
|
||||||
|
- [ ] Honey Don't
|
||||||
|
- [ ] Loki season 2
|
||||||
|
- [ ] The Naked Gun
|
||||||
|
- [ ] Decameron
|
||||||
|
- [ ] The Death of Stalin
|
||||||
|
- [ ] Love Lies Bleeding
|
||||||
|
- [ ] Fleabag
|
||||||
|
- [ ] The Midnight Hour
|
||||||
|
- [ ] Paprika
|
||||||
|
- [ ] What We Do In The Shadows
|
||||||
|
- [ ] Bugonia
|
||||||
Reference in New Issue
Block a user