384 lines
10 KiB
Plaintext
384 lines
10 KiB
Plaintext
# Hyprland config - converted from i3 config by Adam French
|
|
# https://wiki.hyprland.org/Configuring/
|
|
|
|
|
|
################
|
|
### MONITORS ###
|
|
################
|
|
|
|
monitor=,preferred,auto,1
|
|
|
|
|
|
###################
|
|
### MY PROGRAMS ###
|
|
###################
|
|
|
|
$terminal = kitty
|
|
$fileManager = kitty -e ranger
|
|
$menu = hyprlauncher
|
|
|
|
###################
|
|
### CURSOR ###
|
|
###################
|
|
|
|
env = XCURSOR_THEME,Miku Cursor
|
|
env = XCURSOR_SIZE,48
|
|
env = HYPRCURSOR_SIZE,48
|
|
|
|
# fcitx5 input method for Pinyin
|
|
env = GTK_IM_MODULE,fcitx
|
|
env = QT_IM_MODULE,fcitx
|
|
env = XMODIFIERS,@im=fcitx
|
|
|
|
#################
|
|
### AUTOSTART ###
|
|
#################
|
|
|
|
exec-once = dex -a
|
|
exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
|
|
exec-once = wl-paste --watch cliphist store
|
|
exec-once = dunst
|
|
exec-once = hypridle
|
|
exec-once = hyprpaper
|
|
exec-once = hyprsunset
|
|
exec-once = hyprlauncher
|
|
exec-once = fcitx5 -d
|
|
exec-once = waterfox
|
|
exec-once = waybar
|
|
# NOTE: ff-theme-util and fix_xcursor are X11-specific; drop or find Wayland equivalents
|
|
# Caps<->Escape swap is handled below via input config
|
|
|
|
|
|
#############################
|
|
### ENVIRONMENT VARIABLES ###
|
|
#############################
|
|
|
|
|
|
#####################
|
|
### LOOK AND FEEL ###
|
|
#####################
|
|
|
|
general {
|
|
gaps_in = 5 # inner gaps (i3: gaps inner 10 → split between two sides)
|
|
gaps_out = 0 # outer gaps (i3: gaps outer 0)
|
|
border_size = 1
|
|
|
|
col.active_border = $color_primary
|
|
col.inactive_border = $color_gray
|
|
|
|
resize_on_border = true
|
|
allow_tearing = false
|
|
layout = master # closest to i3's stacking default; use dwindle for split
|
|
}
|
|
|
|
xwayland {
|
|
force_zero_scaling = true
|
|
}
|
|
|
|
decoration {
|
|
rounding = 0
|
|
|
|
active_opacity = 1.0
|
|
inactive_opacity = 1.0
|
|
|
|
shadow {
|
|
enabled = false
|
|
}
|
|
|
|
blur {
|
|
enabled = true
|
|
size = 3
|
|
passes = 1
|
|
}
|
|
}
|
|
|
|
animations {
|
|
enabled = true
|
|
|
|
bezier = myBezier, 0.645, 0.045, 0.355, 1.000
|
|
|
|
animation = windows, 1, 7, myBezier
|
|
animation = windowsOut, 1, 7, myBezier
|
|
animation = border, 1, 10, myBezier
|
|
animation = borderangle, 1, 8, myBezier
|
|
animation = fade, 1, 7, myBezier
|
|
animation = workspaces, 1, 6, myBezier
|
|
}
|
|
|
|
master {
|
|
new_status = slave
|
|
}
|
|
|
|
misc {
|
|
force_default_wallpaper = 0
|
|
disable_hyprland_logo = true
|
|
focus_on_activate = true # replaces i3's "for_window [urgent=latest] focus"
|
|
}
|
|
|
|
|
|
#############
|
|
### INPUT ###
|
|
#############
|
|
|
|
input {
|
|
kb_layout = gb,us
|
|
kb_options = caps:swapescape,grp:alt_shift_toggle
|
|
follow_mouse = 1
|
|
sensitivity = 0
|
|
}
|
|
|
|
###################
|
|
### KEYBINDINGS ###
|
|
###################
|
|
|
|
$mod = SUPER
|
|
|
|
# Terminal
|
|
bind = $mod, Return, exec, $terminal
|
|
|
|
# Kill focused window
|
|
bind = $mod SHIFT, Q, killactive
|
|
|
|
# Launcher (wofi replaces dmenu)
|
|
bind = $mod, D, exec, hyprlauncher
|
|
|
|
# Pavucontrol
|
|
bind = $mod CTRL, M, exec, hyprpwcenter
|
|
|
|
# Applications
|
|
bind = $mod, F2, exec, waterfox
|
|
bind = $mod, F3, exec, $fileManager
|
|
bind = $mod SHIFT, F3, exec, pcmanfm
|
|
bind = $mod, F5, exec, kitty -e mocp
|
|
|
|
# Toggle window layout between master and dwindle
|
|
bind = $mod, T, exec, hyprctl keyword general:layout "$([ "$(hyprctl getoption general:layout -j | grep -o '"str": "[^"]*"' | cut -d'"' -f4)" = "master" ] && echo dwindle || echo master)"
|
|
|
|
# Restart dunst
|
|
bind = $mod SHIFT, D, exec, killall dunst && notify-send 'restart dunst'
|
|
|
|
# Screenshots (flameshot on Wayland needs -g flag or use grim/slurp instead)
|
|
bind = , Print, exec, flameshot gui
|
|
bind = $mod, Print, exec, grim -g "$(slurp)" - | wl-copy
|
|
bind = $mod SHIFT, Print, exec, grim -g "$(slurp)" ~/screenshot.png
|
|
|
|
# Xkill equivalent
|
|
bind = $mod CTRL, X, exec, hyprctl kill
|
|
|
|
# Lock screen
|
|
bind = $mod, 9, exec, hyprlock # replaces blurlock; configure hyprlock separately
|
|
|
|
# Toggle bar visibility (waybar)
|
|
bind = $mod, M, exec, pkill -SIGUSR1 waybar
|
|
|
|
# Reload Hyprland config
|
|
bind = $mod SHIFT, C, exec, hyprctl reload
|
|
|
|
# Exit Hyprland
|
|
bind = $mod SHIFT, E, exec, hyprshutdown
|
|
|
|
# System mode (replaces i3's $mode_system)
|
|
# Simple submap equivalent:
|
|
bind = $mod, 0, submap, system
|
|
submap = system
|
|
bind = , L, exec, hyprlock
|
|
bind = , L, submap, reset
|
|
bind = , S, exec, systemctl suspend
|
|
bind = , S, submap, reset
|
|
bind = , H, exec, systemctl hibernate
|
|
bind = , H, submap, reset
|
|
bind = , R, exec, systemctl reboot
|
|
bind = , R, submap, reset
|
|
bind = SHIFT, S, exec, systemctl poweroff
|
|
bind = SHIFT, S, submap, reset
|
|
bind = , E, exec, hyprshutdown
|
|
bind = , E, submap, reset
|
|
bind = , Return, submap, reset
|
|
bind = , Escape, submap, reset
|
|
submap = reset
|
|
|
|
# --- FOCUS ---
|
|
bind = $mod, H, movefocus, l
|
|
bind = $mod, J, movefocus, d
|
|
bind = $mod, K, movefocus, u
|
|
bind = $mod, L, movefocus, r
|
|
bind = $mod, left, movefocus, l
|
|
bind = $mod, down, movefocus, d
|
|
bind = $mod, up, movefocus, u
|
|
bind = $mod, right, movefocus, r
|
|
|
|
# --- MOVE WINDOWS ---
|
|
bind = $mod SHIFT, H, movewindow, l
|
|
bind = $mod SHIFT, J, movewindow, d
|
|
bind = $mod SHIFT, K, movewindow, u
|
|
bind = $mod SHIFT, L, movewindow, r
|
|
bind = $mod SHIFT, left, movewindow, l
|
|
bind = $mod SHIFT, down, movewindow, d
|
|
bind = $mod SHIFT, up, movewindow, u
|
|
bind = $mod SHIFT, right, movewindow, r
|
|
|
|
# --- FLOATING ---
|
|
bind = $mod SHIFT, space, togglefloating
|
|
bind = $mod, space, focusurgentorlast # approximate focus mode_toggle
|
|
|
|
# --- FULLSCREEN ---
|
|
bind = $mod, F, fullscreen, 0
|
|
|
|
# --- SPLIT / LAYOUT ---
|
|
# Hyprland uses dwindle preselect or master swaps; approximate below:
|
|
bind = $mod, G, layoutmsg, orientationleft # tile horizontally
|
|
bind = $mod, V, layoutmsg, orientationbottom # tile vertically
|
|
bind = $mod, E, layoutmsg, togglesplit
|
|
|
|
bind = $mod, w, exec, hyprctl dispatch togglegroup
|
|
|
|
# --- STICKY (pin floating window) ---
|
|
bind = $mod SHIFT, S, pin
|
|
|
|
# --- SCRATCHPAD ---
|
|
bind = $mod SHIFT, minus, movetoworkspacesilent, special:scratchpad
|
|
bind = $mod, minus, togglespecialworkspace, scratchpad
|
|
|
|
# --- WORKSPACE NAVIGATION ---
|
|
bind = $mod CTRL, right, workspace, +1
|
|
bind = $mod CTRL, left, workspace, -1
|
|
bind = $mod, B, workspace, previous # back_and_forth
|
|
|
|
# Switch to workspace
|
|
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
|
|
|
|
# Move container to workspace (silent = don't follow)
|
|
bind = $mod CTRL, 1, movetoworkspacesilent, 1
|
|
bind = $mod CTRL, 2, movetoworkspacesilent, 2
|
|
bind = $mod CTRL, 3, movetoworkspacesilent, 3
|
|
bind = $mod CTRL, 4, movetoworkspacesilent, 4
|
|
bind = $mod CTRL, 5, movetoworkspacesilent, 5
|
|
bind = $mod CTRL, 6, movetoworkspacesilent, 6
|
|
bind = $mod CTRL, 7, movetoworkspacesilent, 7
|
|
bind = $mod CTRL, 8, movetoworkspacesilent, 8
|
|
|
|
# Move to workspace AND follow (replaces $mod+Shift+N in i3)
|
|
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
|
|
|
|
# --- RESIZE SUBMAP ---
|
|
bind = $mod, R, submap, resize
|
|
submap = resize
|
|
binde = , H, resizeactive, -20 0
|
|
binde = , J, resizeactive, 0 20
|
|
binde = , K, resizeactive, 0 -20
|
|
binde = , L, resizeactive, 20 0
|
|
binde = , left, resizeactive, -30 0
|
|
binde = , down, resizeactive, 0 30
|
|
binde = , up, resizeactive, 0 -30
|
|
binde = , right, resizeactive, 30 0
|
|
bind = , Return, submap, reset
|
|
bind = , Escape, submap, reset
|
|
submap = reset
|
|
|
|
# --- MOUSE BINDS ---
|
|
bindm = $mod, mouse:272, movewindow # mod+LMB drag to move floating
|
|
bindm = $mod, mouse:273, resizewindow # mod+RMB drag to resize
|
|
|
|
# --- AUDIO ---
|
|
bindel = , XF86AudioRaiseVolume, exec, pactl set-sink-volume @DEFAULT_SINK@ +10%
|
|
bindel = , XF86AudioLowerVolume, exec, pactl set-sink-volume @DEFAULT_SINK@ -10%
|
|
bindl = , XF86AudioMute, exec, pactl set-sink-mute @DEFAULT_SINK@ toggle
|
|
bindl = , XF86AudioMicMute, exec, pactl set-source-mute @DEFAULT_SOURCE@ toggle
|
|
|
|
# --- BRIGHTNESS ---
|
|
bindel = , XF86MonBrightnessUp, exec, brightnessctl set +5%
|
|
bindel = , XF86MonBrightnessDown, exec, brightnessctl set 5%-
|
|
|
|
|
|
####################
|
|
### WINDOW RULES ###
|
|
####################
|
|
|
|
windowrule {
|
|
name = Surfshark
|
|
match:class = ^(Surfshark)$
|
|
workspace = 8 silent
|
|
tile = on
|
|
}
|
|
|
|
windowrule {
|
|
name = hyprpwcenter
|
|
match:class = ^(hyprpwcenter)$
|
|
float = on
|
|
}
|
|
|
|
windowrule {
|
|
name = Lxappearance
|
|
match:class = ^(Lxappearance)$
|
|
float = on
|
|
}
|
|
|
|
windowrule {
|
|
name = PiP
|
|
match:title = ^(Picture-in-Picture)$
|
|
float = off
|
|
}
|
|
|
|
|
|
##############################
|
|
### WORKSPACE NAMES / ICONS ##
|
|
##############################
|
|
|
|
# Hyprland workspace names (replaces i3 set $ws variables)
|
|
# These are used by waybar's workspaces module — configure names there.
|
|
# ws1=ツ ws2=ಠ‿ಠ ws3=◕‿◕ ws4=ʘ‿ʘ
|
|
# ws5=˘◡˘ ws6=◠‿◠ ws7=ᵔᴥᵔ ws8=æ
|
|
|
|
|
|
##############################
|
|
### COLORS (reference only) ##
|
|
##############################
|
|
|
|
# Your theme palette for use in waybar / wofi CSS:
|
|
# Background: #1b110e
|
|
# BG Secondary: #000000
|
|
# Primary: #55ffbb (green)
|
|
# Secondary: #62ff57 (lime)
|
|
# Tertiary: #ff579a (pink)
|
|
# Quaternary: #024942 (dark teal)
|
|
# Link: #222222
|
|
|
|
|
|
#####################################
|
|
### NOTES ON MIGRATING FROM i3 ##
|
|
#####################################
|
|
# 1. BAR: Replace i3bar+i3status with waybar. Copy the color palette above
|
|
# into your waybar style.css. Workspace icon names go in waybar config.
|
|
#
|
|
# 2. LOCK: Replace blurlock with hyprlock. Configure in ~/.config/hypr/hyprlock.conf
|
|
# Replace xautolock with hypridle in ~/.config/hypr/hypridle.conf (30 min timeout).
|
|
#
|
|
# 3. LAUNCHER: wofi replaces dmenu. Style with ~/.config/wofi/style.css using
|
|
# your palette colors above.
|
|
#
|
|
# 4. SCREENSHOTS: grim + slurp replace i3-scrot on Wayland. flameshot also
|
|
# works with the -g flag on some setups.
|
|
#
|
|
# 5. STACKING layout: Set layout = master above (or dwindle). Hyprland has no
|
|
# direct stacking mode; use floating or master layout as closest equivalent.
|
|
#
|
|
# 6. GAP MODE: Replace the i3-gaps mode with direct hyprctl commands if needed:
|
|
# hyprctl keyword general:gaps_in 10
|
|
#
|
|
# 7. BORDER TOGGLE ($mod+u/y/n): Use windowrulev2 or hyprctl at runtime:
|
|
# hyprctl keyword general:border_size 0
|