This repository contains the live ~/.config/hypr directory for a modular Hyprland setup. Recently migrated to Hyprland's new Lua API, the config is split into small Lua modules, while most key behavior is driven by shell helpers in scripts/. App configs are mirrored under others/ and are automatically symlinked during installation.
It is usable as a starting point, but it is not a drop-in "works everywhere" preset. Several bindings and autostart entries are personal and should be reviewed before first launch.
- Fully Automated Installer: An
install.shscript to set up everything on EndeavourOS. - Lua-Based Configuration: Main Hyprland setup translated into
hl.*Lua functions. - Dwindle layout with small gaps, thin borders, and animations disabled.
- Separate modular
.luafiles for bindings, inputs, autostart, window rules, etc. - Wofi-based launchers for apps, clipboard history, emoji, search, power menu, and cheatsheets.
- Region OCR, screenshots, and GPU-based screen recording helpers.
- Mirrored configs for Waybar, Kitty, and Dunst under
others/that are automatically symlinked. - Wallpaper and terminal art assets bundled in
wallpapers/andff_logo/.
The main entrypoint is init.lua. It currently require()s:
bindsinputswindowsautostartwindowrulesmonitorsworkspaces
It also dynamically sources hyprsunset.conf and ~/.config/hypremoji/hypremoji.conf.
Important notes:
hyprlock.conf,hypridle.conf, andhyprsunset.confremain in the traditional.confformat as those standalone tools do not currently support Lua. They are still live and actively used.monitors.luaandworkspaces.luawere ported to Lua.old-conf/contains the deprecated.conffiles prior to the Lua migration. They are kept for reference but are no longer active.
.
├── init.lua # Main Hyprland entrypoint (replaces hyprland.conf)
├── binds.lua # Keybindings and helper script paths
├── inputs.lua # Keyboard, mouse, touchpad settings
├── windows.lua # Workspace declarations
├── windowrules.lua # Float/size rules for selected apps
├── autostart.lua # Session startup commands
├── monitors.lua # Monitor configurations
├── workspaces.lua # Workspace rules
├── hyprsunset.conf # Night light schedule
├── hyprlock.conf # Lock screen appearance
├── hypridle.conf # Idle timeout -> lock
├── install.sh # Automated installer script for EndeavourOS
├── scripts/ # Launchers, toggles, capture, sync helpers
├── others/ # Mirrored Waybar / Kitty / Dunst configs
├── wallpapers/ # Wallpaper assets
├── ff_logo/ # Optional terminal art assets
└── old-conf/ # Deprecated .conf files prior to Lua migration
- Uses the
dwindlelayout - Sets
gaps_in = 1,gaps_out = 2,border_size = 1 - Disables animations
- Enables
xwayland { force_zero_scaling = true } - Sources external non-Lua configs (Hypremoji and hyprsunset)
The session currently starts:
nm-applet&blueman-appletwaybarelephantswaybgwithwallpapers/jap2.jpgdunsthyprsunsetwl-pastewatchers forcliphisttext and image historyollamaviasystemctl --user start ollama || ollama servehypridlescripts/sync-others.sh watchfoot -e sh -c 'picoclaw agent 2>/dev/null'
If any of those commands do not exist on your machine, remove or replace the line before using the config.
- Keyboard layout is
us follow_mouse = 1- Touchpad natural scroll and tap-to-click are enabled
- An external keyboard workflow option (
kb_options = altwin:swap_alt_win) is available to uncomment. scripts/keyboard-mode-toggle.shtoggles that line and then reloads Hyprland.
- Declares workspaces
1through10
Rules currently float and size:
wofiorg.gnome.Calculatorio.github.kaii_lb.Overskride
- Locks the session with
hyprlockafter 300 seconds
- Uses
wallpapers/jap2.jpg - Applies blur and a centered password field
- Shows time, date, username, and failure status
- Assumes
JetBrainsMono Nerd Fontis installed
- Enabled
- Manual schedule with
sunrise = 06:00andsunset = 18:00 - Night temperature set to
4000
- The current repo snapshot expects monitors named
eDP-1andHDMI-A-1 - The current workspace mapping is machine-specific and should be adjusted for your own setup
This setup assumes a Wayland/Hyprland desktop with a fairly opinionated toolchain. Most of these will be handled by install.sh.
hyprland,hyprlock,hypridle,hyprsunsetkitty,foot,waybar,wofi,dunst,swaybgchromium,firefox,nautilusnm-applet,blueman-appletwl-copy,wl-paste,cliphistwpctl,brightnessctl,playerctl,powerprofilesctl
grim,slurp,hyprshot,gpu-screen-recordertesseract,magickrsync,inotifywait,flock,wtype
hypremojiand a valid~/.config/hypremoji/hypremoji.confspotify,localsend,code,btop,fastfetch,nvtoppulsemixer,wifitui,ollama,picoclaw,elephantjavafor TLauncher
Install at least these fonts if you want the setup to look right:
JetBrainsMono Nerd FontFiraCode Nerd FontSymbols Nerd Font
You no longer need to install dependencies or link folders manually! Just download and run the included install.sh script on your EndeavourOS machine:
git clone https://github.com/juswa005/dotfiles.git ~/hyprland-files-clone
cd ~/hyprland-files-clone
chmod +x install.sh
./install.shThe script will:
- Update your system via
pacman. - Install all core dependencies via
pacmanand AUR tools viayay(installingyayif missing). - Safely backup your existing
~/.config/hyprand any app configs located inothers/(e.g.,dunst,kitty,waybar). - Symlink the repository to
~/.config/hypr. - Symlink the
others/directories directly into your~/.config/folder.
Before launching the config, check these files and change anything that is personal to the original machine:
autostart.lua- remove or replace
elephantandpicoclaw - change the wallpaper path if you do not want
wallpapers/jap2.jpg - remove
ollamastartup if unused
- remove or replace
init.lua- comment out
hl.source("~/.config/hypremoji/hypremoji.conf")if you do not use Hypremoji
- comment out
binds.lua- review all personal URLs opened by the webapp shortcuts
- replace
chromiumprofile names if yours differ - replace the LAN IP shortcuts if they are meaningless on your network
- remove bindings you do not use
monitors.luaandworkspaces.lua- modify them for your specific monitor layout
hyprctl reloadThis repo has a lot of bindings. The full source of truth is binds.lua. These are the main ones.
SUPER + Return-> KittySUPER + Shift + Return-> Kitty runningfastfetchSUPER + Space-> app launcherSUPER + E-> NautilusSUPER + Shift + E-> HypremojiSUPER + B-> Chromium default profileSUPER + Shift + B-> Chromium "Profile 2"SUPER + Shift + M-> TLauncher menuSUPER + L-> LocalSendSUPER + Shift + A-> SpotifySUPER + ~-> VS Code
Several SUPER + <key> bindings launch hardcoded web apps or URLs in Chromium or Firefox, including:
- ChatGPT
- Gmail
- YouTube
- Facebook / Messenger
- Google Calendar
- Discord
- GitHub profiles
- a local router page
- a LAN dashboard
Review and replace these in binds.lua before using the config on another machine.
SUPER + Escape-> power menuSUPER + Shift + Escape-> power profile selectorSUPER + Shift + L-> lock screenSUPER + Ctrl + L-> disablehypridleSUPER + Alt + L-> enablehypridleSUPER + Z-> toggle WaybarSUPER + Ctrl + V-> clipboard history pickerSUPER + Ctrl + K-> toggle the keyboard mode line ininputs.luaSUPER + K-> keybind viewerSUPER + H-> tmux cheatsheetSUPER + Shift + H-> Neovim cheatsheetSUPER + Shift + N-> show current Spotify trackSUPER + Ctrl + N-> open a floating quick note in~/Notes
SUPER + Shift + S-> region screenshot viahyprshotPrint-> full output screenshotShift + Print-> active window screenshotSUPER + Alt + S-> start region recording with desktop audioSUPER + Ctrl + S-> start region recording without audioSUPER + Shift + C-> stop recordingSUPER + Shift + T-> OCR a selected region and copy the detected text
SUPER + 1..0-> switch workspace1..10SUPER + Shift + 1..0-> move active window to workspace1..10SUPER + T-> toggle floatingSUPER + Ctrl + Arrow-> move focusSUPER + Ctrl + Shift + Arrow-> swap tiled windowsSUPER + Shift + Arrow-> move floating windowsSUPER + Alt + Arrow-> resize floating windowsALT + Tab-> cycle focus
XF86MonBrightnessUp/XF86MonBrightnessDownXF86AudioRaiseVolume/XF86AudioLowerVolume/XF86AudioMuteXF86AudioMicMuteXF86AudioPlay/XF86AudioNext/XF86AudioPrev
All custom helpers live in scripts/.
| Script | Purpose | Notes |
|---|---|---|
applauncher.sh |
Opens Wofi app launcher | Uses lockfile for debouncing |
anime-movies.sh |
Menu for opening anime/movie sites | Hardcoded URLs |
clipboard.sh |
Clipboard history picker | Requires cliphist, wofi, wl-copy |
emoji-picker.sh |
Emoji picker and optional typed insertion | Uses wtype if available |
hypr-binds.sh |
Shows bindings from binds.lua in Wofi |
Good quick reference |
hypridle-toggle.sh |
Starts or stops hypridle |
Sends desktop notifications |
keyboard-mode-toggle.sh |
Comments/uncomments kb_options = altwin:swap_alt_win |
Runs hyprctl reload |
launch-webapp.sh |
Opens a URL in Chromium app mode | Used by multiple keybinds |
notify-spotify.sh |
Shows current Spotify track | Silent when Spotify is not playing |
nvim-cheatsheet.sh |
Neovim cheatsheet picker | Read-only helper |
ocr-area.sh |
OCR for a selected screen region | Requires grim, slurp, tesseract, wl-copy |
powermenu.sh |
Shutdown / reboot menu | Uses systemctl |
powermode.sh |
Power profile menu | Requires powerprofilesctl |
preview-clipboard.sh |
Decodes clipboard entries for preview | Uses magick for image thumbnails |
quick-note.sh |
Opens a dated note in a floating Kitty + Neovim window | Writes to $HOME/Notes |
screenrecord.sh |
Region recorder with optional desktop audio | Uses gpu-screen-recorder |
search.sh |
Google search prompt in app mode Chromium | Hardcoded to Google |
shot-area |
Region screenshot helper | Separate from the hyprshot bindings |
sync-others.sh |
Mirrors ~/.config/{waybar,kitty,dunst} into others/ |
Starts in watch mode at login |
tlauncher-launcher.sh |
TLauncher mode picker | Assumes ~/Games/tl.jar |
tmux-cheatsheet.sh |
tmux cheatsheet picker | Read-only helper |
waybar-toggle.sh |
Starts or kills Waybar | Launches bare waybar |
These configurations are automatically symlinked to your ~/.config/ folder when you run install.sh.
config.jsoncis the main mirrored Waybar configstyle.cssis the main mirrored stylesheet2.jsoncis an alternate Waybar layoutbackups/contains older Waybar config/style snapshotsscripts/sysusage.shis a simple CPU/RAM script used by the alternate layout
The main mirrored Waybar setup expects click handlers for tools such as fastfetch, nvtop, btop, pulsemixer, wifitui, and sigye.
kitty.confis a black-and-white leaning main config with transparencycolors.confcontains a Tokyo Night paletteKanagawa.confis a full alternate themekitty.conf.bakis an older minimalist Kitty configcurrent-theme.confandDefault.confare stock/default theme references
dunstrcdefines a monochrome notification look using JetBrainsMono
wallpapers/jap2.jpgis used by bothautostart.luaandhyprlock.confwallpapers/contains additional wallpapers you can swap in manuallyff_logo/contains PNG art plusfrieren.txt, which looks like ANSI/terminal art for tools such as Fastfetch
- The config is personalized. Some bindings open personal sites, LAN addresses, or apps that may not exist on your machine.
sync-others.sh watchcontinuously mirrors your real~/.config/waybar,~/.config/kitty, and~/.config/dunstinto this repo. If you do not want that behavior, remove the autostart line inautostart.lua.waybaris launched without a-cor-spath, so Waybar will use whatever config is installed in your real~/.config/waybar.hyprland.confwas migrated toinit.lua, buthyprsunset.confis still sourced explicitly as it's a standalone config file.quick-note.shcreates files in$HOME/Notes.
If you want to reuse this setup cleanly:
- Run the
install.shscript to set up everything automatically. - Get the core session stable first:
init.lua,binds.lua,inputs.lua,autostart.lua. - Remove personal app bindings and hardcoded URLs next.
- Regenerate monitors/workspaces with
nwg-displaysif needed, and adapt them intomonitors.luaandworkspaces.lua. - Only keep startup services you actually use.
There is no build, lint, or test runner in this repo. Verification is manual:
- run
hyprctl reloadafter editing config files - use
bash -n scripts/<name>.shwhen changing shell helpers - exercise the relevant keybinding in a live Hyprland session