Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

I'm a big fan of i3 (tiling window manager for Linux).  I'm also a big fan of Arch and the user-friendly Manjaro Linux (which is based on Arch).  Put these together (i3 + Manjaro) and you get the pure awesomeness that is get Manjaro i3 (Community Edition): a very nice distro with a well implemented i3wm environment (by default).

Tiling window managers do have a fairly steep learning curve, but dang, in terms of efficiency and managing many windows and tasks at once, you just can't beat a tiling window manager (for me anyway).

...

If you have an SSD, I'd suggest enabling the fstrim.timer service for TRIM:

...

languagebash

.

See Enable periodic TRIM - including on a LUKS partition.

...

Trackpad setup

With i3 my hands hardly leave the keyboard and almost never reach for the mouse.  As such, I generally use my touchpad.  My preference is to disable mouse tapping, use 'natural scrolling' and disable 'horizontal scrolling'.  Although you can set all these settings using Manjaro i3's bmenu (mod+ctrl+b, and choose 'Hardware and drivers' → 'Configure touchpad'), these settings will not survive a reboot.

...

Now let's backup and then remove the current libinput touchpad conf file (which in my case was 30-touchpad.conf).

Code Block
languagebash
sudo mv 30-touchpad.conf 30-touchpad.conf.backup

...

Note you'll need to reboot or restart x for X for the changes to take place.

...

Volume control

On one of my machines there was a very annoying "beep" sound that played whenever I did stuff (like hitting backspace too much in the terminal).  This got annoying pretty quickly.I couldn't find a setting to disable this.  After some research it appears to be an X11 session property which can be disabled by running the following from terminal:all my laptops, I've been able to control volume with the standard volume up/down/mute keys (e.g. fn+f1 etc.) by installing volumeicon with

Code Block
languagebash
xsetsudo pacman -b

You can make this stick after reboot by editing /etc/xprofile or ~/.xprofile (user specific setting) and adding the above command to either file.  If either file does not exist just create one.

Screen tearing (with Compton)

On one my laptops (Thinkpad e480) there was noticable screen tearing with compton enabled.  To eliminate the screen tearing found there were several tweaks needed to the ~/.config/compton.conf configuration file.  Below are the changes needed (note you'll need to replace the original settings below with these ones):

Code Block
backend = "glx";
...
vsync = "opengl-swc";

Fixing QT5 applications (like VLC) UI scaling (if icons, fonts are too big)

On my Mi3 setup, I noticed that QT5 applications like VLC had huge icons and fonts were all messed up.  Now, I don't have a HiDPI screen (screen resolution is 1920x1080) but still had this issue.  Here's what ended up fixing this for me:

Add the following lines to your .profile:

Code Block
export QT_QPA_PLATFORMTHEME="qt5ct"
export QT_AUTO_SCREEN_SCALE_FACTOR=0 
export QT_SCALE_FACTOR=1 

Restart then open up (install if not already installed) qt5ct (run from terminal).  Change settings and font to size 10 of some look that you like.  Here's settings that I quite like:

...

Column
width310px

Image Removed

Column

Image Removed

S volumeicon

Once installed you'll need to add the following to your i3 config:

Code Block
languagebash
exec --no-startup-id volumeicon

Disable "beep" sound in terminal application

On one of my machines there was a very annoying "beep" sound that played whenever I did stuff (like hitting backspace too much in the terminal).  This got annoying pretty quickly.

I couldn't find a setting to disable this.  After some research it appears to be an X11 session property which can be disabled by running the following from terminal:

Code Block
languagebash
xset -b

You can make this stick after reboot by editing /etc/xprofile or ~/.xprofile (user specific setting) and adding the above command to either file.  If either file does not exist just create one.

Fixing Screen tearing (with Picom)

Info

On Arch the Compton composite manager was recently renamed to Picom.  This article has been updated to reflect this. 


Info

This requires the picom package to be installed (and active).  If you don't have this installed, do:

Code Block
languagebash
sudo pacman -S picom

To activate it from i3wm, add this line to your i3 config:

Code Block
exec --no-startup-id picom -b


On one my laptops (Thinkpad e480) there was noticable screen tearing with picom enabled.  To eliminate the screen tearing found there were several tweaks needed to the ~/.config/picom.conf configuration file.  Below are the changes needed (note you'll need to replace the original settings below with these ones):

Code Block
backend = "glx";
...
vsync = "opengl-swc";

Fixing QT5 applications (like VLC) UI scaling (if icons, fonts are too big)

On my Mi3 setup, I noticed that QT5 applications like VLC had huge icons and fonts were all messed up.  Now, I don't have a HiDPI screen (screen resolution is 1920x1080) but still had this issue.  Here's what ended up fixing this for me:

Add the following lines to your .profile:

Code Block
export QT_QPA_PLATFORMTHEME="qt5ct"
export QT_AUTO_SCREEN_SCALE_FACTOR=0 
export QT_SCALE_FACTOR=1 

Restart then open up (install if not already installed) qt5ct (run from terminal).  Change settings and font to size 10 of some look that you like.  Here's settings that I quite like:

Section


Column
width310px

Image Added


Column

Image Added


Hibernate (suspend to disk)

I sometimes prefer to hibernate my system, but unfortunately on one of my machines hibernation wasn't working.

See Use a swap file and enable hibernation on Arch Linux - including on a LUKS root partition.

Stop 2018 Razer Blade 15 waking right after sleep

One of my (nicer) machines (Razer Blade 15) wouldn't sleep, or at least stay asleep (kind of like my kids...).  It would immediately wake after trying to sleep.  Apparently, it's caused by the USB 3.0 chip used on the machine.

You can fix this by running (see Arch wiki here):

Code Block
languagebash
echo XHC | sudo tee /proc/acpi/wakeup

However, this needs to be run after every startup.  Let's use systemd to run this as a service.

First, create a service file by:

Code Block
language

Hibernate (suspend to disk)

I sometimes prefer to hibernate my system, but unfortunately on my default Mi3 install hibernation wasn't working.  This may be because in this instance I didn't use a separate swap partition and instead opted to simply use a swap file for swap needs.

First just check that you can hibernate (mod+0, followed by h).  If you can, then there's no need to do the below.  If you can't, continue (below).

Let's first enable hibernation.  To setup hibernate we're going to install the hibernator package and run it as root:

Code Block
sudo pacman -S hibernator
sudo hibernator

Once the hibernator script has run you should have the requirements for hibernate to work.

If you're using a swap file (as opposed to a swap partition) then we'll need to do a bit more work.  I assume there that you're using grub as you're boot loader.

We're going to be editing /etc/default/grub.  Note that there is scope here to mess things up royally.  So, let's backup our current grub file to be safe(r)

Code Block
languagebash
sudo cp /etc/default/grub /etc/default/grub.backup

So, before we can edit our grub, we need a few pieces of information:

  1. device name of parition where have swap file;
  2. physical offset of /swapfile (which is my swap file).

For (1), we can simply run df and find the partition where our swap file is (which will usually be the same partition as Mi3 is installed to).  In my case, running dfoutputs:

Image Removed

The partition where I have Mi3 installed is /dev/sda3.

For (2), we can run sudo sudo filefrag -v /swapfile.  For my system doing so outputs:

Image Removed

The value we are after is the ext 0 physical offset as shown in the image (red rectangle). 

With these pieces of information let's now edit our grub

Code Block
languagebash
sudo nano /etc/systemd/default/grub

We want to find the lines starting with GRUB_CMDLINE_LINUX (which was line 5 in my case) and add the following with the bits of information previously outlined:

Code Block
GRUB_CMDLINE_LINUX="resume=/dev/sda3 resume_offset=249856"

Now, we can save our changes and then run

Code Block
languagebash
sudo update-grub

Reboot and hibernation should hopefully now be working.  GIve it a go.

Stop Razer Blade 15 waking right after sleep

One of my (nicer) machines (Razer Blade 15) wouldn't sleep, or at least stay asleep (kind of like my kids...).  It would immediately wake after trying to sleep.  Apparently, it's caused by the USB 3.0 chip used on the machine.

You can fix this by running (see Arch wiki here):

system/xhc-sleep.service

and paste the following:

Code Block
languagebash
[Unit]
Description=Workaround for razer blade 15 waking after sleeping (USB 3.0 causing).

[Service]
ExecStart=echo XHC |
Code Block
languagebash
echo XHC | sudo tee /proc/acpi/wakeup

However, this needs to be run after every startup.  Let's use systemd to run this as a service.



[Install]
WantedBy=multi-user.target

Now, let's enable and start the serviceFirst, create a service file by:

Code Block
languagebash
sudo systemctl nano /etc/systemd/system/enable xhc-sleep.service
sudo systemctl start xhc-sleep.service


Info

and paste the following:

Code Block
languagebash
[Unit]
Description=Workaround for razer blade 15 waking after sleeping (USB 3.0 causing).

[Service]
ExecStart=echo XHC | tee /proc/acpi/wakeup

[Install]
WantedBy=multi-user.target

Now, let's enable and start the service:

Code Block
languagebash
sudo systemctl enable xhc-sleep.service
sudo systemctl start xhc-sleep.service

Set default applications

We can generally set default (or preferred applications) in Mi3 by using the morec_menu (mod+z).  Navigate with mod+z → settings → preferred applications.  However, in my case, even setting my preferred browser to chrome (or chromium) didn't stick.

What did work though was modifying the ~/.config/mimeapps.list and replacing the default userapp-Pale Moon.desktop reference with google-chrome.desktop.

Alternatively, you can set the default http and https xdg-mime applications with:

Code Block
xdg-mime default <browser>.desktop x-scheme-handler/http
xdg-mime default <browser>.desktop x-scheme-handler/https

where you can replace <browser> with you installed browser (e.g. pale-moon, firefox, chromium etc.).

Unlocking gnome-keyring on login

On many DEs that use gnome-keyring to securely store credentials (like usernames and passwords) they will automatically unlock the the keyring when logging in.  On i3... not so much.

To get i3 to successfully unlock your keyring on login, you'll need to use the method outlined here.

Edit /etc/pam.d/login and add the following two lines:

Code Block
auth       optional     pam_gnome_keyring.so
session    optional     pam_gnome_keyring.so auto_start

After a restart (or logout/login) your gnome keyring should be unlocked.

Ricing (theming) and modifying i3

One of the beauties with i3 (and Linux in general) is that you can you modify your environment to suit how you like to work.  This is particularly true with i3 where you can modify not only how it looks but also how it behaves. 

i3 makes this quite easy by providing a single config file where most changes can be made (~/.i3/config). 

Note, even with this, after first starting up and then (the first) sleep - my machine wakes up immediately (unless I close my lid, which makes it stay asleep).  After that first "wake-up" it will now sleep properly (i.e. not wakeup automatically).

Stop 2019 Razer Blade 15 infinite suspend loop

On my 2019 Razer Blade 15, it would wake from suspend correctly on the first suspend after a boot.  Thereafter when it woke it would, after about 10 seconds, sleep again ad infinitum.

The ArchWiki gives the workaround for this issue in the form of a kernel parameter:

append the following kernel parameter to the GRUB_CMDLINE_LINUX_DEFAULT line in /etc/default/grub:

Code Block
button.lid_init_state=open

After appending if should look something like line 4 in:

Code Block
linenumberstrue
GRUB_DEFAULT=saved
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR='Manjaro'
GRUB_CMDLINE_LINUX_DEFAULT="quiet resume=UUID=f68ed3c5-da10-4288-890f-b83d8763e85e nvidia-drm.modeset=1 button.lid_init_state=open"
GRUB_CMDLINE_LINUX=""

# If you want to enable the save default function, uncomment the following
# line, and set GRUB_DEFAULT to saved.
GRUB_SAVEDEFAULT=true
...

Save the changes and then run:

Code Block
languagebash
sudo update-grub

Set default applications

We can generally set default (or preferred applications) in Mi3 by using the morec_menu (mod+z).  Navigate with mod+z → settings → preferred applications.  However, in my case, even setting my preferred browser to chrome (or chromium) didn't stick.

What did work though was modifying the ~/.config/mimeapps.list and replacing the default userapp-Pale Moon.desktop reference with google-chrome.desktop.

Alternatively, you can set the default http and https xdg-mime applications with:

Code Block
xdg-mime default <browser>.desktop x-scheme-handler/http
xdg-mime default <browser>.desktop x-scheme-handler/https

where you can replace <browser> with you installed browser (e.g. pale-moon, firefox, chromium etc.).

Unlocking gnome-keyring on login

On many DEs that use gnome-keyring to securely store credentials (like usernames and passwords) they will automatically unlock the the keyring when logging in.  On i3... not so much.

To get i3 to successfully unlock your keyring on login, you'll need to use the method outlined here.

Edit /etc/pam.d/login and add the following two lines:

Code Block
auth       optional     pam_gnome_keyring.so
session    optional     pam_gnome_keyring.so auto_start

After a restart (or logout/login) your gnome keyring should be unlocked.

Ricing (theming) and modifying i3

One of the beauties with i3 (and Linux in general) is that you can you modify your environment to suit how you like to work.  This is particularly true with i3 where you can modify not only how it looks but also how it behaves.

i3 makes this quite easy by providing a single config file where most changes can be made (~/.i3/config). 

Below is a copy of my config file that I usually implement to make the interface more appealing (to Below is a copy of my config file that I usually implement to make the interface more appealing (to me).  Note the visual changes in my config are chosen to go along with the numix gtk theme (install with sudo pacman -S numix-gtk-theme).  It looks like this (screenshot running chrome, watching some netflix, and working in urxvt):


My config file:

Note that this config file contains other modifications that I prefer in my i3 setup, such as:

  • conky config files (see following section)
  • pamac-manager now starts as normal (not float);
  • using kupfer instead of dmenu (sudo pacman -S kupfer);
  • also using rofi for some windows manager - mainly listing all windows in all desktops (sudo pacman -S rofi);
  • using py3status instead of i3status (sudo pacman -S py3status);
  • mod+F12 suspends and locks the screen, and mod+Home locks the screen;
  • using 'uiop[' keys for various apps (like launching pamac, chromium, keeweb, putty, pcmanfm);
  • added resizing windows without needing resize mode (mod+alt+Left shrinks width by 20ppt, mod+alt+shift+Left shrinks width by 10ppt, etc.) - and disabled resizing mode.  Can also use vim style keys here;
  • changes to container and splitting shortcuts; 
  • mod+alt+z, mod+alt+x increases/decreases current window transparency needs transset-df (sudo pacman -S transset-df);
  • sticky window toggle set to (mod+alt+s);
  • added "netflix" and "spotify" modes (mod+alt+n, mod+alt+m);
  • added some "special" window management shortcuts (mod+z, mod+shift+z, mod+x, mod+shift+x): these are some of my favourites and essentially combines two windows (that are next to each other) into a separate container.

Note you don't have to be using manjaro-i3 to use this config.  If you're using stock Manjaro (or Arch) please ensure you have at least the following packages installed: i3-wm (or i3-gaps if you want dem' gaps), i3exit, i3status, py3status, and picom.  You can install all these packages with:

Code Block
languagebash
sudo pacman -S i3-wm i3exit i3status py3status picom

My config file:

Note that this config file contains other modifications that I prefer in my i3 setup, such as:

  • define mod_next at top of file: used throughout config, e.g.  mod=Mod1 (i.e. super), mod_next=Mod4 (i.e. alt)
  • conky config files (see following section)
  • also using rofi (sudo pacman -S rofi) for both window listing (mod+Tab) and as a launcher (mod+d);
  • using py3status instead of i3status (sudo pacman -S py3status);
  • change split h/v keys to mod+z|x (alternatively mod+mod_next+q|e)
  • using mod_next+u|i|o|p|[ keys for various apps (like launching pamac, chromium, bitwarden, putty, nautilus);
  • added resizing windows without needing resize mode and disabled resizing mode.  Can also use vim style keys here;
  • changes to container and splitting shortcuts; 
  • mod+mod_next+z, mod+mod+next+x increases/decreases current window transparency needs transset-df (sudo pacman -S transset-df);
  • sticky window toggle set to (mod+ctrl+s);
  • added "netflix" and "spotify" window settings (mod+mod_next+n, mod+mod_next+m);
  • added "redshift" mode (mod_next+r) to help my old ninja eyes...
Warning

I have several bindsyms that use integrated bash scripts (i.e. not external but explicitly defined in my

Warning

I have several bindsyms that use integrated bash scripts (i.e. not external but explicitly defined in my i3 config) which depend on xdotool. Please ensure you have xdotool installed, e.g. do "pacman -S xdotool"

View Git file
pathi3/config
repository-id3
titleContents of my ~/.i3/config
branchrefs/remotes/origin/master
linenumberstrue
collapsetrue

Ricing Conky (numix theme)

I've also riced my Conky setup somewhat.  Most of these changes to are to match my theme and current shortcuts setup.  I have two conky configs: one for showing various system stats (like cpu, RAM, swap etc.) and one showing several keyboard shortcuts.  See below for screenshot of my current conky setup:

Image Removed

Let's start with the conky config files:

View Git file
pathconky/conky_numix
repository-id3
titleConky (numix) theme for system stats (top right in image above)
branchrefs/remotes/origin/master
collapsetrue


Info

You'll note that I (perhaps peculiarly) use mod=Mod1 (super key) and mod_next=Mod4 (alt) instead of just using a single key mod key.  I thought I would briefly explain the reason why:

At work I'm in a rather peculiar environment where I usually have to work on a base windows environment (which I really only use for email) and then remote desktop into a variety of Linux desktops and dev environments (either running i3 or no gui at all).  As such, Super+L locks the host windows machine (which behaviour I am not permitted to change).

Hence, by necessity, I've moved to alt as the default mod key (since I'm a die-hard vim key fan), and now use the super key for mostly launching applications etc.  On my home machines I'm under no such restrictions (and just run straight Linux environments).  I did try to get used to two different configs (one at work and one at home) but my muscle memory didn't like that so I settled on the current config which I'm now used to.

View Git file
pathconky/conky_shortcuts_numixi3/config
repository-id3
titleConky shortcuts conf (see lower left in image above)Contents of my ~/.i3/config
branchrefs/remotes/origin/master
linenumberstrue
collapsetrue

My main i3 config file (see preceding section) expects these conky config files to be in ~/.config (you can place them anywhere really, you'll just need to update your i3 config file to point to them).

Ricing the (standard) i3 status bar

I usually also make modifications to the i3 status bar colours for the system stats.  User specific i3 status bar config is configured int he ~/.i3status.conf file.  Here's is mine, with several changes including:

  • default font colour change;
  • disk format change (showing decimal %used / %total);
  • added wlan ip address and ethernet ip address (these are hidden if not connected);
  • added battery %remaining time (next to %percentage)

View Git file
pathi3status/.i3status.conf.standard
repository-id3
titleContents of my ~/.i3status.conf (for use with standard i3status)
branchrefs/remotes/origin/master
linenumberstrue
collapsetrue

Using (and ricing) py3status instead of i3status

py3status is a python wrapper for i3status that provides a lot more features and extendability.  py3status gives more much control and provides some very cool modules.  First, you'll need to install py3status with:

Code Block
languagebash
sudo pacman -S py3status

Once, installed you'll need to modify your ~/.i3/config file and replace the status_command i3status directive with

Code Block
status_command py3status -c ~/.i3status.conf

You'll notice that we use the same .i3status.conf file (which with py3status we can define some extra modules etc.). 

Before you can use my py3status config file, you'll need to install font-awesome fonts (4.7) - I had issues with version 5, but works well with v4:

Code Block
languagebash
yaourt -S ttf-font-awesome-4

Below is my config file, which looks like this:

Image Removed

and includes p3status modules for:

  • spotify;
  • current network rate (download / upload);
  • public ip address information (isp, city, country);
  • currently connected network (wifi ssid and local ip address);
  • battery (with font awesome icons);
  • countdown timer;

DPI Scaling with .Xresource and Xft.dpi

You may want/need to change your DPI with i3.  With my setup(s), I've never had success setting DPI with xrandr --dpi (which is often suggested).  Instead, we can set the DPI directly by editing (or creating) ~/.Xresources.

You might need to experiment  to find a DPI value that works for you.  Create or edit .Xresources your preferred DPI by adding the following (in this example I've set my DPI to 88 dots per inch):

Code Block
title~/.Xresources
Xft.dpi: 88
Override Chromium / Chrome (DPI) scaling

Recently Chromium appears to be respecting the Xft.dpi setting (which previously it didn't).  My preferred DPI was a bit hard to see now in Chromium.  You can override this behaviour  by set setting the --force-device-scale-factor flag.

Create (or edit) the file ~/.config/chromium-flags.conf and add the following (with your preferred scaling factor):

Info

If you use Chrome credit (or edit) ~/config.chrome-flags.conf instead. 


Code Block
title~/.config/chromium-flags.conf
--force-device-scale-factor=0.96

Restart your browser windows and it should now no longer be using the Xft.dpi setting.

Ricing Conky (numix theme)

I've also riced my Conky setup somewhat.  Most of these changes to are to match my theme and current shortcuts setup.  I have two conky configs: one for showing various system stats (like cpu, RAM, swap etc.) and one showing several keyboard shortcuts.  See below for screenshot of my current conky setup:

Image Added

Let's start with the conky config files:

View Git file
pathconky/conky
repository-id3
titleConky (numix) theme for system stats (top right in image above
View Git file
pathi3status/.i3status.conf.py3status
repository-id3
titleContents of my ~/.i3status.conf (for use with py3status)
branchrefs/remotes/origin/masterlinenumberstrue
collapsetrue

...

Along with the main i3 config file, there is also a config file dmenu (main application launcher in Mi3).  The appearance (colours etc.) are configured in the ~/.dmenurc file.  Here is my .dmenurc config file with colours that match my main i3 config:

View Git file
pathdmenu/.dmenurcconky/conky_shortcuts
repository-id3
titleContents of my ~/.dmenurcConky shortcuts conf (see lower left in image above)
branchrefs/remotes/origin/masterlinenumberstrue
collapsetrue

Ricing rofi (to match my theming)

If you use rofi, as I do (see my .i3/config above), you can also change it's theme.  There are a very nice selection of themes included with rofi.  You can change theme by running the following from your terminal

Code Block
languagebash
rofi-theme-selector

Theme files can be found in usr/share/rofi/themes.

I really liked the lb.rasi theme (which is included with rofi).  However, it didn't quite match the colours of my current theme.  I made a few subtle changes to this theme (only changed colours to match what I like).  Below is the resulting file, which should be placed in the rofi theme folder (see above).

My main i3 config file (see preceding section) expects these conky config files to be in ~/.config (you can place them anywhere really, you'll just need to update your i3 config file to point to them).

Ricing the (standard) i3 status bar

I usually also make modifications to the i3 status bar colours for the system stats.  User specific i3 status bar config is configured int he ~/.i3status.conf file.  Here's is mine, with several changes including:

  • default font colour change;
  • disk format change (showing decimal %used / %total);
  • added wlan ip address and ethernet ip address (these are hidden if not connected);
  • added battery %remaining time (next to %percentage)

View Git file
pathi3status/.i3status.conf.standard
repository
View Git file
pathrofi/themes/lb-numix.rasi
repository-id3
titleContents of my /usr/share/rofi/themes/lb-numix.rasi~/.i3status.conf (for use with standard i3status)
branchrefs/remotes/origin/master
linenumberstrue
collapsetrue

...

Using (

...

and ricing) py3status instead of i3status

py3status is a python wrapper for i3status that provides a lot more features and extendability.  py3status gives more much control and provides some very cool modules.  First, you'll need to install py3status with:

Code Block
languagebash
sudo pacman -S py3status

Once, installed you'll need to modify your ~/.i3/config file and replace the status_command i3status directive with

Code Block
status_command py3status -c ~/.i3status.conf

You'll notice that we use the same .i3status.conf file (which with py3status we can define some extra modules etc.). 

Before you can use my py3status config file, you'll need to install font-awesome fonts (4.7) - I had issues with version 5, but works well with v4:

Code Block
languagebash
yay -S ttf-font-awesome-4

Below is my config file, which looks like this:

Image Added

and includes p3status modules for:

  • spotify;
  • current network rate (download / upload);
  • public ip address information (isp, city, country);
  • currently connected network (wifi ssid and local ip address);
  • battery (with font awesome icons);
  • countdown timer;

View Git file
pathi3status/.i3status.conf.py3status
repository-id3
titleContents of my ~/.i3status.conf (for use with py3status)
branchrefs/remotes/origin/master
linenumberstrue
collapsetrue

Ricing dmenu

Along with the main i3 config file, there is also a config file dmenu (main application launcher in Mi3).  The appearance (colours etc.) are configured in the ~/.dmenurc file.  Here is my .dmenurc config file with colours that match my main i3 config:

View Git file
pathdmenu/.dmenurc
repository-id3
titleContents of my ~/.dmenurc
branchrefs/remotes/origin/master
linenumberstrue
collapsetrue

Ricing rofi (to match my theming)

If you use rofi, as I do (see my .i3/config above), you can also change it's theme.  There are a very nice selection of themes included with rofi.  You can change theme by running the following from your terminal

Code Block
languagebash
rofi-theme-selector

Theme files can be found in usr/share/rofi/themes.

I really liked the lb.rasi theme (which is included with rofi).  However, it didn't quite match the colours of my current theme.  I made a few subtle changes to this theme (only changed colours to match what I like).  Below is the resulting file, which should be placed in the rofi theme folder (see above).

View Git file
pathrofi/themes/lb-custom.rasi
repository-id3
titleContents of my /usr/share/rofi/themes/lb-numix.rasi
branchrefs/remotes/origin/master
linenumberstrue
collapsetrue

Ricing notifications (dunst)

You can also modify the look of the system notifications.  Configure colours etc. in ~/.config/dunst/dunstrc.  Here's a few small modifications to my dunstrc file (to match my theme):

View Git file
pathdunst/dunstrc
repository-id3
titleModifications to ~/.config/dunst/dunstrc
branchrefs/remotes/origin/master
linenumberstrue
collapsetrue

Warning

I've disabled the default dunst shortcuts as they interfered with some of my i3 config bindsyms.

Ricing alttab

Although I do like the way i3 approaches window switching - I do miss the speed of alt-tabbing for switching between the last focused application and the current application (and doing so often).  For this I use the very nice alttab.  It's in the AUR so once you've enabled AUR (and installed something like yay) you can do:

Code Block
languagebash
sudo yay -S alttab-git

You can customise the look of alttab by changing the background, foreground and frame colour.  Below is the settings that match my numix theme.  Add the following to your ~/.i3/config:

Code Block
exec --no-startup-id alttab -fg "#d58681" -bg "#4a4a4a" -frame "#eb564d" -t 128x150 -i 127x64

I also like to add a bit of transparency to my alttab.  You can do this by adding a rule for alttab to the opacity-rule array definition as seen in my picom.conf:

View Git file
pathpicom/picom.conf
repository-id3
branchrefs/remotes/origin/master
linenumberstrue
collapsetrue

Resulting alttab settings that match my theme:

Image Added

Dim non-active windows instead of applying transparency (and implement per window dim enable/disable shortcuts)

I prefer visual identification of non-active windows by dimming rather than transparency.  By default, Manjaro i3 uses a non-active window transparency as a way to help visually identify active/non-active windows.  This works quite well, but I find this adds to the "visual noise" in a busy i3 session.

The following approach replaces the default inactive window transparency with picom dim rules.  We'll also cover how modify dimming on a per window basis via a keyboard shortcuts (occasionally want to disable the default dimming on a window by window basis).

First, let's disable picom's inactive-opacity setting.  Your opacity settings in picom.conf might look something like this:

Code Block
inactive-opacity = 1;
active-opacity = 1;
frame-opacity = 1;
inactive-opacity-override = false;
opacity-rule = [
    "80:class_g = 'copyq'",
    "90:name = 'alttab'",
    # no opacity on sticky windows
    "99:_NET_WM_STATE@:32a *= '_NET_WM_STATE_STICKY'"
];

We want to make sure that inactive-opacity is set to 1 (or disabled) and active-opacity is also set to 1.  I've also kept a few opacity=rule rules that I want to still apply to several window types.  Note the last rule above - it simply disables transparency for sticky windows (another i3 concept which allows to keep a window showing/pinned on all workspaces).

Now, let's setup default dim settings.  We'll do so by adding the following settings:

Code Block
# Dim inactive windows. (0.0 - 1.0)
inactive-dim = 0.2;
...
focus-exclude = [
  "ANTIDIM_FLAG@:8c",
  "_NET_WM_STATE@:32a *= '_NET_WM_STATE_STICKY'"
];

Note the focus-exclude rule array.  This defines rules for NOT applying dim on window types. 

Notice the rule ANTIDIM_FLAG@:8c, we'll use this to NOT applying dimming by window property (which we'll apply to selected windows via an i3 keyboard shortcut).

We can apply arbitrary window properties on selected windows.  Picom will respect these rules (by property).  The ANTIDIM_FLAG@:8c rules above (in the focus-exclude array is an example of this).  To apply/remove this window property on a selected window add the following bindsyms to your i3.conf:

Code Block
# window dimming enable or disable (uses xdotool and xprop to set a anti-dim flag, which picom recognises in focus-exclude array) 
bindsym $mod+Mod1+a exec xprop -id $(xdotool getactivewindow) -f ANTIDIM_FLAG 8c -set ANTIDIM_FLAG 1; exec notify-send 'anti-dim set on window'
bindsym $mod+Mod1+d exec xprop -id $(xdotool getactivewindow) -remove ANTIDIM_FLAG; exec notify-send 'dim set on window'


Info

For the above shortcuts to work, you'll need to install xdotool and xprop.

The above shortcuts will enable the ANTIDIM property for the currently selected window (which will disable dimming on said window) or disable the ANTIDIM property (which will then respect the default dim settings defined above).

For reference here is my ~/.config/picom.conf

You can also modify the look of the system notifications.  Configure colours etc. in ~/.config/dunst/dunstrc.  Here's a few small modifications to my dunstrc file (to match my theme):

View Git file
pathdunst/dunstrc
repository-id3
titleModifications to ~/.config/dunst/dunstrc
branchrefs/remotes/origin/master
linenumberstrue
collapsetrue

Warning

I've disabled the default dunst shortcuts as they interfered with some of my i3 config bindsyms.

Ricing alttab

Although I do like the way i3 approaches window switching - I do miss the speed of alt-tabbing for switching between the last focused application and the current application (and doing so often).  For this I use the very nice alttab.  It's in the AUR so once you've enabled AUR (and installed something like yay) you can do:

Code Block
languagebash
sudo yay -S alttab-git

You can customise the look of alttab by changing the background, foreground and frame colour.  Below is the settings that match my numix theme.  Add the following to your ~/.i3/config:

Code Block
exec --no-startup-id alttab -fg "#d58681" -bg "#4a4a4a" -frame "#eb564d" -t 128x150 -i 127x64

I also like to add a bit of transparency to my alttab.  You can do this by adding a rule for alttab to the opacity-rule array definition as seen in my compton.conf:

View Git file
pathcomptonpicom/comptonpicom.conf
repository-id3
title~/.config/picom.conf
branchrefs/remotes/origin/master
linenumberstrue
collapsetrue

Resulting alttab settings that match my theme:

Image Removed

Enabling per window transparency with transset-df (and keybind changing it)

...

Although you can modify transparencies etc. by editing ~/.config/comptonpicom.conf, there's no functionality to increase or decrease transparencies 'on the fly' and for specific windows only.

...

Code Block
languagebash
# window transparency adjustment (and alias to restart comptonpicom)
bindsym $mod+Mod1+z exec transset-df -a --min 0.25 --dec 0.25
bindsym $mod+Mod1+x exec transset-df -a --inc 0.25
bindsym $mod+Mod1+c exec --no-startup-id comptonpicom -b

These shortcuts will increase or decrease transparency of the currently selected window by +/-25%.  You might notice I also have a shortcut (mod+alt+c) for comptonpicom, which will reset start/reset comptonpicom.  You'll see why next.

I prefer my sticky windows to be opaque by default, and using the above I can then change them to suit. To change the default window transparency used for sticky windows you'll need to modify your compton picom config (~/.config/comptonpicom.conf) and make sure it contains 

...

This works to my liking.  However, I've found that when I want to change my sticky window back to opaque, my default inactive-opacity setting for compton kicks picom kicks in (in other words, when I select something else my sticky window is not quite opaque).  Resetting compton picom with mod+alt+c fixes this and reapplies my default transparency setting for sticky windows.

For reference here is my ~/.config/comptonpicom.conf

View Git file
pathcomptonpicom/comptonpicom.conf
repository-id3
title~/.config/comptonpicom.conf
branchrefs/remotes/origin/master
linenumberstrue
collapsetrue

...

My "special" window combiner bindsymsbindsyms

Info

Note I no longer use these.  I use of i3 is constantly evolving and I find myself using more of a "master-stack" or a "stack-stack" approach to window management.  As such, I haven't used the below approach much lately so have deprecated them (removed them) in my config.  These might work well for you though so give them a try!

I found that much of my time was spend combining two adjacent windows into a single container.  That is, say I have four application windows all in a tabbed container, like so:

...

Scratchpad specific applications and bind their showing/hiding to a key shortcut

Warning

The below is a deprecated approach to showing/hiding applications on the scratchpad.  I've moved to using more i3 native approaches

The i3 scratchpad is great holding area for application windows that you might want to keep hide from all workspaces until you need them.  I often use the scratchpad for applications like my email client (which I don't want to see until an email arrives etc.) or for an on-demand terminal (not really a drop-down terminal but similar use case), or for an application that I regularly want to (quickly) popup, retrieve information and then have it get out of the way just as quickly (like a password manager for example).

...

Save i3 layouts with i3-layout-manager

Info

Although still in my i3 config file, this is now disabled (commented out) as it is still experimental with several issuesThis is now removed from my current config.  Was great but I no longer use it (plus was a bit experimental and had a few issues I ran into).  Would still recommend though if you like the idea of predefining i3 layouts.

i3 natively supports saving and loading specific window layouts with the i3-save-tree, however the implementation is not really "user ready" in the sense that you can't use it as is to easily save and load different layouts.

...