Compare commits
36 Commits
701ad945a4
...
v4
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fe0581e423 | ||
|
|
125a9b1752 | ||
|
|
536652b5b6 | ||
|
|
a1b2e10668 | ||
|
|
d5f0ffc320 | ||
|
|
fcd2176c78 | ||
|
|
30dd2ec6c1 | ||
|
|
d60dc27dac | ||
|
|
f0712ba561 | ||
|
|
c41334f82c | ||
|
|
f07306498f | ||
|
|
b4c9d16c55 | ||
|
|
184c93e274 | ||
|
|
c48cc488f0 | ||
|
|
2888961e0b | ||
|
|
abad0348a7 | ||
|
|
c8dcdf904b | ||
|
|
d7e0591641 | ||
|
|
435f5bba6a | ||
| b9d4649a2c | |||
| e19f3597d7 | |||
| f593b02e7e | |||
| b66d4e744f | |||
| 78a4fec36b | |||
| d368c8926e | |||
| bec3786e69 | |||
| b8aef1145c | |||
| e0fdbefcaa | |||
| b0b3506ef4 | |||
| 48a3dbfd6f | |||
| a5b8fdd90d | |||
|
|
bd60a1ca15 | ||
| 1eeec043e5 | |||
| 2e5198e290 | |||
|
|
0b70ce24df | ||
|
|
863583d9db |
14
.gitea/workflows/deploy.yaml
Normal file
14
.gitea/workflows/deploy.yaml
Normal 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/
|
||||||
12
content/06 AUTHOR/11 METADATA/Phil Skentelbery.md
Normal file
12
content/06 AUTHOR/11 METADATA/Phil Skentelbery.md
Normal 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
|
||||||
11
content/06 AUTHOR/12 MUSINGS/Fear and Loathing in AI Land.md
Normal file
11
content/06 AUTHOR/12 MUSINGS/Fear and Loathing in AI Land.md
Normal 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
|
||||||
22
content/06 AUTHOR/12 MUSINGS/Social Media Isn't Social.md
Normal file
22
content/06 AUTHOR/12 MUSINGS/Social Media Isn't Social.md
Normal 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.
|
||||||
@@ -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
|
|
||||||
@@ -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]]
|
|
||||||
|
|
||||||
@@ -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.
|
|
||||||
@@ -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.
|
|
||||||
@@ -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]]
|
|
||||||
@@ -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]]
|
|
||||||
@@ -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. Archenemy’s 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. Faller’s 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 Sun’s 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. Meltstrider’s 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. Mm’menon, Uthros Exile
|
|
||||||
13. Monoist Sentry
|
|
||||||
14. Mystifying Maze
|
|
||||||
15. Oreplate Pangolin
|
|
||||||
16. Sami’s 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, Ship’s Engineer
|
|
||||||
27. Shattered Wings
|
|
||||||
28. Sothera, the Supervoid
|
|
||||||
29. Squire’s 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. Meltstrider’s Gear
|
|
||||||
26. Mm’menon, 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. Thespian’s Stage
|
|
||||||
51. Uthros, Titanic Godcore
|
|
||||||
52. Virulent Silencer
|
|
||||||
53. Warping Wail
|
|
||||||
54. Weapons Manufacturing
|
|
||||||
@@ -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**
|
||||||
|
- It’s a co-working place
|
||||||
|
- All done by phone (720) 771-4019
|
||||||
|
- [Website](https://fairplaydepot.us/en)
|
||||||
@@ -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
|
||||||
@@ -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: ""
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
@@ -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
|
||||||
80
content/10-19 LIFE/13 TECH SETUP/13.11 APPS/VeraCrypt.md
Normal file
80
content/10-19 LIFE/13 TECH SETUP/13.11 APPS/VeraCrypt.md
Normal 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
|
||||||
105
content/10-19 LIFE/13 TECH SETUP/13.11 APPS/aerc.md
Normal file
105
content/10-19 LIFE/13 TECH SETUP/13.11 APPS/aerc.md
Normal 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`
|
||||||
113
content/10-19 LIFE/13 TECH SETUP/13.11 APPS/atuin.md
Normal file
113
content/10-19 LIFE/13 TECH SETUP/13.11 APPS/atuin.md
Normal 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
|
||||||
116
content/10-19 LIFE/13 TECH SETUP/13.11 APPS/impala.md
Normal file
116
content/10-19 LIFE/13 TECH SETUP/13.11 APPS/impala.md
Normal 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
|
||||||
118
content/10-19 LIFE/13 TECH SETUP/13.11 APPS/isync.md
Normal file
118
content/10-19 LIFE/13 TECH SETUP/13.11 APPS/isync.md
Normal 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
|
||||||
115
content/10-19 LIFE/13 TECH SETUP/13.11 APPS/nvim.md
Normal file
115
content/10-19 LIFE/13 TECH SETUP/13.11 APPS/nvim.md
Normal 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
|
||||||
119
content/10-19 LIFE/13 TECH SETUP/13.11 APPS/qutebrowser.md
Normal file
119
content/10-19 LIFE/13 TECH SETUP/13.11 APPS/qutebrowser.md
Normal 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`
|
||||||
87
content/10-19 LIFE/13 TECH SETUP/13.11 APPS/urlref.md
Normal file
87
content/10-19 LIFE/13 TECH SETUP/13.11 APPS/urlref.md
Normal 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/{}'
|
||||||
|
```
|
||||||
104
content/10-19 LIFE/13 TECH SETUP/13.11 APPS/whosthere.md
Normal file
104
content/10-19 LIFE/13 TECH SETUP/13.11 APPS/whosthere.md
Normal 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
|
||||||
116
content/10-19 LIFE/13 TECH SETUP/13.11 APPS/zathura.md
Normal file
116
content/10-19 LIFE/13 TECH SETUP/13.11 APPS/zathura.md
Normal 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
|
||||||
92
content/10-19 LIFE/13 TECH SETUP/13.12 PROCESSES/Backups.md
Normal file
92
content/10-19 LIFE/13 TECH SETUP/13.12 PROCESSES/Backups.md
Normal 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)
|
||||||
@@ -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` |
|
||||||
@@ -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/`
|
||||||
122
content/10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/Ashell.md
Normal file
122
content/10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/Ashell.md
Normal 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
|
||||||
89
content/10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/Audio.md
Normal file
89
content/10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/Audio.md
Normal 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
|
||||||
465
content/10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/Base Install.md
Normal file
465
content/10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/Base Install.md
Normal 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)
|
||||||
101
content/10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/Disks.md
Normal file
101
content/10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/Disks.md
Normal 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
|
||||||
106
content/10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/Fonts.md
Normal file
106
content/10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/Fonts.md
Normal 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
|
||||||
@@ -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
|
||||||
107
content/10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/Keychain.md
Normal file
107
content/10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/Keychain.md
Normal 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
|
||||||
106
content/10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/Mako.md
Normal file
106
content/10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/Mako.md
Normal 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`
|
||||||
182
content/10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/Network.md
Normal file
182
content/10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/Network.md
Normal 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/
|
||||||
131
content/10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/Plymouth.md
Normal file
131
content/10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/Plymouth.md
Normal 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
|
||||||
95
content/10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/Printing.md
Normal file
95
content/10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/Printing.md
Normal 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
|
||||||
153
content/10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/Shell.md
Normal file
153
content/10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/Shell.md
Normal 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/
|
||||||
143
content/10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/Yubikey.md
Normal file
143
content/10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/Yubikey.md
Normal 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/
|
||||||
120
content/10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/fprintd.md
Normal file
120
content/10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/fprintd.md
Normal 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
|
||||||
188
content/10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/hyprlock.md
Normal file
188
content/10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/hyprlock.md
Normal 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
|
||||||
@@ -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
|
||||||
15
content/10-19 LIFE/13 TECH SETUP/13.14 AI/blogwatcher.md
Normal file
15
content/10-19 LIFE/13 TECH SETUP/13.14 AI/blogwatcher.md
Normal 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`
|
||||||
@@ -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
|
||||||
21
content/20-29 HOBBYS/21 TTRPG/21.12 HOLDING BACK SIN/Hub.md
Normal file
21
content/20-29 HOBBYS/21 TTRPG/21.12 HOLDING BACK SIN/Hub.md
Normal 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]]
|
||||||
|
|
||||||
@@ -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]].
|
||||||
@@ -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.
|
||||||
@@ -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.
|
||||||
@@ -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.
|
||||||
@@ -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.
|
||||||
@@ -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.
|
||||||
@@ -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 |
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
@@ -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/
|
||||||
@@ -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
|
||||||
@@ -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.
|
||||||
@@ -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.
|
||||||
@@ -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]]
|
||||||
@@ -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]]
|
||||||
@@ -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
|
||||||
@@ -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]]!
|
||||||
|
|
||||||
@@ -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]
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
@@ -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 |
|
||||||
|
| | | |
|
||||||
12
content/20-29 HOBBYS/24 MTG/24.13 PAUPER/Planning.md
Normal file
12
content/20-29 HOBBYS/24 MTG/24.13 PAUPER/Planning.md
Normal 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...
|
||||||
@@ -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**
|
|
||||||
- It’s a co-working place
|
|
||||||
- All done by phone (720) 771-4019
|
|
||||||
- [Website](https://fairplaydepot.us/en)
|
|
||||||
@@ -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]]
|
|
||||||
|
|||||||
Reference in New Issue
Block a user