Hyprland and Hyprland-related configuration files

Table of Contents

Hyprland

~/.config/hypr/hypland.conf

  • Modular configuration files
    source = ./hypr.d/monitors.conf
    source = ./hypr.d/autostart.conf
    source = ./hypr.d/variables.conf
    source = ./hypr.d/input.conf
    source = ./hypr.d/general.conf
    source = ./hypr.d/group.conf
    source = ./hypr.d/decoration.conf
    source = ./hypr.d/animations.conf
    source = ./hypr.d/dwindle.conf
    source = ./hypr.d/master.conf
    source = ./hypr.d/gestures.conf
    source = ./hypr.d/binds.conf
    source = ./hypr.d/misc.conf
    source = ./hypr.d/devices.conf
    source = ./hypr.d/windowrule.conf
    source = ./hypr.d/workspaces.conf
    source = ./hypr.d/keybindings.conf
    

    I split the configuration file into sections, based on the section from the configuration variables.

~/.config/hypr/hypr.d/monitors.conf

# See https://wiki.hyprland.org/Configuring/Monitors/
monitor=,highrr,auto,1
# monitor=,1920x1080@60,auto,1
monitor=DP-1,preferred,auto,1
monitor=DP-2,preferred,auto,1
monitor=DP-3,preferred,auto,1
monitor=DP-4,preferred,auto,1
monitor=DP-5,preferred,auto,1

# laptop
monitor = HDMI-A-1, preferred, auto, 1

These are the monitors I used across all my machines.

~/.config/hypr/hypr.d/autostart.conf

exec-once = systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP QT_QPA_PLATFORMTHEME SSH_AUTH_SOCK
exec-once = dbus-update-activation-environment --systemd --all &
exec-once = /usr/lib/polkit-kde-authentication-agent-1 &
exec-once = gnome-keyring-daemon --components=pkcs11,secrets,ssh -r -d &
exec-once = dbus-launch --sh-syntax --exit-with-session dunst -conf ~/.config/dunst/dunstrc &
exec-once = hypridle
exec-once = waybar &
exec-once = hyprpaper &
exec-once = wl-paste --type text --watch cliphist store &
exec-once = wl-paste --type image --watch cliphist store &
exec-once = hyprctl setcursor Bibata-Modern-Classic 24
exec-once = hyprpm reload
exec-once = hyprshade auto &
# exec-once = thunar --daemon &
exec-once = hypridle
exec-once = emacs --daemon &
exec-once = blueman-applet &
exec-once = blueman-tray &
exec-once = nm-applet --indicator
# exec-once = /usr/lib/kdeconnectd
# exec-once = kdeconnect-indicator
exec-once = udiskie -t

Required packages(archlinux):

  • blueman
  • network-manager-applet
  • polkit-kde-agent
  • gnome-keyring
  • udiskie
  • dunst
  • kdeconnect
  • hyprpaper
  • wl-clipboard
  • bibata-cursor-theme
  • hyprshade
  • thunar
  • hypridle
  • Additional GTK Settings
    exec-once = gsettings set org.gnome.desktop.interface font-name "JetBrainsMonoNL Nerd Font Mono 10"
    exec-once = gsettings set org.gnome.desktop.interface cursor-theme Bibata-Modern-Classic
    exec-once = gsettings set org.gnome.desktop.interface cursor-size 24
    exec-once = gsettings set org.gnome.desktop.interface gtk-theme Breeze
    exec-once = gsettings set org.gnome.desktop.interface gtk-key-theme Emacs
    exec-once = gsettings set org.gnome.desktop.interface icon-theme Papirus
    exec-once = gsettings set org.gnome.desktop.sound theme-name freedesktop
    exec-once = gsettings set org.gnome.desktop.sound input-feedback-sounds true
    exec-once = gsettings set org.gnome.desktop.sound allow-volume-above-100-percent true
    

    Required packages(archlinux):

    • nerd-fonts
    • breeze, breeze-gtk and breeze-icons
    • Emacs
    • sound-theme-freedesktop

~/.config/hypr/hypr.d/variables.conf

  • Applications
    $terminal = alacritty
    $fileManager = thunar
    $menu = rofi -show drun -theme hyprland-menu
    $editor = emacsclient -c -a emacs
    $editor_term = emacsclient -t -a ""
    $mail = thunderbird
    $browser = firefox
    
  • Environment Variables
    env = QT_QPA_PLATFORM,wayland
    env = QT_QPA_PLATFORMTHEME,qt5ct # change to qt6ct if you have that
    env = QT_AUTO_SCREEN_SCALE_FACTOR,1
    env = QT_QPA_PLATFORMTHEME, qt5ct
    env = QT_WAYLAND_DISABLE_WINDOWDECORATION,1
    env = SDL_VIDEODRIVER,wayland
    env = CLUTTER_BACKEND,wayland
    env = GTK_THEME,Breeze-Dark
    env = GTK2_RC_FILES,/usr/share/themes/Breeze-Dark/gtk-2.0
    env = XCURSOR_THEME,Bibata-Modern-Classic
    env = XCURSOR_SIZE,24
    env = HYPRCURSOR_THEME,Bibata-Modern-Classic
    env = HYPRCURSOR_SIZE,24
    
  • Wallpapers

    This will set the wallpaper for each workspaces. The one I used is stored at my gitlab repository.

    :ID: 0aa9f011-8ece-41b9-bb18-7ab04c0f436c

    $w1 = hyprctl hyprpaper wallpaper ",~/.local/share/wallpapers/nord/linux-friends-4k.png"
    $w2 = hyprctl hyprpaper wallpaper ",~/.local/share/wallpapers/nord/linux-friends-4k.png"
    $w3 = hyprctl hyprpaper wallpaper ",~/.local/share/wallpapers/nord/keyboard.png"
    $w4 = hyprctl hyprpaper wallpaper ",~/.local/share/wallpapers/nord/keyboard.png"
    $w5 = hyprctl hyprpaper wallpaper ",~/.local/share/wallpapers/nord/nord_alone_tree.png"
    $w6 = hyprctl hyprpaper wallpaper ",~/.local/share/wallpapers/nord/nord_alone_tree.png"
    $w7 = hyprctl hyprpaper wallpaper ",~/.local/share/wallpapers/nord/wild.png"
    $w8 = hyprctl hyprpaper wallpaper ",~/.local/share/wallpapers/nord/wild.jpg"
    $w9 = hyprctl hyprpaper wallpaper ",~/.local/share/wallpapers/nord/nord_buildings.png"
    $w10 = hyprctl hyprpaper wallpaper ",~/.local/share/wallpapers/nord/nord_buildings.png"
    

~/.config/hypr/hypr.d/input.conf

input {
kb_layout = us
kb_variant =
kb_model =
kb_options =
kb_rules =

numlock_by_default = false

repeat_rate = 35
repeat_delay = 250

follow_mouse = 1

touchpad {
natural_scroll = true
disable_while_typing = true
tap-to-click = true
scroll_factor = 0.5
}

sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
special_fallthrough = true
}

~/.config/hypr/hypr.d/general.conf

general {
# See https://wiki.hyprland.org/Configuring/Variables/ for more

gaps_in = 4
gaps_out = 5
gaps_workspaces = 50
border_size = 1
col.active_border = rgba(0DB7D4FF)
col.inactive_border = rgba(31313600)
#col.nogroup_border=0xff89dceb
#col.nogroup_border_active=0xfff9e2af

resize_on_border = true
no_focus_fallback = true
layout = dwindle

# Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on
allow_tearing = true
}

~/.config/hypr/hypr.d/decoration.conf

decoration {
# See https://wiki.hyprland.org/Configuring/Variables/ for more

rounding = 20

blur {
enabled = true
xray = true
special = false
new_optimizations = true
size = 14
passes = 4
brightness = 1
noise = 0.01
contrast = 1
popups = true
popups_ignorealpha = 0.6
}

drop_shadow = true
shadow_ignore_window = true
shadow_range = 20
shadow_offset = 0 2
shadow_render_power = 4
col.shadow = rgba(0000002A)

dim_inactive = false
dim_strength = 0.1
dim_special = 0
}

~/.config/hypr/hypr.d/animations.conf

animations {
enabled = true

# Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more

bezier = linear, 0, 0, 1, 1
bezier = md3_standard, 0.2, 0, 0, 1
bezier = md3_decel, 0.05, 0.7, 0.1, 1
bezier = md3_accel, 0.3, 0, 0.8, 0.15
bezier = overshot, 0.05, 0.9, 0.1, 1.1
bezier = crazyshot, 0.1, 1.5, 0.76, 0.92
bezier = hyprnostretch, 0.05, 0.9, 0.1, 1.0
bezier = menu_decel, 0.1, 1, 0, 1
bezier = menu_accel, 0.38, 0.04, 1, 0.07
bezier = easeInOutCirc, 0.85, 0, 0.15, 1
bezier = easeOutCirc, 0, 0.55, 0.45, 1
bezier = easeOutExpo, 0.16, 1, 0.3, 1
bezier = softAcDecel, 0.26, 0.26, 0.15, 1
bezier = md2, 0.4, 0, 0.2, 1 # use with .2s duration

animation = windows, 1, 3, md3_decel, popin 60%
animation = windowsIn, 1, 3, md3_decel, popin 60%
animation = windowsOut, 1, 3, md3_accel, popin 60%
animation = border, 1, 10, default
animation = fade, 1, 3, md3_decel

animation = layersIn, 1, 3, menu_decel, slide
animation = layersOut, 1, 1.6, menu_accel
animation = fadeLayersIn, 1, 2, menu_decel
animation = fadeLayersOut, 1, 4.5, menu_accel
animation = workspaces, 1, 7, menu_decel, slide

animation = specialWorkspace, 1, 3, md3_decel, slidevert
}

~/.config/hypr/hypr.d/dwindle.conf

dwindle {
# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
pseudotile = yes # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
preserve_split = true # you probably want this
smart_split = false
smart_resizing = false
}

~/.config/hypr/hypr.d/master.conf

master {
# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
}

~/.config/hypr/hypr.d/gestures.conf

gestures {
# See https://wiki.hyprland.org/Configuring/Variables/ for more
workspace_swipe = true
workspace_swipe_distance = 700
workspace_swipe_fingers = 3
workspace_swipe_cancel_ratio = 0.2
workspace_swipe_min_speed_to_force = 5
workspace_swipe_direction_lock = true
workspace_swipe_direction_lock_threshold = 10
workspace_swipe_create_new = true
}

~/.config/hypr/hypr.d/groups.conf

group {
insert_after_current = true
focus_removed_window = true
col.border_active = 0x66ffff00
col.border_inactive = 0x66777700
col.border_locked_active = 0x66ff5500
col.border_locked_inactive = 0x66775500
groupbar {
enabled = true
font_family = "JetBrainsMonoNL Nerd Font Mono 10"
font_size = 10
gradients = true
height = 14
priority = 3
render_titles = true
scrolling = true
text_color = 0xffeceff4 # white
col.active = 0x665e81ac
col.inactive = 0x662e3440
col.locked_active = 0x66ebcb8b
col.locked_inactive = 0x66d08770
}
}

~/.config/hypr/hypr.d/binds.conf

binds {
workspace_back_and_forth = false
allow_workspace_cycles = true
scroll_event_delay = 0
}

~/.config/hypr/hypr.d/misc.conf

misc {
# See https://wiki.hyprland.org/Configuring/Variables/ for more
vfr = 1
vrr = 1
focus_on_activate = false
animate_manual_resizes = false
animate_mouse_windowdragging = false
enable_swallow = false
swallow_regex = (foot|kitty|allacritty|Alacritty)
force_default_wallpaper = 0 # Set to 0 or 1 to disable the anime mascot wallpapers
disable_hyprland_logo = true
disable_splash_rendering = false
mouse_move_enables_dpms = true
key_press_enables_dpms = true
mouse_move_focuses_monitor = true
new_window_takes_over_fullscreen = 2
allow_session_lock_restore = true
initial_workspace_tracking = false
}

~/.config/hypr/hypr.d/devices.conf

device {
name = epic-mouse-v1
sensitivity = -0.5
}

~/.config/hypr/hypr.d/windowrule.conf

  • For all windows
    windowrule = noblur,.*
    windowrulev2 = suppressevent maximize, class:.* # You'll probably like this.
    windowrulev2 = opacity 0.99, class:.*
    
  • pavucontrol
    windowrulev2 = float,class:^(pavucontrol)$
    windowrulev2 = size 50%,class:^(pavucontrol)$
    
  • polkit-kde-agent
    windowrulev2 = float,class:(org.kde.polkit-kde-authentication-agent-1)
    windowrulev2 = center,class:(org.kde.polkit-kde-authentication-agent-1)
    
  • blueman
    windowrulev2 = float,class:(blueman)
    windowrulev2 = center,class:(blueman)
    windowrulev2 = size 50%,class:(blueman)
    
  • thunderbird
    windowrulev2 = float,class:(thunderbird),title:(status)
    windowrulev2 = float,class:(thunderbird),title:(.*)(Reminders)
    windowrulev2 = float,class:(thunderbird),title:(Write:.*)
    windowrulev2 = float,class:(thunderbird),title:(Send.*)
    windowrulev2 = float,class:(thunderbird),title:(Inbox.*)
    windowrulev2 = float,class:(Msgcompose.*)
    windowrulev2 = float, class:(thunderbird),title(.*)(Reminders)$
    windowrulev2 = workspace 4, class:(thunderbird)
    
  • firefox
    windowrulev2 = idleinhibit always, class:firefox title:(.*)(- YouTube)
    windowrulev2 = opacity 1, class:firefox title:(.*)(- YouTube)
    
  • Qtpass
    windowrulev2 = float,class:(QtPass)
    
  • zoom
    windowrulev2 = float,class:(zoom)
    windowrulev2 = opacity 1, class:(zoom)
    windowrulev2 = workspace 10, class:(zoom)
    windowrulev2 = opacity 1, class:(zoom), title:(Settings)
    windowrulev2 = opacity 1, class:(zoom), title:(Zoom Meeting)
    
  • file-roller
    windowrulev2 = float, class:(file-roller)
    
  • ncmpcpp
    windowrulev2 = float,class:(ncmpcpp)
    windowrulev2 = center,class:(ncmpcpp)
    windowrulev2 = size 50%,class:(ncmpcpp)
    
  • khal
    windowrulev2 = float, class:(khal)
    windowrulev2 = size 40%, class:(khal)
    windowrulev2 = move onscreen cursor 50% 5%, class:(khal)
    
  • astroid
    windowrulev2 = workspace 4, class:(astroid)
    windowrulev2 = maximize, class:(astroid)
    
  • vlc
    windowrulev2 = workspace 7,class:(vlc)
    windowrulev2 = opacity 1,class:(vlc)
    windowrulev2 = idleinhibit always,class:(vlc)
    
  • remmina
    windowrulev2 = float, workspace 8, class:(org.remmina.Remmina)
    
  • transmission
    windowrulev2 = workspace 9,class:^(com.transmissionbt.transmission).*
    windowrulev2 = float,title:(Torrent.*)
    
  • dialogs
    windowrule=float,title:^(Open File)(.*)$
    windowrule=float,title:^(Select a File)(.*)$
    windowrule=float,title:^(Choose wallpaper)(.*)$
    windowrule=float,title:^(Open Folder)(.*)$
    windowrule=float,title:^(Save As)(.*)$
    windowrule=float,title:^(Library)(.*)$
    windowrule=float,title:^(File Upload)(.*)$
    
  • thunar
    windowrule = center, title:^(Open File)(.*)$
    windowrule = center, title:^(Select a File)(.*)$
    windowrule = center, title:^(Choose wallpaper)(.*)$
    windowrule = center, title:^(Open Folder)(.*)$
    windowrule = center, title:^(Save As)(.*)$
    windowrule = center, title:^(Library)(.*)$
    windowrule = center, title:^(File Upload)(.*)$
    windowrulev2 = float, title:(File Operation Progress)
    windowrulev2 = float, class:(thunar),title:(Confirm to replace files)
    
  • no tearing
    windowrulev2 = noshadow,floating:0
    
  • htop
    windowrulev2 = float, class:(htop)
    windowrulev2 = size 100% 40%, class:(htop)
    windowrulev2 = move 0 40, class:(htop)
    
  • nmtui
    windowrulev2 = float, class:(nmtui)
    
  • vim
    windowrulev2 = float, class:(vim)
    windowrulev2 = maximize, class:(vim)
    
  • Emacs (in terminal mode)
    windowrulev2 = maximize, class:(nw-emacs)
    
  • showmethekey
    windowrulev2 = float, class:(one.alynx.showmethekey), title:(Show Me The Key)
    windowrulev2 = nofocus, class:(showmethekey-gtk), title:(Floating Window - Show Me The Key)
    windowrulev2 = opacity 0.4, class:(showmethekey-gtk), title:(Floating Window - Show Me The Key)
    windowrulev2 = center, class:(showmethekey-gtk), title:(Floating Window - Show Me The Key)
    windowrulev2 = float, class:(showmethekey-gtk), title:(Floating Window - Show Me The Key)
    windowrulev2 = pin, class:(showmethekey-gtk), title:(Floating Window - Show Me The Key)
    windowrulev2 = size 100% 10%, class:(showmethekey-gtk), title:(Floating Window - Show Me The Key)
    windowrulev2 = move 0 90%, class:(showmethekey-gtk), title:(Floating Window - Show Me The Key)
    
  • screenkey
    windowrulev2 = float, class:(screenkey)
    
  • steam
    windowrulev2 = opacity 1, class:(steam) initialTitle:(.*)
    windowrulev2 = float, class:(steam) initialTitle:(.*)
    windowrule=immediate,.*\.exe
    windowrulev2=immediate,class:(steam_app)
    
    • Mount & Blade Warband
      windowrulev2 = opacity 1, class:(mb_warband_linux) initialTitle:(mb_warband_linux)
      
  • easyeffect
    windowrulev2 = float, title:(Easy Effects)
    windowrulev2 = size 100% 60%, title:(Easy Effects)
    
  • layer
    layerrule = xray 1, .*
    # layerrule = noanim, .*
    layerrule = noanim, walker
    layerrule = noanim, selection
    layerrule = noanim, overview
    layerrule = noanim, anyrun
    layerrule = noanim, indicator.*
    layerrule = noanim, osk
    layerrule = noanim, hyprpicker
    layerrule = blur, shell:*
    layerrule = ignorealpha 0.6, shell:*
    
    layerrule = noanim, noanim
    layerrule = blur, gtk-layer-shell
    layerrule = ignorezero, gtk-layer-shell
    layerrule = blur, launcher
    layerrule = ignorealpha 0.5, launcher
    layerrule = blur, notifications
    layerrule = ignorealpha 0.69, notifications
    
    layerrule = animation slide top, sideleft.*
    layerrule = animation slide top, sideright.*
    layerrule = blur, session
    
    layerrule = blur, bar
    layerrule = ignorealpha 0.6, bar
    layerrule = blur, corner.*
    layerrule = ignorealpha 0.6, corner.*
    layerrule = blur, dock
    layerrule = ignorealpha 0.6, dock
    layerrule = blur, indicator.*
    layerrule = ignorealpha 0.6, indicator.*
    layerrule = blur, overview
    layerrule = ignorealpha 0.6, overview
    layerrule = blur, cheatsheet
    layerrule = ignorealpha 0.6, cheatsheet
    layerrule = blur, sideright
    layerrule = ignorealpha 0.6, sideright
    layerrule = blur, sideleft
    layerrule = ignorealpha 0.6, sideleft
    layerrule = blur, indicator*
    layerrule = ignorealpha 0.6, indicator*
    layerrule = blur, osk
    layerrule = ignorealpha 0.6, osk
    

~/.config/hypr/hypr.d/workspaces.conf

  • Normal Workspaces

    These workspaces are just standard workspaces, the way I set them is to have dedicated workspaces for each applications, such as web browsers, terminal emulators, etc.

    workspace = 1, name:terminal, monitor: #, on-created-empty:alacritty
    workspace = 2, name:code, monitor: #, on-created-empty:emacsclient -c -a emacs
    workspace = 3, name:web, monitor: #, on-created-empty:firefox
    workspace = 4, name:message, monitor:
    workspace = 5, name:file, monitor:HDMI-A-1, monitor:DP-1, default:true
    workspace = 6, name:office, monitor:HDMI-A-1
    workspace = 7, name:fun, monitor:HDMI-A-1
    workspace = 8, name:remote, monitor:HDMI-A-1
    workspace = 9, name:torrent, monitor:HDMI-A-1
    workspace = 10, name:zoom, monitor:HDMI-A-1
    
  • Special workspaces

    In other window managers, a special workspace is often called scratchpad. The difference is in Hyprland we can have up to 97 of them, each with different names. The way I use it is to have one special workspace for an application, usually one that needs to always run in the background, like a music player, calculator and other. What I like from Hyprland (though I'm sure other WM also have), is the ability to only start the application when the workspace is opened. See the keybindings section for the detail.

    Also to conserve resource, I tend to only have terminal based application in these workspaces.

    workspace = special:music, on-created-empty:[tiled] $terminal --class ncmpcpp -e ncmpcpp
    workspace = special:khal, on-created-empty:[tiled] $terminal --class khal -e khal interactive
    workspace = special:proc, on-created-empty:[tiled] $terminal --class htop -e htop
    workspace = special:emacs, on-created-empty:[tiled] $terminal --class emacsclient -e $editor_term
    workspace = special:notmuch, on-created-empty:[tiled] $terminal --class emacsclient -e $editor_term -e '(notmuch)'
    workspace = special:dired, on-created-empty:[tiled] $terminal --class emacsclient -e $editor_term -e '(dired (getenv "HOME"))'
    workspace = special:keys, on-created-empty:[float] showmethekey-gtk
    workspace = special:nvim, on-created-empty:$terminal --class vim -e nvim
    

~/.config/hypr/hypr.d/keybindings.conf

  • Set the mainMod variable

    Super, (or WIN) key, is a more common mod key for window manager anyway.

    # See https://wiki.hyprland.org/Configuring/Keywords/ for more
    $mainMod = SUPER
    
  • Apps keybindings
    # Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more
    bind = $mainMod, Return, exec, $terminal
    bind = $mainMod, E, exec, $fileManager
    bind = $mainMod, F4, exec, hyprctl kill
    bind = ALT, F4, killactive,
    bind = $mainMod, Q, exec, ~/.local/bin/rofi-logout hyprland-logout
    bind = $mainMod Alt, Q, exec, hyprlock
    bind = $mainMod, D, exec, $menu
    bind = $mainMod, C, exec, cliphist list | rofi -dmenu -p "Clipboard:" -theme "hyprland-clipboard" | cliphist decode | wl-copy
    bind = $mainMod, Comma, exec, rofi -show emoji
    bind = $mainMod Shift, V, exec, pavucontrol
    bind = $mainMod Alt, V, exec, easyeffects
    bind = $mainMod Alt, B, exec, blueman-manager
    
    # bind = $mainMod Alt, M, exec, [workspace special:music; silent; tiled] alacritty --class ncmpcpp -e ncmpcpp
    # bind = $mainMod Alt, H, exec, alacritty --class htop -e htop
    # bind = $mainMod Alt, W, exec, [float] alacritty --class nmtui -e nmtui
    # bind = $mainMod Alt, K, exec, alacritty --class khal -e khal interactive
    # bind = $mainMod Alt, V, exec, alacritty --class vim -e vim
    # bind = $mainMod Shift Alt, N, exec, alacritty --class nw-emacs -e emacsclient -t -a emacs
    # bind = $mainMod Alt, E, exec, emacsclient -c -a emacs -e '(dired (getenv "HOME"))'
    bind = $mainMod Alt, N, exec, $editor
    bind = $mainMod Alt, T, exec, $mail
    bind = $mainMod Alt, P, exec, rofi-pass
    # bind = $mainMod Alt, C, exec, rofi -show calc -modi calc -no-show-match -no-sort -theme calculator
    bind = $mainMod Shift, P, exec, rofi-rbw
    bind = $mainMod Alt, f, exec, firefox
    bind = $mainMod Alt, S, exec, [workspace 10; silent; float] showmethekey-gtk
    bind = $mainMod Alt, A, exec, hyprshade toggle
    
    # tesseract
    bind = SuperShift,T,exec,grim -g "$(slurp -d -c D1E5F4BB -b 1B232866 -s 00000000)" "tmp.png" && tesseract -l eng "tmp.png" - | wl-copy && rm "tmp.png"
    
    # restart waybar
    bind = $mainMod Shift, R, exec, killall waybar && waybar &
    
  • window
    bind = $mainMod, F, fullscreen, 0
    bind = $mainMod Shift, F, fullscreen, 1
    bind = $mainMod Control, F, fullscreenstate, -1 -1
    bind = $mainMod, Space, togglefloating,
    
    # Move focus with mainMod + arrow keys
    bind = $mainMod, left, movefocus, l
    bind = $mainMod, right, movefocus, r
    bind = $mainMod, up, movefocus, u
    bind = $mainMod, down, movefocus, d
    
    bind = $mainMod, H, movefocus, l
    bind = $mainMod, L, movefocus, r
    bind = $mainMod, K, movefocus, u
    bind = $mainMod, J, movefocus, d
    
    # resize
    binde = $mainMod Control, H, resizeactive, -10 0
    binde = $mainMod Control, J, resizeactive, 0 10
    binde = $mainMod Control, K, resizeactive, 0 -10
    binde = $mainMod Control, L, resizeactive, 10 0
    
    binde = $mainMod Control, left, resizeactive, -10 0
    binde = $mainMod Control, down, resizeactive, 0 10
    binde = $mainMod Control, up, resizeactive, 0 -10
    binde = $mainMod Control, right, resizeactive, 10 0
    
    # move window
    bind = $mainMod Shift, H, movewindow, l
    bind = $mainMod Shift, J, movewindow, d
    bind = $mainMod Shift, K, movewindow, u
    bind = $mainMod Shift, L, movewindow, r
    
    # Window split ratio
    binde = Super, Minus, splitratio, -0.1
    binde = Super, Equal, splitratio, 0.1
    binde = Super, Semicolon, splitratio, -0.1
    binde = Super, Apostrophe, splitratio, 0.1
    
  • Mouse
    # Move/resize windows with mainMod + LMB/RMB and dragging
    bindm = $mainMod, mouse:272, movewindow
    bindm = $mainMod, mouse:273, resizewindow
    
  • Media keys
    binde = , XF86AudioRaiseVolume, exec, ~/.local/bin/dunst-volume -i 1
    # binde = , XF86AudioLowerVolume, exec, pactl set-sink-volume @DEFAULT_SINK@ -1%
    binde = , XF86AudioLowerVolume, exec, ~/.local/bin/dunst-volume -d 1
    bindl = , XF86AudioMute, exec, ~/.local/bin/dunst-volume -t
    # bindl = , XF86AudioMicMute, exec, pactl set-source-mute @DEFAULT_SOURCE@ toggle
    
    bind = , XF86AudioPlay, exec, playerctl play-pause
    bind = , XF86AudioNext, exec, playerctl next
    bind = , XF86AudioPrev, exec, playerctl previous
    
    # for keyboard with no fn keys
    bind = $mainMod Control, Up, exec, playerctl play-pause
    bind = $mainMod Control, Down, exec, playerctl stop
    bind = $mainMod Control, Right, exec, playerctl next
    bind = $mainMod Control, Left, exec, playerctl previous
    
    # binde = , XF86MonBrightnessUp, exec, brightnessctl set +1%
    binde = , XF86MonBrightnessUp, exec, ~/.local/bin/dunst-backlight +1%
    binde = , XF86MonBrightnessDown, exec, ~/.local/bin/dunst-backlight 1%-
    # binde = , XF86MonBrightnessDown, exec, brightnessctl set 1%-
    
    bind= , Print, exec, grim "$(echo ~/Pictures/Screenshots/Screenshot1-$(date +'%Y%m%d_%H%M%S').png)"
    bind = Control, Print, exec, grim -g "$(slurp)" - | swappy -f -
    bind = Alt, Print, exec, kooha
    
  • dunst
    bind = $mainMod Alt, grave, exec, dunstctl history-pop
    bind = $mainMod SHIFT, grave, exec, dunstctl context
    bind = $mainMod, grave, exec, dunstctl action
    bind = $mainMod, grave, exec, dunstctl close
    
  • Groups
    • Group management
      bind = $mainMod, G, submap, group
      submap = group
      bind = , T, togglegroup
      bind = $mainMod Control, F, changegroupactive, f
      bind = $mainMod Control, B, changegroupactive, b
      
      # bind = $mainMod Alt, L, lockactivegroup
      bind = $mainMod, G, lockgroups, toggle
      bind = $mainMod Alt, G, lockactivegroup, toggle
      
      bind = $mainMod Shift, left, moveintogroup, l
      bind = $mainMod Shift, right, moveintogroup, r
      bind = $mainMod Shift, up, moveintogroup, u
      bind = $mainMod Shift, down, moveintogroup, d
      
      bind = $mainMod Shift, H, moveintogroup, l
      bind = $mainMod Shift, L, moveintogroup, r
      bind = $mainMod Shift, K, moveintogroup, u
      bind = $mainMod Shift, J, moveintogroup, d
      
      bind = $mainMod Control, left, moveoutofgroup, l
      bind = $mainMod Control, right, moveoutofgroup, r
      bind = $mainMod Control, up, moveoutofgroup, u
      bind = $mainMod Control, down, moveoutofgroup, d
      
      bind = $mainMod Control, H, moveoutofgroup, l
      bind = $mainMod Control, L, moveoutofgroup, r
      bind = $mainMod Control, K, moveoutofgroup, u
      bind = $mainMod Control, J, moveoutofgroup, d
      
      bind = $mainMod, left, movefocus, l
      bind = $mainMod, right, movefocus, r
      bind = $mainMod, up, movefocus, u
      bind = $mainMod, down, movefocus, d
      
      bind = $mainMod, H, movefocus, l
      bind = $mainMod, L, movefocus, r
      bind = $mainMod, K, movefocus, u
      bind = $mainMod, J, movefocus, d
      
      bind = , escape, submap, reset
      bind = Control, G, submap, reset
      submap = reset
      
      bind = $mainMod Control, F, changegroupactive, f
      bind = $mainMod Control, B, changegroupactive, b
      
    • Window Resize
      # Resize
      bind = $mainMod, R, submap, resize
      submap = resize
      # using arrow key
      binde = , right, resizeactive, 10 0
      binde = , left, resizeactive, -10 0
      binde = , up, resizeactive, 0 -10
      binde = , down, resizeactive, 0 10
      # using vim key
      binde = , l, resizeactive, 10 0
      binde = , h, resizeactive, -10 0
      binde = , k, resizeactive, 0 -10
      binde = , j, resizeactive, 0 10
      bind = Control, G, submap, reset
      bind = , escape, submap, reset
      submap = reset
      
  • Hyprland
    bind = $mainMod, P, pseudo, # dwindle
    bind = $mainMod, S, togglesplit, # dwindle
    bind = Alt Control Shift, Tab, layoutmsg, swapprev
    
    • Master layout
      # master
      bind = $mainMod Alt, TAB, layoutmsg, swapwithmaster auto
      bind = $mainMod Alt, H, layoutmsg, orientationleft
      bind = $mainMod Alt, J, layoutmsg, orientationbottom
      bind = $mainMod Alt, K, layoutmsg, orientationtop
      bind = $mainMod Alt, L, layoutmsg, orientationright
      bind = Alt Shift, Tab, layoutmsg, swapnext
      bind = Alt, Tab, cyclenext
      bind = Alt Control, TAB, layoutmsg, cycleprev
      
  • Workspaces
    # Switch workspaces with mainMod + [0-9]
    bind = $mainMod, 1, workspace, 1
    bind = $mainMod, 1, exec, $w1
    bind = $mainMod, 2, workspace, 2
    bind = $mainMod, 2, exec, $w2
    bind = $mainMod, 3, workspace, 3
    bind = $mainMod, 3, exec, $w3
    bind = $mainMod, 4, workspace, 4
    bind = $mainMod, 4, exec, $w4
    bind = $mainMod, 5, workspace, 5
    bind = $mainMod, 5, exec, $w5
    bind = $mainMod, 6, workspace, 6
    bind = $mainMod, 6, exec, $w6
    bind = $mainMod, 7, workspace, 7
    bind = $mainMod, 7, exec, $w7
    bind = $mainMod, 8, workspace, 8
    bind = $mainMod, 8, exec, $w8
    bind = $mainMod, 9, workspace, 9
    bind = $mainMod, 9, exec, $w9
    bind = $mainMod, 0, workspace, 10
    bind = $mainMod, 0, exec, $w10
    bind = $mainMod, TAB, workspace, previous
    

    I set the bindings for workspace to have multiple bindings, the first one is to move to the intended workspace, but also to set the wallpaper to the variable set at the variables.conf file.

    • Workspace movement
      # Move active window to a workspace with mainMod + SHIFT + [0-9]
      bind = $mainMod SHIFT, 1, movetoworkspace, 1
      bind = $mainMod SHIFT, 2, movetoworkspace, 2
      bind = $mainMod SHIFT, 3, movetoworkspace, 3
      bind = $mainMod SHIFT, 4, movetoworkspace, 4
      bind = $mainMod SHIFT, 5, movetoworkspace, 5
      bind = $mainMod SHIFT, 6, movetoworkspace, 6
      bind = $mainMod SHIFT, 7, movetoworkspace, 7
      bind = $mainMod SHIFT, 8, movetoworkspace, 8
      bind = $mainMod SHIFT, 9, movetoworkspace, 9
      bind = $mainMod SHIFT, 0, movetoworkspace, 10
      bind = $mainMod SHIFT, TAB, movetoworkspace, previous
      
      bind = $mainMod Alt, H, focusmonitor, l
      bind = $mainMod Alt, J, focusmonitor, d
      bind = $mainMod Alt, K, focusmonitor, u
      bind = $mainMod Alt, L, focusmonitor, r
      
      bind = $mainMod Control, H, movecurrentworkspacetomonitor, l
      bind = $mainMod Control, J, movecurrentworkspacetomonitor, d
      bind = $mainMod Control, K, movecurrentworkspacetomonitor, u
      bind = $mainMod Control, L, movecurrentworkspacetomonitor, r
      
      # bind = $mainMod, O, toggleopaque
      
      bind = Alt, Tab, alterzorder, top
      bind = Alt Shift, Tab, bringactivetotop,
      bind = Alt Control, TAB, bringactivetotop,
      bind = Alt Control Shift, Tab, bringactivetotop,
      
    • Laptops
      # lid switch
      # trigger when the switch is toggled
      bindl=,switch:Lid Switch,exec,hyprlock
      # trigger when the switch is turning on
      #bindl=,switch:on:[switch name],exec,hyprctl keyword monitor ", 2560x1600, 0x0, 1"
      # trigger when the switch is turning off
      #bindl=,switch:off:[switch name],exec,hyprctl keyword monitor ", disable"
      
    • special workspace
      # 0 is fn+m (music) in my laptop
      bind = $mainMod Alt, 0, togglespecialworkspace, music
      # 1 is for htop
      bind = $mainMod Alt, 1, togglespecialworkspace, proc
      # 2 is fn+k (khal)
      bind = $mainMod Alt, 2, togglespecialworkspace, khal
      # 3 is for terminal emacsclient
      bind = $mainMod Alt, 3, togglespecialworkspace, emacs
      # 4 is for terminal notmuch (using emacsclient)
      bind = $mainMod Alt, 4, togglespecialworkspace, notmuch
      # 5 is for dired
      bind = $mainMod Alt, 5, togglespecialworkspace, dired
      # 6 is for nvim
      bind = $mainMod Alt, 6, togglespecialworkspace, nvim
      # 7 is for org-agenda (emacsclient)
      # bind = $mainMod Alt, 7, togglespecialworkspace, agenda
      # 0 is for showmethekey-gtk
      bind = $mainMod Alt, 9, togglespecialworkspace, keys
      
    • mouse
      # Scroll through existing workspaces with mainMod + scroll
      bind = $mainMod, mouse_down, workspace, e+1
      bind = $mainMod, mouse_up, workspace, e-1
      

waybar

~/.config/waybar/config

  • start config
    {
    
  • General
    "layer": "top", // Waybar at top layer
    "output": ["eDP-1", "DP-1", "DP-2", "DP-3", "DP-4", "DP-5", "HDMI-A-1"],
    "position": "top", // Waybar position (top|bottom|left|right)
    "height": 34, // Waybar height (to be removed for auto height)
    // "width": 1280, // Waybar width
    "spacing": 4, // Gaps between modules (4px)
    // Choose the order of the modules
    
  • Left Modules
    "modules-left": [
      "custom/launcher",
      "hyprland/workspaces",
      "hyprland/submap"
      // "mpris"
      // "custom/media"
    ],
    
  • Center Modules
    "modules-center": [
      "hyprland/window"
    ],
    
  • Right Modules
    "modules-right": [
      // "mpd",
      // "idle_inhibitor",
      "backlight",
      "pulseaudio",
      // "wireplumber",
      "network",
      "cpu",
      "memory",
      "temperature",
      "keyboard-state",
      // "hyprland/language",
      "battery",
      "custom/pacman",
      "clock#date",
      "clock#time",
      "tray",
      "custom/power"
    ],
    
  • Modules Configuration
    • mpris
      "mpris": {
        "format": "{player_icon} {title}",
        "format-paused": "{status_icon} <i>{title}</i>",
        "player-icons": {
          "default": "▶",
          "mpv": "🎵"
        },
        "status-icons": {
          "paused": "⏸"
        },
      },
      
    • backlight
      "backlight": {
        "format": " {percent}%",
        "interval": 2,
        "on-scroll-up": "brightnessctl set +1%",
        "on-scroll-down": "brightnessctl set 1%-"
      },
      
    • hyprland/workspaces
      "hyprland/workspaces": {
        "num-tags": 6,
        // "format": "{id}: {icon}",
        // "format-icons": {
        //   "1": "",
        //   "2": "",
        //   "3": "󰖟",
        //   "4": "󰺻",
        //   "5": "󰈔",
        //   "6": "󰦑",
        //   "7": "",
        //   "8": "󰑔",
        //   "9": "",
        //   "10": ""
        // },
        "active-only": false
      },
      
    • hyprland/languages
      "hyprland/language": {
        "format": "{}",
        "format-en": "en",
        "keyboard-name": "at-translated-set-2-keyboard"
      },
      
    • hyprland/window
      "hyprland/window": {
        "format": "{title}",
        "rewrite": {
          "(.*) — Mozilla Firefox": "🌎 $1",
          "(.*) - (GNU Emacs at.*)": "$1"
        },
        "max-length": 80,
        "separate-outputs": true
      },
      
    • hyprland/submap
      "hyprland/submap": {
        "format": "{}",
        "max-length": 8,
        "tooltip": false
      },
      
    • keyboard-state
      "keyboard-state": {
        "numlock": false,
        "capslock": true,
        "format": "{name} {icon}",
        "format-icons": {
          "locked": "",
          "unlocked": ""
        }
      },
      
    • mpd
      "mpd": {
        // "format": "{stateIcon} {consumeIcon}{randomIcon}{repeatIcon}{singleIcon}{artist} - {album} - {title} ({elapsedTime:%M:%S}/{totalTime:%M:%S}) ⸨{songPosition}|{queueLength}⸩ {volume}% ",
        "format": "  {title} - {artist} {stateIcon} [{elapsedTime:%M:%S}/{totalTime:%M:%S}] {consumeIcon}{randomIcon}{repeatIcon}{singleIcon}[{songPosition}/{queueLength}] [{volume}%]",
        "format-disconnected": "Disconnected ",
        "format-stopped": "{consumeIcon}{randomIcon}{repeatIcon}{singleIcon}Stopped ",
        "unknown-tag": "N/A",
        "interval": 2,
        "consume-icons": {
          "on": " "
        },
        "random-icons": {
          "off": "<span color=\"#f53c3c\"></span> ",
          "on": " "
        },
        "repeat-icons": {
          "on": " "
        },
        "single-icons": {
          "on": "1 "
        },
        "state-icons": {
          "paused": "",
          "playing": ""
        },
        "tooltip-format": "MPD (connected)",
        "tooltip-format-disconnected": "MPD (disconnected)"
      },
      
    • idle_inhibitor
      "idle_inhibitor": {
        "format": "{icon}",
        "format-icons": {
          "activated": "",
          "deactivated": ""
        }
      },
      
    • tray
      "tray": {
        // "icon-size": 21,
        "spacing": 10
      },
      
    • clock
      "clock#date": {
        // "timezone": "America/New_York",
        "format": " {:%Y/%m/%d(%a)}",
        "on-click": "alacritty --class khal -e khal interactive",
        "tooltip-format": "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>"
        // "format-alt": "{:%Y-%m-%d}"
      },
      "clock#time": {
        "interval": 1,
        "format": "{:%H:%M:%S}",
        "tooltip": false
      },
      
    • cpu
      "cpu": {
        "format": "{usage}% ",
        // "format": " {}%",
        "tooltip": true,
        "interval": 15
      },
      
    • memory
      "memory": {
        "interval": 30,
        "format": "{}% "
        // "max-length": 50
      },
      
    • temperature
      "temperature": {
        // "thermal-zone": 2,
        // "hwmon-path": "/sys/class/hwmon/hwmon2/temp1_input",
        "critical-threshold": 80,
        // "format-critical": "{temperatureC}°C {icon}",
        "format": "{temperatureC}°C {icon}",
        "format-icons": ["", "", ""]
      },
      
    • battery
      "battery": {
        "states": {
          // "good": 95,
          "warning": 30,
          "critical": 15
        },
        "format": " {icon} {capacity}%",
        "format-charging": " {capacity}%",
        "format-plugged": " {capacity}%",
        "format-alt": "{icon} {time}",
        // "format-good": "", // An empty format will hide the module
        // "format-full": "",
        "format-icons": ["", "", "", "", ""]
      },
      "battery#bat2": {
        "bat": "BAT2"
      },
      
    • network
      "network": {
        // "interface": "wlp2*", // (Optional) To force the use of this interface
        "format": "{ifname}",
        "format-wifi": "{essid} ({signalStrength}%) ",
        "format-ethernet": "{ipaddr}/{cidr} ",
        "tooltip-format": "{ifname} via {gwaddr} ",
        "format-linked": "{ifname} (No IP) ",
        "format-disconnected": "Disconnected ⚠",
        "format-alt": "{ifname}: {ipaddr}/{cidr} ({bandwidthUpBits} - {bandwidthDownBits})"
      },
      
    • wireplumber
      "wireplumber": {
        "format": "{icon} {volume}%",
        "format-icons": ["󰕿", "󰖀", "󰕾"],
        "format-muted": "",
        "on-click": "helvum",
        "on-click-right": "pavucontrol",
        "scroll-step": 0.2
      },
      
    • pulseaudio
      "pulseaudio": {
        // "scroll-step": 1, // %, can be a float
        "format": "{volume}% {icon} {format_source}",
        "format-bluetooth": "{volume}% {icon} {format_source}",
        "format-bluetooth-muted": " {icon} {format_source}",
        "format-muted": " {format_source}",
        "format-source": "{volume}% ",
        "format-source-muted": "",
        "format-icons": {
          "headphone": "",
          "hands-free": "",
          "headset": "",
          "phone": "",
          "portable": "",
          "car": "",
          "default": ["", "", ""]
        },
        "on-click": "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
      },
      
    • custom/pacman
      "custom/pacman": {
        "format": " {} update available",
        "exec": "checkupdates | wc -l",
        "exec-if": "test $(checkupdates | wc -l) -ne 0",
        "interval": 3600,
        "on-click": "checkupdates; pkill -SIGRTMIN+8 waybar"
      },
      
    • custom/launcher
      "custom/launcher":{
        "format": " ",
        "tooltip": false,
        "on-click": "rofi -show drun -theme hyprland-menu",
        "on-click-right": "killall rofi"
      },
      
    • custom/power
      "custom/power":{
        "format": " ",
        "tooltip": false,
        "on-click": "~/.local/bin/rofi-logout hyprland-logout"
      },
      
    • custom/media
      "custom/media": {
        "format": "{icon} {}",
        "return-type": "json",
        "max-length": 40,
        "format-icons": {
          "spotify": "",
          "default": "🎜"
        },
        "escape": true,
        "exec": "$HOME/.config/waybar/mediaplayer.py 2> /dev/null" // Script in resources folder
        // "exec": "$HOME/.config/waybar/mediaplayer.py --player spotify 2> /dev/null" // Filter player based on name
      }
      
  • End config
    }
    

~/.config/waybar/style.css

  • definitions
    /* Nord */
    @define-color background rgba(46, 52, 64, 1);
    @define-color background2 rgba(46, 52, 64, 0.75);
    @define-color cyan rgba(136, 192, 208, 1);
    @define-color cyan2 rgba(136, 192, 208, 0.6);
    @define-color red rgba(191, 97, 106, 1);
    @define-color red2 rgba(191, 97, 106, 0.6);
    @define-color foreground rgba(216, 222, 233, 1);
    @define-color black #161320;
    @define-color green rgba(163, 190, 140, 1);
    @define-color green2 rgba(163, 190, 140, 0.3);
    @define-color yellow rgba(235, 203, 139, 1);
    @define-color yellow2 rgba(235, 203, 139, 0.45);
    @define-color blue rgba(129, 161, 193, 1);
    @define-color blue2 rgba(129, 161, 193, 0.45);
    @define-color magenta rgba(180, 142, 173, 1);
    @define-color magenta2 rgba(180, 142, 173, 0.5);
    @define-color white rgba(229, 233, 240, 1);
    
    @define-color light #D8DEE9;
    /*@define-color dark @nord_dark_font;*/
    @define-color warning #ebcb8b;
    @define-color critical #BF616A;
    @define-color mode #434C5E;
    /*@define-color workspaces @bg;*/
    /*@define-color workspaces @nord_dark_font;*/
    /*@define-color workspacesfocused #434C5E;*/
    @define-color workspacebutton @white;
    @define-color launcher rgba(94, 129, 172, 1);
    @define-color tray @workspacesfocused;
    @define-color sound #EBCB8B;
    @define-color network #5D7096;
    @define-color memory #546484;
    @define-color cpu rgba(89, 106, 141, 1);
    @define-color keyboard rgba(163, 190, 140, 1);
    @define-color battery rgba(180, 142, 173, 1);
    @define-color temp #4D5C78;
    @define-color layout rgba(94, 129, 172, 1);
    @define-color wireplumber #88c0d0;
    @define-color date rgba(136, 192, 208, 1);
    @define-color time rgba(180, 142, 173, 1);
    @define-color backlight rgba(67, 76, 94, 1);
    @define-color nord_bg rgba(67, 76, 94, 1);
    @define-color nord_bg_blue #546484;
    @define-color nord_light #D8DEE9;
    @define-color nord_light_font #D8DEE9;
    @define-color nord_dark_font #434C5E;
    
  • global
    * {
        /* `otf-font-awesome` is required to be installed for icons */
        border: none;
        border-radius: 10px;
        font-family: FontAwesome, JetBrainsMonoNL Nerd Font Mono;
        font-size: 12px;
        min-height: 10px;
    }
    
  • keyframes
    @keyframes blink {
        to {
            background-color: @red;
            color: @cyan;
        }
    }
    
  • window
    window#waybar {
        /* background-color: @background2; */
        background-color: transparent;
        /* border-bottom: 3px solid @cyan; */
        /* color: @white; */
        /* transition-property: background-color; */
        /* transition-duration: .5s; */
    }
    
    window#waybar.hidden {
        opacity: 0.2;
    }
    
    window#waybar.empty #window {
        background-color: transparent;
    }
    
    #window {
        margin-top: 6px;
        margin-left: 8px;
        padding-left: 10px;
        padding-right: 10px;
        border-radius: 10px;
        transition: none;
        color: @black;
        background-color: @white;
        font-size:14px;
        font-weight: bold;
    }
    
  • button
    button {
        /* Use box-shadow instead of border so the text isn't offset */
        /* box-shadow: inset 0 -3px transparent; */
        /* Avoid rounded borders under each button name */
        border: none;
        border-radius: 0;
    }
    
    /* https://github.com/Alexays/Waybar/wiki/FAQ#the-workspace-buttons-have-a-strange-hover-effect */
    button:hover {
        background: inherit;
        border-top: 2px solid @red;
    }
    
  • tooltip
    tooltip {
        background: @background;
        border: 1px solid @cyan;
    }
    
    tooltip label {
        /* color: @white; */
    }
    
    label:focus {
        background-color: @background;
    }
    
  • modules
    • cpu
      #cpu {
            margin-top: 6px;
            margin-left: 8px;
            padding-left: 10px;
            margin-bottom: 0px;
            padding-right: 10px;
            border-radius: 10px;
            transition: none;
            color: @black;
            background: @cyan2;
      }
      
    • memory
      #memory {
            margin-top: 6px;
            margin-left: 8px;
            padding-left: 10px;
            margin-bottom: 0px;
            padding-right: 10px;
            border-radius: 10px;
            transition: none;
            color: @black;
            background: @magenta;
      }
      
    • keyboard-state
      #keyboard-state {
            margin-top: 6px;
            margin-left: 8px;
            padding-left: 10px;
            margin-bottom: 0px;
            padding-right: 10px;
            border-radius: 10px;
            transition: none;
            color: @black;
            background: @magenta;
      }
      
    • temperature
      #temperature {
            margin-top: 6px;
            margin-left: 8px;
            padding-left: 10px;
            margin-bottom: 0px;
            padding-right: 10px;
            border-radius: 10px;
            transition: none;
            color: @black;
            background: @red;
      }
      
    • modules-left
      .modules-left > widget:first-child > #workspaces {
          margin-left: 0;
      }
      
    • modules-right
      .modules-right > widget:last-child > #workspaces {
          margin-right: 0;
      }
      
    • mpris
      #mpris {
          /* padding: 0 4px; */
          /* font-size: 9px; */
          /* color: @warning; */
            margin-top: 6px;
            margin-left: 8px;
            padding-left: 10px;
            padding-right: 10px;
            margin-bottom: 0px;
            border-radius: 10px;
            transition: none;
            color: @black;
            background: @blue;
      }
      
    • idle_inhibitor
      #idle_inhibitor {
          color: @blue;
      }
      
      #idle_inhibitor.activated {
          color: @black;
      }
      
    • backlight
      #backlight{
          /* color: @yellow; */
            margin-top: 6px;
            margin-left: 8px;
            padding-left: 10px;
            padding-right: 10px;
            margin-bottom: 0px;
            border-radius: 10px;
            transition: none;
            color: @black;
            background: @yellow;
      }
      
    • pulseaudio
      #pulseaudio {
          /* background-color: @magenta2; */
          /* color: @wireplumber; */
            margin-top: 6px;
            margin-left: 8px;
            padding-left: 10px;
            padding-right: 10px;
            margin-bottom: 0px;
            border-radius: 10px;
            transition: none;
            color: @black;
            background: @blue;
      }
      
    • wireplumber
      #wireplumber {
          /* background-color: @magenta2; */
          color: @black;
      }
      
    • keyboard-state
      #keyboard-state {
          background: @green;
          color: @black;
      }
      
    • battery
      #battery {
          /* color: @battery; */
          /* background-color: @yellow2; */
            margin-top: 6px;
            margin-left: 8px;
            padding-left: 10px;
            padding-right: 10px;
            margin-bottom: 0px;
            border-radius: 10px;
            transition: none;
            color: @black;
            background: @magenta;
      }
      
      #battery.charging, #battery.plugged {
          /* color: @yellow; */
          /* background-color: @background; */
            color: @black;
          background-color: @magenta;
      }
      
      /* #battery.warning:not(.charging) { */
      /*     /\* background: @red; *\/ */
      /*     /\* color: @white; *\/ */
      /*     animation-name: blink; */
      /*     animation-duration: 0.5s; */
      /*     animation-timing-function: steps(12); */
      /*     animation-iteration-count: infinite; */
      /*     animation-direction: alternate; */
      /* } */
      
      #battery.critical:not(.charging) {
          /* background-color: @red; */
          /* color: @white; */
          /* animation-name: blink; */
          /* animation-duration: 0.5s; */
          /* animation-timing-function: linear; */
          /* animation-iteration-count: infinite; */
          /* animation-direction: alternate; */
          background-color: @magenta;
          color: @black;
          animation-name: blink;
          animation-duration: 0.5s;
          animation-timing-function: linear;
          animation-iteration-count: infinite;
          animation-direction: alternate;
      }
      
    • custom/pacman
      #custom-pacman {
          /* color: @black; */
          /* background-color: @green2; */
            margin-top: 6px;
            margin-left: 8px;
            padding-left: 10px;
            padding-right: 10px;
            margin-bottom: 0px;
            border-radius: 10px;
            transition: none;
            color: @black;
            background: @yellow;
      }
      
    • clock
      #clock.date {
          /* color: @date; */
          /* background-color: @magenta2; */
            margin-top: 6px;
            margin-left: 8px;
            padding-left: 10px;
            padding-right: 10px;
            margin-bottom: 0px;
            border-radius: 10px;
            transition: none;
            color: @black;
            background: @green;
      }
      
      #clock.time {
          /* color: @time; */
            margin-top: 6px;
            margin-left: 8px;
            padding-left: 10px;
            padding-right: 10px;
            margin-bottom: 0px;
            border-radius: 10px;
            transition: none;
            color: @black;
            background: @yellow;
      }
      
    • network
      #network {
          /* color: @network; */
            margin-top: 6px;
            margin-left: 8px;
            padding-left: 10px;
            padding-right: 10px;
            margin-bottom: 0px;
            border-radius: 10px;
            transition: none;
            color: @black;
            background: @magenta;
      }
      
      #network.wifi {
            color: @black;
          background: @yellow;
      }
      
      #network.ethernet {
            color: @black;
          background: @blue;
      }
      
      #network.linked {
            color: @black;
          background: @green;
      }
      
      #network.disconnected {
          color: @red;
          background: @black;
      }
      
    • custom-launcher
      #custom-launcher {
            font-size: 24px;
            margin-top: 6px;
            margin-left: 8px;
            padding-left: 10px;
            padding-right: 5px;
            border-radius: 10px;
            transition: none;
          color: @black;
          background: @blue;
      }
      
    • custom-power
      #custom-power {
            font-size: 24px;
            margin-top: 6px;
            margin-left: 8px;
            padding-left: 10px;
            padding-right: 5px;
            border-radius: 10px;
            transition: none;
            color: @black;
            background: @blue;
      }
      
  • workspaces
    #workspaces {
          margin-top: 6px;
        margin-left: 12px;
        font-size: 4px;
        margin-bottom: 0px;
        border-radius: 10px;
        background: @green;
        transition: none;
    }
    
    #workspaces button {
        /* color: @nord_light; */
        /* padding: 0 4px; */
        /* color: @workspacebutton; */
        /* font-size: 14px; */
        /* font-weight: bold; */
          transition: none;
          color: @black;
          background: transparent;
          font-size: 16px;
          border-radius: 2px;
    }
    
    #workspaces button.occupied {
          transition: none;
          color: @blue;
          background: transparent;
          font-size: 4px;
    }
    
    #workspaces button.empty {
        color: @cyan;
    }
    
    #workspaces button.active {
        font-weight: bold;
        color: @white;
    }
    
    #workspaces button:hover {
          transition: none;
          /* box-shadow: inherit; */
          /* text-shadow: inherit; */
          color: @yellow;
        /* border-color: @red; */
    }
    
    #workspaces button.focused {
        /* background-color: @black; */
        /* color: @red; */
        /* border-top: 2px solid @red; */
          color: @green;
        /* border-top: 2px solid @green; */
        /* border-bottom: 2px solid @green; */
    }
    
    #workspaces button.focused:hover {
        color: @red;
    }
    
    #workspaces button.urgent {
        background-color: @red;
    }
    
  • mode
    #mode {
        color: @black;
    }
    
  • submap
    #submap {
        color: @yellow;
    }
    
  • tray
    #tray {
          margin-top: 6px;
          margin-left: 8px;
          padding-left: 10px;
          padding-right: 10px;
          margin-bottom: 0px;
          border-radius: 10px;
          transition: none;
          color: @white;
          background: @blue;
    }
    
    #tray > .passive {
        -gtk-icon-effect: dim;
    }
    
    #tray > .needs-attention {
        -gtk-icon-effect: highlight;
        background-color: @red;
    }
    

hyprpaper

preload = ~/.local/share/wallpapers/nord/linux-friends-4k.png
preload = ~/.local/share/wallpapers/nord/keyboard.png
preload = ~/.local/share/wallpapers/nord/wild.png
preload = ~/.local/share/wallpapers/nord/nord_alone_tree.png
preload = ~/.local/share/wallpapers/nord/nord_buildings.png
splash = false

# wallpaper = eDP1,~/.local/share/wallpapers/nord/ign-hevlettpackard.png
#wallpaper = DP-1,~/.local/share/wallpapers/nord/ign-hevlettpackard.png
#wallpaper = DP-2,~/.local/share/wallpapers/nord/ign-hevlettpackard.png
#wallpaper = DP-3,~/.local/share/wallpapers/nord/ign-hevlettpackard.png
#wallpaper = DP-4,~/.local/share/wallpapers/nord/ign-hevlettpackard.png
#wallpaper = DP-5,~/.local/share/wallpapers/nord/ign-hevlettpackard.png
#wallpaper = HDMI-A-1,~/.local/share/wallpapers/nord/ign_duaAnime.png
wallpaper = ,~/.local/share/wallpapers/nord/linux-friends-4k.png

hyprshade

[[shades]]
name = "vibrance"
default = true  # shader to use during times when there is no other shader scheduled

[[shades]]
name = "blue-light-filter"
start_time = 19:00:00
end_time = 06:00:00   # optional if you have more than one shade with start_time

hyprlock

# -*- eval: (rainbow-mode 1) -*-

$text_color = rgba(D8DEE9FF)
$entry_background_color = rgba(2E344011)
$entry_border_color = rgba(3B3B3B55)
$entry_color = rgba(FFFFFFFF)
$font_family = Rubik Light
$font_family_clock = Rubik Light
$font_material_symbols = Material Symbols Rounded

background {
  monitor =
  #path = /home/mkncorp.com/kristian.alexander/.local/share/wallpapers/nord/linux-friends-4k.png   # only png supported for now
  path = screenshot
  color = rgba(000000FF)
  # all these options are taken from hyprland, see https://wiki.hyprland.org/Configuring/Variables/#blur for explanations
  blur_passes = 1 # 0 disables blurring
  blur_size = 3
  noise = 0.0117
  contrast = 0.8916
  brightness = 0.8172
  vibrancy = 0.1696
  vibrancy_darkness = 0.0
}

label { # Greeting
  monitor =
  text = <span foreground='##D8DEE9'>Hi there,</span><span foreground='##8FBCBB'> <i>$DESC</i></span>
  color = rgba(BF616AFF)
  check_color = rgba(EBCB8BFF)
  fail_color = rgba(BF616AFF) # if authentication failed, changes outer_color and fail message color
  fail_text = <span foreground='##D8DEE9'><i>$FAIL <b>($ATTEMPTS)</b></i></span> # can be set to empty
  fail_timeout = 2000 # milliseconds before fail_text and fail_color disappears
  fail_transition = 300 # transition time in ms between normal outer_color and fail_color
  shadow_passes = 1
  shadow_boost = 0.5
  color = $text_color
  font_size = 20
  font_family = $font_family

  position = 0, 240
  halign = center
  valign = center
}

label { # lock icon
  monitor =
  text = lock
  shadow_passes = 1
  shadow_boost = 0.5
  color = $text_color
  font_size = 21
  font_family = $font_material_symbols

  position = 0, 65
  halign = center
  valign = bottom
}

label { # Clock
  monitor =
  text = $TIME
  shadow_passes = 1
  shadow_boost = 0.5
  color = $text_color
  font_size = 65
  font_family = $font_family_clock

  position = 0, 300
  halign = center
  valign = center
}

input-field {
  monitor =
  size = 250, 50
  outline_thickness = 2
  dots_size = 0.1
  dots_spacing = 0.3
  outer_color = $entry_border_color
  inner_color = $entry_background_color
  font_color = $entry_color
  # fade_on_empty = true

  position = 0, 20
  halign = center
  valign = center
}

hypridle

general {
  lock_cmd = pidof hyprlock || hyprlock       # avoid starting multiple hyprlock instances.
  before_sleep_cmd = loginctl lock-session    # lock before suspend.
  # after_sleep_cmd = hyprctl dispatch dpms on  # to avoid having to press a key twice to turn on the display.
}

listener {
  timeout = 180
  on-timeout = loginctl lock-session            # lock screen when timeout has passed
}

listener {
  timeout = 240
  on-timeout = hyprctl dispatch dpms off
  on-resume = hyprctl dispatch dpms on
}

listener {
  timeout = 540
  on-timeout = pidof steam || systemctl suspend || loginctl suspend
}

Rofi configuration

hyprland-menu

This is the theme used when running rofi -show drun.

 1: /* -*-css -*- */
 2: @theme "nord"
 3: 
 4: window {
 5:     transparency: "real";
 6:     location: northwest;
 7:     anchor: center;
 8:     width: 25%;
 9:     x-offset: 0%;
10:     y-offset: 0%;
11:     fullscreen: false;
12:     margin: 0px;
13:     padding: 0px;
14: }
15: 
16: listview {
17:     columns: 1;
18:     lines: 6;
19:     spacing: 5px;
20:     cycle: true;
21:     dynamic: true;
22:     scrollbar: false;
23:     layout: vertical;
24:     reverse: false;
25:     fixed-height: true;
26:     fixed-width: true;
27: }
28: 
29: element {
30:     spacing: 10px;
31:     margin: 0px;
32:     padding: 6px;
33:     border: 0px solid;
34:     border-radius: 0px;
35:     cursor: pointer;
36: }
37: 
38: element-icon {
39:     background: transparent;
40:     text-color: inherit;
41:     size: 16px;
42:     cursor: inherit;
43: }
44: 
45: element-text {
46:     background: transparent;
47:     text-color: inherit;
48:     highlight: inherit;
49:     cursor: inherit;
50:     /* vertical-align: 0.5; */
51:     /* horizontal-align: 0.5; */
52: }
53: 
54: textbox {
55:     vertical-align: 0.5;
56:     horizontal-align: 0.0;
57:     highlight: none;
58: }

hyprland-logout

 1: /* -*-css -*- */
 2: @theme "nord"
 3: 
 4: window {
 5:     location: northeast;
 6:     anchor:   center;
 7:     transparency: "screenshot";
 8:     width: 10%;
 9:     padding: 10px;
10:     border:  0px;
11:     border-radius: 6px;
12:     x-offset: -1%;
13:     y-offset: 1%;
14:     spacing: 0;
15:     children: [mainbox];
16: }
17: 
18: listview {
19:     columns: 1;
20:     lines: 4;
21: }

hyprland-clipboard

 1: /* -*-css -*- */
 2: @theme "nord"
 3: 
 4: window {
 5:     location: center;
 6:     anchor: center;
 7:     width: 40%;
 8:     x-offset: 1%;
 9:     y-offset: -2%;
10:     /* padding-right: 25px; */
11: }
12: 
13: listview {
14:     lines: 4;
15:     dynamic: true;
16:     cycle: true;
17:     layout: vertical;
18: }

Date: 2024-03-23 Sat 00:00

Author: Kristian Alexander P

Created: 2024-08-18 Sun 01:17