Tiling Window Managers – eirenicon llc https://eirenicon.org Working together for success! Sun, 11 Feb 2024 15:21:15 +0000 en-US hourly 1 https://wordpress.org/?v=6.7.1 https://i0.wp.com/eirenicon.org/wp-content/uploads/2019/03/cropped-eirenicon-1.png?fit=32%2C32&ssl=1 Tiling Window Managers – eirenicon llc https://eirenicon.org 32 32 61586100 spectrwm- Review & Tutorial https://eirenicon.org/spectrwm-review-tutorial/ Sat, 10 Feb 2024 16:32:56 +0000 https://eirenicon.org/?page_id=3818 Revision Dates:

11 Feb 2024


This posting is intended to function not only as a tutorial but, also, as a review and commentary on my ‘long-term’ use of spectrwm as my primary window manager (long-term, meaning at least one month of daily use).

Included in this post will be my lessons-learned, dotfiles, etc.

Note:
The materials contained in this article will be updated on a semi-irreglar basis.

To quote from the spectrwm github site:

“spectrwm is a small, dynamic tiling and reparenting window manager for X11 [no Wayland here]. It tries to stay out of the way so that valuable screen real estate can be used for much more important stuff. It has sane defaults, and it does not require one to learn a language to do any configuration. [Note: true enough, but in certain areas, mind reading skills seem to be required in order to figure things out and make them work correctly.]

spectrwm is written by hackers for hackers, and it strives to be small, compact, and fast.

spectrwm was largely inspired by xmonad and dwm.

…in classic OpenBSD fashion (put up, or hack up), a brand new window manager was whooped up to serve no other purpose than to obey its masters.”

GitHub

Given you are reading this on the eirenicon.org website, I am guessing that you might appreciate my opinion on the above. I generally agree.

spectrwm is a useful, unique, fast tiler. Much like dwm, i3wm (SwayWM) and hlwm, I find it enjoyable. After a lot of hacking around, I have cobbled together a spectrwm ‘setup’ that seems to meet my ‘fancy’. I will provide all my edited spectrwm related dotfiles (my cobbling) in this article. Given I am planning on using my arrangement as my primary desktop, for at least a month, I will continue to capture and share what I learn, to save my ‘little grey cells’ and help others on their journey.

What follows is an image (proof-of-life) screenshot. Briefly, the image highlights two menus (dmenu & j4-dmenu-desktop); xfce4-terminal screen running pfetch; polybar panel with systray; a yad pop-up displaying keybinding short-cuts; Debian sid/trixie use; 10 available/used workspaces; and, an unsplash wallpaper.

FWIW: the color-scheme in use is ‘everforest‘ with Papirus-Dark icons (colored bluegrey).

To begin with, I will share how I built my ‘setup’. As always, everything I have constructed is here for the taking. My dotfiles, scripts, etc. are , also, probably worth what you will pay for them… See my guarantee at the bottom of the page.

Installation

Installing spectrwm is quite straightforward. Getting the version I use, may be a bit more challenging I am not certain that version 3.5 has been migrated through to Debian stable. It had not been there the last time I looked. If you are running on Debian Sid or perhaps even Debian test, you may be able to use the following command to install spectrwm, remember to use either sudo or doas (depending on your setup).

sudo apt-get install spectrwm

Beyond that you will likely need the following items, if you don’t already have them installed. Again. this is a simple listing of a few tiny scripts that you can cut & paste into your terminal:

Helpful if you plan to use Trixie/ Sid:
sudo apt install libavcodec60 libavcodec60 libavformat60 nala mousepad

Other useful apps (you may need others):
sudo apt update && sudo apt install catfish debhelper diodon dnsmasq fakeroot ffmpegthumbnailer file-roller feh fonts-hack fzf gcc geany geany-plugins git glances htop i3lock-fancy j4-dmenu-desktop jgmenu libx11-dev libxft-dev libxinerama-dev lm-sensors lxappearance make mate-power-manager mousepad nala neofetch nitrogen nmon nsxiv pamixer pasystray pnmixer polybar powertop rofi ranger rxvt-unicode sxhkd slick-greeter stacer synaptic thermald thunar tlp udiskie wavemon wmctrl xautolock xcompmgr xdo xdotool xfce4-screenshooter xorg wget yad

What follows are essential items that you will need. You may implement these as I will as I suggest or find a more comfortable way that appeals more to your style/ preferences.

First & foremost, spectrwm requires a config file. I will include the one I use. This files needs to be named .spectrwm.conf It will be stored as a hidden file (when correctly named as .spectrwm.conf) and is best when it is located in your $Home directory.

Here is a copy of the file I use (at this writing)

Because I tend to share much of my x11 configuration among multiple window managers, I tend to store those shared functions via .xessionrc (if I am running on arch, I place the identical content in .xprofile). The extracted file (from below) needs to also be placed in $Home.

A copy of my .xsessionrc (.xprofile) file is available via this link.

The next build requirements are for a panel bar (top bar). I use polybar for mine, but you have the option to use spectrwm’s own panel or conky (conkybar). Rather than pointing to my polybar (config), I will provide links to where you can access further information on the various easy (?) to use options. Should you really want my polybar config, use the contact page to request a copy. :

Overall comments

General observations about living with and using spectrwm include:

  • I have never actually tested speed, but spectrwm seems very spritely (fast). It seems every bit as fast as dwm, hlwm, i3wm, bspwm… If you look below to review my config, you will note that my hardware is not ‘exactly’ a good platform for discriminating marginal ‘lower’ level performance.
  • Memory use is, also, in roughly the same arena as the other tilers I use.
  • The spectrwm workflow is unique. It took me awhile to become acquainted with the standard flow and gain comfort in using spectrwm (see ‘Downside(s)’ below). I did have to bend, fold, and spindle the environment a bit (but then they claim to be for hackers. Well I hacked. I now class myself as a genuine spectrwm ‘fan’.

Downside(s):
(Work arounds/ hacks for Conky, panel, and color issues are included in the dotfiles available in this posting)

  • Conky: I find that I miss being able to use all of conky’s desktop features. Because I am unable to use conky for the Desktop display of my keybindings, I have had to provide new/ different Keybinding memory aid (via yad). Being able to run conkybar is nice, but it is just not the same as running everything conky is capable of…
  • Transient Errors: There seem to be some peculiar transient video and keyboard related errors that appear in spectrwm running Firefox. I ‘sometimes’ lose keyboard access and/or get flickering pop-ups (right-click menus flickering in & out). I can not determine the actual cause of these ‘glitches’ nor determine if the cause is either with spectrwm or Debian sid. Such is life on the bleeding edge of Debian.
  • Native spectrwm panel: Honestly, I find the native panel too troublesome and limited to use. The friendly (not!) scripting for the native panel is in places (like formatting & colors) all but incomprehensible. Having stumbled upon ways to use either polybar or conkybar have made spectrwm much more friendly and usable to me. Such is my opinion.
  • Color specification in the configuration file. Why in the world does the color scheme have to be so unique and uncommon? I finally have it working, but getting the colors tweaked has be an absolutely unnecessary chore (come on guys, use hex colors.) I know this is a personal problem. I’m over it now and you can see the results in the provided .spectrwm.conf dotfile available here.

The future:

I do not have any insight into where spectrwm is headed. It seems that spectrwm’s future in the Wayland world is a mystery. I have hunted for information on future plans, to no avail. Perhaps, you have something to share that you have discovered?!?!


inxi -F (system specs under test)

System:
Host: debian Kernel: 6.6.13-amd64 arch: x86_64 bits: 64
Desktop: spectrwm v: 3.5.1 Distro: Debian GNU/Linux trixie/sid
Machine:
Type: Laptop System: Dell product: Inspiron 16 5620 v: N/A
serial: <superuser required>
Mobo: Dell model: 0R665T v: A00 serial: <superuser required> UEFI: Dell
v: 1.17.0 date: 09/19/2023
Battery:
ID-1: BAT0 charge: 55.8 Wh (100.0%) condition: 55.8/54.0 Wh (103.2%)
CPU:
Info: 10-core (2-mt/8-st) model: 12th Gen Intel Core i5-1235U bits: 64
type: MST AMCP cache: L2: 6.5 MiB
Speed (MHz): avg: 445 min/max: 400/4400:3300 cores: 1: 400 2: 583 3: 557
4: 611 5: 400 6: 400 7: 400 8: 400 9: 400 10: 400 11: 400 12: 400
Graphics:
Device-1: Intel Alder Lake-UP3 GT2 [Iris Xe Graphics] driver: i915 v: kernel
Device-2: Microdia Integrated_Webcam_FHD driver: uvcvideo type: USB
Display: x11 server: X.Org v: 21.1.11 driver: X: loaded: modesetting
unloaded: fbdev,vesa dri: iris gpu: i915 resolution: 1920x1200~60Hz
API: EGL v: 1.5 drivers: iris,swrast platforms: gbm,x11,surfaceless,device
API: OpenGL v: 4.6 vendor: intel mesa v: 23.3.5-1 renderer: Mesa Intel
Graphics (ADL GT2)
Audio:
Device-1: Intel Alder Lake PCH-P High Definition Audio
driver: sof-audio-pci-intel-tgl
API: ALSA v: k6.6.13-amd64 status: kernel-api
Server-1: PulseAudio v: 16.1 status: active
Network:
Device-1: Intel Alder Lake-P PCH CNVi WiFi driver: iwlwifi
IF: wlp0s20f3 state: up mac: a0:59:50:14:86:06
Bluetooth:
Device-1: Intel AX211 Bluetooth driver: btusb type: USB
Report: rfkill ID: hci0 rfk-id: 1 state: down bt-service: not found
rfk-block: hardware: no software: no address: see --recommends
RAID:
Hardware-1: Intel Volume Management Device NVMe RAID Controller driver: vmd
Drives:
Local Storage: total: 931.51 GiB used: 647.24 GiB (69.5%)
ID-1: /dev/nvme0n1 vendor: Kingston model: SNVS1000G size: 931.51 GiB
Partition:
ID-1: / size: 915.53 GiB used: 647.21 GiB (70.7%) fs: ext4
dev: /dev/nvme0n1p3
ID-2: /boot/efi size: 299.4 MiB used: 27.6 MiB (9.2%) fs: vfat
dev: /dev/nvme0n1p1
Swap:
Alert: No swap data was found.
Sensors:
System Temperatures: cpu: 44.0 C mobo: 43.0 C sodimm: SODIMM C
Fan Speeds (rpm): cpu: 2908
Info:
Memory: total: 24 GiB note: est. available: 23.17 GiB used: 4.35 GiB (18.8%)
Processes: 287 Uptime: 1h 41m Shell: Zsh inxi: 3.3.33

Remember, like with all of my work, I am able to provide the following assurance(s):
  • It is almost certainly going to work until it breaks; although I have to admit it may never work and that would be sad.
  • When/if it does break, you may keep all of the pieces.
  • If you find my materials helpful, both you & I will be happy, at least for a little while.
  • My advice is worth every penny you paid for it!

If you have insights on your spectrwm journey(s) to share with our readers, please use the contact page on this site to let me know.


]]>
3818
Wayland, an update https://eirenicon.org/2023/12/08/wayland-an-update/ Fri, 08 Dec 2023 14:07:31 +0000 https://eirenicon.org/?p=3630 For years now, Wayland has been a slow(?), erratic work. Even today, it continues to be a work in progress.

Based on my recent research, I have encountered the following articles. These articles each posit interesting thoughts.

In addition to my work and progress with SwayWM (see the above SwayWM tutorial link for details), I have begun an attempt to install labwc on my Debian Sid install. I will provide a complete tutorial on that work, too; just not now. In the meantime, here’s a brief note and image of my labwc progress.

I have been trying to get labwc 0.6.6 (most current release) to build a version of labwc (Openbox style Desktop). Below is a screenshot, proof-of-life image. The bottom line seems to be that it looks like it ‘can be done’. There are some (many?) work-arounds needed to make it easier to use and appropriately Wayland; but, with an appropriate amount of hard work it seems viable. (If you stare too closely at the desktop screenshot, you’ll see what I mean.)

As mentioned above, there will be more to come, including a collection of what I view to be quality Wayland links.

If you have insights on your Wayland journey(s) to share with me, please use the contact page on this site to let me know.

Remember, like with all of my work, I am able to provide the following assurance(s):
  • It is almost certainly going to work until it breaks; although I have to admit it may never work and that would be sad.
  • When/if it does break, you may keep all of the pieces.
  • If you find my materials helpful, both you & I will be happy, at least for a little while.
  • My advice is worth every penny you paid for it!
]]>
3630
Memory Use (RAM)- A Brief (Biased?) Comparison https://eirenicon.org/2023/07/23/memory-use-ram-a-brief-biased-comparison/ Sun, 23 Jul 2023 12:23:01 +0000 https://eirenicon.org/?p=3517 I have recently changed my primary laptop’s OS to run Debian Trixie/Sid (BearDog Distro) with Liquorix 6.4. I, also, have added some new Window Managers (WMs) to my single-user space including one non-x11 based Wayland WM- SwayWM.

Given the amount a of change to my environment plus requests from my readers, I have decided to run a memory test to get a rough idea of memory consumption (use).

Be aware this is not a scientific or thorough, rigorous test. It merely provides me with an indication of my various environments.

Other items of interest, perhaps. Aside from Openbox which I have modified to run as a simple manual tiler, all of my WMs are native tilers. Each WM runs the exact same suite of applications on x11; SwayWM runs analogous functions (not applications) on Wayland. Not all my application and application functions are capable of being run on Wayland.

NB.: Dropbox is shown because it runs at login and is a large contaminant in terms of memory utilization on each window manager (setup).  If you do NOT use Dropbox you should expect your idle memory use to be lower than my total by some 600MB.

Given the above robust list of caveats, here are the results of my simple test:

Window          RAM        DropBox
Manager         (MB)         (MB)

BSPWM           1597           587             x11
DKWM             1596           594            x11
DWM               1650           593            x11
HLWM             1629          591             x11
i3WM               1639           586            x11
Openbox         1731            625            x11
SwayWM         1656           568            Wayland

Here are the particulars of my laptop (under test), the following command (inxi -Fxz in terminal) was run on my i3WM.:

System:
Kernel: 6.4.4-1-liquorix-amd64 arch: x86_64 bits: 64 compiler: gcc v: 12.3.0
Desktop: i3 v: 4.22 Distro: Debian GNU/Linux trixie/sid
Machine:
Type: Laptop System: Dell product: Inspiron 16 5620 v: N/A
serial: <superuser required>
Mobo: Dell model: 0R665T v: A00 serial: <superuser required> UEFI: Dell
v: 1.7.0 date: 08/15/2022
Battery:
ID-1: BAT0 charge: 55.8 Wh (100.0%) condition: 55.8/54.0 Wh (103.2%)
volts: 17.0 min: 15.0 model: ATL DELL CFD7224 status: full
CPU:
Info: 10-core (2-mt/8-st) model: 12th Gen Intel Core i5-1235U bits: 64
type: MST AMCP arch: Alder Lake rev: 4 cache: L1: 928 KiB L2: 6.5 MiB
L3: 12 MiB
Speed (MHz): avg: 2287 high: 2500 min/max: 400/2500 cores: 1: 1210 2: 2500
3: 1240 4: 2500 5: 2500 6: 2500 7: 2500 8: 2500 9: 2500 10: 2500 11: 2500
12: 2500 bogomips: 59904
Flags: avx avx2 ht lm nx pae sse sse2 sse3 sse4_1 sse4_2 ssse3 vmx
Graphics:
Device-1: Intel Alder Lake-UP3 GT2 [Iris Xe Graphics] vendor: Dell
driver: i915 v: kernel arch: Gen-12.2 bus-ID: 0000:00:02.0
Device-2: Microdia Integrated_Webcam_FHD driver: uvcvideo type: USB
bus-ID: 3-6:4
Display: x11 server: X.Org v: 1.21.1.7 with: Xwayland v: 22.1.9 driver: X:
loaded: modesetting unloaded: fbdev,vesa dri: iris gpu: i915
resolution: 1920×1200~60Hz
API: OpenGL v: 4.6 Mesa 23.1.3-1 renderer: Mesa Intel Graphics (ADL GT2)
direct-render: Yes
Audio:
Device-1: Intel Alder Lake PCH-P High Definition Audio vendor: Dell
driver: sof-audio-pci-intel-tgl bus-ID: 0000:00:1f.3
API: ALSA v: k6.4.4-1-liquorix-amd64 status: kernel-api
Server-1: PipeWire v: 0.3.74 status: active
Network:
Device-1: Intel Alder Lake-P PCH CNVi WiFi driver: iwlwifi v: kernel
bus-ID: 0000:00:14.3
IF: wlp0s20f3 state: up mac: <filter>
Bluetooth:
Device-1: Intel driver: btusb v: 0.8 type: USB bus-ID: 3-10:5
Report: hciconfig ID: hci0 rfk-id: 0 state: up address: <filter>
RAID:
Hardware-1: Intel Volume Management Device NVMe RAID Controller driver: vmd
v: 0.6 bus-ID: 0000:00:0e.0
Drives:
Local Storage: total: 931.51 GiB used: 702.7 GiB (75.4%)
ID-1: /dev/nvme0n1 vendor: Kingston model: SNVS1000G size: 931.51 GiB
temp: 38.9 C
Partition:
ID-1: / size: 915.53 GiB used: 702.7 GiB (76.8%) fs: ext4
dev: /dev/nvme0n1p2
ID-2: /boot/efi size: 299.4 MiB used: 428 KiB (0.1%) fs: vfat
dev: /dev/nvme0n1p1
Swap:
Alert: No swap data was found.
Sensors:
Src: /sys System Temperatures: cpu: 39.0 C mobo: 40.0 C sodimm: SODIMM C
Fan Speeds (RPM): N/A
Power: 12v: N/A 5v: 5 3.3v: N/A vbat: N/A
Info:
Processes: 268 Uptime: 45m Memory: total: N/A available: 23.17 GiB
used: 2.67 GiB (11.5%) Init: systemd target: graphical (5) Compilers:
gcc: 13.1.0 Packages: 2285 Shell: Zsh v: 5.9 inxi: 3.3.28

Remember, like with all of my work, I am able to provide the following assurance(s):
  • It is almost certainly going to work until it breaks; although I have to admit it may never work and that would be sad.
  • When/if it does break, you may keep all of the pieces.
  • If you find my materials helpful, both you & I will be happy, at least for a little while.
  • My advice is worth every penny you paid for it!

]]>
3517
SwayWM on BearDog (Debian) & EndeavourOS (Arch) (tutorial) https://eirenicon.org/knowledge-base/sway-on-debian-arch/ Tue, 18 Jul 2023 23:11:35 +0000 https://eirenicon.org/?page_id=3476 revised:

1 Jan 2024
2 Dec 2023
20 Jul 2023
22 Jul 2023

Lately, I have taken the time to see how SwayWM/ Wayland might function for me (and you?). I began on a Debian based distro, specifically BearDog.  Now that I have managed to create a functioning reasonably ‘stable’ installation, I thought I’d provide the results and specifics of my discoveries.

As noted above, I believe my environment is now quite stable. I have been running SwayWM for over a month on both Debian (BearDog) and Arch (EndeavourOS). 

TL;DR: Based on my past experiences, I can confirm that SwayWM seems, based upon my usage, to run well on both Arch & Debian (Sid/ Unstable).

I have settled on Arch as my preferred platform, simply because I prefer running on a more reliable rolling release base.  Debian Sid has experienced some peculiar faults/errors over the last few weeks; although none seem linked/ related to  running SwayWM/ Wayland, they ‘got in my way’.  

For that reason,  EndeavourOS simply has functioned better for what I want and how I prefer to do ‘things’.

The following are my SwayWM & Wayland Notes

General:

Debian seems quite resource poor (almost impoverished) in the Wayland/ SwayWM ecosphere, although in recent months that appears to be on the mend (somewhat). The most resource rich distros include: Arch, Void, Gentoo, even ‘tiny’ Alpine seems to have more.  A corollary to this would suggest those distros might be good places to seek help, ideas, tools, etc.

In this tutorial, I will present some of the workarounds I have unearthed in order to over-come challenges and frustrations, I encountered. I think (hope?) I have kept track of the most important info and shared it here.

IMHO. It is “not super easy” but it IS possible to make Wayland/ SwayWM into a fully functional, rewarding computing environment. The environment I have, thus far created, I find enjoyable to use. Almost certainly Wayland is not as rich an environment as x-windows offers; but, it is fun, aesthetically pleasing and usable.

SwayWM, Wayland, Waybar, Conky (x2), Yad, Rofi all on Debian Sid/Trixie

Here is a requisite screenshot. The image displays SwayWM, Wayland, Waybar, Conky (x2), Yad, Rofi all on Debian Sid/Trixie.

Other Wayland information resources:

It all began on BearDog (Debian)

Be advised, I began by running SwayWM & Wayland on Debian Sid/Trixie. The reason for the Sid/Trixie choice is my preference for having and using current software. Tools such as SwayWM and Wayland are in active development; which means they change frequently. Should you elect a different platform, your mileage may vary…

Installing the basic Wayland/ SwayWM base is pretty straight forward. I followed the guidance on this page in the Debian wiki.  As for Arch, here is a link to Colin Woodbury’s tutorial which I used to help with my EndeavourOS install. 

FWIW. My i3wm setup was NOT in any way drop-in compatible with SwayWM. I run both regularly and they ‘are’ different.  Apparently, I have much too much going on in my i3wm install to make any port seemless.

Compatibility between my i3wm and SwayWMis all but non-existent.  I ultimately elected to find a clean SwayWM install and then tweak it to fit my needs. I elected to use the EndeavourOS Sway Community edition as my base. Thank you everyone at EndeavourOS!

My tweaked version, which is by now quite different from that on EOS, is that offered above.  (I’ll attempt to keep the dotfiles current.)

I have augmented what I learned on the above pages creating the following instruction document. Be advised this works for me, I can only hope it works for you, too. (See my warranty at the bottom of the page).  Here is a link to my  SwayWM-Wayland Dotfiles (I have successfully tested and use these dotfiles on my EndeavourOS base (Arch).)

The Journey

Below are the component parts I have tweaked, hacked, revised and bent to my preferred approach, such as my skills allow.  You may certainly use my code base or EndeavourOS’, which is available here and is minus my changes offered at the link above) or…

All of the folders, you wish to use, should be placed in your $Home/ directory. There are materials that will be placed in the following hidden directories:

  • .config
  • .conky
  • .local (the full path will be .local/share/scripts)

Remember: my dotfiles will only work after you have installed SwayWM and Wayland on your system. AND, I apologize in advance for any materials I may have forgotten to put in here. Use our Contact Page to let me know if you need something I may have omitted.

SwayWM-Related Folders

These are most, if not all, of my ‘dotfiles’.

Keep in mind I will continually (assuming I remember) drop new versions of my ‘stuff’ here for you to use.  You should fully expect to modify and enhance what you find here, to suit your needs. This IS NOT a guaranteed clean install. (See my Warranty below)

Terminal Option(s)

I have elected to use foot as my primary Wayland/ SwayWM terminal. Why? Because, it is light, fast, and easy to tweak.  Sadly, it does not run on X11 (or I’d consider using it everywhere).

If you are seeking a terminal that is flexible & reasonably light to use on both X11 and Wayland, I recommend xfce4-terminal. It works amazingly well on both x11 and Wayland; plus, xfce4-terminal is able to support geometry and position settings.

However, you are, certainly, able to find other fancier, cooler, trendier terminals should you choose to do so.

Transition Challenges

Because of an over abundance of x-windows application experience, I have encountered awkward transitions to new methods of working. Think square peg, round hole. Here are a few examples where I am reluctant to perform back-flips in order to accomplish tasks.

Various items (software apps) that are not yet ready for Wayland (Root privs).

  • First and foremost, be aware you need to install a polkit (such as lxpolkit-polkit) for the following fix(es) to work.
  • In the Debian universe Synaptic is pretty important. Sadly, Synaptic is one of those problem children. If you wish to use it, Synaptic is best called via terminal for security reasons. The command line is “sudo -E synaptic”.
  • Thunar Open as Root does not work in Wayland. If you wish to Open Thunar as Root via terminal. The command line is “sudo -E thunar”.
  • The same applies to Nemo. Nemo Open as Root does not work. Open Nemo as Root via terminal. The command line is “sudo -E nemo”.
  • The same applies to Gparted. Open Gparted as Root via terminal. The command line is “sudo -E gparted”.

Synaptic

I have been reliant on this Debian package management tool for more than 20 years… Debian, unlike ArchLinux, does not offer the wealth of package managers and approaches. Luckily, I dug up an approach to rescue & use synaptic. I know this weird hack has risks (the preferred approach involves using sudo -E, noted above) …

Here is another approach you may be able to live with (source: Reddit

My read (FWIW) is that the above approach is both more difficult and less reliable than simply opening an offending app via command line in terminal using sudo -E.

Xwayland

In an effort to get a “goodly number” of x-windows applications to run under Wayland, I installed Xwayland. It is not difficult. You simply install Xwayland in order to achieve a degree of  native x-window (x11) application compatibility.

CAVEAT: It is always better to use a native Wayland application, if you can find one. Xwayland (and QTwayland for that matter) are simply temporary solutions.

QTwayland

The same situation exists, and can be similarly addressed, for qt applications. (Here is the reference for the following solution.)  The major installation process follows:

  • sudo apt install qtbase5-dev
  • git clone git://code.qt.io/qt/qtwayland.git
  • cd qtwayland
  • git checkout v5.10.0
  • qmake
  • make
  • make install

Random Wallpaper Background

The simplest, closest to ‘nitrogen approach’ I prefer to use in X11, involves installing ‘setwall’. Because setwall is written using rust, you can install it using ‘cargo’. I will try using it (it should work well) on my x11 window manager setups.

Wofi/Rofi

If you are running on Wayland only, wofi appears to be an excellent tool to use.  Unlike SwayWM with i3wm, wofi appears to be compatible with the rofi setups and scripts I use.  However if you run both X11 and Wayland based window managers (like I do), I recommend sticking with Rofi (after you install Xwayland).  It works well, then, in both environments.

Taking Screenshots

In order to take desktop screenshots, I found the following installations were required:

  • install grim (using apt/nala).
  • install grimshot (using apt/nala)

I am considering adding a new (to me), hopefully more approachable screenshot toolset to SwayWM:

My initial read is that sway-screenshot adds a few nice features. But, grim by itself is silent, fast and generates a simple screenshot (entire window), just fine.  Obviously the choice is yours.

Conky

As a huge fan (user) of Conky, I am very pleased to have obtained a guide on how-to install and make Conky run on Wayland. This guidance may be found on the Lilidog Forums from @unklar. I should add that getting Conky to reliably run on both Arch & Debian base distros, required I clean up my conky scripts (massively). A warning to the wise, “Conky will NOT suffer messy code on Wayland. “

Additional ‘frustrations’

There are a few pieces of missing system functionality that irk me.  I know I should be able to survive without these things. I simply do not ‘prefer’ to run minus these functions, every day. Oh well…

  • root level access at the GUI level. This impacts several critical applications including Thunar, Gparted, Synaptic, among others I am certain.

Should you find or know of good ways to address the issues I have noted, please use our contact page to let me know.

Have fun with SwayWM and Wayland. If you have additional tips and pointers you believe I should publish here, be sure to let me know.

Remember, like with all of my work, I am able to provide the following assurance(s):
  • It is almost certainly going to work until it breaks; although I have to admit it may never work and that would be sad.
  • When/if it does break, you may keep all of the pieces.
  • If you find my materials helpful, both you & I will be happy, at least for a little while.
  • My advice is worth every penny you paid for it!
]]>
3476
POP!_OS how-to replace gnome-terminal https://eirenicon.org/pop_os-how-to-replace-gnome-terminal/ Wed, 19 Jan 2022 14:11:57 +0000 https://eirenicon.org/?page_id=2920 Many of the readers here know that dwm is one of my favorite desktops (window managers). As I have evaluated/ used POP!OS 21.10, I decided to replace (not remove) gnome-terminal with st (suckless terminal). To be honest there is not anything truly wrong with gnome-terminal, I just like st better and can’t see running fatter terminal code when thinner and lighter code will make me happier.

To improve my comfort and happiness,  I have performed some tweaks and compiled a POP!OS look version of st for my use. (The config.h is below.)

To ‘install’ st, do the following:

If you have never compiled suckless code on a Debian base, add the following dependencies (these are not an unneeded luxury).

sudo apt install make gcc libx11-dev libxft-dev libxinerama-dev xorg
  • Once you have your basic version working, you can take the color scheme , font settings, etc from the config.h I have below and replace those in yours with my scheme, assuming you want your st to look like mine.Here’s what my st looks like:
    Here’s my config.h
char *externalpipe_sigusr1[] = {"/bin/sh", "-c", "externalpipe_buffer.sh st_strings_read"};
/* See LICENSE file for copyright and license details. */

/*
 * appearance
 * font: see http://freedesktop.org/software/fontconfig/fontconfig-user.html
 */
static char *font = "DejaVu Sans Mono:pixelsize=15:antialias=true:autohint=true";
static int borderpx = 10;

/*
 * What program is execed by st depends of these precedence rules:
 * 1: program passed with -e
 * 2: scroll and/or utmp
 * 3: SHELL environment variable
 * 4: value of shell in /etc/passwd
 * 5: value of shell in config.h
 */
static char *shell = "/bin/sh";
char *utmp = NULL;
/* scroll program: to enable use a string like "scroll" */
char *scroll = NULL;
char *stty_args = "stty raw pass8 nl -echo -iexten -cstopb 38400";

/* identification sequence returned in DA and DECID */
char *vtiden = "\033[?6c";

/* Kerning / character bounding-box multipliers */
static float cwscale = 1.0;
static float chscale = 1.0;

/*
 * word delimiter string
 *
 * More advanced example: L" `'\"()[]{}"
 */
wchar_t *worddelimiters = L" ";

/* selection timeouts (in milliseconds) */
static unsigned int doubleclicktimeout = 300;
static unsigned int tripleclicktimeout = 600;

/* alt screens */
int allowaltscreen = 1;

/* allow certain non-interactive (insecure) window operations such as:
   setting the clipboard text */
int allowwindowops = 0;

/*
 * draw latency range in ms - from new content/keypress/etc until drawing.
 * within this range, st draws when content stops arriving (idle). mostly it's
 * near minlatency, but it waits longer for slow updates to avoid partial draw.
 * low minlatency will tear/flicker more, as it can "detect" idle too early.
 */
static double minlatency = 8;
static double maxlatency = 33;

/*
 * blinking timeout (set to 0 to disable blinking) for the terminal blinking
 * attribute.
 */
static unsigned int blinktimeout = 800;

/*
 * thickness of underline and bar cursors
 */
static unsigned int cursorthickness = 2;

/*
 * bell volume. It must be a value between -100 and 100. Use 0 for disabling
 * it
 */
static int bellvolume = 0;

/* default TERM value */
char *termname = "st-256color";

/*
 * spaces per tab
 *
 * When you are changing this value, don't forget to adapt the »it« value in
 * the st.info and appropriately install the st.info in the environment where
 * you use this st version.
 *
 *  it#$tabspaces,
 *
 * Secondly make sure your kernel is not expanding tabs. When running `stty
 * -a` »tab0« should appear. You can tell the terminal to not expand tabs by
 *  running following command:
 *
 *  stty tabs
 */
unsigned int tabspaces = 4;

/* bg opacity */
float alpha = 0.95;

/* Terminal colors (16 first used in escape sequence) */
static const char *colorname[] = {
    /* 8 normal colors */
    "#272727", /* black   */
    "#CC0000", /* red     */
    "#4E9A06", /* green   */
    "#C4A000", /* yellow  */
    "#3465A4", /* blue    */
    "#75507B", /* magenta */
    "#06989A", /* cyan    */
    "#D3D7CF", /* white   */

    /* 8 bright colors */
    "#4c566a", /* black   */
    "#F15D22", /* red     */
    "#73C48F", /* green   */
    "#FFCE51", /* yellow  */
    "#81a1c1", /* blue    */
    "#AD7FA8", /* magenta */
    "#34E2E2", /* cyan    */
    "#EEEEEC", /* white   */

    [255] = 0,

    /* more colors can be added after 255 to use with DefaultXX */
    "#f0c674", /*256 cursor*/
    "#555555", /*257 rev cursor*/
    "#13161A", /* background */
    "#EEEEEC", /* foreground */
};

/*
 * Default colors (colorname index)
 * foreground, background, cursor, reverse cursor
 */
unsigned int defaultfg = 259;
unsigned int defaultbg = 258;
static unsigned int defaultcs = 256;
static unsigned int defaultrcs = 257;

/*
 * Default shape of cursor
 * 2: Block ("?")
 * 4: Underline ("_")
 * 6: Bar ("|")
 * 7: Snowman ("?")
 */
static unsigned int cursorshape = 2;

/*
 * Default columns and rows numbers
 */

static unsigned int cols = 84;
static unsigned int rows = 24;

/*
 * Default colour and shape of the mouse cursor
 */
static unsigned int mouseshape = XC_xterm;
static unsigned int mousefg = 7;
static unsigned int mousebg = 0;

/*
 * Color used to display font attributes when fontconfig selected a font which
 * doesn't match the ones requested.
 */
static unsigned int defaultattr = 11;

/*
 * Force mouse select/shortcuts while mask is active (when MODE_MOUSE is set).
 * Note that if you want to use ShiftMask with selmasks, set this to an other
 * modifier, set to 0 to not use it.
 */
static uint forcemousemod = ShiftMask;

/*
 * Internal mouse shortcuts.
 * Beware that overloading Button1 will disable the selection.
 */
const  unsigned int mousescrollincrement = 5;
static MouseShortcut mshortcuts[] = {
    /* mask                 button   function        argument       release */
    { XK_ANY_MOD,           Button4, kscrollup,      {.i = mousescrollincrement},      0, /* !alt */ -1 },
    { XK_ANY_MOD,           Button5, kscrolldown,    {.i = mousescrollincrement},      0, /* !alt */ -1 },
    { XK_ANY_MOD,           Button2, selpaste,       {.i = 0},      1 },
    { ShiftMask,            Button4, ttysend,        {.s = "\033[5;2~"} },
    { XK_ANY_MOD,           Button4, ttysend,        {.s = "\031"} },
    { ShiftMask,            Button5, ttysend,        {.s = "\033[6;2~"} },
    { XK_ANY_MOD,           Button5, ttysend,        {.s = "\005"} },
};

/* Internal keyboard shortcuts. */
#define MODKEY Mod1Mask
#define TERMMOD (ControlMask|ShiftMask)

static Shortcut shortcuts[] = {
    /* mask                     keysym          function        argument */
    { XK_ANY_MOD,               XK_Break,       sendbreak,      {.i =  0} },
    { ControlMask,              XK_Print,       toggleprinter,  {.i =  0} },
    { ShiftMask,                XK_Print,       printscreen,    {.i =  0} },
    { XK_ANY_MOD,               XK_Print,       printsel,       {.i =  0} },
    { TERMMOD,                  XK_J,           zoom,           {.f = -1} },
    { TERMMOD,                  XK_K,           zoom,           {.f = +1} },
    { TERMMOD,                  XK_U,           zoom,           {.f = +2} },
    { TERMMOD,                  XK_D,           zoom,           {.f = -2} },
    { TERMMOD,                  XK_R,           zoomreset,      {.f =  0} },
    { TERMMOD,                  XK_C,           clipcopy,       {.i =  0} },
    { TERMMOD,                  XK_V,           clippaste,      {.i =  0} },
    { TERMMOD,                  XK_Y,           selpaste,       {.i =  0} },
    { ShiftMask,                XK_Insert,      selpaste,       {.i =  0} },
    { TERMMOD,                  XK_Num_Lock,    numlock,        {.i =  0} },
    { ShiftMask,                XK_Page_Up,     kscrollup,      {.i =  -1} },
    { ShiftMask,                XK_Page_Down,   kscrolldown,    {.i =  +1} },

    { MODKEY,                   XK_l,           copyurl,        {.i =  0} },
};

/*
 * Special keys (change & recompile st.info accordingly)
 *
 * Mask value:
 * * Use XK_ANY_MOD to match the key no matter modifiers state
 * * Use XK_NO_MOD to match the key alone (no modifiers)
 * appkey value:
 * * 0: no value
 * * > 0: keypad application mode enabled
 * *   = 2: term.numlock = 1
 * * < 0: keypad application mode disabled
 * appcursor value:
 * * 0: no value
 * * > 0: cursor application mode enabled
 * * < 0: cursor application mode disabled
 *
 * Be careful with the order of the definitions because st searches in
 * this table sequentially, so any XK_ANY_MOD must be in the last
 * position for a key.
 */

/*
 * If you want keys other than the X11 function keys (0xFD00 - 0xFFFF)
 * to be mapped below, add them to this array.
 */
static KeySym mappedkeys[] = { -1 };

/*
 * State bits to ignore when matching key or button events.  By default,
 * numlock (Mod2Mask) and keyboard layout (XK_SWITCH_MOD) are ignored.
 */
static uint ignoremod = Mod2Mask|XK_SWITCH_MOD;

/*
 * This is the huge key array which defines all compatibility to the Linux
 * world. Please decide about changes wisely.
 */
static Key key[] = {
    /* keysym           mask            string      appkey appcursor */
    { XK_KP_Home,       ShiftMask,      "\033[2J",       0,   -1},
    { XK_KP_Home,       ShiftMask,      "\033[1;2H",     0,   +1},
    { XK_KP_Home,       XK_ANY_MOD,     "\033[H",        0,   -1},
    { XK_KP_Home,       XK_ANY_MOD,     "\033[1~",       0,   +1},
    { XK_KP_Up,         XK_ANY_MOD,     "\033Ox",       +1,    0},
    { XK_KP_Up,         XK_ANY_MOD,     "\033[A",        0,   -1},
    { XK_KP_Up,         XK_ANY_MOD,     "\033OA",        0,   +1},
    { XK_KP_Down,       XK_ANY_MOD,     "\033Or",       +1,    0},
    { XK_KP_Down,       XK_ANY_MOD,     "\033[B",        0,   -1},
    { XK_KP_Down,       XK_ANY_MOD,     "\033OB",        0,   +1},
    { XK_KP_Left,       XK_ANY_MOD,     "\033Ot",       +1,    0},
    { XK_KP_Left,       XK_ANY_MOD,     "\033[D",        0,   -1},
    { XK_KP_Left,       XK_ANY_MOD,     "\033OD",        0,   +1},
    { XK_KP_Right,      XK_ANY_MOD,     "\033Ov",       +1,    0},
    { XK_KP_Right,      XK_ANY_MOD,     "\033[C",        0,   -1},
    { XK_KP_Right,      XK_ANY_MOD,     "\033OC",        0,   +1},
    { XK_KP_Prior,      ShiftMask,      "\033[5;2~",     0,    0},
    { XK_KP_Prior,      XK_ANY_MOD,     "\033[5~",       0,    0},
    { XK_KP_Begin,      XK_ANY_MOD,     "\033[E",        0,    0},
    { XK_KP_End,        ControlMask,    "\033[J",       -1,    0},
    { XK_KP_End,        ControlMask,    "\033[1;5F",    +1,    0},
    { XK_KP_End,        ShiftMask,      "\033[K",       -1,    0},
    { XK_KP_End,        ShiftMask,      "\033[1;2F",    +1,    0},
    { XK_KP_End,        XK_ANY_MOD,     "\033[4~",       0,    0},
    { XK_KP_Next,       ShiftMask,      "\033[6;2~",     0,    0},
    { XK_KP_Next,       XK_ANY_MOD,     "\033[6~",       0,    0},
    { XK_KP_Insert,     ShiftMask,      "\033[2;2~",    +1,    0},
    { XK_KP_Insert,     ShiftMask,      "\033[4l",      -1,    0},
    { XK_KP_Insert,     ControlMask,    "\033[L",       -1,    0},
    { XK_KP_Insert,     ControlMask,    "\033[2;5~",    +1,    0},
    { XK_KP_Insert,     XK_ANY_MOD,     "\033[4h",      -1,    0},
    { XK_KP_Insert,     XK_ANY_MOD,     "\033[2~",      +1,    0},
    { XK_KP_Delete,     ControlMask,    "\033[M",       -1,    0},
    { XK_KP_Delete,     ControlMask,    "\033[3;5~",    +1,    0},
    { XK_KP_Delete,     ShiftMask,      "\033[2K",      -1,    0},
    { XK_KP_Delete,     ShiftMask,      "\033[3;2~",    +1,    0},
    { XK_KP_Delete,     XK_ANY_MOD,     "\033[P",       -1,    0},
    { XK_KP_Delete,     XK_ANY_MOD,     "\033[3~",      +1,    0},
    { XK_KP_Multiply,   XK_ANY_MOD,     "\033Oj",       +2,    0},
    { XK_KP_Add,        XK_ANY_MOD,     "\033Ok",       +2,    0},
    { XK_KP_Enter,      XK_ANY_MOD,     "\033OM",       +2,    0},
    { XK_KP_Enter,      XK_ANY_MOD,     "\r",           -1,    0},
    { XK_KP_Subtract,   XK_ANY_MOD,     "\033Om",       +2,    0},
    { XK_KP_Decimal,    XK_ANY_MOD,     "\033On",       +2,    0},
    { XK_KP_Divide,     XK_ANY_MOD,     "\033Oo",       +2,    0},
    { XK_KP_0,          XK_ANY_MOD,     "\033Op",       +2,    0},
    { XK_KP_1,          XK_ANY_MOD,     "\033Oq",       +2,    0},
    { XK_KP_2,          XK_ANY_MOD,     "\033Or",       +2,    0},
    { XK_KP_3,          XK_ANY_MOD,     "\033Os",       +2,    0},
    { XK_KP_4,          XK_ANY_MOD,     "\033Ot",       +2,    0},
    { XK_KP_5,          XK_ANY_MOD,     "\033Ou",       +2,    0},
    { XK_KP_6,          XK_ANY_MOD,     "\033Ov",       +2,    0},
    { XK_KP_7,          XK_ANY_MOD,     "\033Ow",       +2,    0},
    { XK_KP_8,          XK_ANY_MOD,     "\033Ox",       +2,    0},
    { XK_KP_9,          XK_ANY_MOD,     "\033Oy",       +2,    0},
    { XK_Up,            ShiftMask,      "\033[1;2A",     0,    0},
    { XK_Up,            Mod1Mask,       "\033[1;3A",     0,    0},
    { XK_Up,         ShiftMask|Mod1Mask,"\033[1;4A",     0,    0},
    { XK_Up,            ControlMask,    "\033[1;5A",     0,    0},
    { XK_Up,      ShiftMask|ControlMask,"\033[1;6A",     0,    0},
    { XK_Up,       ControlMask|Mod1Mask,"\033[1;7A",     0,    0},
    { XK_Up,ShiftMask|ControlMask|Mod1Mask,"\033[1;8A",  0,    0},
    { XK_Up,            XK_ANY_MOD,     "\033[A",        0,   -1},
    { XK_Up,            XK_ANY_MOD,     "\033OA",        0,   +1},
    { XK_Down,          ShiftMask,      "\033[1;2B",     0,    0},
    { XK_Down,          Mod1Mask,       "\033[1;3B",     0,    0},
    { XK_Down,       ShiftMask|Mod1Mask,"\033[1;4B",     0,    0},
    { XK_Down,          ControlMask,    "\033[1;5B",     0,    0},
    { XK_Down,    ShiftMask|ControlMask,"\033[1;6B",     0,    0},
    { XK_Down,     ControlMask|Mod1Mask,"\033[1;7B",     0,    0},
    { XK_Down,ShiftMask|ControlMask|Mod1Mask,"\033[1;8B",0,    0},
    { XK_Down,          XK_ANY_MOD,     "\033[B",        0,   -1},
    { XK_Down,          XK_ANY_MOD,     "\033OB",        0,   +1},
    { XK_Left,          ShiftMask,      "\033[1;2D",     0,    0},
    { XK_Left,          Mod1Mask,       "\033[1;3D",     0,    0},
    { XK_Left,       ShiftMask|Mod1Mask,"\033[1;4D",     0,    0},
    { XK_Left,          ControlMask,    "\033[1;5D",     0,    0},
    { XK_Left,    ShiftMask|ControlMask,"\033[1;6D",     0,    0},
    { XK_Left,     ControlMask|Mod1Mask,"\033[1;7D",     0,    0},
    { XK_Left,ShiftMask|ControlMask|Mod1Mask,"\033[1;8D",0,    0},
    { XK_Left,          XK_ANY_MOD,     "\033[D",        0,   -1},
    { XK_Left,          XK_ANY_MOD,     "\033OD",        0,   +1},
    { XK_Right,         ShiftMask,      "\033[1;2C",     0,    0},
    { XK_Right,         Mod1Mask,       "\033[1;3C",     0,    0},
    { XK_Right,      ShiftMask|Mod1Mask,"\033[1;4C",     0,    0},
    { XK_Right,         ControlMask,    "\033[1;5C",     0,    0},
    { XK_Right,   ShiftMask|ControlMask,"\033[1;6C",     0,    0},
    { XK_Right,    ControlMask|Mod1Mask,"\033[1;7C",     0,    0},
    { XK_Right,ShiftMask|ControlMask|Mod1Mask,"\033[1;8C",0,   0},
    { XK_Right,         XK_ANY_MOD,     "\033[C",        0,   -1},
    { XK_Right,         XK_ANY_MOD,     "\033OC",        0,   +1},
    { XK_ISO_Left_Tab,  ShiftMask,      "\033[Z",        0,    0},
    { XK_Return,        Mod1Mask,       "\033\r",        0,    0},
    { XK_Return,        XK_ANY_MOD,     "\r",            0,    0},
    { XK_Insert,        ShiftMask,      "\033[4l",      -1,    0},
    { XK_Insert,        ShiftMask,      "\033[2;2~",    +1,    0},
    { XK_Insert,        ControlMask,    "\033[L",       -1,    0},
    { XK_Insert,        ControlMask,    "\033[2;5~",    +1,    0},
    { XK_Insert,        XK_ANY_MOD,     "\033[4h",      -1,    0},
    { XK_Insert,        XK_ANY_MOD,     "\033[2~",      +1,    0},
    { XK_Delete,        ControlMask,    "\033[M",       -1,    0},
    { XK_Delete,        ControlMask,    "\033[3;5~",    +1,    0},
    { XK_Delete,        ShiftMask,      "\033[2K",      -1,    0},
    { XK_Delete,        ShiftMask,      "\033[3;2~",    +1,    0},
    { XK_Delete,        XK_ANY_MOD,     "\033[P",       -1,    0},
    { XK_Delete,        XK_ANY_MOD,     "\033[3~",      +1,    0},
    { XK_BackSpace,     XK_NO_MOD,      "\177",          0,    0},
    { XK_BackSpace,     Mod1Mask,       "\033\177",      0,    0},
    { XK_Home,          ShiftMask,      "\033[2J",       0,   -1},
    { XK_Home,          ShiftMask,      "\033[1;2H",     0,   +1},
    { XK_Home,          XK_ANY_MOD,     "\033[H",        0,   -1},
    { XK_Home,          XK_ANY_MOD,     "\033[1~",       0,   +1},
    { XK_End,           ControlMask,    "\033[J",       -1,    0},
    { XK_End,           ControlMask,    "\033[1;5F",    +1,    0},
    { XK_End,           ShiftMask,      "\033[K",       -1,    0},
    { XK_End,           ShiftMask,      "\033[1;2F",    +1,    0},
    { XK_End,           XK_ANY_MOD,     "\033[4~",       0,    0},
    { XK_Prior,         ControlMask,    "\033[5;5~",     0,    0},
    { XK_Prior,         ShiftMask,      "\033[5;2~",     0,    0},
    { XK_Prior,         XK_ANY_MOD,     "\033[5~",       0,    0},
    { XK_Next,          ControlMask,    "\033[6;5~",     0,    0},
    { XK_Next,          ShiftMask,      "\033[6;2~",     0,    0},
    { XK_Next,          XK_ANY_MOD,     "\033[6~",       0,    0},
    { XK_F1,            XK_NO_MOD,      "\033OP" ,       0,    0},
    { XK_F1, /* F13 */  ShiftMask,      "\033[1;2P",     0,    0},
    { XK_F1, /* F25 */  ControlMask,    "\033[1;5P",     0,    0},
    { XK_F1, /* F37 */  Mod4Mask,       "\033[1;6P",     0,    0},
    { XK_F1, /* F49 */  Mod1Mask,       "\033[1;3P",     0,    0},
    { XK_F1, /* F61 */  Mod3Mask,       "\033[1;4P",     0,    0},
    { XK_F2,            XK_NO_MOD,      "\033OQ" ,       0,    0},
    { XK_F2, /* F14 */  ShiftMask,      "\033[1;2Q",     0,    0},
    { XK_F2, /* F26 */  ControlMask,    "\033[1;5Q",     0,    0},
    { XK_F2, /* F38 */  Mod4Mask,       "\033[1;6Q",     0,    0},
    { XK_F2, /* F50 */  Mod1Mask,       "\033[1;3Q",     0,    0},
    { XK_F2, /* F62 */  Mod3Mask,       "\033[1;4Q",     0,    0},
    { XK_F3,            XK_NO_MOD,      "\033OR" ,       0,    0},
    { XK_F3, /* F15 */  ShiftMask,      "\033[1;2R",     0,    0},
    { XK_F3, /* F27 */  ControlMask,    "\033[1;5R",     0,    0},
    { XK_F3, /* F39 */  Mod4Mask,       "\033[1;6R",     0,    0},
    { XK_F3, /* F51 */  Mod1Mask,       "\033[1;3R",     0,    0},
    { XK_F3, /* F63 */  Mod3Mask,       "\033[1;4R",     0,    0},
    { XK_F4,            XK_NO_MOD,      "\033OS" ,       0,    0},
    { XK_F4, /* F16 */  ShiftMask,      "\033[1;2S",     0,    0},
    { XK_F4, /* F28 */  ControlMask,    "\033[1;5S",     0,    0},
    { XK_F4, /* F40 */  Mod4Mask,       "\033[1;6S",     0,    0},
    { XK_F4, /* F52 */  Mod1Mask,       "\033[1;3S",     0,    0},
    { XK_F5,            XK_NO_MOD,      "\033[15~",      0,    0},
    { XK_F5, /* F17 */  ShiftMask,      "\033[15;2~",    0,    0},
    { XK_F5, /* F29 */  ControlMask,    "\033[15;5~",    0,    0},
    { XK_F5, /* F41 */  Mod4Mask,       "\033[15;6~",    0,    0},
    { XK_F5, /* F53 */  Mod1Mask,       "\033[15;3~",    0,    0},
    { XK_F6,            XK_NO_MOD,      "\033[17~",      0,    0},
    { XK_F6, /* F18 */  ShiftMask,      "\033[17;2~",    0,    0},
    { XK_F6, /* F30 */  ControlMask,    "\033[17;5~",    0,    0},
    { XK_F6, /* F42 */  Mod4Mask,       "\033[17;6~",    0,    0},
    { XK_F6, /* F54 */  Mod1Mask,       "\033[17;3~",    0,    0},
    { XK_F7,            XK_NO_MOD,      "\033[18~",      0,    0},
    { XK_F7, /* F19 */  ShiftMask,      "\033[18;2~",    0,    0},
    { XK_F7, /* F31 */  ControlMask,    "\033[18;5~",    0,    0},
    { XK_F7, /* F43 */  Mod4Mask,       "\033[18;6~",    0,    0},
    { XK_F7, /* F55 */  Mod1Mask,       "\033[18;3~",    0,    0},
    { XK_F8,            XK_NO_MOD,      "\033[19~",      0,    0},
    { XK_F8, /* F20 */  ShiftMask,      "\033[19;2~",    0,    0},
    { XK_F8, /* F32 */  ControlMask,    "\033[19;5~",    0,    0},
    { XK_F8, /* F44 */  Mod4Mask,       "\033[19;6~",    0,    0},
    { XK_F8, /* F56 */  Mod1Mask,       "\033[19;3~",    0,    0},
    { XK_F9,            XK_NO_MOD,      "\033[20~",      0,    0},
    { XK_F9, /* F21 */  ShiftMask,      "\033[20;2~",    0,    0},
    { XK_F9, /* F33 */  ControlMask,    "\033[20;5~",    0,    0},
    { XK_F9, /* F45 */  Mod4Mask,       "\033[20;6~",    0,    0},
    { XK_F9, /* F57 */  Mod1Mask,       "\033[20;3~",    0,    0},
    { XK_F10,           XK_NO_MOD,      "\033[21~",      0,    0},
    { XK_F10, /* F22 */ ShiftMask,      "\033[21;2~",    0,    0},
    { XK_F10, /* F34 */ ControlMask,    "\033[21;5~",    0,    0},
    { XK_F10, /* F46 */ Mod4Mask,       "\033[21;6~",    0,    0},
    { XK_F10, /* F58 */ Mod1Mask,       "\033[21;3~",    0,    0},
    { XK_F11,           XK_NO_MOD,      "\033[23~",      0,    0},
    { XK_F11, /* F23 */ ShiftMask,      "\033[23;2~",    0,    0},
    { XK_F11, /* F35 */ ControlMask,    "\033[23;5~",    0,    0},
    { XK_F11, /* F47 */ Mod4Mask,       "\033[23;6~",    0,    0},
    { XK_F11, /* F59 */ Mod1Mask,       "\033[23;3~",    0,    0},
    { XK_F12,           XK_NO_MOD,      "\033[24~",      0,    0},
    { XK_F12, /* F24 */ ShiftMask,      "\033[24;2~",    0,    0},
    { XK_F12, /* F36 */ ControlMask,    "\033[24;5~",    0,    0},
    { XK_F12, /* F48 */ Mod4Mask,       "\033[24;6~",    0,    0},
    { XK_F12, /* F60 */ Mod1Mask,       "\033[24;3~",    0,    0},
    { XK_F13,           XK_NO_MOD,      "\033[1;2P",     0,    0},
    { XK_F14,           XK_NO_MOD,      "\033[1;2Q",     0,    0},
    { XK_F15,           XK_NO_MOD,      "\033[1;2R",     0,    0},
    { XK_F16,           XK_NO_MOD,      "\033[1;2S",     0,    0},
    { XK_F17,           XK_NO_MOD,      "\033[15;2~",    0,    0},
    { XK_F18,           XK_NO_MOD,      "\033[17;2~",    0,    0},
    { XK_F19,           XK_NO_MOD,      "\033[18;2~",    0,    0},
    { XK_F20,           XK_NO_MOD,      "\033[19;2~",    0,    0},
    { XK_F21,           XK_NO_MOD,      "\033[20;2~",    0,    0},
    { XK_F22,           XK_NO_MOD,      "\033[21;2~",    0,    0},
    { XK_F23,           XK_NO_MOD,      "\033[23;2~",    0,    0},
    { XK_F24,           XK_NO_MOD,      "\033[24;2~",    0,    0},
    { XK_F25,           XK_NO_MOD,      "\033[1;5P",     0,    0},
    { XK_F26,           XK_NO_MOD,      "\033[1;5Q",     0,    0},
    { XK_F27,           XK_NO_MOD,      "\033[1;5R",     0,    0},
    { XK_F28,           XK_NO_MOD,      "\033[1;5S",     0,    0},
    { XK_F29,           XK_NO_MOD,      "\033[15;5~",    0,    0},
    { XK_F30,           XK_NO_MOD,      "\033[17;5~",    0,    0},
    { XK_F31,           XK_NO_MOD,      "\033[18;5~",    0,    0},
    { XK_F32,           XK_NO_MOD,      "\033[19;5~",    0,    0},
    { XK_F33,           XK_NO_MOD,      "\033[20;5~",    0,    0},
    { XK_F34,           XK_NO_MOD,      "\033[21;5~",    0,    0},
    { XK_F35,           XK_NO_MOD,      "\033[23;5~",    0,    0},
};

/*
 * Selection types' masks.
 * Use the same masks as usual.
 * Button1Mask is always unset, to make masks match between ButtonPress.
 * ButtonRelease and MotionNotify.
 * If no match is found, regular selection is used.
 */
static uint selmasks[] = {
    [SEL_RECTANGULAR] = Mod1Mask,
};

/*
 * Printable characters in ASCII, used to estimate the advance width
 * of single wide characters.
 */
static char ascii_printable[] =
    " !\"#$%&'()*+,-./0123456789:;<=>?"
    "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_"
    "`abcdefghijklmnopqrstuvwxyz{|}~";

 

I am currently running version 0.8.4 of st. If you just want to use my current versionthis is a link to my code.

If you elect to do this there are a few points worth noting:

  1. Nautilus & gnome-terminal do not like to separated. To fix that ‘problem’ I am now using nemo not nautilus as my file manager. I have noted some bugs with policykit if I uninstall nautilus and Geary.  (Note: so I let them eat up a little disk space, and just don’t use them. I hate unnecessary dependencies….)
  2. Honestly, I like nemo a LOT better than nautilus, so I am happy with using it. To convince nemo to use st as its default terminal, enter the following command line in terminal your terminal.
    gsettings set org.cinnamon.desktop.default-applications.terminal exec st

    If you want to do change to some other terminal replace ‘st’ with ‘your-preferred-terminal’.

Hopefully, this will all work for you. FWIW. It works for me.

Remember, like with all of my work, I am able to provide the following assurance(s):
  • It is almost certainly going to work until it breaks; although I have to admit it may never work and that would be sad.
  • When/if it does break, you may keep all of the pieces.
  • If you find my materials helpful, both you & I will be happy, at least for a little while.
  • My advice is worth every penny you paid for it!

 

]]>
2920
POP!OS 21.10- Tweaked! https://eirenicon.org/popos-21-10-tweaked/ Tue, 18 Jan 2022 14:50:42 +0000 https://eirenicon.org/?page_id=2908 Recently, I decided to give another run at using POP!OS. There were a number of factors that prompted my choice but the most significant was:

System76’s decision to move their DE (Cosmic) from a Gnome to Rust base.

I understand this platform transition is not a short term effort. But, as a desktop environment/ window manager ‘wanderer’ I decided to check ‘things’ out.

By way of full disclosure: this is my first use of the Cosmic-Gnome platform.

I have been quite pleased. Here is a summary of my findings and tweaks. Yes, I made a few to suit my desktop biases (needs?).

Although, I normally prefer to use dwm and/or i3-wm as my desktop of choice, I find the Cosmic Desktop environment remarkably comfortable, tweakable, and dare I say, similar to my favorite wms.

Reading the Cosmic Roadmap, I found they agree that their major ‘competition’ is the i3-wm desktop. Yes, I know Cosmic-Gnome is a Desktop Environment, not a simple Window Manager but similarities between my two favorite Window Managers and the Cosmic DE abound or can be easily created/ enabled.

Here are some:

  • Unlike standard Gnome, the tiling here is similar to that on i3-wm but easier. From my perspective it is some of the easiest tiling ‘around’. Kudos to System76.
  • With the addition of a few Gnome extensions (Improved Workspace Indicator and Auto Move Windows) Cosmic applications are able to open in designated Workspaces and provide a tiny, simple indicator of which Workspace(s) are ‘active’. To activate these features all you need do is install the two plugins; and, designate which applications ‘belong’ on designated workspace(s). Nothing more (so far as I can remember).
  • Because I push open (opening) applications onto designated Workspaces, I use more than the meager number of Workspaces offered by gnome (4)- also by Cosmic-Gnome. I use 9 Workspaces. Luckily, it is quite simple to make 9 Workspaces available and provide keybindings to jump to any or transfer an open application to any Workspace. Look below to see how it can be done. There are probably better ways, but the way I uncovered works for me.  Here is the way I accomplished the above:
====== Gnome-Cosmic ======
Created Sunday 16 January 2022

Keyboard short-cuts:
This command will show what you have:
gsettings list-recursively org.gnome.desktop.wm.keybindings | grep switch-to-workspace

1. Set a static number of workspaces to 9:

gsettings set org.gnome.mutter dynamic-workspaces false

gsettings set org.gnome.desktop.wm.preferences num-workspaces 9

2. Unbind all the Gnome default keybindings for switching between applications:

gsettings set org.gnome.shell.keybindings switch-to-application-1 [] && 
gsettings set org.gnome.shell.keybindings switch-to-application-2 [] && 
gsettings set org.gnome.shell.keybindings switch-to-application-3 [] && 
gsettings set org.gnome.shell.keybindings switch-to-application-4 [] && 
gsettings set org.gnome.shell.keybindings switch-to-application-5 [] && 
gsettings set org.gnome.shell.keybindings switch-to-application-6 [] && 
gsettings set org.gnome.shell.keybindings switch-to-application-7 [] && 
gsettings set org.gnome.shell.keybindings switch-to-application-8 [] && 
gsettings set org.gnome.shell.keybindings switch-to-application-9 []

3. Unbind all the Gnome keybindings for moving between workspaces

gsettings set org.gnome.shell.keybindings move-to-workspace-1 [] && 
gsettings set org.gnome.shell.keybindings move-to-workspace-2 [] && 
gsettings set org.gnome.shell.keybindings move-to-workspace-3 [] && 
gsettings set org.gnome.shell.keybindings move-to-workspace-4 [] && 
gsettings set org.gnome.shell.keybindings move-to-workspace-5 [] && 
gsettings set org.gnome.shell.keybindings move-to-workspace-6 [] && 
gsettings set org.gnome.shell.keybindings move-to-workspace-7 [] && 
gsettings set org.gnome.shell.keybindings move-to-workspace-8 [] && 
gsettings set org.gnome.shell.keybindings move-to-workspace-9 []

4. Rebind them to switch between workspaces on Super + number:

gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-1 "[\"<Super>1\"]" && 
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-2 "[\"<Super>2\"]" && 
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-3 "[\"<Super>3\"]" && 
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-4 "[\"<Super>4\"]" && 
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-5 "[\"<Super>5\"]" && 
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-6 "[\"<Super>6\"]" && 
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-7 "[\"<Super>7\"]" && 
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-8 "[\"<Super>8\"]" &&  
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-9 "[\"<Super>9\"]" 

5. In addition, it's convenient to have Super + Shift + number move a window between workspaces:

gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-1 "[\"<Super><Shift>1\"]" && 
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-2 "[\"<Super><Shift>2\"]" && 
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-3 "[\"<Super><Shift>3\"]" && 
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-4 "[\"<Super><Shift>4\"]" && 
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-5 "[\"<Super><Shift>5\"]" && 
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-6 "[\"<Super><Shift>6\"]" && 
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-7 "[\"<Super><Shift>7\"]" && 
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-8 "[\"<Super><Shift>8\"]" && 
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-9 "[\"<Super><Shift>9\"]" 

  • Because I have strong opinions (probably on everything), there are some things I removed from / disabled on Cosmic.
    • The most important being, I turned-off the ‘Desktop Icons NG’ extension. Sorry, I do not use or like desktop icons; too much clutter.
    • I, also, use my own preferred keybindings, not those standard to Cosmic-Gnome.
  • Additionally I am a fan of using keybind accessed pop-up services. I generally use at least two; they are System Monitoring & System Maintenance: two (2) Yad scripts.
    #!/bin/bash
    # system monitors
    yad --center --borders=1 --on-top --sticky --single-click --title="System Monitors" --height=80 --text="<b><u>System Monitoring Tools</u></b>" --window-icon=utilities-terminal --image "calligraplan" --image-on-top\
        --buttons-layout=center \
        --window-icon="gtk-quit: exit" \
        --button="Task Management!gtk-preferences:lxtask" \
        --button="Wavemon!network:gnome-terminal -e wavemon -i wlp2s0" \
        --button="BpyTop!system:gnome-terminal -e bpytop" \
        --button="Glances!system-run:gnome-terminal -e glances" \
        --button="htop!cpu:gnome-terminal -e htop" \
        --button="nmon!search:gnome-terminal -e nmon" \
        --button=Cancel:0 \
    #!/bin/bash
    #System Maintenance - Tools
    yad --title "System Tools" --form --width=325 --height=200 --posx=850 --posy=200 --text="<b><u>System Maintenance Tools</u></b>" --window-icon=utilities-terminal --image "calligraplan" --image-on-top \
    --field="<b>aptitude</b>":fbtn "gnome-terminal -e aptitude" \
    --field="<b>Bleachbit</b>":fbtn "bleachbit" \
    --field="<b>Clean, Update, Upgrade</b>":fbtn "gnome-terminal -e /home/mark/.local/share/scripts/clean-update.sh" \
    --field="<b>Grsync</b>":fbtn "grsync" \
    --field="<b>Grub Customizer</b>":fbtn "grub-customizer" \
    --field="<b>Network Manager TUI</b>":fbtn "gnome-terminal -e nmtui" \
    --field="<b>Print Manager Settings</b>":fbtn "system-config-printer" \
    --field="<b>Restart Network</b>":fbtn "systemctl restart NetworkManager" \
    --field="<b>Sound Control</b>":fbtn "pavucontrol" \
    --field="<b>Synaptic</b>":fbtn "synaptic-pkexec" \
    --field="<b>Topgrade (Upgrade)</b>":fbtn "gnome-terminal -e /home/mark/.local/bin/topgrade/topgrade.sh" \
    --field="<b>USB Formatter</b>":fbtn "mintstick -m format" \
    --field="<b>USB Image Writer</b>":fbtn "mintstick -m iso" \
    --button=Exit:1
    
  • Due to my ancient brain’s lack of precision memory, I use two (2) Conkies:
    • one for keybindings (to provide a handy reminder of those I most often need and use);
--[[                               
# Based on Oberon's fine work on i3wm-Manjaro
# https://github.com/oberon-manjaro/conkies
# Add'l Color, functional and branding changes were made by 
# Mark Rabideau (ManyRoads) http://eirenicon.org
# in order to work, this conky requires the installation
# of pamixer in order to report sound volume correctly.
# 
# REMEMBER to change the location of scripts, devices, wifi, etc.
# to match those used on your environment(s)
# you also need appropriate glyph fonts like Nerd Fonts
# fontawesome, etc. in order for the glyphs to present correctly
#
]]
conky.config = {
    alignment = 'bottom_left',
    border_width = 1,
    border_inner_margin = 10,
    cpu_avg_samples = 2,
    default_color = '#CFD8DC',
    default_outline_color = '#000000',
    default_shade_color = '#CFD8DC',
    draw_borders = false,
    draw_graph_borders = true,
    draw_shades = false,
    double_buffer = true,
    use_xft = true,
    font = 'Inconsolata Regular:size=11',
    gap_x = 30,
    gap_y = 70,
    minimum_height = 100,
    minimum_width = 300,
    maximum_width = 300,
    net_avg_samples = 2,
    no_buffers = true,
    out_to_console = false,
    out_to_stderr = false,
    extra_newline = false,
    own_window = true,
    own_window_class = 'Conky',
    own_window_type = 'desktop',
    own_window_hints = 'undecorated,below,sticky,skip_taskbar,skip_pager',
    own_window_colour = '#2A2A2A',
    own_window_argb_visual = true,
    own_window_argb_value = 160,
    update_interval = 1.0,
    uppercase = false,
    use_spacer = 'none',
    xftalpha = .85,
    times_in_seconds = true,
    color1 = 'FFFFFF',
    color2 = '#6CC7D2',
}
conky.text = [[
#### Keybindings
${voffset -5}$color2${font Roboto:size=20}Keybindings ${font}
#### Applications
${voffset 10}${color}${font Roboto:size=11}Applicationss $hr ${font}
${voffset 5}${color2}calibre $alignr${color}[alt]+
${color2}text editor $alignr${color}[alt]+[e]
${color2}geany $alignr${color}[alt]+[g]
${color2}onlyoffice $alignr${color}[alt]+[o]
${color2}skype $alignr${color}[alt]+[s]
${color2}thunderbird $alignr${color}[alt]+[m]
${color2}virtualbox $alignr${color}[alt]+[v]
${color2}web browser $alignr${color}[alt]+[w]
${color2}zim $alignr${color}[alt]+[z]
#### Tiling
${voffset 5}${color}${font Roboto:size=11}Tiling $hr ${font}
${voffset 5}${color2}tiling toggle $alignr${color}[super]+y
${color2}hide window $alignr${color}[alt]+F9
${color2}toggle fullscreen mode $alignr${color}F10
${color2}toggle fullscreen mode $alignr${color}[super]+[m]
${color2}workspace jump $alignr${color}[super]+[1,2...]
${color2}move window $alignr${color}[super]+[shift]+[1,2...]
${color2}show workspaces $alignr${color}[super]+[d]
${color2}view split left $alignr${color}[super]+[ctrl]+[h]
${color2}view split right $alignr${color}[super]+[ctrl]+[l]
#### Menus-Terminal
${voffset 5}${color}${font Roboto:size=11}Menus-Terminals $hr ${font}
${voffset 5}${color2}open new terminal $alignr${color}[super]+enter
${color2}applications $alignr${color}[super]+[a]
#### Quit
${voffset 5}${color}${font Roboto:size=11}Quit $hr ${font}
${voffset 5}${color2}kill focused $alignr${color}[alt]+F4
${color2}logout $alignr${color}[ctrl]+[alt]+[del]

]]
    • and, another to provide systems status.
--[[                               
# Based on Oberon's fine work on i3wm-Manjaro
# https://github.com/oberon-manjaro/conkies
# Add'l Color, functional and branding changes were made by 
# Mark Rabideau (ManyRoads) http://eirenicon.org
# in order to work, this conky requires the installation
# of pamixer in order to report sound volume correctly.
# 
# REMEMBER to change the location of scripts, devices, wifi, etc.
# to match those used on your environment(s)
# you also need appropriate glyph fonts like Nerd Fonts
# fontawesome, etc. in order for the glyphs to present correctly
#
]]
conky.config = {
    alignment = 'top_right',
    border_width = 1,
    border_inner_margin = 10,
    cpu_avg_samples = 2,
    default_color = '#CFD8DC',
    default_outline_color = '#000000',
    default_shade_color = '#CFD8DC',
    draw_borders = false,
    draw_graph_borders = true,
    draw_shades = false,
    double_buffer = true,
    use_xft = true,
    font = 'Inconsolata Regular:size=11',
    gap_x = 30,
    gap_y = 110,
    minimum_height = 100,
    minimum_width = 300,
    maximum_width = 300,
    net_avg_samples = 2,
    no_buffers = true,
    out_to_console = false,
    out_to_stderr = false,
    extra_newline = false,
    own_window = true,
    own_window_class = 'Conky',
    own_window_type = 'desktop',
    own_window_hints = 'undecorated,below,sticky,skip_taskbar,skip_pager',
    own_window_colour = '#2A2A2A',
    own_window_argb_visual = true,
    own_window_argb_value = 160,
    update_interval = 1.0,
    uppercase = false,
    use_spacer = 'none',
    xftalpha = .85,
    times_in_seconds = true,
    color1 = 'FFFFFF',
    color2 = '#6CC7D2',
}
conky.text = [[
${voffset -5}$color2${font Roboto:size=20}${time %A}$font\
${voffset -15}$alignr$color${font Roboto:size=42}${time %e}$font
$color${voffset -12}$color${font Roboto:size=20}${time %b}$font\
${voffset -6} $color${font Roboto:size=20}${time %Y}$font$color2 $hr
#### System
${voffset 5}${color}${font Roboto:size=11}System $hr ${font}
#### CPU
${voffset 5}${color}${font Roboto:size=11}CPU$alignr$cpu%
$font$color2${top name 1}$alignr$color${top cpu 1}%
$color2${top name 2}$alignr$color${top cpu 2}%
$color2${top name 3}$alignr$color${top cpu 3}%
$color2${top name 4}$alignr$color${top cpu 4}%
$color2${top name 5}$alignr$color${top cpu 5}%
#### RAM
${voffset 10}${color}${font Roboto:size=11}RAM$alignr$mem$font
${voffset 5}$color2${top_mem name 1}$alignr$color${top_mem mem_res 1}
$color2${top_mem name 2}$alignr$color${top_mem mem_res 2}
$color2${top_mem name 3}$alignr$color${top_mem mem_res 3}
$color2${top_mem name 4}$alignr$color${top_mem mem_res 4}
$color2${top_mem name 5}$alignr$color${top_mem mem_res 5}
#### Status
${voffset 5}${color}${font Roboto:size=11}Status $hr ${font}
${voffset 0}${color2}${font Roboto:size=11}Swap ${font FontAwesome:size=11}?${alignr}${font Roboto:size=11}${color}${swap}/ ${swapfree}
${voffset 0}${color2}${font Roboto:size=11}Disk ${font FontAwesome:size=11}?${font Roboto:size=11}${color}${alignr}${fs_used /home/mark} of ${fs_size /home/mark} / ${fs_used_perc /home/mark}%
${voffset 0}${color2}${font Roboto:size=11}Wifi ${font FontAwesome:size=11}?${font Roboto:size=11}${color}${alignr}${wireless_essid wlp2s0} ${wireless_link_qual_perc wlp2s0}%${font}
${voffset 5}${color}${font Roboto:size=11}Distro $hr ${font}
${voffset 0}${color2}${font Roboto:size=11}Kernel${alignr} ${color}${kernel}
${voffset 0}${color2}${font Roboto:size=11}Init ${alignr}  ${color}${execi 86400 .$Home/.local/share/scripts/init-id.sh}
${voffset 0}${color2}${font Roboto:size=11}Desktop ${color}${font Roboto:size=11}$alignr${execi 86400 awk -F= '/TION/ {print $2}' /etc/lsb-release |sed 's/"//g'} \
]]
  • I prefer to access and use a fully searchable application menu via keybinding F1. To that end, I have installed and created a Cosmic-look jgmenu -jgmenurc.  I do not really like the huge, mouse centric, application maze, very much. jgmenu uses almost zero resources and you simply type the application name (which is automagically provide as you type). then arrow and ‘hit’ enter to run. On window Managers I often also provide dmenu, rofi, and j4-dmenu-desktop as additional options. You can do that here if you wish; I may do that later. But for now, jgmenu offers me a nice, fast, ‘eye-candy’ menu, easily made to conform with the Cosmic style. The jgmenurc follows:
position_mode = center
columns = 3
menu_width = 650
menu_height_min = 410
menu_height_max = 410
menu_padding_top = 15
menu_padding_right = 15
menu_padding_bottom = 15
menu_padding_left = 15
menu_radius = 3
menu_border = 3
#menu_halign = center
#menu_valign = center
color_menu_bg = #303030 99
color_menu_border = #FBB86C 90
csv_no_dirs = 1
csv_name_format = %n

If you wish to use these materials, you may do so without any encumbrances. If you like any of the ideas, feel free to implement them in manner that suits your need.  The bottom line, for me, is Cosmic-Gnome (part of POP!OS 21.10) is a VERY nice Desktop. I plan to use it for a while.

 

Remember, like with all of my work, I am able to provide the following assurance(s):
  • It is almost certainly going to work until it breaks; although I have to admit it may never work and that would be sad.
  • When/if it does break, you may keep all of the pieces.
  • If you find my materials helpful, both you & I will be happy, at least for a little while.
  • My advice is worth every penny you paid for it!

]]>
2908
Nordic Palette for your desktop. https://eirenicon.org/knowledge-base/nordic-palette-for-your-desktop/ Fri, 17 Sep 2021 15:32:21 +0000 https://eirenicon.org/?page_id=2839 For those who asked for pointers on arranging their GTK Desktop to Nordic colors, here are my recommendations. If you are unfamiliar with the Nordic Palette here is information on its specification.

Obviously, there are many, many options available to you. I will only discuss those I use. Be advised, I am running dual window managers from within a single user space. I am NOT running a complete desktop environment (DE) such as xfce, mate etc. One additional note, I do not really care whether or not QT apps respect my theming. That is a topic for another posting.

Here is the required scrot (proof of existence):

i3wm (not gaps), rofi, conkybar, conky(2), st (terminal), Nordic Palette on MX21(b2) running Debian Bullseye

The GUI tool I use to make modifications on my wms (dwm & i3wm) is ‘lxappearance’. In order to use this to set root/sudo user application settings as well as normal user themes you should the following (from the command line). For a personal user space run:

$ lxappearance

For root/ user apps run:

$ sudo lxappearance

If you do not see your preferred theme options when running sudo that means you have not installed your themes “system-wide”.

Here are the themes I use:

Other tools that I use which offer plugin themes that adhere to the Nordic palette include:

  • Geany
  • Mousepad
  • Firefox
  • Thunderbird

In dwm & i3wm, I use the Nordic palette for st (terminal). The config.h settings/code for the Nordic color palette follows:

/* Terminal colors (16 first used in escape sequence) */
static const char *colorname[] = {
/* 8 normal colors */
"#3b4252", /* black */
"#bf616a", /* red */
"#a3be8c", /* green */
"#ebcb8b", /* yellow */
"#81a1c1", /* blue */
"#b48ead", /* magenta */
"#88c0d0", /* cyan */
"#e5e9f0", /* white */

/* 8 bright colors */
"#4c566a", /* black */
"#bf616a", /* red */
"#a3be8c", /* green */
"#ebcb8b", /* yellow */
"#81a1c1", /* blue */
"#b48ead", /* magenta */
"#8fbcbb", /* cyan */
"#eceff4", /* white */

[255] = 0,

/* more colors can be added after 255 to use with DefaultXX */
"#f0c674", /*256 cursor*/
"#555555", /*257 rev cursor*/
"#2e3440", /* background */
"#d8dee9", /* foreground */
};

Additionally, I modified a rofi template from Primetoxinz to adhere to the Nordic palette:

/**
 * Author: Primetoxinz & ManyRoads
 */
* {
    text-color:             #E5E9F0;
    background-color:       #4C566A;
    lightbg:                #434C5E;
    red:                    #BF616A;
    purple:                 #B48EAD; 
    blue:                   #81A1C1; 
    foreground:             #ECEFF4;
    background:             #434C5E;
    width:                  480;
    lines:                  15;

    selected-normal-foreground:  @foreground;
    normal-foreground:           @foreground;
    alternate-normal-background: @background;
    selected-urgent-foreground:  @foreground;
    urgent-foreground:           @foreground;
    alternate-urgent-background: @background;
    active-foreground:           @foreground;
    selected-active-foreground:  @foreground;
    alternate-normal-foreground: @foreground;
    alternate-active-background: @blue;
    bordercolor:                 @foreground;
    normal-background:           @background;
    selected-normal-background:  @blue;
    separatorcolor:              @purple;
    spacing:                     5;
    urgent-background:           @red;
    alternate-urgent-foreground: @foreground;
    selected-urgent-background:  @red;
    alternate-active-foreground: @foreground;
    selected-active-background:  @blue;
    active-background:           @purple;
}
window {
    border:     2;
    text-color: @foreground;
    background-color: rgba ( 0, 0, 0, 0 % );
    padding:    15;
    text-color: @bordercolor;
    background-color: @background;
}
mainbox {
    border:  2;
    padding: 10;
}
message {
    border:     1px dash 0px 0px ;
    text-color: @separatorcolor;
    padding:    2px 2px 2px ;
}
textbox {
    text-color: @foreground;
}
listview {
    fixed-height: 0;
    border:       2px 0px 0px ;
    padding:      2px 2px 2px ;
    text-color: @separatorcolor;
}
element {
    border: 0;
}
element-text {
    background-color: inherit;
    text-color:       inherit;
}
element.normal.normal {
    text-color: @normal-foreground;
    background-color: @normal-background;
}
element.normal.urgent {
    text-color: @urgent-foreground;
    background-color: @urgent-background;
}
element.normal.active {
    text-color: @active-foreground;
    background-color: @active-background;
}
element.selected.normal {
    text-color: @selected-normal-foreground;
    background-color: @selected-normal-background;
}
element.selected.urgent {
    text-color: @selected-urgent-foreground;
    background-color: @selected-urgent-background;
}
element.selected.active {
    text-color: @selected-active-foreground;
    background-color: @selected-active-background;
}
element.alternate.normal {
    text-color: @alternate-normal-foreground;
    background-color: @alternate-normal-background;
}
element.alternate.urgent {
    text-color: @alternate-urgent-foreground;
    background-color: @alternate-urgent-background;
}
element.alternate.active {
    text-color: @alternate-active-foreground;
    background-color: @alternate-active-background;
}
mode-switcher {
    border: 1px dash 0px 0px ;
}
button selected {
    text-color: @selected-normal-foreground;
    background-color: @selected-normal-background;
}
inputbar {
    spacing: 0;
    border: 0px ;
}
button normal {
    text-color: @foreground;
}

inputbar {
    children:   [ prompt,textbox-prompt-colon,entry,case-indicator ];
}
textbox-prompt-colon {
    expand:     false;
    str:        ":";
    margin:     0px 0.3em 0em 0em ;
    text-color: @normal-foreground;
}

I, also, have set Nordic colors in .Xresources for use on xterm & urxvt:

! Nordic Color scheme
#define nord0 #2E3440
#define nord1 #3B4252
#define nord2 #434C5E
#define nord3 #4C566A
#define nord4 #D8DEE9
#define nord5 #E5E9F0
#define nord6 #ECEFF4
#define nord7 #8FBCBB
#define nord8 #88C0D0
#define nord9 #81A1C1
#define nord10 #5E81AC
#define nord11 #BF616A
#define nord12 #D08770
#define nord13 #EBCB8B
#define nord14 #A3BE8C
#define nord15 #B48EAD

*.foreground: nord4
*.background: nord0
*.cursorColor: nord4
*fading: 35
*fadeColor: nord3

*.color0: nord1
*.color1: nord11
*.color2: nord14
*.color3: nord13
*.color4: nord9
*.color5: nord15
*.color6: nord8
*.color7: nord5
*.color8: nord3
*.color9: nord11
*.color10: nord14
*.color11: nord13
*.color12: nord9
*.color13: nord15
*.color14: nord7
*.color15: nord6

! dmenu settings

dmenu.selforeground: #ECEFF4
dmenu.background: #2E3440
dmenu.selbackground: #4C566A
dmenu.foreground: #ECEFF4
dmenu.font: "DejaVu Sans Mono:size=11.5:antialias=true"

! URxvt Settings
URxvt.font: xft:DejaVu Sans Mono:size=11.5:antialias=true
URxvt.boldFont: xft:DejaVu Sans Mono:bold:size=11.5:antialias=true
urxvt*scrollBar: false
urxvt*mouseWheelScrollPage: true
urxvt*cursorBlink: true
urxvt*saveLines: 5000
urxvt*internalBorder: 15
urxvt*geometry: 90x32
! Setting transparency and background
URxvt*depth: 32
URxvt.background: [90]#3B4252

! Normal copy-paste keybindings ( ctrl-shift c/v )
urxvt.iso14755: false
urxvt.keysym.Shift-Control-V: eval:paste_clipboard
urxvt.keysym.Shift-Control-C: eval:selection_to_clipboard
!xterm escape codes, word by word movement
urxvt.keysym.Control-Left: \033[1;5D
urxvt.keysym.Shift-Control-Left: \033[1;6D
urxvt.keysym.Control-Right: \033[1;5C
urxvt.keysym.Shift-Control-Right: \033[1;6C
urxvt.keysym.Control-Up: \033[1;5A
urxvt.keysym.Shift-Control-Up: \033[1;6A
urxvt.keysym.Control-Down: \033[1;5B
urxvt.keysym.Shift-Control-Down: \033[1;6B

! Xterm Settings
xterm*font: xft:DejaVu Sans Mono:size=11.5:antialias=true
xterm*geometry: 90x32
xterm*mouseWheelScrollPage: true
xterm*cursorBlink: true
xterm*saveLines: 5000
xterm*internalBorder: 15

 

All in all, this provides are pretty consistent Nordic palette for my two favorite wms (dwm & i3wm: non-gaps). These identical settings work for me on both arch & Debian based distros.

Remember, like with all of my work, I am able to provide the following assurance(s):
  • It is almost certainly going to work until it breaks; although I have to admit it may never work and that would be sad.
  • When/if it does break, you may keep all of the pieces.
  • If you find my materials helpful, both you & I will be happy, at least for a little while.
  • My advice is worth every penny you paid for it!

]]>
2839
dwm and i3wm systray removal & desktop setup tricks https://eirenicon.org/dwm-and-i3wm-systray-removal-desktop-setup-tricks/ Fri, 13 Aug 2021 21:49:38 +0000 https://eirenicon.org/?page_id=2780 These days, there are two window managers I enjoy using “more than the others I have tried”. They are dwm & i3wm.

After long time use (more than a year on each) I felt the need to cleanup and simplify my desktop installs. All part of my trying to keep things simple and easy to use.

It is worth noting that I run both window managers (wms) in the same user space on the same device. All keybindings are shared between my wms via a single sxhkd config file.

The cleanup and simplification tasks I have implemented include:

  • removal of my systrays (system notification trays) both on i3 and dwm. I want to see if I can live without a systray; just as I have trained myself to unlearn the need for desktop icons.
  • creation of “elegant?” wm bars. I want my wm bars not only to look good but be informative, as well. To accomplish this, I have built unique setups for both dwm and i3.
    1. I use slstatus on dwm (keeping dwm as simple as possible).

      slstatus on dwm

      The slstatus bar setup/ layout is contained in config.h of slstatus. My config.h is available for download here. I assume you know how-to use it…

    2. I chose to use conkybar on i3 (because I like how it looks). When I use i3bar it really ends up looking pretty much the same as slstatus; and who wants that?!?!?

      conkybar on i3

      conkybar is invoked using the following command in my i3 conf file:
      status_command ~/.config/i3/conkybar.sh
      My conkybar script is available here.

  • I removed picom/ compton because xcompmgr does the trick for me. FWIW, here is the xcompgr setting I use.  I run it from .xprofile.
    # compositor
    xcompmgr -CnfF -I-.015 -O-.03 -D6 -t-1 -l-3 -r4.2 -o.5 &
  • I installed and setup a few light-weight keyboard accessible functions to replace the removed “tray items” and their supported function(s):
    • nmtui: Because I lost access to the systray networking icon (nm-applet), I created a new method of access to the networking/ wifi function by installing nmtui (via pacman) and created a keybinding to invoke nmtui, as needed. I have also included this in my system maintenance yad popup. Just in case you have no idea what nmtui looks like, here’s a screenshot:

      nmtui
    • brightness-controller featuring the following:
      • Brightness Control
      • Saving color profile
      • Loading color profile
        Yet another stellar screenshot for inquiring minds to peruse. This function is also available via my system maintenance yad popup.

        brightness controller
    • topgrade: to quote from their github site:
      • Keeping your system up to date mostly involves invoking more than a single package manager. This usually results in big shell one-liners saved in your shell history. Topgrade tries to solve this problem by detecting which tools you use and run their appropriate package managers.

    • lxtask: I simply installed the application (lxtask) and made it available via my system maintenance yad popup (also via a keybind). Lxtask allows me to see all active processes (and kill/stop those I don’t want running.)
    • pavucontrol:  Just a simple install; you can review how I have included it in my little yad script (available in this article).
    • The above functions (as well as several others) are made available on both dwm & i3 for simple access & use via a yad script.

      The Yad script is entitled “System Maintenance Tools” on the desktop screenshot.

      The Yad system maintenance tools script is available for download.

      Remember, like with all of my work, I am able to provide the following assurance(s):
      • It is almost certainly going to work until it breaks; although I have to admit it may never work and that would be sad.
      • When/if it does break, you may keep all of the pieces.
      • If you find my materials helpful, both you & I will be happy, at least for a little while.
      • My advice is worth every penny you paid for it!
]]>
2780
i3wm, dwm plus Peppermint 10 desktops on an LTS Ubuntu Bionic Base https://eirenicon.org/i3wm-dwm-plus-peppermint-10-desktops-on-an-lts-ubuntu-bionic-base/ Wed, 14 Apr 2021 16:36:38 +0000 https://eirenicon.org/?page_id=2694

Building this Ubuntu-based multi-window manager/ DE environment is tested on Peppermint OS 10. The steps highlighted should work with other Ubuntu-based distros & with minor tweaks should even work on Arch based distros. What I can say is that they work on mine.

For those who have under powered, arcane laptops such as my Acer Aspire One A0722, I am sharing my recent foray into using Peppermint OS 10.

Peppermint OS 10 (P10), if you are unfamiliar, offers a blended Desktop Environment (DE) build largely of xfce4, lxde, and cinnamon DE components. The environment discussed in this tutorial runs on a tweaked (modified) Ubuntu Bionic LTS (Long Term Support) base, such as Peppermint OS 10.

I have to say the base (basic) P10 environment is quite nice. It runs smoothly and consumes few resources. Out of the box, P10 idles at about 500MB on my machine. Because I am never satisfied with vanilla installs, I elected to tweak my initial installation to see what I could achieve with minor efforts. Just by shutting down a number of background daemons and services, I was able to get the desktop to about 350MB (at idle with one terminal window running). Having achieved that, I decided I’d work on my teeny, tiny platform to see what diversity and performance I might attain (with a modicum of effort).

Here are images of my desktops after all the tasks listed below were accomplished:

Peppermint OS 10 @ 349MBi3wm on Peppermint OS @ 292MB

dwm on Peppermint OS @ 272MB

Use-case

Here’s what I set out to achieve:

  1. No degradation in performance on the basic Peppermint 10 Desktop Environment (DE).
  2. The addition of dwm (from suckless) to my user desktop account.
  3. Addition of i3wm (not the gaps version) to the user desktop.
  4. Shared x window services across all three desktops.
  5. Shared Keybindings (application short-cuts) across all three desktops (P10, i3wm, dwm).
  6. Blazing (okay, leisurely but not ponderous) speed in each environment.

Key Software Components

The new software components I added to P10 to build essential functions for this environment include:

  1. sxhkd (for sharing keybindings)
  2. rofi (for common/shared menus, application searching, and active application monitoring and access)
  3. feh is used to load new desktop wallpapers when a new desktop is opened. I continue to use nitrogen (which is native to Peppermint) for wallpaper changing.
  4. dunst is used as my common notification software. It is lighter than notifyd and more fun to tweak.
  5. yad & zenity scripts
  6. .xsessionrc is incorporated into the user area/ login process in order to set x-windows functions in a standard manner for each desktop (when activated).
  7. conky & conkybar for desktop status monitoring on i3 and dwm.

Added (New) Functionality

Additional ‘neat features ‘(so say I) incorporated in the ‘new’ environment include:

  1. caffeine- this little app does burn a little extra memory, but it keeps my desktop from timing out when I don’t want it to, like during long compiles, videos, podcasts, etc.
  2. termite- because it is my current favorite terminal (although I have to say that Sakura terminal, the native P10 terminal, is fine). Adding termite is probably more of a chore than most Debian/Ubuntu users want to undertake because it needs to be built from source. Here is the link I used. You are welcome to give it a go. If you want to do this, here is what I used/followed (source):
    wget https://raw.githubusercontent.com/Corwind/termite-install/master/termite-install.sh
    chmod +x ./termite-install.sh
    ./termite-install.sh
    sudo update-alternatives --config x-terminal-emulator
    
  3. xautolock & i3lock-fancy are used to replace the heavier screenlock and light-locker found on the base version of Peppermint OS 10.
  4. powertop, thermald, and tlp for power conservation.

In order to build this ‘brave new environment’, I have had to strip almost all Peppermint startup (autostart) functions and incorporate them into .xsessionrc (Note: If you are using an Arch-base distro you should rename this file to .xprofile). I, also, have removed all Peppermint keybindings from within Peppermint and moved them to sxhkd (so they will work with every desktop environment). You should leave any unique to Peppermint x-window functions and/or keybindings where they are in their native Peppermint setup. To be honest I have very few items remaining in their native locations.

Note: Be careful here…. There be monsters, should you err.

Included below are the various files I created and use (you may use and/or alter these to suit your preferences). Be advised that all the dwm and i3 settings are included in the various files below.

You should review and load these files in bulk (once they are adjusted to your satisfaction).  The folders I provide you are set up such that they will fit into a non-modified $Home directory.  (see Mass Copy Phase- below)

Mass Copy Phase

  • Move Peppermint functions from their native Peppermint locations to .xsessionrc (for x-windows functions) and to sxhkd (for application keybindings/short-cuts). The dotfiles I have provided below contain the transitioned versions of “my” Peppermint standard settings. You are on your own to manage yours. If you really, really want, I’ll do yours for you providing you send me your PC (along with return postage) and provide me with a $250 Paypal payment. 😉
    1. Before executing the “Mass Copy” step (below) please review the entirety but focus especially on the contents of .xsessionrc and .config/sxhkd/base.conf.  Be certain you have reviewed the contents of these files and matched them against what you removed (or will remove) from your P10 autostart function. Examine my templates, use them, learn from them. This is really not too very difficult. Remember, these files will play a crucial role in making certain your previous setup continues to work as intended, and that the new environment will blend seamlessly into your setup and match your setup where ever possible.
    2. As you examine & review the entirety of the folder contents (link below) you will notice folders containing additional information like fonts, themes, etc. These are used in both i3 and dwm. You don’t need to do anything more than keep them and include them in the “Mass Copy”. If you don’t keep them then numerous items in i3 and dwm will break. You’ve been warned.
    3. “Mass Copy” step:  If you are good to go with standard file folder layout in your $Home directory and have completed the content review, it should be okay to over-write things should you encounter duplicate file names. You should now be ready to drag & drop them (the lot) into your $Home.
    4. Next, using synaptic install caffeine, rofi, sxhkd, dunst, yad, feh, xautolock, i3lock-fancy,thermald, tlp, powertop, and zenity. Don’t worry if synaptic tells you that an application is already installed, plod on through by re-installing those items (no harm, no foul).

Mass Copy Folder for download (zipped)- about 280MB

Once you have completed the above steps, you can log out and log back in to P10. You should note no change in Peppermint after login. (Note: Test this to be certain.) Everything should work like it did before, assuming you didn’t lose something in the autostart/ keybinding transition.

At the end of this phase, you should still have a functioning P10 environment, although a bunch of ‘stuff’ will have been moved to new autostart and ‘xwindow function’ locations.

When you are ready to add either i3wm and/or dwm I recommend you make the transition(s) in step-wise fashion (see below).

i3 Phase (optional)

  • Now you are at the point where you are ready to install i3. I used synaptic for this function. I installed the i3 meta package. This step should be pretty simple. After i3 is installed, use synaptic to install conky-all.
    1. Before logging out of your P10 desktop, make certain your $Home/.config/i3 directory is populated (if you did not remove items from the “Mass Copy” above you should see ‘stuff’ in your $Home/.config/i3 folder. If that folder is empty, or missing items,  you will need to copy the .config/i3 folder again. You will find the base mterials in the Mass Copy master folder.
    2. Once you make certain i3 and conky-all are installed and your $Home/.config/i3 folder is populated, you should be able to log out of Peppermint and on the Login screen see an option for i3. Select the i3 option and Login… voilá. You should have an i3 desktop. The conkies left & right should help you with getting in & out & around. To learn about how i3 works, visit their site. Enjoy. (N.B. Read the Mass Copy folder .config/sxhkd/base.conf to review the application bindings I provided (plus your changes).  You will, also, find the details of how i3 works in the same Mass Copy folder in .config/i3.conf -the i3 configuration file.)

dwm Phase (optional)

If you really want to be among the cool-kids, this third desktop installation phase is for you.

Setting up dwm is really pretty simple. If you downloaded all the files from the “Mass Copy” folder, you will have all the essential dwm software. You will find your files located in $Home/.local/bin You just need to compile it.

Do NOT install dwm from a repo. dwm is not designed to be installed that way… sorry.

Here’s what you need to do to get things operational (be aware you will get things setup my way.  Down the road you will want to tweak things to your fancy/ needs.

For Debian based distros (like ubuntu), using your terminal to install numerous dependencies. (reference: https://johnjago.com/blog/dwm/):

sudo apt install make gcc libx11-dev libxft-dev libxinerama-dev xorg libharfbuzz-dev

Next go to the main dwm sub-folder ($Home/.local/bin/dwm/dwm) and open a terminal in that directory.  Enter the following command:

 sudo make clean install 

Then got to the slstatus sub-folder ($Home/.local/bin/dwm/slstatus) and open a terminal in that directory.

Enter the following command:

sudo make clean install

The first step in the dwm setup only needs to be run one time. Because I have made numerous edits to config.h for your base install, you don’t actually need to edit config.h unless you really, really want to. If you have never played with dwm before, don’t do too much futzing with things before you do some research. You have been warned!

Next in order to get dwm to appear as an option on your login display manager, we have another small task to perform.

  • We need to create an xsession file for dwm.
  • What we are going to do is edit the pre-existing i3.desktop file, and then save it under another name so we will be able to open dwm as  LightDM (Slick Greeter) option.
  • In a terminal window enter:
sudo geany /usr/share/xsessions/i3.desktop

Replace the existing i3.desktop info with the following; make certain  <UserName> = your username :

[Desktop Entry] Name=dwm
Comment=dynamic window manager
Exec= /home/<UserName>;/.local/bin/autostart-scripts/start-dwm.sh
Type=Application
Icon=preferences-system-windows-move

Save the revised file as: dwm.desktop

(Be certain to rename the edited i3.desktop file and leave the original i3.desktop file as it was.). The Exec=$Home/.local/bin/autostart-scripts/start-dwm.sh provides dwm unique autostart functions as well as the actual dwm executable call.

Once you have completed these steps, you should be able to open all the installed window managers plus your original desktop, as you need/ want them.

Enjoy!

Remember, like with all of my work, I am able to provide the following assurance(s):
  • It is almost certainly going to work until it breaks; although I have to admit it may never work and that would be sad.
  • When/if it does break, you may keep all of the pieces.
  • If you find my materials helpful, both you & I will be happy, at least for a little while.
  • My advice is worth every penny you paid for it!

]]>
2694
i3wm: an excellent and aesthetically pleasing window manager https://eirenicon.org/i3wm-an-excellent-and-aesthetically-pleasing-window-manager/ Thu, 25 Mar 2021 22:31:32 +0000 https://eirenicon.org/?page_id=2624
i3wm Logo

It has been a while since I tried a new tiler. Lately, I have been having a  ‘good time’ building a vanilla i3wm desktop. In keeping with my preference of ‘less is more’  (the K.I.S.S. principle), I have made a serious attempt to use fewer, rather than more, add-ons. My preference is to use add-ons that are at once powerful, simple and not complex. Those add-ons I do use, I try to stretch to their fullest.

i3wm offers a very resource rich ecosphere. But too often available add-on tools seem to add complexity and bloat without actually accomplishing their ‘stated task objective(s)’.  Given that add-on applications tend to increase (software) bloat, I really wanted to see if I could build a nice, highly functional, pretty to my old eyes, environment that consumed about the same RAM as my dwm setup. (You will be excused if you think of this as technical elitism.)

Avoided i3wm add-ons

To begin with, I’ll list some popular i3wm add-ons I avoided. I will not discuss why I chose to avoid them, I simply did.

  • i3wm-gaps (I stuck with the vanilla variant, see below).
  • i3 blocks
  • i3status
  • j4tools
  • polybar (There is a note at the end of the post on how-to use Polybar, if you really want to.)
  • tint2
  • lemonbar/etc.
  • Additionally, I have avoided using almost everything listed on this page!

Spoiler Alert: I have discovered that  i3wm can readily be configured to run ‘like the wind’ in the same amount of RAM as dwm (from Suckless) while at the same time offering the advantage of being much easier to tweak.

Tools used to build my i3wm desktop

Here are the major components and add-ons I used (with a brief explanation as to why I elected to use them):

  • i3wm (vanilla)- I chose this i3wm variant in large part to test and discover if the base ‘model’ was as good as I hoped. I can say, it is. In fact, it is much better than I expected. There are, I believe, numerous reasons for this window manager’s excellence including:
    • i3 is well documented.
    • there is a large and active community of users, many of whom share what they have learned and developed.
    • i3wm is well architected, designed, implemented, and ‘managed’ by Michael Stapelberg and team.
    • Getting i3wm is quite easy on any arch or Debian distro; you can install it from your repos (or in some cases even obtain a community build of i3wm).
    • i3wm comes with an ‘out-of-the-box’ config file.  But to demonstrate a setup in use, I have provided the i3wm config file I use.
  • archlinux & manjaro  are the distros on which I have built my i3wm environments; because I am a fan. Arch (and its variants) is/are light, fast, and always current (too current for many). I chose two variants for my 2 laptops: Arch itself and manjaro (Arch’s  most popular variant).
  • conky (I run one conkybar and two plain ‘desktop’ conkies). If you are unfamiliar with conky, the developer defines it as follows:

    Conky is a free, light-weight system monitor for X, that displays any kind of information on your desktop. Conky is free software and runs in X on Linux and BSD. Originally a fork of Torsmo, Conky’s torsmo-based code is BSD licensed. New code in Conky has been licensed under the GPL 3.0.

    • Settings for invoking/ activating the conky are viewable in the i3wm config file (available above); detailed conkies and the conkybar are available in my i3wm conkies (the conky dotfiles).
  • rofi is used on most of my window managers as my primary menu and open window tracking tool.  To quote Mother Google:

    Rofi is a window switcher, run dialog, ssh-launcher and dmenu replacement that started as a clone of simpleswitcher, written by Sean Pringle and later expanded by Dave Davenport.

    You are able to view my rofi settings in the sxhkd dotfile below.

  • dunst is a lightweight notification daemon. It’s very customizable, is not dependent on any toolkits, and therefore fits very well into window manager setups. I use dunst on all of my desktop setups, window manager or desktop environment based. (dunstrc dotfile)
  • sxhkd– To quote the sxhkd manpage: “sxhkd is a simple X hotkey daemon with a powerful and compact configuration syntax. ”  I use this as a simple tool by which to manage and provide application keybindings. When invoked from any of my window managers (wm) this standardizes all my wm keybinds. (sxhkd dotfile)
  • nitrogen is the tool used to access and change wallpapers. I decided to stick with this low tech, simple but elegant tool because of the ways (manner) by which I prefer my wallpapers to change. I like to manually choose a wallpaper when I’m in an open/ unoccupied workspace; or when I first log in, I like to see a new, fresh scene. Nitrogen allows me to easily review and select a fresh wallpaper on an open workspace.
  • feh provides the facility to auto’magically’ load a fresh wallpaper on login. Settings for this function appear in the .xprofile dotfile provided elsewhere in this tutorial.
  • termite (terminal) is my current terminal of choice. My secondary choice is st (from suckless). I am migrating to termite though because it is more obviously (better?) supported on wayland. (termite-config)
  • i3lock-fancy & xautolock are used to manage my timed screen locking functions. i3lock provides a nice eye-candy approach to the locking screen; xautolock manages the timing and locking functions. Settings for these functions appear in the .xprofile dotfile provided elsewhere in this tutorial.
  • Nemo-Dropbox– I use this combination because the Nemo file manager is, to my mind, excellent. The Nemo-Dropbox variant also installs a full version of Dropbox painlessly on any arch derivative. FWIW: I use Dropbox extensively for my genealogy work and thus this combination File Manager with Dropbox is highly useful to me.
  • geany– is my preferred editor. There is nothing really difficult or fancy in getting this tool operational.
  • yad- (Yet Another Dialog)  I use yad to build small pop-ups for tool short-cuts, help and sundry tools. You can find write-ups of several of my yad tools elsewhere on the eirenicon site.
  • .xprofile contains all my window manager shared x settings. As with sxhkd, I use this file to make certain I have, as many as possible, identical settings across my window managers. You may access a copy of my xprofile dotfile here.
  • Color scheme- nord. I choose the Nord palette because it pleases me. You can see the results of that in all the screenshots.  You are certainly encouraged to select themes, palettes etc. that appeal to you.

Polybar

Should you wish to use polybar (I do not) here are some quick instructions on preparing the way.  Remember you need to have polybar installed on your machine.

Replace i3status bar: Once you have a Polybar setup, replace the existing i3status bar and prepare Polybar to launch on startup. Simply edit the i3 config file at $HOME/.config/i3/config and replace:

# Start i3bar to display a workspace bar (plus the system information i3status
# finds out, if available)
bar {
        status_command i3status
}

with

# Start polybar
exec_always --no-startup-id $HOME/.config/polybar/launch.sh

Next reload i3 via mod+shift+r and the i3status bar should disappear and the Polybar should appear (Polybar will display whatever Polybar config you have set up in the.config/polybar directory. Make certain that’s the one you like & want.)

Conclusion

I am, now, about three weeks into my serious use of i3wm. I can say that my experience(s) have been quite excellent. Clearly, i3wm is an excellent piece of software (engineering) not to mention an outstanding window manager.

I expect I will use i3wm daily for the immediate future.

As regular readers here know, the likelihood of me sticking with anything long term, though,  is not ‘strong’.  Along those lines, I can say I do have plans to try Sway (i3wm’s Wayland drop-in replacement) down the road.

 

]]>
2624