<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[nixers - Desktop Customization & Workflow]]></title>
		<link>https://nixers.net/</link>
		<description><![CDATA[nixers - https://nixers.net]]></description>
		<pubDate>Thu, 30 Apr 2026 12:32:01 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[Historical GUI Websites]]></title>
			<link>https://nixers.net/Thread-Historical-GUI-Websites</link>
			<pubDate>Sun, 09 Oct 2022 10:38:00 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://nixers.net/member.php?action=profile&uid=1965">seninha</a>]]></dc:creator>
			<guid isPermaLink="false">https://nixers.net/Thread-Historical-GUI-Websites</guid>
			<description><![CDATA[I opened <a href="https://wiby.me" target="_blank" rel="noopener" class="mycode_url">wiby.me</a>, clicked "surprise me" and got surprised!<br />
<br />
I found <a href="https://guidebookgallery.org" target="_blank" rel="noopener" class="mycode_url">GUIdebook Gallery</a>, a (currently unmantained) collection of icons, screenshots, articles, books and other stuff on graphical interfaces, from Xerox Star to Windows Vista (the newest OS at the time the website got unmaintained).<br />
<br />
Stuff there is highly organized and impecably curated. Screenshots, for example, are organized either by OS (Windows, BeOS, Machintosh, etc) or by GUI feature (file manager, dialog window, panel/bar, etc). The same for the articles, icons, books, and other things.<br />
<br />
I'm browsing it since yesterday and am not done yet. High quality content.<br />
<br />
I only knew one website with similar content (<a href="http://toastytech.com/guis/index.html" target="_blank" rel="noopener" class="mycode_url">toastytech.com/guis</a>).<br />
<br />
What do you thing of this website?<br />
Any page (screenshot, article, etc) there worth noting?<br />
Have you found any other webmuseum of GUIs (or other related topic)?<br />
Etc?]]></description>
			<content:encoded><![CDATA[I opened <a href="https://wiby.me" target="_blank" rel="noopener" class="mycode_url">wiby.me</a>, clicked "surprise me" and got surprised!<br />
<br />
I found <a href="https://guidebookgallery.org" target="_blank" rel="noopener" class="mycode_url">GUIdebook Gallery</a>, a (currently unmantained) collection of icons, screenshots, articles, books and other stuff on graphical interfaces, from Xerox Star to Windows Vista (the newest OS at the time the website got unmaintained).<br />
<br />
Stuff there is highly organized and impecably curated. Screenshots, for example, are organized either by OS (Windows, BeOS, Machintosh, etc) or by GUI feature (file manager, dialog window, panel/bar, etc). The same for the articles, icons, books, and other things.<br />
<br />
I'm browsing it since yesterday and am not done yet. High quality content.<br />
<br />
I only knew one website with similar content (<a href="http://toastytech.com/guis/index.html" target="_blank" rel="noopener" class="mycode_url">toastytech.com/guis</a>).<br />
<br />
What do you thing of this website?<br />
Any page (screenshot, article, etc) there worth noting?<br />
Have you found any other webmuseum of GUIs (or other related topic)?<br />
Etc?]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Your top 10 commands]]></title>
			<link>https://nixers.net/Thread-Your-top-10-commands</link>
			<pubDate>Fri, 15 Oct 2021 02:10:02 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://nixers.net/member.php?action=profile&uid=1965">seninha</a>]]></dc:creator>
			<guid isPermaLink="false">https://nixers.net/Thread-Your-top-10-commands</guid>
			<description><![CDATA[After reading <a href="http://phroxy.z3bra.org/phlog.z3bra.org:70/0/my-top-10-commands.txt" target="_blank" rel="noopener" class="mycode_url">this post</a> on z3bra's phlog, I got curious to see what are my top 10 commands.<br />
<br />
<blockquote class="mycode_quote"><cite>Quote:</cite>Now what are YOUR top 10 commands ? <br />
-- z3bra</blockquote>
<br />
On OpenBSD ksh, the history builtin only lists the last 10 commands on history, to list all commands, <a href="https://webzine.puffy.cafe/issue-1.html#tips" target="_blank" rel="noopener" class="mycode_url">you need to run this:</a><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>history 1</code></div></div>(history arguments are <span style="font-weight: bold;" class="mycode_b">[first [last]]</span>).<br />
<br />
So, this is the command I needed to run:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>history 1 | awk '{print &#36;2}' | sort | uniq -c | sort -rn | head -n 10</code></div></div><br />
My &#36;HISTSIZE is 1000, so my sample is not that big as z3bra's (whose &#36;HISTORY is ten times bigger).<br />
<br />
Here's my top 10:<br />
<ul class="mycode_list"><li>1. vim: I expected that.<br />
</li>
<li>2. make: I use makefiles to build programs and documents, move my dotfiles to their proper places, etc.<br />
</li>
<li>3. cd<br />
</li>
<li>4. d: This is a shell function wrapper around tree(1) (actually colortree(1), a colored version of tree). Yes, I use tree(1), and not ls(1), to list the contents of a directory...<br />
</li>
<li>5. agenda: That's a shell script that shows a calendar for the current month, the events for the week and the tasks I need to do. Very handy. For events it calls calendar(1), for the tasks it calls todo(1). Both programs are part of my <a href="https://github.com/phillbush/orgutils" target="_blank" rel="noopener" class="mycode_url">orgutils</a>. This script reads the agenda and todo files in all directories of '~/proj/' (that is, in every project of mine), adds a prefix to each event and task corresponding to the project name, and pipes them to agenda(1) and todo(1).<br />
</li>
<li>6. git.<br />
</li>
<li>7. man.<br />
</li>
<li>8. xopen: That's my opener script. If I want to open a image with sxiv or a document with zathura, I just call xopen on them.<br />
</li>
<li>9. ssh.<br />
</li>
<li>10. fm: That's actually an alias for lf, the file manager, with some options.<br />
</li>
</ul>
]]></description>
			<content:encoded><![CDATA[After reading <a href="http://phroxy.z3bra.org/phlog.z3bra.org:70/0/my-top-10-commands.txt" target="_blank" rel="noopener" class="mycode_url">this post</a> on z3bra's phlog, I got curious to see what are my top 10 commands.<br />
<br />
<blockquote class="mycode_quote"><cite>Quote:</cite>Now what are YOUR top 10 commands ? <br />
-- z3bra</blockquote>
<br />
On OpenBSD ksh, the history builtin only lists the last 10 commands on history, to list all commands, <a href="https://webzine.puffy.cafe/issue-1.html#tips" target="_blank" rel="noopener" class="mycode_url">you need to run this:</a><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>history 1</code></div></div>(history arguments are <span style="font-weight: bold;" class="mycode_b">[first [last]]</span>).<br />
<br />
So, this is the command I needed to run:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>history 1 | awk '{print &#36;2}' | sort | uniq -c | sort -rn | head -n 10</code></div></div><br />
My &#36;HISTSIZE is 1000, so my sample is not that big as z3bra's (whose &#36;HISTORY is ten times bigger).<br />
<br />
Here's my top 10:<br />
<ul class="mycode_list"><li>1. vim: I expected that.<br />
</li>
<li>2. make: I use makefiles to build programs and documents, move my dotfiles to their proper places, etc.<br />
</li>
<li>3. cd<br />
</li>
<li>4. d: This is a shell function wrapper around tree(1) (actually colortree(1), a colored version of tree). Yes, I use tree(1), and not ls(1), to list the contents of a directory...<br />
</li>
<li>5. agenda: That's a shell script that shows a calendar for the current month, the events for the week and the tasks I need to do. Very handy. For events it calls calendar(1), for the tasks it calls todo(1). Both programs are part of my <a href="https://github.com/phillbush/orgutils" target="_blank" rel="noopener" class="mycode_url">orgutils</a>. This script reads the agenda and todo files in all directories of '~/proj/' (that is, in every project of mine), adds a prefix to each event and task corresponding to the project name, and pipes them to agenda(1) and todo(1).<br />
</li>
<li>6. git.<br />
</li>
<li>7. man.<br />
</li>
<li>8. xopen: That's my opener script. If I want to open a image with sxiv or a document with zathura, I just call xopen on them.<br />
</li>
<li>9. ssh.<br />
</li>
<li>10. fm: That's actually an alias for lf, the file manager, with some options.<br />
</li>
</ul>
]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Dmenu Scripts]]></title>
			<link>https://nixers.net/Thread-Dmenu-Scripts</link>
			<pubDate>Wed, 09 Jun 2021 06:38:22 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://nixers.net/member.php?action=profile&uid=2034">pfr</a>]]></dc:creator>
			<guid isPermaLink="false">https://nixers.net/Thread-Dmenu-Scripts</guid>
			<description><![CDATA[While I acknowledge the following threads exist:<ul class="mycode_list"><li><a href="https://nixers.net/Thread-Scripts-to-be-quick-and-efficient?highlight=dmenu%2Bscripts" target="_blank" rel="noopener" class="mycode_url">Scripts-to-be-quick-and-efficient</a><br />
</li>
<li><a href="https://nixers.net/Thread-What-software-have-you-made-to-improve-your-workflow-or-rice?highlight=dmenu%2Bscripts" target="_blank" rel="noopener" class="mycode_url">What-software-have-you-made-to-improve-your-workflow-or-rice?</a><br />
</li>
</ul>
I still think there is a need for a dedicated thread for dmenu scripts. dmenu is so widely used and is so versatile, resulting in an endless list of scripting possibilities, it would be nice to have them all in one place here on nixers.net.<br />
<br />
Cyr4x3 had a few cool looking scripts in their recent <a href="https://nixers.net/Thread-Workflow-Compilation-June-Events-2021" target="_blank" rel="noopener" class="mycode_url">workflow</a> video which sparked my interest. <br />
<br />
Feel free to drop in some helpful scripts to extend dmenu's capabilities in this thread. <br />
The one I'm interested in at the moment is a <a href="https://forum.archlabslinux.com/t/the-great-dmenu-thread/4062/2" target="_blank" rel="noopener" class="mycode_url">screenshot script</a> that also allows for editing and uploading of screenshots. <span style="font-weight: bold;" class="mycode_b">I am however looking for some help</span> to replace <a href="https://paste.xinu.at/" target="_blank" rel="noopener" class="mycode_url">fb</a> with xero's <a href="https://github.com/xero/dotfiles/blob/master/bin/bin/pb" target="_blank" rel="noopener" class="mycode_url">pb</a> or just simply use curl to upload to 0x0. The thing I like most about this script is that, in addition to using xclip to copy the url to the clipboard, the upload option also sends the url through notify-send which (in gnome at least) is a clickable link. <br />
<br />
I hope some of you have more scripts to share.<br />
<br />
One of my most used is <a href="https://git.zx2c4.com/password-store/tree/contrib/dmenu/passmenu" target="_blank" rel="noopener" class="mycode_url">passmenu</a> which is now baked into pass itself. <br />
<br />
You've also got old mate dt <a href="https://gitlab.com/dwt1/dmscripts" target="_blank" rel="noopener" class="mycode_url">over here</a> with his bunch of scripts. <br />
<a href="https://github.com/debxp/dmenu-scripts" target="_blank" rel="noopener" class="mycode_url">debxp</a> and <a href="https://github.com/I-LeCorbeau/dmenu-scripts" target="_blank" rel="noopener" class="mycode_url">I-LeCorbeau</a> also have a few. <br />
<br />
I don't have anything of my own to offer up, this is purely a selfish script trawling mission. <br />
<br />
Also feel free to mention/promote any dmenu alternatives or replacements (Philbush I'm looking at you - xmenu looks awesome), just keep any scripts in this thread dmenu specific to avoid confusion.]]></description>
			<content:encoded><![CDATA[While I acknowledge the following threads exist:<ul class="mycode_list"><li><a href="https://nixers.net/Thread-Scripts-to-be-quick-and-efficient?highlight=dmenu%2Bscripts" target="_blank" rel="noopener" class="mycode_url">Scripts-to-be-quick-and-efficient</a><br />
</li>
<li><a href="https://nixers.net/Thread-What-software-have-you-made-to-improve-your-workflow-or-rice?highlight=dmenu%2Bscripts" target="_blank" rel="noopener" class="mycode_url">What-software-have-you-made-to-improve-your-workflow-or-rice?</a><br />
</li>
</ul>
I still think there is a need for a dedicated thread for dmenu scripts. dmenu is so widely used and is so versatile, resulting in an endless list of scripting possibilities, it would be nice to have them all in one place here on nixers.net.<br />
<br />
Cyr4x3 had a few cool looking scripts in their recent <a href="https://nixers.net/Thread-Workflow-Compilation-June-Events-2021" target="_blank" rel="noopener" class="mycode_url">workflow</a> video which sparked my interest. <br />
<br />
Feel free to drop in some helpful scripts to extend dmenu's capabilities in this thread. <br />
The one I'm interested in at the moment is a <a href="https://forum.archlabslinux.com/t/the-great-dmenu-thread/4062/2" target="_blank" rel="noopener" class="mycode_url">screenshot script</a> that also allows for editing and uploading of screenshots. <span style="font-weight: bold;" class="mycode_b">I am however looking for some help</span> to replace <a href="https://paste.xinu.at/" target="_blank" rel="noopener" class="mycode_url">fb</a> with xero's <a href="https://github.com/xero/dotfiles/blob/master/bin/bin/pb" target="_blank" rel="noopener" class="mycode_url">pb</a> or just simply use curl to upload to 0x0. The thing I like most about this script is that, in addition to using xclip to copy the url to the clipboard, the upload option also sends the url through notify-send which (in gnome at least) is a clickable link. <br />
<br />
I hope some of you have more scripts to share.<br />
<br />
One of my most used is <a href="https://git.zx2c4.com/password-store/tree/contrib/dmenu/passmenu" target="_blank" rel="noopener" class="mycode_url">passmenu</a> which is now baked into pass itself. <br />
<br />
You've also got old mate dt <a href="https://gitlab.com/dwt1/dmscripts" target="_blank" rel="noopener" class="mycode_url">over here</a> with his bunch of scripts. <br />
<a href="https://github.com/debxp/dmenu-scripts" target="_blank" rel="noopener" class="mycode_url">debxp</a> and <a href="https://github.com/I-LeCorbeau/dmenu-scripts" target="_blank" rel="noopener" class="mycode_url">I-LeCorbeau</a> also have a few. <br />
<br />
I don't have anything of my own to offer up, this is purely a selfish script trawling mission. <br />
<br />
Also feel free to mention/promote any dmenu alternatives or replacements (Philbush I'm looking at you - xmenu looks awesome), just keep any scripts in this thread dmenu specific to avoid confusion.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Workflow Compilation [June Events 2021]]]></title>
			<link>https://nixers.net/Thread-Workflow-Compilation-June-Events-2021</link>
			<pubDate>Tue, 01 Jun 2021 15:05:47 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://nixers.net/member.php?action=profile&uid=80">venam</a>]]></dc:creator>
			<guid isPermaLink="false">https://nixers.net/Thread-Workflow-Compilation-June-Events-2021</guid>
			<description><![CDATA[This is part of the <a href="https://nixers.net/Thread-The-June-Events-2021" target="_blank" rel="noopener" class="mycode_url">June events</a>.<br />
<br />
Time to show off your workflow to everyone! You know the concept.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">What is it ?</span><br />
This is a video compiling a bunch of screencast from the nixers members, all performing the same task, but using their personal setup.<br />
this would result in a compilation showing the personal workflow of each participant, and setting a comparison point between them.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Can I participate ?</span><br />
Sure ! The more videos we get, the better. Just post your submission and we'll add it !<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">What are the rules ?</span><br />
1. Nixers will have to perform the tasks in the exact order they are listed (see below).<br />
2. Nixers must use a single monitor for the screencast<br />
3. Nixers' screen resolution should be above 1280x720<br />
4. Nixers submissions should be in webm format<br />
5. Nixers should submit their compilation before <span style="font-weight: bold;" class="mycode_b">2021-06-30 at midnight (UTC)</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">How can I record the video ?</span><br />
The command to use is the following (adjust the resolution to fit your actual setup, it might also vary as you may find the recording too fast):<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>RESOLUTION=&#36;(xwininfo -root | sed -nE 's/-geometry[[:space:]]([[:digit:]]+x[[:digit:]]+)+.*&#36;/&#92;1/p')</code></div></div><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>RESOLUTION=1440x900<br />
ffmpeg -f x11grab -s &#36;RESOLUTION -an -r 16 -loglevel quiet -i :0.0 -b:v 5M -y workflow-compil-&#36;{USER}.webm</code></div></div><br />
Another example<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>RESOLUTION=1440x900<br />
ffmpeg -thread_queue_size 128 -f x11grab -r 30 -s &#36;RESOLUTION -i :0.0 -vcodec libx264 -preset ultrafast -threads 0 -y output.mkv<br />
ffmpeg -i output.mkv workflow-compil-&#36;{USER}.webm</code></div></div><br />
For those running OSX:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>RESOLUTION=1440x900<br />
ffmpeg -f avfoundation -s &#36;RESOLUTION -an -r 16 -loglevel quiet -i 0:none -b:v 5M -y workflow-compil-&#36;{USER}.webm</code></div></div><br />
To end the video, press `q`.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">What is the task list ?</span><br />
<ul class="mycode_list"><li>Put on some music<br />
</li>
<li>Write some random text to a file in /tmp<br />
</li>
<li>Show "toilet", "figlet", ASCII art, and try it in a funny way !<br />
</li>
<li>Install a simple software (show pkg management)<br />
</li>
<li>Set a wallpaper<br />
</li>
<li>Take a scrot ( beautify it if you must ) and upload it to a pastebin of your choice<br />
</li>
<li>Join the IRC and paste the link to the scrot in <span style="font-weight: bold;" class="mycode_b">#nixers</span><br />
</li>
<li>Check your RSS feed (optional)<br />
</li>
<li>Browse the forum (post something on this thread, you'll edit it later with the actual link of the video)<br />
</li>
</ul>
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Submissions</span><ul class="mycode_list"><li><a href="http://fixedpoints.zapto.org/workflow-compil-opfez.webm" target="_blank" rel="noopener" class="mycode_url">opfez</a><br />
</li>
<li><a href="https://transfer.sh/get/1PEN5mH/workflow-compil-prx.webm" target="_blank" rel="noopener" class="mycode_url">prx*</a><br />
</li>
<li><a href="https://uninformativ.de/files/nixers/2021-nixers-workflow-compilation.webm" target="_blank" rel="noopener" class="mycode_url">movq</a><br />
</li>
<li><a href="https://perso.pw/f/RofdGjw5AJ6tbLSuQMiXPQ.webm" target="_blank" rel="noopener" class="mycode_url">solene</a><br />
</li>
<li><a href="https://upload.disroot.org/r/5hKve4UH#ha5IdKEwIhQneSRsouw6COkcHj0jH+lgx6K4XTi77Rs=" target="_blank" rel="noopener" class="mycode_url">phillbush</a><br />
</li>
<li><a href="https://venam.nixers.net/2021-nixers-workflow-compil-vnm.webm" target="_blank" rel="noopener" class="mycode_url">venam</a><br />
</li>
<li><a href="https://tmp.c0de.in/workflow-compil-jolia.webm" target="_blank" rel="noopener" class="mycode_url">jolia</a><br />
</li>
<li><a href="https://transfer.sh/1ubJjNZ/workflow-remiferous.webm" target="_blank" rel="noopener" class="mycode_url">ramiferous</a><br />
</li>
<li><a href="https://p.mort.coffee/2jR.webm" target="_blank" rel="noopener" class="mycode_url">mort</a><br />
</li>
<li><a href="https://transfer.sh/u/workflow-compil-cyr4x3.webm" target="_blank" rel="noopener" class="mycode_url">cyr4x3</a><br />
</li>
<li><a href="https://upload.disroot.org/r/8NaJ7XLX#4VqQHIKbJao5qd7DoOaDnEW9atZo+V+hrkovsUkTUqE=" target="_blank" rel="noopener" class="mycode_url">tuxifreund</a><br />
</li>
<li><a href="https://transfer.sh/1yV36Bc/workflow-compil-dany74q.webm" target="_blank" rel="noopener" class="mycode_url">dany74q</a><br />
</li>
<li><a href="https://pyratebeard.net/20210701-nixers_workflow.webm" target="_blank" rel="noopener" class="mycode_url">pyratebeard</a><br />
</li>
</ul>
<br />
<br />
<hr class="mycode_hr" />
<br />
Previous threads: <a href="https://nixers.net/showthread.php?tid=1606" target="_blank" rel="noopener" class="mycode_url">#1</a>, <a href="https://nixers.net/showthread.php?tid=2130" target="_blank" rel="noopener" class="mycode_url">#2</a>, &amp; <a href="https://nixers.net/Thread-Workflow-Compilation-2020-finished" target="_blank" rel="noopener" class="mycode_url">#3</a>.<br />
<br />
<hr class="mycode_hr" />
<br />
Feel free to add more information about your setup as others might be interested in knowing what is actually running in the video. Otherwise, hope on <a href="https://nixers.net/Thread-IRC--1876" target="_blank" rel="noopener" class="mycode_url">IRC</a> and ask.<br />
<br />
<hr class="mycode_hr" />
<br />
Have fun!<br />
<br />
<hr class="mycode_hr" />
<br />
The result has been uploaded as <a href="https://nixers.net/images/2021-nixers-workflow-compilation.webm" target="_blank" rel="noopener" class="mycode_url">webm</a>, on a <a href="https://www.youtube.com/watch?v=PvsanPakB_g" target="_blank" rel="noopener" class="mycode_url">YouTube mirror</a>, on <a href="https://uninformativ.de/files/nixers/2021-nixers-workflow-compilation.webm" target="_blank" rel="noopener" class="mycode_url">movq mirror</a>]]></description>
			<content:encoded><![CDATA[This is part of the <a href="https://nixers.net/Thread-The-June-Events-2021" target="_blank" rel="noopener" class="mycode_url">June events</a>.<br />
<br />
Time to show off your workflow to everyone! You know the concept.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">What is it ?</span><br />
This is a video compiling a bunch of screencast from the nixers members, all performing the same task, but using their personal setup.<br />
this would result in a compilation showing the personal workflow of each participant, and setting a comparison point between them.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Can I participate ?</span><br />
Sure ! The more videos we get, the better. Just post your submission and we'll add it !<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">What are the rules ?</span><br />
1. Nixers will have to perform the tasks in the exact order they are listed (see below).<br />
2. Nixers must use a single monitor for the screencast<br />
3. Nixers' screen resolution should be above 1280x720<br />
4. Nixers submissions should be in webm format<br />
5. Nixers should submit their compilation before <span style="font-weight: bold;" class="mycode_b">2021-06-30 at midnight (UTC)</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">How can I record the video ?</span><br />
The command to use is the following (adjust the resolution to fit your actual setup, it might also vary as you may find the recording too fast):<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>RESOLUTION=&#36;(xwininfo -root | sed -nE 's/-geometry[[:space:]]([[:digit:]]+x[[:digit:]]+)+.*&#36;/&#92;1/p')</code></div></div><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>RESOLUTION=1440x900<br />
ffmpeg -f x11grab -s &#36;RESOLUTION -an -r 16 -loglevel quiet -i :0.0 -b:v 5M -y workflow-compil-&#36;{USER}.webm</code></div></div><br />
Another example<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>RESOLUTION=1440x900<br />
ffmpeg -thread_queue_size 128 -f x11grab -r 30 -s &#36;RESOLUTION -i :0.0 -vcodec libx264 -preset ultrafast -threads 0 -y output.mkv<br />
ffmpeg -i output.mkv workflow-compil-&#36;{USER}.webm</code></div></div><br />
For those running OSX:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>RESOLUTION=1440x900<br />
ffmpeg -f avfoundation -s &#36;RESOLUTION -an -r 16 -loglevel quiet -i 0:none -b:v 5M -y workflow-compil-&#36;{USER}.webm</code></div></div><br />
To end the video, press `q`.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">What is the task list ?</span><br />
<ul class="mycode_list"><li>Put on some music<br />
</li>
<li>Write some random text to a file in /tmp<br />
</li>
<li>Show "toilet", "figlet", ASCII art, and try it in a funny way !<br />
</li>
<li>Install a simple software (show pkg management)<br />
</li>
<li>Set a wallpaper<br />
</li>
<li>Take a scrot ( beautify it if you must ) and upload it to a pastebin of your choice<br />
</li>
<li>Join the IRC and paste the link to the scrot in <span style="font-weight: bold;" class="mycode_b">#nixers</span><br />
</li>
<li>Check your RSS feed (optional)<br />
</li>
<li>Browse the forum (post something on this thread, you'll edit it later with the actual link of the video)<br />
</li>
</ul>
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Submissions</span><ul class="mycode_list"><li><a href="http://fixedpoints.zapto.org/workflow-compil-opfez.webm" target="_blank" rel="noopener" class="mycode_url">opfez</a><br />
</li>
<li><a href="https://transfer.sh/get/1PEN5mH/workflow-compil-prx.webm" target="_blank" rel="noopener" class="mycode_url">prx*</a><br />
</li>
<li><a href="https://uninformativ.de/files/nixers/2021-nixers-workflow-compilation.webm" target="_blank" rel="noopener" class="mycode_url">movq</a><br />
</li>
<li><a href="https://perso.pw/f/RofdGjw5AJ6tbLSuQMiXPQ.webm" target="_blank" rel="noopener" class="mycode_url">solene</a><br />
</li>
<li><a href="https://upload.disroot.org/r/5hKve4UH#ha5IdKEwIhQneSRsouw6COkcHj0jH+lgx6K4XTi77Rs=" target="_blank" rel="noopener" class="mycode_url">phillbush</a><br />
</li>
<li><a href="https://venam.nixers.net/2021-nixers-workflow-compil-vnm.webm" target="_blank" rel="noopener" class="mycode_url">venam</a><br />
</li>
<li><a href="https://tmp.c0de.in/workflow-compil-jolia.webm" target="_blank" rel="noopener" class="mycode_url">jolia</a><br />
</li>
<li><a href="https://transfer.sh/1ubJjNZ/workflow-remiferous.webm" target="_blank" rel="noopener" class="mycode_url">ramiferous</a><br />
</li>
<li><a href="https://p.mort.coffee/2jR.webm" target="_blank" rel="noopener" class="mycode_url">mort</a><br />
</li>
<li><a href="https://transfer.sh/u/workflow-compil-cyr4x3.webm" target="_blank" rel="noopener" class="mycode_url">cyr4x3</a><br />
</li>
<li><a href="https://upload.disroot.org/r/8NaJ7XLX#4VqQHIKbJao5qd7DoOaDnEW9atZo+V+hrkovsUkTUqE=" target="_blank" rel="noopener" class="mycode_url">tuxifreund</a><br />
</li>
<li><a href="https://transfer.sh/1yV36Bc/workflow-compil-dany74q.webm" target="_blank" rel="noopener" class="mycode_url">dany74q</a><br />
</li>
<li><a href="https://pyratebeard.net/20210701-nixers_workflow.webm" target="_blank" rel="noopener" class="mycode_url">pyratebeard</a><br />
</li>
</ul>
<br />
<br />
<hr class="mycode_hr" />
<br />
Previous threads: <a href="https://nixers.net/showthread.php?tid=1606" target="_blank" rel="noopener" class="mycode_url">#1</a>, <a href="https://nixers.net/showthread.php?tid=2130" target="_blank" rel="noopener" class="mycode_url">#2</a>, &amp; <a href="https://nixers.net/Thread-Workflow-Compilation-2020-finished" target="_blank" rel="noopener" class="mycode_url">#3</a>.<br />
<br />
<hr class="mycode_hr" />
<br />
Feel free to add more information about your setup as others might be interested in knowing what is actually running in the video. Otherwise, hope on <a href="https://nixers.net/Thread-IRC--1876" target="_blank" rel="noopener" class="mycode_url">IRC</a> and ask.<br />
<br />
<hr class="mycode_hr" />
<br />
Have fun!<br />
<br />
<hr class="mycode_hr" />
<br />
The result has been uploaded as <a href="https://nixers.net/images/2021-nixers-workflow-compilation.webm" target="_blank" rel="noopener" class="mycode_url">webm</a>, on a <a href="https://www.youtube.com/watch?v=PvsanPakB_g" target="_blank" rel="noopener" class="mycode_url">YouTube mirror</a>, on <a href="https://uninformativ.de/files/nixers/2021-nixers-workflow-compilation.webm" target="_blank" rel="noopener" class="mycode_url">movq mirror</a>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Your Audio Setup]]></title>
			<link>https://nixers.net/Thread-Your-Audio-Setup</link>
			<pubDate>Mon, 08 Feb 2021 06:37:11 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://nixers.net/member.php?action=profile&uid=80">venam</a>]]></dc:creator>
			<guid isPermaLink="false">https://nixers.net/Thread-Your-Audio-Setup</guid>
			<description><![CDATA[Hello nixers,<br />
I searched the forums and couldn't actually find anything related to audio.<br />
<br />
I recently wrote <a href="https://venam.nixers.net/blog/unix/2021/02/07/audio-stack.html" target="_blank" rel="noopener" class="mycode_url">a summary</a> of the audio stack on open source Unix-like systems.<br />
But I'd like to know your opinion and your actual local setup.<br />
<br />
Do you prefer the audio processing to happen in user-land or kernel?<br />
Do you have a use for audio pipeline?<br />
Or for volume per-application?<br />
What do you think of PipeWire, are you using it?<br />
What's your preferred audio stack currently?<br />
Do you generate music on your machine?<br />
<br />
Otherwise, let's talk anything audio.<br />
<br />
The thing I'm most amazed is that it's the first time that I actually understand ALSA's configuration format. Now it just clicked: it's a big dictionary of different profiles/devices that get merged.]]></description>
			<content:encoded><![CDATA[Hello nixers,<br />
I searched the forums and couldn't actually find anything related to audio.<br />
<br />
I recently wrote <a href="https://venam.nixers.net/blog/unix/2021/02/07/audio-stack.html" target="_blank" rel="noopener" class="mycode_url">a summary</a> of the audio stack on open source Unix-like systems.<br />
But I'd like to know your opinion and your actual local setup.<br />
<br />
Do you prefer the audio processing to happen in user-land or kernel?<br />
Do you have a use for audio pipeline?<br />
Or for volume per-application?<br />
What do you think of PipeWire, are you using it?<br />
What's your preferred audio stack currently?<br />
Do you generate music on your machine?<br />
<br />
Otherwise, let's talk anything audio.<br />
<br />
The thing I'm most amazed is that it's the first time that I actually understand ALSA's configuration format. Now it just clicked: it's a big dictionary of different profiles/devices that get merged.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Blackbox in Windows lives!]]></title>
			<link>https://nixers.net/Thread-Blackbox-in-Windows-lives</link>
			<pubDate>Wed, 27 Jan 2021 03:06:41 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://nixers.net/member.php?action=profile&uid=16">Evolution</a>]]></dc:creator>
			<guid isPermaLink="false">https://nixers.net/Thread-Blackbox-in-Windows-lives</guid>
			<description><![CDATA[So long before I ever got into linux (and the reason I eventually did) I absolutely loved trimming down Windows XP to the bare minimum and rolling my own ISOs to share on sites like Cyberwarez (Now defunct)<br />
<br />
One of the major modifications that many people did was.. disable Explorer. Normally this meant you lost your taskbar, filemanager, etc but there existed Blackbox (ported from the very same Blackbox that still exists today and would later spawn Openbox) which would act as a lightweight customizable replacement. <br />
<br />
Many forks sprang up adding things like plugin support, additional customization options, or just plain fixes for the changing Windows ecosystem.<br />
<br />
Problems began to spring up after the release of Vista and got worse with Windows 7, the way windows handled core aspects of its desktop environment began changing rapidly and interoperability was falling apart, by the time Windows 8 was released most forks were barely functional, an effort was made by some great devs in the community and a mostly functional fork was released that worked decently in Windows 7.<br />
<br />
After that though, silence. Any bugs that cropped up just stayed.. the codebase is such a behemoth of OS and library specific knowledge that was mostly written more than a decade ago; not just anyone can jump into it.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">TL;DR:</span><br />
Fast forward 5 years and out of the blue <a href="http://xoblite.net/docs/" target="_blank" rel="noopener" class="mycode_url">Xoblite (A popular fork) gets a new release, fully working in Windows 10!</a><br />
<br />
So for those of use forced to maintain a Windows installation for whatever reason this is a breath of fresh air.]]></description>
			<content:encoded><![CDATA[So long before I ever got into linux (and the reason I eventually did) I absolutely loved trimming down Windows XP to the bare minimum and rolling my own ISOs to share on sites like Cyberwarez (Now defunct)<br />
<br />
One of the major modifications that many people did was.. disable Explorer. Normally this meant you lost your taskbar, filemanager, etc but there existed Blackbox (ported from the very same Blackbox that still exists today and would later spawn Openbox) which would act as a lightweight customizable replacement. <br />
<br />
Many forks sprang up adding things like plugin support, additional customization options, or just plain fixes for the changing Windows ecosystem.<br />
<br />
Problems began to spring up after the release of Vista and got worse with Windows 7, the way windows handled core aspects of its desktop environment began changing rapidly and interoperability was falling apart, by the time Windows 8 was released most forks were barely functional, an effort was made by some great devs in the community and a mostly functional fork was released that worked decently in Windows 7.<br />
<br />
After that though, silence. Any bugs that cropped up just stayed.. the codebase is such a behemoth of OS and library specific knowledge that was mostly written more than a decade ago; not just anyone can jump into it.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">TL;DR:</span><br />
Fast forward 5 years and out of the blue <a href="http://xoblite.net/docs/" target="_blank" rel="noopener" class="mycode_url">Xoblite (A popular fork) gets a new release, fully working in Windows 10!</a><br />
<br />
So for those of use forced to maintain a Windows installation for whatever reason this is a breath of fresh air.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[How to change the defaut grey bg of apps]]></title>
			<link>https://nixers.net/Thread-How-to-change-the-defaut-grey-bg-of-apps</link>
			<pubDate>Fri, 04 Dec 2020 04:28:47 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://nixers.net/member.php?action=profile&uid=2034">pfr</a>]]></dc:creator>
			<guid isPermaLink="false">https://nixers.net/Thread-How-to-change-the-defaut-grey-bg-of-apps</guid>
			<description><![CDATA[Noob question, and rather than try to explain it, here is a scrot:<br />
<br />
<img src="https://i.postimg.cc/C5m1Xmgn/term-bg-000.png" alt="[Image: term-bg-000.png]" class="mycode_img" loading="lazy" /><br />
<br />
I haven't found any config files online for nmon or gtypist. Vis has a config file in which you can change the bg color but how can you disable the bg color all together so that it's transparent (or simply use the terminals defaults).<br />
<br />
Cheers]]></description>
			<content:encoded><![CDATA[Noob question, and rather than try to explain it, here is a scrot:<br />
<br />
<img src="https://i.postimg.cc/C5m1Xmgn/term-bg-000.png" alt="[Image: term-bg-000.png]" class="mycode_img" loading="lazy" /><br />
<br />
I haven't found any config files online for nmon or gtypist. Vis has a config file in which you can change the bg color but how can you disable the bg color all together so that it's transparent (or simply use the terminals defaults).<br />
<br />
Cheers]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[My panel scripts]]></title>
			<link>https://nixers.net/Thread-My-panel-scripts</link>
			<pubDate>Thu, 03 Dec 2020 14:54:34 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://nixers.net/member.php?action=profile&uid=1047">neeasade</a>]]></dc:creator>
			<guid isPermaLink="false">https://nixers.net/Thread-My-panel-scripts</guid>
			<description><![CDATA[This started as a reply in the other thread [1] but I quickly realized it was getting link-dense, so I copied it over here. This is a share of the scripts that drive my i3blocks -&gt; lemonbar experience. <br />
<br />
Here's what my pipeline looks like[2] (form json dumps into plaintext) and my current i3blocks config[3]. It might look a little weird because it is generated. All of the values in that config end up as environment variables for panel sections (which I call "lemons"). And here's a link to the "tags" lemon [4], using a lemonbar helper[5] which gets passed to season[6] to style the separate blocks (this means the lemons work as standalone scripts as well as panel blocks).<br />
<br />
The result of all these shenanigans is I can make fun panel-global styling decisions and see things quickly.<br />
<br />
edit: to elaborate on the role of i3blocks: it gives me separate update timers for my panel sections, the ability to poll, and the ability to update only one block in response to a signal. Also I forgot to link it[7]<br />
<br />
[1] <a href="https://nixers.net/Thread-How-To-Refresh-your-status-bar-in-response-to-a-hotkey" target="_blank" rel="noopener" class="mycode_url">https://nixers.net/Thread-How-To-Refresh...o-a-hotkey</a><br />
[2] <a href="https://github.com/neeasade/dotfiles/blob/6a36de10279c680022b59b721747261e4c8c39c4/wm/.wm/panel/lemonade#L30" target="_blank" rel="noopener" class="mycode_url">https://github.com/neeasade/dotfiles/blo...monade#L30</a><br />
[3] <a href="https://0x0.st/i7gU.txt" target="_blank" rel="noopener" class="mycode_url">https://0x0.st/i7gU.txt</a><br />
[4] <a href="https://github.com/neeasade/dotfiles/blob/master/wm/.wm/panel/lemons/tags#L118" target="_blank" rel="noopener" class="mycode_url">https://github.com/neeasade/dotfiles/blo.../tags#L118</a><br />
[5] <a href="https://github.com/neeasade/dotfiles/blob/master/wm/.wm/panel/tools/bs#L4" target="_blank" rel="noopener" class="mycode_url">https://github.com/neeasade/dotfiles/blo...ools/bs#L4</a><br />
[6] <a href="https://github.com/neeasade/dotfiles/blob/6a36de10279c680022b59b721747261e4c8c39c4/wm/.wm/panel/tools/season#L61" target="_blank" rel="noopener" class="mycode_url">https://github.com/neeasade/dotfiles/blo...season#L61</a><br />
[7] <a href="https://github.com/vivien/i3blocks" target="_blank" rel="noopener" class="mycode_url">https://github.com/vivien/i3blocks</a>]]></description>
			<content:encoded><![CDATA[This started as a reply in the other thread [1] but I quickly realized it was getting link-dense, so I copied it over here. This is a share of the scripts that drive my i3blocks -&gt; lemonbar experience. <br />
<br />
Here's what my pipeline looks like[2] (form json dumps into plaintext) and my current i3blocks config[3]. It might look a little weird because it is generated. All of the values in that config end up as environment variables for panel sections (which I call "lemons"). And here's a link to the "tags" lemon [4], using a lemonbar helper[5] which gets passed to season[6] to style the separate blocks (this means the lemons work as standalone scripts as well as panel blocks).<br />
<br />
The result of all these shenanigans is I can make fun panel-global styling decisions and see things quickly.<br />
<br />
edit: to elaborate on the role of i3blocks: it gives me separate update timers for my panel sections, the ability to poll, and the ability to update only one block in response to a signal. Also I forgot to link it[7]<br />
<br />
[1] <a href="https://nixers.net/Thread-How-To-Refresh-your-status-bar-in-response-to-a-hotkey" target="_blank" rel="noopener" class="mycode_url">https://nixers.net/Thread-How-To-Refresh...o-a-hotkey</a><br />
[2] <a href="https://github.com/neeasade/dotfiles/blob/6a36de10279c680022b59b721747261e4c8c39c4/wm/.wm/panel/lemonade#L30" target="_blank" rel="noopener" class="mycode_url">https://github.com/neeasade/dotfiles/blo...monade#L30</a><br />
[3] <a href="https://0x0.st/i7gU.txt" target="_blank" rel="noopener" class="mycode_url">https://0x0.st/i7gU.txt</a><br />
[4] <a href="https://github.com/neeasade/dotfiles/blob/master/wm/.wm/panel/lemons/tags#L118" target="_blank" rel="noopener" class="mycode_url">https://github.com/neeasade/dotfiles/blo.../tags#L118</a><br />
[5] <a href="https://github.com/neeasade/dotfiles/blob/master/wm/.wm/panel/tools/bs#L4" target="_blank" rel="noopener" class="mycode_url">https://github.com/neeasade/dotfiles/blo...ools/bs#L4</a><br />
[6] <a href="https://github.com/neeasade/dotfiles/blob/6a36de10279c680022b59b721747261e4c8c39c4/wm/.wm/panel/tools/season#L61" target="_blank" rel="noopener" class="mycode_url">https://github.com/neeasade/dotfiles/blo...season#L61</a><br />
[7] <a href="https://github.com/vivien/i3blocks" target="_blank" rel="noopener" class="mycode_url">https://github.com/vivien/i3blocks</a>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[/etc/motd]]></title>
			<link>https://nixers.net/Thread-etc-motd</link>
			<pubDate>Thu, 19 Nov 2020 01:31:32 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://nixers.net/member.php?action=profile&uid=2034">pfr</a>]]></dc:creator>
			<guid isPermaLink="false">https://nixers.net/Thread-etc-motd</guid>
			<description><![CDATA[For those who don't use a login manager and start your X session with startx, have you customised your <span style="font-weight: bold;" class="mycode_b">message of the day</span>? <br />
<br />
Here is my <a href="https://github.com/Ramiferous/NetBSD/blob/master/etc/motd" target="_blank" rel="noopener" class="mycode_url">/etc/motd</a> -- Artwork NOT by me but rather some other talented person out there (found it on the weeb)<br />
<img src="https://i.postimg.cc/VNGYcVwV/11-19-2020-12-35.png" alt="[Image: 11-19-2020-12-35.png]" class="mycode_img" loading="lazy" />]]></description>
			<content:encoded><![CDATA[For those who don't use a login manager and start your X session with startx, have you customised your <span style="font-weight: bold;" class="mycode_b">message of the day</span>? <br />
<br />
Here is my <a href="https://github.com/Ramiferous/NetBSD/blob/master/etc/motd" target="_blank" rel="noopener" class="mycode_url">/etc/motd</a> -- Artwork NOT by me but rather some other talented person out there (found it on the weeb)<br />
<img src="https://i.postimg.cc/VNGYcVwV/11-19-2020-12-35.png" alt="[Image: 11-19-2020-12-35.png]" class="mycode_img" loading="lazy" />]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Wayland server libraries: wlroots, libweston, swc]]></title>
			<link>https://nixers.net/Thread-Wayland-server-libraries-wlroots-libweston-swc</link>
			<pubDate>Tue, 03 Nov 2020 12:58:13 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://nixers.net/member.php?action=profile&uid=2075">mcol</a>]]></dc:creator>
			<guid isPermaLink="false">https://nixers.net/Thread-Wayland-server-libraries-wlroots-libweston-swc</guid>
			<description><![CDATA[When building a wayland compositor, a decision has to be made about which library (if any) to use as a foundation on top of which to implement the more unique features specific to the compositor. This is because the compositor is also responsible for basic functionality like managing input and output devices, functionality that is generally common between compositors (or, to be more precise, between compositors with the same intended use i.e. desktop, phone, etc).<br />
<br />
To fill this role, some libraries have appeared over the years, such as (in C):<br />
<ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b"><a href="https://github.com/swaywm/wlroots" target="_blank" rel="noopener" class="mycode_url">wlroots</a></span>: This popular library is very modular, so you can pick and choose which parts you need. The library itself covers a huge array of use cases, so it is very flexible and has lots of utility, much of which would be ignored by a given compositor. It's use seems quite intuitive (see the minimal WM example: <a href="https://github.com/swaywm/wlroots/blob/master/tinywl/tinywl.c" target="_blank" rel="noopener" class="mycode_url">tinywl</a>).<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b"><a href="https://gitlab.freedesktop.org/wayland/weston" target="_blank" rel="noopener" class="mycode_url">libweston</a></span>: This library's <a href="https://gitlab.freedesktop.org/wayland/weston/-/blob/master/README.md#libweston-design-goals" target="_blank" rel="noopener" class="mycode_url">design goals</a> appear to be similar to wlroots', but their code is IMO somewhat less clear and accessible, if viewing it with an eye to use it to create a new compositor.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b"><a href="https://github.com/michaelforney/swc" target="_blank" rel="noopener" class="mycode_url">swc</a></span>: This less well-known lib is aimed primarily at tiling WMs for the desktop, and as a result is relatively small and focussed. The API for creating compositors appears simple (though I haven't had a chance to read deeply into it).<br />
</li>
</ul>
<br />
Are there any more that I have missed?<br />
<br />
Why might you choose one over another?<br />
<br />
If you implement a wayland compositor or plan to, which did you choose and why?<br />
<br />
Personally I will probably try out wlroots initially due to its accessibility (it has lots of examples) to first gain an understanding of wayland in general before moving to something smaller and more focussed for my own compositor.<br />
<br />
Please let me know if any of the info here is incorrect -- wayland is relatively new to me. Have some wacky bonus videos:<br />
 - <a href="https://www.youtube.com/watch?v=ZBLLC5fOy98&amp;list=PLb7YRKEhWEBUIoT-a29UoJW9mhfzjpNle&amp;index=2" target="_blank" rel="noopener" class="mycode_url">Wayfire: wrot, fisheye, invert and zoom plugins</a><br />
 - <a href="https://www.youtube.com/watch?v=_FjuPn7MXMs" target="_blank" rel="noopener" class="mycode_url">Qt 5 based 3D Wayland compositor</a>]]></description>
			<content:encoded><![CDATA[When building a wayland compositor, a decision has to be made about which library (if any) to use as a foundation on top of which to implement the more unique features specific to the compositor. This is because the compositor is also responsible for basic functionality like managing input and output devices, functionality that is generally common between compositors (or, to be more precise, between compositors with the same intended use i.e. desktop, phone, etc).<br />
<br />
To fill this role, some libraries have appeared over the years, such as (in C):<br />
<ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b"><a href="https://github.com/swaywm/wlroots" target="_blank" rel="noopener" class="mycode_url">wlroots</a></span>: This popular library is very modular, so you can pick and choose which parts you need. The library itself covers a huge array of use cases, so it is very flexible and has lots of utility, much of which would be ignored by a given compositor. It's use seems quite intuitive (see the minimal WM example: <a href="https://github.com/swaywm/wlroots/blob/master/tinywl/tinywl.c" target="_blank" rel="noopener" class="mycode_url">tinywl</a>).<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b"><a href="https://gitlab.freedesktop.org/wayland/weston" target="_blank" rel="noopener" class="mycode_url">libweston</a></span>: This library's <a href="https://gitlab.freedesktop.org/wayland/weston/-/blob/master/README.md#libweston-design-goals" target="_blank" rel="noopener" class="mycode_url">design goals</a> appear to be similar to wlroots', but their code is IMO somewhat less clear and accessible, if viewing it with an eye to use it to create a new compositor.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b"><a href="https://github.com/michaelforney/swc" target="_blank" rel="noopener" class="mycode_url">swc</a></span>: This less well-known lib is aimed primarily at tiling WMs for the desktop, and as a result is relatively small and focussed. The API for creating compositors appears simple (though I haven't had a chance to read deeply into it).<br />
</li>
</ul>
<br />
Are there any more that I have missed?<br />
<br />
Why might you choose one over another?<br />
<br />
If you implement a wayland compositor or plan to, which did you choose and why?<br />
<br />
Personally I will probably try out wlroots initially due to its accessibility (it has lots of examples) to first gain an understanding of wayland in general before moving to something smaller and more focussed for my own compositor.<br />
<br />
Please let me know if any of the info here is incorrect -- wayland is relatively new to me. Have some wacky bonus videos:<br />
 - <a href="https://www.youtube.com/watch?v=ZBLLC5fOy98&amp;list=PLb7YRKEhWEBUIoT-a29UoJW9mhfzjpNle&amp;index=2" target="_blank" rel="noopener" class="mycode_url">Wayfire: wrot, fisheye, invert and zoom plugins</a><br />
 - <a href="https://www.youtube.com/watch?v=_FjuPn7MXMs" target="_blank" rel="noopener" class="mycode_url">Qt 5 based 3D Wayland compositor</a>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Steno typing (Plover)]]></title>
			<link>https://nixers.net/Thread-Steno-typing-Plover</link>
			<pubDate>Sun, 25 Oct 2020 18:00:48 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://nixers.net/member.php?action=profile&uid=2112">stratex</a>]]></dc:creator>
			<guid isPermaLink="false">https://nixers.net/Thread-Steno-typing-Plover</guid>
			<description><![CDATA[I was thinking about it for so long, imagine how cool is that to "type" at a whopping 250-300WPM (1250-1500CPM), that's how I see a true hacker would type. Of course it doesn't matter that much for programming, because you think and go around the code more than you actually type, but for any other kinds of text input Steno is a very attractive skill in my opinion.<br />
I will try to learn stenotyping (with plover), and will keep a diary in this thread to make myself accountable, at least more than I would be at my own. If you have an ortholiniar keyboard (preferably something like Planck) you can join me for more fun and motivation. I don't think regular staggered qwerty with a single space bar will be comfortable to stenotype, but you can try it anyway.<br />
Since I always have problems with motivation and persistence, I decided not to rush with this one, to not burnout. I think I can manage comfortable 30 minutes of practice a day, minus weekends, and I give myself a whole year to learn it to at least my regular typing speed of ~80WPM. Wish me luck.<br />
<br />
Some good videos, you can check:<br />
<br />
Co-creator of Plover gives a presentation, it's old but that's where it started:<br />
<a href="https://www.youtube.com/watch?v=Wpv-Qb-dB6g" target="_blank" rel="noopener" class="mycode_url">https://www.youtube.com/watch?v=Wpv-Qb-dB6g</a><br />
Another good presentation:<br />
<a href="https://www.youtube.com/watch?v=CRXiNMS9JuY" target="_blank" rel="noopener" class="mycode_url">https://www.youtube.com/watch?v=CRXiNMS9JuY</a><br />
Typing example (on staggered keyboard):<br />
<a href="https://www.youtube.com/watch?v=KZGuBV1xe64" target="_blank" rel="noopener" class="mycode_url">https://www.youtube.com/watch?v=KZGuBV1xe64</a><br />
Real time on steno machine:<br />
<a href="https://www.youtube.com/watch?v=YpJ4NP6O9pw" target="_blank" rel="noopener" class="mycode_url">https://www.youtube.com/watch?v=YpJ4NP6O9pw</a>]]></description>
			<content:encoded><![CDATA[I was thinking about it for so long, imagine how cool is that to "type" at a whopping 250-300WPM (1250-1500CPM), that's how I see a true hacker would type. Of course it doesn't matter that much for programming, because you think and go around the code more than you actually type, but for any other kinds of text input Steno is a very attractive skill in my opinion.<br />
I will try to learn stenotyping (with plover), and will keep a diary in this thread to make myself accountable, at least more than I would be at my own. If you have an ortholiniar keyboard (preferably something like Planck) you can join me for more fun and motivation. I don't think regular staggered qwerty with a single space bar will be comfortable to stenotype, but you can try it anyway.<br />
Since I always have problems with motivation and persistence, I decided not to rush with this one, to not burnout. I think I can manage comfortable 30 minutes of practice a day, minus weekends, and I give myself a whole year to learn it to at least my regular typing speed of ~80WPM. Wish me luck.<br />
<br />
Some good videos, you can check:<br />
<br />
Co-creator of Plover gives a presentation, it's old but that's where it started:<br />
<a href="https://www.youtube.com/watch?v=Wpv-Qb-dB6g" target="_blank" rel="noopener" class="mycode_url">https://www.youtube.com/watch?v=Wpv-Qb-dB6g</a><br />
Another good presentation:<br />
<a href="https://www.youtube.com/watch?v=CRXiNMS9JuY" target="_blank" rel="noopener" class="mycode_url">https://www.youtube.com/watch?v=CRXiNMS9JuY</a><br />
Typing example (on staggered keyboard):<br />
<a href="https://www.youtube.com/watch?v=KZGuBV1xe64" target="_blank" rel="noopener" class="mycode_url">https://www.youtube.com/watch?v=KZGuBV1xe64</a><br />
Real time on steno machine:<br />
<a href="https://www.youtube.com/watch?v=YpJ4NP6O9pw" target="_blank" rel="noopener" class="mycode_url">https://www.youtube.com/watch?v=YpJ4NP6O9pw</a>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Freetype2 and Fontconfig settings]]></title>
			<link>https://nixers.net/Thread-Freetype2-and-Fontconfig-settings</link>
			<pubDate>Mon, 14 Sep 2020 06:51:20 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://nixers.net/member.php?action=profile&uid=80">venam</a>]]></dc:creator>
			<guid isPermaLink="false">https://nixers.net/Thread-Freetype2-and-Fontconfig-settings</guid>
			<description><![CDATA[Hello nixers,<br />
This thread stems from conversations I've had with <a href="https://nixers.net/User-freem" target="_blank" rel="noopener" class="mycode_url">freem</a> on IRC.<br />
<br />
I was wondering about the Freetype2 drivers properties and which one actually did something. So I pushed my research in <a href="https://venam.nixers.net/blog/unix/2020/09/14/playing_with_fonts.html" target="_blank" rel="noopener" class="mycode_url">an article</a>.<br />
<br />
I then continued in the article to show visually the difference between all the confusing settings.<br />
<br />
The most fun part was building the last fontconfig script. For those unaware, fontconfig has a very powerful xml scripting feature with conditional operators and variables. I've left the conf at the end as an example to make Windows fonts look better (on my machine at least).<br />
<br />
I'm still wondering why there aren't good GUIs to manage fonts. All the ones I see are missing a lot of features.<br />
Maybe it's a case of: Nobody can do it better than yourself. And I would have to write it. I'll put this on my TODO list in all cases.<br />
<br />
What do you think?<br />
Have you ever used fontconfig like that?<br />
Did you know freetype had so many toggles?]]></description>
			<content:encoded><![CDATA[Hello nixers,<br />
This thread stems from conversations I've had with <a href="https://nixers.net/User-freem" target="_blank" rel="noopener" class="mycode_url">freem</a> on IRC.<br />
<br />
I was wondering about the Freetype2 drivers properties and which one actually did something. So I pushed my research in <a href="https://venam.nixers.net/blog/unix/2020/09/14/playing_with_fonts.html" target="_blank" rel="noopener" class="mycode_url">an article</a>.<br />
<br />
I then continued in the article to show visually the difference between all the confusing settings.<br />
<br />
The most fun part was building the last fontconfig script. For those unaware, fontconfig has a very powerful xml scripting feature with conditional operators and variables. I've left the conf at the end as an example to make Windows fonts look better (on my machine at least).<br />
<br />
I'm still wondering why there aren't good GUIs to manage fonts. All the ones I see are missing a lot of features.<br />
Maybe it's a case of: Nobody can do it better than yourself. And I would have to write it. I'll put this on my TODO list in all cases.<br />
<br />
What do you think?<br />
Have you ever used fontconfig like that?<br />
Did you know freetype had so many toggles?]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[How Many Ways To Start An Xserver]]></title>
			<link>https://nixers.net/Thread-How-Many-Ways-To-Start-An-Xserver</link>
			<pubDate>Sat, 05 Sep 2020 14:50:28 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://nixers.net/member.php?action=profile&uid=80">venam</a>]]></dc:creator>
			<guid isPermaLink="false">https://nixers.net/Thread-How-Many-Ways-To-Start-An-Xserver</guid>
			<description><![CDATA[A <a href="https://nixers.net/Thread-Maximum-number-of-clients-reached-on-X" target="_blank" rel="noopener" class="mycode_url">recent thread on nixers</a> got me thinking about the Xserver. We often interract with it either through <span style="font-weight: bold;" class="mycode_b">startx</span> or a display manager. How many ways can we actually send parameters to the X server, actually how many ways do we have to start an X session.<br />
<br />
The first one is through the display manager, this is specific to each one and I'll take the case of lightdm.<br />
<span style="font-weight: bold;" class="mycode_b">lightdm.conf</span> allows to pass parameters to the Xserver via the <span style="font-weight: bold;" class="mycode_b">xserver-command =</span> directive.<br />
<br />
For example:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>xserver-command= X -maxclients 2048</code></div></div><br />
<br />
An obvious way to pass parameters to the Xserver is through its configuration files. For example, Xorg has a bunch in <span style="font-weight: bold;" class="mycode_b">/etc/X11</span>.<br />
<br />
From <span style="font-weight: bold;" class="mycode_b">man 5 xorg.conf</span>:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>SERVERFLAGS SECTION<br />
...<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Option "MaxClients"&nbsp;&nbsp;"integer"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the maximum number of clients allowed to connect&nbsp;&nbsp;to&nbsp;&nbsp;the&nbsp;&nbsp;X&nbsp;&nbsp;server.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Acceptable values are 64, 128, 256 or 512.<br />
# so...<br />
Section "ServerFlags"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Option "MaxClients"&nbsp;&nbsp;2048<br />
EndSection</code></div></div><br />
Now what if you are using startx(1).<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>NAME<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; startx - initialize an X session<br />
SYNOPSIS<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; startx [ [ client ] options ... ] [ -- [ server ] [ display ] options ... ]</code></div></div><br />
Anything after the <span style="font-weight: bold;" class="mycode_b">--</span> will be considered arguments to the Xserver, if not starting with <span style="font-weight: bold;" class="mycode_b">/</span> or <span style="font-weight: bold;" class="mycode_b">./</span><br />
<br />
So you can do the following:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>startx -- -maxclients 2048</code></div></div><br />
startx executes by default the server found in <span style="font-weight: bold;" class="mycode_b">&#36;HOME/.xserverrc</span> or the one in the xinit directory, usually these days <span style="font-weight: bold;" class="mycode_b">/etc/X11/xinit/xserverrc</span>.<br />
<br />
Similarly, if you are using xinit(1).<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>NAME<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xinit - X Window System initializer<br />
SYNOPSIS<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xinit [ [ client ] options ... ] [ -- [ server ] [ display ] options ... ]</code></div></div><br />
Anything after the <span style="font-weight: bold;" class="mycode_b">--</span> will be considered arguments to the Xserver, executing by default xserverrc, just like startx.<br />
<br />
So why use startx at all, you might ask.<br />
<br />
startx is a wrapper over xinit to make it easier to start a session, though...<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code># Site administrators are STRONGLY urged to write nicer versions.</code></div></div><br />
So what does it do?<br />
<br />
It gets the next available display by looping in <span style="font-weight: bold;" class="mycode_b">/tmp/.X{digit}-lock</span> and <span style="font-weight: bold;" class="mycode_b">/tmp/.X11-unix/X{digit}</span>, and the tty number by executing <span style="font-weight: bold;" class="mycode_b">tty(1)</span>.<br />
<br />
It also sets features for xauth if enabled, like setting the <span style="font-weight: bold;" class="mycode_b">.Xauthority</span> environment variable, creating an authentication cookie (mcookie) and registering it using <span style="font-weight: bold;" class="mycode_b">xauth(1)</span>. And cleans the allocated vt (deallocvt) and xauth session if needed. But the Xauth isn't mandatory.<br />
<br />
In the end you get a line like this to open a session on display <span style="font-weight: bold;" class="mycode_b">:1</span> and TTY 2:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>xinit &#36;HOME/.xinitrc -- /usr/bin/Xorg :1 vt2 -maxcients 2048 -keeptty [-auth /tmp/serverauth.SRVBaiALw0]</code></div></div><br />
<br />
So you can definitely pass your arguments to the Xserver there.<br />
<br />
<br />
But what if we go further and run Xorg ourselves, what do we need xinit for anyway. Let's go all the way.<br />
<br />
From the Arch Wiki:<br />
<blockquote class="mycode_quote"><cite>Quote:</cite>The Xorg(1) command is usually not run directly, instead the X server is started with either a display manager or xinit.</blockquote>
<br />
It was quite hard to find a way to run the Xorg(1) Xserver directly from the TTY without xinit and without messing up everything. But you can do it in the same way you would launch a Xephyr Xserver or Xvfb Xserver or others — Same o' same o'.<br />
<br />
The following starts an Xorg Xserver on display <span style="font-weight: bold;" class="mycode_b">:1</span> and TTY 2, and runs the session over it (xinitrc script).<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>/usr/bin/Xorg :1 vt2 -keeptty -maxclients 2048 &amp;<br />
DISPLAY=:1<br />
export DISPLAY<br />
sleep 5<br />
./&#36;HOME/.xinitrc</code></div></div>The sleep is sort of mandatory if you want to start Xorg in the background. (<span style="font-style: italic;" class="mycode_i">EDIT:</span> or you can <span style="font-weight: bold;" class="mycode_b">wait</span> for the process like sx does or similar to what  <a href="https://www.uninformativ.de/git/bin-pub/file/sx.html#l40" target="_blank" rel="noopener" class="mycode_url">vain's version does</a> capturing USR1 does the trick)<br />
<br />
So many layers of indirection, startx calls xinit, xinit calls the Xserver.<br />
<br />
That's it folks, I hope you enjoy this little escapade.<br />
And comment with your own thoughts and ways to start X.]]></description>
			<content:encoded><![CDATA[A <a href="https://nixers.net/Thread-Maximum-number-of-clients-reached-on-X" target="_blank" rel="noopener" class="mycode_url">recent thread on nixers</a> got me thinking about the Xserver. We often interract with it either through <span style="font-weight: bold;" class="mycode_b">startx</span> or a display manager. How many ways can we actually send parameters to the X server, actually how many ways do we have to start an X session.<br />
<br />
The first one is through the display manager, this is specific to each one and I'll take the case of lightdm.<br />
<span style="font-weight: bold;" class="mycode_b">lightdm.conf</span> allows to pass parameters to the Xserver via the <span style="font-weight: bold;" class="mycode_b">xserver-command =</span> directive.<br />
<br />
For example:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>xserver-command= X -maxclients 2048</code></div></div><br />
<br />
An obvious way to pass parameters to the Xserver is through its configuration files. For example, Xorg has a bunch in <span style="font-weight: bold;" class="mycode_b">/etc/X11</span>.<br />
<br />
From <span style="font-weight: bold;" class="mycode_b">man 5 xorg.conf</span>:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>SERVERFLAGS SECTION<br />
...<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Option "MaxClients"&nbsp;&nbsp;"integer"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the maximum number of clients allowed to connect&nbsp;&nbsp;to&nbsp;&nbsp;the&nbsp;&nbsp;X&nbsp;&nbsp;server.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Acceptable values are 64, 128, 256 or 512.<br />
# so...<br />
Section "ServerFlags"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Option "MaxClients"&nbsp;&nbsp;2048<br />
EndSection</code></div></div><br />
Now what if you are using startx(1).<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>NAME<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; startx - initialize an X session<br />
SYNOPSIS<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; startx [ [ client ] options ... ] [ -- [ server ] [ display ] options ... ]</code></div></div><br />
Anything after the <span style="font-weight: bold;" class="mycode_b">--</span> will be considered arguments to the Xserver, if not starting with <span style="font-weight: bold;" class="mycode_b">/</span> or <span style="font-weight: bold;" class="mycode_b">./</span><br />
<br />
So you can do the following:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>startx -- -maxclients 2048</code></div></div><br />
startx executes by default the server found in <span style="font-weight: bold;" class="mycode_b">&#36;HOME/.xserverrc</span> or the one in the xinit directory, usually these days <span style="font-weight: bold;" class="mycode_b">/etc/X11/xinit/xserverrc</span>.<br />
<br />
Similarly, if you are using xinit(1).<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>NAME<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xinit - X Window System initializer<br />
SYNOPSIS<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xinit [ [ client ] options ... ] [ -- [ server ] [ display ] options ... ]</code></div></div><br />
Anything after the <span style="font-weight: bold;" class="mycode_b">--</span> will be considered arguments to the Xserver, executing by default xserverrc, just like startx.<br />
<br />
So why use startx at all, you might ask.<br />
<br />
startx is a wrapper over xinit to make it easier to start a session, though...<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code># Site administrators are STRONGLY urged to write nicer versions.</code></div></div><br />
So what does it do?<br />
<br />
It gets the next available display by looping in <span style="font-weight: bold;" class="mycode_b">/tmp/.X{digit}-lock</span> and <span style="font-weight: bold;" class="mycode_b">/tmp/.X11-unix/X{digit}</span>, and the tty number by executing <span style="font-weight: bold;" class="mycode_b">tty(1)</span>.<br />
<br />
It also sets features for xauth if enabled, like setting the <span style="font-weight: bold;" class="mycode_b">.Xauthority</span> environment variable, creating an authentication cookie (mcookie) and registering it using <span style="font-weight: bold;" class="mycode_b">xauth(1)</span>. And cleans the allocated vt (deallocvt) and xauth session if needed. But the Xauth isn't mandatory.<br />
<br />
In the end you get a line like this to open a session on display <span style="font-weight: bold;" class="mycode_b">:1</span> and TTY 2:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>xinit &#36;HOME/.xinitrc -- /usr/bin/Xorg :1 vt2 -maxcients 2048 -keeptty [-auth /tmp/serverauth.SRVBaiALw0]</code></div></div><br />
<br />
So you can definitely pass your arguments to the Xserver there.<br />
<br />
<br />
But what if we go further and run Xorg ourselves, what do we need xinit for anyway. Let's go all the way.<br />
<br />
From the Arch Wiki:<br />
<blockquote class="mycode_quote"><cite>Quote:</cite>The Xorg(1) command is usually not run directly, instead the X server is started with either a display manager or xinit.</blockquote>
<br />
It was quite hard to find a way to run the Xorg(1) Xserver directly from the TTY without xinit and without messing up everything. But you can do it in the same way you would launch a Xephyr Xserver or Xvfb Xserver or others — Same o' same o'.<br />
<br />
The following starts an Xorg Xserver on display <span style="font-weight: bold;" class="mycode_b">:1</span> and TTY 2, and runs the session over it (xinitrc script).<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>/usr/bin/Xorg :1 vt2 -keeptty -maxclients 2048 &amp;<br />
DISPLAY=:1<br />
export DISPLAY<br />
sleep 5<br />
./&#36;HOME/.xinitrc</code></div></div>The sleep is sort of mandatory if you want to start Xorg in the background. (<span style="font-style: italic;" class="mycode_i">EDIT:</span> or you can <span style="font-weight: bold;" class="mycode_b">wait</span> for the process like sx does or similar to what  <a href="https://www.uninformativ.de/git/bin-pub/file/sx.html#l40" target="_blank" rel="noopener" class="mycode_url">vain's version does</a> capturing USR1 does the trick)<br />
<br />
So many layers of indirection, startx calls xinit, xinit calls the Xserver.<br />
<br />
That's it folks, I hope you enjoy this little escapade.<br />
And comment with your own thoughts and ways to start X.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA["Maximum number of clients reached on X"]]></title>
			<link>https://nixers.net/Thread-Maximum-number-of-clients-reached-on-X</link>
			<pubDate>Tue, 01 Sep 2020 19:57:55 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://nixers.net/member.php?action=profile&uid=1047">neeasade</a>]]></dc:creator>
			<guid isPermaLink="false">https://nixers.net/Thread-Maximum-number-of-clients-reached-on-X</guid>
			<description><![CDATA[I draw borders on all my x clients with external tools, ala wmutils, so I can do WM-external logic like tags or other visual indicators that the original author did not account for.<br />
<br />
Occasionally, all my window borders stop being drawn, and my bg (usually set with feh) stops being set!<br />
<br />
Upon poking, I'll usually find something like this as an err message:<br />
<br />
~Maximum number of clients reached on X~<br />
<br />
Many moons ago I saved this snippet from the internet to find out who is hogging the most clients:<br />
<br />
~lsof -U +c 15 | cut -f1 -d' ' | sort | uniq -c | sort -rn | head -3~<br />
<br />
And usually I'll find steam or a web browser to a be a culprit, and killing them will free up some connections. My hazy understanding of the situation is there's a limit to the socket connections that can be made to the X server, and even once terminated, those connections take time to expire and free up room for more connections(?) - this problem would be exacerbated by bunches of one off X border draw tool calls, is the only thing I can imagine.<br />
<br />
Can anyone explain more clearly why this happens? or if there's some linux socket limit value I can tweak against my better judgment?<br />
<br />
Thanks,<br />
neeasade]]></description>
			<content:encoded><![CDATA[I draw borders on all my x clients with external tools, ala wmutils, so I can do WM-external logic like tags or other visual indicators that the original author did not account for.<br />
<br />
Occasionally, all my window borders stop being drawn, and my bg (usually set with feh) stops being set!<br />
<br />
Upon poking, I'll usually find something like this as an err message:<br />
<br />
~Maximum number of clients reached on X~<br />
<br />
Many moons ago I saved this snippet from the internet to find out who is hogging the most clients:<br />
<br />
~lsof -U +c 15 | cut -f1 -d' ' | sort | uniq -c | sort -rn | head -3~<br />
<br />
And usually I'll find steam or a web browser to a be a culprit, and killing them will free up some connections. My hazy understanding of the situation is there's a limit to the socket connections that can be made to the X server, and even once terminated, those connections take time to expire and free up room for more connections(?) - this problem would be exacerbated by bunches of one off X border draw tool calls, is the only thing I can imagine.<br />
<br />
Can anyone explain more clearly why this happens? or if there's some linux socket limit value I can tweak against my better judgment?<br />
<br />
Thanks,<br />
neeasade]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[window manager development thread]]></title>
			<link>https://nixers.net/Thread-window-manager-development-thread</link>
			<pubDate>Mon, 31 Aug 2020 00:10:05 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://nixers.net/member.php?action=profile&uid=1965">seninha</a>]]></dc:creator>
			<guid isPermaLink="false">https://nixers.net/Thread-window-manager-development-thread</guid>
			<description><![CDATA[We have some wm-writers here on the forums, I would like to call them for sharing their experiences, ideas and knowledge accumulated when writing their window managers.<br />
<br />
I'm working on shod (<a href="https://github.com/phillbush/shod/wiki" target="_blank" rel="noopener" class="mycode_url">here's its documentation</a>), an hybrid (floating and tiling) window manager that heavily depends on EWMH hints and that is fully controlled by wmctrl.<br />
<br />
It started as a sowm fork, then it expanded into something bigger, incorporating code from dwm, berry and katriawm, and inspiration from i3.  I used Nye's Xlib Programming Manual (and its chapter 16) as my knowledge base.<br />
<br />
One of the things I realized is how X11 imposes its limitations on the wm writers and how much of dummy windows I have to create in order to implement some features. I don't know if using dummy windows is the way to go, but that's what I did. One of the uses of dummy windows was to implement EWMH above and below windows (windows that are set to be above or below others).<br />
<br />
Another tricky part was window moving and resizing with the mouse. That's the hackiest part of my code. At first I was using wmutils' xmmv and xmrs for doing that. But later I implemented it on the wm. dwm implements window moving/resizing in an event loop apart from the main xevent loop, but I implemented it in the main event loop. Again, I don't know if my way is the way to go.<br />
<br />
Some routines in shod's code have grown into a complex thing, especially the routine that tiles windows and the routine that places window on the screen (when a window is open, shod tries to place it on an empty place on the screen (a place with few windows)).<br />
<br />
I've not chosen a fancy algorithm for tiling windows like binary-tree splitting like bspwm, because I'm not an experienced programmer to deal with the data structures imposed by those algorithms. I've chosen something simpler, based on how I use tiling. I only used column layout: the screen is divided into columns and each column can have any number of windows tiled vertically (one above the other). For example, in the drawings bellow.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>┌───┬───┬───┐<br />
│&nbsp;&nbsp; ├───┤&nbsp;&nbsp; │<br />
│&nbsp;&nbsp; │&nbsp;&nbsp; ├───┤<br />
├───┤&nbsp;&nbsp; │&nbsp;&nbsp; │<br />
│&nbsp;&nbsp; ├───┤&nbsp;&nbsp; │<br />
└───┴───┴───┘<br />
<br />
┌─────┬─────┐<br />
│&nbsp;&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp;&nbsp; │<br />
│&nbsp;&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp;&nbsp; │<br />
│&nbsp;&nbsp;&nbsp;&nbsp; ├─────┤<br />
│&nbsp;&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp;&nbsp; │<br />
└─────┴─────┘</code></div></div><br />
I realized that this is the only layout I ever use, so I created a wm that only uses this layout. I also realized that spliting-tree kind of tiling complicates the workflow (at least for me).<br />
Even thus, I almost always use up to two columns with up to two windows each. The most common layout I use is the one in the second draw (two columns, the left one with a single window and the right one with up to two windows).<br />
<br />
The last improvement I did in shod was to implement the _NET_WM_MOVERESIZE hint. Client-side decorated Gtk3 windows emit this signal when being dragged by their header bar. I think qt applications also use this hint when being dragged by a empty part of their UI.<br />
<br />
And also focus.<br />
Focus handling is one of the hardest parts of writing a wm. Even now sometimes I got a sloppy-focus behavior (when closing the last window in a workspace, for example), even when I use the click-to-focus mode.  I think I will use more dummy windows for this (that's what katriawm does, I think). I implemented focus history later in the development of shod, so most of the code isn't aware of it. Also, deciding what to focus when a window is closed was one of the trickiest part when I was beginning to write it.<br />
<br />
That's it. What is your experience with wm writing? What knowledge or ideas you had for your wm that you want to share to other wm writers? I think that sharing our experience is something good because it can inspire others who aspires writing their own wm. It was someone's report of his own experience in wm writing that inspired me to write mine.]]></description>
			<content:encoded><![CDATA[We have some wm-writers here on the forums, I would like to call them for sharing their experiences, ideas and knowledge accumulated when writing their window managers.<br />
<br />
I'm working on shod (<a href="https://github.com/phillbush/shod/wiki" target="_blank" rel="noopener" class="mycode_url">here's its documentation</a>), an hybrid (floating and tiling) window manager that heavily depends on EWMH hints and that is fully controlled by wmctrl.<br />
<br />
It started as a sowm fork, then it expanded into something bigger, incorporating code from dwm, berry and katriawm, and inspiration from i3.  I used Nye's Xlib Programming Manual (and its chapter 16) as my knowledge base.<br />
<br />
One of the things I realized is how X11 imposes its limitations on the wm writers and how much of dummy windows I have to create in order to implement some features. I don't know if using dummy windows is the way to go, but that's what I did. One of the uses of dummy windows was to implement EWMH above and below windows (windows that are set to be above or below others).<br />
<br />
Another tricky part was window moving and resizing with the mouse. That's the hackiest part of my code. At first I was using wmutils' xmmv and xmrs for doing that. But later I implemented it on the wm. dwm implements window moving/resizing in an event loop apart from the main xevent loop, but I implemented it in the main event loop. Again, I don't know if my way is the way to go.<br />
<br />
Some routines in shod's code have grown into a complex thing, especially the routine that tiles windows and the routine that places window on the screen (when a window is open, shod tries to place it on an empty place on the screen (a place with few windows)).<br />
<br />
I've not chosen a fancy algorithm for tiling windows like binary-tree splitting like bspwm, because I'm not an experienced programmer to deal with the data structures imposed by those algorithms. I've chosen something simpler, based on how I use tiling. I only used column layout: the screen is divided into columns and each column can have any number of windows tiled vertically (one above the other). For example, in the drawings bellow.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>┌───┬───┬───┐<br />
│&nbsp;&nbsp; ├───┤&nbsp;&nbsp; │<br />
│&nbsp;&nbsp; │&nbsp;&nbsp; ├───┤<br />
├───┤&nbsp;&nbsp; │&nbsp;&nbsp; │<br />
│&nbsp;&nbsp; ├───┤&nbsp;&nbsp; │<br />
└───┴───┴───┘<br />
<br />
┌─────┬─────┐<br />
│&nbsp;&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp;&nbsp; │<br />
│&nbsp;&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp;&nbsp; │<br />
│&nbsp;&nbsp;&nbsp;&nbsp; ├─────┤<br />
│&nbsp;&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp;&nbsp; │<br />
└─────┴─────┘</code></div></div><br />
I realized that this is the only layout I ever use, so I created a wm that only uses this layout. I also realized that spliting-tree kind of tiling complicates the workflow (at least for me).<br />
Even thus, I almost always use up to two columns with up to two windows each. The most common layout I use is the one in the second draw (two columns, the left one with a single window and the right one with up to two windows).<br />
<br />
The last improvement I did in shod was to implement the _NET_WM_MOVERESIZE hint. Client-side decorated Gtk3 windows emit this signal when being dragged by their header bar. I think qt applications also use this hint when being dragged by a empty part of their UI.<br />
<br />
And also focus.<br />
Focus handling is one of the hardest parts of writing a wm. Even now sometimes I got a sloppy-focus behavior (when closing the last window in a workspace, for example), even when I use the click-to-focus mode.  I think I will use more dummy windows for this (that's what katriawm does, I think). I implemented focus history later in the development of shod, so most of the code isn't aware of it. Also, deciding what to focus when a window is closed was one of the trickiest part when I was beginning to write it.<br />
<br />
That's it. What is your experience with wm writing? What knowledge or ideas you had for your wm that you want to share to other wm writers? I think that sharing our experience is something good because it can inspire others who aspires writing their own wm. It was someone's report of his own experience in wm writing that inspired me to write mine.]]></content:encoded>
		</item>
	</channel>
</rss>