Published multiple files
All checks were successful
Build and Deploy Quartz / build (push) Successful in 26s

This commit is contained in:
Quartz Syncer
2026-02-05 09:53:27 -07:00
parent 536652b5b6
commit 125a9b1752
54 changed files with 3140 additions and 34 deletions

View File

@@ -1,7 +1,8 @@
---
publish: true
permalink: /10-19 LIFE/11 TRAVEL/11.11 PLACES/US, CO, Fairplay.md
title: US - CO - Fairplay
created: 2026-01-10T15:29:25.889-07:00
created: 2026-01-29T14:04:18.765-07:00
modified: 2026-01-11T15:54:06.320-07:00
tags:
- travel

View File

@@ -1,7 +1,8 @@
---
publish: true
permalink: /10-19 LIFE/11 TRAVEL/11.11 PLACES/US, NV, Las Vegas.md
title: US - NV - Las Vegas
created: 2026-01-10T15:29:21.094-07:00
created: 2026-01-29T14:04:18.359-07:00
modified: 2026-01-20T14:53:41.338-07:00
tags:
- travel

View File

@@ -1,7 +1,8 @@
---
publish: true
permalink: /10-19 LIFE/12 HABITS/12.11 DAILY/10 MLD.md
title: 10 Minimum Lovable Day
created: 2026-01-10T15:29:30.643-07:00
created: 2026-01-29T14:04:18.832-07:00
modified: 2025-07-29T07:24:00.606-06:00
tags:
- productivity

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,7 +1,8 @@
---
publish: true
permalink: /10-19 LIFE/13 TECH SETUP/13.11 APPS/urlref.md
title: urlref
created: 2026-01-19T18:15:38.889-07:00
created: 2026-01-29T14:04:18.714-07:00
modified: 2026-01-19T18:40:10.504-07:00
tags:
- web
@@ -58,7 +59,7 @@ RestartSec=5
WantedBy=default.target
```
### qutebrowser Integration
This [[qutebrowser]] integration works for me, you are on your own for other browsers!
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

View File

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

View File

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

View File

@@ -1,7 +1,8 @@
---
publish: true
permalink: /10-19 LIFE/13 TECH SETUP/13.12 PROCESSES/Backups.md
title: Backups
created: 2026-01-20T13:21:41.646-07:00
created: 2026-01-29T14:04:18.777-07:00
modified: 2026-01-21T22:48:12.310-07:00
cssclasses: ""
---

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,78 @@
---
publish: true
permalink: /10-19 LIFE/13 TECH SETUP/13.13 OS SETUP/hyprshutdown.md
title: hyprshutdown
created: 2026-02-05T09:31:46.735-07:00
modified: 2026-02-05T09:31:46.735-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