Skip to main content

3.1 - Essential Tasks

3.1.1 - Tune the system to the fastest server

sudo pacman-mirrors --fasttrack

3.1.2 - Update the system

sudo pacman -Syyu; sudo pacman -S --needed --noconfirm yay; yay -Syu --devel --timeupdate --needed --noconfirm;

3.1.3 - Install Linux Kernel & Headers

Manjaro Settings Manager ➜ Kernels – Click Install


3.1.3 - Clean up the system

sudo paccache -rk0; sudo pacman -Scc --noconfirm; yay -Yc --noconfirm; yay -Sc --noconfirm;

3.1.4 - Install the below programs using the terminal

Programs

sudo pacman -S --needed --noconfirm aspnet-runtime bind-tools clamav clamtk composer dnscrypt-proxy docker docker-compose dotnet-runtime dotnet-sdk electron exa fastfetch fail2ban filezilla firefox firejail firetools foliate git gufw hardinfo2 inkscape jq kate kdesvn krita lshw msbuild mpv mono musescore nano neofetch nerd-fonts net-tools npm nvm obs-studio okular pandoc php qbittorrent ufw virtualbox virtualbox-ext-vnc virtualbox-guest-iso virtualbox-guest-utils virtualbox-sdk wine xclip yarn zsh
yay -S --needed --noconfirm gitfiend sublime-text-dev unityhub

Astral's UV For Python

curl -LsSf https://astral.sh/uv/install.sh | sh

task-master-ai For AI Agents

npm install -g task-master-ai && task-master init

3.1.5 - Configure Konsole & Install starship

Step 1 - Install Zsh & Set The Default Shell:

sudo pacman -S --needed --noconfirm zsh && chsh -s /usr/bin/zsh

Step 2 - Install Nerd Fonts & Starship:

Installation:

sudo pacman -S --needed --noconfirm ttf-firacode-nerd && curl -sS https://starship.rs/install.sh | sh

Create Configuration File:

mkdir -p ~/.config && touch ~/.config/starship.toml

Step 3 - Configure Starship:

Open The File:

kate ~/.config/starship.toml

Delete Everything & Paste The Following:

"$schema" = 'https://starship.rs/config-schema.json'

format = """
[](red)\
$os\
$username\
[](bg:mauve fg:red)\
$hostname\
[](bg:peach fg:mauve)\
$directory\
[](bg:yellow fg:peach)\
$git_branch\
$git_status\
[](fg:yellow bg:green)\
$c\
$rust\
$golang\
$nodejs\
$php\
$java\
$kotlin\
$haskell\
$python\
$ruby\
$dotnet\
[](fg:green bg:sapphire)\
$conda\
$docker_context\
$kubernetes\
$terraform\
$vagrant\
$direnv\
$aws\
$gcloud\
$azure\
[](fg:sapphire bg:lavender)\
$time\
$package\
$jobs\
$battery\
[ ](fg:lavender)\
$cmd_duration\
$line_break\
$character"""

palette = 'catppuccin_mocha'

[os]
disabled = false
style = "bg:red fg:crust"

[os.symbols]
Windows = "󰍲"
Ubuntu = "󰕈"
SUSE = ""
Raspbian = "󰐿"
Mint = "󰣭"
Macos = "󰀵"
Manjaro = ""
Linux = "󰌽"
Gentoo = "󰣨"
Fedora = "󰣛"
Alpine = ""
Amazon = ""
Android = ""
Arch = "󰣇"
Artix = "󰣇"
CentOS = ""
Debian = "󰣚"
Redhat = "󱄛"
RedHatEnterprise = "󱄛"

[username]
show_always = true
style_user = "bg:red fg:crust"
style_root = "bg:red fg:crust bold"
format = '[ $user ]($style)'

[hostname]
ssh_only = false
style = "bg:mauve fg:crust"
format = '[ 󰒋 $hostname ]($style)'
disabled = false

[directory]
style = "bg:peach fg:crust"
format = "[ $path ]($style)"
truncation_length = 3
truncation_symbol = "…/"
home_symbol = "󰋜"
read_only = " 󰌾"

[directory.substitutions]
"Documents" = "󰈙"
"Downloads" = ""
"Music" = "󰝚"
"Pictures" = ""
"Developer" = "󰲋"
"Desktop" = "󰧨"
"Videos" = ""

[git_branch]
symbol = ""
style = "bg:yellow fg:crust"
format = '[ $symbol $branch ]($style)'

[git_status]
style = "bg:yellow fg:crust"
format = '[$all_status$ahead_behind ]($style)'
conflicted = "="
ahead = "⇡${count}"
behind = "⇣${count}"
diverged = "⇕⇡${ahead_count}⇣${behind_count}"
up_to_date = ""
untracked = "?${count}"
stashed = "$${count}"
modified = "!${count}"
staged = "+${count}"
renamed = "»${count}"
deleted = "✘${count}"

[nodejs]
symbol = ""
style = "bg:green fg:crust"
format = '[ $symbol ($version) ]($style)'
detect_extensions = ["js", "mjs", "cjs", "ts", "mts", "cts"]
detect_files = ["package.json", ".node-version", ".nvmrc"]
detect_folders = ["node_modules"]

[c]
symbol = ""
style = "bg:green fg:crust"
format = '[ $symbol ($version) ]($style)'
detect_extensions = ["c", "h"]
detect_files = ["Makefile", "CMakeLists.txt"]

[rust]
symbol = ""
style = "bg:green fg:crust"
format = '[ $symbol ($version) ]($style)'
detect_extensions = ["rs"]
detect_files = ["Cargo.toml"]

[golang]
symbol = ""
style = "bg:green fg:crust"
format = '[ $symbol ($version) ]($style)'
detect_extensions = ["go"]
detect_files = ["go.mod", "go.sum", "go.work"]

[php]
symbol = ""
style = "bg:green fg:crust"
format = '[ $symbol ($version) ]($style)'
detect_extensions = ["php"]
detect_files = ["composer.json", ".php-version"]

[java]
symbol = ""
style = "bg:green fg:crust"
format = '[ $symbol ($version) ]($style)'
detect_extensions = ["java", "class", "gradle", "jar", "cljs", "cljc"]
detect_files = ["pom.xml", "build.gradle.kts", "build.sbt", ".java-version", "deps.edn", "project.clj", "build.boot"]

[kotlin]
symbol = ""
style = "bg:green fg:crust"
format = '[ $symbol ($version) ]($style)'
detect_extensions = ["kt", "kts"]

[haskell]
symbol = ""
style = "bg:green fg:crust"
format = '[ $symbol ($version) ]($style)'
detect_extensions = ["hs", "cabal", "hs-boot"]
detect_files = ["stack.yaml", "cabal.project"]

[python]
symbol = ""
style = "bg:green fg:crust"
format = '[ $symbol ($version) (\($virtualenv\)) ]($style)'
pyenv_version_name = true
python_binary = ["python", "python3", "python2"]
detect_extensions = ["py"]
detect_files = [".python-version", "Pipfile", "__init__.py", "pyproject.toml", "requirements.txt", "setup.py", "tox.ini"]

[ruby]
symbol = ""
style = "bg:green fg:crust"
format = '[ $symbol ($version) ]($style)'
detect_extensions = ["rb"]
detect_files = ["Gemfile", ".ruby-version"]
detect_folders = []
detect_variables = ["RUBY_VERSION", "RBENV_VERSION"]

[dotnet]
symbol = "󰪮"
style = "bg:green fg:crust"
format = '[ $symbol ($version) ]($style)'
heuristic = true
detect_extensions = ["csproj", "fsproj", "xproj"]
detect_files = ["global.json", "project.json", "Directory.Build.props", "Directory.Build.targets", "Packages.props"]

[docker_context]
symbol = ""
style = "bg:sapphire fg:crust"
format = '[ $symbol $context ]($style)'
only_with_files = true
detect_files = ["docker-compose.yml", "docker-compose.yaml", "Dockerfile"]

[conda]
symbol = ""
style = "bg:sapphire fg:crust"
format = '[ $symbol $environment ]($style)'
ignore_base = false

[kubernetes]
symbol = "󱃾"
style = "bg:sapphire fg:crust"
format = '[ $symbol $context( \($namespace\)) ]($style)'
disabled = false
detect_files = ["k8s"]

[terraform]
symbol = "󱁢"
style = "bg:sapphire fg:crust"
format = '[ $symbol $workspace ]($style)'
detect_extensions = ["tf", "tfplan", "tfstate"]
detect_files = []
detect_folders = [".terraform"]

[vagrant]
symbol = "⍱"
style = "bg:sapphire fg:crust"
format = '[ $symbol ($version) ]($style)'
detect_files = ["Vagrantfile"]

[direnv]
symbol = "󰙅"
style = "bg:sapphire fg:crust"
format = '[ $symbol $loaded/$allowed ]($style)'
disabled = false
detect_files = [".envrc", ".env"]

[aws]
symbol = ""
style = "bg:sapphire fg:crust"
format = '[ $symbol ($profile )(\($region\)) ]($style)'
disabled = true

[gcloud]
symbol = ""
style = "bg:sapphire fg:crust"
format = '[ $symbol ($account@$domain )($project )(\($region\)) ]($style)'
disabled = true

[azure]
symbol = "󰠅"
style = "bg:sapphire fg:crust"
format = '[ $symbol ($subscription) ]($style)'
disabled = true

[time]
disabled = false
time_format = "%R"
style = "bg:lavender fg:crust"
format = '[ 󰥔 $time ]($style)'
use_12hr = false

[package]
symbol = "󰏗"
style = "bg:lavender fg:crust"
format = '[ $symbol $version ]($style)'
display_private = false
version_format = "v${raw}"

[jobs]
symbol = ""
style = "bg:lavender fg:crust"
format = '[ $symbol $number ]($style)'
number_threshold = 1
symbol_threshold = 1

[battery]
full_symbol = "󰁹"
charging_symbol = "󰂄"
discharging_symbol = "󰂃"
unknown_symbol = "󰁽"
empty_symbol = "󰂎"
format = "[ $symbol$percentage ]($style)"

[[battery.display]]
threshold = 10
style = "bg:lavender fg:red bold"

[[battery.display]]
threshold = 30
style = "bg:lavender fg:yellow"

[[battery.display]]
threshold = 100
style = "bg:lavender fg:crust"

[line_break]
disabled = false

[character]
success_symbol = '[❯](bold fg:green)'
error_symbol = '[❯](bold fg:red)'
vimcmd_symbol = '[❮](bold fg:green)'
vimcmd_replace_one_symbol = '[❮](bold fg:lavender)'
vimcmd_replace_symbol = '[❮](bold fg:lavender)'
vimcmd_visual_symbol = '[❮](bold fg:yellow)'

[cmd_duration]
min_time = 2_000
show_milliseconds = false
format = "took [$duration]($style) "
style = "fg:yellow"
show_notifications = true
min_time_to_notify = 45_000
notification_timeout = 5_000

[palettes.catppuccin_mocha]
rosewater = "#f5e0dc"
flamingo = "#f2cdcd"
pink = "#f5c2e7"
mauve = "#cba6f7"
red = "#f38ba8"
maroon = "#eba0ac"
peach = "#fab387"
yellow = "#f9e2af"
green = "#a6e3a1"
teal = "#94e2d5"
sky = "#89dceb"
sapphire = "#74c7ec"
blue = "#89b4fa"
lavender = "#b4befe"
text = "#cdd6f4"
subtext1 = "#bac2de"
subtext0 = "#a6adc8"
overlay2 = "#9399b2"
overlay1 = "#7f849c"
overlay0 = "#6c7086"
surface2 = "#585b70"
surface1 = "#45475a"
surface0 = "#313244"
base = "#1e1e2e"
mantle = "#181825"
crust = "#11111b"

Step 4 - Add catppucin Preset:

starship preset catppuccin-powerline -o ~/.config/starship.toml
  1. Go to Konsole > Settings > Edit Current Profile > Appearance tab.
  2. Select the Catppuccin Mocha scheme from the Color Schemes & Background pane.

3.1.6 – Extra Programs & Modules

megasync
rtl8852au-dkms-git
linux{VERSION}-virtualbox-guest-modules
linux{VERSION}-virtualbox-host-modules

3.1.7 – Install Snap Packages

yay -S snapd; sudo systemctl enable --now snapd.socket; sudo ln -s /var/lib/snapd/snap /snap

[Log Off then Log In again]

sudo snap install poedit;

3.1.8 – Adjust The Settings

  • Auto-Install Proprietary Drivers.
  • Install the newest Linux kernel + the latest LTS kernel.
  • Install the latest linux kernel headers using the command: yay -S linux??-headers
  • Install the language packages.
  • Change "Global Theme" to "Breeze".
  • Tune Startup and Shutdown.
  • Tune Default Applications.
  • Tune Display & Monitor > Compositor > Instant Animation Speed.
  • Tune Display & Monitor > Night Color > Constant (4200K).
  • Tune Power Management Settings.
  • Configure Digital Clock > dddd, MMMM - dd/MM/yyyy
  • Tune the HiDPI.
  • Add a “task manager” widget to the panel rather than the “icons-only” one.
  • Configure Dolphin settings.
  • Configure Sublime, VS Code, Opera, and Firefox.
  • Activate the firewall gufw and configure the profile to public.

3.1.9 - Activate the Indexer (Baloo)

  • Step 1: Check Baloo
balooctl6 enable && balooctl6 check && balooctl6 status
  • Step 2: Configure Baloo

Path:

kate ~/.config/baloofilerc

Add the following code at the bottom of the file:

[Basic Settings]
Indexing-Enabled=true

3.1.10 - Configure & Secure The DNS

  • Step 1: Install DNSCrypt
sudo pacman -S --needed --noconfirm dnscrypt-proxy
  • Step 2: Edit The DNSCrypt Configuration File

2.1 - Open The File:

kate /etc/dnscrypt-proxy/dnscrypt-proxy.toml

2.2 - Configure the file as follows:

server_names = ['cloudflare']
listen_addresses = ['127.0.0.1:53', '[::1]:53']
dnscrypt_servers = true
doh_servers = true
require_dnssec = true

Note: You need to find the lines above, uncomment them, then replace them with the above values.

  • Step 3: Enable the dnscrypt proxy service
sudo systemctl enable dnscrypt-proxy | sudo systemctl start dnscrypt-proxy
  • Step 4: Configure The Network Settings

4.1 - Open the following network configuration file

kate /etc/resolv.conf

Then delete everything you find in that file and replace it with the following:

nameserver 127.0.0.1
nameserver ::1
options edns0

4.2 - Disable systemd-resolved

sudo systemctl disable systemd-resolved && sudo systemctl stop systemd-resolved

4.3 - Configure NetworkManager

  1. Create a configuration file for NetworkManager:
sudo nano /etc/NetworkManager/conf.d/dns.conf
  1. Add the following content to ensure NetworkManager uses dnscrypt-proxy:
[main]
dns=none

4.4 - Check the network manager manually

  1. Go to the System Settings > Wi-Fi & Networking then select your connection.
  2. Go to the IPv4 tab and set the method to Automatic (Only addresses) and the DNS Servers to: 1.1.1.2,1.0.0.2
  3. Go to the IPv6 tab and set the method to Automatic (Only addresses) and the DNS Servers to: 2606:4700:4700::1112,2606:4700:4700::1002
  4. Save the settings and close the network manager.

4.5 - Restart the network manager

Restart the network manager and test the dnscrypt proxy by typing the following command:

sudo systemctl restart NetworkManager | sudo systemctl status dnscrypt-proxy

4.7 - Verify Your Connection

Open your web browser, and test the connection using the following link:

4.8 - Lock & Unlock resolv.conf

Lock resolv.conf:

sudo chattr +i /etc/resolv.conf

Unlock resolv.conf:

sudo chattr -i /etc/resolv.conf