Skip to content

Arch Linux

Initial requirements

sudo pacman -S --needed --noconfirm git base-devel curl wget zsh bat eza micro fzf imagemagick xclip samba ntfs-3g less && \
git clone https://aur.archlinux.org/yay.git && \
cd yay && makepkg -si && \
cd .. && rm -rf yay && \
yay -Y --gendb && \
yay -Syu --devel && \
yay -Y --devel --save

Dotfiles and zsh

cloning dotfiles and starting zsh:

git clone https://github.com/nataliafonseca/dotfiles.git ~/.dot && \
echo ". ~/.dot/zsh/.zshenv" > ~/.zshenv && exec zsh

setting zsh as default:

chsh -s $(which zsh) # might require a reboot for terminal emulators to adjust

SSH configuration

creating keys:

ssh-keygen -t ed25519 # or retrieve id_ed25519 and id_ed25519.pub and place in $HOME/.ssh/
cat ~/.ssh/id_ed25519.pub # add to github if not there already

to get from 1password:

# needs to be authenticated! `op account add` + `eval $(op signin)` 
op read op://Personal/<1p_item_title>/private_key | tr -dc '[:alnum:]+/=\n -' > ~/.ssh/id_ed25519 && \
op read op://Personal/<1p_item_title>/public_key | tr -dc '[:alnum:]+/=\n -' > ~/.ssh/id_ed25519.pub

getting authorized_keys and fixing any permissions:

curl -o ~/.ssh/authorized_keys --create-dirs https://github.com/nataliafonseca.keys && \
(echo -n '* '; cat ~/.ssh/id_ed25519.pub) > ~/.ssh/allowed_signers && \
sudo chown -R $USER:$USER ~/.ssh && \
sudo chmod 700 ~/.ssh && \
sudo chmod 600 ~/.ssh/authorized_keys && \
sudo chmod 600 ~/.ssh/allowed_signers && \
sudo chmod 600 ~/.ssh/id_ed25519 && \
sudo chmod 644 ~/.ssh/id_ed25519.pub

adding key to agent:

eval "$(ssh-agent -s)"
ssh-add

enabling ssh server:

sudo sed -i '/^#\?PasswordAuthentication/c\PasswordAuthentication no' /etc/ssh/sshd_config && \
sudo systemctl restart sshd && \
systemctl enable --now sshd

Installations

official repos
sudo pacman -S --needed --noconfirm github-cli direnv nvm docker docker-compose uv flatpak firefox fastfetch gnome-tweaks gnome-browser-connector gtk-engine-murrine dnsutils jq refind unzip
AUR
yay -S --needed --noconfirm visual-studio-code-bin snipaste claude-code opcode-bin gemini-cli-bin openai-codex-bin sublime-text-4 1password 1password-cli upnote-appimage telegram-desktop-bin zapzap
nerd fonts
tag=$(curl -fsSL https://api.github.com/repos/ryanoasis/nerd-fonts/releases/latest | jq -r '.tag_name') && \
install-font "https://github.com/ryanoasis/nerd-fonts/releases/download/${tag}/JetBrainsMono.zip" && \
install-font "https://github.com/ryanoasis/nerd-fonts/releases/download/${tag}/IBMPlexMono.zip"
node
nvm install 'lts/*' && \
nvm use 'lts/*' && \
nvm alias default 'lts/*' && \
corepack enable
docker
sudo systemctl enable --now docker && \
sudo usermod -aG docker $USER && \
newgrp docker
flatpaks
sudo flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo && \
sudo flatpak install flathub com.microsoft.Edge # try aur's microsoft-edge-stable-bin first, if it doesn't break with the theme, use that

Mounting external drives

find the partitions uuids:

lsblk -f

add at the end of /etc/fstab:

# Optional mounts that won't block boot if unavailable
UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX   /hdd    ext4    nofail,user 0 0
UUID=XXXXXXXXXXXXXXXX   /data   ntfs-3g nofail,user,permissions 0 0

to mount immediately:

sudo systemctl daemon-reload && \
sudo mkdir -p /hdd /data && \
sudo chown $USER:$USER /hdd /data && \
sudo mount /hdd && \
sudo mount /data

SMB share

creating smb.conf from template:

sudo cp $DOTDIR/docs/templates/smb.conf /etc/samba/smb.conf

creating smb credentials:

sudo smbpasswd -a $USER

enabling the services and allowing if firewall ufw:

sudo systemctl enable --now smbd nmbd && \
sudo ufw allow samba # if this errors cause no ufw that's fine

configuring services to wait until internet is on:

sudo mkdir -p /etc/systemd/system/smbd.service.d && \
sudo mkdir -p /etc/systemd/system/nmbd.service.d && \
sudo cp $DOTDIR/docs/templates/smb-network-wait.conf /etc/systemd/system/smbd.service.d/network-wait.conf && \
sudo cp $DOTDIR/docs/templates/nmb-network-wait.conf /etc/systemd/system/nmbd.service.d/network-wait.conf && \
sudo systemctl daemon-reload

Gnome

Dual monitor login fix

with the correct setup configured:

sudo cp ~/.config/monitors.xml ~gdm/.config/monitors.xml && \
sudo chown gdm:gdm ~gdm/.config/monitors.xml

if this results in cp: cannot create regular file '~gdm/.config/': No such file or directory or chown: invalid user: ‘gdm:gdm’, that means gdm is version 49 or above, in which case the correct command is:

sudo cp ~/.config/monitors.xml /etc/xdg/monitors.xml

Eurkeys

  1. Tweaks (gnome-tweaks package) > Keyboard & Mouse > enable 'Show Extended Input Sources' or, on the terminal:
gsettings set org.gnome.desktop.input-sources show-all-sources true
  1. Reboot
  2. Settings > Keyboard > Input Sources > Add Input Source > English > EurKEY (US)

Other settings to remember

  • Settings > Power > Power Button Behavior: Power Off
  • Settings > Power > Automatic suspend: disable
  • Settings > Multitasking > Hot Corner: disable
  • Settings > Privacy & Security > Automatic Screen Lock: disable
  • Tweaks > Windows: enable maximize and minimize and move to the left;
  • Tweaks > Mouse & Touchpad > Middle Click Paste: disable;
  • Tweaks > Startup Applications: add Snipaste;

Shortcuts

Settings > Keyboard > View and Customize Shortcuts:

  • System > Show the notification list: disable (super+v will be used for clipboard history)
  • Custom Shortcuts > Snipaste snip - F1
  • Custom Shortcuts > Snipaste paste - F4

Extensions

Themes

GTK

Catppuccin

degit https://github.com/Fausto-Korpsvart/Catppuccin-GTK-Theme && \
cd Catppuccin-GTK-Theme/themes && \
./install.sh -l -c dark -t lavender --tweaks frappe && \
cd ... && rm -rf Catppuccin-GTK-Theme

applying on flatpaks:

sudo flatpak override --filesystem=$HOME/.themes && \
sudo flatpak override --filesystem=$HOME/.icons && \
sudo flatpak override --filesystem=xdg-config/gtk-4.0 && \
flatpak override --user --filesystem=xdg-config/gtk-4.0

Icons

Terminal

installing catppuccin:

curl -L https://raw.githubusercontent.com/catppuccin/gnome-terminal/v1.0.0/install.py | python3 -

changing the font (useful since ui doesn't allow font weight selection):

for profile in $(dconf list /org/gnome/terminal/legacy/profiles:/ | grep -E '^:.*/$' | tr -d ':/'); do
  dconf write /org/gnome/terminal/legacy/profiles:/:$profile/font "'JetBrainsMono Nerd Font ExtraLight 13'"
done

adding some padding:

mkdir -p ~/.config/gtk-3.0 && echo 'vte-terminal { padding: 4px; }' > ~/.config/gtk-3.0/gtk.css

Zen Browser