Arch Linux dotfiles for Hyprland, with a cyberpunk visual direction, Catppuccin Mocha colors, and Mauve accents.
HyprPunk is a complete personal Wayland setup built around Hyprland.
It brings together the window manager, the desktop shell, themes, scripts, terminal, shell, and CLI tools in a modular GNU Stow based configuration.
The goal is simple: a cohesive, dark, readable, and responsive desktop inspired by cyberpunk visuals without getting in the way of daily work.
Everything below is drawn by the Quickshell configuration in quickshell/.
The screen blurs into the lock, with the date and time over the player and its synced lyrics, and the bar's pills carried over. Typing shows the password prompt, and the island turns into a padlock that opens on the right password.
| Locked | Typing the password |
|---|---|
![]() |
![]() |
The clock's island grows into every panel, the password prompts for admin rights, the apps' file pickers and the screen share picker included, and shows the volume, brightness, keyboard light, microphone and touchpad changes, with new notifications stacking out of it.
| Application Launcher | Main Menu |
|---|---|
![]() |
![]() |
| Clipboard History | Emoji Picker |
![]() |
![]() |
| Wallpaper Selector | Session Menu |
![]() |
![]() |
| Control Center | Notifications |
|---|---|
![]() |
![]() |
| Player and Lyrics | Workspace Preview |
![]() |
![]() |
More shell screenshots
| Calendar | Resources |
|---|---|
![]() |
![]() |
| Screenshots and Recordings | Monitors |
![]() |
![]() |
| Keybindings | Configuration Files |
![]() |
![]() |
| SDDM Theme Selector | |
![]() |
The applications themed and configured by these dotfiles.
Kitty with Zsh, the Starship prompt and Tmux, here running Fastfetch, Btop and Cava.
| Neovim | Yazi |
|---|---|
![]() |
![]() |
| Dolphin (Qt, Kvantum) | Brave and Loupe (GTK) |
![]() |
![]() |
- πͺ Hyprland as the main Wayland environment.
- π§ Quickshell for the bar, the dynamic island panels (launcher, clipboard, emoji, wallpapers, SDDM themes, session), the control center, the notifications (popping out of the island), the OSD, the lock screen (with the player and its lyrics), and screenshots (annotated in place) and screen recordings.
- π A battery charge limit set from the control center, on laptops whose battery driver supports one.
- π Hypridle and awww for idle handling (locking, then suspending) and wallpapers with animated transitions.
- π¬ SDDM with cyberpunk video themes.
- π» Kitty, Zsh, Starship, Tmux, and Yazi for the terminal workflow.
- π Neovim with a Lua-based configuration.
- π¨ GTK 3/4, Qt5/Qt6, and Kvantum themed around Catppuccin Mocha.
- π οΈ Cliphist, Fastfetch, Btop, Cava, Bat, and utility scripts.
- π¦ Brave managed policy (extensions, Rewards, Wallet, AI Chat) installed system-wide.
- π¦ Modular configuration managed with GNU Stow.
HyprPunk uses Catppuccin Mocha as its dark base and Mauve as the main accent color.
Core palette:
- π Base:
#1e1e2e - π Mantle:
#181825 - π Crust:
#11111b - β¨ Text:
#cdd6f4 - π Mauve:
#cba6f7 - πͺ» Lavender:
#b4befe
The overall look favors soft contrast, mauve borders, dark surfaces, compact menus, and night-city inspired visuals.
The shell's glass comes in two styles: Classic, with crisp rims, and Liquid, see-through like the lock screen's
minutes with a soft rim. Switch between them live from the control center's Display block, or with
~/Scripts/glassctl.sh set classic|liquid|toggle.
Caution
HyprPunk only installs on a fresh minimal Arch Linux installation, with nothing else set up yet.
It takes over your user configuration, sets up SDDM and GRUB, installs its packages, and enables its services.
So it checks first, and stops without changing anything if it finds configs it would take over (like
~/.config/hypr or ~/.dotfiles), another login screen, or another desktop. Nothing is backed up, apart from
/etc/default/grub, kept as /etc/default/grub.bak.
- A fresh Arch Linux, installed with the minimal profile (for example
archinstallwith no desktop). - A user account in the
wheelgroup withsudoworking. Run the installer as that user, not as root. - An internet connection. The dotfiles alone weigh about 180 MB to download, mostly the screenshots, wallpapers and login screen videos, and the packages come on top.
- GRUB is optional: its theme is skipped with any other bootloader.
Important
HyprPunk doesn't install any graphics driver. Install the ones your GPU needs yourself, before or right after HyprPunk, following the Arch Wiki for Intel, AMD or NVIDIA, and Hyprland's own NVIDIA page for NVIDIA cards.
The rest adapts to the machine on its own:
- π The battery pill, alerts and charge limit only show on a laptop with a battery, the charge limit only when its driver has one.
- π‘ Brightness follows the screen's backlight, and the keyboard light where there is one.
- π±οΈ The touchpad toggle only matters when there's a touchpad.
- π₯οΈ Several monitors are handled by
displayctl.sh(see Display Settings below).
Some of the looks are heavy for a small machine or a virtual machine: the liquid glass (switch to Classic in the
control center's Display block), the login screen's videos, and the 4-pass blur (passes in
~/.config/hypr/looknfeel.lua).
bash <(curl -fsSL https://raw.githubusercontent.com/tuconnaisyouknow/HyprPunk/refs/heads/master/install.sh)The script asks for the keyboard layout, interface language, and regional formats first, then your password once.
After that it runs on its own until it offers to reboot, so you can leave it during the long package builds. Left empty, the
answers give a US layout and English for both the interface and the formats (en_US.UTF-8). English and French
(fr_FR.UTF-8) are both generated during installation, so you can switch later. If the installation stops, run the
same command again and it picks up where it left off.
Reboot after the installation completes.
Note
Only two keyboard layouts are supported, QWERTY US and AZERTY FR, and only two languages and regional
formats, English (en_US) and French (fr_FR). Other layouts and locales aren't handled.
HyprPunk installs its own choice of applications, without asking. You can remove any of them afterwards with
yay -Rns <package>, and give its shortcut another app from your personal files (see Customization).
- π Brave, with uBlock Origin Lite and the Catppuccin Mocha theme installed by its policy, and Rewards, Wallet and AI Chat turned off.
- π΅ Spotify (
spotify-launcher) and π Obsidian. - π LibreOffice for documents, Papers for PDFs, Loupe for images, mpv for videos and Celluloid for music files, set as the default apps for those files.
- π Dolphin and Ark for files and archives, Seahorse for the keyring.
- π Neovim and Lazygit, with
cargoandnpmfor the language servers Neovim's Mason downloads on its first start, with their linters and formatters: Bash, Python, HTML, CSS, TypeScript and React, Java, Markdown, Docker, JSON and Hyprland.
Tip
These are enough to find your way around on the first login. Super + Ctrl + K lists every other shortcut,
and clicking one in that list runs it.
| Shortcut | What it does |
|---|---|
Super + T |
Open the terminal (Kitty) |
Super + Space |
Open the application launcher |
Super + Ctrl + Space |
Open the main menu |
Super + C |
Open the control center (Wi-Fi, Bluetooth, sound, display, battery, background appsβ¦) |
Super + N |
Open the calendar and notifications |
Super + V |
Open the clipboard history |
Super + Q |
Close the focused window |
Super + F |
Maximize the focused window, add Shift to make it float instead |
Super + 1 β¦ Super + 0 |
Switch to a workspace, add Shift to send the window there |
Super + Tab |
Switch back to the previous workspace |
Super + Escape |
Open the session menu (lock, log out, reboot, shut down) |
Super + Ctrl + K |
Show all the keybindings |
Super is the Windows key. The arrows follow Vim, h j k l on QWERTY and j k l m on AZERTY: Super with one of
them, or with a real arrow, moves the focus, and adding Shift moves the window.
Every panel of the shell opens with qs -c hyprpunk ipc call <panel> toggle (or open, close), which is also what
you'd bind to your own shortcuts.
| Panel | Shortcut |
|---|---|
launcher |
Super + Space |
menu |
Super + Ctrl + Space |
clipboard |
Super + V |
emoji |
Super + . or Super + ; |
keybindings |
Super + Ctrl + K |
wallpaper |
Super + Ctrl + W |
sddm |
Super + Ctrl + G |
session |
Super + Escape |
controlcenter |
Super + C |
notifications |
Super + N |
workspaces (preview of the others) |
Super + W |
systemmonitor |
Ctrl + Shift + Escape |
player (the bar's player card, while Spotify runs) |
Super + Shift + P |
config, monitor, screenshot |
From the main menu |
| Capture | Shortcut |
|---|---|
| The active screen | Print |
| A region or a window | Super + Shift + S |
| A region, annotated in place | Super + Ctrl + S |
| Record the active screen, or stop | Shift + Print |
| Record a region or a window, or stop | Super + Shift + R |
Screenshots are saved in ~/Pictures/Screenshots and copied to the clipboard. Recordings, with the system's sound,
go to ~/Videos/Recordings, and stop from the same shortcut or from their timer in the island. Both follow you if you
move your pictures or videos folder in ~/.config/user-dirs.dirs.
The screen locks with Super + Ctrl + L, from the session menu, or after 5Β½ minutes without use. The screen dims
first, at 5 minutes, and the computer goes to sleep after 30 minutes. Before sleeping, the screen locks at once,
without its animation. The lock is held by Hyprland itself, so the screens stay locked even if the shell crashes.
The bar's spinning record, its player card and the lock screen's player and synced lyrics follow Spotify only.
Other players, like a video in the browser or mpv, still work with the media keys but don't show there. This is a
choice, not something you can switch: setting hyprpunk.programs.music to another app only changes what
Super + P opens.
The shell talks to AirPods directly, every model included, once Bluetooth is on (it starts off at each login):
- AirPods in pairing mode near the computer show a card with a Connect button.
- Opening the case of paired AirPods, or connecting them, shows their batteries.
- Putting a pod in your ear connects them, unless they're busy playing or on a call with another device.
- Taking a pod out pauses the music, and putting it back resumes it.
The first connection saves their keys in ~/.local/state/hyprpunk/airpods-keys.json, which tells your AirPods apart
from other people's nearby.
.
βββ assets/screenshots/ # Images used by this README
βββ bat/ # Bat configuration and Catppuccin theme
βββ battery/ # Battery charge limit script and service installed system-wide
βββ brave/ # Brave managed policy installed system-wide
βββ btop/ # Btop configuration and theme
βββ cava/ # Audio visualizer configuration
βββ fastfetch/ # Fastfetch system summary configuration and logo
βββ fontconfig/ # JetBrainsMono Nerd Font preference
βββ grub/ # CyberEXS GRUB theme installed system-wide
βββ gtk3/ # GTK 3 theme settings
βββ gtk4/ # GTK 4 theme settings
βββ hypridle/ # Idle and suspend behavior
βββ hyprland/ # Hyprland Lua config, keybindings, and monitors
βββ kdeglobals/ # Minimal KDE integration for icons and Qt6ct
βββ keyboard/ # Layout-specific application keymaps and the keymap polkit rule
βββ kitty/ # Kitty terminal configuration
βββ kvantum/ # Kvantum Catppuccin Mocha Mauve theme
βββ nvim/ # Neovim Lua configuration
βββ portal/ # Sends the apps' Open and Save dialogs and screen sharing to the shell's pickers
βββ qt5/ # Source palette for generated Qt5ct configuration
βββ qt6/ # Source palette for generated Qt6ct configuration
βββ quickshell/ # Quickshell bar, island panels, control center, notifications, captures, and prompts
βββ scripts/ # System, display, Qt, and lock-screen helpers
βββ sddm/base/ # What every login screen shares: the layout, its settings and the font
βββ sddm/themes/ # Each theme's own video and name, assembled with the base system-wide
βββ sddm/previews/ # Preview images of the SDDM themes
βββ starship/ # Starship prompt configuration
βββ tmux/ # Tmux configuration
βββ wallpapers/ # Cyberpunk wallpapers
βββ yazi/ # Yazi file manager configuration and theme
βββ zsh/ # Shell, aliases, bindings, and functions
Most top-level configuration directories are GNU Stow modules that symlink into $HOME. assets/, battery/, brave/, grub/, keyboard/, and sddm/ are repository or system-wide resources handled separately by the installer and scripts. The qt5/ and qt6/ directories only store the versioned Catppuccin palettes: the installer generates complete local Qtct configurations so graphical changes do not modify the repository.
Note
Only AZERTY FR and QWERTY US are supported. Any other layout would leave the Vim-style keys in the wrong place.
The installer offers two keyboard profiles:
FRβ AZERTY layout with Vim-style movements remapped fromh j k ltoj k l m.USβ QWERTY layout with the standardh j k lVim-style movements.
US is the default when no profile has been selected yet or when the installer prompt is left empty.
The active profile can be changed later from the command line:
~/Scripts/keyboard-layoutctl.sh set us
~/Scripts/keyboard-layoutctl.sh set frThe selection is stored in $XDG_STATE_HOME/hyprpunk/keyboard-layout (or ~/.local/state/hyprpunk/keyboard-layout).
It also becomes the system keymap through localectl, for the SDDM login screen and the TTYs, without asking for a
password: the installer adds a polkit rule (keyboard/polkit/) that lets the session change the keymap, and only that.
Hyprland, Kitty, and tmux pick up the change immediately. New Zsh and Yazi processes use it on startup;
an existing Neovim instance can reload its movement mappings with :KeyboardLayoutReload (restart Neovim to
also rebuild plugin-specific mappings such as Snacks Explorer).
The layout integration covers:
- πͺ
hyprland/.config/hypr/input.lua - β¨οΈ
hyprland/.config/hypr/keybindings.lua - π
scripts/Scripts/keyboard-layoutctl.sh(generated less bindings) - π
nvim/.config/nvim/lua/config/keymaps.lua - π»
tmux/.config/tmux/tmux.conf - π
keyboard/yazi/fr.toml - β¨οΈ
kitty/.config/kitty/kitty.conf - π
zsh/.bindingrcandzsh/.zshrc - π The system keymap (SDDM and TTYs), set with
localectl set-x11-keymap
Hyprland reads the selected XKB layout dynamically instead of hard-coding:
kb_layout = keyboard.xkbThe interface language (LANG and LC_MESSAGES) and regional formats (the other LC_* categories) are independent,
and each is either English (us, en_US.UTF-8) or French (fr, fr_FR.UTF-8), the only two locales installed.
They can be changed after installation from the command line:
~/Scripts/locale-profilectl.sh set-language us
~/Scripts/locale-profilectl.sh set-language fr
~/Scripts/locale-profilectl.sh set-regional us
~/Scripts/locale-profilectl.sh set-regional frThe profiles are stored in $XDG_STATE_HOME/hyprpunk/locale-language and locale-regional. Hyprland, D-Bus, and the
systemd user environment are refreshed immediately for newly started applications; already running applications need
to be restarted. The shell follows the regional formats on the spot: the clocks run on 12 hours with AM/PM with us
and on 24 hours with fr, and the calendar starts the week on the right day.
Monitors are managed by ~/Scripts/displayctl.sh: per-output resolution, refresh rate, scale, relative positioning, persistent output numbering, and workspace assignment, plus an automatic layout and a reset of all saved display settings. The settings are persisted in $XDG_STATE_HOME/hyprpunk/monitor-state.conf (or ~/.local/state/hyprpunk/monitor-state.conf) and applied by Hyprland on reload. Run ~/Scripts/displayctl.sh without arguments to list its commands.
The installer enables or configures:
- π
NetworkManager - π¬
sddm - πΆ
bluetooth - β‘
power-profiles-daemon - π§±
xwayland-satellitefor X11 apps, started with the session, with Hyprland's own XWayland turned off - π
battery-limit.service, on laptops whose battery driver has a charge limit: it lets thewheelgroup change the limit from the control center and applies the chosen one again at boot and around sleep - π
gnome-keyring - π¨ GTK, Qt, and Kvantum themes
- π Papirus Dark icons with Catppuccin Mocha Mauve folders
- πΉοΈ CyberEXS GRUB theme when GRUB is present
Everything you're meant to change lives outside the dotfiles, so git pull brings you every update without
touching your preferences:
- ποΈ The shell's settings (keyboard layout, displays, glass style, languageβ¦) are saved in
~/.local/state/hyprpunk/as you pick them. - π§© Your Hyprland preferences go in
~/.config/hypr/personal/. The installer fills it with commented examples fromhyprland/.config/hypr/personal.example/, one per subject, each loaded after HyprPunk's own file so whatever you set wins:- β¨οΈ
keybindings.luato swap the apps the shortcuts open (hyprpunk.programs.music = "spicetify auto"), or add, rebind and free shortcuts withhyprpunk.bind,hyprpunk.rebindandhyprpunk.unbind. Your terminal and editor (hyprpunk.programs.terminaland.editor) are also what the shell opens your config files and commands in. Only terminals that run a command given with-eare supported (Kitty, Alacritty, foot, Ghosttyβ¦). - πͺ
rules.luato send your apps to a workspace withhyprpunk.app("org.gnome.Geary", 6), float the dialogs of an app that lets them get tiled withhyprpunk.float_dialogs(class, main window's title), plus any window rule. - π±οΈ
input.luafor the mouse, touchpad and gestures. The keyboard layout comes from the shell's settings. - π±
env.luafor environment variables, like a bigger cursor or your own scripts inPATH. The language comes from the shell's settings, and the terminal and editor fromhyprpunk.programs. - π
autostart.luato start more with the session withhyprpunk.autostart.add, or drop a default withhyprpunk.autostart.remove.
- β¨οΈ
- π₯οΈ Your tmux and Kitty settings go in
~/.config/tmux/personal.confand~/.config/kitty/personal.conf, read last so they win, kept out of git and skipped when they don't exist. Plugins you add to tmux's get installed by tpm too. - π Your shell tweaks go in files of your own, each skipped when it doesn't exist:
~/.personalrc, read at the very end of.zshrc, so your aliases, functions, options and variables win over HyprPunk's, fzf's and the prompt's.~/.completionrc, read before Oh My Zsh sets up completion, the place to add your own completions tofpath.
We advise you to leave the rest of the dotfiles as they are. They're linked straight from the repository, so any
edit there clashes with the next git pull, and the modules expect each other as they ship. If something you need
can't be done from these files, open an issue rather than patching HyprPunk itself.
- π The installer stopped halfway. Run the same command again, it picks up where it left off. Every run is
logged to
~/.local/state/hyprpunk/install-<date>.log, the place to look for what failed. - π§ The shell froze or vanished.
Super + Alt + Qrestarts it. To see why it went wrong, runqs -c hyprpunk login a terminal, or add-fto follow it live. - πͺ Hyprland doesn't take your change. It rereads its config on its own when you save. Run
hyprctl reloadto force it, andhyprctl configerrorsto list the mistakes it found. Its full log is in$XDG_RUNTIME_DIR/hypr/$HYPRLAND_INSTANCE_SIGNATURE/hyprland.log. - π€ The screen doesn't lock or dim.
Super + Alt + Irestarts hypridle. - π¬ The login screen stays black or falls back to a plain one.
journalctl -b -u sddmshows what SDDM complained about at the last boot.
- π Add a way to update HyprPunk.
- πΉοΈ The CyberEXS GRUB theme comes from HenriqueLopes42/themeGrub.CyberEXS.
- π¬ The SDDM themes are inspired by Darkkal44/qylock.
- π The lock screen is inspired by the one in andreumassanet/impasto: the date over a big clock with see-through minutes, and the island holding a padlock.
- π§ The AirPods protocol details come from kavishdevar/librepods, and so do the AirPods renders the shell downloads on first use.
- π The emoji list comes from rofi-emoji 4.1.0 by Magnus Bergmark (MIT), generated from the Unicode CLDR data.
- π€ The login screens use Pixelify Sans by Stefie Justprince, under the SIL Open Font License 1.1 (
OFL.txtnext to the font). - π€ The Neovim configuration starts from the LazyVim starter, under the Apache License 2.0 (
nvim/.config/nvim/LICENSE).
Looking for my Windows configuration?
The code and configuration are under the MIT license. Feel free to explore, fork, and adapt.
The MIT license doesn't cover the artwork. The wallpapers, the Fastfetch logo, the login screen videos and the CyberEXS GRUB theme belong to their respective authors and are shared here for personal use only, without any license from them. If you made one of them and want it credited or removed, please open an issue.
The parts listed in the Credits keep their own licenses.



























