localectl list-keymaps
loadkeys fr
# setfont ter-132b
kdbrate -d 500 -r 10
ip link
iwctl
device list
station NAMEDEVICE scan
station NAMEDEVICE get-networks
station NAMEDEVICE connect STATION
# Save partition table
sfdisk -d /dev/sda > sda.dump
# Manage partitions https://wiki.archlinux.org/title/Installation_guide#Example_layouts
fdisk /dev/sda
# Or with better UI
cfdisk /dev/sda
# Order the partitions
sfdisk -r /dev/sda
# Optional, check partition type
file -s /dev/sdaN
# Format partitions to the good format (+wipe data)
# For ext4
mkfs.ext4 /dev/sdaN
# For SWAP
mkswap /dev/sdaN
# For EFI (Only if created during partition !)
mkfs.fat -F 32 /dev/sdaN
# Check mount point, partitions ...
fdisk -l /dev/sda
lsblk -f
lsblk -o NAME,FSTYPE,LABEL,SIZE,MOUNTPOINT
# Mount the partition in /mnt (because we are not in the real arch for now)
mount /dev/sda5 /mnt
# Activate SWAP partition
swapon /dev/sda6
mkdir -p /mnt/boot/efi
# FOR SINGLE LINUX
# mount /dev/sda4 /mnt/boot/efi
# FOR DUAL BOOT WINDOWS (Set only the windows version)
mount /dev/sda1 /mnt/boot/efi
# Create pacman instance + Install base package
pacstrap -K /mnt base linux linux-firmware
# save paritions setup into new system
genfstab -U /mnt >> /mnt/etc/fstab
# Go into / Interact with the new system
arch-chroot /mnt
# Set local timezone
ln -sf /usr/share/zoneinfo/Europe/Paris /etc/localtime
# set UTC time sync
timedatectl set-ntp true
# Update the hardware clock
hwclock --systohc
# locale config
vi /etc/locale.conf
# Inside the file, uncomment the line "#en_US.UTF-8 UTF-8"
locale-gen
echo LANG=en_US.UTF-8 > /etc/locale.conf
# Hard set a keyboard layout
echo KEYMAP=fr > /etc/vconsole.conf
# Set pc network name
echo arch-portable > /etc/hostname
# Setup pacman
pacman-key --init
pacman-key --populate archlinux
pacman -Syu
# Install essentials packages
pacman -S install vim iwd sudo wget curl git tree
# Add sudo group for the admin (sudo command available to them)
groupadd sudo
# Set root password
passwd
# Add user and its password and groups (sudo group for root acces command)
useradd -m -G sudo,wheel,audio,video,input,power,network,rfkill,users,lp,scanner -s /bin/bash USERNAME
passwd USERNAME
# (If you want to modify groups for existing users) (-a to append and not replace all)
# usermod -a -G GROUP1,GROUP2 USERNAME
Config Grub
# In /etc/default/grub
# Set the grub timeout
GRUB_TIMEOUT=60
pacman -S grub efibootmgr os-prober ntfs-3g fuse3
grub-install --target=x86_64-efi --efi-directory=<EFI_MOUNT_POINT_DIRECTORY> --bootloader-id=GRUB # /boot/efi
grub-mkconfig -o /boot/grub/grub.cfg
# Check if os-proder is executed in the message. If not go into the grub.cfg and set 'GRUB_DISABLE_OS_PROBER=false'
# Stop the pc, deconnect the installtion drive and reboot into the installed linux
shutdown
vim /etc/sudoers
# Set the 'sudo' group so it can execute sudo commands (end of the file normally)
%sudo ALL=(ALL:ALL) NOPASSWD: ALL
# Create symlink if needed
sudo ln -s /usr/bin/vim /usr/bin/vi
# Enable internet auto connect
sudo systemctl start iwd
iwctl
device list
station NAMEDEVICE scan
station NAMEDEVICE get-networks
station NAMEDEVICE connect STATION
If connected but 'ping 8.8.8.8' not working
# In /etc/iwd/main.conf
[General]
EnableNetworkConfiguration=true
[Network]
NameResolvingService=systemd
# Restart iwd
sudo systemctl enable --now iwd systemd-resolved
sudo systemctl restart iwd
ping 8.8.8.8 # test connection
sudo vim /usr/local/bin/custom_init.sh
#!/bin/bash
/usr/bin/kbdrate -d 500 -r 10
# more commands
Save. Then :
sudo chmod +x /usr/local/bin/custom_init.sh
sudo vim /etc/systemd/system/custom-init.service
[Unit]
Description=Set default system values at boot
[Service]
Type=oneshot
ExecStart=/usr/local/bin/set_defaults.sh
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable set-defaults.service
# Install the font manager
sudo pacman -S fontconfig
# Install you fonts (here only one)
sudo pacman -S ttf-jetbrains-mono-nerd
# List the available fonts
fc-list
curl https://gist.githubusercontent.com/ArthurDelannoyazerty/a7ed4eee2781aa05e1f8911e487c8e80/raw/.bashrc > ~/.bahsrc
cp /home/USERNAME/.bashrc /root/.bashrc
echo source ./.bashrc >> .profile
# (exa->eza)
pacman -S bat eza btop fzf tldr duf
# alternatives : dysk |
# Atuin (command history) (https://docs.atuin.sh/guide/installation/)
sudo pacman -S bash-preexec
curl --proto '=https' --tlsv1.2 -LsSf https://setup.atuin.sh | sh
atuin import auto
# Already in my .bashrc
source ~/.bash-preexec.sh # or: source /usr/share/bash-preexec/bash-preexec.sh
source "$HOME/.atuin/bin/env"
eval "$(atuin init bash)"
# Command not found hook
sudo pacman -S pkgfile
sudo pkgfile -u
# source /usr/share/doc/pkgfile/command-not-found.bash # --> put in .bashrc
wget https://github.com/vinceliuice/grub2-themes/archive/refs/tags/2025-03-03.tar.gz
gunzip 2025-03-03.tar.gz
tar xvf 2025-03-03.tar
rm 2025-03-03.tar
sudo grub2-themes-2025-03-03/install.sh --boot --screen 1080p --tehem vimix --icon whitesur
sudo pacman -S hyprland sddm alacritty
# Some starting Hyprland config
vim .config/hypr/hyprland.conf
# find and modify these lines
# Change defauilt terminal (default: kitty)
$terminal = alacritty
# Change keyboard layout (default: us)
input {
kb_layout = fr
...
# Set fr keyboard for sddm
sudo localectl set-keymap fr
# Activate the login screen
sudo systemctl enable sddm.service
sudo systemctl start sddm.service
# Type your password
# more Hyprland config
# In the "binds" replace the number in second position of the binds by (Only needed if change of keyboard layout):
1 --> code:10
2 --> code:11
...
9 --> code:18
0 --> code:19
# Add binds :
# Toggle fullscreen
bind = $mainMod, F, fullscreenstate, 3
# Move windows
bind = $mainMod SHIFT, left, movewindoworgroup, l
bind = $mainMod SHIFT, right movewindoworgroup, r
bind = $mainMod SHIFT, up, movewindoworgroup, u
bind = $mainMod SHIFT, down, movewindoworgroup, d
sudo pacman -S firefox
vim /etc/environment
BROWSER=firefox
sudo pacman -S zsh
# List shells
chsh -l
# Set default shell
chsh -s /bin/zsh
TODO customization
# In /etc/environment
SHELL=/bin/zsh
sudo pacman -S --needed base-devel git
git clone https://aur.archlinux.org/yay.git
cd yay
makepkg -si
# If error, try with this one: https://aur.archlinux.org/yay-bin.git
yay -Syu
# pipewire = low level | pipewire-pulse = compatibility between pipewire and pulseaudio | pavucontrol = audio control
yay -S pipewire pipewire-pulse pavucontrol
# enable the new services
systemctl --user enable pipewire
systemctl --user enable pipewire-pulse
pavucontrol
# test sound (music.youtube.com), if no sound then go into pavucontrol configuration and select "Analog Duplex Audio" (deselect, reselect if needed)
# Test screen sharing on kmeet.infomaniak.com
# screen share disabled by default, need a portal to share it (https://wiki.archlinux.org/title/XDG_Desktop_Portal)
yay -S xdg-desktop-portal-hyprland
# Start the portal
echo $XDG_CURRETN_DESKTOP # Needs to output "Hyprland"
dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
# Now a popup will appear when sharing screen to select what you want to share
# Set it in Hyprland auto start
vim ~/.config/hypr/hyperland.conf
exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
yay -S rofi-wayland
vim ~/.config/hypr/hyperland.conf
bind = $mainMod, R, exec, rofi -show drun
yay -S waybar
vim ~/.config/hypr/hyperland.conf
exec-once = waybar
todo
bash completion
hyprland
test kitty (ligature font / images)
font (gtp)