Published multiple files
All checks were successful
Build and Deploy Quartz / build (push) Successful in 26s
All checks were successful
Build and Deploy Quartz / build (push) Successful in 26s
This commit is contained in:
@@ -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` |
|
||||
@@ -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/`
|
||||
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: /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
|
||||
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: /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
|
||||
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: /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
|
||||
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: /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
|
||||
@@ -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
|
||||
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: /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
|
||||
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: /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`
|
||||
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: /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/
|
||||
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: /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
|
||||
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: /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
|
||||
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: /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/
|
||||
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: /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/
|
||||
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: /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
|
||||
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: /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
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user