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:
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:
enabling ssh server:
sudo sed -i '/^#\?PasswordAuthentication/c\PasswordAuthentication no' /etc/ssh/sshd_config && \
sudo systemctl restart sshd && \
systemctl enable --now sshd
Installations
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
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
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"
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:
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:
creating smb credentials:
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:
Eurkeys
- Tweaks (
gnome-tweakspackage) > Keyboard & Mouse > enable 'Show Extended Input Sources' or, on the terminal:
- Reboot
- 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
- Clipboard Indicator
- Settings > Shortcuts > Toggle the menu: super+v
- AppIndicator and KStatusNotifierItem Support
- User Themes
- Dash to Dock
- Settings > Appearance > Show overview on startup: disable
Themes
GTK
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:
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:
Zen Browser
- Docs on how to apply themes
- Catppuccin