# Hyprland Configuration # Translated from DWM config.def.h and sxhkdrc # Craig Jennings # ============================================================================ # Monitor Configuration # ============================================================================ monitor=,preferred,auto,auto # ============================================================================ # Startup Applications # ============================================================================ exec-once = waybar exec-once = swww-daemon && sleep 1 && swww img ~/pictures/wallpaper/dark-lion.jpg exec-once = dunst exec-once = hypridle exec-once = gammastep exec-once = nm-applet exec-once = blueman-applet exec-once = /usr/bin/gnome-keyring-daemon --start --components=pkcs11,secrets,ssh exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP exec-once = mpd exec-once = signal-desktop --start-in-tray --ozone-platform=wayland exec-once = protonmail-bridge --no-window exec-once = insync start # ============================================================================ # Environment Variables # ============================================================================ env = XCURSOR_SIZE,24 env = XDG_CURRENT_DESKTOP,Hyprland env = XDG_SESSION_TYPE,wayland env = XDG_SESSION_DESKTOP,Hyprland env = _JAVA_AWT_WM_NONREPARENTING,1 # ============================================================================ # Appearance (matching DWM colors) # ============================================================================ # DWM colors: gray1=#222222, gray2=#444444, gray3=#bbbbbb, gray4=#eeeeee, cyan=#daa520 general { gaps_in = 5 gaps_out = 10 border_size = 3 col.active_border = rgba(daa520ff) col.inactive_border = rgba(444444ff) layout = master resize_on_border = true } decoration { rounding = 0 blur { enabled = false } shadow { enabled = false } } animations { enabled = true bezier = myBezier, 0.05, 0.9, 0.1, 1.05 animation = windows, 1, 3, myBezier animation = windowsOut, 1, 3, default, popin 80% animation = fade, 1, 3, default animation = workspaces, 1, 3, default } # ============================================================================ # Layout (master-stack like DWM tile) # ============================================================================ master { new_status = slave mfact = 0.55 } dwindle { pseudotile = true preserve_split = true } # ============================================================================ # Input # ============================================================================ input { kb_layout = us kb_options = ctrl:nocaps follow_mouse = 1 touchpad { natural_scroll = true } } # ============================================================================ # Misc # ============================================================================ misc { force_default_wallpaper = 0 disable_hyprland_logo = true } # ============================================================================ # XWayland # ============================================================================ xwayland { force_zero_scaling = true } # ============================================================================ # Window Rules # ============================================================================ # Floating windows (from DWM rules) windowrulev2 = float, class:^(Gimp)$ windowrulev2 = float, class:^(caffeine)$ windowrulev2 = float, class:^(blueman-services)$ windowrulev2 = float, class:^(Blueman-manager)$ windowrulev2 = float, class:^(qalculate-gtk)$ windowrulev2 = float, title:^(Event Tester)$ # ============================================================================ # Key Bindings # ============================================================================ $mod = SUPER # Terminal and core apps (from DWM) bind = $mod, T, exec, st bind = $mod, E, exec, emacsclient -c -a "" || emacs bind = $mod, W, exec, $BROWSER bind = $mod, P, exec, wofi --show drun # From sxhkdrc bind = $mod, SPACE, exec, wofi --show drun bind = $mod SHIFT, S, exec, wofi --show ssh bind = $mod SHIFT, W, exec, $ALTBROWSER bind = CTRL ALT, W, exec, tor-browser bind = CTRL ALT, F, exec, thunar bind = $mod, V, exec, virtualbox bind = $mod SHIFT, L, exec, calibre bind = $mod SHIFT, R, exec, shortwave # Window management (from DWM) bind = $mod, J, layoutmsg, cyclenext bind = $mod, K, layoutmsg, cycleprev bind = $mod SHIFT, J, layoutmsg, swapnext bind = $mod SHIFT, K, layoutmsg, swapprev bind = $mod, H, resizeactive, -50 0 bind = $mod, L, resizeactive, 50 0 bind = $mod, RETURN, layoutmsg, swapwithmaster bind = $mod, G, centerwindow bind = $mod, TAB, workspace, previous bind = $mod SHIFT, C, killactive # Layouts (from DWM) bind = $mod SHIFT, M, exec, hyprctl keyword general:layout master bind = $mod SHIFT, T, exec, hyprctl keyword general:layout master bind = $mod SHIFT, F, togglefloating bind = $mod SHIFT, SPACE, togglefloating # Master layout adjustments bind = $mod, I, layoutmsg, addmaster bind = $mod, D, layoutmsg, removemaster # Gaps (from DWM) bind = $mod, MINUS, exec, hyprctl keyword general:gaps_out $(( $(hyprctl getoption general:gaps_out -j | jq '.int') - 5 )) bind = $mod, EQUAL, exec, hyprctl keyword general:gaps_out $(( $(hyprctl getoption general:gaps_out -j | jq '.int') + 5 )) bind = $mod SHIFT, EQUAL, exec, hyprctl keyword general:gaps_out 10 # Toggle bar bind = $mod, B, exec, killall -SIGUSR1 waybar # Fullscreen bind = $mod, F11, fullscreen, 0 # Workspaces 1-9 (from DWM TAGKEYS) bind = $mod, 1, workspace, 1 bind = $mod, 2, workspace, 2 bind = $mod, 3, workspace, 3 bind = $mod, 4, workspace, 4 bind = $mod, 5, workspace, 5 bind = $mod, 6, workspace, 6 bind = $mod, 7, workspace, 7 bind = $mod, 8, workspace, 8 bind = $mod, 9, workspace, 9 bind = $mod, 0, workspace, 10 # Move window to workspace (from DWM tag) bind = $mod SHIFT, 1, movetoworkspace, 1 bind = $mod SHIFT, 2, movetoworkspace, 2 bind = $mod SHIFT, 3, movetoworkspace, 3 bind = $mod SHIFT, 4, movetoworkspace, 4 bind = $mod SHIFT, 5, movetoworkspace, 5 bind = $mod SHIFT, 6, movetoworkspace, 6 bind = $mod SHIFT, 7, movetoworkspace, 7 bind = $mod SHIFT, 8, movetoworkspace, 8 bind = $mod SHIFT, 9, movetoworkspace, 9 bind = $mod SHIFT, 0, movetoworkspace, 10 # Monitor focus (from DWM focusmon) bind = $mod, COMMA, focusmonitor, -1 bind = $mod, PERIOD, focusmonitor, +1 bind = $mod SHIFT, COMMA, movewindow, mon:-1 bind = $mod SHIFT, PERIOD, movewindow, mon:+1 # Scratchpads (from DWM togglescratch) # Audio mixer (was MODKEY+a -> spaudio/pulsemixer) bind = $mod, A, togglespecialworkspace, audio bind = $mod, A, exec, [workspace special:audio] pgrep -x pulsemixer || st -n spaudio -e pulsemixer windowrulev2 = float, class:^(st)$, title:^(spaudio)$ windowrulev2 = size 60% 60%, class:^(st)$, title:^(spaudio)$ windowrulev2 = center, class:^(st)$, title:^(spaudio)$ windowrulev2 = workspace special:audio, class:^(st)$, title:^(spaudio)$ # System monitor (was MODKEY+m -> spmon/gotop) bind = $mod, M, togglespecialworkspace, monitor bind = $mod, M, exec, [workspace special:monitor] pgrep -x gotop || st -n spmon -e gotop windowrulev2 = float, class:^(st)$, title:^(spmon)$ windowrulev2 = size 60% 60%, class:^(st)$, title:^(spmon)$ windowrulev2 = workspace special:monitor, class:^(st)$, title:^(spmon)$ # Music player (was MODKEY+slash -> spmp/ncmpcpp) bind = $mod, SLASH, togglespecialworkspace, music bind = $mod, SLASH, exec, [workspace special:music] pgrep -x ncmpcpp || st -n spmp -e ncmpcpp windowrulev2 = float, class:^(st)$, title:^(spmp)$ windowrulev2 = size 60% 60%, class:^(st)$, title:^(spmp)$ windowrulev2 = workspace special:music, class:^(st)$, title:^(spmp)$ # Terminal scratchpad (was MODKEY+Shift+Return -> spterm/tmux) bind = $mod SHIFT, RETURN, togglespecialworkspace, term bind = $mod SHIFT, RETURN, exec, [workspace special:term] pgrep -f "st.*spterm" || st -n spterm -e tmux windowrulev2 = float, class:^(st)$, title:^(spterm)$ windowrulev2 = size 60% 60%, class:^(st)$, title:^(spterm)$ windowrulev2 = workspace special:term, class:^(st)$, title:^(spterm)$ # File manager (was MODKEY+f -> spfm/ranger) bind = $mod, F, togglespecialworkspace, files bind = $mod, F, exec, [workspace special:files] pgrep -x ranger || st -n spfm -e ranger windowrulev2 = float, class:^(st)$, title:^(spfm)$ windowrulev2 = size 60% 60%, class:^(st)$, title:^(spfm)$ windowrulev2 = workspace special:files, class:^(st)$, title:^(spfm)$ # Calculator (was MODKEY+x or MODKEY+c -> qalculate) bind = $mod, X, exec, qalculate-gtk bind = $mod, C, exec, qalculate-gtk # Htop (was MODKEY+Shift+h -> sptop/htop) bind = $mod SHIFT, H, togglespecialworkspace, htop bind = $mod SHIFT, H, exec, [workspace special:htop] pgrep -x htop || st -n sptop -e htop windowrulev2 = float, class:^(st)$, title:^(sptop)$ windowrulev2 = size 60% 60%, class:^(st)$, title:^(sptop)$ windowrulev2 = workspace special:htop, class:^(st)$, title:^(sptop)$ # Media/hardware keys bindel = , XF86AudioRaiseVolume, exec, pactl set-sink-volume @DEFAULT_SINK@ +5% bindel = , XF86AudioLowerVolume, exec, pactl set-sink-volume @DEFAULT_SINK@ -5% bindl = , XF86AudioMute, exec, pactl set-sink-mute @DEFAULT_SINK@ toggle bindel = , XF86MonBrightnessUp, exec, brightnessctl s +10% bindel = , XF86MonBrightnessDown, exec, brightnessctl s 10%- # Microphone toggle (from sxhkdrc) bind = CTRL ALT, SPACE, exec, amixer set Capture toggle && amixer get Capture | grep '\[off\]' && notify-send "Microphone" "Muted" || notify-send "Microphone" "On" # Bluetooth (from DWM and sxhkdrc) bind = $mod SHIFT, B, exec, blueman-manager # Screenshots (Wayland: grim + slurp instead of maim) bind = $mod, S, exec, grim -g "$(slurp)" ~/pictures/screenshots/$(date +%Y.%m.%d-%H%M%S).png && notify-send "Screenshot" "Saved to ~/pictures/screenshots/" bind = , Print, exec, grim ~/pictures/screenshots/$(date +%Y.%m.%d-%H%M%S).png && notify-send "Screenshot" "Full screen saved" # Color picker (Wayland: hyprpicker instead of xcolor) # bind = $mod, C, exec, hyprpicker -a # conflicts with calculator, uncomment if needed # Lock screen (from sxhkdrc: super+Escape) bind = $mod, ESCAPE, exec, hyprlock # Touchpad toggle bind = $mod, F9, exec, toggle-touchpad # Exit/session (from DWM) bind = $mod SHIFT, Q, exec, wofi --show dmenu --prompt "Exit?" -D dmenu/exit="0" < /dev/null && hyprctl dispatch exit bind = $mod SHIFT, BACKSPACE, exit bind = $mod SHIFT, ESCAPE, exec, hyprctl reload # Mouse bindings (from DWM buttons) bindm = $mod, mouse:272, movewindow bindm = $mod, mouse:273, resizewindow bindm = $mod SHIFT, mouse:272, resizewindow