Skip to content

nerdkill/dotfiles

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

dotfiles

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.

Credits

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

Screenshots

Overview

Desktop Walker launcher

Themes

Note: Screenshots are included for a selection of themes — not all available themes are shown.

Catppuccin

Apps & Terminal Notification Center
Catppuccin apps Catppuccin notifications

Catppuccin Latte

Apps & Terminal Notification Center
Catppuccin Latte apps Catppuccin Latte notifications

Everforest

Apps & Terminal Notification Center
Everforest apps Everforest notifications

Gruvbox

Apps & Terminal Notification Center
Gruvbox apps Gruvbox notifications

Lumon

Apps & Terminal Notification Center
Lumon apps Lumon notifications

Osaka Jade

Apps & Terminal Notification Center
Osaka Jade apps Osaka Jade notifications

Retro 82

Apps & Terminal Notification Center
Retro 82 apps Retro 82 notifications

Ristretto

Apps & Terminal Notification Center
Ristretto apps Ristretto notifications

Rose Pine

Apps & Terminal Notification Center
Rose Pine apps Rose Pine notifications

Tokyo Night

Apps & Terminal Notification Center
Tokyo Night apps Tokyo Night notifications

Vantablack

Apps & Terminal Notification Center
Vantablack apps Vantablack notifications

Table of Contents


Overview

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.


Repository Layout

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/, and sddm/) is a GNU Stow package. Running stow <pkg> from the dotfiles root creates symlinks under ~/.config/<pkg>/. themes/ and themed/ are read-only inputs consumed by theme-set. bin/ is not Stow-managed — add ~/dotfiles/bin to your $PATH directly. sddm/ requires a manual install via install.sh (see Display Manager).


Package Index

🪟 Window Manager — Hyprland

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.

📊 Status Bar — Waybar

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 rfkill then launches impala TUI.
  • Bluetooth click: unblocks Bluetooth via rfkill then launches bluetui TUI.
  • Audio click: launches wiremix TUI; right-click mutes via pamixer.
  • CPU click: opens btop in Ghostty.
  • Screenrecording indicator refreshes on signal RTMIN+8 (sent by screenrecord.sh).
  • Live CSS reload enabled via "reload_style_on_change": true.
  • SIGUSR2 triggers a hot CSS + config reload (used by theme-set).
  • SIGUSR1 toggles bar visibility (Super+Shift+Space).

💻 Terminal — Ghostty

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.confgenerated 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

🐚 Shell — Zsh

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 Integrations

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)"

Aliases (aliases.zsh)

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)

Environment (envs.zsh)

Variable Value
BAT_THEME ansi (respect terminal's own palette)
PATH +$HOME/.local/bin, +$HOME/.vite-plus/bin

🎨 Prompt — Oh My Posh

Package: ohmyposh/
Config: ohmyposh/.config/ohmyposh/zen.toml

Oh My Posh renders a cross-shell prompt. The zen theme is minimal and information-dense.


🖥️ Terminal Multiplexer — tmux

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.confgenerated 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.


🚀 Application Launcher — Walker

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.

Providers & Prefixes

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 $

Per-Theme Styling

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/.


🔔 Notification Center — SwayNC

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 notification
  • Super+Shift+, — dismiss all
  • Super+. — toggle do-not-disturb
  • Super+Shift+Home — open notification center
  • Waybar custom/swaync button also opens/closes it

🔒 Lock Screen — hyprlock

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.confgenerated by theme-set

Lock is triggered by Super+Lloginctl lock-session or automatically by hypridle at 5 minutes.


💤 Idle Manager — hypridle

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.


🖼️ Wallpaper — awww

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: center grow at 60 FPS, step 90
  • Interval: 600 s (10 minutes)
  • Both monitors receive the same image simultaneously; each uses --resize=crop for edge-to-edge fill (the secondary monitor is rotated 90°)

📸 Screenshot Pipeline

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:

  1. screenshot.shgrim -g "$SELECTION" → save to ~/Pictures/
  2. wl-copy the PNG automatically
  3. notify-send --wait shows a preview; clicking "Annotate" opens satty
  4. satty offers save-to-clipboard, annotate, and re-copy workflow

🎥 Screen Recording

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.


🔊 Audio & OSD

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.


🦊 Git TUI — lazygit

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

📈 System Monitor — btop

Package: btop/
Config: btop/.config/btop/

btop is a resource monitor (CPU, memory, disks, network, processes).

  • btop.conf — main config; color_theme is updated in-place by theme-set
  • themes/<theme>.themegenerated by theme-set from themed/btop.theme.tpl

Launched from Waybar CPU widget click (ghostty -e btop).


ℹ️ System Information — fastfetch

Package: fastfetch/
Config: fastfetch/.config/fastfetch/

fastfetch displays system information (OS, kernel, DE, CPU, GPU, RAM, etc.) on shell startup or on demand.


🖥️ Display Manager — SDDM

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.sh

The script:

  1. Requires (or re-runs with) sudo
  2. Copies sddm/theme/ to /usr/share/sddm/themes/tokyonight/
  3. Writes sddm.conf to /etc/sddm.conf.d/theme.conf
  4. 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-nerd

🤖 AI Coding Assistant — opencode

Package: 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.


🎨 Theming & Styling

GTK 3 & GTK 4

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

Qt 6

Package: qt6ct/

qt6ct + Kvantum provide Qt6 app theming consistent with the GTK look. QT_QPA_PLATFORMTHEME=qt6ct is set in environment.conf.

Satty

Package: satty/
Config: satty/.config/satty/

Satty is the screenshot annotation tool. Force-started in dark mode via ADW_DEBUG_COLOR_SCHEME=prefer-dark.

Font Configuration

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.

XDG Screen Share Picker

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).


🔤 Fonts

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

🛠️ CLI Utilities

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

🎨 Theme System

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.

Usage

# Apply a theme by name
theme-set tokyo-night

# Re-apply the currently active theme (e.g. after re-stowing)
theme-set

The active theme name is persisted to ~/.config/dotfiles/current-theme.

Available Themes

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

Colors TOML Schema

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"

What theme-set Generates

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)

Live Reload After theme-set

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)

📋 Zsh Functions Reference

tmux.zsh — Developer Layouts

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").

worktrees.zsh — Git Worktrees

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.

drives.zsh — Drive Management

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.

transcoding.zsh — Media Conversion

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.zsh — SSH Helpers

SSH connection helpers (agent forwarding, host shortcuts).

compression.zsh — Archive Helpers

Create and extract common archive formats (zip, tar.gz, tar.bz2, tar.zst, etc.).


⌨️ Keybindings

All keybindings use Super ($mainMod) as the primary modifier.

Core

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

Apps

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

Screenshots & Recording

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

Notifications

Keys Action
Super + , Dismiss last notification
Super + Shift + , Dismiss all notifications
Super + . Toggle do-not-disturb
Super + Shift + Home Open notification center

Window Groups (Tabbed)

Keys Action
Super + G Toggle group
Super + Tab Next in group
Super + Shift + Tab Previous in group

Workspaces

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

Navigation

Keys Action
Super + Arrow Move focus
Super + Mouse1 Move window
Super + Mouse2 Resize window

Media & Audio

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

Waybar

Keys Action
Super + Shift + Space Toggle Waybar visibility

🛠️ Installation

Prerequisites

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-bin

Stow All Packages

cd ~/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 Initial Theme

# Apply the default Tokyo Night theme
theme-set tokyo-night

# Or any other theme
theme-set nord
theme-set catppuccin
theme-set gruvbox

Install SDDM Theme (requires sudo)

bash ~/dotfiles/sddm/install.sh

Verify

  1. Log out and back in (or run Hyprland from a TTY).
  2. The bar, wallpaper, lock screen, and notification center should all use the selected theme palette.
  3. Run theme-set <name> at any time to switch themes live.

About

Hyprland dotfiles for Arch Linux — GNU Stow managed, with a unified theme system that switches colors across all apps simultaneously.

Topics

Resources

Stars

Watchers

Forks

Contributors