Best way to scale QTile for 4K Laptop

First off, I'm new to tiling WMs and Garuda, but not Linux or Arch. I'm running the latest build (as of Feb-23-2023) on my Thinkpad X1 which has a resolution of 3840*2160, and I'm struggling to find anywhere where I can hopefully "universally" set some scaling value so that the QTile bar is actually legible.

I see the line in init_screens() that sets the "size" of the top bar, but obviously that doesn't magically scale all the other widgets in kind.

Is there instead / also a value that I should be putting into init_widgets_defaults() to affect all the widgets? Or is this something I would have to apply to each widget individually?
Or does changing the font "fill" the height and width dynamically?

As far as I can tell, I vaguely understand what the is doing, I'm just trying to wrap my head around what values affect what without super-duper breaking everything at the same time.
I would really appreciate someone pointing me in the direction of which values in the config are what I'm looking for.

Alternatively, if someone else has already got a near-default config that accounts for 4K screens, I would gladly accept that as well.

Also as required, below is my inxi output, and please let me know if there's any more info I should provide to make this easier to assist me with.


  Kernel: 6.0.2-zen1-1-zen arch: x86_64 bits: 64 compiler: gcc v: 12.2.0
    parameters: BOOT_IMAGE=/@/boot/vmlinuz-linux-zen
    root=UUID=5d3945a3-3f19-4cfa-8da6-0c9c247f285e rw [email protected]
    quiet quiet splash rd.udev.log_priority=3 vt.global_cursor_default=0
    resume=UUID=554b6356-1fa7-4039-8727-185b8153e01b loglevel=3
  Desktop: Qtile v: 0.22.1 wm: LG3D vt: 1 dm: SDDM Distro: Garuda Linux
    base: Arch Linux
  Type: Laptop System: LENOVO product: 20MF000MUS v: ThinkPad X1 Extreme
    serial: <superuser required> Chassis: type: 10 serial: <superuser required>
  Mobo: LENOVO model: 20MF000MUS v: SDK0J40697 WIN
    serial: <superuser required> UEFI: LENOVO v: N2EET41W (1.23 )
    date: 07/03/2019
  ID-1: BAT0 charge: 68.1 Wh (100.0%) condition: 68.1/80.4 Wh (84.7%)
    volts: 17.1 min: 15.4 model: Celxpert 01AY969 type: Li-poly serial: <filter>
    status: full cycles: 102
  Device-1: wacom_battery_0 model: Wacom Pen and multitouch sensor
    serial: N/A charge: 0% rechargeable: yes status: N/A
  Info: model: Intel Core i7-8850H bits: 64 type: MT MCP arch: Coffee Lake
    gen: core 8 level: v3 note: check built: 2018 process: Intel 14nm family: 6
    model-id: 0x9E (158) stepping: 0xA (10) microcode: 0xF0
  Topology: cpus: 1x cores: 6 tpc: 2 threads: 12 smt: enabled cache:
    L1: 384 KiB desc: d-6x32 KiB; i-6x32 KiB L2: 1.5 MiB desc: 6x256 KiB
    L3: 9 MiB desc: 1x9 MiB
  Speed (MHz): avg: 1850 high: 2600 min/max: 800/4300 scaling:
    driver: intel_pstate governor: powersave cores: 1: 2600 2: 2600 3: 2600
    4: 800 5: 2600 6: 800 7: 800 8: 2600 9: 2600 10: 800 11: 2600 12: 801
    bogomips: 62399
  Flags: avx avx2 ht lm nx pae sse sse2 sse3 sse4_1 sse4_2 ssse3 vmx
  Vulnerabilities: <filter>
  Device-1: Intel CoffeeLake-H GT2 [UHD Graphics 630] vendor: Lenovo
    driver: i915 v: kernel arch: Gen-9.5 process: Intel 14nm built: 2016-20
    ports: active: eDP-1 empty: none bus-ID: 00:02.0 chip-ID: 8086:3e9b
    class-ID: 0300
  Device-2: NVIDIA GP107M [GeForce GTX 1050 Ti Mobile] vendor: Lenovo
    driver: nvidia v: 520.56.06 alternate: nouveau,nvidia_drm non-free: 525.xx+
    status: current (as of 2023-02) arch: Pascal code: GP10x
    process: TSMC 16nm built: 2016-21 pcie: gen: 1 speed: 2.5 GT/s lanes: 16
    link-max: gen: 3 speed: 8 GT/s bus-ID: 01:00.0 chip-ID: 10de:1c8c
    class-ID: 0300
  Device-3: Bison Integrated IR Camera type: USB driver: uvcvideo
    bus-ID: 1-12:5 chip-ID: 5986:2123 class-ID: 0e02
  Device-4: Bison Integrated Camera type: USB driver: uvcvideo bus-ID: 1-8:2
    chip-ID: 5986:2115 class-ID: 0e02
  Display: x11 server: X.Org v: 21.1.4 compositor: Picom v: git-c4107
    driver: X: loaded: modesetting,nvidia unloaded: nouveau
    alternate: fbdev,intel,nv,vesa dri: iris gpu: i915 display-ID: :0
    screens: 1
  Screen-1: 0 s-res: 2560x1440 s-dpi: 96 s-size: 676x380mm (26.61x14.96")
    s-diag: 775mm (30.53")
  Monitor-1: eDP-1 model: AU Optronics 0x32eb built: 2017 res: 2560x1440
    dpi: 189 gamma: 1.2 size: 344x193mm (13.54x7.6") diag: 394mm (15.5")
    ratio: 16:9 modes: 3840x2160
  API: OpenGL Message: Unable to show GL data. Required tool glxinfo
  Device-1: Intel Cannon Lake PCH cAVS vendor: Lenovo driver: snd_hda_intel
    v: kernel alternate: snd_soc_skl,snd_sof_pci_intel_cnl bus-ID: 00:1f.3
    chip-ID: 8086:a348 class-ID: 0403
  Device-2: NVIDIA GP107GL High Definition Audio driver: snd_hda_intel
    v: kernel pcie: gen: 1 speed: 2.5 GT/s lanes: 16 link-max: gen: 3
    speed: 8 GT/s bus-ID: 01:00.1 chip-ID: 10de:0fb9 class-ID: 0403
  Sound API: ALSA v: k6.0.2-zen1-1-zen running: yes
  Sound Server-1: PulseAudio v: 16.1 running: no
  Sound Server-2: PipeWire v: 0.3.66 running: yes
  Device-1: Intel Cannon Lake PCH CNVi WiFi driver: iwlwifi v: kernel
    bus-ID: 00:14.3 chip-ID: 8086:a370 class-ID: 0280
  IF: wlp0s20f3 state: up mac: <filter>
  Device-2: Intel Ethernet I219-LM vendor: Lenovo driver: e1000e v: kernel
    port: N/A bus-ID: 00:1f.6 chip-ID: 8086:15bb class-ID: 0200
  IF: enp0s31f6 state: down mac: <filter>
  Device-1: Intel Bluetooth 9460/9560 Jefferson Peak (JfP) type: USB
    driver: btusb v: 0.8 bus-ID: 1-14:6 chip-ID: 8087:0aaa class-ID: e001
  Report: bt-adapter ID: hci0 rfk-id: 1 state: up address: <filter>
  Local Storage: total: 476.94 GiB used: 15.24 GiB (3.2%)
  SMART Message: Required tool smartctl not installed. Check --recommends
  ID-1: /dev/nvme0n1 maj-min: 259:0 vendor: Western Digital model: PC SN720
    SDAQNTW-512G-1001 size: 476.94 GiB block-size: physical: 512 B
    logical: 512 B speed: 31.6 Gb/s lanes: 4 type: SSD serial: <filter>
    rev: 10190101 temp: 44.9 C scheme: GPT
  ID-1: / raw-size: 460.09 GiB size: 460.09 GiB (100.00%)
    used: 15.24 GiB (3.3%) fs: btrfs dev: /dev/nvme0n1p2 maj-min: 259:2
  ID-2: /boot/efi raw-size: 300 MiB size: 299.4 MiB (99.80%)
    used: 608 KiB (0.2%) fs: vfat dev: /dev/nvme0n1p1 maj-min: 259:1
  ID-3: /home raw-size: 460.09 GiB size: 460.09 GiB (100.00%)
    used: 15.24 GiB (3.3%) fs: btrfs dev: /dev/nvme0n1p2 maj-min: 259:2
  ID-4: /var/log raw-size: 460.09 GiB size: 460.09 GiB (100.00%)
    used: 15.24 GiB (3.3%) fs: btrfs dev: /dev/nvme0n1p2 maj-min: 259:2
  ID-5: /var/tmp raw-size: 460.09 GiB size: 460.09 GiB (100.00%)
    used: 15.24 GiB (3.3%) fs: btrfs dev: /dev/nvme0n1p2 maj-min: 259:2
  Kernel: swappiness: 133 (default 60) cache-pressure: 100 (default)
  ID-1: swap-1 type: zram size: 15.05 GiB used: 768 KiB (0.0%) priority: 100
    dev: /dev/zram0
  ID-2: swap-2 type: partition size: 16.56 GiB used: 0 KiB (0.0%)
    priority: -2 dev: /dev/nvme0n1p3 maj-min: 259:3
  System Temperatures: cpu: 46.0 C pch: 49.0 C mobo: N/A
  Fan Speeds (RPM): N/A
  Processes: 308 Uptime: 42m wakeups: 5 Memory: 15.05 GiB
  used: 3.1 GiB (20.6%) Init: systemd v: 253 default: graphical
  tool: systemctl Compilers: gcc: 12.2.1 Packages: pm: pacman pkgs: 1209
  libs: 332 tools: pamac,paru Shell: fish v: 3.6.0 default: Bash v: 5.1.16
  running-in: alacritty inxi: 3.3.25
Garuda (2.6.15-1):
  System install date:     2023-02-24
  Last full system update: 2023-02-24 ↻
  Is partially upgraded:   No
  Relevant software:       snapper NetworkManager mkinitcpio nvidia-dkms
  Windows dual boot:       No/Undetected
  Failed units:            
7 KB

Welcome :slight_smile:

There is no version with this date.

You are using a developer version, if at all, and have not yet booted your installation after the update.

Usually there is something like xrandr or LXRandR to change the display globally. Didn't you find it on the net?

I'm not familiar with Qtile and two GPU's in laptops, unfortunately.

1 Like

There is no version with this date.

Sorry, I assumed my phrasing was obvious, my mistake. I'm saying I'm on the latest available version, as of yesterday when I downloaded and installed it. The version I'm on is whatever was provided in the garuda-qtile-linux-zen-221019 image.

Usually there is something like xrandr or LXRandR to change the display globally. Didn't you find it on the net?

Unfortunately this does not affect the bar in QTile.
Not to be rude, but it sounds like you don't really understand the issue I'm describing here, but I appreciate the response regardless.

That's true, me and deepl are often overwhelmed with so much english text.

If it's just about the bar, there should be something somewhere in ~/.config/qtile/

def init_screens():
    return [Screen(top=bar.Bar(widgets=init_widgets_screen1(), size=25, opacity=0.85, background= "000000")),
            Screen(top=bar.Bar(widgets=init_widgets_screen2(), size=25, opacity=0.85, background= "000000"))]
screens = init_screens()

IDK :slight_smile:


It looks like others struggle with this issue as well, check out this GitHub issue which is a couple years old but still unresolved: Qtile does not scale to the DPI set in config files · Issue #1494 · qtile/qtile · GitHub

I think this is a good instinct actually, since you are using Xorg and you mentioned you want to change the scaling on other widgets as well. Changing the DPI in xrandr with the --dpi argument might work well.

Someone in the issue linked above changed the scale and it seems to work for them:

kovasap commented on Jan 10, 2022

FWIW, I fixed my problem by just scaling up my screen with the --scale 0.5x0.5 xrandr argument. I wanted the screen to be more zoomed in anyway.

This person set something up in Xresources that seems to be helping:

I honestly don't hear from a lot of QTile folks on this forum, but maybe we'll get lucky and someone will chime in will a good tip. Either way, welcome to the community @WorseDoughnut. :slightly_smiling_face:


.Xresources like in i3wm :grin:

Maybe @RohitSingh can help. :slight_smile:

Right, so the size=25 value in init_screens() does change the "height" of the bar.
But it's only the bar that changes, the widgets themselves don't.
I'm looking for somewhere that I can increase the height / width of all the widgets in the

Earlier in the file, there's a line for init_widgets_defaults() so I'm assuming something can go there to affect all the loaded widgets, but I'm just not sure what kind of syntax it would need to be.

I've been digging through the QTile docs, but it's also pretty light on info about just making everything slightly larger :confused:

I also have the dpi value in my .XResources set to 192 after finding that same post, which did solve the initial scaling of all other apps like Firefox and Webcord but it seems like whatever magic makes QTile bar get drawn just doesn't respect that.

And yes, I've also found a similar "fix" by just setting my resolution down from 4K to 2K, but it's far from what I'm actually trying to achieve and I dont like sacrificing resolution just for the sake of the widget bar.

I do appreciate the help overall, I realize it's a niche issue in an already niche WM, but yes hopefully someone will have some helpful info eventually. Thanks both of you :slight_smile:

Disclaimer: I don't use QTile nor X11, in other words, I don't know what I'm talking about.
Do the bars or widgets have a font size setting and can it be used to get a readable widget size?
Qtile in 4k displays - r/qtile
Screens — Qtile 0.1.dev50+g7d71600.d20230223 documentation
init_widgets_defaults examples:
qtile/ at master · marcoobaid/qtile · GitHub
.config/qtile/ · 2505e6ba5631a0d93dbb6e99f18e9dd9ed022489 · Derek Taylor / Dotfiles · GitLab

Hi, I hopped onto Qtile yesterday and was linked this thread. It's been a while so I'm not sure if this will still be useful to you, but here is my config - most of it is default, just some rearranging and colour changes to get rid of the multicolour default:
(beware that if you just grab the whole thing and use it, I changed my window close hotkey to meta+W because of my keyboard's layout)

Head on down to the widgets section and you'll find the most changes :slight_smile:
I tried to keep the top bar on the smaller side since afaik you can't hide the top bar without also taking away the space it used to occupy, like with Plasma panels (if that makes sense).

Here's a screenshot of my setup: Screenshots of Garuda Linux - #1117 by lum1nuss . Only thing missing is a battery widget which I plan to add soon ^^
My laptop screen is a 4K 15" so it was quite the battle to get things to be legible. Hope this helps you and anyone else out there :+1:

I'm hoping one day to implement a scale factor variable in that config that can easily be changed by others with HiDPI screens, but it will take some time since I'm not a Python wizard by any stretch :melting_face: