Personal Hyprland dotfiles for Arch Linux, managed with GNU Stow. Centered around a unified theme-set system that applies a chosen color palette across every application simultaneously — no manual per-app color editing needed.
| Repo | Influence |
|---|---|
| basecamp/omarchy | Primary inspiration — majority of the overall config structure and tooling choices |
| dreamsofcode-io/dotfiles | zen Oh My Posh prompt config |
| voidptrx/dotfiles | SwayNC config and styling |
![]() |
![]() |
Note: Screenshots are included for a selection of themes — not all available themes are shown.
| Apps & Terminal | Notification Center |
|---|---|
![]() |
![]() |
| Apps & Terminal | Notification Center |
|---|---|
![]() |
![]() |
| Apps & Terminal | Notification Center |
|---|---|
![]() |
![]() |
| Apps & Terminal | Notification Center |
|---|---|
![]() |
![]() |
| Apps & Terminal | Notification Center |
|---|---|
![]() |
![]() |
| Apps & Terminal | Notification Center |
|---|---|
![]() |
![]() |
| Apps & Terminal | Notification Center |
|---|---|
![]() |
![]() |
| Apps & Terminal | Notification Center |
|---|---|
![]() |
![]() |
| Apps & Terminal | Notification Center |
|---|---|
![]() |
![]() |
| Apps & Terminal | Notification Center |
|---|---|
![]() |
![]() |
| Apps & Terminal | Notification Center |
|---|---|
![]() |
![]() |
- Credits
- Screenshots
- Overview
- Repository Layout
- Package Index
- Window Manager
- Status Bar
- Terminal
- Shell
- Prompt
- Terminal Multiplexer
- Application Launcher
- Notification Center
- Lock Screen
- Idle Manager
- Wallpaper
- Screenshot Pipeline
- Screen Recording
- Audio & OSD
- Git TUI
- System Monitor
- System Information
- Display Manager
- AI Coding Assistant
- Theming & Styling
- Fonts
- CLI Utilities
- Theme System
- Zsh Functions Reference
- Keybindings
- Installation
| Layer | Tool |
|---|---|
| Compositor | Hyprland (Wayland) |
| Bar | Waybar |
| Terminal | Ghostty |
| Shell | Zsh + Zinit |
| Prompt | Oh My Posh (zen theme) |
| Multiplexer | tmux |
| Launcher | Walker + Elephant |
| Notifications | SwayNC |
| Lock screen | hyprlock |
| Idle | hypridle |
| Wallpaper | awww |
| Screenshot | grim + slurp + satty |
| Screen record | gpu-screen-recorder |
| Audio OSD | swayosd |
| Git TUI | lazygit |
| System monitor | btop |
| System info | fastfetch |
| Login manager | SDDM (custom Tokyo Night theme) |
| AI assistant | opencode |
| Dotfile manager | GNU Stow |
GPU: NVIDIA + Wayland. The full environment is declared in
hypr/.config/hypr/conf/environment.conf. It sets the NVIDIA Wayland compatibility stack —GBM_BACKEND=nvidia-drm,NVD_BACKEND=direct,__GLX_VENDOR_LIBRARY_NAME=nvidia, and a dedicated shader cache path — and enforces Wayland-first platform backends for GTK (GDK_BACKEND=wayland), Qt (QT_QPA_PLATFORM=wayland;xcb), SDL (SDL_VIDEODRIVER=wayland), Electron apps (ELECTRON_OZONE_PLATFORM_HINT=auto), and Firefox (MOZ_ENABLE_WAYLAND=1). Session identity variables (XDG_SESSION_TYPE,XDG_CURRENT_DESKTOP) and cursor env vars are also set here.
dotfiles/
├── bin/ # theme-set script → PATH
├── btop/ # btop config + dynamically generated themes
├── fastfetch/ # system info display config
├── fontconfig/ # font rendering rules
├── ghostty/ # GPU-accelerated terminal config
├── gtk-3.0/ # GTK 3 settings
├── gtk-4.0/ # GTK 4 settings
├── hypr/ # Hyprland + hyprlock + hypridle + scripts
├── hyprland-preview-share-picker/ # screen-share window picker (xdg-portal)
├── lazygit/ # lazygit config + generated color theme
├── ohmyposh/ # oh-my-posh prompt theme
├── opencode/ # opencode AI assistant config
├── qt6ct/ # Qt6 theming (qt6ct + Kvantum)
├── satty/ # screenshot annotation tool config
├── sddm/ # display manager theme + install.sh
├── swaync/ # notification daemon + control center
├── swayosd/ # volume/brightness OSD
├── themed/ # template files used by theme-set
│ ├── btop.theme.tpl # btop color template
│ ├── walker.style.css.tpl # walker CSS template
│ └── walker.layout.xml # walker layout (copied as-is)
├── themes/ # color palette definitions (TOML)
│ ├── catppuccin/
│ ├── catppuccin-latte/
│ ├── ethereal/
│ ├── everforest/
│ ├── flexoki-light/
│ ├── gruvbox/
│ ├── hackerman/
│ ├── kanagawa/
│ ├── lumon/
│ ├── matte-black/
│ ├── miasma/
│ ├── nord/
│ ├── osaka-jade/
│ ├── retro-82/
│ ├── ristretto/
│ ├── rose-pine/
│ ├── tokyo-night/ # default active theme
│ ├── vantablack/
│ └── white/
├── tmux/ # tmux config + generated color file
├── walker/ # launcher config + per-theme CSS/layout
├── waybar/ # status bar config + generated colors.css
└── zsh/ # .zshrc + aliases, envs, and functions
Stow packages: Every top-level directory (except
themes/,themed/,bin/, andsddm/) is a GNU Stow package. Runningstow <pkg>from the dotfiles root creates symlinks under~/.config/<pkg>/.themes/andthemed/are read-only inputs consumed bytheme-set.bin/is not Stow-managed — add~/dotfiles/binto your$PATHdirectly.sddm/requires a manual install viainstall.sh(see Display Manager).
Package: hypr/
Config: hypr/.config/hypr/
Hyprland is a dynamic tiling Wayland compositor. The main config (hyprland.conf) is kept minimal — it sources every section from conf/:
| File | Purpose |
|---|---|
conf/animation.conf |
Window/workspace animation curves (bezier-based) |
conf/autostart.conf |
All startup daemons (awww, swaync, hypridle, swayosd-server, waybar, walker, elephant, xwaylandvideobridge) |
conf/colors.conf |
Generated by theme-set — accent, borders, shadow colors |
conf/decoration.conf |
Window blur (vibrancy), shadow, rounded corners (r=4) |
conf/environment.conf |
NVIDIA Wayland stack, cursor env, GTK/Qt backends, session identity |
conf/input.conf |
Keyboard/mouse/touchpad settings |
conf/keybindings.conf |
All SUPER-key bindings |
conf/monitor.conf |
Multi-monitor layout |
conf/permissions.conf |
XDG portal permission overrides |
conf/theme.conf |
Active window border, gaps |
conf/window.conf |
Per-tag opacity rules |
conf/windowrules.conf |
App-specific float/opacity/no-anim rules |
conf/workspaces.conf |
Workspace pinning (1–5 on DP-3, 6–10 on DP-2) |
hypridle.conf |
Idle timeout rules (see Idle Manager) |
hyprlock.conf |
Lock screen layout (see Lock Screen) |
hyprlock-colors.conf |
Generated by theme-set — lock screen palette |
xdph.conf |
xdg-desktop-portal-hyprland screencopy config (read directly by the portal; not sourced in hyprland.conf) |
Scripts in hypr/.config/hypr/scripts/:
| Script | Description |
|---|---|
screenshot.sh |
Smart region/window/fullscreen capture → ~/Pictures |
screenshot-edit.sh |
Open last screenshot in satty |
screenrecord.sh |
Start/stop GPU-accelerated recording → ~/Videos |
wallpaper.sh |
Randomly cycle wallpapers on all monitors via awww |
system-menu.sh |
Walker dmenu with lock / suspend / logout / reboot / shutdown |
toggle-idle.sh |
Toggle hypridle on/off; sends RTMIN+9 to Waybar |
toggle-notification-silencing.sh |
Toggle swaync do-not-disturb |
launch-tui.sh |
Launch a TUI app in a new Ghostty window |
launch-or-focus-tui.sh |
Focus an existing TUI window or open a new one |
keybindings.sh |
Display all keybindings in a floating window |
waybar-idle.sh |
Emit JSON for Waybar idle indicator |
waybar-screen-recording.sh |
Emit JSON for Waybar recording indicator |
Also used at startup:
xwaylandvideobridge— lets XWayland apps (Discord, Zoom, OBS) screenshare Wayland windows. Hidden via windowrules (max_size 1 1, fully transparent, no focus).polkit-gnome(/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1) — handles privilege escalation dialogs.
Package: waybar/
Config: waybar/.config/waybar/
Waybar is a highly customizable Wayland bar.
| File | Purpose |
|---|---|
config.jsonc |
Module layout and module-specific options |
style.css |
Bar appearance and module styling |
colors.css |
Generated by theme-set — palette CSS variables imported by style.css |
Modules:
| Position | Modules |
|---|---|
| Left | custom/launcher button, hyprland/workspaces |
| Center | hyprland/window (active window title), custom/screenrecording-indicator |
| Right | group/tray-expander (collapsible system tray), bluetooth, network, pulseaudio, cpu, clock, custom/swaync |
Notable behaviors:
- System tray lives inside a collapsible drawer (expands on hover).
- Network click: unblocks Wi-Fi via
rfkillthen launches impala TUI. - Bluetooth click: unblocks Bluetooth via
rfkillthen launches bluetui TUI. - Audio click: launches wiremix TUI; right-click mutes via
pamixer. - CPU click: opens
btopin Ghostty. - Screenrecording indicator refreshes on signal
RTMIN+8(sent byscreenrecord.sh). - Live CSS reload enabled via
"reload_style_on_change": true. SIGUSR2triggers a hot CSS + config reload (used bytheme-set).SIGUSR1toggles bar visibility (Super+Shift+Space).
Package: ghostty/
Config: ghostty/.config/ghostty/config.ghostty
Ghostty is a GPU-accelerated, feature-rich terminal emulator.
| Setting | Value |
|---|---|
| Font | JetBrainsMono Nerd Font, Regular, 9pt |
| Cursor | Block, no blink |
| Color file | colors.conf — generated by theme-set |
| Shell integration | no-cursor (Hyprland owns cursor shape), ssh-env (propagates TERM over SSH) |
| Async backend | epoll (prevents Hyprland input lag) |
| Window padding | 14px x/y |
Package: zsh/
Config: zsh/.zshrc, zsh/.config/zsh/
Plugin Manager — Zinit
Zinit is loaded lazily (deferred with wait lucid) to keep startup times fast.
| Plugin | Purpose |
|---|---|
zsh-users/zsh-completions |
Additional completion definitions |
Aloxaf/fzf-tab |
Replace zsh's built-in completion menu with fzf |
zsh-users/zsh-autosuggestions |
Fish-style inline history suggestions |
zdharma-continuum/fast-syntax-highlighting |
Real-time command syntax highlighting |
| Tool | Integration |
|---|---|
fzf |
Completion and key bindings sourced from /usr/share/fzf/ |
zoxide |
Smart cd via eval "$(zoxide init zsh)" |
mise |
Universal version manager via eval "$(mise activate zsh)" |
oh-my-posh |
Prompt via eval "$(oh-my-posh init zsh --config zen.toml)" |
| Alias | Expands to |
|---|---|
ls |
eza -lh --group-directories-first --icons=auto |
lsa |
ls -a |
lt |
eza --tree --level=2 --long --icons --git |
lta |
lt -a |
ff |
fzf --preview 'bat --style=numbers --color=always {}' |
c |
opencode |
d |
docker |
t |
tmux attach || tmux new -s Work |
n |
nvim . (or nvim <args>) |
g |
git |
gcm |
git commit -m |
gcam |
git commit -a -m |
gcad |
git commit -a --amend |
open |
xdg-open (detached from shell) |
| Variable | Value |
|---|---|
BAT_THEME |
ansi (respect terminal's own palette) |
PATH |
+$HOME/.local/bin, +$HOME/.vite-plus/bin |
Package: ohmyposh/
Config: ohmyposh/.config/ohmyposh/zen.toml
Oh My Posh renders a cross-shell prompt. The zen theme is minimal and information-dense.
Package: tmux/
Config: tmux/.config/tmux/tmux.conf
tmux is the session/window/pane multiplexer.
| Setting | Value |
|---|---|
| Prefix | C-Space (also C-b) |
| Copy mode | Vi keys (v begin-selection, y copy) |
| Mouse | Enabled |
| Base index | 1 (windows and panes) |
| History | 50,000 lines |
| Escape time | 0ms |
| Status bar | Top, 5s refresh |
| Colors | colors.conf — generated by theme-set |
Pane splits: prefix+h (horizontal) / prefix+v (vertical), navigate with C-M-Arrow.
Window nav: Alt+1…9 direct, Alt+Left/Right adjacent.
Session nav: Alt+Up/Down switch sessions.
See also Zsh tmux layout functions.
Package: walker/
Config: walker/.config/walker/config.toml
Walker is a GTK4 Wayland application launcher / runner.
Data Provider — Elephant
elephant is the separate data-provider daemon that feeds Walker with desktop application entries, clipboard history, symbols, and calculator results. It must be started before Walker.
exec-once = elephant
exec-once = env GSK_RENDERER=cairo walker --gapplication-service
GSK_RENDERER=cairo avoids GPU-path rendering glitches on NVIDIA + Wayland.
| Prefix | Provider | Example |
|---|---|---|
| (none) | Desktop apps + web search fallback | firefox |
/ |
Provider list | / |
. |
File browser | ./home |
: |
Symbols / emoji picker | :smile |
= |
Inline calculator | =2+2 |
@ |
Force web search | @arch wiki |
$ |
Clipboard history | $ |
Walker themes live at walker/.config/walker/themes/<theme>/ (style.css + layout.xml). Both files are generated by theme-set from the templates in themed/.
Package: swaync/
Config: swaync/.config/swaync/
SwayNC (Sway Notification Center) is the notification daemon and notification panel.
| File | Purpose |
|---|---|
config.json |
Notification behavior, timeout, DND config |
style.css |
Panel and notification card styling |
colors.css |
Generated by theme-set — CSS variables and GTK @define-color tokens |
Control:
Super+,— dismiss last notificationSuper+Shift+,— dismiss allSuper+.— toggle do-not-disturbSuper+Shift+Home— open notification center- Waybar
custom/swayncbutton also opens/closes it
Package: hypr/ (same stow package)
Config: hypr/.config/hypr/hyprlock.conf
hyprlock is the Hyprland-native lock screen.
| Setting | Value |
|---|---|
| Blur | 3 passes |
| Input field | Centered, 650×100, no rounding |
| Font | JetBrainsMono Nerd Font |
| Fingerprint | Disabled |
| Colors | Sourced from hyprlock-colors.conf — generated by theme-set |
Lock is triggered by Super+L → loginctl lock-session or automatically by hypridle at 5 minutes.
Package: hypr/ (same stow package)
Config: hypr/.config/hypr/hypridle.conf
hypridle monitors inactivity and triggers actions.
| Timeout | Action |
|---|---|
| 5 min | loginctl lock-session (locks screen) |
| 5 min 30 s | hyprctl dispatch dpms off (turn off displays) |
| On resume | hyprctl dispatch dpms on |
| Before sleep | loginctl lock-session |
| After sleep | sleep 1 && hyprctl dispatch dpms on |
Toggle with the Waybar idle indicator or toggle-idle.sh.
awww (awww-daemon + awww img) is the Wayland wallpaper daemon (replaced swww).
Script: hypr/.config/hypr/scripts/wallpaper.sh
- Source directory:
~/Pictures/Wallpapers/Minimal - Transition:
centergrow at 60 FPS, step 90 - Interval: 600 s (10 minutes)
- Both monitors receive the same image simultaneously; each uses
--resize=cropfor edge-to-edge fill (the secondary monitor is rotated 90°)
Bound to: Super+Shift+S
Tools used in screenshot.sh:
| Tool | Role |
|---|---|
grim |
Capture pixels from the Wayland compositor |
slurp |
Interactive region / window / monitor selection |
hyprpicker |
Freezes screen color during selection (acts as overlay) |
satty |
Screenshot annotation (draw, arrows, text, blur, crop) |
wl-clipboard (wl-copy) |
Copy image to Wayland clipboard |
notify-send |
Show preview notification with "Click to annotate" action |
Smart mode (default): pre-populates slurp with all window and monitor geometries on the active workspace. A click selects a whole window/monitor; a drag selects a custom region.
Flow:
screenshot.sh→grim -g "$SELECTION"→ save to~/Pictures/wl-copythe PNG automaticallynotify-send --waitshows a preview; clicking "Annotate" openssattysattyoffers save-to-clipboard, annotate, and re-copy workflow
Script: hypr/.config/hypr/scripts/screenrecord.sh
| Tool | Role |
|---|---|
gpu-screen-recorder |
GPU-accelerated recording via the portal backend (-w portal) |
ffmpeg |
Trim first frame (avoids black flash), generate preview thumbnail |
ffplay |
Webcam overlay (optional, PiP-style) |
v4l2-ctl |
List available webcam devices and supported resolutions |
mpv |
Play back recording on notification click |
notify-send |
Show save notification with preview thumbnail |
Flags: --with-desktop-audio, --with-microphone-audio, --with-webcam, --webcam-device=, --resolution=, --stop-recording
Resolution defaults to native (or capped at 4K for higher-res monitors).
A RTMIN+8 signal is sent to Waybar after start/stop to update the recording indicator.
Package: swayosd/
swayosd-server runs as a daemon; swayosd-client is called from Hyprland keybindings for volume and mic-mute events. Displays a polished on-screen overlay for volume and brightness changes.
| Key | Action |
|---|---|
XF86AudioRaiseVolume |
swayosd-client --output-volume raise |
XF86AudioLowerVolume |
swayosd-client --output-volume lower |
XF86AudioMute |
swayosd-client --output-volume mute-toggle |
XF86AudioMicMute |
swayosd-client --input-volume mute-toggle |
Max volume cap is enforced in swayosd/config.toml.
The audio server. Waybar's pulseaudio module connects to it via the PulseAudio compatibility layer.
TUI mixer for PipeWire routing — launched from the Waybar audio widget click.
CLI volume control. Used in the Waybar audio right-click action for quick mute toggle.
MPRIS media controller for Next / Pause / Play / Previous media keys.
Package: lazygit/
Config: lazygit/.config/lazygit/config.yml
lazygit is a terminal UI for git.
| File | Purpose |
|---|---|
config.yml |
Keybindings, behavior, and include pointer to colors.yml |
colors.yml |
Generated by theme-set — active/inactive borders, selection, unstaged colors |
Package: btop/
Config: btop/.config/btop/
btop is a resource monitor (CPU, memory, disks, network, processes).
btop.conf— main config;color_themeis updated in-place bytheme-setthemes/<theme>.theme— generated bytheme-setfromthemed/btop.theme.tpl
Launched from Waybar CPU widget click (ghostty -e btop).
Package: fastfetch/
Config: fastfetch/.config/fastfetch/
fastfetch displays system information (OS, kernel, DE, CPU, GPU, RAM, etc.) on shell startup or on demand.
Package: sddm/ (manual install — requires sudo)
SDDM is the display/login manager.
This package includes a custom Tokyo Night QML theme (sddm/theme/Main.qml) and a deployment script:
bash sddm/install.shThe script:
- Requires (or re-runs with)
sudo - Copies
sddm/theme/to/usr/share/sddm/themes/tokyonight/ - Writes
sddm.confto/etc/sddm.conf.d/theme.conf - Warns if JetBrainsMono Nerd Font is not installed system-wide (SDDM can't read user fonts)
sddm/contains a.stow-local-ignore— it is not managed by Stow and must be installed manually.
Required font for SDDM theme:
sudo pacman -S ttf-jetbrains-mono-nerdPackage: opencode/
Config: opencode/.config/opencode/
opencode is an AI coding assistant. Aliased as c in the shell.
The config directory also includes custom agents and context-mode configurations.
Packages: gtk-3.0/, gtk-4.0/
GTK settings applied via gsettings on autostart:
| Setting | Value |
|---|---|
| Color scheme | prefer-dark |
| GTK theme | Orchis-Dark-Compact |
| Icon theme | Tela-dark |
| Cursor theme | oreo_spark_purple_cursors |
| Cursor size | 24 |
Package: qt6ct/
qt6ct + Kvantum provide Qt6 app theming consistent with the GTK look. QT_QPA_PLATFORMTHEME=qt6ct is set in environment.conf.
Package: satty/
Config: satty/.config/satty/
Satty is the screenshot annotation tool. Force-started in dark mode via ADW_DEBUG_COLOR_SCHEME=prefer-dark.
Package: fontconfig/
Config: fontconfig/.config/fontconfig/
Custom fonts.conf rules for font rendering, hinting, and anti-aliasing to ensure consistent display across all applications. Noto Sans is used as the primary UI font across GTK and Qt applications, with JetBrainsMono Nerd Font for all monospace / terminal contexts.
Package: hyprland-preview-share-picker/
hyprland-preview-share-picker provides the window/screen selection UI when applications request screensharing via the XDG desktop portal (xdg-desktop-portal-hyprland).
| Font | Usage | Install |
|---|---|---|
| JetBrainsMono Nerd Font | Terminal, prompt, lock screen, SDDM, Waybar icons | sudo pacman -S ttf-jetbrains-mono-nerd |
| Noto Sans | UI font — GTK apps, Qt apps, system-wide fallback | sudo pacman -S noto-fonts |
These tools are referenced across scripts, aliases, and functions:
| Tool | Purpose | Used in |
|---|---|---|
eza |
Modern ls with icons and git status |
aliases.zsh |
bat |
Syntax-highlighted cat |
aliases.zsh (ff preview) |
fzf |
Fuzzy finder | .zshrc, fzf-tab, aliases.zsh |
zoxide |
Frecency-based smart cd |
.zshrc |
mise |
Universal version manager (node, python, ruby…) | .zshrc, worktrees.zsh |
gum |
Interactive terminal UI (confirm, choose) | drives.zsh, worktrees.zsh |
jq |
JSON processor | screenshot.sh, screenrecord.sh, wallpaper.sh |
hyprctl |
Hyprland IPC | Multiple scripts |
notify-send |
Desktop notifications | screenshot.sh, screenrecord.sh, toggle-idle.sh |
rfkill |
Toggle Wi-Fi / Bluetooth kill switch | Waybar network/bluetooth |
impala |
Wi-Fi TUI | Waybar network click |
bluetui |
Bluetooth TUI | Waybar bluetooth click |
wiremix |
PipeWire audio mixer TUI | Waybar audio click |
pamixer |
CLI volume control | Waybar audio right-click |
playerctl |
MPRIS media controls | Hyprland media keys |
ffmpeg |
Video transcoding, trim, thumbnail | screenrecord.sh, transcoding.zsh |
mpv |
Video playback | screenrecord.sh |
magick (ImageMagick) |
Image conversion and resize | transcoding.zsh |
docker |
Container runtime | aliases.zsh (aliased as d) |
nvim (Neovim) |
Text editor | aliases.zsh (aliased as n) |
zen-browser |
Web browser | keybindings.conf (Super+Shift+B) |
thunar |
GTK file manager | keybindings.conf (Super+Shift+E) |
v4l2-ctl |
Webcam device enumeration | screenrecord.sh |
The theme-set script (bin/theme-set) is the heart of the theming architecture. It reads a single themes/<name>/colors.toml file and propagates all colors to every managed application in one pass.
# Apply a theme by name
theme-set tokyo-night
# Re-apply the currently active theme (e.g. after re-stowing)
theme-setThe active theme name is persisted to ~/.config/dotfiles/current-theme.
| Theme | Style |
|---|---|
catppuccin |
Pastel dark (Mocha) |
catppuccin-latte |
Pastel light |
ethereal |
Soft muted tones |
everforest |
Nature-inspired green |
flexoki-light |
Warm light |
gruvbox |
Retro earthy |
hackerman |
High-contrast green-on-black |
kanagawa |
Japanese ink-inspired |
lumon |
Corporate brutalist |
matte-black |
Deep dark minimal |
miasma |
Murky green-grey |
nord |
Arctic blue |
osaka-jade |
Cool teal-green |
retro-82 |
Outrun / synthwave |
ristretto |
Coffee-brown |
rose-pine |
Muted pinks and purples |
tokyo-night |
(default) Deep blue-purple night |
vantablack |
Near-zero-black |
white |
Light / inverted |
Each theme defines a colors.toml with the following keys:
# Base palette
accent = "#7aa2f7" # primary accent / active border
foreground = "#a9b1d6"
background = "#1a1b26"
cursor = "#c0caf5"
selection_foreground = "#c0caf5"
selection_background = "#7aa2f7"
# Terminal palette (color0–color15)
color0 = "#32344a"
# ... through color15
# Semantic tokens
bg_highlight = "#292e42" # hover/selected row backgrounds
comment = "#565f89" # muted/inactive text
red = "#f7768e"
red_hover = "#ff7a93"
green = "#9ece6a"
yellow = "#e0af68"
dark_blue = "#3d59a1"
# Notification surface colors (SwayNC)
noti_bg = "#13141c"
noti_bg_darker = "#1f2335"
noti_bg_hover = "#1e2030"
noti_bg_focus = "#191b28"| Application | Output file | Mechanism |
|---|---|---|
| Ghostty | ghostty/.config/ghostty/colors.conf |
Sourced via config-file = |
| Hyprland | hypr/.config/hypr/conf/colors.conf |
Sourced via source = in hyprland.conf |
| hyprlock | hypr/.config/hypr/hyprlock-colors.conf |
Sourced via source = in hyprlock.conf |
| Waybar | waybar/.config/waybar/colors.css |
@import "colors.css" in style.css |
| SwayNC | swaync/.config/swaync/colors.css |
@import "colors.css" in style.css |
| tmux | tmux/.config/tmux/colors.conf |
source-file in tmux.conf |
| lazygit | lazygit/.config/lazygit/colors.yml |
include: in config.yml |
| btop | btop/.config/btop/themes/<theme>.theme |
color_theme = in btop.conf (updated in-place) |
| Walker | walker/.config/walker/themes/<theme>/style.css + layout.xml |
theme = in config.toml (updated in-place) |
| App | Reload method |
|---|---|
| Hyprland | hyprctl reload |
| Waybar | pkill -SIGUSR2 waybar |
| SwayNC | swaync-client -rs (CSS-only reload) |
| tmux | tmux source-file ~/.config/tmux/colors.conf |
| Walker | pkill -x walker + restart with --gapplication-service |
| Ghostty | Open a new window (no hot-reload for color config) |
| btop | Restart manually (must re-read the theme file) |
| Function | Signature | Description |
|---|---|---|
tdl |
tdl <ai_cmd> [ai2_cmd] |
Split current tmux window into editor (left) + AI pane(s) (right). Opens $EDITOR . in the main pane. Example: tdl c (opencode), tdl c codex |
tdlm |
tdlm <ai_cmd> [ai2_cmd] |
Like tdl but opens one window per immediate subdirectory. Renames the session to the parent directory. |
tsl |
tsl <count> <command> |
Open N side-by-side panes all running the same command (e.g. tsl 3 "npm run dev"). |
| Function | Signature | Description |
|---|---|---|
ga |
ga <branch> |
Create a new git worktree at ../<repo>--<branch>, run mise trust, and cd into it. |
gd |
gd |
Remove the current worktree and delete its branch. Asks for confirmation via gum if available. |
| Function | Signature | Description |
|---|---|---|
iso2sd |
iso2sd <iso> [device] |
Write an ISO to a removable drive with dd. Interactive device picker if no device given. Auto-ejects on completion. |
format-drive |
format-drive <device> <label> |
Wipe and format a drive as a single exFAT partition. Handles NVMe and SATA naming. |
| Function | Signature | Description |
|---|---|---|
transcode-video-1080p |
<file> |
Re-encode video to 1080p H.264 (CRF 23) — <name>-1080p.mp4 |
transcode-video-4K |
<file> |
Re-encode video to H.265 (CRF 24, AAC 192k) — <name>-optimized.mp4 |
img2jpg |
<file> [magick opts] |
Convert any image to JPEG at quality 95, metadata stripped |
img2jpg-small |
<file> [magick opts] |
Convert + resize to max 1080px wide JPEG |
img2jpg-medium |
<file> [magick opts] |
Convert + resize to max 1800px wide JPEG |
img2png |
<file> [magick opts] |
Convert to optimized PNG (max compression, no metadata) |
SSH connection helpers (agent forwarding, host shortcuts).
Create and extract common archive formats (zip, tar.gz, tar.bz2, tar.zst, etc.).
All keybindings use Super ($mainMod) as the primary modifier.
| Keys | Action |
|---|---|
Super + Return |
Open Ghostty terminal |
Super + Alt + Return |
Open Ghostty with tmux (Work session) |
Super + Q |
Close focused window |
Super + F |
Toggle fullscreen |
Super + V |
Clipboard history (Walker) |
Super + Shift + F |
Toggle floating |
Super + P |
Pseudo tile |
Super + J |
Toggle window split |
Super + L |
Lock screen |
| Keys | Action |
|---|---|
Super + Space |
Walker launcher |
Super + Shift + B |
Zen Browser |
Super + Shift + E |
Thunar file manager |
Super + Escape |
System menu (lock/suspend/logout/reboot/shutdown) |
Super + Ctrl + E |
Emoji / symbols picker |
Super + K |
Show all keybindings |
| Keys | Action |
|---|---|
Super + Shift + S |
Smart screenshot (save + clipboard + annotate) |
Super + Alt + S |
Instant screenshot of the monitor the cursor is on |
| (Waybar click) | Start / stop screen recording |
| Keys | Action |
|---|---|
Super + , |
Dismiss last notification |
Super + Shift + , |
Dismiss all notifications |
Super + . |
Toggle do-not-disturb |
Super + Shift + Home |
Open notification center |
| Keys | Action |
|---|---|
Super + G |
Toggle group |
Super + Tab |
Next in group |
Super + Shift + Tab |
Previous in group |
| Keys | Action |
|---|---|
Super + 1…0 |
Switch to workspace 1–10 |
Super + Shift + 1…0 |
Move window to workspace 1–10 |
Super + Z |
Toggle scratchpad |
Super + Shift + Z |
Move window to scratchpad |
Super + Mouse Scroll |
Cycle workspaces |
| Keys | Action |
|---|---|
Super + Arrow |
Move focus |
Super + Mouse1 |
Move window |
Super + Mouse2 |
Resize window |
| Keys | Action |
|---|---|
XF86AudioRaiseVolume |
Volume up (SwayOSD) |
XF86AudioLowerVolume |
Volume down (SwayOSD) |
XF86AudioMute |
Mute toggle (SwayOSD) |
XF86AudioMicMute |
Mic mute toggle (SwayOSD) |
XF86AudioNext/Prev/Play/Pause |
playerctl media control |
| Keys | Action |
|---|---|
Super + Shift + Space |
Toggle Waybar visibility |
Install the required packages (Arch Linux / AUR):
# Build toolchain (required for AUR packages)
sudo pacman -S base-devel
# Core compositor stack
sudo pacman -S hyprland hyprlock hypridle xdg-desktop-portal-hyprland
# Screen-share window picker (XDG portal)
yay -S hyprland-preview-share-picker-git
# Bar, launcher, notifications
sudo pacman -S waybar swaync swayosd
# Terminal and shell
sudo pacman -S ghostty zsh tmux
# Fonts (required before SDDM install)
sudo pacman -S ttf-jetbrains-mono-nerd
# Wallpaper
yay -S awww
# Screenshot pipeline
sudo pacman -S grim slurp satty wl-clipboard hyprpicker
# Screen recording
yay -S gpu-screen-recorder
sudo pacman -S ffmpeg mpv v4l-utils
# Audio
sudo pacman -S pipewire wireplumber pamixer playerctl
yay -S wiremix
# Bluetooth / Network TUIs
yay -S bluetui impala
# Application launcher
yay -S walker elephant
# Git TUI / monitor / info
sudo pacman -S lazygit btop fastfetch
# CLI utilities
sudo pacman -S eza bat fzf zoxide mise gum jq rfkill imagemagick
# GTK / Qt theming
sudo pacman -S orchis-theme tela-icon-theme oreo-cursors qt6ct kvantum
# Display manager
sudo pacman -S sddm
# Zsh plugins (via zinit — auto-installed on first zsh launch)
# Oh My Posh
yay -S oh-my-posh-bincd ~/dotfiles
# Stow every package at once
stow btop fastfetch fontconfig ghostty gtk-3.0 gtk-4.0 \
hypr hyprland-preview-share-picker lazygit ohmyposh opencode \
qt6ct satty swaync swayosd tmux walker waybar zsh
# OR stow packages individually
stow ghostty
stow hypr
stow zsh
# ...# Apply the default Tokyo Night theme
theme-set tokyo-night
# Or any other theme
theme-set nord
theme-set catppuccin
theme-set gruvboxbash ~/dotfiles/sddm/install.sh- Log out and back in (or run
Hyprlandfrom a TTY). - The bar, wallpaper, lock screen, and notification center should all use the selected theme palette.
- Run
theme-set <name>at any time to switch themes live.























