JustToThePoint English Website Version
JustToThePoint en español

Arch Linux 2026

All things are difficult before they are easy, Thomas Fuller.

General Cauchy Integral Formula for Derivatives

Arch Linux is an independently developed, free and open-source, rolling release distribution. It is a minimalist, lightweight, and bleeding edge distribution that targets advanced users.

Installation and Configuration

  1. Arch Linux installer. Dowload and burn the image to a flash drive using Ventoy or balenaEtcher. Boot from the flash drive. Arch Linux installer is a menu-driven, command line, Arch Linux installer. It is an easy way to install Arch and more importantly, it is an official script supported by Arch. Burn the Arch ISO and the archinstall package is part of it so can be run directly, just type: archinstall (Main disk: /dev/sdc, 238.47GB).
    Filesystem: btrfs (snapshots). Profile: minimal (no desktop), we’ll install Niri manually.

  2. Partition layout.

    cat /etc/fstab
    # UUIDs are preferred over device names (e.g., /dev/sda1) because they remain stable
    # Root partition (/) —the core of my system. Filesystem Type: ext4 (a modern, robust Linux filesystem)
    # defaults, shorthand for common default settings
    /dev/disk/by-uuid/654e9ff3-82ef-4857-973d-6b5db5e3939a / ext4 defaults 0 1
    # EFI System Partition (/boot/efi). Mount Point: /boot/efi (standard location for UEFI bootloaders).
    # Filesystem Type: vfat. The FAT32 filesystem is required by UEFI for boot partitions.
    /dev/disk/by-uuid/CD18-37B9 /boot/efi vfat defaults 0 1
    # Data Partition (/mnt/data). Mount Point: /mnt/data, a user-defined directory for additional storage (e.g., documents, media).
    # Filesystem Type: ext4. Same as root —ideal for Linux-only use.
    # Options: defaults. Standard read-write access.
    UUID=ca04070e-a366-424b-8fa3-c9960c9fbdae /mnt/data ext4 defaults 0
    
  3. First post-installation steps. (sudo pacman -Syu; Refreshing your keyring: sudo pacman-key --refresh-keys), install and configure reflector (sudo pacman -S reflector, sudo reflector --verbose --country 'Spain' --latest 5 --sort rate --save /etc/pacman.d/mirrorlist), and setup pacman.

    # Update the system
    sudo pacman -Syu
    sudo pacman-key --refresh-keys
    
    # Install essentials
    sudo pacman -S --noconfirm \
        base-devel git rsync reflector \
        zsh neovim bash-completion \
        fastfetch eza bat wget curl unzip
    
    # Improve mirrors (important for speed)
    sudo pacman -S reflector
    sudo reflector --country Spain --latest 10 --sort rate --save /etc/pacman.d/mirrorlist
    
    # passwordless sudo (editing /etc/sudoers), adding:
    YOUR-USERNAME ALL=(ALL) NOPASSWD: ALL
    # Then, sudo will never ask you for a password for any command.
    
  4. Install core desktop tools:

    sudo pacman -S \
        alacritty \ # alacritty: GPU-accelerated terminal emulator; bat: cat with syntax highlighting & Git integration;
        xwayland-satellite # It grants rootless Xwayland integration to any Wayland compositor (niri)
        firefox
        pcmanfm \ # pcmanfm: Lightweight GTK file manager
        rofi \ # rofi: Application launcher/menu;
        ttf-jetbrains-mono-nerd \ # Patched font JetBrains Mono from nerd fonts library.
        copyq \
        feh \
        wl-clipboard \
        grim slurp \
        network-manager-applet \
        openssh \ # openssh: Secure remote access.
        keepassxc \ # keepassxc: Password manager.
        vlc filezilla \ #  filezilla: FTP/SFTP client.
        greetd greetd-tuigreet \ # Display Manager
        gparted # gparted: Partition editor
    
    
    
        # Deskflow lets you easily share a single mouse and keyboard between multiple computers
        sudo pacman -Sy --noconfirm input-leap (or barrier).
    
  5. Install Niri, Display Manager, and Noctalia Shell (Wayland compositor):

    #!/bin/bash
    # 🛠️ COMPLETE WAYLAND COMPOSITOR SETUP (NIRE + NOCTALIA SHELL)
    # Requires Arch/Arch-based systems with AUR helper (yay) and sudo access
    set -euo pipefail  # Exit on error, undefined variable, or pipe failure
    
    echo "Installing Niri Wayland compositor and Noctalia Shell..."
    yay -S --noconfirm niri noctalia-shell
    
    echo "Setting up Greetd display manager..."
    if pacman -Si greetd &> /dev/null; then
    # Install greetd and tuigreet (try pacman first, fallback to AUR)
        sudo pacman -S --noconfirm --needed greetd
    else
        yay -S --noconfirm greetd
    fi
    
    if pacman -Si greetd-tuigreet &> /dev/null; then
        sudo pacman -S --noconfirm --needed greetd-tuigreet
    else
        yay -S --noconfirm greetd-tuigreet
    fi
    
    # Configure Greetd to launch Niri via Tuigreet
    
    # Disable other display managers to avoid conflicts
    for dm in lightdm sddm gdm lxdm; do
        if systemctl is-active --quiet $dm; then
            print_info "Stopping and disabling $dm..."
            sudo systemctl stop $dm
            sudo systemctl disable $dm
        fi
    done
    
    sudo tee /etc/greetd/config.toml >/dev/null <[default_session]
    command = "tuigreet --greeting 'Welcome to Niri!' --time --cmd niri"
    user_session = "niri"
    
    [terminal_session]
    command = "tuigreet --cmd /bin/bash"
    EOF
    
    # Enable and start services
    sudo systemctl enable greetd
    sudo systemctl start greetd
    
    echo "Installing essential Wayland utilities..."
    sudo pacman -S --noconfirm --needed \
        waybar          \ # Modern status bar
        swaybg          \ # Wallpaper setter
        swaylock        \ # Screen locker
        fuzzel          \ # Application launcher (rofi alternative)
        xdg-desktop-portal-wlr \ # Screen sharing portal for wlroots
        wl-clipboard    \ # Clipboard utilities (wl-copy, wl-paste)
        mako            \ # Notification daemon
        grim            \ # Screenshot tool
        slurp           \ # Region selection for grim
        kanshi          \ # Output management (hotplug monitors)
        pavucontrol       # Audio control (if using PulseAudio/PipeWire)
    
    echo "Creating essential directories and configs..."
    CONFIG_DIR="$HOME/.config"
    mkdir -p "$CONFIG_DIR"/{niri,waybar,swaylock,mako}
    
    
    # Sample minimal Niri config (customize as needed)
    tee ~/.config/niri/config.toml >/dev/null <# Niri compositor configuration
    # See https://github.com/YaLTeR/niri for full documentation
    [output]
    scale_factor = 1.0
    transform = "normal"
    
    [input]
    keyboard = { repeat_delay = 500, repeat_rate = 25 }
    
    [cursor]
    theme = "default"
    size = 24
    
    [layout]
    gaps = 8                    # Space between windows
    border = { width = 2, active = "#5294e2", inactive = "#333333" }
    
    # Key bindings (super = Mod4, usually the Windows key)
    [binding]
    mod = "Mod4"
    
    # Window management
    "mod+Return" = { spawn = "alacritty" }  # Replace with your terminal
    "mod+d" = { spawn = "fuzzel" }
    "mod+q" = { close-window = {} }
    
    # Focus movement
    "mod+h" = { focus-column-left = {} }
    "mod+l" = { focus-column-right = {} }
    "mod+j" = { focus-window-down = {} }
    "mod+k" = { focus-window-up = {} }
    
    # Window movement
    "mod+Shift+h" = { move-column-left = {} }
    "mod+Shift+l" = { move-column-right = {} }
    "mod+Shift+j" = { move-window-down = {} }
    "mod+Shift+k" = { move-window-up = {} }
    
    # Workspaces
    "mod+1" = { focus-workspace = 1 }
    "mod+2" = { focus-workspace = 2 }
    "mod+3" = { focus-workspace = 3 }
    "mod+4" = { focus-workspace = 4 }
    "mod+Shift+1" = { move-window-to-workspace = 1 }
    "mod+Shift+2" = { move-window-to-workspace = 2 }
    "mod+Shift+3" = { move-window-to-workspace = 3 }
    "mod+Shift+4" = { move-window-to-workspace = 4 }
    
    # Screenshots
    "Print" = { spawn = "grim" }
    "Shift+Print" = { spawn = "grim -g \"$(slurp)\"" }
    
    # Screen lock
    "mod+Shift+Escape" = { spawn = "swaylock -f" }
    
    # Volume keys (requires pactl from PulseAudio/pipewire)
    "XF86AudioRaiseVolume" = { spawn = "pactl set-sink-volume @DEFAULT_SINK@ +5%" }
    "XF86AudioLowerVolume" = { spawn = "pactl set-sink-volume @DEFAULT_SINK@ -5%" }
    "XF86AudioMute" = { spawn = "pactl set-sink-mute @DEFAULT_SINK@ toggle" }
    
    # Brightness (requires brightnessctl)
    "XF86MonBrightnessUp" = { spawn = "brightnessctl set +5%" }
    "XF86MonBrightnessDown" = { spawn = "brightnessctl set 5%-" }
    
    # Reload config
    "mod+Shift+R" = { spawn = "niri msg action reload-config" }
    EOF
    
    # Placeholder for other configs (you can expand later)
    touch "$CONFIG_DIR/waybar/config" "$CONFIG_DIR/swaylock/config" "$CONFIG_DIR/mako/config"
    
    
    echo "Enable screen sharing"
    sudo systemctl --user enable --now xdg-desktop-portal
    
    # -------------------- NVIDIA OPTIMIZATIONS --------------------
    if lspci | grep -i nvidia &> /dev/null; then
        print_info "NVIDIA GPU detected – applying workarounds..."
        sudo tee -a /etc/environment >/dev/null <WLR_NO_HARDWARE_CURSORS=1
    WLR_RENDERER=vulkan
    EOT
        echo "NVIDIA environment variables set. Reboot to apply."
    fi
    
  6. SSH. Configure SSH. SSH (Secure Shell) is a widely used secured network protocol to access remote computers in a network.

        sudo nvim /etc/ssh/sshd_config
        AllowTcpForwarding yes # It allow TCP port forwarding, using SSH as a tunnel between your client and the server.
        X11Forwarding yes # It will forward GUI traffic over the connection above.
        X11DisplayOffset 10
        X11UseLocalhost yes
    

    Enable the sshd service: sudo systemctl enable sshd, sudo systemctl start sshd.
    Using ssh-copy-id is an effective way to set up password-less SSH access: ssh-copy-id -i ~/.ssh/id_rsa.pub userName@ServerIPAddress.
    If you want to allow the use of graphical applications, you need to add -Y flag: ssh -Y userName@ServerSSHIPAddress

  7. Audio.

        sudo pacman - S pipewire wireplumber pipewire-pulse
        # Enable Audio
        systemctl --user enable pipewire wireplumber
    
  8. Developer setup, VS Code + Python + Hugo

    sudo pacman -S hugo
    yay -S visual-studio-code-bin
    # Python extensions, https://itsfoss.com/install-vs-code-extensions/
    
    code --install-extension ms-python.python
    code --install-extension streetsidesoftware.code-spell-checker
    
  9. NFS.

    # Installing the NFS server:
    sudo pacman -S nfs-utils
    # Enable it
    sudo systemctl enable nfs-server
    
    # Create Shared Directory:
    sudo mkdir -p /mnt/data
    sudo chown -R nobody:nogroup /mnt/data/
    sudo chmod 777 /mnt/data
    
    # Define Exports. Edit `nvim /etc/exports` to define which directories are shared and with which clients.
    # Add this line:
    /mnt/nfs_share  client_IP(rw,sync,no_subtree_check)
    # Example: /mnt/data 192.168.1.0/24(rw,sync,no_subtree_check)
    # NFS root directory (/mnt/data). Access to this NFS volume is allowed only to the clients from the 192.168.1.0/24 subnet (local network).
    
    # Save the file and export the share(s):
    sudo exportfs -a
    
    # Firewall configuration:
    sudo ufw allow from 192.168.1.0/24 to any port nfs
    # Verify the change: sudo ufw status
    
    Restart the NFS service after reboot:
    sudo systemctl restart nfs-kernel-server
    
  10. Samba.

    # Install Samba
    sudo pacman -S samba
    
    # Create Shared Directory, i.e., the folder you want to share:
    sudo mkdir -p /mnt/data/share
    # Set permissions
    sudo chown nmaximo7:nmaximo7 /mnt/data/share (Replace with your username/group)
    # It grants owner+group write/read, others read
    sudo chmod 775 /mnt/data/share
    
    # Configure Samba:
    sudo nvim /etc/samba/smb.conf
      [sambashare]
        comment = Samba on Ubuntu
        force user = nmaximo7 # Maps clients to this user (ensure user exists)
        browseable = yes # Enables Windows clients to browse the shared directory using Windows Explorer.
        path = /mnt/data/share # The path to the shared directory.
        writable = yes # If you want others to be able to change it.
        public = yes # So that everyone can see the shared directory.
    
    # Check syntax errors in smb.conf
    sudo testparm
    # Then, restart Samba:
    sudo systemctl enable smb && sudo systemctl start smb
    # Verify service is active:
    sudo systemctl status smbd
    
  11. Install AUR helper (yay)

    git clone https://aur.archlinux.org/yay.git
    cd yay
    makepkg -si
    cd ..
    rm -rf yay
    
Bitcoin donation

JustToThePoint Copyright © 2011 - 2026 Anawim. ALL RIGHTS RESERVED. Bilingual e-books, articles, and videos to help your child and your entire family succeed, develop a healthy lifestyle, and have a lot of fun. Social Issues, Join us.

This website uses cookies to improve your navigation experience.
By continuing, you are consenting to our use of cookies, in accordance with our Cookies Policy and Website Terms and Conditions of use.