Modifying Keybindings
Keybindings are configured in ~/dotfiles/config/hypr/keybindings.conf.
Understanding the Current Keybindings
The main modifier key is set to SUPER (Windows key):
Application Launchers
Current application keybindings:
bind = $mainMod, T, exec, $terminal # Ghostty terminal
bind = $mainMod, C, exec, vscodium # VSCodium editor
bind = $mainMod, B, exec, $browser # Brave browser
bind = $mainMod, E, exec, $fileManager # Nautilus file manager
bind = $mainMod, O, exec, $notes # Obsidian notes
bind = $mainMod, space, exec, $menu # Wofi launcher
Changing Application Keybindings
Open keybindings config
nvim ~/dotfiles/config/hypr/keybindings.conf
Modify the binding
For example, to change terminal from Super+T to Super+Enter: # Old:
bind = $mainMod, T, exec, $terminal
# New:
bind = $mainMod, return, exec, $terminal
Reload Hyprland
Or press Super+Shift+R if you have a reload binding.
Common Key Names
return - Enter key
space - Spacebar
left/right/up/down - Arrow keys
minus/plus - +/- keys
PRINT - Print Screen
F1-F12 - Function keys
Media Keys:
XF86AudioRaiseVolume
XF86AudioLowerVolume
XF86AudioMute
XF86MonBrightnessUp
XF86MonBrightnessDown
Adding New Application Shortcuts
To add a keybinding for a new application:
# At the top, define the application
$spotify = spotify --enable-features=UseOzonePlatform --ozone-platform=wayland
# Add the keybinding
bind = $mainMod, S, exec, $spotify
Window Management Keybindings
Current window management shortcuts:
bind = $mainMod, W, killactive, # Close window
bind = $mainMod, V, togglefloating, # Toggle floating
bind = $mainMod, J, togglesplit, # Toggle split
bind = , F11, fullscreen, 0 # Fullscreen
bind = $mainMod, L, exec, hyprlock # Lock screen
# Move focus
bind = $mainMod, left, movefocus, l
bind = $mainMod, right, movefocus, r
bind = $mainMod, up, movefocus, u
bind = $mainMod, down, movefocus, d
# Resize windows
bind = $mainMod, minus, resizeactive, -100 0
bind = $mainMod, plus, resizeactive, 100 0
bind = $mainMod SHIFT, minus, resizeactive, 0 -100
bind = $mainMod SHIFT, plus, resizeactive, 0 100
Workspace Keybindings
# Switch to workspace 1-10
bind = $mainMod, 1, workspace, 1
bind = $mainMod, 2, workspace, 2
# ... and so on
# Move window to workspace
bind = $mainMod SHIFT, 1, movetoworkspace, 1
bind = $mainMod SHIFT, 2, movetoworkspace, 2
# ... and so on
# Special workspace (scratchpad)
bind = $mainMod, S, togglespecialworkspace, magic
bind = $mainMod SHIFT, S, movetoworkspace, special:magic
System Keybindings
# Volume control
bindel = ,XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+
bindel = ,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
bindel = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
# Brightness control
bindel = ,XF86MonBrightnessUp, exec, brightnessctl s 10%+
bindel = ,XF86MonBrightnessDown, exec, brightnessctl s 10%-
# Screenshots
bind = , PRINT, exec, hyprshot -m output # Full screen
bind = shift, PRINT, exec, hyprshot -m region # Region
# Notifications
bind = $mainMod, N, exec, swaync-client -t
# Clipboard history
bind = $mainMod, Q, exec, cliphist list | wofi --dmenu | cliphist decode | wl-copy
# Theme selector
bind = $mainMod SHIFT, return, exec, ~/.local/bin/theme-selector
Use bindel for bindings that should repeat when held down (like volume/brightness).
Use bind for one-time actions.
Changing Fonts and Styling
Terminal Font (Ghostty)
Edit ~/dotfiles/config/ghostty/config:
# Font configuration
font-family = JetBrainsMono Nerd Font
font-size = 12
font-feature = -calt # Disable ligatures
# Or enable ligatures
# font-feature = +calt
Waybar Font
Edit ~/dotfiles/config/waybar/style.css:
* {
font-family : "JetBrainsMono Nerd Font" , "Font Awesome 6 Free" ;
font-size : 14 px ;
font-weight : 500 ;
}
/* Specific module fonts */
#clock {
font-size : 16 px ;
font-weight : 600 ;
}
#workspaces button {
font-size : 13 px ;
}
Wofi Font
Edit ~/dotfiles/config/wofi/style.css:
window {
font-family : "JetBrainsMono Nerd Font" ;
font-size : 14 px ;
}
System-wide Font Settings
For GTK applications, create or edit ~/.config/gtk-3.0/settings.ini:
[Settings]
gtk-font-name =Inter 10
Hyprland Visual Styling
Window Borders and Gaps
Edit ~/dotfiles/config/hypr/hyprland.conf:
general {
gaps_in = 4 # Gap between windows
gaps_out = 4 # Gap from screen edge
border_size = 1 # Border thickness
# Border colors (use theme variables)
col.active_border = rgb($blue)
col.inactive_border = rgb($grey0)
resize_on_border = false
layout = dwindle
}
Increase gaps_in and gaps_out for a more spacious look, or set them to 0 for maximum screen space.
Window Rounding and Opacity
decoration {
rounding = 20 # Corner radius in pixels
# Window opacity
active_opacity = 0.95
inactive_opacity = 0.90
shadow {
enabled = true
range = 4
render_power = 3
color = rgb($bg0)
}
blur {
enabled = true
size = 10
ignore_opacity = true
noise = 0.08
contrast = 1.5
brightness = 0.8
}
}
Per-Application Opacity
Override opacity for specific applications:
# VSCodium with custom opacity
windowrule = opacity 0.95 0.85, class:codium
# Brave browser fully opaque
windowrule = opacity 1 1, class:brave-browser
# Terminal with higher transparency
windowrule = opacity 0.90 0.80, class:ghostty
Animations
Edit ~/dotfiles/config/hypr/animations.conf:
animations {
enabled = true
# Animation curves: linear, ease, ease-in, ease-out, ease-in-out
bezier = smoothOut, 0.36, 0, 0.66, -0.56
bezier = smoothIn, 0.25, 1, 0.5, 1
bezier = overshot, 0.4, 0.8, 0.2, 1.2
animation = windows, 1, 4, overshot, slide
animation = windowsOut, 1, 4, smoothOut, slide
animation = border, 1, 10, default
animation = fade, 1, 8, smoothIn
animation = workspaces, 1, 5, overshot, slidevert
}
To disable animations entirely:
animations {
enabled = false
}
Adding Applications to Autostart
Edit ~/dotfiles/config/hypr/autostart.conf:
Current Autostart Applications
# System services
exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
# Hyprland components
exec-once = hyprpaper # Wallpaper
exec-once = waybar # Status bar
exec-once = swaync # Notifications
exec-once = hypridle # Idle daemon
exec-once = hyprsunset # Night light
# Clipboard
exec-once = cliphist wipe
exec-once = rm ~/.cache/cliphist/db
exec-once = wl-paste --type text --watch cliphist store
exec-once = wl-paste --type image --watch cliphist store
Adding New Autostart Applications
Add the exec-once line
# Add to autostart.conf
exec-once = discord --enable-features=UseOzonePlatform --ozone-platform=wayland
exec-once = nm-applet --indicator # Network manager tray
exec-once = blueman-applet # Bluetooth tray
For applications needing delays
# Run after 5 seconds
exec-once = sleep 5 && slack
Reload Hyprland
# Logout and login again, or
hyprctl reload
Autostart applications run once per Hyprland session. To run them again without logging out, manually execute the command or use exec instead of exec-once.
Conditionally Running Applications
Create a startup script:
#!/bin/bash
# ~/dotfiles/scripts/conditional-start
# Only start Discord if not already running
if ! pgrep -x "discord" > /dev/null ; then
discord &
fi
# Only start on specific host
if [[ $( hostname ) == "laptop" ]]; then
nm-applet &
fi
Then autostart the script:
exec-once = ~/.local/bin/conditional-start
Waybar Module Customization
Understanding Waybar Structure
Waybar uses two main files:
config - Module configuration and layout
modules.json - Individual module settings
Current Waybar Modules
Edit ~/dotfiles/config/waybar/modules.json:
{
"custom/arch" : {
"format" : "" ,
"tooltip" : true ,
"tooltip-format" : "I use Arch btw" ,
"on-click" : "wlogout"
},
"clock" : {
"format" : "{:%H:%M}" ,
"tooltip-format" : "<big>{:%Y %B}</big> \n <tt><small>{calendar}</small></tt>" ,
"format-alt" : "{:%H:%M | %e %b} " ,
"timezone" : "Europe/Madrid"
},
"cpu" : {
"format" : " {usage}%" ,
"tooltip" : true
},
"memory" : {
"format" : " {}%" ,
"tooltip" : true
}
}
Adding a New Module
Add module definition
In modules.json, add your module: "disk" : {
"interval" : 30 ,
"format" : " {percentage_used}%" ,
"path" : "/" ,
"tooltip-format" : "Used: {used} / Total: {total}"
}
Add to layout
In config, add the module to a section: "modules-right" : [
"cpu" ,
"memory" ,
"disk" , // New module
"pulseaudio" ,
"clock"
]
Restart Waybar
killall waybar && waybar &
Custom Script Modules
Example weather module (already included):
"custom/weather" : {
"format" : "{}" ,
"exec" : "/home/nico/.local/bin/weather" ,
"interval" : 1800 ,
"tooltip" : true
}
Create your own script in ~/dotfiles/scripts/:
#!/bin/bash
# ~/dotfiles/scripts/my-module
echo "📊 Custom Data"
Add to Waybar:
"custom/mymodule" : {
"format" : "{}" ,
"exec" : "~/.local/bin/my-module" ,
"interval" : 60
}
Styling Waybar Modules
Edit ~/dotfiles/config/waybar/style.css:
/* Highlight critical CPU usage */
#cpu.critical {
color : @ red ;
animation : blink 1 s infinite ;
}
/* Custom clock styling */
#clock {
background : @bg2;
color : @ blue ;
padding : 0 15 px ;
margin : 5 px ;
border-radius : 10 px ;
}
/* Pulse animation for custom module */
#custom-mymodule {
color : @ green ;
animation : pulse 2 s ease-in-out infinite ;
}
@keyframes pulse {
0% , 100% { opacity : 1 ; }
50% { opacity : 0.5 ; }
}
Neovim Plugin Additions
Neovim plugins are managed in ~/dotfiles/config/nvim/lua/plugins/.
Adding a New Plugin
Create plugin file
nvim ~/dotfiles/config/nvim/lua/plugins/my-plugin.lua
Define the plugin
return {
{
"plugin/author" ,
lazy = false , -- Load on startup
config = function ()
require ( "plugin" ). setup ({
-- Configuration here
})
end ,
},
}
Example: Adding a File Tree Plugin
-- ~/dotfiles/config/nvim/lua/plugins/neo-tree.lua
return {
{
"nvim-neo-tree/neo-tree.nvim" ,
branch = "v3.x" ,
dependencies = {
"nvim-lua/plenary.nvim" ,
"nvim-tree/nvim-web-devicons" ,
"MunifTanjim/nui.nvim" ,
},
config = function ()
require ( "neo-tree" ). setup ({
window = {
width = 30 ,
},
})
end ,
keys = {
{ "<leader>e" , "<cmd>Neotree toggle<cr>" , desc = "Toggle Neo-tree" },
},
},
}
The Kanagawa dotfiles likely use LazyVim or Lazy.nvim for plugin management. Check the existing plugin files for examples.
Next Steps
Adding Themes Create custom color themes
Troubleshooting Fix common configuration issues