Making your own garuda hyprland | Garuda Linux Community Version Available

Hello all Garudians ,
I recently switched from sway to hyprland and after using it for a while i felt like it is worth to try out ,
So here I am simply trying to make a guide so that those are interested in hyprland can start using it without doing too much adjustments and without need of smashing their head on keyboard for long hours of coding and configuring it …

So let’s begin… :fire: :fire: :fire:

step 1 : install Garuda sway on your system
step 2 : install necessary packages
copy this command and execute :

sudo pacman -Sy hyprland-git waybar-hyprland-git 
yay -Sy xdg-desktop-hyprland-git polkit-kde-git

step 3 : copy and paste some of things

first :
make a file for it’s launching , for this make a file on ~/.local/bin/
named as wrappedhl

following command will do it for you :

cd ~/.local/
mkdir bin
cd bin
touch wrappedhl

and paste this in the file created :


cd ~

# Log WLR errors and logs to the hyprland log. Recommended

# Tell XWayland to use a cursor theme
export XCURSOR_THEME=Bibata-Modern-Classic

# Set a cursor size
export XCURSOR_SIZE=24

# Example IME Support: fcitx
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
export SDL_IM_MODULE=fcitx
export GLFW_IM_MODULE=ibus

exec Hyprland

copy the hyprland config file :


# Please note not all available settings / options are set here.
# For a full list, see the wiki

#autogenerated = 1 # remove this line to remove the warning

# See

# See for more

# Execute your favorite apps at launch
# exec-once = waybar & hyprpaper & firefox

# Source a file (multi-file configs)
# source = ~/.config/hypr/myColors.conf

# For all categories, see
input {
    kb_layout = us
    kb_variant =
    kb_model =
    kb_options =
    kb_rules =

    follow_mouse = 1

    touchpad {
        natural_scroll = yes 

    sensitivity = 0 # -1.0 - 1.0, 0 means no modification.

general {
    # See 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 = dwindle

decoration {
    # See for more

    rounding = 10
    blur = yes
    blur_size = 5
    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 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 = fade, 1, 7, default
    animation = workspaces, 1, 6, default

dwindle {
    # See 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 for more
    new_is_master = true

gestures {
    # See for more
    workspace_swipe = on
misc {
	disable_hyprland_logo = true
# Example per-device config
# See for more
device:epic mouse V1 {
    sensitivity = -0.5

# Example windowrule v1
# windowrule = float, ^(kitty)$
# Example windowrule v2
# windowrulev2 = float,class:^(kitty)$,title:^(kitty)$
# See for more

# See for more
$mainMod = SUPER 

# Example binds, see for more
bind = $mainMod, 36, exec, alacritty
bind = $mainMod, Q, killactive, 
bind = $mainMod SHIFT, E, exec, nwgbar 
bind = $mainMod, N, exec, thunar
bind = $mainMod SHIFT, 65, togglefloating, 
bind = $mainMod, D, exec, wofi --show drun --allow-images
bind = $mainMod SHIFT, D, exec, nwg-drawer
bind = $mainMod, P, pseudo, # dwindle
bind = $mainMod, J, togglesplit, # dwindle

# 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

# 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 = $mainMod, mouse_down, workspace, e+1
bind = $mainMod, mouse_up, workspace, e-1

# Move/resize windows with mainMod + LMB/RMB and dragging
bindm = $mainMod, mouse:272, movewindow
bindm = $mainMod, mouse:273, resizewindow

# my config

#for studying
exec-once = wlsunset -t 2300 -T 2500
#for normal
#exec-once = wlsunset -t 3000 -T 3000 

exec-once = wpaperd

#status bar
exec-once = waybar
blurls = waybar
# set volume (laptops only and may or may not work on PCs)
bind = ,122, exec, pactl set-sink-volume @DEFAULT_SINK@ -5%
bind = ,123, exec, pactl set-sink-volume @DEFAULT_SINK@ +5%
bind = ,121, exec, pactl set-sink-volume @DEFAULT_SINK@ 0%
#other bindings
bind = $mainMod, O, exec, firefox
bind =,Print,exec,grim
bind = $mainMod, F, fullscreen
bind = $mainMod SHIFT, F, fakefullscreen
bind = ,232,exec,brightnessctl -c backlight set 5%-
bind = ,233,exec,brightnessctl -c backlight set +5%

# for resizing window
# will switch to a submap called resize

# will start a submap called "resize"

# sets repeatable binds for resizing the active window
binde=,right,resizeactive,10 0
binde=,left,resizeactive,-10 0
binde=,up,resizeactive,0 -10
binde=,down,resizeactive,0 10

# use reset to go back to the global submap

# will reset the submap, meaning end the current one and return to the global one

# to move window
bind = $mainMod SHIFT,up, movewindow, u
bind = $mainMod SHIFT,down, movewindow, d
bind = $mainMod SHIFT,left, movewindow, l
bind = $mainMod SHIFT,right, movewindow, r
# other blurings
blurls = wofi
blurls = thunar
blurls = gedit
blurls = gtk-layer-shell # for nwg-drawer
blurls = catfish
# window rules
windowrule = opacity 0.85 override 0.85 override,^(thunar)$ 
windowrule = opacity 0.85 override 0.85 override,^(gedit)$ 
windowrule = opacity 0.85 override 0.85 override,^(catfish)$ 
#window rules with evaluation
windowrulev2 = opacity 0.85 0.85,floating:1

#executions which i am not certainly sure that will work for every one yeah they are also not that much important but if work then setup will become great!!
exec-once = mako

to the file : ~/.config/hypr/hyprland.conf

now configure nwg-waybar :
paste this :

    "layer": "top", // Waybar at top layer
    "position": "top", // Waybar position (top|bottom|left|right)
    "height": 30,
    //"width": 1350, // Waybar width
    // Choose the order of the modules idle_inhibitor
    "modules-left": ["custom/launcher","wlr/workspaces", "wlr/mode", "wlr/taskbar"],
    "modules-right": ["custom/pacman", "backlight", "custom/keyboard-layout", "cpu", "memory", "battery", "network", "pulseaudio","tray", "idle_inhibitor", "clock","custom/power"], 
 // Modules configuration
    "wlr/workspaces": {
        "disable-scroll": true,
        "all-outputs": true,
        "format": "{icon}",
        "format-icons": {
		"1": "1",
		"2": "2",
		"3": "3",
		"4": "4",
		"5": "5",
		"6": "6",
		"7": "7",
		"8": "8",
		"9": "9",
		"10": "10",
    "wlr/mode": {
        "format": "<span style=\"italic\">{}</span>"
    "wlr/taskbar": {
        "format": "{icon}",
    "idle_inhibitor": {
        "format": "{icon}",
       "format-icons": {
            "activated": "",
            "deactivated": ""
    "tray": {
        "icon-size": 14,
        "spacing": 5
    "clock": {
        "tooltip-format": "{:%A %B %d %Y | %H:%M}",
        "format": " {:%a %d %b  %I:%M %p}",	//12 hour format
        //"format": " {:%a %d %b  %H:%M}",	//24 hour format
        "format-alt": " {:%d/%m/%Y  %H:%M:%S}",
        //"timezones": [ "Kolkata" ],
        //"max-length": 200
        "interval": 1
    "cpu": {
        "format": "﬙ {usage: >3}%",
        "on-click": "alacritty -e htop"
    "memory": {
        "format": " {: >3}%",
        "on-click": "alacritty -e htop"
    "temperature": {
        // "thermal-zone": 2,
        // "hwmon-path": "/sys/class/hwmon/hwmon2/temp1_input",
        "critical-threshold": 80,
        // "format-critical": "{temperatureC}°C ",
        "format": "{temperatureC}°C "
    "backlight": {
        // "device": "acpi_video1",
        "format": "{icon} {percent: >3}%",
        "format-icons": ["", ""],
        "on-scroll-down": "brightnessctl -c backlight set 1%-",
        "on-scroll-up": "brightnessctl -c backlight set +1%"
    "battery": {
        "states": {
            // "good": 95,
            "warning": 30,
            "critical": 15
        "format": "{icon} {capacity: >3}%",
        // "format-good": "", // An empty format will hide the module
        // "format-full": "",
        "format-icons": ["", "", "", "", ""]
        //"format-icons": ["", "", "", "", "", "", "", "", "", ""]
     "network": {
        // "interface": "wlp2s0", // (Optional) To force the use of this interface
        "format": "⚠ Disabled",
        "format-wifi": " {essid}",
        "format-ethernet": " {ifname}: {ipaddr}/{cidr}",
        "format-disconnected": "⚠ Disconnected",
        "on-click": "alacritty -e nmtui"
    "pulseaudio": {
        "scroll-step": 5,
        "format": "{icon} {volume: >3}%",
        "format-bluetooth": "{icon} {volume: >3}%",
        "format-muted":" muted",
        "format-icons": {
            "headphones": "",
            "handsfree": "",
            "headset": "",
            "phone": "",
            "portable": "",
            "car": "",
            "default": ["", ""]
        "on-click": "pavucontrol"
     "custom/pacman": {
        "format": " {}",
        "interval": 7200,                     // every two hours
        "exec": "i=$(checkupdates); echo \"$i\" |wc -l; echo \"$i\" |column -t |tr '\n' '\r'",       // # of updates and tooltip details
        "exec-if": "exit 0",                  // always run; consider advanced run conditions
        "on-click": "alacritty -e sudo pacman -Syu", // update system
        "signal": 8
    "custom/power": {
       	"on-click": "nwg-bar",
      	"tooltip": false,
   "custom/keyboard-layout": {
      	"exec": "swaymsg -t get_inputs | grep -m1 'xkb_active_layout_name' | cut -d '\"' -f4",
      	// Interval set only as a fallback, as the value is updated by signal
      	"interval": 30,
      	"format": "  {}", // Icon: keyboard
      	// Signal sent by Sway key binding (~/.config/sway/key-bindings)
      	"signal": 1, // SIGHUP
      	"tooltip": false,
        "on-click": "~/.config/waybar/scripts/",
     "custom/launcher": {
    	"format":" ",
    	"on-click": "exec nwg-drawer -c 7 -is 70 -spacing 23",
    	"tooltip": false,

in the file :


now let’s do something for wallpapers
install wpaperd through yay :

yay wpaperd

now paste these :

path = "your background folder path "
duration = "5m"

in file : ~/.config/wpaperd/output.conf
for example here is mine :

path = "/home/ankur/Desktop/backgrounds"
duration = "5m"

it will change the wallpapers in every five minutes
if you don’t want it and just want to have a static wallpaper , then you just don’t need to do this :
use the default background software provided by garuda and if that doesn’t work then add a swaybg command in hyprland config file like this :

exec-once = your swaybg command 

now nothing more is needed to configure just restart and switch the session to hyprland from sway
and login normally

for theming you can follow my older one topic that will work for hyprland too :


  1. don’t install hyprland-garuda-settings as it has some problems keep garuda-sway-settings as it will work for hyprland very well
  2. garuda apps will not work well so you need to run them through terminal as sudo user like this :
sudo -E garuda-assistant

(2nd tip is of no use as this had been solved in new edit now no need to do that for garuda applications , please see step 2 of installing packages and hyprland confing file)

things i am still not able to short out :

  1. not able to get the name of focused window on waybar
  2. not able to make blurring effect in nwg-drawer (solved see the hyperland config file)
  3. there is no key bindings for managing floating windows as i wasn’t able to find how to do it (solved mod+shift+space keybinding is used for that thing)

this all from my side , i made this as i thought that it’s worth trying but many people including me doesn’t wanted to read wiki and smash their head in configuring a config file on the keyboard, but that was the only option to try it out

if someone finds the solutions of problem to mention here then please share

Thank you

you guys can tell me if i missed some essential step in this guide


You can take these as inspiration as well:


Thanks :smile:

As a happy Sway user, I’m seriously tempted.

Is the situation different from Sway / anything Wayland?
At least on my Sway (installed december 2021, and possibly a little messed up by me) most now work fine running from wofi, only garuda-network-assistant needs sudo -E. I wonder if that message I noticed in an upgrade some time ago about seatd is the answer, but I’ve yet to look into that.

Does wlr/taskbar (man waybar-wlr-taskbar) work?


I think it should get fixed but as i have just added hyprland session over wayland so maybe because that i am facing it ,
Garuda application even if you just open through wofi it will open normally but doesn’t accepts password somehow so by doing this i am ensuring that it has already root password

I never needed it for network manager when i was using sway , i just needed it for snapper

Thanks for suggesting that, i will try it out as soon as i get some time

Yeah that worked
edited and added it in main post

Very Nice work OP

I found this

[HYPRLAND] - because sway is not enough!


@Ankur I wish you didn’t post this–I’ve spent nearly three hours screwing around with this today. :joy:

Seriously though, Hyprland is really nice. I probably wouldn’t have bothered setting it up if you hadn’t posted this because I have been really happy with Sway for a long time, and it didn’t seem different enough to bother. I’m really impressed though; you can definitely go pretty deep with the customization.

Do you mean transparency? You can change it right in the config, the first few lines of ~/.config/nwg-drawer/drawer.css:

window {
    background-color: rgba (36, 47, 79, 0.7);
    color: #eeeeee

That “0.7” is the transparency value, looks like this:

A lower value is more transparent. I think the value in your config above is .95, which is basically opaque.

Managing them in what way? You already have a keybinding set in ~/.config/hypr/hyprland.conf to allow windows to be toggled between floating and tiling, if that’s what you mean:

If you mean managing them like the “scratchpad” in Sway, in Hyprland they call them “special workspaces”, check this part of the wiki:


7 posts were split to a new topic: Netspeed in Waybar | Under Construction

I thought this too next after after posting
(Why i am doing this?)

No i am not talking about that
Transparency i have already achieved
But bluring effect provided by hyprland doesn’t works in nwg-drawer

Hmm… i didn’t noticed that it is provided by default :sweat_smile:
Not really good in noticing things :grimacing:

Thanks will try to add it too…

Yeah many have this thing in mind
I just wanted to try it out
Then i realised that it working more fast in my laptop
Like when i use to log in sway it used to take atleast 5 to 6 seconds to show me just wallpaper and then 2 extra seconds for loading waybar
And opening other things like firefox also usually took atleas 5 seconds for first time in sway
But in hyprland for me it was just snappier

Second thing there is only single file where you can keep on adding stuffs that was not in case of sway

And also for me switching was easy from sway to hyprland as almoat everything was done for me already there.

1 Like

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.

you guys should consider making a hyprland version. I had way better experience with it than sway

Already attempted to a while back:

In the end I stopped working on it after finding out I wasn't satisfied with it and returned to dr460nized :sweat_smile: there is nothing stopping anyone from stepping in and starting to maintain a Hyprland version, but until we find a maintainer, there won't be any Hyprland ISO sadly.


Just in case.

Logo is ready :wink:


I couldn't find a decent SVG file, so I had to create one myself.


I will try to make a trial ISO by my own self and will give here

But let my exams be over first :wink:


We can provide you with ISO builds and a separate community branch for building the, if needed :blush:


Ya sure !!

But not now as I will not be able to work on it for a month, I will ask you in DM for that when I will get free

Thanks :smile:


Inspired by @Ankur :smiley:


Test user needed :slight_smile:

garuda-hyprland-linux-zen-230520.iso built successfully!