#+title: Configuration for Hyprland
#+PROPERTY: header-args :mkdirp yes
#+STARTUP: overview
* Hyprland
** Config
*** Keyboard & monitors
#+begin_src conf :tangle ~/.config/hypr/hyprland.conf
# See https://wiki.hyprland.org/Configuring/Monitors/
monitor=transform,preferred,auto,auto
# See https://wiki.hyprland.org/Configuring/Keywords/ for more
# Some default env vars.
env = XCURSOR_SIZE,24
# For all categories, see https://wiki.hyprland.org/Configuring/Variables/
input {
kb_layout = us,gr,my-cyr
kb_variant =
kb_model =
kb_options = ctrl:swapcaps, grp:alt_space_toggle,
kb_rules =
follow_mouse = 1
touchpad {
natural_scroll = no
}
sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
}
#+end_src
*** Style
#+begin_src conf :tangle ~/.config/hypr/hyprland.conf
general {
# See https://wiki.hyprland.org/Configuring/Variables/ for more
gaps_in = 5
gaps_out = 10
border_size = 2
col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg
col.inactive_border = rgba(595959aa)
layout = master
}
decoration {
# See https://wiki.hyprland.org/Configuring/Variables/ for more
active_opacity = 0.99
inactive_opacity = 0.97
rounding = 10
blur = no
blur_size = 3
blur_passes = 1
blur_new_optimizations = on
drop_shadow = yes
shadow_range = 4
shadow_render_power = 3
col.shadow = rgba(1a1a1aee)
}
animations {
enabled = yes
# Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
bezier = myBezier, 0.05, 0.9, 0.1, 1.05
animation = windows, 1, 7, myBezier
animation = windowsOut, 1, 7, default, popin 80%
animation = border, 1, 10, default
animation = borderangle, 1, 8, default
animation = fade, 1, 7, default
animation = workspaces, 1, 6, default
}
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 = yes # you probably want this
}
master {
# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
new_is_master = false
mfact = 0.53
}
gestures {
# See https://wiki.hyprland.org/Configuring/Variables/ for more
workspace_swipe = off
}
# Personal Configuration for Hyprland
# Thanos Apollo 2023
# See https://wiki.hyprland.org/Configuring/ for more
device:epic mouse V1 {
sensitivity = -0.5
}
#+end_src
*** Keybindings
#+begin_src conf :tangle ~/.config/hypr/hyprland.conf
# See https://wiki.hyprland.org/Configuring/Keywords/ for more
$mainMod = CTRL_ALT
# Binds, see https://wiki.hyprland.org/Configuring/Binds/ for more
bind = , F5, exec, "/home/$USER/Developer/scripts/keyboard-light-x220.sh"
bind = , F1, exec, swaylock --screenshot --clock --effect-blur 10x9 --indicator
bind = , F8, exec, brightnessctl set +5%
bind = , F7, exec, brightnessctl set 5-%
bind = , XF86AudioRaiseVolume, exec, pamixer -i 5
bind = , XF86AudioLowerVolume, exec, pamixer -d 5
bind = , XF86AudioMute, exec, pamixer -t
bind = $mainMod, Return, exec, emacsclient -c
bind = $mainMod, W, exec, kitty
bind = $mainMod, Q, killactive,
bind = $mainMod SHIFT, Q, exit,
bind = $mainMod, R, exec, rofi -show drun
bind = $mainMod, E, exec, tessen --dmenu=rofi
bind = $mainMod, V, togglefloating,
bind = $mainMod, J, togglesplit, # dwindle
bind = ALT, F12, exec, grim -g "$(slurp)"
bind = ALT, F11, fullscreen
# Move focus with mainMod + arrow keys
bind = $mainMod, B, movefocus, l
bind = $mainMod, F, movefocus, r
bind = $mainMod, N, movefocus, d
bind = $mainMod, P, movefocus, u
bind = $mainMod SHIFT, P, movewindow, u
bind = $mainMod SHIFT, N, movewindow, d
bind = $mainMod SHIFT, F, movewindow, r
bind = $mainMod SHIFT, B, movewindow, l
# Switch workspaces with mainMod + [0-9]
bind = $mainMod, 1, workspace, 1
bind = $mainMod, 2, workspace, 2
bind = $mainMod, 3, workspace, 3
bind = $mainMod, 4, workspace, 4
bind = $mainMod, 5, workspace, 5
bind = $mainMod, 6, workspace, 6
bind = $mainMod, 7, workspace, 7
bind = $mainMod, 8, workspace, 8
bind = $mainMod, 9, workspace, 9
bind = $mainMod, 0, workspace, 10
# 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
# Scroll through existing workspaces with mainMod + scroll
bind = ALT, mouse_down, workspace, e+1
bind = ALT, mouse_up, workspace, e-1
# Move/resize windows with mainMod + LMB/RMB and dragging
bindm = ALT, mouse:272, movewindow
bindm = ALT, mouse:273, resizewindow
#+end_src
*** Exec upon start
#+begin_src conf :tangle ~/.config/hypr/hyprland.conf
exec-once = waybar
exec = hyprpaper
exec-once = emacs --daemon
exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
exec-once = nm-applet
#+end_src
** Hyprpaper
#+begin_src conf :tangle ~/.config/hypr/hyprpaper.conf
preload = ~/wallpapers/wallpaper-cyberpunk.jpg
preload = ~/wallpapers/science-athlete.jpg
preload = ~/wallpapers/robo-girl.jpg
preload = ~/wallpapers/chalk-board-wallpapers.jpg
wallpaper = DP-1, ~/wallpapers/chalk-board-wallpapers.jpg
wallpaper = HDMI-A-1, ~/wallpapers/chalk-board-wallpapers.jpg
wallpaper = LVDS-1, ~/wallpapers/science-athlete.jpg
#+end_
* Waybar
** Configuration
#+begin_src jsonc :tangle ~/.config/waybar/config.jsonc
{
"layer": "top",
"position": "top",
"mod": "dock",
"exclusive": true,
"passthrough": false,
"gtk-layer-shell": true,
"height": 0,
"modules-left": [
"clock",
"custom/weather"
// "hyprland/window",
],
"modules-center": ["wlr/workspaces"],
"modules-right": [
"tray",
"custom/updates",
"custom/language",
"battery",
"backlight",
"custom/volume"
// "pulseaudio#microphone"
],
"hyprland/window": {
"format": "{}"
},
"wlr/workspaces": {
"disable-scroll": true,
"all-outputs": true,
"on-click": "activate",
//"format": "{icon}",
"persistent_workspaces": {
"1": [],
"2": [],
"3": [],
"4": [],
"5": [],
"6": [],
"7": [],
"8": [],
"9": [],
"10": []
}
},
"custom/updates": {
"exec": "(pacman -Qu ; paru -Qua) | wc -l",
"interval": 7200,
"format": " {}"
},
"custom/weather" : {
"tooltip" : true,
"format" : "{}",
"interval" : 30,
"exec" : "~/Developer/scripts/waybar-wttr.py",
"return-type" : "json"
},
"tray": {
"icon-size": 13,
"spacing": 10
},
"clock": {
"format": "{: %R %d/%m}",
"tooltip-format": "{:%Y %B}\n{calendar}"
},
"backlight": {
"device": "intel_backlight",
"format": "{icon} {percent}%",
"format-icons": ["", "", ""],
"on-scroll-up": "brightnessctl set 1%+",
"on-scroll-down": "brightnessctl set 1%-",
"min-length": 6
},
"battery": {
"states": {
"good": 95,
"warning": 30,
"critical": 20
},
"format": "{icon} {capacity}%",
"format-charging": " {capacity}%",
"format-plugged": " {capacity}%",
"format-alt": "{time} {icon}",
"format-icons": ["", "", "", "", "", "", "", "", "", "", ""]
},
"pulseaudio": {
"format": "{icon} {volume}%",
"tooltip": false,
"format-muted": " Muted",
"on-click": "pamixer -t",
"on-scroll-up": "pamixer -i 5",
"on-scroll-down": "pamixer -d 5",
"scroll-step": 5,
"format-icons": {
"headphone": "",
"hands-free": "",
"headset": "",
"phone": "",
"portable": "",
"car": "",
"default": ["", "", ""]
}
},
"custom/volume": {
"exec": "pamixer --get-volume",
"interval": 1,
"format": " {}%",
"tooltip": true
}
// "custom/pipewire": {
// "format": {},
// "exec": "awk -F"[][]" '/Left:/ { print $2 }' <(amixer sget Master)",
// "interval": 10
// },
}
#+end_src
** Style
#+begin_src css :tangle ~/.config/waybar/style.css
,* {
border: none;
border-radius: 0;
font-family: Jetbrains Mono, Cartograph CF Nerd Font, monospace;
font-weight: bold;
font-size: 14px;
min-height: 0;
}
window#waybar {
background: rgba(21, 18, 27, 0);
color: #cdd6f4;
}
tooltip {
background: #0d1017;
border-radius: 10px;
border-width: 2px;
border-style: solid;
border-color: #11111b;
}
#workspaces button {
padding: 5px;
color: #313244;
margin-right: 5px;
}
#workspaces button.active {
color: #39bae6;
}
#workspaces button.focused {
color: #a6adc8;
background: #eba0ac;
border-radius: 10px;
}
#workspaces button.urgent {
color: #11111b;
background: #a6e3a1;
border-radius: 10px;
}
#workspaces button:hover {
background: #11111b;
color: #cdd6f4;
border-radius: 10px;
}
#custom-language,
#custom-updates,
#custom-caffeine,
#custom-weather,
#window,
#clock,
#battery,
#pulseaudio,
#custrom-volume,
#network,
#workspaces,
#tray,
#backlight {
background: #0d1017;
padding: 0px 10px;
margin: 3px 0px;
margin-top: 10px;
border: 1px solid #181825;
}
#tray {
border-radius: 10px;
margin-right: 10px;
}
#workspaces {
background: #0d1017;
border-radius: 10px;
margin-left: 10px;
padding-right: 0px;
padding-left: 5px;
}
#custom-caffeine {
color: #89dceb;
border-radius: 10px 0px 0px 10px;
border-right: 0px;
margin-left: 10px;
}
#custom-language {
color: #f38ba8;
border-left: 0px;
border-right: 0px;
}
#custom-updates {
color: #ff8f40;
border-left: 0px;
border-right: 0px;
}
#window {
border-radius: 10px;
margin-left: 20px;
margin-right: 60px;
}
#clock {
color: #39bae6;
border-radius: 10px 0px 0px 10px;
margin-left: 0px;
border-right: 0px;
}
#network {
color: #f9e2af;
border-left: 0px;
border-right: 0px;
}
#pulseaudio {
color: #59c2ff;
border-left: 5px;
border-right: 5px;
}
#custom-volume {
background: #0d1017;
color: #59c2ff;
padding: 8px;
margin-top: 11px;
margin-bottom: 3px;
border-left: 0px;
border-right: 0px;
}
#battery {
color: #a6e3a1;
border-radius: 0 10px 10px 0;
margin-right: 10px;
border-left: 0px;
}
#custom-weather {
border-radius: 0px 10px 10px 0px;
border-right: 0px;
margin-left: 0px;
}
#+end_src