pages/blog/flow-x13.md (view raw)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 |
--- template: slug: flow-x13 title: The Asus ROG Flow X13 subtitle: My hunt for a new laptop has finally concluded date: 2022-05-02 --- ![](https://cdn.icyphox.sh/3NZ1u.jpg) I've been on the lookout for a new laptop for a while now. While the HP Envy was good -- is good -- the measly 8 gigs of RAM was struggling to hold in all the beefy stuff that I run these days (skaffold, k3s, etc.). And it being a "budget" laptop of its time didn't do its chassis any favors -- the bottom was very scratched because the rubber bumpons came off; the keyboard deck had some rather mysterious scuff marks. Anyway, off I went looking for a replacement. My requirements for a laptop are somewhat specific. From the title it's obvious that I'd like to have good Linux support; here's a list of other things that I expect to see: - HiDPI: Any resolution above 1080p (or 1200p). I look at text all day, and I'd like it to be _crispy_. - 13" - 14": I don't like overly large or heavy laptops. I think 13.3 inches is the perfect screen size; 14 is a compromise. - A decent CPU: I don't really do anything very compute intensive, but an i7 or a Ryzen 7 should be ideal. - 32 GB RAM: Having struggled with 8 gigs for so long made this a hard requirement. Never again will I have to `pkill gopls`. I can't say I had a specific budget in mind, but anything more than 140k INR (1.4L, ≈1800 USD) is somewhat hard to justify. Listed below were the contenders for the prestegious position of being my laptop of choice: - **Tuxedo InfinityBook Pro 14**: While this ticks all the boxes, the cost including shipping (as of this writing) is about 1700 EUR. And that's without opening the massive, stinky can of worms called Indian Customs. Expecting a very lenient 40% duty, it's safe to say it's _batshit expensive_. - **ThinkPad X13**: Lenovo's site allows you to customize orders for certain models, and these will be custom built and shipped from China. The nice thing is Lenovo takes care of the customs and shipping and other logistics. The not-nice thing is it takes a minimum of _12 weeks_ -- at least for the X13. That's 4 whole months. I think I'll pass. With that preface out of the way, the machine I finally settled on was (as the title reads) the **Asus ROG Flow X13**. My model set me back by about 130,000 INR (1.3L, ≈1700 USD). The trick was to look in the "gaming laptops" section, because this model didn't show up anywhere in the thin-and-light/productivity/ultrabook searches. And it doesn't look gamery at all. Here's what my Dad had to say, as a serial ThinkPad user: > "It looks like a ThinkPad." ## hardware I opted to buy the 2021 model because, really, the only difference in the 2022 model is the marginally better CPU and a MUX switch. I don't care much for either. The octa-core Ryzen 9 5900HS has more compute power than I could ever need. The chassis is made of a "magnesium alloy", with a grooved finish that feels very nice to touch. There's very minimal branding -- one somewhat "iridescent" label with the Republic of Gamers logotype on one corner of the lid, and the ROG logo on the right palm-rest, made out of the same groove design. | | | | ---- | ---- | | ![](https://cdn.icyphox.sh/J2SN2.jpg) | ![](https://cdn.icyphox.sh/0wFTQ.jpg) | The hinges are sturdy and allow for 360° rotation. The lid can be opened with a single finger, which is much appreciated. The screen itself is a gorgeous 4K (3840×2400) touch screen panel. While the need need for 4K on a 13" screen is questionable, I welcome it wholeheartedly. It is the best screen I've used; the colors are punchy, text is (naturally) very crisp. It's glossy, and attracts a ton of fingerprints. A stylus is included in the box -- or at least it was for me -- but I haven't found much use for it after the initial excitement. ![](https://cdn.icyphox.sh/s7u2n.jpg) The keyboard is pretty good. Given the choice, I wouldn't have picked the font on the caps, but I suppose it could be worse. Three backlight modes for low, medium and high brightness exist. These can be controlled via the sysfs device at `/sys/class/leds/asus::kbd_backlight/`. The dedicated volume buttons are nice and work out of the box; the mic-mute toggle key however needs special treatment to get detected by X11 -- adding the below udev rule did the trick: ```nix udev.extraHwdb = '' evdev:input:b0003v0B05p19B6* KEYBOARD_KEY_ff31007c=f20 ''; ``` For ports, you get a USB-C and a USB-A on the right along with the power button; on the left: a 3.5mm headphone/microphone jack, a HDMI 2.0 port, and the proprietary XGm port for use with the [XG Mobile](https://rog.asus.com/in/external-graphic-docks/2021-rog-xg-mobile-model/) external GPU. The eGPU port, while being generally useless to me, also happens to contain a USB-C port, bringing the total to two. The ports selection could be better -- a single USB-A is one too less, forcing me to have to use a dongle to connect both my keyboard and mouse. | | | | ---- | ---- | | ![](https://cdn.icyphox.sh/xyYII.jpg) | ![](https://cdn.icyphox.sh/z-Y1R.jpg) | The entire package weighs in at about 1.3 kilograms, which is just as much as my HP Envy. For how well it's built, I'm not complaining. Finally, here's the full spec list: - Ryzen 9 5900HS, 8 cores & 16 threads - 32 GB LPDDR4X RAM @ 4266MHz - Nvidia GeForce GTX 1650 Max-Q, 4 GB GDDR6 - 1 TB SSD ## software Installing NixOS was straightforward. Basically everything works out of the box. I'd have liked to run OpenBSD on it, but I unfortunately require Linux for work. NixOS, while I understand nothing of Nix (the language), works well enough. Being able to configure your entire system from one single place is quite nice. Overall, it's a lot more cohesive than other Linux systems. The Nvidia GPU is handled surprisingly well. Looks like Linux has improved a lot in this regard. "Offload mode" is especially neat -- you can selectively "offload" certain tasks (like running Steam) to the GPU, and otherwise have it suspended. Here's how I do it: ```nix { pkgs, ... }: pkgs.writeShellScriptBin "nvidia-offload" '' export __NV_PRIME_RENDER_OFFLOAD=1 export __NV_PRIME_RENDER_OFFLOAD_PROVIDER=NVIDIA-G0 export __GLX_VENDOR_LIBRARY_NAME=nvidia export __VK_LAYER_NV_optimus=NVIDIA_only exec -a "$0" "$@" '' ``` Now simply run ```sh $ nvidia-offload steam ``` to have Steam run on the GPU. Use the `nvidia-smi` tool to inspect processes currently using the GPU. The laptop has an accelerometer to detect when it's in tablet mode, and invert the display accordingly. Unfortunatly, I couldn't figure out how to get it to work in X11/cwm. Instead, I wrote a handy script to rotate the display and the touch input: ```nix { pkgs, ... }: let xrandr = "${pkgs.xorg.xrandr}/bin/xrandr"; xinput = "${pkgs.xorg.xinput}/bin/xinput"; in pkgs.writeShellScriptBin "invert" '' orientation="$(${xrandr} --query --verbose | grep eDP | cut -d ' ' -f 6)" if [[ "$orientation" == "normal" ]]; then echo "turning screen upside down..." ${xrandr} -o inverted ${xinput} set-prop 'ELAN9008:00 04F3:2C82' 'Coordinate Transformation Matrix' -1 0 1 0 -1 1 0 0 1 ${xinput} set-prop 'ELAN9008:00 04F3:2C82 Stylus Pen (0)' 'Coordinate Transformation Matrix' -1 0 1 0 -1 1 0 0 1 ${xinput} set-prop 'ELAN9008:00 04F3:2C82 Stylus Eraser (0)' 'Coordinate Transformation Matrix' -1 0 1 0 -1 1 0 0 1 else echo "reverting back to normal..." ${xrandr} -o normal ${xinput} set-prop 'ELAN9008:00 04F3:2C82' 'Coordinate Transformation Matrix' 1 0 0 0 1 0 0 0 1 ${xinput} set-prop 'ELAN9008:00 04F3:2C82 Stylus Pen (0)' 'Coordinate Transformation Matrix' 1 0 0 0 1 0 0 0 1 ${xinput} set-prop 'ELAN9008:00 04F3:2C82 Stylus Eraser (0)' 'Coordinate Transformation Matrix' 1 0 0 0 1 0 0 0 1 fi '' ``` Then, simply run `invert` to toggle your current orientation: ```sh ▲ invert turning screen upside down... ▲ invert reverting back to normal... ``` Battery life could be better, but with TLP/powertop + switching the CPU governor to `powersave` on battery, I get about 7 - 8 hours on light workloads, and about 5 on heavy. I'm going to guess the 4K panel is to blame. Also worth mentioning is the [Asus Linux](https://asus-linux.org) project. They have some useful resources for running Linux on Asus laptops, and [asusctl](https://gitlab.com/asus-linux/asusctl) / [supergfxctl](https://gitlab.com/asus-linux/supergfxctl) -- two great tools for managing power profiles, fan curves and the dGPU. Overall, I couldn't be happier with this machine. It wasn't cheap, but it sure does check all the boxes and it's incredibly future proof. As for my trusty old HP Envy 13, I haven't decided yet what to do with it. It'll most probably end up in my closet, enshrined under a layer of clothes. You can find all the scripts mentioned in this post (and more!) [here](https://github.com/icyphox/dotfiles/tree/master/nix). |