We can't find the internet
Attempting to reconnect
Something went wrong!
Hang in there while we get back on track
2019 / 08 / 31
2023 / 04 / 07
Set up Manjaro i3
Imagine no longer having to minimize, maximize, resize or rearrange any windows, ever, again.
Thx i3wm. ❤️
If you still don’t know what i3 is, please have a look at this.
Prerequisites
Create a live USB for Manjaro Linux —instructions here.
Then install it.
Offline set up
Things to do before connecting to the network.
Create common directories:
mkdir -p ~/bin ~/encrypted ~/tmp
Make some ~/.bashrc
additions:
alias ll="ls -lhF"
alias la="ls -lahF"
export HISTCONTROL=ignoredups:ignorespace
export PATH=~/bin:$PATH
export PS1="\[\e[37;1m\]\t . \[\033[01;32m\][\u@\h\[\033[01;37m\] \W\[\033[01;32m\]]\$\[\033[00m\] "
Power settings configuration and tray icon
Run xfce4-power-manager-settings
and configure to your liking.
Don’t forget to enable the system tray icon and status notifications.
You can also open the dialog with xfce4-power-manager --customize
.
Set up UFW
Let’s enable a firewall:
sudo ufw enable
# sudo systemctl enable --now ufw.service
Set up Google Public DNS
If you don’t like using your ISP’s DNS servers, right click
the nm-applet
icon at the bottom right of the screen.
Select Edit Connections…, then Wired connection 1, then click on the little gear icon.
Click on the IPv4 Settings tab.
Then on Method pick:
Automatic (DHCP addresses only).
On DNS servers enter:
8.8.8.8, 8.8.4.4
Then click on the IPv6 Settings tab.
On Method pick:
Automatic, addresses only.
On DNS servers enter:
2001:4860:4860::8888, 2001:4860:4860::8844
Click on Save and close the Network Manager screen.
SSH key (optional)
To create a new SSH key in ~/.ssh
:
ssh-keygen -t rsa -b 4096 -C "user@some-host"
SSH service (optional)
To be able to SSH into your machine you need to enable the service for it:
sudo systemctl enable --now sshd.service
Then allow incoming SSH connections through the firewall:
sudo ufw allow SSH
Now you can ssh-copy-id
a key from somewhere else.
To harden the security uncomment and modify the
following lines in /etc/ssh/sshd_config
:
PermitRootLogin no
PasswordAuthentication no
Whenever the /etc/ssh/sshd_config
file is modified,
we need to restart the SSH service with:
sudo systemctl restart sshd.service
GRUB adjustments
Let’s tweak some stuff in our grub file.
Open it with:
sudo nano /etc/default/grub
A noisy startup
To see the terminal output when booting up, remove quiet
from the GRUB_CMDLINE_LINUX_DEFAULT
line.
Set up dm-crypt + TRIM support
When using FDE (Full Disk Encryption) with an SSD
that has TRIM support, add allow-discards
to
GRUB_CMDLINE_LINUX_DEFAULT
like this:
GRUB_CMDLINE_LINUX_DEFAULT="cryptdevice=UUID=SOME-ID:luks-SOME-ID:allow-discards root=/dev/mapper/luks-SOME-ID resume=/dev/mapper/luks-SOME-ID"
The point of insertion is just before root=...
.
Whenever the /etc/default/grub
file changes run:
sudo update-grub
Restart your system now
You should be able to use the fstrim command now:
sudo fstrim / -v
# /: 439.1 GiB (471479136256 bytes) trimmed
Let’s activate a service that’ll run it weekly for us:
sudo systemctl enable --now fstrim.timer
See the service status with:
systemctl status fstrim.service
If we want, we can run the service immediately with:
sudo systemctl start fstrim
Change login screen background
Look at the files available in /usr/share/backgrounds/
pick one
—or copy one of your own— then set the name for it in
/etc/lightdm/lightdm-gtk-greeter.conf
. Like this:
[greeter]
background = /usr/share/backgrounds/wallpapers-juhraya/Sunset-Of-The-Gods_by_Isaac-Sloan.jpg
Restore your backup
Mount back and restore backup from FDE drive.
Online set up
Things to do after connecting to the Internet.
Update and synchronize the system clock:
sudo timedatectl set-ntp true
timedatectl status
Mirror list and system update
Update the repositories mirror list:
sudo pacman-mirrors -c United_States,Canada
To update the mirror list with the fastest on a global scale:
sudo pacman-mirrors --geoip
You can tweak the ranked mirror list by:
sudo nano /etc/pacman.d/mirrorlist
Adjust to your heart’s content, then update the packages lists and download any pending updates.
sudo pacman -Syy
sudo pacman -Su
Current issues
VLC crashes when playing a video
If you have an Nvidia card and your VLC is opening and crashing
—with horrible segfaults— when trying to play a video, try adding
this to your ~/.profile
:
export LIBVA_DRIVER_NAME=nvidia
You can input that line in a terminal in case you’re launching VLC from the CLI. Otherwise, it’ll be good to go after a computer restart.
Super slow startup time for apps
If apps suddenly takes 20+ seconds to start up after latest update
you might need to remove: xdg-desktop-portal-gnome
.
Try with:
sudo pacman -Rdd xdg-desktop-portal-gnome
~/.profile is no longer sourced
Seems like after a recent upgrade ~/.profile
is no longer being sourced.
A quick and easy fix is to:
ln -s ~/.profile ~/.xprofile
Some good Firefox extensions
- Dark Reader: Dark mode for every website. Take care of your eyes, use dark theme for night and daily browsing.
- NoScript Security Suite: The best security you can get in a web browser! Allow potentially malicious web content to run only from sites you trust. Protect yourself against XSS other web security exploits.
- Privacy Badger: Automatically learns to block invisible trackers.
- Return YouTube Dislike: Returns ability to see dislike statistics on YouTube.
- uBlock Origin: Finally, an efficient wide-spectrum content blocker. Easy on CPU and memory.
Set up desktop environment
This is the list of software I usually require at one point or another:
sudo pacman -S gnote nethogs transmission-gtk nmap \
darktable gimp inkscape krita libreoffice-fresh godot \
blender calibre feh obs-studio openshot xfce4-settings \
aegisub redshift simple-scan thunar noto-fonts-emoji \
colordiff python-gobject python-xdg unzip yt-dlp \
pa-applet pavucontrol lxappearance screen \
qgis python-gdal python-owslib python-psycopg2 python-pygments \
ansible bluez bluez-utils inotify-tools jq \
i3 i3-scrot i3exit dmenu-manjaro rxvt-unicode
Run lxappearance
and pick a dark theme so Thunar
won’t dazzle you at night. :sunglasses:
If you do a lot of work during nights and get burning eyes/headaches, you should try Redshift, it makes working in low light conditions very comfortable.
Reboot into i3.
To check if pipewire is working, run the following command and check the output:
pactl info
# Server Name: PulseAudio (on PipeWire x.y.z)
Desktop notifications
If you try to use notify-send
you’ll see an error about
org.freedesktop.Notifications
missing or something.
To enable:
sudo pacman -S libnotify notification-daemon
Then add the following configuration to:
/usr/share/dbus-1/services/org.freedesktop.Notifications.service
:
[D-BUS Service]
Name=org.freedesktop.Notifications
Exec=/usr/lib/notification-daemon-1.0/notification-daemon
You can test it from a terminal with:
notify-send "Hola Desktop" "Probando probando 123"
If your notifications don’t show as expected, there might be
a conflict with org.freedesktop.Notifications
being defined in
some other files.
Find which ones with:
grep -r org.freedesktop.Notifications /usr/share/dbus-1/services/
Example output:
/usr/share/dbus-1/services/org.freedesktop.Notifications.service:Name=org.freedesktop.Notifications
/usr/share/dbus-1/services/org.xfce.xfce4-notifyd.Notifications.service:Name=org.freedesktop.Notifications
I’d replace:
Exec=/usr/lib/xfce4/notifyd/xfce4-notifyd`
With:
Exec=/usr/lib/notification-daemon-1.0/notification-daemon
In /usr/share/dbus-1/services/org.xfce.xfce4-notifyd.Notifications.service
.
Terminal configuration
I really like rxvt-unicode. It’s a very nimble terminal.
To change the default terminal —the one you get when you
press Super + Enter
— add this to your ~/.profile
:
export TERMINAL="urxvt"
To set the default terminal when right clicking in Thunar
and selecting Terminal use: xfce4-settings-manager
.
Default Applications -> Utilities -> Terminal Emulator
-> RXVT Unicode
List the fonts available in your system with:
fc-list
You might need those in case you want to use a different font in urxvt.
Dark themes for urxvt
I’ve found that dracula is a pretty good dark theme for a terminal.
Download the Xresources
file and rename it to:
~/Xresources.dracula
.
You can try solarized too, download Xresources.dark
and move to ~/Xresources.dark
.
Create a ~/.Xresources
file with this content:
!! TERMINAL CONFIG
! fake transparency
URxvt*inheritPixmap: true
URxvt*transparent: true
! URxvt*shading: 0 to 99 darkens, 101 to 200 lightens
URxvt*shading: 13
! fix recent issue with prompt appearing in the middle of the screen
!URxvt.geometry: 80x1
! blinky cursor
URxvt.cursorBlink: true
! small
!Xft.dpi: 120
! medium
!Xft.dpi: 160
! big
!Xft.dpi: 220
!! SCROLL BEHAVIOUR
! do not scroll with output
URxvt*scrollTtyOutput: false
! scroll in relation to buffer (with mouse scroll or Shift+Page Up)
URxvt*scrollWithBuffer: true
! scroll back to the bottom on keypress
URxvt*scrollTtyKeypress: true
! scrollback buffer in secondary screen
URxvt.secondaryScreen: 1
URxvt.secondaryScroll: 0
! disable the scrollbar
URxvt*scrollBar: false
! lines buffer
URxvt.saveLines: 4096
!! FONT CONFIG
! set terminal font
URxvt.font: xft:Inconsolata:size=10
!URxvt.font: xft:Fira Code:size=8
! tweak font spacing
URxvt.letterSpace: -1
!! CURSOR CONFIG
! magenta cursor color
URxvt.cursorColor: magenta
!! COLOR THEME
! load solarized dark theme
!#include "Xresources.dark"
! load dracula dark theme
#include "Xresources.dracula"
All the lines with !
at the beginning are comments.
Make changes effective with:
xrdb ~/.Xresources
Then open a new terminal with Super + Enter
and voilà. :tada:
Setting up i3
After installing i3 you can select the window manager you want to use from the login screen.
Let’s tweak its config files a lil’ bit so it looks better.
In ~/.config/i3status/config
:
# i3status configuration file.
# see "man i3status" for documentation.
# It is important that this file is edited as UTF-8.
# The following line should contain a sharp s:
# ß
# If the above line is not correctly displayed, fix your editor first!
general {
colors = true
interval = 5
color_good = "#2AA198"
color_bad = "#586E75"
color_degraded = "#DC322F"
}
order += "memory"
order += "cpu_usage"
order += "load"
order += "disk /"
# order += "disk /home"
order += "wireless _first_"
order += "ethernet _first_"
# order += "battery all"
order += "tztime local"
# order += "ipv6"
memory { format = " 🐏 %used / %total " }
cpu_usage {
format = " %usage "
}
load {
format = " %1min "
# max_threshold = 0.3
}
disk "/" {
# format = " hdd %avail "
format = " %avail "
}
ethernet _first_ {
# if you use %speed, i3status requires root privileges
format_up = " %ip %speed "
format_down = " No "
}
wireless _first_ {
# if you use %speed, i3status requires root privileges
format_up = " %ip %speed "
format_down = " No "
}
battery all {
# format = "%status %percentage %remaining %emptytime"
format = " %status %percentage"
format_down = "No battery"
last_full_capacity = true
integer_battery_capacity = true
# status_chr = ""
status_chr = "⚡"
# status_bat = "bat"
# status_bat = "☉"
status_bat = ""
# status_unk = "?"
status_unk = ""
# status_full = ""
status_full = "☻"
low_threshold = 15
threshold_type = time
}
tztime local {
# format = "%Y-%m-%d %H:%M:%S"
# format = "%H:%M:%S %Z »« %A, %d de %B de %Y"
format = " %A %Y / %m / %d %H: %M: %S "
}
At the end of ~/.config/i3/config
add:
# STUFF TODO
# Delete all references to $ws10
# Comment out the dmenu_run line:
#bindsym $mod+d exec --no-startup-id dmenu_run
# CUSTOM STUFF
# Firefox stealing my focus when saving on VSCode
# while doing Phoenix + LiveView was driving me mad
# this prevents that
focus_on_window_activation urgent
# Other values: smart urgent focus none
# Default: smart
# Start dmenu_recency (a program launcher) launch with `Super+D`
bindsym $mod+d exec --no-startup-id dmenu_recency
# Move to workspace with focused container
bindsym $mod+Ctrl+1 move container to workspace $ws1; workspace $ws1
bindsym $mod+Ctrl+2 move container to workspace $ws2; workspace $ws2
bindsym $mod+Ctrl+3 move container to workspace $ws3; workspace $ws3
bindsym $mod+Ctrl+4 move container to workspace $ws4; workspace $ws4
bindsym $mod+Ctrl+5 move container to workspace $ws5; workspace $ws5
bindsym $mod+Ctrl+6 move container to workspace $ws6; workspace $ws6
bindsym $mod+Ctrl+7 move container to workspace $ws7; workspace $ws7
bindsym $mod+Ctrl+8 move container to workspace $ws8; workspace $ws8
bindsym $mod+Ctrl+9 move container to workspace $ws9; workspace $ws9
# Set shut down, restart and locking features
bindsym $mod+0 mode "$mode_system"
set $mode_system (l)ock, (e)xit, switch_(u)ser, (s)uspend, (h)ibernate, (r)eboot, (Shift+s)hutdown
mode "$mode_system" {
bindsym l exec --no-startup-id i3exit lock, mode "default"
bindsym s exec --no-startup-id i3exit suspend, mode "default"
bindsym u exec --no-startup-id i3exit switch_user, mode "default"
bindsym e exec --no-startup-id i3exit logout, mode "default"
bindsym h exec --no-startup-id i3exit hibernate, mode "default"
bindsym r exec --no-startup-id i3exit reboot, mode "default"
bindsym Shift+s exec --no-startup-id i3exit shutdown, mode "default"
# exit system mode: "Enter" or "Escape"
bindsym Return mode "default"
bindsym Escape mode "default"
}
# Open specific applications in floating mode
for_window [class="Pavucontrol"] floating enable border normal
# Configure border style <normal|1pixel|pixel xx|none|pixel>
default_border pixel 1
default_floating_border normal
# change borders
bindsym $mod+u border none
bindsym $mod+y border pixel 1
bindsym $mod+n border normal
# Start Applications
#bindsym Print exec --no-startup-id i3-scrot
#bindsym $mod+Print --release exec --no-startup-id i3-scrot -w
#bindsym $mod+Ctrl+Print --release exec --no-startup-id i3-scrot -w -d 5
#bindsym $mod+Shift+Print --release exec --no-startup-id i3-scrot -s
bindsym Insert exec --no-startup-id i3-scrot
bindsym $mod+Insert --release exec --no-startup-id i3-scrot -w
bindsym $mod+Ctrl+Insert --release exec --no-startup-id i3-scrot -w -d 5
bindsym $mod+Shift+Insert --release exec --no-startup-id i3-scrot -s
# Set up workspace default output
workspace 1 output HDMI-1
workspace 2 output HDMI-1
workspace 7 output HDMI-0
workspace 8 output HDMI-0
# To get the right values for your monitors setup, run `xrandr`.
# Two monitor setup
#exec --no-startup-id xrandr --output DP-2 --primary --mode 3440x1440 --pos 0x560 --rotate normal --output DP-0 --mode 2560x1440 --pos 3440x0 --rotate left --output DVI-D-0 --off --output HDMI-0 --off --output HDMI-1 --off
#exec --no-startup-id xrandr --output DP-2 --primary --mode 3840x2160 --pos 0x200 --rotate normal --output DP-0 --mode 2560x1440 --pos 3840x0 --rotate left --scale 1.4x1.4 --output DVI-D-0 --off --output HDMI-0 --off --output HDMI-1 --off --output DP-1 --off
exec --no-startup-id xrandr --output HDMI-1 --primary --mode 3840x2160 --pos 0x840 --rotate normal --output HDMI-0 --mode 3840x2160 --pos 3840x0 --rotate right --output DVI-D-0 --off --output DP-0 --off --output DP-1 --off --output DP-2 --off --output DP-3 --off
# One monitor setup
#exec --no-startup-id xrandr --output HDMI-0 --primary --mode 2560x1440 --pos 0x0 --rotate normal --output HDMI-1 --off --output DVI-D-0 --off --output DP-1 --off --output DP-2 --off
# Wallpapers
exec_always --no-startup-id feh --recursive --randomize --bg-fill ~/.wallpapers
# Bind volume related keys
bindsym $mod+Shift+Prior exec --no-startup-id amixer -D pulse sset Master 2%+
bindsym $mod+Shift+Next exec --no-startup-id amixer -D pulse sset Master 2%-
bindsym $mod+Shift+Delete exec --no-startup-id amixer -D pulse sset Master toggle
# Desktop stuff
#exec --no-startup-id /usr/lib/geoclue-2.0/demos/agent
#exec --no-startup-id redshift-gtk
exec --no-startup-id redshift -x && redshift -O 4500
exec --no-startup-id blueman-applet
exec --no-startup-id pa-applet
exec --no-startup-id xfce4-power-manager
# NO LONGER USED
#bindsym XF86AudioMute exec --no-startup-id amixer -D pulse sset Master toggle
# Bind clementine player related keys
#bindsym $mod+Prior exec --no-startup-id clementine --prev
#bindsym $mod+Next exec --no-startup-id clementine --next
#bindsym $mod+Home exec --no-startup-id clementine --play
#bindsym $mod+End exec --no-startup-id clementine --stop
#bindsym $mod+Delete exec --no-startup-id clementine --play-pause
dmenu config files
You can see and modify cached entries for dmenu_recency
in: ~/.cache/dmenu-recent/recent
.
And reset a previous entry run configuration by deleting it
from the appropriate file in: ~/.config/dmenu-recent/
.
Configure Calibre styling
Let’s tweak Calibre a little bit now.
Open any book, then right click anywhere to make the main menu appear.
Go into Preferences -> Styles and paste this in the box:
body {
line-height: 2;
}
Go into Preferences -> Colors and pick: Sepia dark or
System.
Also set Override all book colors to In dark mode.
For adding visual cues about book progress:
Go into Preferences -> Headers and footers
For the Header:
- Left: Top level section
- Middle: Current section
For the Footer:
- Left: Progress
- Middle: Pages in chapter
- Right: Position in book
To increase the font size a bit:
Go into Font size and click on the desired font size (20px).
To specify the number of pages per screen:
Go into Preferences -> Page layout
Change the values in Portrait and/or Landscape
Dark mode
Click the Preferences button in the main Calibre interface.
Select Look & feel, and then pick Dark in Color palette (needs restart).
Network printing with CUPS
To enable CUPS:
sudo pacman -S cups
sudo systemctl enable --now cups.service
Access http://localhost:631
and add your printer.
For me using the driverless option works just fine —then driverless, cups-filters
Software development tools
Let’s install some useful stuff every software developer worth their salt should have. ;)
Set up z
With Git installed by default, let’s bring z
to easily navigate
directories on the CLI:
git clone https://github.com/rupa/z ~/z
echo ". ~/z/z.sh" >> ~/.bashrc
exec $SHELL
Its usage is super simple, after cd
ing into various directories:
cd ~/development/web/project1
cd ~/development/mobile/client33
You can now cd
into those directories from anywhere on the CLI with:
z project1
z client33
Tech stack
- Basic Git configuration
- Install VSCode in Linux
- Install Elixir in Linux
- Install Node.js in Linux
- Install PostgreSQL in Linux
- Install Google Chrome in Linux
GRASS for QGIS
To have v.generalize
available on QGIS:
cd ~/tmp
git clone https://aur.archlinux.org/grass.git
cd grass/
makepkg -si
Misc stuff
Random stuff needed from time to time…
Configure yt-dlp to download mp4 by default
Create a ~/.config/yt-dlp.conf
file, and put this content in it:
# Download mp4 version of videos, if available
-f "bestvideo[ext=mp4]+bestaudio[ext=mp4]/best[ext=mp4]/best"
Enable ray tracing for Nvidia cards
If you have an RTX card and want to enable ray tracing in your games, install the following dependencies:
sudo pacman -S nvidia-utils nvidia-settings
Add these env vars to your .bashrc
or .profile
:
export VKD3D_CONFIG=dxr11,dxr
export PROTON_ENABLE_NVAPI=1
export PROTON_ENABLE_NGX_UPDATER=1
You can use the following commands to get info about your card and current driver:
nvidia-smi
# and/or
nvidia-settings
VirtualBox
You’ll need to enable CPU Virtualization in your BIOS.
sudo pacman -S virtualbox virtualbox-guest-iso
You’ll be presented with some options:
:: There are 11 providers available for VIRTUALBOX-HOST-MODULES:
:: Repository extra
1) linux316-virtualbox-host-modules 2) linux414-virtualbox-host-modules 3) linux419-virtualbox-host-modules
4) linux44-virtualbox-host-modules 5) linux49-virtualbox-host-modules 6) linux51-virtualbox-host-modules
7) linux52-virtualbox-host-modules 8) linux53-virtualbox-host-modules
:: Repository community
9) linux419-rt-virtualbox-host-modules 10) linux52-rt-virtualbox-host-modules 11) virtualbox-host-dkms
Enter a number (default=1):
Pick the host modules that match your kernel version.
You can find out which kernel version you have with:
uname -a
Once you are done with the installation get into your VM and you can adjust the screen size with:
xrandr --output Virtual1 --mode 1920x1200
Using VirtualBox in i3 can be daunting, but it works really well.
You can resize floating dialogs by pressing the right mouse button and
dragging from a corner.
That’s all for now! :tada: