Skip to content

Instantly share code, notes, and snippets.

@ArthurDelannoyazerty
Last active July 19, 2025 22:13
Show Gist options
  • Save ArthurDelannoyazerty/5dc269b058276caf07c1ab1b631aba05 to your computer and use it in GitHub Desktop.
Save ArthurDelannoyazerty/5dc269b058276caf07c1ab1b631aba05 to your computer and use it in GitHub Desktop.

Terminal / Keyboard

localectl list-keymaps
loadkeys fr
# setfont ter-132b
kdbrate -d 500 -r 10

INTERNET

ip link
iwctl
device list
station NAMEDEVICE scan
station NAMEDEVICE get-networks
station NAMEDEVICE connect STATION

PARTITION

Create partition table

# 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

Format partitions

# 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

Mount points

# 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

Setup system

# 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

Install Boot loader

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'

After the installation

Disconnect & reboot

# Stop the pc, deconnect the installtion drive and reboot into the installed linux
shutdown

Sudo permissions

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 useful symlink

# Create symlink if needed
sudo ln -s /usr/bin/vim /usr/bin/vi

Internet again

# 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

Custom script at the start

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

Font config

# 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

My bashrc import

curl https://gist.githubusercontent.com/ArthurDelannoyazerty/a7ed4eee2781aa05e1f8911e487c8e80/raw/.bashrc > ~/.bahsrc

.bashrc for root

cp /home/USERNAME/.bashrc /root/.bashrc
echo source ./.bashrc >> .profile

Nice packages

# (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

Nice Grub

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

Hyprland

Basic (installation, minimal config)

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

web browser

sudo pacman -S firefox
vim /etc/environment
BROWSER=firefox

Shell

sudo pacman -S zsh

# List shells
chsh -l
# Set default shell
chsh -s /bin/zsh

TODO customization

# In /etc/environment
SHELL=/bin/zsh

Arch User Repository

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

Sound

# 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)

Screen share

# 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

File Manager

Application Launcher

yay -S rofi-wayland
vim ~/.config/hypr/hyperland.conf
bind = $mainMod, R, exec, rofi -show drun

Waybar

yay -S waybar
vim ~/.config/hypr/hyperland.conf
exec-once = waybar
@ArthurDelannoyazerty
Copy link
Author

ArthurDelannoyazerty commented Jul 14, 2025

todo
bash completion
hyprland
test kitty (ligature font / images)
font (gtp)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment