ehehe awawa

This commit is contained in:
Akko
2023-02-12 17:21:41 +01:00
parent b60509f1bf
commit a77a89dc2f
50 changed files with 1882 additions and 294 deletions

View File

@@ -1,7 +1,7 @@
<!DOCTYPE html>
<html lang="en">
<head>
<!-- 2022-04-18 Mon 14:18 -->
<!-- 2023-01-23 -->
<meta charset="utf-8" />
<meta name="viewport" content="width=100%, initial-scale=0.7" />
<title>Framework Laptop Review</title>
@@ -188,7 +188,7 @@
{ font-size: 10px; font-weight: bold; white-space: nowrap; }
.org-info-js_search-highlight
{ background-color: #ffff00; color: #000000; font-weight: bold; }
.org-svg { width: 90%; }
.org-svg { }
</style>
<link rel="stylesheet" href="/static/style.css" type="text/css"/>
</head>
@@ -203,13 +203,13 @@
</div>
<div id="content" class="content">
<div id="outline-container-org8d4f2ce" class="outline-2">
<h2 id="org8d4f2ce">My Experience with the Framework Laptop</h2>
<div class="outline-text-2" id="text-org8d4f2ce">
<div id="outline-container-org6afbe5b" class="outline-2">
<h2 id="org6afbe5b">My Experience with the Framework Laptop</h2>
<div class="outline-text-2" id="text-org6afbe5b">
</div>
<div id="outline-container-org58d7a32" class="outline-3">
<h3 id="org58d7a32">Ordering</h3>
<div class="outline-text-3" id="text-org58d7a32">
<div id="outline-container-orgead39d9" class="outline-3">
<h3 id="orgead39d9">Ordering</h3>
<div class="outline-text-3" id="text-orgead39d9">
<p>
I&rsquo;d been eyeing the <a href="https:frame.work">Framework laptop</a> since somewhere in October 2021, but the EU release got delayed and they were very hesitant to give time estimates. I only managed to get my hands on it in late February, and I ended up having to have it delivered to France. I understand the difficulty of setting up logistics especially these days, but I broke my previous laptop and being stuck in limbo like this was not fun.
</p>
@@ -221,13 +221,13 @@ I asked their customer service to make a small change to the delivery address, b
</div>
</div>
<div id="outline-container-orgb4016c4" class="outline-3">
<h3 id="orgb4016c4">Set-up</h3>
<div class="outline-text-3" id="text-orgb4016c4">
<div id="outline-container-org997e7c4" class="outline-3">
<h3 id="org997e7c4">Set-up</h3>
<div class="outline-text-3" id="text-org997e7c4">
</div>
<div id="outline-container-org81ac9af" class="outline-4">
<h4 id="org81ac9af">Hardware</h4>
<div class="outline-text-4" id="text-org81ac9af">
<div id="outline-container-orgfb4e79f" class="outline-4">
<h4 id="orgfb4e79f">Hardware</h4>
<div class="outline-text-4" id="text-orgfb4e79f">
<p>
I got the DIY edition with the (lowest-end) i5-1135G7 CPU, 2x16GB RAM. I brought my own 1TB SSD. The higher spec CPUs didn&rsquo;t seem worth the money to me. The RAM is probably overkill.
</p>
@@ -255,9 +255,9 @@ The more you look at it, the nicer it gets!
</div>
</div>
<div id="outline-container-org382a0b2" class="outline-4">
<h4 id="org382a0b2">Software</h4>
<div class="outline-text-4" id="text-org382a0b2">
<div id="outline-container-orgb646d45" class="outline-4">
<h4 id="orgb646d45">Software</h4>
<div class="outline-text-4" id="text-orgb646d45">
<p>
I installed Gentoo GNU+Linux on the laptop, just like I have on my desktop. I used an Ubuntu live CD as the install medium together with the Gentoo stage3 tarball, and it worked well. I didn&rsquo;t really have to jump through any laptop-specific hoops, it was a very nice experience. I did use the dist-kernel rather than configuring my own.
</p>
@@ -267,9 +267,9 @@ The laptop held up well during compiling. It&rsquo;s not as fast as a desktop of
</p>
</div>
<div id="outline-container-orgaad58af" class="outline-5">
<h5 id="orgaad58af">Display scaling</h5>
<div class="outline-text-5" id="text-orgaad58af">
<div id="outline-container-orgd307a6a" class="outline-5">
<h5 id="orgd307a6a">Display scaling</h5>
<div class="outline-text-5" id="text-orgd307a6a">
<p>
Simply setting <code>Xft.dpi: 192</code> in .Xresources was enough for the vast majority of applications to use 2x scaling, which looks very good on this display. This is on X11 obviously; I don&rsquo;t use Wayland.
</p>
@@ -279,52 +279,67 @@ The odd application requires its own scaling setting. Rofi requires setting <cod
</p>
</div>
</div>
<div id="outline-container-orgd8031ca" class="outline-5">
<h5 id="orgd8031ca">Display manager</h5>
<div class="outline-text-5" id="text-orgd8031ca">
<div id="outline-container-orgef00f41" class="outline-5">
<h5 id="orgef00f41">Display manager</h5>
<div class="outline-text-5" id="text-orgef00f41">
<p>
I used SDDM which works very well. I wanted to go for something a bit fancier looking, and this delivers. I don&rsquo;t usually use things in the whole QT ecosystem, so it&rsquo;s refreshing.
</p>
</div>
</div>
<div id="outline-container-org69b4f04" class="outline-5">
<h5 id="org69b4f04">Hibernate/suspend-to-disk</h5>
<div class="outline-text-5" id="text-org69b4f04">
<div id="outline-container-orgef05302" class="outline-5">
<h5 id="orgef05302">Hibernate/suspend-to-disk</h5>
<div class="outline-text-5" id="text-orgef05302">
<p>
This required setting up a swap file and setting a kernel command line parameter to refer to it, but it was easy to do. It works well. I&rsquo;ve observed the laptop auto-hibernating when the battery runs out, but it doesn&rsquo;t do this reliably, so I should probably configure it myself.
</p>
</div>
</div>
<div id="outline-container-org04382ed" class="outline-5">
<h5 id="org04382ed"><a href="http://guake-project.org/">Guake</a>-like transient terminal</h5>
<div class="outline-text-5" id="text-org04382ed">
<div id="outline-container-orgc032c55" class="outline-5">
<h5 id="orgc032c55"><a href="http://guake-project.org/">Guake</a>-like transient terminal</h5>
<div class="outline-text-5" id="text-orgc032c55">
<p>
Using some <code>fish</code> scripts, <code>bspwm</code>, <code>picom</code> and <code>xst</code> I rigged up a transient, transparent terminal to use for quick shell jobs. I used the scripts and config file in <a href="#orge8dc8af">Appendix A</a> to do this. The implementation is a bit hacky, and it&rsquo;s not impossible to break, but it serves my purposes well (and more important, it was fun to make)!
Using some <code>fish</code> scripts, <code>bspwm</code>, <code>picom</code> and <code>xst</code> I rigged up a transient, transparent terminal to use for quick shell jobs. I used the scripts and config file in <a href="#org8f9c5f8">Appendix A</a> to do this. The implementation is a bit hacky, and it&rsquo;s not impossible to break, but it serves my purposes well (and more important, it was fun to make)!
</p>
</div>
</div>
<div id="outline-container-org5c2a1d6" class="outline-5">
<h5 id="org5c2a1d6">Wallpaper-setting script</h5>
<div class="outline-text-5" id="text-org5c2a1d6">
<div id="outline-container-org892b482" class="outline-5">
<h5 id="org892b482">Wallpaper-setting script</h5>
<div class="outline-text-5" id="text-org892b482">
<p>
I wrote a script to set a random wallpaper.
</p>
<div class="org-src-container">
<pre class="src src-python">
<pre class="src src-python"><span class="org-comment-delimiter">#</span><span class="org-comment">!/usr/bin/env python3</span>
<span class="org-keyword">import</span> os
<span class="org-keyword">from</span> random <span class="org-keyword">import</span> choice
<span class="org-variable-name">pape_path</span> = os.path.expandvars(<span class="org-string">"$HOME/Pictures/Wallpapers"</span>)
<span class="org-keyword">def</span> <span class="org-function-name">set_wallpaper</span>():
<span class="org-variable-name">files</span> = os.popen(f<span class="org-string">"ls </span>{pape_path}<span class="org-string">"</span>).read().split(<span class="org-string">'\n'</span>)
<span class="org-variable-name">pape</span> = choice(files)
<span class="org-variable-name">pp</span> = os.path.join(pape_path, pape)
os.popen(f<span class="org-string">"hsetroot -full </span>{pp}<span class="org-string">"</span>)
os.popen(f<span class="org-string">"echo </span>{pp}<span class="org-string"> &gt; /tmp/wallpaper"</span>)
<span class="org-keyword">if</span> <span class="org-builtin">__name__</span> == <span class="org-string">"__main__"</span>:
set_wallpaper()
</pre>
</div>
</div>
</div>
<div id="outline-container-org573ac77" class="outline-5">
<h5 id="org573ac77">Lockscreen</h5>
<div class="outline-text-5" id="text-org573ac77">
<div id="outline-container-org9dc93f6" class="outline-5">
<h5 id="org9dc93f6">Lockscreen</h5>
<div class="outline-text-5" id="text-org9dc93f6">
<p>
I hacked together some <a href="#org5ec4854">pretty crappy code</a> to lock the screen using <code>i3lock</code>, with my wallpaper composed with a little lock icon as the background. Very overengineered.
I hacked together some <a href="#org4298003">pretty crappy code</a> to lock the screen using <code>i3lock</code>, with my wallpaper composed with a little lock icon as the background. Very overengineered.
</p>
<p width="60%" class="center">
@@ -338,34 +353,34 @@ Is there a better lockscreen out there that will let me set my own image as the
</div>
</div>
<div id="outline-container-org132c50e" class="outline-5">
<h5 id="org132c50e">TODO</h5>
<div class="outline-text-5" id="text-org132c50e">
<div id="outline-container-orgcd4d0cc" class="outline-5">
<h5 id="orgcd4d0cc">TODO</h5>
<div class="outline-text-5" id="text-orgcd4d0cc">
</div>
<ul class="org-ul">
<li><a id="orgd4adb46"></a>Battery level notifications<br></li>
<li><a id="org87ecca7"></a>sleep-then-hibernate<br></li>
<li><a id="orga95bf6d"></a>Battery tuning<br></li>
<li><a id="orgffdfa4a"></a>Battery level notifications<br></li>
<li><a id="orge8e3071"></a>sleep-then-hibernate<br></li>
<li><a id="orgee220b7"></a>Battery tuning<br></li>
</ul>
</div>
</div>
</div>
<div id="outline-container-org95be02b" class="outline-3">
<h3 id="org95be02b">Impressions</h3>
<div class="outline-text-3" id="text-org95be02b">
<div id="outline-container-orgbba86d0" class="outline-3">
<h3 id="orgbba86d0">Impressions</h3>
<div class="outline-text-3" id="text-orgbba86d0">
</div>
<div id="outline-container-orgbf8fdf0" class="outline-5">
<h5 id="orgbf8fdf0">Build Quality</h5>
<div class="outline-text-5" id="text-orgbf8fdf0">
<div id="outline-container-orgeba8828" class="outline-5">
<h5 id="orgeba8828">Build Quality</h5>
<div class="outline-text-5" id="text-orgeba8828">
<p>
The laptop is made of aluminium and feels solid but light. The screen does seem pretty flimsy, though. I probably wouldn&rsquo;t want to drop this thing. It looks sleek and elegant, but pretty muted.
</p>
</div>
</div>
<div id="outline-container-org45b10f4" class="outline-5">
<h5 id="org45b10f4">Screen</h5>
<div class="outline-text-5" id="text-org45b10f4">
<div id="outline-container-org907ef79" class="outline-5">
<h5 id="org907ef79">Screen</h5>
<div class="outline-text-5" id="text-org907ef79">
<p>
This is my first time ever using a high-DPI screen, and I&rsquo;m very impressed by it. Text looks unbelievably crisp and pleasant to read. I was somewhat worried about the linux high DPI situation, but I am having no issues whatsoever.
</p>
@@ -380,27 +395,27 @@ The brightness goes up quite high, but colours feel somewhat washed out at high
</div>
</div>
<div id="outline-container-orgc794a76" class="outline-5">
<h5 id="orgc794a76">Keyboard</h5>
<div class="outline-text-5" id="text-orgc794a76">
<div id="outline-container-org1b781c0" class="outline-5">
<h5 id="org1b781c0">Keyboard</h5>
<div class="outline-text-5" id="text-org1b781c0">
<p>
Framework seems to advertise their keyboard as having particularly deep travel, but it mostly just feels like any chiclet keyboard to me. Not a bad chiclet keyboard, but not that great, either. The layout is fine, but it makes me miss the thinkpad.
</p>
</div>
</div>
<div id="outline-container-org6fa74ab" class="outline-5">
<h5 id="org6fa74ab">Touchpad</h5>
<div class="outline-text-5" id="text-org6fa74ab">
<div id="outline-container-org587019b" class="outline-5">
<h5 id="org587019b">Touchpad</h5>
<div class="outline-text-5" id="text-org587019b">
<p>
I&rsquo;ve never had a decent touchpad before, so I was pleasantly surprised. I expected to miss the trackpoint on the thinkpad a lot, but this is fine, though it&rsquo;s still a step down. Pinch to zoom doesn&rsquo;t work very well, but I don&rsquo;t use that functionality a lot. I miss having dedicated mouse buttons; the clicking functionality on this touchpad works fine for me, but it&rsquo;s hard not to mess up left/middle/right click. That&rsquo;s a good incentive for me to practice relying on the mouse less, though. There&rsquo;s plenty of <a href="https://linuxtouchpad.org/">work being done</a> on the Linux touchpad experience software-side, too. It&rsquo;s a nice time to be a linux laptop user!
</p>
</div>
</div>
<div id="outline-container-orgde7f208" class="outline-5">
<h5 id="orgde7f208">Battery</h5>
<div class="outline-text-5" id="text-orgde7f208">
<div id="outline-container-org721582e" class="outline-5">
<h5 id="org721582e">Battery</h5>
<div class="outline-text-5" id="text-org721582e">
<p>
With the disclaimer that I haven&rsquo;t tested very intensely and I haven&rsquo;t tuned power settings very much. <br>
I seem to get about 6.5 hours of real-world use time when using Emacs and doing light web browsing. I don&rsquo;t have a good benchmark for more intensive tasks, but compiling does hit the battery pretty hard. All in all I&rsquo;m very happy with it, getting decent battery life on Linux is hard. It might be worth eventually buying a power bank for it though, for travel~
@@ -408,18 +423,18 @@ I seem to get about 6.5 hours of real-world use time when using Emacs and doing
</div>
</div>
<div id="outline-container-org86285de" class="outline-5">
<h5 id="org86285de">Expansion cards/ports</h5>
<div class="outline-text-5" id="text-org86285de">
<div id="outline-container-org221eb61" class="outline-5">
<h5 id="org221eb61">Expansion cards/ports</h5>
<div class="outline-text-5" id="text-org221eb61">
<p>
The little expansion cards are one of Framework&rsquo;s big marketing things. I think they&rsquo;re pretty neat, though I don&rsquo;t always quite understand the way people talk about them, as &ldquo;dongle killers&rdquo;. I would find hotswapping these about equally obnoxious as carrying dongles. The idea of aftermarket expansion cards is interesting, though - these are low level, high bandwidth ports, with I think similar capabilities to the ExpressCard ports on old business laptops, but more modern with a USB-C port. I&rsquo;m looking forward to the USB4 era!
</p>
</div>
</div>
<div id="outline-container-org0309d8d" class="outline-5">
<h5 id="org0309d8d">Performance</h5>
<div class="outline-text-5" id="text-org0309d8d">
<div id="outline-container-orgb7c4709" class="outline-5">
<h5 id="orgb7c4709">Performance</h5>
<div class="outline-text-5" id="text-orgb7c4709">
<p>
So far I haven&rsquo;t felt limited by performance at all, the experience has been really snappy. I haven&rsquo;t thrown particularly difficult things at it, though, but that&rsquo;s fine - most of what I do on a laptop is reading, web browsing, and text editing. I played some Factorio on it and that seemed fine, but using the touchpad felt limiting so I didn&rsquo;t play very much.
</p>
@@ -427,9 +442,9 @@ So far I haven&rsquo;t felt limited by performance at all, the experience has be
</div>
</div>
<div id="outline-container-orgef70972" class="outline-3">
<h3 id="orgef70972">Closing words</h3>
<div class="outline-text-3" id="text-orgef70972">
<div id="outline-container-orgab09c7d" class="outline-3">
<h3 id="orgab09c7d">Closing words</h3>
<div class="outline-text-3" id="text-orgab09c7d">
<p>
Getting this laptop set up has been really fun! It&rsquo;s a good opportunity to take stock of where we&rsquo;re at. On the hardware side, I am very impressed that it&rsquo;s now possible to make a laptop that&rsquo;s this user-servicable, this well-specced and still not <i>that</i> expensive. It&rsquo;s a reminder of how much better things could be.
</p>
@@ -445,30 +460,28 @@ Personally, I&rsquo;m getting a rare chance to critically examine all the little
</div>
</div>
<div id="outline-container-orge8dc8af" class="outline-2">
<h2 id="orge8dc8af">Appendix A: Transient Terminal Sources</h2>
<div class="outline-text-2" id="text-orge8dc8af">
<div id="outline-container-org8f9c5f8" class="outline-2">
<h2 id="org8f9c5f8">Appendix A: Transient Terminal Sources</h2>
<div class="outline-text-2" id="text-org8f9c5f8">
<p>
<code>togglescratch</code>
</p>
<div class="org-src-container">
<pre class="src src-fish">#!/usr/bin/env fish
<pre class="src src-fish"><span class="org-comment-delimiter">#</span><span class="org-comment">!/usr/bin/env fish</span>
if test ! -e /tmp/scratch_id
exec xst -e makescratch
end
<span class="org-keyword">if</span> <span class="org-keyword">test</span> ! -e /tmp/scratch_id
<span class="org-builtin">exec</span> xst -e makescratch
<span class="org-keyword">end</span>
set nid (cat /tmp/scratch_id)
<span class="org-keyword">set</span> <span class="org-variable-name">nid</span> (<span class="org-builtin">cat</span> /tmp/scratch_id)
if test -e /tmp/scratch_on
rm /tmp/scratch_on
bspc node $nid --to-desktop z
else
touch /tmp/scratch_on
bspc node $nid --to-desktop focused --focus --state fullscreen --flag private=on
end
<span class="org-keyword">if</span> <span class="org-keyword">test</span> -e /tmp/scratch_on
<span class="org-builtin">rm</span> /tmp/scratch_on
<span class="org-builtin">bspc</span> node <span class="org-string">$</span><span class="org-variable-name">nid</span> --to-desktop z
<span class="org-keyword">else</span>
<span class="org-builtin">touch</span> /tmp/scratch_on
<span class="org-builtin">bspc</span> node <span class="org-string">$</span><span class="org-variable-name">nid</span> --to-desktop focused --focus --state fullscreen --flag private=on
<span class="org-keyword">end</span>
</pre>
</div>
@@ -476,14 +489,14 @@ end
<code>makescratch</code>
</p>
<div class="org-src-container">
<pre class="src src-fish">#!/bin/fish
set nid (xdo id)
echo $nid &gt; /tmp/scratch_id
bspc node $nid --state fullscreen --flag private=on --to-desktop focused
touch /tmp/scratch_on
set decid (printf '%d' $nid)
xdotool set_window --name "scratchterminal" $decid
exec "$HOME/Scripts/cleanscratch"
<pre class="src src-fish"><span class="org-comment-delimiter">#</span><span class="org-comment">!/bin/fish</span>
<span class="org-keyword">set</span> <span class="org-variable-name">nid</span> (<span class="org-builtin">xdo</span> id)
<span class="org-builtin">echo</span> <span class="org-string">$</span><span class="org-variable-name">nid</span><span class="org-negation-char"> &gt; /tmp/scratch_id</span>
<span class="org-negation-char">bspc</span> node <span class="org-string">$</span><span class="org-variable-name">nid</span> --state fullscreen --flag private=on --to-desktop focused
<span class="org-builtin">touch</span> /tmp/scratch_on
<span class="org-keyword">set</span> <span class="org-variable-name">decid</span> (<span class="org-builtin">printf</span> <span class="org-string">'%d'</span> <span class="org-string">$</span><span class="org-variable-name">nid</span>)
<span class="org-builtin">xdotool</span> set_window --name <span class="org-string">"scratchterminal"</span> <span class="org-string">$</span><span class="org-variable-name">decid</span>
<span class="org-builtin">exec</span> <span class="org-string">"$HOME/Scripts/cleanscratch"</span>
</pre>
</div>
@@ -491,11 +504,11 @@ exec "$HOME/Scripts/cleanscratch"
<code>cleanscratch</code>
</p>
<div class="org-src-container">
<pre class="src src-fish">#!/usr/bin/env fish
<pre class="src src-fish"><span class="org-comment-delimiter">#</span><span class="org-comment">!/usr/bin/env fish</span>
$SHELL
rm /tmp/scratch_id
rm /tmp/scratch_on
<span class="org-string">$</span><span class="org-variable-name">SHELL</span>
<span class="org-builtin">rm</span> /tmp/scratch_id
<span class="org-builtin">rm</span> /tmp/scratch_on
</pre>
</div>
@@ -503,14 +516,20 @@ rm /tmp/scratch_on
<code>picom.conf</code>
</p>
<pre class="example">
fading = true;
#no-fading-openclose = true;
fade-delta = 5;
vsync = true;
backend="glx";
opacity-rule=["90:name = 'scratchterminal'"];
#opacity-rule=["90:class_g = 'xst-256color'"];
</pre>
</div>
</div>
<div id="outline-container-org5ec4854" class="outline-2">
<h2 id="org5ec4854">Appendix B: lock.py</h2>
<div class="outline-text-2" id="text-org5ec4854">
<div id="outline-container-org4298003" class="outline-2">
<h2 id="org4298003">Appendix B: lock.py</h2>
<div class="outline-text-2" id="text-org4298003">
<div class="org-src-container">
<pre class="src src-python"><span class="org-comment-delimiter">#</span><span class="org-comment">!/usr/bin/python3</span>
<span class="org-keyword">import</span> os
@@ -533,24 +552,19 @@ rm /tmp/scratch_on
os.popen(<span class="org-string">"loginctl suspend"</span>)
</pre>
</div>
<p>
<i>last modified: 2022-03-21</i>
</p>
</div>
</div>
</div>
<div id="postamble" class="status">
<div id="footer">
<hr>
If you have any comments about this page, you can email me at: <br>
<b>akko [shift-2] nakadashi -dot- lol</b><br>
And I may include them on the website!<br>
<br>
<div id='footer'><div id='publish-date'>Published: 2022-03-17</div><div id='modified-date'>Last modified: 2023-01-10</div><hr>
If you have any comments about this page, you can email me at: <br>
<b>akko [shift-2] nakadashi -dot- lol</b><br>
And I may include them on the website!<br>
<br>
All code on this website is licensed <b>GPLv3</b> unless otherwise indicated. <br>
Blog proudly built using <a href="/posts/elog-1-blog.html">org-mode</a>!
All code on this website is licensed <b>GPLv3</b> unless otherwise indicated. <br>
Blog proudly built using <a href="/posts/elog-1-blog.html">org-mode</a>!
</div>
</div>
</body>
</html>
</html>