hyprwm / Hyprland

Hyprland is an independent, highly customizable, dynamic tiling Wayland compositor that doesn't sacrifice on its looks.
https://hyprland.org
BSD 3-Clause "New" or "Revised" License
21.22k stars 895 forks source link

[WEIRD + DRM related?] Stuttering every few seconds, but only on first launch after bootup [Framework 16, iGPU AMD Radeon 780M] #8233

Closed b4shful closed 1 day ago

b4shful commented 2 days ago

Already reported ? *

Regression?

No

System Info and Version

System/Version info ```sh Hyprland 0.44.0 built from branch main at commit 3cec45d82113051d35e846e5d80719d8ea0f7002 (Improve hyprland-session.service (8225)). Date: Thu Oct 24 15:50:53 2024 Tag: v0.44.0-73-g3cec45d8, commits: 5372 built against aquamarine 0.4.2 flags set: debug System Information: System name: Linux Node name: lobster-framework-arch Release: 6.11.5-arch1-1 Version: #1 SMP PREEMPT_DYNAMIC Tue, 22 Oct 2024 18:31:38 +0000 GPU information: c1:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Phoenix1 [1002:15bf] (rev c1) (prog-if 00 [VGA controller]) os-release: NAME="Arch Linux" PRETTY_NAME="Arch Linux" ID=arch BUILD_ID=rolling ANSI_COLOR="38;2;23;147;209" HOME_URL="https://archlinux.org/" DOCUMENTATION_URL="https://wiki.archlinux.org/" SUPPORT_URL="https://bbs.archlinux.org/" BUG_REPORT_URL="https://gitlab.archlinux.org/groups/archlinux/-/issues" PRIVACY_POLICY_URL="https://terms.archlinux.org/docs/privacy-policy/" LOGO=archlinux-logo plugins: ======Config-Start====== Config File: /home/joel/.config/hypr/hyprland.conf: Read Succeeded # This file sources other files in `hyprland` and `custom` folders # You wanna add your stuff in file in `custom` # Defaults #source=~/.config/hypr/hyprland/env.conf #source=~/.config/hypr/hyprland/execs.conf #source=~/.config/hypr/hyprland/general.conf #source=~/.config/hypr/hyprland/rules.conf #source=~/.config/hypr/hyprland/colors.conf #source=~/.config/hypr/hyprland/keybinds.conf # Custom JOEL ALL CUSTOM source=~/.config/hypr/custom/env.conf source=~/.config/hypr/custom/execs.conf source=~/.config/hypr/custom/general.conf source=~/.config/hypr/custom/rules.conf source=~/.config/hypr/custom/colors.conf source=~/.config/hypr/custom/keybinds.conf Config File: /home/joel/.config/hypr/custom/env.conf: Read Succeeded # ######### Input method ########## # See https://fcitx-im.org/wiki/Using_Fcitx_5_on_Wayland # env = QT_IM_MODULE, fcitx # env = XMODIFIERS, @im=fcitx # env = GTK_IM_MODULE, wayland # Crashes electron apps in xwayland # env = GTK_IM_MODULE, fcitx # My Gtk apps no longer require this to work with fcitx5 hmm # env = SDL_IM_MODULE, fcitx # env = GLFW_IM_MODULE, ibus # env = INPUT_METHOD, fcitx # ############ Themes ############# env = QT_QPA_PLATFORM, wayland env = QT_QPA_PLATFORMTHEME, qt5ct # env = QT_STYLE_OVERRIDE,kvantum # env = WLR_NO_HARDWARE_CURSORS, 1 # ######## Screen tearing ######### # env = WLR_DRM_NO_ATOMIC, 1 # ############ Others ############# # JOEL ADDED (it seems?) env = XDG_MENU_PREFIX, arch- env = HYPRCURSOR_SIZE,24 Config File: /home/joel/.config/hypr/custom/execs.conf: Read Succeeded # You can make apps auto-start here # Relevant Hyprland wiki section: https://wiki.hyprland.org/Configuring/Keywords/#executing # Bar, wallpaper exec-once = swww-daemon --format xrgb exec-once = /usr/lib/geoclue-2.0/demos/agent exec-once = ags & # Input method # exec-once = fcitx5 # Core components (authentication, lock screen, notification daemon) exec-once = gnome-keyring-daemon --start --components=secrets exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 || /usr/libexec/polkit-gnome-authentication-agent-1 exec-once = hypridle exec-once = dbus-update-activation-environment --all exec-once = sleep 1 && dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP # Some fix idk exec-once = systemctl --user start kanshi.service exec-once = hyprpm reload # Audio exec-once = easyeffects --gapplication-service # Clipboard: history # exec-once = wl-paste --watch cliphist store & exec-once = wl-paste --type text --watch cliphist store exec-once = wl-paste --type image --watch cliphist store # Cursor exec-once = hyprctl setcursor phinger-cursors-dark 24 Config File: /home/joel/.config/hypr/custom/general.conf: Read Succeeded # Put general config stuff here # Here's a list of every variable: https://wiki.hyprland.org/Configuring/Variables/ # MONITOR CONFIG monitor=eDP-1,preferred,auto,auto monitor=desc:HP Inc. HP E24q G5 CNC4152RH4,highrr,auto-up,1.25 # monitor=desc:Sharp Corporation 0x1449,preferred,auto,1.5 # monitor=,addreserved, 0, 0, 0, 0 # The "plugging in random monitors" rule (e.g plugging laptop into HDMI) monitor=,preferred,auto-up,auto # monitor=HDMI-A-1,1920x1080@60,1920x0,1,mirror,eDP-1 # CHANGED BY JOEL # unscale XWayland xwayland { force_zero_scaling = true } # env = GDK_SCALE,1.5 input { # Keyboard: Add a layout and uncomment kb_options for Win+Space switching shortcut kb_layout = gb # kb_options = grp:win_space_toggle # CHANGED BY JOEL for framework numlock_by_default = false repeat_delay = 250 repeat_rate = 35 touchpad { natural_scroll = yes disable_while_typing = true clickfinger_behavior = false scroll_factor = 0.5 } special_fallthrough = true # CHANGED BY JOEL follow_mouse = 2 # Setting to 0 stops cursor movement from changing the focus between tiled/floating windows # The default (1) was quite annoying, floating windows essentially ignored the follow_mouse setting # And focus moved back and forth between tiled (often the parent) and floating just by moving the mouse back and forth float_switch_override_focus = 0 # accel_profile = adaptive # sensitivity = 0 } # JOEL Custom settings for MX Master device { name = logitech-wireless-mouse-mx-master-3-1 sensitivity = 0.3 accel_profile = flat } binds { # focus_window_on_workspace_c# For Auto-run stuff see execs.confhange = true scroll_event_delay = 0 allow_workspace_cycles = true } gestures { workspace_swipe = true workspace_swipe_distance = 700 workspace_swipe_fingers = 4 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 } general { # Gaps and border gaps_in = 1 gaps_out = 2 gaps_workspaces = 50 border_size = 1 # Fallback colors col.active_border = rgba(0DB7D4FF) col.inactive_border = rgba(31313600) resize_on_border = true # CHANGED BY JOEL # This is the default anyways and probs won't do anything with such thin borders extend_border_grab_area = 15 no_focus_fallback = false layout = dwindle # focus_to_other_workspaces = true # ahhhh i still haven't properly implemented this allow_tearing = true # This just allows the `immediate` window rule to work } dwindle { preserve_split = true smart_split = false smart_resizing = false # CHANGED BY JOEL # force split = 2: always split to right (or bottom) force_split = 2 } decoration { rounding = 0 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 } # Shadow drop_shadow = true shadow_ignore_window = true shadow_range = 20 shadow_offset = 0 2 shadow_render_power = 4 col.shadow = rgba(0000002A) # Shader # screen_shader = ~/.config/hypr/shaders/nothing.frag # screen_shader = ~/.config/hypr/shaders/vibrance.frag # Dim dim_inactive = false dim_strength = 0.1 dim_special = 0 } animations { enabled = true # Animation curves 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 configs 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 = layers, 1, 2, md3_decel, slide 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 = workspaces, 1, 2.5, softAcDecel, slide # animation = workspaces, 1, 7, menu_decel, slidefade 15% # animation = specialWorkspace, 1, 3, md3_decel, slidefadevert 15% animation = specialWorkspace, 1, 3, md3_decel, slidevert } misc { vfr = 1 vrr = 1 # layers_hog_mouse_focus = true # false is the default for focus_on_activate # for some reason dots-hyprland used to set it to true # which caused some apps (e.g GNOME apps, Firefox) to move cursor to top left when opened focus_on_activate = false animate_manual_resizes = false animate_mouse_windowdragging = false enable_swallow = false swallow_regex = (foot|kitty|allacritty|Alacritty) disable_hyprland_logo = true force_default_wallpaper = 0 new_window_takes_over_fullscreen = 2 allow_session_lock_restore = true # It makes your apps open on the workspace they were opened on. For example: # - you open a launcher and launch an app on workspace 1 # - you switch to workspace 2 before it opens # - the app will now open on workspace 1 regardless # Also for slower loading apps it means they will open on the workspace they were invoked on, rather than the current # workspace at the time the app loads (so if you switch workspaces before it loads, it doesn't come with you) # 1 (default) is single-shot, 2 is persistent (all children too) # tbh not entirely sure what 2/persistent actually means initial_workspace_tracking = 1 } # Overview plugin { hyprexpo { columns = 3 gap_size = 5 bg_col = rgb(000000) workspace_method = first 1 # [center/first] [workspace] e.g. first 1 or center m+1 enable_gesture = false # laptop touchpad, 4 fingers gesture_distance = 300 # how far is the "max" gesture_positive = false } } Config File: /home/joel/.config/hypr/custom/rules.conf: Read Succeeded # ######## Window rules ######## # Custom/specific rules for individual apps # Place rules for individual apps in their own .conf file within the apprules directory # WARNING: Any .conf files placed in the apprules directory WILL be sourced and therefore applied to the hyprland config! source = ~/.config/hypr/custom/apprules/*.conf # The rest of the rules in here are more general/global rules (or rules I haven't split into their own files yet) windowrule = noblur,.* # windowrule = opacity 0.89 override 0.89 override, .* # Applies transparency to EVERY WINDOW windowrule = float, ^(blueberry.py)$ windowrule = float, ^(steam)$ windowrule = float, ^(guifetch)$ # FlafyDev/guifetch windowrulev2 = tile, class:(dev.warp.Warp) windowrulev2 = float, title:^([Pp]icture[-\s]?[Ii]n[-\s]?[Pp]icture)(.*)$ 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)(.*)$ # Picture-in-Picture windowrulev2 = keepaspectratio, title:^(Picture(-| )in(-| )[Pp]icture)$ # windowrulev2 = move 73% 72%,title:^(Picture(-| )in(-| )[Pp]icture)$ # windowrulev2 = size 25%, title:^(Picture(-| )in(-| )[Pp]icture)$ # The float rule is already specified above # windowrulev2 = float, title:^(Picture(-| )in(-| )[Pp]icture)$ windowrulev2 = pin, title:^(Picture(-| )in(-| )[Pp]icture)$ # 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)(.*)$ windowrule=size 60% 72%,title:^(Open File)(.*)$ windowrule=size 60% 72%,title:^(Select a File)(.*)$ windowrule=size 60% 72%,title:^(Choose wallpaper)(.*)$ windowrule=size 60% 72%,title:^(Open Folder)(.*)$ windowrule=size 60% 72%,title:^(Save As)(.*)$ windowrule=size 60% 72%,title:^(Library)(.*)$ windowrule=size 60% 72%,title:^(File Upload)(.*)$ # Tearing windowrule=immediate,.*\.exe windowrulev2=immediate,class:(steam_app) # No shadow for tiled windows windowrulev2 = noshadow,floating:0 # ######## Layer rules ######## 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 # ags layerrule = animation slide left, sideleft.* layerrule = animation slide right, 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 # Ref https://wiki.hyprland.org/Configuring/Workspace-Rules/ # "Smart gaps" / "No gaps when only" # uncomment all three if you wish to use that. workspace = w[t1], gapsout:0, gapsin:0, border: 0, rounding:0 workspace = w[tg1], gapsout:0, gapsin:0, border: 0, rounding:0 workspace = f[1], gapsout:0, gapsin:0, border: 0, rounding:0 Config File: /home/joel/.config/hypr/custom/apprules/minimeters.conf: Read Succeeded # Float all MiniMeters windows windowrulev2 = float, class:^(MiniMeters)$ Config File: /home/joel/.config/hypr/custom/apprules/qalculate.conf: Read Succeeded # Qalculate windowrulev2=float, class:(qalculate-gtk), title:(Qalculate!) windowrulev2=center, class:(qalculate-gtk), title:(Qalculate!) windowrulev2=size 55% 65%, class:(qalculate-gtk), title:(Qalculate!) Config File: /home/joel/.config/hypr/custom/apprules/wine.conf: Read Succeeded # Wine virtual desktop - the window should be big, not movable, not floating, not rounded # Tile it (it floats by default) and move it to an empty workspace - explorer.exe is the whole desktop (not just file explorer!) windowrulev2 = tile, class:^(explorer.exe)$, title:^(.*- Wine desktop)$ windowrulev2 = workspace emptynm, class:^(explorer.exe)$, title:^(.*- Wine desktop)$ # BOTTLES SPECIFIC WINE APPS (seem to all have class steam_proton even when not using Proton) # Bottles environment Wine virtual desktop (distinct from normal wine environment and its virtual desktop!) # Tile it (it floats by default) and move it to an empty workspace - explorer.exe is the whole desktop (not just file explorer!) windowrulev2 = tile, class:^(steam_proton)$, title:^(.*- Wine desktop)$ windowrulev2 = workspace emptynm, class:^(steam_proton)$, title:^(.*- Wine desktop)$ # Bottles LTspice (runs real nice without using virtual desktop!) windowrulev2 = tile, class:^(steam_proton)$, title:^(LTspice)$ Config File: /home/joel/.config/hypr/custom/apprules/wolfram-system-modeler.conf: Read Succeeded # Wolfram system modeler XWayland (not wine) # Set QT_SCALE_FACTOR=1.6 in the desktop files # Initial "register pls" screen windowrulev2 = center, class:^(SystemModeler)$, title:^(Wolfram Product Activation)$ windowrulev2 = workspace emptynm, class:^(SystemModeler)$, title:^(Wolfram Product Activation)$ # Loading screen/splash windowrulev2 = center, class:^(SystemModeler)$, title:^(SystemModeler)$ # Main screen windowrulev2 = tile, class:^(SystemModeler)$, title:^(Wolfram System Modeler Model Center 14.1)$ # Welcome screen/quick start windowrulev2 = tile, class:^(SystemModeler)$, title:^(Welcome to Wolfram System Modeler)$ # Wayland native is possible by just clearing the display environment variable!! e.g "DISPLAY= " or "env DISPLAY= " in a desktop file # Clear QT_SCALE_FACTOR and those others, it just works on wayland automatically # Wolfram SystemModeler Wayland native! # Doesn't seem like it needs any rules right now # Window classes/names are in ~/wolfram-wayland-log.txt Config File: /home/joel/.config/hypr/custom/colors.conf: Read Succeeded # exec = export SLURP_ARGS='-d -c FFDAD4BB -b 673B3444 -s 00000000' general { col.active_border = rgba(F7DCDE39) col.inactive_border = rgba(A58A8D30) } misc { background_color = rgba(1D1011FF) } plugin { hyprbars { # Honestly idk if it works like css, but well, why not bar_text_font = Rubik, Geist, AR One Sans, Reddit Sans, Inter, Roboto, Ubuntu, Noto Sans, sans-serif bar_height = 30 bar_padding = 10 bar_button_padding = 5 bar_precedence_over_border = true bar_part_of_window = true bar_color = rgba(1D1011FF) col.text = rgba(F7DCDEFF) # example buttons (R -> L) # hyprbars-button = color, size, on-click hyprbars-button = rgb(F7DCDE), 13, 󰖭, hyprctl dispatch killactive hyprbars-button = rgb(F7DCDE), 13, 󰖯, hyprctl dispatch fullscreen 1 hyprbars-button = rgb(F7DCDE), 13, 󰖰, hyprctl dispatch movetoworkspacesilent special } } windowrulev2 = bordercolor rgba(FFB2BCAA) rgba(FFB2BC77),pinned:1 Config File: /home/joel/.config/hypr/custom/keybinds.conf: Read Succeeded # Lines ending with `# [hidden]` won't be shown on cheatsheet # Lines starting with #! are section headings bindl = Alt ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_SOURCE@ toggle # [hidden] bindl = Super ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_SOURCE@ toggle # [hidden] bindl = ,XF86AudioMute, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 0% # [hidden] bindl = Super+Shift,M, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 0% # [hidden] bindle=, XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+ # [hidden] bindle=, XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%- # [hidden] # Uncomment these if you can't get AGS to work #bindle=, XF86MonBrightnessUp, exec, brightnessctl set '12.75+' #bindle=, XF86MonBrightnessDown, exec, brightnessctl set '12.75-' #! ##! Essentials for beginners bind = Super, T, exec, foot # Launch foot (terminal) bind = , Super, exec, true # Open app launcher bind = Ctrl+Super, T, exec, ~/.config/ags/scripts/color_generation/switchwall.sh # Change wallpaper ##! Actions # Screenshot, Record, OCR, Color picker, Clipboard history bind = Super, V, exec, pkill fuzzel || cliphist list | fuzzel --match-mode fzf --dmenu | cliphist decode | wl-copy # Clipboard history >> clipboard bind = Super, Period, exec, pkill fuzzel || ~/.local/bin/fuzzel-emoji # Pick emoji >> clipboard bind = Ctrl+Shift+Alt, Delete, exec, pkill wlogout || wlogout -p layer-shell # [hidden] bind = Super+Shift, S, exec, ~/.config/ags/scripts/grimblast.sh --freeze copy area # Screen snip bind = Super+Shift+Alt, S, exec, grim -g "$(slurp)" - | swappy -f - # Screen snip >> edit # OCR bind = Super+Shift,T,exec,grim -g "$(slurp $SLURP_ARGS)" "tmp.png" && tesseract -l eng "tmp.png" - | wl-copy && rm "tmp.png" # Screen snip to text >> clipboard bind = Ctrl+Super+Shift,S,exec,grim -g "$(slurp $SLURP_ARGS)" "tmp.png" && tesseract "tmp.png" - | wl-copy && rm "tmp.png" # [hidden] # Color picker bind = Super+Shift, C, exec, hyprpicker -a # Pick color (Hex) >> clipboard # Fullscreen screenshot bindl=,Print,exec,grim - | wl-copy # Screenshot >> clipboard bindl= Ctrl,Print, exec, mkdir -p ~/Pictures/Screenshots && ~/.config/ags/scripts/grimblast.sh copysave screen ~/Pictures/Screenshots/Screenshot_"$(date '+%Y-%m-%d_%H.%M.%S')".png # Screenshot >> clipboard & file # Recording stuff bind = Super+Alt, R, exec, ~/.config/ags/scripts/record-script.sh # Record region (no sound) bind = Ctrl+Alt, R, exec, ~/.config/ags/scripts/record-script.sh --fullscreen # [hidden] Record screen (no sound) bind = Super+Shift+Alt, R, exec, ~/.config/ags/scripts/record-script.sh --fullscreen-sound # Record screen (with sound) ##! Session bind = Ctrl+Super, L, exec, ags run-js 'lock.lock()' # [hidden] bind = Super, L, exec, loginctl lock-session # Lock bind = Super+Shift, L, exec, loginctl lock-session # [hidden] bindl = Super+Shift, L, exec, sleep 0.1 && systemctl suspend || loginctl suspend # Suspend system bind = Ctrl+Shift+Alt+Super, Delete, exec, systemctl poweroff || loginctl poweroff # [hidden] Power off #! ##! Window management # Focusing #/# bind = Super, ←/↑/→/↓,, # Move focus in direction bind = Super, Left, movefocus, l # [hidden] bind = Super, Right, movefocus, r # [hidden] bind = Super, Up, movefocus, u # [hidden] bind = Super, Down, movefocus, d # [hidden] bind = Super, BracketLeft, movefocus, l # [hidden] bind = Super, BracketRight, movefocus, r # [hidden] bindm = Super, mouse:272, movewindow bindm = Super, mouse:273, resizewindow bind = Super, Q, killactive, bind = Super+Shift+Alt, Q, exec, hyprctl kill # Pick and kill a window ##! Window arrangement #/# bind = Super+Shift, ←/↑/→/↓,, # Window: move in direction bind = Super+Shift, Left, movewindow, l # [hidden] bind = Super+Shift, Right, movewindow, r # [hidden] bind = Super+Shift, Up, movewindow, u # [hidden] bind = Super+Shift, Down, movewindow, d # [hidden] # Window split ratio #/# binde = Super, +/-,, # Window: split ratio +/- 0.1 binde = Super, Minus, splitratio, -0.1 # [hidden] binde = Super, Equal, splitratio, +0.1 # [hidden] binde = Super, Semicolon, splitratio, -0.1 # [hidden] binde = Super, Apostrophe, splitratio, +0.1 # [hidden] # Positioning mode bind = Super+Alt, Space, togglefloating, bind = Super+Alt, F, fullscreenstate, 0 3 # Toggle fake fullscreen bind = Super, F, fullscreen, 0 bind = Super, D, fullscreen, 1 #! ##! Workspace navigation # Switching #/# bind = Super, Hash,, # Focus workspace # (1, 2, 3, 4, ...) bind = Super, 1, exec, ~/.config/ags/scripts/hyprland/workspace_action.sh workspace 1 # [hidden] bind = Super, 2, exec, ~/.config/ags/scripts/hyprland/workspace_action.sh workspace 2 # [hidden] bind = Super, 3, exec, ~/.config/ags/scripts/hyprland/workspace_action.sh workspace 3 # [hidden] bind = Super, 4, exec, ~/.config/ags/scripts/hyprland/workspace_action.sh workspace 4 # [hidden] bind = Super, 5, exec, ~/.config/ags/scripts/hyprland/workspace_action.sh workspace 5 # [hidden] bind = Super, 6, exec, ~/.config/ags/scripts/hyprland/workspace_action.sh workspace 6 # [hidden] bind = Super, 7, exec, ~/.config/ags/scripts/hyprland/workspace_action.sh workspace 7 # [hidden] bind = Super, 8, exec, ~/.config/ags/scripts/hyprland/workspace_action.sh workspace 8 # [hidden] bind = Super, 9, exec, ~/.config/ags/scripts/hyprland/workspace_action.sh workspace 9 # [hidden] bind = Super, 0, exec, ~/.config/ags/scripts/hyprland/workspace_action.sh workspace 10 # [hidden] # ADDED BY JOEL # Go to previous workspace with Super+` (Super+Grave) bind = Super, grave, workspace, previous # Focus previous workspace #/# bind = Ctrl+Super, ←/→,, # Workspace: focus left/right bind = Ctrl+Super, Right, workspace, +1 # [hidden] bind = Ctrl+Super, Left, workspace, -1 # [hidden] #/# bind = Super, Scroll ↑/↓,, # Workspace: focus left/right bind = Super, mouse_up, workspace, +1 # [hidden] bind = Super, mouse_down, workspace, -1 # [hidden] bind = Ctrl+Super, mouse_up, workspace, +1 # [hidden] bind = Ctrl+Super, mouse_down, workspace, -1 # [hidden] #/# bind = Super, Page_↑/↓,, # Workspace: focus left/right bind = Super, Page_Down, workspace, +1 # [hidden] bind = Super, Page_Up, workspace, -1 # [hidden] bind = Ctrl+Super, Page_Down, workspace, +1 # [hidden] bind = Ctrl+Super, Page_Up, workspace, -1 # [hidden] ## Special bind = Super, S, togglespecialworkspace, bind = Super, mouse:275, togglespecialworkspace, ##! Workspace management # CHANGED BY JOEL - now uses Ctrl+Super+ to make it consistent with send to special workspace bind (Ctrl+Super+S) # 'movetoworkspace' moves the window to workspace# and then switches to that workspace # ...whereas 'movetoworkspacesilent' moves the window but does not switch to that workspace # These binds are using movetoworkspacesilent # Move window to workspace Ctrl + Super + [0-9] #/# bind = Ctrl+Super, Hash,, # Window: move to workspace # (1, 2, 3, 4, ...) bind = Ctrl+Super, 1, exec, ~/.config/ags/scripts/hyprland/workspace_action.sh movetoworkspacesilent 1 # [hidden] bind = Ctrl+Super, 2, exec, ~/.config/ags/scripts/hyprland/workspace_action.sh movetoworkspacesilent 2 # [hidden] bind = Ctrl+Super, 3, exec, ~/.config/ags/scripts/hyprland/workspace_action.sh movetoworkspacesilent 3 # [hidden] bind = Ctrl+Super, 4, exec, ~/.config/ags/scripts/hyprland/workspace_action.sh movetoworkspacesilent 4 # [hidden] bind = Ctrl+Super, 5, exec, ~/.config/ags/scripts/hyprland/workspace_action.sh movetoworkspacesilent 5 # [hidden] bind = Ctrl+Super, 6, exec, ~/.config/ags/scripts/hyprland/workspace_action.sh movetoworkspacesilent 6 # [hidden] bind = Ctrl+Super, 7, exec, ~/.config/ags/scripts/hyprland/workspace_action.sh movetoworkspacesilent 7 # [hidden] bind = Ctrl+Super, 8, exec, ~/.config/ags/scripts/hyprland/workspace_action.sh movetoworkspacesilent 8 # [hidden] bind = Ctrl+Super, 9, exec, ~/.config/ags/scripts/hyprland/workspace_action.sh movetoworkspacesilent 9 # [hidden] bind = Ctrl+Super, 0, exec, ~/.config/ags/scripts/hyprland/workspace_action.sh movetoworkspacesilent 10 # [hidden] # CHANGED BY JOEL # Send to special workspace with Ctrl+Super+S # Unbound two others from the default config because they were silly bind = Ctrl+Super, S, movetoworkspacesilent, special bind = Ctrl+Super+Shift, Right, movetoworkspace, +1 # [hidden] bind = Ctrl+Super+Shift, Left, movetoworkspace, -1 # [hidden] bind = Ctrl+Super, BracketLeft, workspace, -1 # [hidden] bind = Ctrl+Super, BracketRight, workspace, +1 # [hidden] bind = Ctrl+Super, Up, workspace, -5 # [hidden] bind = Ctrl+Super, Down, workspace, +5 # [hidden] #/# bind = Super+Shift, Scroll ↑/↓,, # Window: move to workspace left/right bind = Super+Shift, mouse_down, movetoworkspace, -1 # [hidden] bind = Super+Shift, mouse_up, movetoworkspace, +1 # [hidden] bind = Super+Alt, mouse_down, movetoworkspace, -1 # [hidden] bind = Super+Alt, mouse_up, movetoworkspace, +1 # [hidden] #/# bind = Super+Shift, Page_↑/↓,, # Window: move to workspace left/right bind = Super+Alt, Page_Down, movetoworkspace, +1 # [hidden] bind = Super+Alt, Page_Up, movetoworkspace, -1 # [hidden] bind = Super+Shift, Page_Down, movetoworkspace, +1 # [hidden] bind = Super+Shift, Page_Up, movetoworkspace, -1 # [hidden] bind = Super, P, pin bind = Ctrl+Super, S, togglespecialworkspace, # [hidden] bind = Alt, Tab, cyclenext # [hidden] sus keybind bind = Alt, Tab, bringactivetotop, # [hidden] bring it to the top #! ##! Widgets bindr = Ctrl+Super, R, exec, killall ags ydotool; ags & # Restart widgets bindr = Ctrl+Super+Alt, R, exec, hyprctl reload; killall ags ydotool; ags & # [hidden] bind = Ctrl+Alt, Slash, exec, ags run-js 'cycleMode();' # Cycle bar mode (normal, focus) bindir = Super, Super_L, exec, ags -t 'overview' # Toggle overview/launcher bind = Super, Tab, exec, ags -t 'overview' # [hidden] bind = Super, Slash, exec, for ((i=0; i<$(hyprctl monitors -j | jq length); i++)); do ags -t "cheatsheet""$i"; done # Show cheatsheet bind = Super, B, exec, ags -t 'sideleft' # Toggle left sidebar bind = Super, A, exec, ags -t 'sideleft' # [hidden] bind = Super, O, exec, ags -t 'sideleft' # [hidden] bind = Super, N, exec, ags -t 'sideright' # Toggle right sidebar bind = Super, M, exec, ags run-js 'openMusicControls.value = (!mpris.getPlayer() ? false : !openMusicControls.value);' # Toggle music controls bind = Super, Comma, exec, ags run-js 'openColorScheme.value = true; Utils.timeout(2000, () => openColorScheme.value = false);' # View color scheme and options bind = Super, K, exec, for ((i=0; i<$(hyprctl monitors -j | jq length); i++)); do ags -t "osk""$i"; done # Toggle on-screen keyboard bind = Ctrl+Alt, Delete, exec, for ((i=0; i<$(hyprctl monitors -j | jq length); i++)); do ags -t "session""$i"; done # Toggle power menu bind = Ctrl+Super, G, exec, for ((i=0; i<$(hyprctl monitors -j | jq length); i++)); do ags -t "crosshair""$i"; done # Toggle crosshair bindle=, XF86MonBrightnessUp, exec, ags run-js 'brightness.screen_value += 0.05; indicator.popup(1);' # [hidden] bindle=, XF86MonBrightnessDown, exec, ags run-js 'brightness.screen_value -= 0.05; indicator.popup(1);' # [hidden] bindl = , XF86AudioMute, exec, ags run-js 'indicator.popup(1);' # [hidden] bindl = Super+Shift,M, exec, ags run-js 'indicator.popup(1);' # [hidden] # Testing # bind = SuperAlt, f12, exec, notify-send "Hyprland version: $(hyprctl version | head -2 | tail -1 | cut -f2 -d ' ')" "owo" -a 'Hyprland keybind' # bind = Super+Alt, f12, exec, notify-send "Millis since epoch" "$(date +%s%N | cut -b1-13)" -a 'Hyprland keybind' bind = Super+Alt, f12, exec, notify-send 'Test notification' "Here's a really long message to test truncation and wrapping\nYou can middle click or flick this notification to dismiss it!" -a 'Shell' -A "Test1=I got it!" -A "Test2=Another action" -t 5000 # [hidden] bind = Super+Alt, Equal, exec, notify-send "Urgent notification" "Ah hell no" -u critical -a 'Hyprland keybind' # [hidden] ##! Media bindl= Super+Shift, N, exec, playerctl next || playerctl position `bc <<< "100 * $(playerctl metadata mpris:length) / 1000000 / 100"` # Next track bindl= ,XF86AudioNext, exec, playerctl next || playerctl position `bc <<< "100 * $(playerctl metadata mpris:length) / 1000000 / 100"` # [hidden] bindl= ,XF86AudioPrev, exec, playerctl previous # [hidden] bind = Super+Shift+Alt, mouse:275, exec, playerctl previous # [hidden] bind = Super+Shift+Alt, mouse:276, exec, playerctl next || playerctl position `bc <<< "100 * $(playerctl metadata mpris:length) / 1000000 / 100"` # [hidden] bindl= Super+Shift, B, exec, playerctl previous # Previous track bindl= Super+Shift, P, exec, playerctl play-pause # Play/pause media bindl= ,XF86AudioPlay, exec, playerctl play-pause # [hidden] bindl= ,XF86AudioPause, exec, playerctl play-pause # [hidden] #! ##! Apps bind = Super, T, exec, # Launch foot (terminal) # Super+X starts neovim inside a foot terminal # Might need to add launch args to nvim in future if we want # any custom behaviours or something other than a blank buffer on startup bind = Super, X, exec, foot nvim # Launch Neovim # JOEL removed vscode flags as they are in code-flags.conf and argv.json now bind = Super, C, exec, code # Launch VSCode # CHANGED BY JOEL bind = Super, E, exec, foot nnn -a -H -x # Launch nnn (file manager) bind = Super+Alt, E, exec, thunar # [hidden] bind = Super, W, exec, firefox # Launch Firefox (browser) # ADDED BY JOEL bind = Super+Shift, W, exec, microsoft-edge-stable # Launch Edge (browser) bind = Super, I, exec, XDG_CURRENT_DESKTOP="gnome" gnome-control-center # Launch GNOME Settings bind = Ctrl+Super, V, exec, pavucontrol # Launch pavucontrol (volume mixer) bind = Ctrl+Super+Shift, V, exec, easyeffects # Launch EasyEffects (equalizer & other audio effects) bind = Ctrl+Shift, Escape, exec, gnome-system-monitor # Launch GNOME System monitor bind = Ctrl+Super, Slash, exec, pkill anyrun || anyrun # Toggle fallback launcher: anyrun bind = Super+Alt, Slash, exec, pkill anyrun || fuzzel # Toggle fallback launcher: fuzzel # Cursed stuff ## Make window not amogus large bind = Ctrl+Super, Backslash, resizeactive, exact 640 480 # [hidden] ======Config-End======== ```

Description

When I first launch Hyprland after a reboot, I get very strange stutters, the entire display freezes every couple of seconds for an indeterminate duration (between 1s and even longer like 5s or more). But it still seems to accept keyboard inputs (as in, I can type a command or something, and it will all register but the display will only update once it decides to stop being frozen).

Weirdly though, this issue completely goes away (no stutters whatsoever) if I just exit Hyprland and open it again.

I can't find much info on this, because most other reports about stuttering etc. were some (unrelated) NVIDIA issues, but I am not using NVIDIA.

I'm using a Framework 16, AMD Ryzen 9 7940HS w/ Radeon 780M Graphics Using latest git version of Hyprland, latest Arch Linux, end-4 dotfiles image

I've even tried a fresh installation of everything on a live USB and the same issue occurs.

I think the issue started sometime after updating to the arch 6.11 kernel about 3 weeks ago or so.

How to reproduce

  1. Launch Hyprland, open a terminal or any app
  2. Continuously type random characters, observe stuttering
  3. Exit Hyprland and open it again
  4. Open a terminal as before, observe no stuttering

Crash reports, logs, images, videos

I will upload some videos and other logs as soon as I can, but for now here's kernel logs dmesg w/ verbose DRM logs

DRM logs

dmesg logs with verbose DRM logging enabled

Obtained with methodology from https://wiki.hyprland.org/Crashes-and-Bugs/#debugging-drm-issues Both these logs are for a short (like 10 second) duration, in both instances I open Hyprland, open a terminal (foot) and start typing random characters, before then exiting Hyprland.

The "firstlaunch" log file is the one where the stuttering occurs, then I exited Hyprland and (after clearing logs to obtain a fresh one) immediately opened it again. The second DRM dmesg log is provided for comparison purposes, there was no stuttering observed on the session logged in the "secondlaunch" file.

To reiterate: Both logs: launch Hyprland, open terminal, type random stuff, then exit Hyprland "firstlaunch": stuttering occurs "secondlaunch": after quitting and launching Hyprland again, the stuttering is completely gone

firstlaunch_dmesg_20241023T012506.log secondlaunch_dmesg_20241023T012617.log

b4shful commented 2 days ago

I'm aware there's been a lot of duplicates of stuttering type bugs recently. I did search for open/closed issues about this specific issue and couldn't find anything which seemed to be the same.

If anyone thinks it's a duplicate please let me know before closing in case there's a misunderstanding.

vaxerski commented 2 days ago
b4shful commented 2 days ago

Damnit, I should've ran the default config first on my clean install/live USB.

Will do this and get back to you.

matthewpi commented 2 days ago

I had this as well on NixOS (Framework 16 on iGPU). Whenever I have VRR enabled it occurs but only immediately after boot. The second the system is suspended then unsuspended it goes away.

Hyprland config: https://github.com/matthewpi/nixos-config/blob/c93176873c460be8f364be7cc5032f74a384c9e2/users/matthew/desktop/hyprland/hyprland.nix (none of the isDesktop values) Hyprland commit: 6e0aadc585c6d9fdaaebfa5853adbf9610897c82

The monitor configuration is eDP-1, 2560x1600@165, 0x0, 1.333333, vrr,1, bitdepth,8 when I am able to reproduce this issue. If vrr is set to 0 this issue does not occur.

hyprctl systeminfo ``` Hyprland 0.44.0 built from branch at commit 6e0aadc585c6d9fdaaebfa5853adbf9610897c82 (). Date: 2024-10-23 Tag: , commits: 5368 built against aquamarine 0.4.3 flags set: debug System Information: System name: Linux Node name: nxb Release: 6.11.3-xanmod1 Version: #1-NixOS SMP PREEMPT_DYNAMIC Tue Jan 1 00:00:00 UTC 1980 GPU information: c1:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Phoenix1 [1002:15bf] (rev c1) (prog-if 00 [VGA controller]) os-release: ANSI_COLOR="1;34" BUG_REPORT_URL="https://github.com/NixOS/nixpkgs/issues" BUILD_ID="24.11.20241020.1997e4a" DOCUMENTATION_URL="https://nixos.org/learn.html" HOME_URL="https://nixos.org/" ID=nixos IMAGE_ID="" IMAGE_VERSION="" LOGO="nix-snowflake" NAME=NixOS PRETTY_NAME="NixOS 24.11 (Vicuna)" SUPPORT_URL="https://nixos.org/community.html" VERSION="24.11 (Vicuna)" VERSION_CODENAME=vicuna VERSION_ID="24.11" plugins: ```

I only have had this system for about a week and have been constantly tweaking options, so I am unable to confirm if this was a recent regression. If you need any additional information or require a bisect, please let me know.

b4shful commented 2 days ago

@vaxerski I've gotten answers for some of the questions you asked,

I have been able to reproduce this on the default Hyprland config.

It doesn't happen on Sway.

I haven't been able to test older Hyprland versions yet, but I'm fairly certain it started after upgrading Arch Linux to the 6.11 kernel (so at the earliest either 15th September or 30th September-ish).

In relation to @matthewpi 's comment, I will add that I haven't been suspending/unsuspending my machine or anything for this. Usually as my workaround I literally exit hyprland and immediately open it again. I will play around with vrr and such too. But FWIW I've had my Framework 16 since May 2024 and this issue did not always occur. Since as far as I recall this issue began appearing coinciding with my update to 6.11 kernel, I'm tempted to say this may not be a regression so to speak (from a previous version of Hyprland).

I attached DRM logs to my initial post, but is there any other logging which might be useful here? I didn't see anything useful in journalctl or the standard hyprland log, although I can always up the verbosity.

matthewpi commented 2 days ago

This may not be a Hyprland issue.

https://gitlab.freedesktop.org/drm/amd/-/issues/3682

https://community.frame.work/t/psa-kernel-6-11-3-display-updates/59369

vaxerski commented 1 day ago

closing as a bug in mesa/drm