Compare commits

...

36 Commits

Author SHA1 Message Date
Quartz Syncer
fe0581e423 Published multiple files
All checks were successful
Build and Deploy Quartz / build (push) Successful in 27s
2026-02-05 12:24:25 -07:00
Quartz Syncer
125a9b1752 Published multiple files
All checks were successful
Build and Deploy Quartz / build (push) Successful in 26s
2026-02-05 09:53:27 -07:00
Quartz Syncer
536652b5b6 Published multiple files
All checks were successful
Build and Deploy Quartz / build (push) Successful in 22s
2026-01-21 22:48:48 -07:00
Quartz Syncer
a1b2e10668 Deleted multiple files
All checks were successful
Build and Deploy Quartz / build (push) Successful in 22s
2026-01-21 14:01:10 -07:00
Quartz Syncer
d5f0ffc320 Published multiple files
Some checks failed
Build and Deploy Quartz / build (push) Has been cancelled
2026-01-21 14:01:08 -07:00
Quartz Syncer
fcd2176c78 Published multiple files
All checks were successful
Build and Deploy Quartz / build (push) Successful in 20s
2026-01-20 14:54:30 -07:00
Quartz Syncer
30dd2ec6c1 Published multiple files
All checks were successful
Build and Deploy Quartz / build (push) Successful in 20s
2026-01-20 13:38:56 -07:00
Quartz Syncer
d60dc27dac Published multiple files
All checks were successful
Build and Deploy Quartz / build (push) Successful in 20s
2026-01-20 13:30:42 -07:00
Quartz Syncer
f0712ba561 Deleted multiple files
All checks were successful
Build and Deploy Quartz / build (push) Successful in 21s
2026-01-20 13:18:44 -07:00
Quartz Syncer
c41334f82c Deleted multiple files
All checks were successful
Build and Deploy Quartz / build (push) Successful in 18s
2026-01-19 18:40:24 -07:00
Quartz Syncer
f07306498f Published multiple files
Some checks failed
Build and Deploy Quartz / build (push) Has been cancelled
2026-01-19 18:40:22 -07:00
Quartz Syncer
b4c9d16c55 Published multiple files
All checks were successful
Build and Deploy Quartz / build (push) Successful in 20s
2026-01-19 18:37:25 -07:00
Quartz Syncer
184c93e274 Published multiple files
All checks were successful
Build and Deploy Quartz / build (push) Successful in 20s
2026-01-19 18:35:59 -07:00
Quartz Syncer
c48cc488f0 Published multiple files
All checks were successful
Build and Deploy Quartz / build (push) Successful in 19s
2026-01-19 17:58:36 -07:00
Quartz Syncer
2888961e0b Published multiple files
All checks were successful
Build and Deploy Quartz / build (push) Successful in 20s
2026-01-19 17:56:44 -07:00
Quartz Syncer
abad0348a7 Deleted multiple files
All checks were successful
Build and Deploy Quartz / build (push) Successful in 19s
2026-01-19 17:55:55 -07:00
Quartz Syncer
c8dcdf904b Published multiple files
Some checks failed
Build and Deploy Quartz / build (push) Has been cancelled
2026-01-19 17:55:52 -07:00
Quartz Syncer
d7e0591641 Published multiple files
All checks were successful
Build and Deploy Quartz / build (push) Successful in 19s
2026-01-19 15:39:40 -07:00
Quartz Syncer
435f5bba6a Published multiple files
Some checks failed
Build and Deploy Quartz / build (push) Has been cancelled
2026-01-19 15:39:24 -07:00
b9d4649a2c fix: add coreutils for env -S support
All checks were successful
Build and Deploy Quartz / build (push) Successful in 19s
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 15:35:36 -07:00
e19f3597d7 chore: remove test workflow
Some checks failed
Build and Deploy Quartz / build (push) Failing after 12s
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 15:34:23 -07:00
f593b02e7e add workflow_dispatch trigger
Some checks failed
Build and Deploy Quartz / build (push) Failing after 26s
Test Push Trigger / test (push) Successful in 0s
2026-01-19 15:33:35 -07:00
b66d4e744f Update .gitea/workflows/deploy.yaml 2026-01-19 23:24:57 +01:00
78a4fec36b test: push trigger 2026-01-19 15:16:03 -07:00
d368c8926e added branch to workflow 2026-01-19 15:12:02 -07:00
bec3786e69 test: push trigger after actions toggle 2026-01-19 15:06:54 -07:00
b8aef1145c test: push trigger after actions toggle 2026-01-19 15:06:34 -07:00
e0fdbefcaa test: minimal workflow to debug push trigger 2026-01-19 15:02:17 -07:00
b0b3506ef4 test: trigger workflow on push 2026-01-19 14:54:25 -07:00
48a3dbfd6f fix: add workflow_dispatch trigger
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 14:45:35 -07:00
a5b8fdd90d fix: add rsync to workflow
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 14:44:09 -07:00
Quartz Syncer
bd60a1ca15 Published multiple files 2026-01-19 14:39:10 -07:00
1eeec043e5 publish workflow 2026-01-19 14:34:36 -07:00
2e5198e290 Quartz sync: Jan 19, 2026, 2:33 PM 2026-01-19 14:34:35 -07:00
Quartz Syncer
0b70ce24df Published multiple files 2026-01-11 16:25:00 -07:00
Quartz Syncer
863583d9db Deleted multiple files 2026-01-11 16:20:23 -07:00
72 changed files with 4687 additions and 474 deletions

View File

@@ -0,0 +1,14 @@
name: Build and Deploy Quartz
run-name: ${{ gitea.actor }} is building Quartz site
on: [push, workflow_dispatch]
jobs:
build:
runs-on: docker
steps:
- run: apk add --no-cache nodejs npm git rsync coreutils
- uses: actions/checkout@v4
with:
fetch-depth: 0
- run: npm ci
- run: npx quartz build
- run: rsync -avz --delete ./public/ /sites/pdg/

View File

@@ -0,0 +1,12 @@
---
publish: true
permalink: /about
title: Phil Skentelbery
created: 2026-01-29T14:04:18.712-07:00
modified: 2026-02-05T12:14:05.453-07:00
cssclasses: ""
---
TODO
SOOOOON

View File

@@ -0,0 +1,11 @@
---
publish: true
permalink: /musings/fear-and-loathing-in-ai-land
title: Fear and Loathing in AI Land
created: 2026-01-29T14:04:18.780-07:00
modified: 2026-02-05T12:14:05.457-07:00
cssclasses: ""
---
In my life time I do not recall a technology quite so ubiquitous yet reviled as AI. For the purpose of this note, AI is a placeholder for generative AI, your LLMs like ChatGPT, Claude, and Grok. These products have gone from niche tools to consumer products in a few short years and are

View File

@@ -0,0 +1,22 @@
---
publish: true
permalink: /musings/social-media-isnt-social
title: Social Media Isn't Social
created: 2026-01-29T14:04:18.833-07:00
modified: 2026-02-05T12:14:05.455-07:00
cssclasses: ""
---
I grew up without social media for the most part. I was 16 (?) when I first got my hands on a [MySpace](https://en.wikipedia.org/wiki/Myspace) account and it was something absolutely magical. You actually networked, socially, with friends. A Social Network if you will. You sent messages, shared music, ranked your friends in what was frankly a brutal contest. But the thing I remember most about MySpace is that it was truly social.
Then came Facebook, and it too was social, at least to start with. You connected with friends, they posted stuff to their wall, you saw what your friends posted in their feed, and so on. Early Facebook was actually kind of nice. There were a few other social networks that came and went, but then something fundamental changed.
The networks were not social any more. Content from your friends was rapidly superseded by content fed to you by The Algorithm. It wasn't an overnight change, but it was fast enough that it was noticeable. Gone were the things you had purposefully connected to, instead you were given the things you were "interested in".
Then came a realization for The Algorithm, things that you were "interested in" were not nearly as interesting as things that angered you. So more and more you were shown things that demanded your outrage. Comments, once reserved for telling your friend how cool they looked in skinny jeans, were now aimed solely at communicating how outraged you were at The Thing that The Algorithm had shoved in your face.
And this is why I abandoned social media for a long time. I lurked, I scraped around every now and again for something I wanted to see, but I did not engage like I once did. Gone were the days where i tinkered with the HTML to impress my MySpace buddies, now social media was a chore, something i had to occasionally check on so I was not out of the loop.
I missed social media, but it did not exist anymore. Outrage media did not interest me. Then I discovered the [Fediverse](https://en.wikipedia.org/wiki/Fediverse). It is far from perfect, it still has that undertone of enragement engagement from some users, but it is far closer to the social media I remember. I run my own [[20-29 HOBBYS/22 SELF HOSTING/22.12 SERVICES/GoToSocial]] server from where I engage with folk on my nerdy passions in a way that is somewhat reminiscent of how I used to display my passions in basic HTML. My feed is only content from folks I follow, I have the power to filter it as I see fit, and it is probably the closest I will ever get to the glory days of what I remember through some very heavily rose tinted glasses.
Just do not let anyone tell you that TikTok, Facebook, Twitter (X?), or whatever else is spawned from the corporate hellscape is Social Media. It's not social, it is something nefarious. You are not some kind of degenerate for yearning for social media either, connection is important, more so today than ever before. Just do not expect to get it from a platform that needs your undivided attention in order to survive.

View File

@@ -1,5 +0,0 @@
---
{"publish":true,"title":"Phil Skentelbery","created":"2025-06-24T13:27:33.235-06:00","modified":"2025-06-24T13:28:04.451-06:00","cssclasses":""}
---
TODO

View File

@@ -1,13 +0,0 @@
---
{"publish":true,"title":"00 - Holding Back Sin","created":"2025-06-25T21:38:37.627-06:00","modified":"2025-06-26T16:08:06.270-06:00","tags":["daggerheart","holding_back_sin"],"cssclasses":""}
---
## Campaign Frame
- [[10-19 HOBBYS/11 TTRPG/11.12 HOLDING BACK SIN/Sin Manifest]]
## Factions
- [[10-19 HOBBYS/11 TTRPG/11.12 HOLDING BACK SIN/The Church\|The Church]]
## Locations
- [[10-19 HOBBYS/11 TTRPG/11.12 HOLDING BACK SIN/The Pit\|The Pit]]
- [[10-19 HOBBYS/11 TTRPG/11.12 HOLDING BACK SIN/Ydrasog\|Ydrasog]]

View File

@@ -1,5 +0,0 @@
---
{"publish":true,"title":"The Church","created":"2025-06-24T21:57:58.321-06:00","modified":"2025-06-24T22:12:24.093-06:00","tags":["daggerheart","holding_back_sin","faction"],"cssclasses":""}
---
The Church, or more accurately, The Church of [[The One God]], is the primary religion of Ydrasog. They are also the largest military power thanks to [[The Holy Militia]] as well as the most powerful political faction. The Church was not always this powerful however, prior to the imprisonment of [[10-19 HOBBYS/11 TTRPG/11.12 HOLDING BACK SIN/The First Sinner]] in [[10-19 HOBBYS/11 TTRPG/11.12 HOLDING BACK SIN/The Pit]] they were one faith in a sea of many.

View File

@@ -1,5 +0,0 @@
---
{"publish":true,"title":"The Old Gods","created":"2025-06-24T21:50:10.580-06:00","modified":"2025-06-24T21:53:46.955-06:00","tags":["daggerheart","holding_back_sin"],"cssclasses":""}
---
The Old Gods is the colloquial term given to the gods that were commonly worshiped by the people of [[10-19 HOBBYS/11 TTRPG/11.12 HOLDING BACK SIN/Ydrasog]] prior to [[10-19 HOBBYS/11 TTRPG/11.12 HOLDING BACK SIN/The Church]] becoming the primary power in the region along with the worship of [[The One God]]. Whilst worship of The Old Gods is not illegal in Ydrasog it is frowned upon, often seen as the purview of savages and outsiders.

View File

@@ -1,5 +0,0 @@
---
{"publish":true,"title":"Digital Garden Setup","created":"2025-06-25T20:37:49.484-06:00","modified":"2025-07-02T15:44:31.210-06:00","tags":["self_hosting","digital_gardening"],"cssclasses":""}
---
This Digital Garden is written using [[10-19 HOBBYS/12 SELF HOSTING/12.11 DIGITAL GARDEN/Obsidian]], converted to a static site using [[Quartz]], and hosted using [[Caddy]]. To edit on multiple devices I use [[Selfhosted Live Sync]]

View File

@@ -1,8 +0,0 @@
---
{"publish":true,"title":"00 - Start Here","created":"2025-06-26T16:04:58.772-06:00","modified":"2025-06-26T16:07:26.548-06:00","tags":["guide","evilginx"],"cssclasses":""}
---
## Setup and Tutorial
- [[10-19 HOBBYS/13 SECURITY/13.11 EVILGINX/Installation of Community Edition\|Installation]]<--Start here
- [[10-19 HOBBYS/13 SECURITY/13.11 EVILGINX/configuration\|Configuration Basics]]
- [[10-19 HOBBYS/13 SECURITY/13.11 EVILGINX/phish setup\|My First Phishing Test]]

View File

@@ -1,385 +0,0 @@
---
{"publish":true,"created":"2025-08-07T00:14:16.975-06:00","modified":"2025-08-07T00:16:07.955-06:00","tags":["mtg"],"cssclasses":""}
---
## Archetypes
### Tier A
- **Gruul** (Red/Green) - 10.2% popularity
- **Simic** (Blue/Green) - 10.2% popularity
### Tier B
- **Orzhov** (White/Black) - 11.3% popularity
- **Selesnya** (White/Green) - 11.0% popularity
- **Rakdos** (Black/Red) - 9.1% popularity
### Tier C
- **Azorius** (White/Blue) - 10.3% popularity
### Tier D
- **Dimir** (Blue/Black) - 8.5% popularity
- **Izzet** (Blue/Red) - 6.8% popularity
- **Golgari** (Black/Green) - 6.0% popularity
- **Boros** (White/Red) - 5.3% popularity
- **Temur** (Blue/Red/Green) - 1.7% popularity
- **Sultai** (Blue/Black/Green) - 1.1% popularity
### Low Match Volume (?)
- **Jund** (Black/Red/Green) - 1.0% popularity
- **Bant** (White/Blue/Green) - 0.9% popularity
- **Esper** (White/Blue/Black) - 0.8% popularity
- **Abzan** (White/Black/Green) - 0.8% popularity
- **Mono Green** - 0.7% popularity
- **Naya** (White/Red/Green) - 0.7% popularity
- **Mono Black** - 0.7% popularity
- **Grixis** (Blue/Black/Red) - 0.6% popularity
- **Mardu** (White/Black/Red) - 0.6% popularity
- **Mono White** - 0.6% popularity
- **Jeskai** (White/Blue/Red) - 0.6% popularity
- **Mono Blue** - 0.3% popularity
- **Mono Red** - 0.2% popularity
## Card List
### Tier 1: Incredible Bombs
1. Cosmogrand Zenith
2. Elegy Acolyte
3. Genemorph Imago
4. Nova Hellkite
5. Ouroboroid
6. Quantum Riddler
### Tier 2: Great First Picks
1. All-Fates Stalker
2. Alpharael, Dreaming Acolyte
3. Anticausal Vestige
4. Archenemys Charm
5. Banishing Light
6. Beyond the Quiet
7. Biomechan Engineer
8. Biosynthic Burst
9. Biotech Specialist
10. Breeding Pool
11. Celestial Colonnade
12. Close Encounter
13. Codecracker Hound
14. Creeping Tar Pit
15. Cryogen Relic
16. Dauntless Scrapbot
17. Depressurize
18. Desculpting Blast
19. Diplomatic Relations
20. Divert Disaster
21. Dual-Sun Adepts
22. Dubious Delicacy
23. Edge Rover
24. Emissary Escort
25. Eumidian Terrabotanist
26. Eusocial Engineering
27. Exalted Sunborn
28. Extinguisher Battleship
29. Fallers Faithful
30. Fell Gravship
31. Focus Fire
32. Frenzied Baloth
33. Galactic Wayfarer
34. Gene Pollinator
35. Gigastorm Titan
36. Glacier Godmaw
37. Gravpack Monoist
38. Green Suns Zenith
39. Haliya, Guided by Light
40. Harmonious Grovestrider
41. Interceptor Mechan
42. Kavaron, Memorial World
43. Knight Luminary
44. Larval Scoutlander
45. Lavaclaw Reaches
46. Lightstall Inquisitor
47. Lost in Space
48. Lumbering Falls
49. Lumen-Class Frigate
50. Meltstriders Resolve
51. Mightform Harmonizer
52. Monoist Circuit-Feeder
53. Mouth of the Storm
54. Mutinous Massacre
55. Nebula Dragon
56. Orbital Plunge
57. Pinnacle Emissary
58. Possibility Technician
59. Raging Ravine
60. Rayblade Trooper
61. Seedship Agrarian
62. Seedship Impact
63. Selfcraft Mechan
64. Singularity Rupture
65. Sledge-Class Seedship
66. Starfield Shepherd
67. Starwinder
68. Station Monitor
69. Stirring Wildwood
70. Sunstar Chaplain
71. Sunstar Expansionist
72. Sunstar Lightsmith
73. Sunset Saboteur
74. Survey Mechan
75. Synthesizer Labship
76. Syr Vondam, Sunstar Exemplar
77. Syr Vondam, the Lucent
78. Tannuk, Memorial Ensign
79. Terrapact Intimidator
80. The Seriema
81. Thrumming Hivepool
82. Tractor Beam
83. Tragic Trajectory
84. Umbral Collar Zealot
85. Uthros Psionicist
86. Uthros Scanship
87. Virus Beetle
88. Warmaker Gunship
89. Weftwalking
90. Zero Point Ballad
### Tier 3: Above Average Cards
1. Adagia, Windswept Bastion
2. Ancient Tomb
3. Astelli Reclaimer
4. Auxiliary Boosters
5. Beamsaw Prospector
6. Blinkmoth Nexus
7. Blooming Stinger
8. Bonders Enclave
9. Cerebral Download
10. Consult the Star Charts
11. Cryoshatter
12. Cut Propulsion
13. Devastating Onslaught
14. Dockworker Drone
15. Drix Fatemaker
16. Embrace Oblivion
17. Famished Worldsire
18. Fungal Colossus
19. Germinating Wurm
20. Gravkill
21. Haliya, Ascendant Cadet
22. Hemosymbic Mite
23. Hissing Quagmire
24. Honor
25. Honored Knight-Captain
26. Hullcarver
27. Hylderblade
28. Icecave Crasher
29. Illvoi Galeblade
30. Illvoi Infiltrator
31. Illvoi Light Jammer
32. Illvoi Operative
33. Inkmoth Nexus
34. Intrepid Tenderfoot
35. Invasive Maneuvers
36. Inventors Fair
37. Kav Landseeker
38. Kavaron Harrier
39. Lashwhip Predator
40. Lightless Evangel
41. Mechan Assembler
42. Mechan Navigator
43. Mechanozoa
44. Melded Moxite
45. Meltstrider Eulogist
46. Molecular Modifier
47. Mutavault
48. Nanoform Sentinel
49. Needle Spires
50. Nexus of Fate
51. Nutrient Block
52. Pain for All
53. Perigee Beckoner
54. Pinnacle Kill-Ship
55. Plasma Bolt
56. Pulsar Squadron Ace
57. Radiant Strike
58. Reflecting Pool
59. Requiem Monolith
60. Rust Harvester
61. Seedship Broodtender
62. Shambling Vent
63. Space-Time Anomaly
64. Specimen Freighter
65. Starfield Vocalist
66. Stomping Ground
67. Sunken Citadel
68. Susurian Dirgecraft
69. Susurian Voidborn
70. Systems Override
71. Tannuk, Steadfast Second
72. Territorial Bruntar
73. The Endstone
74. Thawbringer
75. Timeline Culler
76. Unravel
77. Vaultguard Trooper
78. Vote Out
79. Wandering Fumarole
80. Watery Grave
81. Xu-Ifit, Osteoharmonist
82. Zookeeper Mechan
### Tier 4: Solid Playables
1. All-Fates Scroll
2. Blade of the Swarm
3. Bombard
4. Brightspear Zealot
5. Broodguard Elite
6. Comet Crawler
7. Emergency Eject
8. Flight-Deck Coordinator
9. Icetill Explorer
10. Mental Modulation
11. Meteor Crater
12. Mmmenon, Uthros Exile
13. Monoist Sentry
14. Mystifying Maze
15. Oreplate Pangolin
16. Samis Curiosity
17. Scour for Scrap
18. Seam Rip
19. Slagdrill Scrapper
20. Skystinger
21. Starfighter Pilot
22. Starport Security
23. Tapestry Warden
24. Voidforged Titan
25. Wedgelight Rammer
26. Weftblade Enhancer
27. Wurmwall Sweeper
### Tier 5: Sometimes Playable
1. Alpharael, Stonechosen
2. Annul
3. Chrome Companion
4. Cloudsculpt Technician
5. Command Bridge
6. Dawnstrike Vanguard
7. Debris Field Crusher
8. Decode Transmissions
9. Evendo, Waking Haven
10. Exosuit Savior
11. Godless Shrine
12. Grove of the Burnwillows
13. Hardlight Containment
14. Hymn of the Faller
15. Insatiable Skittermaw
16. Lithobraking
17. Luxknight Breacher
18. Mechan Shieldmate
19. Memorial Team Leader
20. Ragost, Deft Gastronaut
21. Remnant Elemental
22. Rescue Skiff
23. Reroute Systems
24. Roving Actuator
25. Sacred Foundry
26. Sami, Ships Engineer
27. Shattered Wings
28. Sothera, the Supervoid
29. Squires Lightblade
30. Starbreach Whale
31. Steelswarm Operator
32. Susur Secundi, Void Altar
33. Swarm Culler
34. Tezzeret, Cruel Captain
35. Weftstalker Ardent
36. Zealous Display
### Tier 6: Rarely Playable
1. Atmospheric Greenhouse
2. Blast Zone
3. Cathedral of War
4. Contested War Zone
5. Dark Endurance
6. Deserted Temple
7. Dual-Sun Technique
8. Entropic Battlecruiser
9. Frontline War-Rager
10. Full Bore
11. Gravblade Heavy
12. Kavaron Skywarden
13. Kavaron Turbodrone
14. Lotus Field
15. Mana Confluence
16. Memorial Vault
17. Mirrorpool
18. Plaza of Heroes
19. Pull Through the Weft
20. Rig for War
21. Scout for Survivors
22. Swarmyard
23. The Dominion Bracelet
### Tier 7: Basically Unplayable
1. Atomic Microsizer
2. Bioengineered Future
3. Burgeoning
4. Bygone Colossus
5. Cascading Cataracts
6. Chorale of the Void
7. Cosmogoyf
8. Crystal Quarry
9. Darkness
10. Dawnsire, Sunstar Dreadnought
11. Deafening Silence
12. Drill Too Deep
13. Dust Bowl
14. Echoing Deeps
15. Eldrazi Temple
16. Endless Sands
17. Forest
18. Galvanizing Sawship
19. Gemstone Caverns
20. High Market
21. Infinite Guideline Station
22. Island
23. Loading Zone
24. Magus of the Moon
25. Meltstriders Gear
26. Mmmenon, the Right Hand
27. Moonlit Meditation
28. Mountain
29. Nesting Grounds
30. Paradox Haze
31. Petrified Field
32. Pinnacle Starcage
33. Plains
34. Power Depot
35. Red Tiger Mechan
36. Robe of Stars
37. Ruinous Rampage
38. Sami, Wildcat Captain
39. Scavenger Grounds
40. Scrounge for Eternity
41. Sinister Cryologist
42. Sliver Overlord
43. Swamp
44. Temporal Intervention
45. Terminal Velocity
46. Terrain Generator
47. Terrasymbiosis
48. The Eternity Elevator
49. Thaumaton Torpedo
50. Thespians Stage
51. Uthros, Titanic Godcore
52. Virulent Silencer
53. Warping Wail
54. Weapons Manufacturing

View File

@@ -0,0 +1,19 @@
---
publish: true
permalink: /places/us-co-fairplay
title: US - CO - Fairplay
created: 2026-01-29T14:04:18.765-07:00
modified: 2026-02-05T12:15:21.732-07:00
tags:
- travel
- city
cssclasses: ""
---
## Useful Spots
**Fairplay Depot**
- Its a co-working place
- All done by phone (720) 771-4019
- [Website](https://fairplaydepot.us/en)

View File

@@ -1,5 +1,13 @@
--- ---
{"publish":true,"title":"US - NV - Las Vaegas","created":"2025-08-07T00:14:16.971-06:00","modified":"2025-08-04T15:07:41.559-06:00","tags":["travel","city"],"cssclasses":""} publish: true
permalink: /places/us-nv-las-vegas
title: US - NV - Las Vegas
created: 2026-01-29T14:04:18.359-07:00
modified: 2026-02-05T12:15:21.734-07:00
tags:
- travel
- city
cssclasses: ""
--- ---
## Vegas, but not Vegas ## Vegas, but not Vegas

View File

@@ -1,5 +1,12 @@
--- ---
{"publish":true,"title":"10 Minimum Lovable Day","created":"2025-07-21T13:52:40.298-06:00","modified":"2025-07-29T07:24:00.606-06:00","tags":["productivity"],"cssclasses":""} publish: true
permalink: /habits/mld
title: Minimum Lovable Day
created: 2026-01-29T14:04:18.832-07:00
modified: 2026-02-05T12:15:47.051-07:00
tags:
- productivity
cssclasses: ""
--- ---

View File

@@ -0,0 +1,14 @@
---
publish: true
permalink: /habits/inbox-triage
title: Inbox Triage (AM)
created: 2026-01-29T14:04:18.363-07:00
modified: 2026-02-05T12:15:47.053-07:00
cssclasses: ""
---
Morning triage of my inbox (email and teams)
- If you can respond in 2 mins or less, do it
- If it needs to be [[Email Delegation \| delegated]] do it
- If it requires deep work tag it as such and move to a dedicated folder

View File

@@ -0,0 +1,80 @@
---
publish: true
permalink: /apps/veracrypt
title: VeraCrypt
created: 2026-01-29T14:04:18.863-07:00
modified: 2026-02-05T12:16:30.767-07:00
tags:
- encryption
- security
- backup
cssclasses: ""
---
VeraCrypt is free open-source disk encryption software. I use it predominantly for encrypting data on portable devices (see [[10-19 LIFE/13 TECH SETUP/13.12 PROCESSES/Backups]] for more details).
## Installation
**Arch Linux:**
```bash
sudo pacman -S veracrypt
```
**Other distributions:**
Download from https://veracrypt.io/en/Downloads.html
## Usage
### Create an encrypted volume
```bash
veracrypt -c
```
Follow the interactive prompts to:
1. Choose volume type (normal or hidden)
2. Select volume location (file or device)
3. Pick encryption algorithm (AES recommended)
4. Set volume size
5. Create password
### Mount a volume
```bash
# Mount to /mnt/veracrypt1 (default slot 1)
veracrypt /path/to/volume /mnt/veracrypt1
# Mount with specific slot
veracrypt --slot=2 /path/to/volume /mnt/veracrypt2
```
### Dismount
```bash
# Dismount specific volume
veracrypt -d /mnt/veracrypt1
# Dismount all
veracrypt -d
```
## Common Options
| Option | Description |
|--------|-------------|
| `-c` | Create new volume |
| `-d` | Dismount |
| `--slot=N` | Use slot N (1-64) |
| `-t` | Text mode (no GUI) |
| `--non-interactive` | For scripts |
| `-p PASSWORD` | Provide password (insecure, avoid) |
## Portable Drive Setup
For encrypted USB drives:
1. Create a file-hosted volume on the drive
2. Copy the portable VeraCrypt binary to the drive
3. Now usable on any machine without installation
## Tips
- Use keyfiles for additional security (combine with password)
- For full disk encryption on Linux, consider LUKS instead
- Hidden volumes provide plausible deniability
- Always safely eject before removing portable drives

View File

@@ -0,0 +1,105 @@
---
publish: true
permalink: /apps/aerc
title: aerc
created: 2026-01-30T08:09:11.034-07:00
modified: 2026-02-05T12:16:17.106-07:00
tags:
- email
- terminal
cssclasses: ""
---
aerc is a terminal email client with vim-like keybindings. It's lightweight, fast, and highly configurable. Works well with [[10-19 LIFE/13 TECH SETUP/13.11 APPS/isync]] for offline IMAP sync.
## Installation
**Arch Linux:**
```bash
sudo pacman -S aerc
```
**Dependencies for full functionality:**
```bash
# HTML rendering
sudo pacman -S w3m
# or: dante (for socksify), pandoc (markdown)
```
## Configuration
Config files live in `~/.config/aerc/`:
### accounts.conf
```ini
[Proton]
source = maildir://~/.local/share/mail/proton
outgoing = smtp+plain://127.0.0.1:1025
default = INBOX
from = Your Name <you@proton.me>
copy-to = Sent
```
### aerc.conf
```ini
[ui]
index-columns = date<20,name<25,flags>4,subject<*
timestamp-format = 2006-01-02 15:04
this-day-time-format = 15:04
this-year-time-format = Jan 02
[compose]
editor = nvim
reply-to-self = false
[filters]
text/plain = colorize
text/html = w3m -T text/html -cols $(tput cols) -dump -o display_image=false
```
### binds.conf
```ini
[messages]
q = :quit<Enter>
j = :next<Enter>
k = :prev<Enter>
Enter = :view<Enter>
c = :compose<Enter>
r = :reply<Enter>
R = :reply -a<Enter>
d = :move Trash<Enter>
```
## Usage
### Navigation
| Key | Action |
|-----|--------|
| `j/k` | Next/prev message |
| `J/K` | Next/prev folder |
| `Enter` | Open message |
| `q` | Back/quit |
| `/` | Search |
### Composing
| Key | Action |
|-----|--------|
| `c` | Compose new |
| `r` | Reply |
| `R` | Reply all |
| `f` | Forward |
| `Ctrl+x` | Send (in editor) |
### Actions
| Key | Action |
|-----|--------|
| `d` | Delete/move to trash |
| `m` | Move to folder |
| `C` | Copy to folder |
| `A` | Archive |
## Tips
- Run `:help` or `:help tutorial` for built-in documentation
- Use with [[10-19 LIFE/13 TECH SETUP/13.11 APPS/isync]] for offline access and faster sync
- Pipe messages through scripts with `:pipe`

View File

@@ -0,0 +1,113 @@
---
publish: true
permalink: /apps/atuin
title: atuin
created: 2026-01-30T08:29:14.283-07:00
modified: 2026-02-05T12:16:17.109-07:00
tags:
- shell
- history
- sync
cssclasses: ""
---
Atuin replaces your shell history with a SQLite database, providing better search, sync across machines, and detailed statistics. It's magical for finding that command you ran three weeks ago.
## Installation
**Quick install (recommended):**
```bash
curl --proto '=https' --tlsv1.2 -LsSf https://setup.atuin.sh | sh
```
**Arch Linux:**
```bash
sudo pacman -S atuin
```
## Shell Integration
Add to your shell config:
**Bash** (`~/.bashrc`):
```bash
eval "$(atuin init bash)"
```
**Zsh** (`~/.zshrc`):
```bash
eval "$(atuin init zsh)"
```
**Fish** (`~/.config/fish/config.fish`):
```fish
atuin init fish | source
```
## Usage
### Interactive search
Press `Ctrl+r` (or `Up` with config) to open the interactive search:
- Type to filter
- `Enter` to execute
- `Tab` to edit before running
- `Ctrl+r` to cycle through filter modes
### Filter modes
| Mode | Description |
|------|-------------|
| Global | All history across machines |
| Host | Current machine only |
| Session | Current shell session |
| Directory | Commands run in this directory |
### Commands
```bash
# Search from CLI
atuin search "docker"
# Show stats
atuin stats
# Manual sync
atuin sync
```
## Sync Setup (Optional)
Register for free sync:
```bash
atuin register -u <username> -e <email>
atuin login -u <username>
atuin sync
```
Or self-host the sync server.
## Configuration
`~/.config/atuin/config.toml`:
```toml
[settings]
# Use up arrow for atuin instead of ctrl+r
keymap_mode = "vim-normal"
# Search mode: prefix, fulltext, fuzzy
search_mode = "fuzzy"
# Filter by default
filter_mode = "host"
# Show preview of full command
show_preview = true
# Sync settings
auto_sync = true
sync_frequency = "5m"
```
## Tips
- Atuin stores history in `~/.local/share/atuin/history.db`
- Use `atuin history list` to export/inspect
- Prefix sensitive commands with a space to exclude from history

View File

@@ -0,0 +1,116 @@
---
publish: true
permalink: /apps/impala
title: impala
created: 2026-02-05T09:36:55.334-07:00
modified: 2026-02-05T12:16:17.110-07:00
tags:
- wifi
- network
- terminal
cssclasses: ""
---
impala is a TUI for managing WiFi on Linux using iwd as the backend. Much nicer than `iwctl` for day-to-day WiFi management.
## Installation
**Arch Linux:**
```bash
sudo pacman -S impala
```
**Cargo:**
```bash
cargo install impala
```
## Prerequisites
- **iwd** must be running (not wpa_supplicant)
- NetworkManager should use iwd backend (see [[10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/Network]])
- Nerd Fonts (optional) for icons
## Usage
```bash
impala
```
### Key Bindings
| Key | Action |
|-----|--------|
| `j/k` | Navigate up/down |
| `Enter` | Connect to network |
| `d` | Disconnect |
| `r` | Refresh networks |
| `s` | Scan for networks |
| `a` | Toggle Access Point mode |
| `q` | Quit |
### Connecting to Networks
1. Launch `impala`
2. Navigate to network with `j/k`
3. Press `Enter` to connect
4. Enter password if prompted
### Hidden Networks
Press `/` to search/enter a hidden network SSID.
### WPA Enterprise (802.1X)
impala supports enterprise authentication. Select the network and follow prompts for username/password or certificate.
### QR Code Sharing
Press `Q` on a connected network to display a QR code for sharing credentials.
## Configuration
Config file: `~/.config/impala/config.toml`
```toml
[keybindings]
quit = "q"
scan = "s"
connect = "Enter"
disconnect = "d"
[appearance]
# Uses terminal colors by default
```
## Integration
### Ashell
In ashell config, use impala for WiFi management:
```toml
[settings]
wifi_more_cmd = 'kitty -e bash -c "impala"'
```
### Hyprland keybind
```bash
bind = $mainMod, W, exec, kitty -e impala
```
## Troubleshooting
### "iwd not running"
```bash
sudo systemctl enable --now iwd
```
### Conflicts with NetworkManager
NetworkManager must use iwd as backend, not wpa_supplicant. See [[10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/Network#NetworkManager + iwd]].
## Resources
- GitHub: https://github.com/pythops/impala

View File

@@ -0,0 +1,118 @@
---
publish: true
permalink: /apps/isync
title: isync (mbsync)
created: 2026-01-30T08:09:43.461-07:00
modified: 2026-02-05T12:16:17.112-07:00
tags:
- email
- sync
- imap
cssclasses: ""
---
isync (command: `mbsync`) is a tool for synchronizing IMAP mailboxes with local Maildir folders. Essential for offline email access with clients like [[10-19 LIFE/13 TECH SETUP/13.11 APPS/aerc]] or mutt.
## Installation
**Arch Linux:**
```bash
sudo pacman -S isync
```
## ProtonMail Integration
ProtonMail requires the Proton Bridge app for IMAP access. See the [Arch Wiki guide](https://wiki.archlinux.org/title/Isync#Integration_with_ProtonMail) for details.
### Setup with Proton Bridge
1. Install and run Proton Bridge
2. Get credentials from Bridge (it generates local IMAP/SMTP credentials)
3. Configure mbsync as below
## Configuration
`~/.mbsyncrc`:
```ini
# Global settings
Create Both
Remove Both
Expunge Both
SyncState *
# ProtonMail via Proton Bridge
IMAPAccount proton
Host 127.0.0.1
Port 1143
User your-email@proton.me
PassCmd "cat ~/.config/proton-bridge/password"
SSLType STARTTLS
CertificateFile ~/.config/proton-bridge/cert.pem
IMAPStore proton-remote
Account proton
MaildirStore proton-local
Path ~/.local/share/mail/proton/
Inbox ~/.local/share/mail/proton/INBOX
SubFolders Verbatim
Channel proton
Far :proton-remote:
Near :proton-local:
Patterns *
```
## Usage
```bash
# Sync all configured channels
mbsync -a
# Sync specific channel
mbsync proton
# Verbose output
mbsync -V proton
# Dry run (show what would happen)
mbsync -n proton
```
## Automation
### systemd timer
`~/.config/systemd/user/mbsync.timer`:
```ini
[Unit]
Description=Sync mail periodically
[Timer]
OnBootSec=1m
OnUnitActiveSec=5m
[Install]
WantedBy=timers.target
```
`~/.config/systemd/user/mbsync.service`:
```ini
[Unit]
Description=Sync mail
[Service]
Type=oneshot
ExecStart=/usr/bin/mbsync -a
```
Enable:
```bash
systemctl --user enable --now mbsync.timer
```
## Tips
- Create the local maildir first: `mkdir -p ~/.local/share/mail/proton`
- Use `PassCmd` to avoid storing passwords in config
- The `Patterns *` line syncs all folders; use specific patterns to limit
- Check sync status with `mbsync -V` for verbose output

View File

@@ -0,0 +1,115 @@
---
publish: true
permalink: /apps/nvim
title: nvim (Neovim)
created: 2026-01-30T08:08:10.433-07:00
modified: 2026-02-05T12:16:17.114-07:00
tags:
- editor
- terminal
- development
cssclasses: ""
---
Neovim is a hyperextensible Vim-based text editor. I use [LazyVim](http://www.lazyvim.org/) as a pre-configured distribution for a batteries-included experience.
## Installation
**Arch Linux:**
```bash
sudo pacman -S neovim
```
**Dependencies for full LazyVim experience:**
```bash
sudo pacman -S git lazygit ripgrep fd nodejs npm
```
## LazyVim Setup
LazyVim provides sensible defaults, plugin management, and a curated set of plugins.
**Backup existing config:**
```bash
mv ~/.config/nvim ~/.config/nvim.bak
mv ~/.local/share/nvim ~/.local/share/nvim.bak
```
**Install LazyVim:**
```bash
git clone https://github.com/LazyVim/starter ~/.config/nvim
rm -rf ~/.config/nvim/.git
nvim
```
On first launch, LazyVim will install all plugins automatically.
## Key Bindings (LazyVim defaults)
### General
| Key | Action |
|-----|--------|
| `Space` | Leader key |
| `Space Space` | Find files |
| `Space /` | Live grep |
| `Space e` | File explorer |
| `Space gg` | LazyGit |
### Buffers
| Key | Action |
|-----|--------|
| `Space bd` | Delete buffer |
| `H` / `L` | Prev/next buffer |
| `Space bb` | Switch buffer |
### Windows
| Key | Action |
|-----|--------|
| `Ctrl+h/j/k/l` | Navigate windows |
| `Space w-` | Split horizontal |
| `Space w\|` | Split vertical |
### Code
| Key | Action |
|-----|--------|
| `gd` | Go to definition |
| `gr` | Find references |
| `K` | Hover documentation |
| `Space ca` | Code action |
| `Space cf` | Format |
## Configuration
LazyVim config lives in `~/.config/nvim/lua/`:
### Add plugins
`~/.config/nvim/lua/plugins/custom.lua`:
```lua
return {
-- Add plugins here
{ "tpope/vim-surround" },
-- Override existing plugin config
{
"nvim-treesitter/nvim-treesitter",
opts = {
ensure_installed = { "lua", "python", "typescript" },
},
},
}
```
### Options
`~/.config/nvim/lua/config/options.lua`:
```lua
vim.opt.relativenumber = true
vim.opt.wrap = true
vim.opt.tabstop = 4
```
## Resources
- LazyVim docs: http://www.lazyvim.org/
- Neovim docs: https://neovim.io/doc/
- `:Lazy` - Plugin manager UI
- `:Mason` - LSP/formatter installer

View File

@@ -0,0 +1,119 @@
---
publish: true
permalink: /apps/qutebrowser
title: qutebrowser
created: 2026-01-31T15:46:19.286-07:00
modified: 2026-02-05T12:16:30.762-07:00
tags:
- browser
- web
- keyboard
cssclasses: ""
---
qutebrowser is a keyboard-driven web browser with vim-like keybindings. Minimal UI, maximum efficiency.
## Installation
**Arch Linux:**
```bash
sudo pacman -S qutebrowser
```
## Configuration
Config file: `~/.config/qutebrowser/config.py`
```python
# Basic settings
c.content.javascript.enabled = True
c.content.autoplay = False
c.tabs.position = "top"
c.tabs.show = "multiple"
# Search engines
c.url.searchengines = {
'DEFAULT': 'https://duckduckgo.com/?q={}',
'g': 'https://google.com/search?q={}',
'w': 'https://en.wikipedia.org/wiki/{}',
'aw': 'https://wiki.archlinux.org/?search={}',
'gh': 'https://github.com/search?q={}',
'r': 'http://localhost:9873/{}', # urlref integration
}
# Dark mode
c.colors.webpage.darkmode.enabled = True
c.colors.webpage.preferred_color_scheme = "dark"
# Privacy
c.content.cookies.accept = "no-3rdparty"
c.content.headers.do_not_track = True
```
## Key Bindings
### Navigation
| Key | Action |
|-----|--------|
| `j/k` | Scroll down/up |
| `h/l` | Scroll left/right |
| `gg/G` | Top/bottom of page |
| `H/L` | Back/forward |
| `r` | Reload |
### Links & Hints
| Key | Action |
|-----|--------|
| `f` | Follow link (current tab) |
| `F` | Follow link (new tab) |
| `;i` | Hint images |
| `;y` | Yank link URL |
### Tabs
| Key | Action |
|-----|--------|
| `J/K` | Prev/next tab |
| `d` | Close tab |
| `u` | Undo close tab |
| `o` | Open URL |
| `O` | Open URL (new tab) |
| `t` | Open in new tab |
### Commands
| Key | Action |
|-----|--------|
| `:` | Command mode |
| `/` | Search in page |
| `yy` | Yank URL |
| `pp` | Open from clipboard |
## Google Login Fix
Google sometimes blocks qutebrowser. Workaround:
See: https://github.com/qutebrowser/qutebrowser/issues/8492
```python
# Set a Chrome user agent for Google sites
c.content.headers.user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
```
Or use per-domain settings:
```python
config.set('content.headers.user_agent',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
'*://accounts.google.com/*')
```
## Userscripts
Store in `~/.local/share/qutebrowser/userscripts/`
See [[10-19 LIFE/13 TECH SETUP/13.11 APPS/urlref]] for an example qutebrowser userscript integration.
## Tips
- `:help` opens the comprehensive help
- Use `:set` to explore available options
- `:bind` to see/modify key bindings
- Greasemonkey scripts work via `c.content.javascript.enabled`

View File

@@ -0,0 +1,87 @@
---
publish: true
permalink: /apps/urlref
title: urlref
created: 2026-01-29T14:04:18.714-07:00
modified: 2026-02-05T12:16:30.765-07:00
tags:
- web
- note_taking
cssclasses: ""
---
As an avid user of pen and paper for note taking I have had endless trouble figuring out how to store url's without having to write them out in full. I seem to have found a solution to this issue with [urlref](https://benjaminhollon.com/musings/urlref/) from the fantastic [Benjamin Hollon](https://polymaths.social/@amin). I did have a little bit of fun setting up for myself though so I am documenting here in case it is helpful to anyone, including future me.
## Installation
### Install Nim
**Arch Linux:**
```bash
sudo pacman -S nim nimble
```
**Other distributions:**
See https://nim-lang.org/install.html
### Build
```bash
cd urlref
nimble build
```
### Install system-wide (optional)
```bash
nimble install
```
This installs the binary to `~/.nimble/bin/`. Ensure it's in your PATH:
```bash
export PATH="$HOME/.nimble/bin:$PATH"
```
## Usage
### Create a short reference
```bash
urlref create "https://example.com/some/long/url"
# Output: ABC
```
### Start the redirect server
```bash
urlref
```
The server runs on port 9873. Visiting `http://localhost:9873/ABC` redirects to the original URL.
## Examples
### systemd service
```bash
[Unit]
Description=URL Reference Redirect Server
After=network.target
[Service]
ExecStart=%h/.nimble/bin/urlref
Restart=on-failure
RestartSec=5
[Install]
WantedBy=default.target
```
### qutebrowser Integration
This [[10-19 LIFE/13 TECH SETUP/13.11 APPS/qutebrowser]] integration works for me, you are on your own for other browsers!
#### Userscript
Should live at `~/.local/share/qutebrowser/userscripts`
```bash
#!/bin/bash
# Qutebrowser userscript to shorten the current URL using urlref
shortcode=$(~/.nimble/bin/urlref create "$QUTE_URL")
if [ -n "$shortcode" ]; then
echo "message-info 'Shortcode: $shortcode'" >> "$QUTE_FIFO"
echo "yank inline $shortcode" >> "$QUTE_FIFO"
else
echo "message-error 'Failed to create shortcode'" >> "$QUTE_FIFO"
fi
```
Bind it to a key
```python
config.bind('ar', 'spawn --userscript urlref-shorten')
```
Add a custom search engine
```python
c.url.searchengines['r'] = 'http://localhost:9873/{}'
```

View File

@@ -0,0 +1,104 @@
---
publish: true
permalink: /apps/whosthere
title: whosthere
created: 2026-02-05T08:46:27.958-07:00
modified: 2026-02-05T12:16:30.769-07:00
tags:
- network
- lan
- discovery
cssclasses: ""
---
whosthere is a LAN discovery tool with a modern TUI. It discovers devices on your network using mDNS, SSDP, and ARP scanning—all without requiring root privileges.
## Installation
**Arch Linux (via AUR):**
```bash
yay -S whosthere-bin
```
**Homebrew:**
```bash
brew install whosthere
```
**Go:**
```bash
go install github.com/ramonvermeulen/whosthere@latest
```
## Usage
### Interactive TUI
```bash
whosthere
```
Navigate with arrow keys or vim bindings:
- `j/k` - Move up/down
- `Enter` - Select/expand
- `q` - Quit
- `r` - Refresh scan
- `p` - Port scan selected device
### Daemon Mode
Run as a background service with HTTP API:
```bash
whosthere daemon
```
Query via API:
```bash
curl http://localhost:8080/devices
```
### CLI Output
```bash
# JSON output
whosthere --json
# One-shot scan (no TUI)
whosthere --once
```
## Features
- **mDNS discovery** - Finds devices advertising services
- **SSDP scanning** - Discovers UPnP devices
- **ARP cache reading** - Catches everything else
- **OUI lookup** - Shows manufacturer from MAC address
- **Port scanning** - Optional service discovery on found hosts
## Configuration
`~/.config/whosthere/config.yaml`:
```yaml
# Theme customization
theme:
primary: "#7aa2f7"
secondary: "#bb9af7"
# Scan settings
scan:
timeout: 5s
ports: [22, 80, 443, 8080]
# Daemon settings
daemon:
port: 8080
refresh_interval: 60s
```
## Tips
- No root required—uses unprivileged scanning techniques
- Port scanning requires explicit action; only scan devices you own
- Great for finding that Raspberry Pi you forgot the IP of
- Combine with `--json` for scripting and automation
## See Also
- GitHub: https://github.com/ramonvermeulen/whosthere

View File

@@ -0,0 +1,116 @@
---
publish: true
permalink: /apps/zathura
title: zathura
created: 2026-02-05T09:08:26.899-07:00
modified: 2026-02-05T12:16:30.770-07:00
tags:
- pdf
- documents
- reader
cssclasses: ""
---
zathura is a minimalist document viewer with vim-like keybindings. Fast, keyboard-driven, and highly customizable.
## Installation
**Arch Linux:**
```bash
sudo pacman -S zathura zathura-pdf-mupdf
```
When prompted for tesseract data (for OCR), select `tesseract-data-eng` for English.
### Backend plugins
| Plugin | Formats |
|--------|---------|
| `zathura-pdf-mupdf` | PDF, EPUB, XPS (recommended) |
| `zathura-pdf-poppler` | PDF (alternative) |
| `zathura-djvu` | DjVu |
| `zathura-ps` | PostScript |
| `zathura-cb` | Comic books (CBZ/CBR) |
## Key Bindings
### Navigation
| Key | Action |
|-----|--------|
| `j/k` | Scroll down/up |
| `h/l` | Scroll left/right |
| `Ctrl+d/u` | Half page down/up |
| `gg/G` | First/last page |
| `nG` | Go to page n |
| `Space` | Next page |
### Zoom
| Key | Action |
|-----|--------|
| `+/-` | Zoom in/out |
| a` | Fit page |
| `s` | Fit width |
### View
| Key | Action |
|-----|--------|
| `d` | Toggle dual-page |
| `r` | Rotate |
| `R` | Reload |
| `Tab` | Toggle index |
| `F11` | Fullscreen |
### Other
| Key | Action |
|-----|--------|
| `/` | Search |
| `n/N` | Next/prev match |
| `y` | Copy selection |
| `o/O` | Open file |
| `q` | Quit |
## Configuration
`~/.config/zathura/zathurarc`:
```bash
# Enable clipboard
set selection-clipboard clipboard
# Recolor for dark mode
set recolor true
set recolor-darkcolor "#ebdbb2"
set recolor-lightcolor "#282828"
# Default zoom
set zoom-min 10
set adjust-open "best-fit"
# Status bar
set statusbar-home-tilde true
# Window
set window-title-basename true
set window-title-page true
```
## Make Default PDF Viewer
```bash
xdg-mime default org.pwmt.zathura.desktop application/pdf
```
## Synctex (LaTeX integration)
For LaTeX editors that support synctex:
```bash
zathura --synctex-forward <line>:<col>:<input> <pdf>
```
Configure your editor to call this for forward search.
## Tips
- `:help` or `man zathura` for full documentation
- Use `:bmark` to bookmark pages
- Use `i` to invert colors (quick dark mode)
- Index/TOC navigation with `Tab` is very useful for long documents

View File

@@ -0,0 +1,92 @@
---
publish: true
permalink: /processes/backups
title: Backups
created: 2026-01-29T14:04:18.777-07:00
modified: 2026-02-05T12:16:56.630-07:00
cssclasses: ""
---
## Local
For me local backups happen in two main ways
1. Backups to a VPS using [[20-29 HOBBYS/22 SELF HOSTING/22.12 SERVICES/Syncthing]]
2. Backups to a USB stick that lives in my emergency kit
### USB Backups
For USB backups I had a few key requirements
1. They must be encrypted
2. Decryption should be able to take place on any Windows, Mac, or Linux device
3. Decryption must be simple enough that an intermediate user should be able to manage it given instructions (this is in case someone needs this data if I am no longer around to impart my wisdom)
Given these requirements I settled on using [[10-19 LIFE/13 TECH SETUP/13.11 APPS/VeraCrypt]] to create an encrypted container formatted with exFat on a USB drive. This way someone can install the software and, given my key, decrypt the data.
I created the following helper functions to make this processes a little less cumbersome for myself on a monthly basis.
#### Mount/Unmount Container
```bash
vault() {
local mount_base="/run/media/$USER"
local mount_point="$mount_base/vault"
_vault_find() {
local container
container=$(command find "$mount_base" -maxdepth 2 -name "DataVault" -type f 2>/dev/null | head -1)
if [[ -z "$container" ]]; then
echo "Error: DataVault not found under $mount_base" >&2
return 1
fi
echo "$container"
}
case "${1:-}" in
m|mount)
local container
container=$(_vault_find) || return 1
if mountpoint -q "$mount_point" 2>/dev/null; then
echo "Already mounted at $mount_point"
return 0
fi
echo "Found: $container"
sudo mkdir -p "$mount_point"
sudo veracrypt -t --fs-options="uid=$(id -u),gid=$(id -g)" "$container" "$mount_point"
echo "Mounted at $mount_point"
;;
u|unmount)
if ! mountpoint -q "$mount_point" 2>/dev/null; then
echo "Not mounted"
return 0
fi
sudo veracrypt -t -d "$mount_point"
sudo rmdir "$mount_point" 2>/dev/null || true
echo "Unmounted"
;;
*)
echo "Usage: vault {mount|m|unmount|u}"
return 1
;;
esac
}
```
#### Sync Data
```bash
vault-sync() {
local mount_point="/run/media/$USER/vault"
local source="$HOME/DataStore"
if ! mountpoint -q "$mount_point" 2>/dev/null; then
echo "Error: Vault not mounted at $mount_point" >&2
return 1
fi
if [[ ! -d "$source" ]]; then
echo "Error: Source directory $source does not exist" >&2
return 1
fi
rsync -av --delete "$source/" "$mount_point/"
echo "Sync complete"
}
```
## Cloud
For services on my VPS's I backup docker volumes using [docker-volume-backup](https://github.com/offen/docker-volume-backup)

View File

@@ -0,0 +1,58 @@
---
publish: true
permalink: /os
title: Arch Linux Setup Guide
created: 2026-02-05T09:20:32.962-07:00
modified: 2026-02-05T12:17:52.896-07:00
tags:
- guide
- arch
- linux
cssclasses: ""
---
# Arch Linux Setup Guide
My personal Arch Linux setup for Framework Laptop 13 (AMD). Follow these guides in order for a complete system.
## Core Installation
1. [[10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/Base Install]] ← **Start here** — LUKS2 + BTRFS + Limine bootloader
2. [[10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/Plymouth]] — Boot splash screen (optional, but nice with LUKS)
## Desktop Environment
3. [[10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/Hyprland Setup]] — Wayland compositor and ecosystem
4. [[10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/hyprlock]] — Screen lock with fingerprint support
5. [[10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/hyprshutdown]] — Graceful shutdown animations
6. [[10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/Ashell]] — Status bar
7. [[10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/Mako]] — Notifications
## System Configuration
8. [[10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/Audio]] — PipeWire and audio fixes
9. [[10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/Network]] — NetworkManager, iwd, Tailscale
10. [[10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/Fonts]] — Font rendering improvements
11. [[10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/Printing]] — CUPS setup
## Utilities
12. [[10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/Shell]] — Starship prompt and shell config
13. [[10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/Disks]] — Automounting with udiskie
14. [[10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/AppImage Management]] — Running and managing AppImages
15. [[10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/Keychain]] — GNOME Keyring for secrets
## Security
16. [[10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/fprintd]] — Fingerprint authentication
17. [[10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/Yubikey]] — Hardware key setup
---
## Quick Reference
| Category | Key Packages |
|----------|-------------|
| Base | `base linux linux-firmware btrfs-progs limine` |
| Boot | `plymouth` |
| Desktop | `hyprland hyprlock hypridle hyprpaper hyprshutdown` |
| Bar | `ashell mako` |
| Audio | `pipewire pipewire-pulse wireplumber` |
| Network | `networkmanager iwd tailscale` |
| Auth | `fprintd gnome-keyring` |
| Utils | `starship udiskie` |

View File

@@ -0,0 +1,118 @@
---
publish: true
permalink: /os/appimage
title: AppImage Management
created: 2026-01-29T15:05:11.266-07:00
modified: 2026-02-05T12:17:52.899-07:00
tags:
- appimage
- apps
cssclasses: ""
---
Managing AppImage applications on Arch Linux.
## Directory Structure
```
~/.local/bin/ # AppImage binaries
~/.local/share/applications/ # Desktop entries
```
## Installation Process
### 1. Download the AppImage
```bash
cd ~/.local/bin
wget "https://example.com/App.AppImage"
chmod +x App.AppImage
```
### 2. Create desktop entry
Create `~/.local/share/applications/app.desktop`:
```ini
[Desktop Entry]
Name=App Name
Comment=Description
Exec=/home/phil/.local/bin/App.AppImage
Icon=app-icon
Type=Application
Categories=Utility;
```
### 3. Update desktop database
```bash
update-desktop-database ~/.local/share/applications/
```
## Electron Apps on Wayland
Many Electron-based AppImages need extra flags for Wayland:
```bash
./App.AppImage --enable-features=UseOzonePlatform --ozone-platform=wayland
```
Update the desktop entry:
```ini
Exec=/home/phil/.local/bin/App.AppImage --enable-features=UseOzonePlatform --ozone-platform=wayland
```
## AppImage Tools
### appimagetool
Extract and repack AppImages:
```bash
# Extract
./App.AppImage --appimage-extract
# Creates squashfs-root/ directory
```
### AppImageLauncher
Integrates AppImages into your system automatically:
```bash
paru -S appimagelauncher
```
Features:
- Prompts to integrate on first run
- Creates desktop entries automatically
- Manages AppImages in a central location
## Helper Script
Save as `~/.local/bin/appimage-install`:
```bash
#!/bin/bash
# Usage: appimage-install App.AppImage "App Name"
APPIMAGE="$1"
NAME="$2"
DEST="$HOME/.local/bin/$(basename "$APPIMAGE")"
cp "$APPIMAGE" "$DEST"
chmod +x "$DEST"
cat > "$HOME/.local/share/applications/${NAME,,}.desktop" << EOF
[Desktop Entry]
Name=$NAME
Exec=$DEST
Type=Application
Categories=Utility;
EOF
update-desktop-database ~/.local/share/applications/
echo "Installed $NAME"
```
## Tips
- Keep AppImages in `~/.local/bin` which should be in your PATH
- Some AppImages bundle their own icon — extract with `--appimage-extract` to find it
- For system-wide install, use `/opt/` and `/usr/share/applications/`

View File

@@ -0,0 +1,122 @@
---
publish: true
permalink: /os/ashell
title: Ashell
created: 2026-01-29T15:16:18.996-07:00
modified: 2026-02-05T12:17:52.901-07:00
tags:
- hyprland
- statusbar
- wayland
cssclasses: ""
---
Ashell is a lightweight status bar for Wayland compositors like [[10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/Hyprland Setup\|Hyprland]].
## Installation
**From AUR:**
```bash
paru -S ashell
```
**From source:**
```bash
git clone https://github.com/malpenzibo/ashell
cd ashell
cargo build --release
cp target/release/ashell ~/.local/bin/
```
## Hyprland Integration
Add to `~/.config/hypr/hyprland.conf`:
```bash
exec-once = ashell
```
## My Configuration
Config location: `~/.config/ashell/config.toml`
```toml
log_level = "warn"
outputs = { Targets = ["eDP-1"] }
position = "Top"
app_launcher_cmd = "walker"
[modules]
left = [ [ "appLauncher", "Updates", "Workspaces" ] ]
right = [ "SystemInfo", [ "Tray", "Clock", "Privacy", "Settings" ] ]
[updates]
check_cmd = "checkupdates; paru -Qua"
update_cmd = 'kitty -e bash -c "paru; echo Done - Press enter to exit; read" &'
[system_info]
indicators = ["Cpu", "Memory", "Temperature", "IpAddress", "DownloadSpeed", "UploadSpeed"]
[workspaces]
enable_workspace_filling = true
[[CustomModule]]
name = "appLauncher"
icon = "󱗼"
command = "walker"
[window_title]
truncate_title_after_length = 100
[settings]
lock_cmd = "playerctl --all-players pause; hyprlock &"
audio_sinks_more_cmd = "pavucontrol -t 3"
audio_sources_more_cmd = "pavucontrol -t 4"
wifi_more_cmd = 'kitty -e bash -c "impala"'
vpn_more_cmd = "nm-connection-editor"
bluetooth_more_cmd = 'kitty -e bash -c "bluetui"'
shutdown_cmd = "hyprshutdown -t 'Shutting down...' --post-cmd 'shutdown -P 0'"
suspend_cmd = "systemctl suspend"
hibernate_cmd = "systemctl hibernate"
reboot_cmd = "hyprshutdown -t 'Restarting...' --post-cmd 'reboot'"
logout_cmd = "loginctl kill-user $(whoami)"
[appearance]
style = "Islands"
primary_color = "#7aa2f7"
success_color = "#9ece6a"
text_color = "#a9b1d6"
workspace_colors = [ "#7aa2f7", "#9ece6a" ]
special_workspace_colors = [ "#7aa2f7", "#9ece6a" ]
[appearance.danger_color]
base = "#f7768e"
weak = "#e0af68"
[appearance.background_color]
base = "#1a1b26"
weak = "#24273a"
strong = "#414868"
[appearance.secondary_color]
base = "#0c0d14"
```
## Key Features
- **Islands style** — Floating pill-shaped modules
- **Tokyo Night theme** — Colors match my Hyprland/terminal theme
- **Custom app launcher** — Uses Walker with a custom icon
- **System info** — CPU, memory, temp, network speeds
- **Update checker** — Shows pending pacman/AUR updates
- **Integration apps:**
- `walker` — App launcher
- `pavucontrol` — Audio settings
- `impala` — WiFi TUI
- `bluetui` — Bluetooth TUI
- `hyprshutdown` — Graceful shutdown with animation
## Resources
- Documentation: https://malpenzibo.github.io/ashell/
- GitHub: https://github.com/malpenzibo/ashell

View File

@@ -0,0 +1,89 @@
---
publish: true
permalink: /os/audio
title: Audio
created: 2026-01-29T15:21:02.328-07:00
modified: 2026-02-05T12:17:52.903-07:00
tags:
- audio
- pipewire
- hyprland
cssclasses: ""
---
Audio setup using PipeWire on Arch Linux with Hyprland.
## Installation
Already included in [[10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/Base Install]], but for reference:
```bash
sudo pacman -S \
pipewire pipewire-alsa pipewire-pulse pipewire-jack \
wireplumber sof-firmware
```
## Volume Control
### CLI
```bash
# Using wpctl (WirePlumber)
wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+
wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
# Using pactl (PulseAudio compat)
pactl set-sink-volume @DEFAULT_SINK@ +5%
pactl set-sink-volume @DEFAULT_SINK@ -5%
pactl set-sink-mute @DEFAULT_SINK@ toggle
```
### GUI
```bash
sudo pacman -S pavucontrol # GTK
# or
sudo pacman -S pwvucontrol # Qt/PipeWire native
```
### Hyprland Keybinds
```bash
bind = , XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+
bind = , XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
bind = , XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
```
## Troubleshooting
### No sound
Check WirePlumber is running:
```bash
systemctl --user status wireplumber
systemctl --user status pipewire
```
Restart if needed:
```bash
systemctl --user restart wireplumber pipewire pipewire-pulse
```
### Headphone jack buzz (Framework AMD)
The AMD board has slight buzz when audio idles. Disable power saving:
Create `/etc/modprobe.d/audio-powersave.conf`:
```
options snd_hda_intel power_save=0
```
### Application-specific issues
Some apps need explicit PipeWire support. Check:
```bash
pactl info | grep "Server Name"
# Should show: PulseAudio (on PipeWire)
```
## Resources
- Detailed guide: https://dev.to/laithalenooz/resolving-audio-issues-on-arch-linux-with-hyprland-a-step-by-step-guide-2n
- Arch Wiki: https://wiki.archlinux.org/title/PipeWire

View File

@@ -0,0 +1,465 @@
---
publish: true
permalink: /os/base-install
title: Base Install
created: 2026-01-29T14:10:28.844-07:00
modified: 2026-02-05T12:17:52.905-07:00
tags:
- arch
- installation
- luks
- btrfs
cssclasses: ""
---
My Arch Linux installation guide for Framework Laptop 13 (AMD Ryzen 7040). LUKS2 encrypted BTRFS with Limine bootloader.
> Based on guides by [yovko](https://gist.github.com/yovko/512326b904d120f3280c163abfbcb787) and [mgajewskik](https://gist.github.com/mgajewskik/a9331171c31b6e8839c427210ba76730), adapted for Framework AMD hardware.
---
## Overview
- **Encryption:** LUKS2 on system partition
- **Filesystem:** BTRFS with subvolumes (snapshots, compression)
- **Bootloader:** Limine (lightweight, Snapper-friendly)
- **Hardware:** Framework Laptop 13 AMD (Ryzen 7040 series)
---
## Preparation
Boot from the [official Arch ISO](https://archlinux.org/download/).
### Connect to WiFi
```bash
iwctl station wlan0 connect <SSID>
```
### Set keymap and font
```bash
loadkeys us
setfont ter-132b
```
### Verify UEFI mode
```bash
cat /sys/firmware/efi/fw_platform_size
# Should return 64
```
### (Optional) SSH in from another machine
```bash
passwd # set root password
ip addr show # get IP
# From other machine: ssh root@<ip>
```
---
## Disk Partitioning
Assuming single-boot Arch on `/dev/nvme0n1`.
### Wipe existing partitions
```bash
sgdisk --zap-all /dev/nvme0n1
```
### Create partitions
- **ESP:** 2GB FAT32 for `/boot`
- **System:** Rest of disk, LUKS2 encrypted BTRFS
```bash
parted --script /dev/nvme0n1 \
mklabel gpt \
mkpart ESP fat32 1MiB 2049MiB \
set 1 esp on \
mkpart Linux btrfs 2050MiB 100%
```
### Format ESP
```bash
mkfs.fat -F 32 /dev/nvme0n1p1
```
---
## Encryption Setup
### Create LUKS container
```bash
cryptsetup luksFormat /dev/nvme0n1p2
```
**Save the UUID** — you'll need it for the bootloader:
```bash
cryptsetup luksUUID /dev/nvme0n1p2
```
### Open the container
```bash
cryptsetup open /dev/nvme0n1p2 root
```
---
## BTRFS Setup
### Format and mount
```bash
mkfs.btrfs /dev/mapper/root
mount /dev/mapper/root /mnt
```
### Create subvolumes
```bash
btrfs subvolume create /mnt/@
btrfs subvolume create /mnt/@home
btrfs subvolume create /mnt/@var_log
btrfs subvolume create /mnt/@var_cache
btrfs subvolume create /mnt/@snapshots
```
### Remount with subvolumes
```bash
umount /mnt
mount -o compress=zstd:1,noatime,subvol=@ /dev/mapper/root /mnt
mount --mkdir -o compress=zstd:1,noatime,subvol=@home /dev/mapper/root /mnt/home
mount --mkdir -o compress=zstd:1,noatime,subvol=@var_log /dev/mapper/root /mnt/var/log
mount --mkdir -o compress=zstd:1,noatime,subvol=@var_cache /dev/mapper/root /mnt/var/cache
mount --mkdir -o compress=zstd:1,noatime,subvol=@snapshots /dev/mapper/root /mnt/.snapshots
mount --mkdir /dev/nvme0n1p1 /mnt/boot
```
---
## Install Base System
```bash
pacman -Syy
pacstrap -K /mnt \
base base-devel linux linux-firmware linux-headers \
git vim neovim \
btrfs-progs efibootmgr limine cryptsetup \
networkmanager iwd wireless-regdb \
reflector bash-completion zsh \
pipewire pipewire-alsa pipewire-pulse pipewire-jack wireplumber sof-firmware \
bluez bluez-utils \
acpi acpid power-profiles-daemon \
firewalld cups avahi nss-mdns \
util-linux terminus-font openssh man sudo rsync \
amd-ucode mesa vulkan-radeon libva-mesa-driver
```
### Generate fstab
```bash
genfstab -U /mnt >> /mnt/etc/fstab
```
---
## System Configuration
### Chroot in
```bash
arch-chroot /mnt
```
### Timezone and locale
```bash
ln -sf /usr/share/zoneinfo/America/Denver /etc/localtime
hwclock --systohc
# Edit /etc/locale.gen, uncomment en_US.UTF-8 UTF-8
vim /etc/locale.gen
locale-gen
echo "LANG=en_US.UTF-8" > /etc/locale.conf
```
### Console font and keymap
```bash
cat > /etc/vconsole.conf << EOF
KEYMAP=us
FONT=ter-132b
EOF
```
### Hostname
```bash
echo "framework" > /etc/hostname
```
### Root password
```bash
passwd
```
### Create user
```bash
useradd -mG wheel phil
passwd phil
EDITOR=vim visudo # uncomment %wheel ALL=(ALL:ALL) ALL
```
### Configure mkinitcpio
Edit `/etc/mkinitcpio.conf`:
```bash
MODULES=(btrfs)
BINARIES=(/usr/bin/btrfs)
HOOKS=(base udev autodetect microcode modconf kms keyboard keymap consolefont block encrypt filesystems fsck)
```
> **Note:** Add `resume` after `filesystems` if you want hibernation support.
Regenerate:
```bash
mkinitcpio -P
```
---
## Limine Bootloader
### Install Limine
```bash
mkdir -p /boot/EFI/limine
cp /usr/share/limine/BOOTX64.EFI /boot/EFI/limine/
```
### Create NVRAM entry
```bash
efibootmgr --create --disk /dev/nvme0n1 --part 1 \
--label "Arch Linux" \
--loader '\EFI\limine\BOOTX64.EFI' \
--unicode
```
### Configure Limine
Create `/boot/EFI/limine/limine.conf`:
```
timeout: 3
/Arch Linux
protocol: linux
path: boot():/vmlinuz-linux
cmdline: quiet cryptdevice=UUID=<YOUR-LUKS-UUID>:root root=/dev/mapper/root rw rootflags=subvol=@ rootfstype=btrfs cfg80211.ieee80211_regdom=US
module_path: boot():/initramfs-linux.img
/Arch Linux (fallback)
protocol: linux
path: boot():/vmlinuz-linux
cmdline: quiet cryptdevice=UUID=<YOUR-LUKS-UUID>:root root=/dev/mapper/root rw rootflags=subvol=@ rootfstype=btrfs cfg80211.ieee80211_regdom=US
module_path: boot():/initramfs-linux-fallback.img
```
Replace `<YOUR-LUKS-UUID>` with the UUID from earlier.
---
## Enable Services
```bash
systemctl enable NetworkManager
systemctl enable iwd
systemctl enable bluetooth
systemctl enable cups
systemctl enable avahi-daemon
systemctl enable firewalld
systemctl enable acpid
systemctl enable power-profiles-daemon
systemctl enable reflector.timer
systemctl enable fstrim.timer
```
---
## Framework AMD Tweaks
### Disable PC speaker
Create `/etc/modprobe.d/nobeep.conf`:
```
blacklist pcspkr
blacklist snd_pcsp
```
### Lid behavior
Edit `/etc/systemd/logind.conf`:
```ini
HandlePowerKey=ignore
HandlePowerKeyLongPress=poweroff
HandleLidSwitch=suspend
HandleLidSwitchExternalPower=suspend
HandleLidSwitchDocked=ignore
```
### WiFi performance (MediaTek RZ616)
The AMD Framework uses MediaTek WiFi which needs some tuning.
**Set regulatory domain** — without this you're stuck on 2.4GHz:
```bash
# Add to Limine cmdline:
cfg80211.ieee80211_regdom=US
```
**Use iwd as NetworkManager backend** for better stability:
Create `/etc/NetworkManager/conf.d/wifi-backend.conf`:
```ini
[device]
wifi.backend=iwd
```
**Disable WiFi power saving** to prevent disconnects:
Create `/etc/modprobe.d/mt7921.conf`:
```
options mt7921e power_save=0
```
### Headphone jack buzz fix
The AMD board has a slight buzz when audio is idle. Disable power saving:
Create `/etc/modprobe.d/audio-powersave.conf`:
```
options snd_hda_intel power_save=0
```
### USB-A expansion card power drain
Avoid placing USB-A cards in the **two rear slots** — they cause higher idle power drain. Front slots are fine.
### HDMI/DisplayPort expansion cards
Don't use the **front-left slot** for HDMI/DP cards — may not work on AMD.
---
## Reboot
```bash
exit
umount -R /mnt
cryptsetup close root
reboot
```
Remove the USB drive.
---
## Post-Install
### Connect to WiFi
```bash
nmcli device wifi connect <SSID> password <password>
```
### Install paru (AUR helper)
```bash
sudo pacman -S --needed git base-devel
git clone https://aur.archlinux.org/paru.git
cd paru && makepkg -si
cd .. && rm -rf paru
```
### Enable pacman colors
Uncomment `Color` in `/etc/pacman.conf`.
### Time sync
```bash
timedatectl set-ntp true
```
### Pacman hook for Limine updates
Create `/etc/pacman.d/hooks/99-limine.hook`:
```ini
[Trigger]
Operation = Install
Operation = Upgrade
Type = Package
Target = limine
[Action]
Description = Deploying Limine after upgrade...
When = PostTransaction
Exec = /usr/bin/cp /usr/share/limine/BOOTX64.EFI /boot/EFI/limine/
```
### BIOS updates
Framework AMD is well supported on LVFS. Check for updates:
```bash
sudo pacman -S fwupd
fwupdmgr refresh
fwupdmgr get-updates
fwupdmgr update
```
> **Note:** If you have a batch 1 or 2 device, make sure BIOS is at least 3.03 before updating further.
---
## Next Steps
- [[10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/Hyprland Setup]] — graphical environment
- [[10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/Network]] — advanced networking
- Snapper for BTRFS snapshots
- Swap/hibernation setup
---
## References
- [Arch Wiki: Framework Laptop 13](https://wiki.archlinux.org/title/Framework_Laptop_13)
- [Arch Wiki: Installation Guide](https://wiki.archlinux.org/title/Installation_guide)
- [Arch Wiki: Limine](https://wiki.archlinux.org/title/Limine)
- [Arch Wiki: BTRFS](https://wiki.archlinux.org/title/Btrfs)
- [Arch Wiki: dm-crypt](https://wiki.archlinux.org/title/Dm-crypt)

View File

@@ -0,0 +1,101 @@
---
publish: true
permalink: /os/disks
title: Disks
created: 2026-01-29T21:46:53.106-07:00
modified: 2026-02-05T12:18:02.151-07:00
tags:
- disks
- automount
- usb
cssclasses: ""
---
Automounting removable drives with udiskie.
## Installation
```bash
sudo pacman -S udiskie udisks2
```
## Usage
### Start udiskie
Run in background (auto-mounts drives):
```bash
udiskie &
```
With tray icon:
```bash
udiskie --tray &
```
### Hyprland Integration
Add to `~/.config/hypr/hyprland.conf`:
```bash
exec-once = udiskie --tray
```
## Configuration
Config location: `~/.config/udiskie/config.yml`
```yaml
program_options:
tray: true
notify: true
automount: true
device_config:
- device_file: /dev/sda1
options:
- noexec
```
## Manual Control
```bash
# Mount
udisksctl mount -b /dev/sdb1
# Unmount
udisksctl unmount -b /dev/sdb1
# Power off (safely eject)
udisksctl power-off -b /dev/sdb
# List drives
lsblk
```
## Encrypted Drives
udiskie handles LUKS-encrypted drives automatically — prompts for password when detected.
For command line:
```bash
# Unlock
udisksctl unlock -b /dev/sdb1
# Then mount
udisksctl mount -b /dev/dm-0
```
## Mount Points
By default, drives mount to `/run/media/$USER/<label>`
## Tips
- Use `--no-automount` if you prefer manual mounting
- Notifications require a notification daemon (e.g., [[10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/Mako]])
- For NTFS support: `sudo pacman -S ntfs-3g`
## Resources
- GitHub: https://github.com/coldfix/udiskie
- Arch Wiki: https://wiki.archlinux.org/title/Udisks

View File

@@ -0,0 +1,106 @@
---
publish: true
permalink: /os/fonts
title: Fonts
created: 2026-01-29T15:24:42.068-07:00
modified: 2026-02-05T12:18:02.154-07:00
tags:
- fonts
- rendering
- appearance
cssclasses: ""
---
Font installation and rendering improvements for Arch Linux.
## Essential Fonts
```bash
sudo pacman -S \
ttf-dejavu ttf-liberation ttf-roboto \
noto-fonts noto-fonts-cjk noto-fonts-emoji \
ttf-jetbrains-mono ttf-fira-code \
ttf-font-awesome
```
### Nerd Fonts (icons in terminal)
```bash
paru -S ttf-jetbrains-mono-nerd
# or download from https://www.nerdfonts.com/
```
## Font Rendering
Arch's default font rendering can look rough. These tweaks improve it significantly.
### Enable good defaults
```bash
sudo ln -s /usr/share/fontconfig/conf.avail/10-sub-pixel-rgb.conf /etc/fonts/conf.d/
sudo ln -s /usr/share/fontconfig/conf.avail/10-hinting-slight.conf /etc/fonts/conf.d/
sudo ln -s /usr/share/fontconfig/conf.avail/11-lcdfilter-default.conf /etc/fonts/conf.d/
```
### User fontconfig
Create `~/.config/fontconfig/fonts.conf`:
```xml
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<match target="font">
<edit name="antialias" mode="assign">
<bool>true</bool>
</edit>
<edit name="hinting" mode="assign">
<bool>true</bool>
</edit>
<edit name="hintstyle" mode="assign">
<const>hintslight</const>
</edit>
<edit name="lcdfilter" mode="assign">
<const>lcddefault</const>
</edit>
<edit name="rgba" mode="assign">
<const>rgb</const>
</edit>
</match>
</fontconfig>
```
### Rebuild font cache
```bash
fc-cache -fv
```
## Verify Settings
```bash
fc-match -v sans | grep -E "antialias|hinting|hintstyle|rgba"
```
## Default Fonts
Set preferred defaults:
```xml
<!-- Add to fonts.conf -->
<alias>
<family>sans-serif</family>
<prefer><family>Noto Sans</family></prefer>
</alias>
<alias>
<family>serif</family>
<prefer><family>Noto Serif</family></prefer>
</alias>
<alias>
<family>monospace</family>
<prefer><family>JetBrains Mono</family></prefer>
</alias>
```
## Resources
- Detailed guide: https://github.com/davgar99/arch-linux-font-improvement-guide
- Arch Wiki: https://wiki.archlinux.org/title/Font_configuration

View File

@@ -0,0 +1,203 @@
---
publish: true
permalink: /os/hyprland
title: Hyprland Setup
created: 2026-01-29T15:09:13.502-07:00
modified: 2026-02-05T12:18:02.155-07:00
tags:
- hyprland
- wayland
- desktop
cssclasses: ""
---
Hyprland is a dynamic tiling Wayland compositor. This covers the full Hyprland ecosystem setup after [[10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/Base Install]].
## Installation
```bash
sudo pacman -S \
hyprland \
hyprlock \
hypridle \
hyprpaper \
hyprpicker \
hyprcursor \
hyprsunset \
xdg-desktop-portal-hyprland \
hyprpolkitagent
```
### Full Package List
All Hyprland ecosystem packages I have installed:
- hyprcursor
- hyprgraphics
- hypridle
- hyprland
- hyprland-guiutils
- hyprland-protocols
- hyprland-qt-support
- hyprlang
- hyprlock
- hyprpaper
- hyprpicker
- hyprpolkitagent
- hyprpwcenter
- hyprsunset
- hyprtoolkit
- hyprutils
- hyprwayland-scanner
- hyprwire
- xdg-desktop-portal-hyprland
### AUR Packages
```bash
paru -S hyprshutdown
```
See [[10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/hyprshutdown]] for build instructions if the AUR version is outdated.
## Related Components
- [[10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/Ashell]] — Status bar
- [[10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/Mako]] — Notifications
- [[10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/hyprlock]] — Screen lock with fingerprint support
- [[10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/hyprshutdown]] — Graceful shutdown animations
- [[10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/fprintd]] — Fingerprint authentication
- [[10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/Plymouth]] — Boot splash screen
## Configuration Structure
My config uses **includes** to keep the main file clean and modular.
### Directory Layout
```
~/.config/hypr/
├── hyprland.conf # Main config (mostly defaults + sources)
├── hyprland.conf.d/ # Modular config includes
│ ├── monitors # Display configuration
│ ├── programs # Variable definitions ($terminal, etc.)
│ ├── autostart # exec-once statements
│ ├── general # Gaps, borders, layout
│ └── keybinds # Custom keybind overrides
├── hyprlock.conf # Lock screen config
├── hypridle.conf # Idle behavior config
├── hyprpaper.conf # Wallpaper config
└── hyprsunset.conf # Night light config
```
### Using Includes
The main `hyprland.conf` uses `source` statements to pull in modular configs:
```bash
# In hyprland.conf
source = ~/.config/hypr/hyprland.conf.d/monitors
source = ~/.config/hypr/hyprland.conf.d/programs
source = ~/.config/hypr/hyprland.conf.d/autostart
source = ~/.config/hypr/hyprland.conf.d/general
source = ~/.config/hypr/hyprland.conf.d/keybinds
```
### Why Includes?
1. **Keep defaults intact** — Main config stays close to upstream defaults
2. **Easy diffing** — Can compare against new Hyprland releases
3. **Modular changes** — Edit just monitors or keybinds without touching the rest
4. **Machine-specific** — Different monitor configs per machine, same base
### Example: programs
Define variables in one place:
```bash
# ~/.config/hypr/hyprland.conf.d/programs
$terminal = kitty
$filemanager = thunar
$menu = walker
```
### Example: autostart
All startup applications:
```bash
# ~/.config/hypr/hyprland.conf.d/autostart
# Hypr ecosystem
exec-once = hyprpaper & hypridle & hyprsunset
# Status bar
exec-once = ashell &
# Services
exec-once = systemctl --user start elephant
exec-once = systemctl --user start hyprpolkitagent
# Apps
exec-once = walker --gapplication-service
exec-once = udiskie &
exec-once = wl-paste --watch cliphist store
exec-once = tailscale up
exec-once = protonmail-bridge-core
```
### Example: keybinds
Override and add custom bindings:
```bash
# ~/.config/hypr/hyprland.conf.d/keybinds
$mainModS = SUPER_SHIFT
# Unbind defaults I don't want
unbind = $mainMod, Q
unbind = $mainMod, C
unbind = $mainMod, R
# My bindings
bind = $mainMod, Return, exec, $terminal
bind = $mainMod, Q, killactive
bind = $mainModS, B, exec, qutebrowser
bind = $mainMod, Space, exec, $menu
```
## Idle Management (hypridle)
Config: `~/.config/hypr/hypridle.conf`
My idle sequence:
1. **2.5 min** — Dim screen + keyboard backlight
2. **5 min** — Lock screen
3. **5.5 min** — Turn off display
4. **30 min** — Suspend
Key settings:
```bash
general {
lock_cmd = pidof hyprlock || hyprlock # Prevent multiple instances
before_sleep_cmd = loginctl lock-session
after_sleep_cmd = hyprctl dispatch dpms on
}
```
## Brightness Control
Install `brightnessctl`:
```bash
sudo pacman -S brightnessctl
```
Framework laptop keybinds (already in default config):
```bash
bindel = ,XF86MonBrightnessUp, exec, brightnessctl -e4 -n2 set 5%+
bindel = ,XF86MonBrightnessDown, exec, brightnessctl -e4 -n2 set 5%-
```
## Tips
- Use `hyprctl` to interact with Hyprland from scripts
- `hyprctl monitors` — list displays
- `hyprctl clients` — list windows
- `hyprctl reload` — reload config without restart

View File

@@ -0,0 +1,107 @@
---
publish: true
permalink: /os/keychain
title: Keychain
created: 2026-01-29T21:15:48.335-07:00
modified: 2026-02-05T12:18:02.157-07:00
tags:
- security
- secrets
- gnome-keyring
cssclasses: ""
---
GNOME Keyring for managing secrets, SSH keys, and application passwords.
## Installation
```bash
sudo pacman -S gnome-keyring libsecret seahorse
```
- `gnome-keyring` — The keyring daemon
- `libsecret` — Library for apps to access secrets
- `seahorse` — GUI for managing keyring
## PAM Integration
Automatically unlock keyring on login.
Edit `/etc/pam.d/login`:
```
auth optional pam_gnome_keyring.so
session optional pam_gnome_keyring.so auto_start
```
For GDM/SDDM, also edit `/etc/pam.d/passwd`:
```
password optional pam_gnome_keyring.so
```
## Hyprland Integration
Add to `~/.config/hypr/hyprland.conf`:
```bash
exec-once = gnome-keyring-daemon --start --components=secrets,ssh
```
Set environment variables in hyprland.conf:
```bash
env = SSH_AUTH_SOCK,$XDG_RUNTIME_DIR/gcr/ssh
```
Or in your shell profile:
```bash
export SSH_AUTH_SOCK="$XDG_RUNTIME_DIR/gcr/ssh"
```
## SSH Key Management
### Add key to agent
```bash
ssh-add ~/.ssh/id_ed25519
```
### List keys
```bash
ssh-add -l
```
### GUI management
Launch Seahorse:
```bash
seahorse
```
## Unlocking
If keyring doesn't auto-unlock:
```bash
# Manually unlock
gnome-keyring-daemon --unlock
# Or via secret-tool
secret-tool search --unlock xdg:schema org.gnome.keyring.Note
```
## Application Support
Apps using libsecret (most modern apps) will automatically use gnome-keyring. For apps that need explicit setup:
### Git credential storage
```bash
git config --global credential.helper /usr/lib/git-core/git-credential-libsecret
```
### VS Code
VS Code uses gnome-keyring automatically for settings sync.
## Resources
- Arch Wiki: https://wiki.archlinux.org/title/GNOME/Keyring

View File

@@ -0,0 +1,106 @@
---
publish: true
permalink: /os/mako
title: Mako
created: 2026-01-29T15:18:16.265-07:00
modified: 2026-02-05T12:18:02.159-07:00
tags:
- notifications
- wayland
- hyprland
cssclasses: ""
---
Mako is a lightweight notification daemon for Wayland compositors.
## Installation
```bash
sudo pacman -S mako libnotify
```
## Configuration
Config location: `~/.config/mako/config`
```ini
# Appearance
font=monospace 11
background-color=#282828
text-color=#ebdbb2
border-color=#458588
border-size=2
border-radius=5
# Behavior
default-timeout=5000
ignore-timeout=0
max-visible=5
# Position
anchor=top-right
margin=10
# Grouping
group-by=app-name
# Actions
on-button-left=dismiss
on-button-right=dismiss-all
# Urgency-specific
[urgency=low]
background-color=#282828
[urgency=normal]
background-color=#282828
[urgency=critical]
background-color=#cc241d
default-timeout=0
```
## Hyprland Integration
Add to `~/.config/hypr/hyprland.conf`:
```bash
exec-once = mako
```
## Usage
### Test notifications
```bash
notify-send "Hello" "This is a test notification"
notify-send -u critical "Warning" "This is urgent!"
```
### Control mako
```bash
makoctl dismiss # Dismiss latest
makoctl dismiss --all # Dismiss all
makoctl restore # Restore last dismissed
makoctl list # List waiting notifications
makoctl reload # Reload config
```
## Do Not Disturb
```bash
# Enable DND
makoctl set-mode do-not-disturb
# Disable DND
makoctl set-mode default
```
Add a keybind:
```bash
bind = SUPER, N, exec, makoctl set-mode do-not-disturb
bind = SUPER SHIFT, N, exec, makoctl set-mode default
```
## Resources
- GitHub: https://github.com/emersion/mako
- Man page: `man 5 mako`

View File

@@ -0,0 +1,182 @@
---
publish: true
permalink: /os/network
title: Network
created: 2026-01-29T14:15:15.157-07:00
modified: 2026-02-05T12:18:10.583-07:00
tags:
- network
- wifi
- tailscale
cssclasses: ""
---
Network configuration using NetworkManager with iwd backend, systemd-resolved for DNS, and Tailscale for mesh networking.
## Architecture
My setup:
- **NetworkManager** — Connection management
- **iwd** — WiFi backend (replaces wpa_supplicant)
- **systemd-resolved** — DNS resolution
- **dhcpcd** — Disabled (NetworkManager handles DHCP)
## Disable dhcpcd
NetworkManager handles DHCP itself, so dhcpcd is not needed and can cause conflicts.
```bash
# Stop and disable dhcpcd
sudo systemctl stop dhcpcd
sudo systemctl disable dhcpcd
# Verify it's not running
systemctl status dhcpcd
```
If you had dhcpcd managing interfaces, NetworkManager will take over after a reboot.
## NetworkManager + iwd
Using iwd as the WiFi backend provides better stability than wpa_supplicant, especially on Framework AMD with the MediaTek WiFi card.
### Configure iwd backend
Create `/etc/NetworkManager/conf.d/wifi-backend.conf`:
```ini
[device]
wifi.backend=iwd
```
### Enable services
```bash
sudo systemctl enable --now NetworkManager
sudo systemctl enable --now iwd
```
### Disable wpa_supplicant (if installed)
```bash
sudo systemctl stop wpa_supplicant
sudo systemctl disable wpa_supplicant
```
## DNS with systemd-resolved
I use systemd-resolved for DNS instead of letting NetworkManager write to `/etc/resolv.conf` directly.
### Enable systemd-resolved
```bash
sudo systemctl enable --now systemd-resolved
```
### Link resolv.conf
```bash
sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
```
### Configure NetworkManager to use it
Create `/etc/NetworkManager/conf.d/dns.conf`:
```ini
[main]
dns=systemd-resolved
```
### Verify
```bash
resolvectl status
```
## WiFi Management
### CLI (nmcli)
```bash
# List networks
nmcli device wifi list
# Connect
nmcli device wifi connect "SSID" password "password"
# Saved connections
nmcli connection show
# Disconnect
nmcli device disconnect wlan0
# Forget network
nmcli connection delete "SSID"
```
### TUI (impala)
I use [[10-19 LIFE/13 TECH SETUP/13.11 APPS/impala]] for interactive WiFi management — much nicer than `iwctl`:
```bash
impala
```
See [[10-19 LIFE/13 TECH SETUP/13.11 APPS/impala]] for keybindings and configuration.
## Tailscale
Tailscale creates a secure mesh network between all your devices.
### Installation
```bash
curl -fsSL https://tailscale.com/install.sh | sh
```
Or via pacman:
```bash
sudo pacman -S tailscale
```
### Setup
```bash
sudo systemctl enable --now tailscaled
sudo tailscale up
```
Follow the auth URL to connect to your tailnet.
### Useful commands
```bash
tailscale status # Show connected devices
tailscale ip # Show Tailscale IP
tailscale ping <host> # Ping another device
tailscale ssh <host> # SSH to another device (if enabled)
```
### Exit node (use another device as VPN)
```bash
# Enable exit node on a device
sudo tailscale up --advertise-exit-node
# Use an exit node
sudo tailscale up --exit-node=<hostname>
```
## Complete Setup Summary
1. Disable dhcpcd
2. Enable NetworkManager + iwd
3. Disable wpa_supplicant
4. Enable systemd-resolved
5. Link resolv.conf
6. Install Tailscale
7. Install [[10-19 LIFE/13 TECH SETUP/13.11 APPS/impala]] for WiFi TUI
## Resources
- Arch Wiki: https://wiki.archlinux.org/title/NetworkManager#Using_iwd_as_the_Wi-Fi_backend
- Tailscale docs: https://tailscale.com/kb/

View File

@@ -0,0 +1,131 @@
---
publish: true
permalink: /os/plymouth
title: Plymouth
created: 2026-02-05T09:31:46.739-07:00
modified: 2026-02-05T12:18:10.585-07:00
tags:
- boot
- splash
- luks
cssclasses: ""
---
Plymouth provides a graphical boot splash screen, including during LUKS password entry.
## Installation
```bash
sudo pacman -S plymouth
```
## Configuration
### mkinitcpio (systemd hooks)
I use systemd-based initramfs hooks. Edit `/etc/mkinitcpio.conf`:
```bash
HOOKS=(base systemd autodetect microcode modconf kms keyboard sd-vconsole plymouth sd-encrypt block filesystems resume fsck)
```
Key points:
- Using `systemd` not `udev`
- Using `sd-vconsole` not `keymap consolefont`
- Using `sd-encrypt` not `encrypt`
- `plymouth` comes **after** `sd-vconsole` and **before** `sd-encrypt`
Regenerate initramfs:
```bash
sudo mkinitcpio -P
```
### Kernel Parameters
Add `splash` to your bootloader config.
**For Limine** (`/boot/EFI/limine/limine.conf`):
```
cmdline: quiet splash rd.luks.uuid=<UUID> root=/dev/mapper/root ...
```
> **Note:** With systemd hooks, use `rd.luks.uuid=` instead of `cryptdevice=`
**For systemd-boot** (`/boot/loader/entries/arch.conf`):
```
options quiet splash rd.luks.uuid=<UUID> root=/dev/mapper/root ...
```
### Set Theme
```bash
# List available themes
plymouth-set-default-theme -l
# Set theme (and rebuild initramfs)
sudo plymouth-set-default-theme -R spinner
```
Popular themes:
- `spinner` — Simple spinner (default)
- `bgrt` — Uses manufacturer logo from ACPI
- `fade-in` — Fading star field
### Install more themes
```bash
paru -S plymouth-theme-arch-logo
paru -S plymouth-theme-monoarch
```
## LUKS Integration
Plymouth displays the LUKS password prompt graphically instead of the text console.
For this to work with systemd hooks:
1. `plymouth` hook must be before `sd-encrypt` hook
2. `splash` must be in kernel parameters
3. Use `rd.luks.uuid=` for LUKS device specification
## systemd vs udev Hooks
| udev-based | systemd-based |
|------------|---------------|
| `udev` | `systemd` |
| `keymap consolefont` | `sd-vconsole` |
| `encrypt` | `sd-encrypt` |
| `cryptdevice=UUID=...:name` | `rd.luks.uuid=...` |
## Testing
Test without rebooting:
```bash
sudo plymouthd
sudo plymouth --show-splash
# Press Enter to dismiss
sudo plymouth quit
```
## Troubleshooting
### No splash on boot
1. Verify `splash` is in kernel params
2. Check hook order in mkinitcpio.conf
3. Regenerate initramfs: `sudo mkinitcpio -P`
### LUKS prompt is text-only
The `plymouth` hook must come **before** `sd-encrypt`:
```bash
HOOKS=(... sd-vconsole plymouth sd-encrypt ...)
```
### View boot messages
Remove `quiet` temporarily to see boot messages if Plymouth isn't working.
## Resources
- Arch Wiki: https://wiki.archlinux.org/title/Plymouth
- Arch Wiki (mkinitcpio systemd): https://wiki.archlinux.org/title/Mkinitcpio#Common_hooks

View File

@@ -0,0 +1,95 @@
---
publish: true
permalink: /os/printing
title: Printing
created: 2026-02-05T08:52:25.911-07:00
modified: 2026-02-05T12:18:10.587-07:00
tags:
- printing
- cups
cssclasses: ""
---
CUPS printing setup for Arch Linux.
## Installation
```bash
sudo pacman -S cups cups-pdf
```
## Enable Services
```bash
sudo systemctl enable --now cups
sudo systemctl enable --now avahi-daemon
```
Avahi enables automatic network printer discovery.
## Configuration
### Web interface
Access CUPS admin at: http://localhost:631
### Add printer via CLI
```bash
# List available printers
lpinfo -v
# Add a printer
lpadmin -p PrinterName -E -v "uri" -m "driver.ppd"
# Set default printer
lpoptions -d PrinterName
```
### Network printers (auto-discovery)
With Avahi running, network printers should appear automatically. If not:
```bash
# Install nss-mdns for .local hostname resolution
sudo pacman -S nss-mdns
# Edit /etc/nsswitch.conf, add mdns_minimal before resolve:
hosts: mymachines mdns_minimal [NOTFOUND=return] resolve [!UNAVAIL=return] files myhostname dns
```
## Print to PDF
The `cups-pdf` package creates a virtual PDF printer:
```bash
# Print to PDF (outputs to ~/PDF/)
lp -d cups-pdf document.txt
```
## Useful Commands
```bash
lpstat -p # List printers
lpstat -t # Full status
lp -d PrinterName file # Print file
cancel <job-id> # Cancel print job
lprm <job-id> # Remove print job
```
## Troubleshooting
```bash
# Check CUPS status
systemctl status cups
# View logs
journalctl -u cups -f
# Restart CUPS
sudo systemctl restart cups
```
## Resources
- Arch Wiki: https://wiki.archlinux.org/title/CUPS

View File

@@ -0,0 +1,153 @@
---
publish: true
permalink: /os/shell
title: Shell
created: 2026-01-29T16:18:01.019-07:00
modified: 2026-02-05T12:18:10.588-07:00
tags:
- shell
- terminal
- bash
cssclasses: ""
---
Shell configuration with Bash, Starship prompt, and Atuin history.
## Starship Prompt
Starship is a fast, customizable prompt that works with any shell.
### Installation
```bash
curl -sS https://starship.rs/install.sh | sh
```
Or via pacman:
```bash
sudo pacman -S starship
```
### Bash Integration
Add to `~/.bashrc`:
```bash
eval "$(starship init bash)"
```
### Configuration
Config location: `~/.config/starship.toml`
```toml
# Minimal prompt
format = """
$directory\
$git_branch\
$git_status\
$character"""
[directory]
truncation_length = 3
truncate_to_repo = true
[git_branch]
symbol = " "
[git_status]
format = '([$all_status$ahead_behind]($style) )'
[character]
success_symbol = "[](green)"
error_symbol = "[](red)"
```
## Atuin (Shell History)
See [[10-19 LIFE/13 TECH SETUP/13.11 APPS/atuin]] for full setup. Quick integration:
```bash
# Install
curl --proto '=https' --tlsv1.2 -LsSf https://setup.atuin.sh | sh
# Add to ~/.bashrc
. "$HOME/.atuin/bin/env"
[[ -f ~/.bash-preexec.sh ]] && source ~/.bash-preexec.sh
eval "$(atuin init bash)"
```
## My .bashrc Structure
I keep my bashrc clean by sourcing external files:
```bash
# ~/.bashrc
# If not running interactively, don't do anything
[[ $- != *i* ]] && return
# Basic aliases
alias ls='ls --color=auto'
alias grep='grep --color=auto'
# PATH
export PATH="/home/phil/.local/bin:$PATH"
export PATH="$HOME/.npm-global/bin:$PATH"
export PATH="$PATH:$HOME/go/bin"
# Starship
eval "$(starship init bash)"
# Atuin
. "$HOME/.atuin/bin/env"
[[ -f ~/.bash-preexec.sh ]] && source ~/.bash-preexec.sh
eval "$(atuin init bash)"
# Custom config (aliases, functions)
source ~/.config/dotfiles/aliases
source ~/.config/dotfiles/functions
# Completions
source <(openclaw completion --shell bash)
```
### Modular Config
Keep aliases and functions in separate files:
```
~/.config/dotfiles/
├── aliases # alias definitions
└── functions # shell functions
```
This keeps `.bashrc` clean and makes it easy to version control customizations separately.
## Useful Tools
```bash
sudo pacman -S \
fzf # Fuzzy finder
bat # Better cat
eza # Better ls
ripgrep # Better grep
fd # Better find
```
### fzf Integration
```bash
# Add to ~/.bashrc
source /usr/share/fzf/key-bindings.bash
source /usr/share/fzf/completion.bash
```
Keybindings:
- `Ctrl+R` — Search history (or use Atuin)
- `Ctrl+T` — Search files
- `Alt+C` — cd into directory
## Resources
- Starship: https://starship.rs/
- Atuin: https://atuin.sh/

View File

@@ -0,0 +1,143 @@
---
publish: true
permalink: /os/yubikey
title: Yubikey
created: 2026-01-29T21:27:17.327-07:00
modified: 2026-02-05T12:18:10.589-07:00
tags:
- security
- yubikey
- 2fa
cssclasses: ""
---
YubiKey hardware security key setup on Arch Linux.
## Installation
```bash
sudo pacman -S \
yubikey-manager \
yubico-authenticator \
pcsclite ccid
```
- `yubikey-manager` — CLI tool (`ykman`)
- `yubico-authenticator` — TOTP/HOTP GUI
- `pcsclite`, `ccid` — Smart card daemon
## Enable Services
```bash
sudo systemctl enable --now pcscd
```
## Basic Usage
### Check YubiKey
```bash
ykman info
```
### List OTP slots
```bash
ykman otp info
```
## TOTP Authenticator
Launch the GUI:
```bash
yubico-authenticator
```
Or use CLI:
```bash
# List accounts
ykman oath accounts list
# Get code
ykman oath accounts code "Account Name"
```
## FIDO2/WebAuthn
Works out of the box with modern browsers for passkeys and 2FA.
### udev rules
If YubiKey isn't detected, add udev rules:
```bash
sudo pacman -S libu2f-host
```
Or manually create `/etc/udev/rules.d/70-u2f.rules`:
```
# YubiKey
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", MODE="0664", GROUP="users", ATTRS{idVendor}=="1050"
```
Reload:
```bash
sudo udevadm control --reload-rules
sudo udevadm trigger
```
## SSH Authentication
Use YubiKey for SSH keys via FIDO2:
### Generate key
```bash
ssh-keygen -t ed25519-sk -O resident -O verify-required
```
- `-t ed25519-sk` — FIDO2 key type
- `-O resident` — Store on YubiKey (discoverable)
- `-O verify-required` — Require touch + PIN
### Load resident keys
```bash
ssh-add -K # Load all resident keys from YubiKey
```
## PIV (Smart Card)
For certificate-based auth:
```bash
# Check PIV status
ykman piv info
# Generate key in slot 9a
ykman piv keys generate 9a public.pem
```
## GPG
Use YubiKey as GPG smart card:
```bash
gpg --card-status
gpg --card-edit
```
## Locking Workstation
Lock screen when YubiKey is removed:
```bash
# Install
paru -S yubikey-touch-detector
# Or use udev rule + hyprlock
```
## Resources
- Arch Wiki: https://wiki.archlinux.org/title/Smartcards
- YubiKey docs: https://docs.yubico.com/

View File

@@ -0,0 +1,120 @@
---
publish: true
permalink: /os/fprintd
title: fprintd
created: 2026-02-05T09:31:46.737-07:00
modified: 2026-02-05T12:18:16.843-07:00
tags:
- security
- fingerprint
- authentication
cssclasses: ""
---
Fingerprint authentication daemon for Linux. Works with [[10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/hyprlock]] and system login.
## Installation
```bash
sudo pacman -S fprintd
```
The service starts on-demand, no need to enable it.
## Enroll Fingerprints
```bash
# Enroll a finger (follow prompts)
fprintd-enroll
# Enroll specific finger
fprintd-enroll -f right-index-finger
# List enrolled fingerprints
fprintd-list $USER
```
## PAM Configuration
### For hyprlock
Create `/etc/pam.d/hyprlock`:
```
# PAM configuration file for hyprlock
auth include login
```
This inherits from the login config which includes fprintd.
### For system login
Edit `/etc/pam.d/system-local-login` — usually already configured if using default Arch PAM.
### Manual PAM setup
To add fingerprint auth to any PAM service, add before password auth:
```
auth sufficient pam_fprintd.so
```
## hyprlock Integration
Enable in `~/.config/hypr/hyprlock.conf`:
```bash
auth {
fingerprint {
enabled = true
ready_message = Scan fingerprint to unlock
present_message = Scanning...
retry_delay = 250
}
}
```
## Troubleshooting
### Check service status
```bash
systemctl status fprintd
```
### Verify device detection
```bash
fprintd-list $USER
```
Should show your fingerprint reader device.
### Re-enroll if not working
```bash
fprintd-delete $USER # Delete all prints
fprintd-enroll # Re-enroll
```
### Debug
```bash
# Run fprintd in foreground with debug
sudo /usr/libexec/fprintd -d
```
## Supported Devices
Framework Laptop 13 uses the **Goodix MOC Fingerprint Sensor** which works out of the box with fprintd.
Check if your device is supported:
```bash
lsusb | grep -i fingerprint
```
## Security Notes
- Fingerprint is "sufficient" not "required" — password always works as fallback
- Fingerprints are stored encrypted in `/var/lib/fprint/`
- Consider if fingerprint auth meets your security requirements
## Resources
- Arch Wiki: https://wiki.archlinux.org/title/Fprint

View File

@@ -0,0 +1,188 @@
---
publish: true
permalink: /os/hyprlock
title: hyprlock
created: 2026-02-05T09:31:46.736-07:00
modified: 2026-02-05T12:18:16.846-07:00
tags:
- hyprland
- lockscreen
- security
cssclasses: ""
---
hyprlock is the lock screen for Hyprland with support for fingerprint authentication.
## Installation
```bash
sudo pacman -S hyprlock
```
## My Configuration
Config: `~/.config/hypr/hyprlock.conf`
```bash
$font = Monospace
general {
hide_cursor = false
}
# Fingerprint authentication
auth {
fingerprint {
enabled = true
ready_message = Scan fingerprint to unlock
present_message = Scanning...
retry_delay = 250 # in milliseconds
}
}
animations {
enabled = true
bezier = linear, 1, 1, 0, 0
animation = fadeIn, 1, 5, linear
animation = fadeOut, 1, 5, linear
animation = inputFieldDots, 1, 2, linear
}
background {
monitor =
path = screenshot
blur_passes = 3
}
input-field {
monitor =
size = 20%, 5%
outline_thickness = 3
inner_color = rgba(0, 0, 0, 0.0) # no fill
outer_color = rgba(33ccffee) rgba(00ff99ee) 45deg
check_color = rgba(00ff99ee) rgba(ff6633ee) 120deg
fail_color = rgba(ff6633ee) rgba(ff0066ee) 40deg
font_color = rgb(143, 143, 143)
fade_on_empty = false
rounding = 15
font_family = $font
placeholder_text = Input password...
fail_text = $PAMFAIL
dots_spacing = 0.3
position = 0, -20
halign = center
valign = center
}
# TIME
label {
monitor =
text = $TIME
font_size = 90
font_family = $font
position = -30, 0
halign = right
valign = top
}
# DATE
label {
monitor =
text = cmd[update:60000] date +"%A, %d %B %Y"
font_size = 25
font_family = $font
position = -30, -150
halign = right
valign = top
}
# KEYBOARD LAYOUT
label {
monitor =
text = $LAYOUT[en,ru]
font_size = 24
onclick = hyprctl switchxkblayout all next
position = 250, -20
halign = center
valign = center
}
```
## Key Features
### Fingerprint Support
Requires [[10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/fprintd]] to be configured. The `auth` block enables fingerprint unlock:
```bash
auth {
fingerprint {
enabled = true
ready_message = Scan fingerprint to unlock
present_message = Scanning...
}
}
```
### Screenshot Background
Uses a screenshot of the current screen with blur:
```bash
background {
path = screenshot
blur_passes = 3
}
```
### Gradient Border
Input field has a gradient border matching Hyprland theme:
```bash
outer_color = rgba(33ccffee) rgba(00ff99ee) 45deg
```
## Integration with hypridle
hypridle triggers hyprlock on idle. See [[10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/Hyprland Setup#Idle Management (hypridle)]].
Key config in `~/.config/hypr/hypridle.conf`:
```bash
general {
lock_cmd = pidof hyprlock || hyprlock # Prevent multiple instances
before_sleep_cmd = loginctl lock-session
}
listener {
timeout = 300 # 5 min
on-timeout = loginctl lock-session
}
```
## Manual Lock
```bash
hyprlock
```
Or via keybind:
```bash
bind = $mainMod, L, exec, hyprlock
```
## Shortcuts
While locked:
- `ESC` — Clear password
- `Ctrl+U` — Clear password
- `Ctrl+Backspace` — Clear password
## Resources
- Wiki: https://wiki.hyprland.org/Hypr-Ecosystem/hyprlock

View File

@@ -0,0 +1,78 @@
---
publish: true
permalink: /os/hyprshutdown
title: hyprshutdown
created: 2026-02-05T09:31:46.735-07:00
modified: 2026-02-05T12:18:16.847-07:00
tags:
- hyprland
- shutdown
cssclasses: ""
---
hyprshutdown provides graceful shutdown/reboot with animated transitions for Hyprland.
## Installation
**From AUR:**
```bash
paru -S hyprshutdown
```
**Build from source** (if AUR is outdated):
```bash
git clone https://github.com/hyprwm/hyprshutdown
cd hyprshutdown
cmake .
make all
sudo make install
```
## Usage
```bash
# Shutdown with animation
hyprshutdown -t "Shutting down..." --post-cmd "shutdown -P 0"
# Reboot with animation
hyprshutdown -t "Restarting..." --post-cmd "reboot"
# Custom timeout (ms)
hyprshutdown -t "Goodbye!" --timeout 2000 --post-cmd "shutdown -P 0"
```
## Options
| Option | Description |
|--------|-------------|
| `-t, --text` | Message to display during animation |
| `--post-cmd` | Command to run after animation completes |
| `--timeout` | Animation duration in milliseconds |
## Integration
### Hyprland keybind
```bash
bind = $mainMod, M, exec, command -v hyprshutdown >/dev/null 2>&1 && hyprshutdown || hyprctl dispatch exit
```
### Ashell settings
In ashell config:
```toml
[settings]
shutdown_cmd = "hyprshutdown -t 'Shutting down...' --post-cmd 'shutdown -P 0'"
reboot_cmd = "hyprshutdown -t 'Restarting...' --post-cmd 'reboot'"
```
## Fallback
If hyprshutdown isn't installed, fall back to regular exit:
```bash
command -v hyprshutdown >/dev/null 2>&1 && hyprshutdown || hyprctl dispatch exit
```
## Resources
- GitHub: https://github.com/hyprwm/hyprshutdown

View File

@@ -0,0 +1,15 @@
---
publish: true
permalink: /ai/blogwatcher
title: blogwatcher
created: 2026-01-31T20:42:32.556-07:00
modified: 2026-02-05T12:18:45.700-07:00
tags:
- ai
- rss
- monitoring
cssclasses: ""
---
`go install github.com/Hyaxia/blogwatcher/cmd/blogwatcher@latest`

View File

@@ -1,5 +1,12 @@
--- ---
{"publish":true,"title":"Character Creation Cheat Sheet","created":"2025-06-20T20:54:32.708-06:00","modified":"2025-06-24T21:01:37.096-06:00","tags":["daggerheart"],"cssclasses":""} publish: true
permalink: /ttrpg/daggerheart/character-creation
title: Character Creation Cheat Sheet
created: 2026-01-29T14:04:18.364-07:00
modified: 2026-02-05T12:19:54.478-07:00
tags:
- daggerheart
cssclasses: ""
--- ---
1. Review any character creation notes from your Campaign Frame 1. Review any character creation notes from your Campaign Frame

View File

@@ -0,0 +1,21 @@
---
publish: true
permalink: /ttrpg/hbs
title: Holding Back Sin
created: 2026-01-29T14:04:18.607-07:00
modified: 2026-02-05T12:19:54.481-07:00
tags:
- daggerheart
- holding_back_sin
cssclasses: ""
---
## Campaign Frame
- [[20-29 HOBBYS/21 TTRPG/21.12 HOLDING BACK SIN/Sin Manifest]]
## Factions
- [[20-29 HOBBYS/21 TTRPG/21.12 HOLDING BACK SIN/The Church\|The Church]]
## Locations
- [[20-29 HOBBYS/21 TTRPG/21.12 HOLDING BACK SIN/The Pit\|The Pit]]
- [[20-29 HOBBYS/21 TTRPG/21.12 HOLDING BACK SIN/Ydrasog\|Ydrasog]]

View File

@@ -1,13 +1,21 @@
--- ---
{"publish":true,"title":"01 - Campaign Frame: Sin Manifest","created":"2025-06-20T22:15:05.363-06:00","modified":"2025-06-25T21:38:30.349-06:00","tags":["daggerheart","holding_back_sin"],"cssclasses":""} publish: true
permalink: /ttrpg/hbs/sin-manifest
title: "Campaign Frame: Sin Manifest"
created: 2026-01-29T14:04:18.718-07:00
modified: 2026-02-05T12:19:54.485-07:00
tags:
- daggerheart
- holding_back_sin
cssclasses: ""
--- ---
*Designed by [[06 AUTHOR/Phil Skentelbery]]* *Designed by [[06 AUTHOR/11 METADATA/Phil Skentelbery]]*
>[!warning] Under Construction >[!warning] Under Construction
>This page is under construction. Detail's will likely change prior to Session 0 >This page is under construction. Detail's will likely change prior to Session 0
## Pitch ## Pitch
Long ago, at the very edge of memory, [[10-19 HOBBYS/11 TTRPG/11.12 HOLDING BACK SIN/The Church]] imprisoned [[10-19 HOBBYS/11 TTRPG/11.12 HOLDING BACK SIN/The First Sinner]], a fallen angel rumored to be the source of all the evil's that plague the land of [[10-19 HOBBYS/11 TTRPG/11.12 HOLDING BACK SIN/Ydrasog]]. In the centuries that followed The Church has held The First Sinner in a magical prison known as [[10-19 HOBBYS/11 TTRPG/11.12 HOLDING BACK SIN/The Pit]], which sits deep in the center of [[Purgatory]], a miles-wide crater that is filled with a perpetual mist. Long ago, at the very edge of memory, [[20-29 HOBBYS/21 TTRPG/21.12 HOLDING BACK SIN/The Church]] imprisoned [[20-29 HOBBYS/21 TTRPG/21.12 HOLDING BACK SIN/The First Sinner]], a fallen angel rumored to be the source of all the evil's that plague the land of [[20-29 HOBBYS/21 TTRPG/21.12 HOLDING BACK SIN/Ydrasog]]. In the centuries that followed The Church has held The First Sinner in a magical prison known as [[20-29 HOBBYS/21 TTRPG/21.12 HOLDING BACK SIN/The Pit]], which sits deep in the center of [[Purgatory]], a miles-wide crater that is filled with a perpetual mist.
The magic's that maintain The Pit are now beginning to fail. Evils that only existed in history books are starting to bleed into Purgatory and, unless the source of the failure can be addressed, will soon begin to spread beyond the crater and into the world. You are prisoner's of The Church and rather than risk their own, your party of Sinners has been drafted to investigate the cause of the failures and, hopefully, reverse the impacts. The magic's that maintain The Pit are now beginning to fail. Evils that only existed in history books are starting to bleed into Purgatory and, unless the source of the failure can be addressed, will soon begin to spread beyond the crater and into the world. You are prisoner's of The Church and rather than risk their own, your party of Sinners has been drafted to investigate the cause of the failures and, hopefully, reverse the impacts.
### Tone & Feel ### Tone & Feel
@@ -17,7 +25,7 @@ Apocalypse, Ends Justify Means, Redemption, Survival
### Touchstones ### Touchstones
Hellboy: The Crooked Man, The Dark Crystal, Pointy Hat, Old Gods of Appalachia Hellboy: The Crooked Man, The Dark Crystal, Pointy Hat, Old Gods of Appalachia
## Character Creation ## Character Creation
*Check the [[10-19 HOBBYS/11 TTRPG/11.11 DAGGERHEART/Character Creation\|Cheat Sheet]] for additional guidance* *Check the [[20-29 HOBBYS/21 TTRPG/21.11 DAGGERHEART/Character Creation\|Cheat Sheet]] for additional guidance*
### Communities ### Communities
*All communities are available but some have special considerations as documented below* *All communities are available but some have special considerations as documented below*
@@ -44,7 +52,7 @@ Hellboy: The Crooked Man, The Dark Crystal, Pointy Hat, Old Gods of Appalachia
*All classes are available but some have special considerations as documented below* *All classes are available but some have special considerations as documented below*
**Druids, Rangers, and Sorcerers** **Druids, Rangers, and Sorcerers**
- These classes often worship [[10-19 HOBBYS/11 TTRPG/11.12 HOLDING BACK SIN/The Old Gods]] rather than [[The One God]] and as such often find themselves at odds with The Church. - These classes often worship [[20-29 HOBBYS/21 TTRPG/21.12 HOLDING BACK SIN/The Old Gods]] rather than [[The One God]] and as such often find themselves at odds with The Church.
**Seraphs and Wizards** **Seraphs and Wizards**
- Deriving their powers from The One God, these classes are often friendly with agents of The Church. Many are agents themselves and will have served in [[The Holy Militia]]. - Deriving their powers from The One God, these classes are often friendly with agents of The Church. Many are agents themselves and will have served in [[The Holy Militia]].

View File

@@ -0,0 +1,14 @@
---
publish: true
permalink: /ttrpg/hbs/the-church
title: The Church
created: 2026-01-29T14:04:18.879-07:00
modified: 2026-02-05T12:19:54.486-07:00
tags:
- daggerheart
- holding_back_sin
- faction
cssclasses: ""
---
The Church, or more accurately, The Church of [[The One God]], is the primary religion of Ydrasog. They are also the largest military power thanks to [[The Holy Militia]] as well as the most powerful political faction. The Church was not always this powerful however, prior to the imprisonment of [[20-29 HOBBYS/21 TTRPG/21.12 HOLDING BACK SIN/The First Sinner]] in [[20-29 HOBBYS/21 TTRPG/21.12 HOLDING BACK SIN/The Pit]] they were one faith in a sea of many.

View File

@@ -1,9 +1,17 @@
--- ---
{"publish":true,"title":"The First Sinner","created":"2025-06-24T22:01:51.549-06:00","modified":"2025-06-24T22:11:57.085-06:00","tags":["daggerheart","holding_back_sin"],"cssclasses":""} publish: true
permalink: /ttrpg/hbs/the-first-sinner
title: The First Sinner
created: 2026-01-29T14:04:18.545-07:00
modified: 2026-02-05T12:20:02.544-07:00
tags:
- daggerheart
- holding_back_sin
cssclasses: ""
--- ---
Little of what is known about The First Sinner can be presented as fact. [[10-19 HOBBYS/11 TTRPG/11.12 HOLDING BACK SIN/The Church]] has gone to great lengths to portray their view of the angel, their account of it's imprisonment is the only known account, their portrayal of its visage the only reference to what it may look like. Little of what is known about The First Sinner can be presented as fact. [[20-29 HOBBYS/21 TTRPG/21.12 HOLDING BACK SIN/The Church]] has gone to great lengths to portray their view of the angel, their account of it's imprisonment is the only known account, their portrayal of its visage the only reference to what it may look like.
## Imprisonment ## Imprisonment
The tale of The First Sinner's imprisonment is a cornerstone of the worship of [[The One God]]. Centuries ago, after committing a sin so heinous that it had to be forgotten, The First Sinner was cast out of Paradise by The One God, but they were unable to bring themselves to destroy the angel. Instead, a brave group of heroes answered the call of The One God and vowed to end the angel's existence. They were however unable to complete their task, so great was it's power, and instead they sealed it in [[10-19 HOBBYS/11 TTRPG/11.12 HOLDING BACK SIN/The Pit]] for all eternity. The tale of The First Sinner's imprisonment is a cornerstone of the worship of [[The One God]]. Centuries ago, after committing a sin so heinous that it had to be forgotten, The First Sinner was cast out of Paradise by The One God, but they were unable to bring themselves to destroy the angel. Instead, a brave group of heroes answered the call of The One God and vowed to end the angel's existence. They were however unable to complete their task, so great was it's power, and instead they sealed it in [[20-29 HOBBYS/21 TTRPG/21.12 HOLDING BACK SIN/The Pit]] for all eternity.
## Presentation ## Presentation
The First Sinner is portrayed as a beautiful, androgynous, humanoid in most literature. The Elite Guard of [[The Holy Militia]] wear helmets whose masks are purportedly casts of the angels face. The First Sinner is portrayed as a beautiful, androgynous, humanoid in most literature. The Elite Guard of [[The Holy Militia]] wear helmets whose masks are purportedly casts of the angels face.

View File

@@ -0,0 +1,13 @@
---
publish: true
permalink: /ttrpg/hbs/the-old-gods
title: The Old Gods
created: 2026-01-29T14:04:18.493-07:00
modified: 2026-02-05T12:20:02.552-07:00
tags:
- daggerheart
- holding_back_sin
cssclasses: ""
---
The Old Gods is the colloquial term given to the gods that were commonly worshiped by the people of [[20-29 HOBBYS/21 TTRPG/21.12 HOLDING BACK SIN/Ydrasog]] prior to [[20-29 HOBBYS/21 TTRPG/21.12 HOLDING BACK SIN/The Church]] becoming the primary power in the region along with the worship of [[The One God]]. Whilst worship of The Old Gods is not illegal in Ydrasog it is frowned upon, often seen as the purview of savages and outsiders.

View File

@@ -1,6 +1,15 @@
--- ---
{"publish":true,"title":"The Pit","created":"2025-06-25T20:30:29.164-06:00","modified":"2025-06-25T20:35:49.868-06:00","tags":["daggerheart","holding_back_sin","location"],"cssclasses":""} publish: true
permalink: /ttrpg/hbs/the-pit
title: The Pit
created: 2026-01-29T14:04:18.361-07:00
modified: 2026-02-05T12:20:02.554-07:00
tags:
- daggerheart
- holding_back_sin
- location
cssclasses: ""
--- ---
Little is known of The Pit by the populace of Ydrasog, save for it's purpose to contain [[10-19 HOBBYS/11 TTRPG/11.12 HOLDING BACK SIN/The First Sinner]] and hold back the sins that spawn the ancient horrors that once plagued the land. Some claim that it is a tower of white that rises from the mists of [[Purgatory]], others say that it is a great maze of ancient stone. All that is known for sure is that it sits in the very center of Purgatory and that no one who ventures near it returns. Little is known of The Pit by the populace of Ydrasog, save for it's purpose to contain [[20-29 HOBBYS/21 TTRPG/21.12 HOLDING BACK SIN/The First Sinner]] and hold back the sins that spawn the ancient horrors that once plagued the land. Some claim that it is a tower of white that rises from the mists of [[Purgatory]], others say that it is a great maze of ancient stone. All that is known for sure is that it sits in the very center of Purgatory and that no one who ventures near it returns.

View File

@@ -1,5 +1,14 @@
--- ---
{"publish":true,"title":"Ydrasog","created":"2025-06-25T20:25:36.768-06:00","modified":"2025-06-25T20:29:47.366-06:00","tags":["daggerheart","holding_back_sin","location"],"cssclasses":""} publish: true
permalink: /ttrpg/hbs/ydrasog
title: Ydrasog
created: 2026-01-29T14:04:18.798-07:00
modified: 2026-02-05T12:20:02.555-07:00
tags:
- daggerheart
- holding_back_sin
- location
cssclasses: ""
--- ---
Ydrasog is a forsaken realm where ancient curses seep from the very soil, and the boundary between the mortal world and darker realms grows thin as the magics protecting [[10-19 HOBBYS/11 TTRPG/11.12 HOLDING BACK SIN/The Pit]] grow weak. Rolling hills of sickly heath stretch between brooding forests of gnarled oak and twisted pine, their shadows harboring things that should not be. Crumbling stone circles and weathered burial mounds dot the landscape like infected wounds, while isolated hamlets huddle behind wards of iron and salt, their inhabitants speaking in hushed tones of old compacts made with entities best left unnamed. The only cities able to thrive are those protected by [[10-19 HOBBYS/11 TTRPG/11.12 HOLDING BACK SIN/The Church]], and within the walls of these metropolis' their word is law. The air itself feels heavy with malevolent intent, carrying the scent of bog water and decay, and those who venture too far into the wild places often return changed—if they return at all. Here, folklore bleeds into terrible reality, and the old ways still hold sway over a land that remembers every sin committed upon its scarred flesh. Ydrasog is a forsaken realm where ancient curses seep from the very soil, and the boundary between the mortal world and darker realms grows thin as the magics protecting [[20-29 HOBBYS/21 TTRPG/21.12 HOLDING BACK SIN/The Pit]] grow weak. Rolling hills of sickly heath stretch between brooding forests of gnarled oak and twisted pine, their shadows harboring things that should not be. Crumbling stone circles and weathered burial mounds dot the landscape like infected wounds, while isolated hamlets huddle behind wards of iron and salt, their inhabitants speaking in hushed tones of old compacts made with entities best left unnamed. The only cities able to thrive are those protected by [[20-29 HOBBYS/21 TTRPG/21.12 HOLDING BACK SIN/The Church]], and within the walls of these metropolis' their word is law. The air itself feels heavy with malevolent intent, carrying the scent of bog water and decay, and those who venture too far into the wild places often return changed—if they return at all. Here, folklore bleeds into terrible reality, and the old ways still hold sway over a land that remembers every sin committed upon its scarred flesh.

View File

@@ -0,0 +1,56 @@
---
publish: true
permalink: /sh/garden
title: Digital Garden
created: 2026-02-05T09:58:59.613-07:00
modified: 2026-02-05T12:21:13.912-07:00
tags:
- self_hosting
- digital_gardening
- guide
cssclasses: ""
---
# Digital Garden Setup
My digital garden stack for publishing Obsidian notes to the web.
## Architecture
```
Obsidian Vault → Quartz Syncer → Quartz (build) → Caddy (serve)
Self-hosted LiveSync (multi-device editing)
```
## Components
1. [[20-29 HOBBYS/22 SELF HOSTING/22.11 DIGITAL GARDEN/Obsidian]] — Note-taking and editing
2. [[20-29 HOBBYS/22 SELF HOSTING/22.11 DIGITAL GARDEN/Quartz]] — Static site generator (Markdown → HTML)
3. [[20-29 HOBBYS/22 SELF HOSTING/22.11 DIGITAL GARDEN/Caddy]] — Web server with automatic HTTPS
4. [[20-29 HOBBYS/22 SELF HOSTING/22.11 DIGITAL GARDEN/Selfhosted Live Sync]] — Real-time sync across devices
## Setup Order
1. **[[20-29 HOBBYS/22 SELF HOSTING/22.11 DIGITAL GARDEN/Obsidian]]** — Install and configure plugins
2. **[[20-29 HOBBYS/22 SELF HOSTING/22.11 DIGITAL GARDEN/Selfhosted Live Sync]]** — Set up CouchDB for multi-device sync
3. **[[20-29 HOBBYS/22 SELF HOSTING/22.11 DIGITAL GARDEN/Quartz]]** — Clone repo, configure, connect to vault
4. **[[20-29 HOBBYS/22 SELF HOSTING/22.11 DIGITAL GARDEN/Caddy]]** — Configure reverse proxy and deploy
## Publishing Workflow
1. Write/edit notes in Obsidian (any device)
2. LiveSync keeps all devices in sync via CouchDB
3. Mark notes for publishing with `publish: true` frontmatter
4. Use Quartz Syncer plugin to push to Quartz repo
5. Build triggers (manual or CI) regenerate the site
6. Caddy serves the static files
## Quick Reference
| Component | Purpose | Tech |
|-----------|---------|------|
| Editor | [[20-29 HOBBYS/22 SELF HOSTING/22.11 DIGITAL GARDEN/Obsidian]] | Electron app |
| Sync | [[20-29 HOBBYS/22 SELF HOSTING/22.11 DIGITAL GARDEN/Selfhosted Live Sync]] | CouchDB |
| Generator | [[20-29 HOBBYS/22 SELF HOSTING/22.11 DIGITAL GARDEN/Quartz]] | Node.js/TypeScript |
| Server | [[20-29 HOBBYS/22 SELF HOSTING/22.11 DIGITAL GARDEN/Caddy]] | Go binary |

View File

@@ -0,0 +1,148 @@
---
publish: true
permalink: /sh/garden/caddy
title: Caddy
created: 2026-02-05T09:58:59.617-07:00
modified: 2026-02-05T12:21:13.914-07:00
tags:
- self_hosting
- web_server
cssclasses: ""
---
Caddy is a powerful web server with automatic HTTPS. I use it to serve my [[20-29 HOBBYS/22 SELF HOSTING/22.11 DIGITAL GARDEN/Quartz]] digital garden.
## Installation
**Arch Linux:**
```bash
sudo pacman -S caddy
```
**Docker:**
```bash
docker pull caddy:latest
```
**Binary:**
Download from https://caddyserver.com/download
## Basic Configuration
Caddyfile location: `/etc/caddy/Caddyfile`
### Serve Static Files
```caddyfile
garden.example.com {
root * /var/www/garden/public
file_server
# Handle SPA routing (if using Quartz SPA mode)
try_files {path} {path}/ /index.html
# Compression
encode gzip zstd
}
```
### With Reverse Proxy
If running Quartz dev server:
```caddyfile
garden.example.com {
reverse_proxy localhost:8080
}
```
## Automatic HTTPS
Caddy automatically provisions TLS certificates via Let's Encrypt. Just use a domain name and Caddy handles the rest.
Requirements:
- Domain DNS points to your server
- Ports 80 and 443 accessible
- Caddy can bind to those ports
## Running Caddy
### systemd
```bash
sudo systemctl enable --now caddy
```
### Manual
```bash
caddy run --config /etc/caddy/Caddyfile
```
### Reload config
```bash
sudo systemctl reload caddy
# or
caddy reload --config /etc/caddy/Caddyfile
```
## Digital Garden Setup
My Caddyfile for serving Quartz:
```caddyfile
garden.example.com {
root * /var/www/garden/public
file_server
# Quartz SPA routing
try_files {path} {path}.html {path}/ /index.html
# Compression for faster loads
encode gzip zstd
# Cache static assets
@static {
path *.css *.js *.woff2 *.png *.jpg *.svg
}
header @static Cache-Control "public, max-age=31536000"
# Security headers
header {
X-Content-Type-Options nosniff
X-Frame-Options DENY
Referrer-Policy strict-origin-when-cross-origin
}
}
```
## Deployment Workflow
1. Build Quartz: `npx quartz build`
2. Copy to server: `rsync -avz public/ server:/var/www/garden/public/`
3. Caddy automatically serves the new files
Or use a CI/CD pipeline to automate.
## Multiple Sites
```caddyfile
garden.example.com {
root * /var/www/garden/public
file_server
}
blog.example.com {
root * /var/www/blog
file_server
}
api.example.com {
reverse_proxy localhost:3000
}
```
## Resources
- Docs: https://caddyserver.com/docs/
- Caddyfile: https://caddyserver.com/docs/caddyfile

View File

@@ -1,11 +1,19 @@
--- ---
{"publish":true,"title":"Obsidian Setup for Digital Gardening","created":"2025-06-25T20:40:38.196-06:00","modified":"2025-07-02T15:48:36.500-06:00","tags":["self_hosting","digital_gardening","obsidian"],"cssclasses":""} publish: true
permalink: /sh/garden/obsidian
title: Obsidian Setup for Digital Gardening
created: 2026-01-29T14:04:18.365-07:00
modified: 2026-02-05T12:21:13.916-07:00
tags:
- self_hosting
- digital_gardening
- obsidian
cssclasses: ""
--- ---
My current setup for digital gardening with [Obsidian](https://obsidian.md) is very lightweight by design, plugin bloat is real and detracts from the simplicity that allows me to just get things done. My current setup for digital gardening with [Obsidian](https://obsidian.md) is very lightweight by design, plugin bloat is real and detracts from the simplicity that allows me to just get things done.
## Plugins ## Plugins
- Harper - Great for spelling and grammar checks - Harper - Great for spelling and grammar checks
- Quartz Syncer - Used to synchronize my vault contents to mt [[Quartz]] repo - Quartz Syncer - Used to synchronize my vault contents to my [[20-29 HOBBYS/22 SELF HOSTING/22.11 DIGITAL GARDEN/Quartz]] repo
- BRAT - Used to install Quartz Syncer
- Dataview - I just cannot live without this - Dataview - I just cannot live without this
- Self-hosted LiveSync - For editing on multiple devices - Self-hosted LiveSync - For editing on multiple devices

View File

@@ -0,0 +1,179 @@
---
publish: true
permalink: /sh/garden/quartz
title: Quartz
created: 2026-02-05T09:58:59.615-07:00
modified: 2026-02-05T12:21:13.918-07:00
tags:
- self_hosting
- digital_gardening
- static_site
cssclasses: ""
---
Quartz is a fast, batteries-included static-site generator that transforms Markdown content into fully functional websites. Perfect for publishing [[20-29 HOBBYS/22 SELF HOSTING/22.11 DIGITAL GARDEN/Obsidian]] vaults as digital gardens.
## Features
- **Obsidian compatibility** — Wikilinks, callouts, backlinks
- **Full-text search** — Client-side search
- **Graph view** — Interactive note connections
- **Popover previews** — Hover to preview linked notes
- **Fast** — SPA routing, tiny bundles
- **Customizable** — JSX components, plugin system
## Installation
Requires Node.js v22+.
```bash
git clone https://github.com/jackyzha0/quartz.git
cd quartz
npm i
npx quartz create
```
Follow the prompts to initialize with your content.
## Configuration
Main config: `quartz.config.ts`
```typescript
const config: QuartzConfig = {
configuration: {
pageTitle: "My Digital Garden",
enableSPA: true,
enablePopovers: true,
analytics: null, // or plausible, umami, etc.
locale: "en-US",
baseUrl: "garden.example.com",
ignorePatterns: ["private", ".obsidian"],
defaultDateType: "modified",
theme: {
cdnCaching: true,
typography: {
header: "Schibsted Grotesk",
body: "Source Sans Pro",
code: "IBM Plex Mono",
},
colors: {
lightMode: { /* ... */ },
darkMode: { /* ... */ },
},
},
},
plugins: { /* ... */ },
}
```
## Content
All content lives in `/content` folder. Home page is `content/index.md`.
### Frontmatter
```yaml
---
title: My Note
description: A description for previews
tags:
- example
draft: false # true = don't publish
publish: true # used by Quartz Syncer
date: 2026-02-05
---
```
### Supported Syntax
- Standard Markdown + GFM (tables, footnotes, task lists)
- Obsidian wikilinks: `[[Note Name]]`
- Obsidian callouts: `> [!info]`
- LaTeX math: `$inline$` and `$$block$$`
- Syntax highlighting
## Building
```bash
# Development (hot reload)
npx quartz build --serve
# Production build
npx quartz build
# Output goes to /public
```
## Syncing Content
### Manual
```bash
npx quartz sync
```
### Quartz Syncer Plugin (Recommended)
Install the **Quartz Syncer** plugin in [[20-29 HOBBYS/22 SELF HOSTING/22.11 DIGITAL GARDEN/Obsidian]]:
1. Install from Community Plugins
2. Configure Git provider (GitHub, GitLab, etc.)
3. Set Quartz repo path
4. Use plugin to selectively publish notes
Features:
- Compiles Dataview queries to static content
- Diff viewer before publishing
- Selective publish/update/remove
- Smart caching
## Hosting Options
### Self-hosted with [[20-29 HOBBYS/22 SELF HOSTING/22.11 DIGITAL GARDEN/Caddy]]
Build locally or via CI, serve `/public` with Caddy.
### GitHub Pages
Add `.github/workflows/deploy.yml`:
```yaml
name: Deploy Quartz
on:
push:
branches: [v4]
jobs:
build:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/setup-node@v4
with:
node-version: 22
- run: npm ci
- run: npx quartz build
- uses: actions/upload-pages-artifact@v3
with:
path: public
deploy:
needs: build
runs-on: ubuntu-latest
environment:
name: github-pages
steps:
- uses: actions/deploy-pages@v4
```
### Cloudflare Pages
- Build command: `npx quartz build`
- Output directory: `public`
- Production branch: `v4`
## Resources
- Docs: https://quartz.jzhao.xyz/
- GitHub: https://github.com/jackyzha0/quartz
- Quartz Syncer: https://github.com/saberzero1/quartz-syncer

View File

@@ -0,0 +1,158 @@
---
publish: true
permalink: /sh/garden/livesync
title: Self-hosted LiveSync
created: 2026-02-05T09:58:59.620-07:00
modified: 2026-02-05T12:21:13.920-07:00
tags:
- self_hosting
- obsidian
- sync
cssclasses: ""
---
Self-hosted LiveSync is a community plugin for [[20-29 HOBBYS/22 SELF HOSTING/22.11 DIGITAL GARDEN/Obsidian]] that enables real-time synchronization across devices using CouchDB or object storage.
## Features
- **Real-time sync** — Changes sync immediately
- **Conflict resolution** — Automatic merging of simple conflicts
- **End-to-end encryption** — Data encrypted before leaving device
- **Self-hosted** — Your data on your server
- **Multi-platform** — Works on all Obsidian platforms (desktop, mobile)
## Architecture
```
Device A (Obsidian) ←→ CouchDB Server ←→ Device B (Obsidian)
```
All devices sync to a central CouchDB instance. Changes propagate in real-time.
## Server Setup (CouchDB)
### Docker (Recommended)
```yaml
# docker-compose.yml
version: "3"
services:
couchdb:
image: couchdb:latest
restart: always
ports:
- "5984:5984"
environment:
- COUCHDB_USER=admin
- COUCHDB_PASSWORD=your-secure-password
volumes:
- ./couchdb-data:/opt/couchdb/data
```
```bash
docker-compose up -d
```
### Configure CouchDB
Access Fauxton UI at `http://server:5984/_utils`
1. Create a database for your vault (e.g., `obsidian-vault`)
2. Configure CORS if accessing from different domains
### CORS Setup
In Fauxton → Configuration → CORS:
- Enable CORS
- Set origins to `app://obsidian.md` and your domain
Or via curl:
```bash
curl -X PUT http://admin:password@localhost:5984/_node/_local/_config/httpd/enable_cors -d '"true"'
curl -X PUT http://admin:password@localhost:5984/_node/_local/_config/cors/origins -d '"app://obsidian.md"'
curl -X PUT http://admin:password@localhost:5984/_node/_local/_config/cors/credentials -d '"true"'
curl -X PUT http://admin:password@localhost:5984/_node/_local/_config/cors/methods -d '"GET, PUT, POST, HEAD, DELETE"'
curl -X PUT http://admin:password@localhost:5984/_node/_local/_config/cors/headers -d '"accept, authorization, content-type, origin, referer"'
```
## Plugin Setup
1. Install **Self-hosted LiveSync** from Obsidian Community Plugins
2. Open plugin settings
3. Configure connection:
- URI: `https://couchdb.example.com`
- Username: your CouchDB user
- Password: your CouchDB password
- Database: `obsidian-vault`
4. Set up encryption passphrase (all devices must use same passphrase)
5. Test connection
6. Enable sync
## Sync Modes
| Mode | Description |
|------|-------------|
| LiveSync | Real-time sync (uses more bandwidth) |
| Periodic | Sync at intervals |
| On file save | Sync when files change |
## Customization Sync
Sync settings, themes, plugins across devices:
Settings → Customization Sync → Enable
Select what to sync:
- Settings files
- Snippets
- Themes
- Plugins (careful with this)
## Encryption
Always enable end-to-end encryption:
1. Settings → Encryption → Enable
2. Set passphrase (same on all devices)
3. All data is encrypted before upload
## Troubleshooting
### Sync not working
```bash
# Check CouchDB is running
curl http://localhost:5984
# Check database exists
curl http://admin:password@localhost:5984/obsidian-vault
```
### Conflicts
Plugin shows conflict indicator. Open note to resolve:
- View both versions
- Choose or merge manually
- Conflicts auto-resolve if possible
### Rebuild database
If sync gets corrupted:
1. Disable sync on all devices
2. Delete database in CouchDB
3. Re-create database
4. Rebuild from primary device
5. Re-enable on other devices
## Alternatives to CouchDB
LiveSync also supports:
- MinIO (S3-compatible)
- Cloudflare R2
- AWS S3
- WebRTC (peer-to-peer, experimental)
## Resources
- GitHub: https://github.com/vrtmrz/obsidian-livesync
- Docs: https://github.com/vrtmrz/obsidian-livesync/blob/main/docs/

View File

@@ -0,0 +1,31 @@
---
publish: true
permalink: /sh/garden/setup
title: Digital Garden Setup
created: 2026-01-29T14:04:18.669-07:00
modified: 2026-02-05T12:21:19.644-07:00
tags:
- self_hosting
- digital_gardening
cssclasses: ""
---
This Digital Garden is built with a self-hosted stack:
| Layer | Tool | Purpose |
|-------|------|---------|
| Editor | [[20-29 HOBBYS/22 SELF HOSTING/22.11 DIGITAL GARDEN/Obsidian]] | Write and organize notes |
| Sync | [[20-29 HOBBYS/22 SELF HOSTING/22.11 DIGITAL GARDEN/Selfhosted Live Sync]] | Real-time multi-device sync |
| Generator | [[20-29 HOBBYS/22 SELF HOSTING/22.11 DIGITAL GARDEN/Quartz]] | Convert Markdown to static site |
| Server | [[20-29 HOBBYS/22 SELF HOSTING/22.11 DIGITAL GARDEN/Caddy]] | Serve with automatic HTTPS |
## Why Self-Hosted?
- **Privacy** — Notes stay on my infrastructure
- **Control** — No vendor lock-in
- **Learning** — Understanding the full stack
- **Cost** — Cheap VPS vs subscription services
## See Also
- [[20-29 HOBBYS/22 SELF HOSTING/22.11 DIGITAL GARDEN/00 - Start Here]] — Full setup guide with ordering

View File

@@ -0,0 +1,10 @@
---
publish: true
permalink: /sh/services/gotosocial
title: GoToSocial
created: 2026-01-29T14:04:18.591-07:00
modified: 2026-02-05T12:21:24.501-07:00
cssclasses: ""
---
I host [GoToSocial](https://gotosocial.org/) on a VPS. It is my primary [Fediverse](https://en.wikipedia.org/wiki/Fediverse) interface and it has been more than adequate for my needs. The only thing I do that is of much difference to the standard deployment is that I back up the docker volume using my standard [[10-19 LIFE/13 TECH SETUP/13.12 PROCESSES/Backups\|backup]] process for cloud services.

View File

@@ -0,0 +1,13 @@
---
publish: true
permalink: /sh/services/syncthing
title: Syncthing
created: 2026-01-29T14:04:18.802-07:00
modified: 2026-02-05T12:21:24.504-07:00
cssclasses: ""
---
Used for data synchronization and [[10-19 LIFE/13 TECH SETUP/13.12 PROCESSES/Backups\|backup]] between devices
## Knowledge Base
### Password Reset
Resetting the password for Syncthing is fairly trivial so long as you have access to the config file. Simply pop it open, find the user and password lines, delete them, and restart.

View File

@@ -0,0 +1,16 @@
---
publish: true
permalink: /security/evilginx
title: Evilginx
created: 2026-01-29T14:04:18.808-07:00
modified: 2026-02-05T12:21:58.021-07:00
tags:
- guide
- evilginx
cssclasses: ""
---
## Setup and Tutorial
- [[20-29 HOBBYS/23 SECURITY/23.11 EVILGINX/Installation of Community Edition\|Installation]]<--Start here
- [[20-29 HOBBYS/23 SECURITY/23.11 EVILGINX/configuration\|Configuration Basics]]
- [[20-29 HOBBYS/23 SECURITY/23.11 EVILGINX/phish setup\|My First Phishing Test]]

View File

@@ -1,5 +1,14 @@
--- ---
{"publish":true,"title":"Installing Evilginx Community Edition","created":"2025-06-26T10:18:34.457-06:00","modified":"2025-06-26T12:40:30.910-06:00","tags":["phishing","evilginx","guide"],"cssclasses":""} publish: true
permalink: /security/evilginx/install
title: Installing Evilginx Community Edition
created: 2026-01-29T14:04:18.369-07:00
modified: 2026-02-05T12:21:58.024-07:00
tags:
- phishing
- evilginx
- guide
cssclasses: ""
--- ---
@@ -10,7 +19,7 @@ With commercialization comes the enshitification of community editions, and this
> >
>This guide covers software installation only. The official Evilginx documentation for domain setup is adequate >This guide covers software installation only. The official Evilginx documentation for domain setup is adequate
>[!note] Prior to installing Evilginx I completed some basic server setup work that you can find [[10-19 HOBBYS/13 SECURITY/13.11 EVILGINX/basic configuration\|here]] >[!note] Prior to installing Evilginx I completed some basic server setup work that you can find [[20-29 HOBBYS/23 SECURITY/23.11 EVILGINX/basic configuration\|here]]
1. Install prerequisite packages 1. Install prerequisite packages
@@ -56,4 +65,4 @@ cp -r ./redirectors/ ~/evilginx
chmod 700 ~/evilginx chmod 700 ~/evilginx
``` ```
From here you can move on to [[10-19 HOBBYS/13 SECURITY/13.11 EVILGINX/configuration]] From here you can move on to [[20-29 HOBBYS/23 SECURITY/23.11 EVILGINX/configuration]]

View File

@@ -1,5 +1,14 @@
--- ---
{"publish":true,"title":"Server bootstrapping","created":"2025-06-26T12:27:37.527-06:00","modified":"2025-06-26T12:37:33.633-06:00","tags":["evilginx","guide","self_hosting"],"cssclasses":""} publish: true
permalink: /security/evilginx/basic-config
title: Server bootstrapping
created: 2026-01-29T14:04:18.492-07:00
modified: 2026-02-05T12:21:58.025-07:00
tags:
- evilginx
- guide
- self_hosting
cssclasses: ""
--- ---
## Install and configure ufw ## Install and configure ufw

View File

@@ -1,5 +1,14 @@
--- ---
{"publish":true,"title":"Evilginx Configuration","created":"2025-06-26T12:16:40.875-06:00","modified":"2025-06-26T15:12:06.592-06:00","tags":["evilginx","guide","phishing"],"cssclasses":""} publish: true
permalink: /security/evilginx/config
title: Evilginx Configuration
created: 2026-01-29T14:04:18.516-07:00
modified: 2026-02-05T12:21:58.027-07:00
tags:
- evilginx
- guide
- phishing
cssclasses: ""
--- ---
>[!info] >[!info]
@@ -37,5 +46,5 @@ exit
~/evilginx/evilginx ~/evilginx/evilginx
``` ```
At this point Evilginx should be configured at ready for you to [[10-19 HOBBYS/13 SECURITY/13.11 EVILGINX/phish setup\|start phishing]]! At this point Evilginx should be configured at ready for you to [[20-29 HOBBYS/23 SECURITY/23.11 EVILGINX/phish setup\|start phishing]]!

View File

@@ -1,5 +1,14 @@
--- ---
{"publish":true,"title":"Basic Phish Setup","created":"2025-06-26T13:31:28.141-06:00","modified":"2025-06-27T14:25:27.036-06:00","tags":["evilginx","guide","phishing"],"cssclasses":""} publish: true
permalink: /security/evilginx/phish-setup
title: Basic Phish Setup
created: 2026-01-29T14:04:18.366-07:00
modified: 2026-02-05T12:21:58.028-07:00
tags:
- evilginx
- guide
- phishing
cssclasses: ""
--- ---
>[!note] >[!note]

View File

@@ -1,5 +1,12 @@
--- ---
{"publish":true,"title":"Final Fantasy Draft Notes","created":"2025-07-02T23:32:08.532-06:00","modified":"2025-07-03T11:29:24.580-06:00","tags":["mtg"],"cssclasses":""} publish: true
permalink: /mtg/limited/ff-draft
title: Final Fantasy Draft Notes
created: 2026-01-29T14:04:18.666-07:00
modified: 2026-02-05T12:22:25.497-07:00
tags:
- mtg
cssclasses: ""
--- ---
## Sign post cards ## Sign post cards

View File

@@ -1,5 +1,15 @@
--- ---
{"publish":true,"title":"Deck: Nasty Nasty Necrons","created":"2025-07-03T09:55:24.885-06:00","modified":"2025-07-03T14:27:32.564-06:00","tags":["mtg","commander","deck","mono-black"],"cssclasses":""} publish: true
permalink: /mtg/commander/necrons
title: "Deck: Nasty Nasty Necrons"
created: 2026-01-29T14:04:18.368-07:00
modified: 2026-02-05T12:22:25.500-07:00
tags:
- mtg
- commander
- deck
- mono-black
cssclasses: ""
--- ---
## Change Tracking ## Change Tracking

View File

@@ -0,0 +1,28 @@
---
publish: true
permalink: /mtg/commander/nids
title: 'Deck: Nid that goes "PING"'
created: 2026-01-29T14:04:18.574-07:00
modified: 2026-02-05T12:22:25.502-07:00
tags:
- mtg
- commander
- deck
cssclasses: ""
---
## Change Tracking
| Version | Date | Notes |
| ------- | -------- | ----------- |
| 0.1 | 7/3/2025 | Design mode |
## Notes
Inspired by [MTGGoldfish](https://www.mtggoldfish.com/price/Warhammer+40K+Commander+Decks/Ghyrson+Starn+Kelermorph#paper)
## Deck
### Creatures
| Card Name | Mana Cost | Notes |
| --------------------------------------------------------------------------------------- | --------- | --------- |
| [Ghyrson Starn, Kelermorph](https://scryfall.com/card/40k/124/ghyrson-starn-kelermorph) | {1}{U}{R} | Commander |
| | | |

View File

@@ -0,0 +1,12 @@
---
publish: true
permalink: /mtg/pauper/planning
title: Pauper Planning
created: 2026-01-29T14:04:18.357-07:00
modified: 2026-02-05T12:22:25.503-07:00
tags:
- mtg
cssclasses: ""
---
Section coming soon...

View File

@@ -1,11 +0,0 @@
---
{"publish":true,"title":"US - CO - Fairplay","created":"2025-08-07T00:14:16.970-06:00","modified":"2025-08-07T00:17:32.949-06:00","tags":["city","travel"],"cssclasses":""}
---
## Useful Spots
**Fairplay Depot**
- Its a co-working place
- All done by phone (720) 771-4019
- [Website](https://fairplaydepot.us/en)

View File

@@ -1,16 +1,13 @@
--- ---
{"publish":true,"title":"Home","created":"2025-06-20T20:44:48.293-06:00","modified":"2025-07-03T11:26:25.002-06:00","cssclasses":""} publish: true
permalink: /index.md
title: Home
created: 2026-01-29T14:04:18.325-07:00
modified: 2026-01-19T17:58:25.379-07:00
cssclasses: ""
--- ---
>[!warning] Under Construction >[!warning] Under Construction
>This site is under construction and cannot be trusted >This site is under construction and cannot be trusted
## Hobby Stuff
- 11.11 DAGGERHEART
- 11.12 HOLDING BACK SIN
- 12.11 DIGITAL GARDEN
- 13.11 EVILGINX
- 14.11 LIMITED
- 14.12 COMMANDER
[[20-29 HOBBYS/22 SELF HOSTING/22.11 DIGITAL GARDEN/Setup\|Learn more about this digital garden]]
[[10-19 HOBBYS/12 SELF HOSTING/12.11 DIGITAL GARDEN/Setup\|Learn more about this digital garden]]