Ngz91 / dotfiles

Configuration files & Installation guide for Arch

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

🐧 Dot Files & guide 🐧

πŸ™ My personal Arch linux configuration files πŸ™

Preview:

Details:

Class Tool Section
OS Arch 🍣 Go to Section
WM i3 πŸŽ‡ Go to Section
Terminal Kitty 🐱 Go to Section
Shell Zsh & Oh-my-zsh 🌌 Go to Section
AUR Helper Yay 🍨 Go to Section
Fonts Nerd Fonts ✏️ Go to Section
Status Bar Polybar βš’οΈ Go to Section
Launcher Rofi πŸš€ Go to Section
Compositor Picom β˜„οΈ Go to Section
File Manager Ranger πŸ“ Go to Section
Document Reader Zathura πŸ“” Go to Section
IDE Neovim / Helix πŸ’» Go to Section
Music App Spotify & Spicetify 🎼 Go to Section

Installation Guide

Install Arch by following the installation steps in the Arch linux official installation guide or use the ArchInstall package to automate the installation process. IMPORTANT: If you are installing Arch as a dual boot don't follow this method. Follow one of these videos instead:

To install Arch using the ArchInstall package first check your internet connection by running:

ping -c 5 https://archlinux.org/

And then run this command:

python -m archinstall --script guided

You'll see a promp giving you some options similar to this:

Select the options that better work for you, but in my case and configuration these are the options:

  • Archinstall language: English
  • Mirrors: worldwide or us
  • Keyboard layout: us
  • Disk configuration: use best-effort..., ext4
  • Disk encryption pwd: encryption password None
  • Bootloader: Grub
  • Swap: True
  • Hostname: Name of the host machine
  • Root pwd: rootpassword
  • User account: Add name and password give superroot to user
  • Profile: desktop -> i3 -> AMD/ATI (open-source)
  • Audio: pipewire
  • Kernel: linux
  • Additional packages: firefox, vim, thunar
  • Network: Copy ISO network conf...
  • Timezone: your timezone
  • Automatic time synch: true
  • Additional repos: multilib

After checking that the options are correct select Install. Go for a coffee β˜• and wait.

After finishing the installation process, the script will ask you if you'd like to chroot into the newly created installation. Select no and reboot the machine by running:

reboot

IMPORTANT: If you installed Arch in a virtual machine remember to remove the ISO file before booting into the machine again.

Boot into Arch and you should be greeted by the login manager.

Congrats, Arch is now installed πŸŽ‰

⬅️Go back to details

Configuring Arch

After booting into session you'll see a black screen and a bar at the bottom of the screen, all in the incorrect resolution. i3 will then ask if you want a configuration to be created for you, select Yes and this will create a configuration file at .config/i3 named config where you can add your keybindings, exec commands, etc. If you want to familiarize yourself with the i3WM I'd recommend reading their user guide.

To fix the resolution open your terminal with Mod+enter and run this command (The Mod key is most likely your Windows key):

xrandr

Note: In case xrandr is not installed, run this command sudo pacman -Sy xorg-xrandr

This will give you a list with different screens and their resolutions, select the one that you wish to use and run this command:

xrandr --output *screen name here* --mode "resolution here"

Next, run this command to sync and upgrade all Arch packages:

sudo pacman -Syu

Also, if you wish to change your wallpaper run these commands:

sudo pacman -S feh
feh --bg-scale $HOME/Downloads/some-example-image.jpg

To make this changes permanent navigate to .config/i3 on your terminal and open in vim the config file that's there. Then add these lines to the end of the file. (If you don't know how to use vim use this cheat sheet)

exec --no-startup-id xrandr --output *screen-name* --mode "resolution here"
exec --no-startup-id feh --bg-scale $HOME/Downloads/some-example-image.jpg

Also, you might want to assign a keybind for opening a firefox window. To do so, paste this line into your configuration (the location does not matter but it's a good idea to put all your keybindings after the kill focused window keybind, that way it's easier to spot them in the file).

bindsym $mod+Shift+b exec firefox --new-window

Now save the file and exit vim.

(:q+enter to exit vim)

Test these changes by rebooting into Arch

reboot

Some packages to install

If you are on a VM install guest additions

sudo pacman -S virtualbox-guest-utils

Test the audio. In case it's laggy or choppy make sure these packages are installed

sudo pacman -S pipewire pipewire-{alsa,jack,media-session,pulse}

If you are on a VM follow this guide. In my case I only needed to add these lines to etc/modprobe.d/sound.conf

options snd-hda-intel vid=8086 pid=8ca0 snoop=0
options snd-intel8x0 ac97_clock=48000

You might also wanna install Alsamixer to control your audio devices and settings.

sudo pacman -S alsamixer

Open it and check if auto mute is enabled. Check here for instructions.

Also, install these packages, they will be needed.

sudo pacman -S ripgrep fzf xsel nodejs npm lazygit git python-pip thunar-archive-plugin zip stylua

To render japanese characters install these packages:

sudo pacman -S noto-fonts-cjk noto-fonts-emoji noto-fonts

If you want to set a gif wallpaper follow the instructions in this guide.

And add these two lines to your i3 configuration file:

exec --no-startup-id killall back4.sh 
exec --no-startup-id sh back4.sh 0.025 ~/path/to/your-gif-file.gif

⬅️Go back to details

Yay installation

Yay is an AUR (Arch User Repository) helper written in Go. We will use it to install some packages that are not in the official package repo or when a newer version of the program is available in the community repo. Visit the official github repository for the installation steps or run this command:

pacman -S --needed git base-devel && git clone https://aur.archlinux.org/yay.git && cd yay && makepkg -si

Warning: AUR helpers are not supported by Arch Linux.

⬅️Go back to details

Kitty installation

Kitty is a GPU based terminal emulator. Install it by running:

sudo pacman -S kitty

Then change the i3 configuration to open Kitty instead of the default terminal by adding this line to the i3 config file

bindsym $mod+Return exec kitty

You can change Kitty's theme in .config/kitty/kitty.conf. Add my configuration or use the one you like. In this repo there are some themes that might be of your interest.

⬅️Go back to details

Nerd Fonts installation

Nerd fonts add glyphs and icons to your terminal, this will allow, for example, Neovim to render icons. Visit their page to learn more about them. We will need to install some of them, you can install and use any one that you like. I'll use the ones I use in my configuration as an example installation procedure.

First make a .fonts folder in the same directory where .config is, then download JetBrains Mono, Products Sans and all Material Design Icons except the ones that end with .codepoints. Unpack them and place them into ~/.fonts or ~/.local/share/fonts. Then run this command for your system to detect the new fonts:

fc-cache -fv

In case there are no unpackers configured for thunar, install these packages:

sudo pacman -S thunar-archive-plugin xarchiver p7zip unrar

⬅️Go back to details

Zsh & Oh-my-zsh

Zsh is a Unix Shell, we will use it in combination with Oh-my-zsh to customize the terminal. Install Zsh by running:

sudo pacman -S zsh zsh-completions

Change your default shell by running

chsh -s /bin/zsh

And finally install Oh-my-zsh by running

sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

It will ask you if you want to make Zsh your default shell, select yes. Exit your terminal, launch it again and you will see the terminal in a different style.

To change the theme of Oh-my-zsh change this line in ~/.zshrc

ZSH_THEME="robbyrussel"

And load it using:

source .zshrc

You can find all available Oh-my-zsh themes here.

Note: There are other themes that are not in the aforementioned repository that can be installed. Their installation will not be explained in this guide.

⬅️Go back to details

Picom

Picom is a window compositor, in our case we will use it to make some of our windows transparent. Install it by running:

sudo pacman -S picom

Start Picom by running picom in your terminal, you will see that the terminal is now transparent, but the same goes for all other windows that you have open. We need to fix this.

To modify Picom behavior create or edit the picom.conf file at .config folder, in this case the config file does not need to be in a folder. If you want transparency to be applied to a specific window open your terminal and type:

xprop

Click on the window that you want to apply the transparency and look for WM_CLASS(STRING). Then add this to your configuration. (I'll use Kitty for this example)

opacity-rule = [
    "85:class_g = 'kitty' && focused",
    "85:class_g = 'kitty' && !focused",
];

This tells Picom to follow these opacity rules for the specific program that's running. Now, the same rules can be applied if you don't want the window to have any transparency, for example, I don't want Firefox to have any opacity. To achieve this add this line to the opacity-rule in the conf file.

"100:class_g = 'firefox'",

As a side note, Picom uses backends for rendering, some of them handle features that others can't. The default one is xrender, but you can try others at your own risk. Here is a manual explaining other options available for configuration. In case that changing the Picom backend freezes your computer, open a console by pressing Ctrl+Alt+F2, log in, change the backend line and reboot your system.

To run Picom on start up add this line to your i3 config file:

exec --no-startup-id picom

If you are having problems with your Picom configuration copy my conf file and from there edit what you want and what not.

⬅️Go back to details

Rofi

Rofi is an App launcher, with it you can easily search and launch installed apps. It also works for browsing files and commands. To install it run:

sudo pacman -S rofi

Then run it using rofi --show drun. Here you can read about other options to run rofi.

Create a rofi folder in your config and add the files from iamverysimp1e's config, this will give you a start for you to customize your own Rofi theme.

There are other preconfigured and easy to customize Rofi themes in this repo.

To assign Rofi a keybinding add this to your i3 config file:

exec --no-startup-id sh rofi -show drun

⬅️Go back to details

Polybar

Polybar is a highly customizable status bar. Install it by running:

sudo pacman -S polybar

Then create a polybar folder in .config to hold your configuration. Polybar configuration deserves a guide on it's own but you can set a basic one following these steps. First copy my Polybar config files into your folder. In the same folder, grand permissions to these files:

chmod +x launch.sh
chmod u+x scripts/diskusage
chmod u+x scripts/memory
chmod u+x scripts/network

And add this to your i3 config file:

exec --no-startup-id sh ~/.config/polybar/launch.sh

Another option to easily set a Polybar theme is by installing the themes at polybar-themes in your system. All the installation and configuration steps are in the repository.

Polybar is pretty well documented, you can read the documentation in their repository if you have any doubt about how to use it or how to customize it.

⬅️Go back to details

Ranger and Zathura

Ranger is a console file manager with VI key bindings. Zathura is a highly customizable and functional document viewer. One great benefit of using these two programs is how little memory they use.

To install both programs run:

sudo pacman -S zathura ranger

Then create their respective folders inside .config. You can copy my Ranger configuration, it will give you something to start with. Same for the Zathura configuration.

Some notes. If you want Ranger to preview the images in Kitty, then you'll need to install Pillow by using this command:

pip install pillow

If there's a warning telling you that "The script x is installed in '/home/myusername/.local/bin' which is not on PATH" then add it. For Zsh add export PATH=$PATH:/home/username/.local/bin at the end of .zshrc.

Also if you want Zathura to show the pdf page with it's original colors set recolor to false in the configuration file. set recolor "false"

In case zathura is not opening any pdf or djvu file, install these packages:

sudo pacman -S zathura-pdf-mupdf zathura-djvu

You can assign Ranger a keybind similar to this

bindsym $mod+Shift+v exec kitty -e ranger

⬅️Go back to details

Spotify & Spicetify

Install Spotify using the package in the official Arch repo (Do not use the Snap package since Spicetify is not gonna work with it)

sudo pacman -S spotify-launcher

Open it and log in. Check your audio. Close it and install spicetify-cli, we will use it to customize Spotify and add extensions. Follow their guide for installation or install it by running:

curl -fsSL https://raw.githubusercontent.com/spicetify/spicetify-cli/master/install.sh | sh

Check that spicetify is installed by running spicetify --help.

Then run the spicetify command. This will create a config-xpui.ini file where you'll configure the Spicetify variables.

Navigate to the Spicetify folder in your .config folder and open config-xpui.ini. Here you will modify spotify_path and prefs_path. Their official guide tells you how to find both paths, but in my case they look like this:

spotify_path  = /home/ngz91/.local/share/spotify-launcher/install/usr/share/spotify/
prefs_path    = /home/ngz91/.config/spotify/prefs

After this, you can change your own theme using this command (I'd recommend doing this inside the spicetify Themes folder):

spicetify config current_theme "Path_to_your_configuration"

To add extensions, create an Extensions folder inside the Spicetify folder and use this command:

spicetify config extensions "Extension_name"

Run spicetify backup apply to create a backup and then run spicetify apply.

Visit the Unixporn forum to see some awesome spicetify themes.

You can use this kaybind to launch spotify:

bindsym $mod+Shift+m exec spotify-launcher

⬅️Go back to details

Neovim

Neovim is a terminal based text editor, it's extremely powerful and customizable, and very hard to configure if you don't know what you are doing. I recommend using a neovim premade configuration before making your own, or you can configure one yourself by following Tatsuya Matsuyama's video, that way you can get a starting minimal configuration and also get an understanding of how Neovim configurations work.

Some good premade configurations are:

These are all community maintained and very stable.

The main language used for configuring neovim is Lua. You can familiarize yourself with the language by watching this video, but by knowing the basics you can make your own configuration.

A Neovim configuration folder structure looks something like this:

β”œβ”€β”€ init.lua
β”œβ”€β”€ lua
β”‚   └── user
β”‚       β”œβ”€β”€ plugin1.lua
β”‚       β”œβ”€β”€ plugin2.lua
β”‚       β”œβ”€β”€ plugin3.lua
        ...
β”‚       β”œβ”€β”€ lsp
β”‚       β”‚   β”œβ”€β”€ configs.lua
β”‚       β”‚   β”œβ”€β”€ handlers.lua
β”‚       β”‚   β”œβ”€β”€ init.lua
β”‚       β”‚   β”œβ”€β”€ null-ls.lua
β”‚       β”‚   └── settings
β”‚       β”‚       β”œβ”€β”€ lsp1Settings.lua
β”‚       β”‚       β”œβ”€β”€ lsp2Settings.lua
                ...
└── plugin
    └── packer_compiled.lua

init.lua is the first file Neovim loads, here you can require other files with the plugins configurations or scripts that you wanna run. lua/user is where your Lua scripts and plugins configurations are, you can require them in init.lua by using the require function require("user.plugin1"). There's also a lsp(language server protocol) folder where all lsp configuration lies, here you can configure your language servers and lsp based plugins like lsp-saga, illuminate, etc.

NOTE: This is not a standard, there are various ways this folder can be structured, but this one is very easy to understand.

To install plugins there are various plugins managers, but the two most popular are Packer.nvim and lazy.nvim. If you decide for Packer, there's an AUR package available, this will take care of the configuration for you:

yay -S nvim-packer-git

Follow their guide on how to add plugins to your configuration. But before adding plugins you might want to disable some plugins that come with Neovim and are not used, these are:

"netrw",
"netrwPlugin",
"netrwSettings",
"netrwFileHandlers",
"gzip",
"zip",
"zipPlugin",
"tar",
"tarPlugin",
"getscript",
"getscriptPlugin",
"vimball",
"vimballPlugin",
"2html_plugin",
"logipat",
"rrhelper",
"spellfile_plugin",
"matchit",

This guide is one of the most complete guides for configuring Neovim, if you have any doubt about how to configure a plugin or any other type of configuration, the answer, most likely, can be found there. Also, visit the Neovim reddit forum if you have any doubt, it's a very open and welcoming community.

⬅️Go back to details

Some notes and resources

Congrats, by now you should have a riced Arch linux environment. Configuring Linux is very time consuming and takes a lot of patience to deal with errors, but in the end it's very satisfying to see the end product and knowing that with less than 2gb of ram you can have a browser, Spotify and Neovim open instead of having 4gb+ ram usage while idle.

I hope this guide helped you in your configuration process. If you have found anything that's not clear or wrong, please let me know, I'll be updating this guide every now and then.

Notes

You might want to have gaps in between the windows. To do so, add these lines to your i3 config file and change it based on your preference:

gaps inner 10
gaps outer 0
smart_gaps on

Also, to eliminate the topbar created by i3 add this too:

default_border pixel 2
default_floating_border pixel 2

Remember to use Git to manage your .config folder, that way, if you mess up something, you can revert to a working commit.

Resources

Here are some resources that you might find useful for continuing your ricing journey.

⬅️Back to the top

About

Configuration files & Installation guide for Arch


Languages

Language:Lua 71.9%Language:CSS 13.2%Language:Python 12.9%Language:JavaScript 1.0%Language:Shell 1.0%