Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save elbowz/5a8b6ddf84adae530c8207b48ed22df3 to your computer and use it in GitHub Desktop.
Save elbowz/5a8b6ddf84adae530c8207b48ed22df3 to your computer and use it in GitHub Desktop.
Install Archlinux on XPS 13 9370 DualBoot with Windows
# Resource
# https://gist.github.com/brammitch/281e9a2f3aca57ae4a333fc63732f602
# https://wiki.archlinux.org/index.php/Installation_guide
# https://wiki.archlinux.org/index.php/Dell_XPS_13_(9370)
# Switching from RAID to AHCI
# https://gist.github.com/chenxiaolong/4beec93c464639a19ad82eeccc828c63
# https://www.tenforums.com/drivers-hardware/15006-attn-ssd-owners-enabling-ahci-mode-after-windows-10-installation.html
# Turn off Windows fast boot
# http://lifehacker.com/enable-this-setting-to-make-windows-10-boot-up-faster-1743697169
# Set the keyboard layout and font
loadkeys it
setfont latarcyrheb-sun32
# Verify the boot mode
ls /sys/firmware/efi/efivars
# Connect to the Internet
# If you have a WPA2 Enterprise (user+password) setup netctl or easly use NetShare android app (wifi bridge)
wifi-menu -o
# if you need to use a proxy (e.g. NetShare)
export http_proxy=172.25.21.6:44355
# Update the system clock
timedatectl set-ntp true
# Check service status
timedatectl status
# if under a proxy (e.g. NetShare app), set the date manually: date +%T -s "11:14:00" and execute timedatectl after installation
# Resizing NTFS Windows partition
# Display partitions status
# https://gparted.sourceforge.io/download.php
# Partition the disks
# EFI partition will not be created since we are dual booting with Windows 10
# Existing EFI partition will be mounted to /boot
# Identify disks
lsblk
cgdisk /dev/nvme0n1
# Create 8GiB swap partition (8200)
# Create 100% LVM partition (8e00)
# Exit cgdisk
# List devices for LVM
lvmdiskscan
# Create physical volume
pvcreate /dev/nvme0n1p8
# Verify physical volumes
pvdisplay
# Create volume group
vgcreate xps_vg /dev/nvme0n1p8
# Verify volume groups
vgdisplay
# Create logical volumes
lvcreate -l100%FREE xps_vg -n lv_root
#lvcreate -L 40G xps_vg -n lv_home
# Verify logical volumes
lvdisplay
# Format the partitions
# Format /root and /home as ext4
mkfs.ext4 /dev/xps_vg/lv_root
#mkfs.ext4 /dev/xpsvg/lvhome
# Setup swap partition
mkswap /dev/nvme0n1p7
swapon /dev/nvme0n1p7
# Mount the file systems
# Mount /root
mount /dev/xps_vg/lv_root /mnt
# Mount /home
mkdir /mnt/home
# mount /dev/xps_gv/lv_home /mnt/home
# Mount existing EFI partition
mkdir /mnt/boot
mount /dev/nvme0n1p1 /mnt/boot
# Select mirrors
# Edit mirros list
vim /etc/pacman.d/mirrorlist
# Install the base packages
pacstrap /mnt base vim git efibootmgr wpa_supplicant iw zsh dialog sudo binutils make base-devel
# Configure the system
# Fstab
# Generate an fstab file
genfstab -L /mnt >> /mnt/etc/fstab
# Verify and adjust /mnt/etc/fstab
# Chroot
# Change root into the new system
arch-chroot /mnt
# Time zone
# Set the time zone
ln -sf /usr/share/zoneinfo/Europe/Rome /etc/localtime
# Generate /etc/adjtime
hwclock --systohc
# Locale
# Uncomment en_US.UTF-8 UTF-8 in /etc/locale.gen and generate them with
locale-gen
# Set the LANG variable in /etc/locale.conf
echo 'LANG=en_US.UTF-8' > /etc/locale.conf
# Set keyboard font
echo 'FONT=latarcyrheb-sun32' > /etc/vconsole.conf
# Set keyboard layout
echo 'KEYMAP=it' >> /etc/vconsole.conf
# 3.5 Hostname
echo 'arch-xps' > /etc/hostname
vi /etc/hosts
127.0.0.1 localhost
::1 localhost
127.0.1.1 arch-xps.localdomain arch-xps
# Initramfs
# Get rid of errors for psmouse
echo 'blacklist psmouse' >> /etc/modprobe.d/modprobe.conf
# Configure mkinitcpio
vi /etc/mkinitcpio.conf
# Update HOOKS=(...) to add: systemd sd-vconsole sd-lvm2
# note: s/udev/systemd/ and sd-lvm2 before filesystem
# Update FILES=(/etc/modprobe.d/modprobe.conf)
# Generate initrd image
mkinitcpio -p linux
# Add user
useradd -m -g users -G wheel -s /bin/zsh <username>
# Set password
passwd <username>
# Enable wheel group as sudoers
visudo
# Uncomment %wheel ALL=(ALL) ALL
# Disable root user
passwd -l root
# Boot loader
# Setup systemd-boot
bootctl --path=/boot install
# Enable Intel microcode updates
pacman -S intel-ucode
# Create bootloader entry
vi /boot/loader/entries/arch.conf
title Arch Linux
linux /vmlinuz-linux
initrd /intel-ucode.img
initrd /initramfs-linux.img
options root=/dev/xps_vg/lv_root rw
# Set default bootloader entry
vi /boot/loader/loader.conf
timeout 8
default arch
editor 0
# Reboot
exit
umount -R /mnt
reboot
# Post-installation
# zsh Key bindings (home-end key fix)
# https://wiki.archlinux.org/index.php/Zsh#Key_bindings
# also add this lines to ~/.zshrc for ctrl+r history
key[CtrlR]="${terminfo[^r]}"
# [...]
[[ -n "${key[CtrlR]}" ]] && bindkey -- "${key[CtrlR]}" history-incremental-search-backward:
# Connect to wifi
sudo wifi-menu -o
# if you need to use a proxy (e.g. NetShare)
export http_proxy=172.25.21.6:44355
# Install Intel graphic drivers (-E if you use http_proxy)
sudo -E pacman -S xf86-video-intel
sudo -E pacman -S xorg-server plasma-meta kde-applications-meta
sudo systemctl enable --now sddm.service
sudo systemctl enable --now NetworkManager.service
# Install pacaur
su - <username>
mkdir aur
cd aur
git clone https://aur.archlinux.org/cower.git
cd cower
makepkg -si --skipinteg
cd ..
git clone https://aur.archlinux.org/pacaur.git
cd pacaur
makepkg -si
# Enable fstrim
sudo systemctl enable --now fstrim.timer
# set issue_discards=1 in /etc/lvm/lvm.conf
# Firmware update
sudo pacman -S fwupd
fwupdmgr refresh
fwupdmgr get-updates
fwupdmgr update
# Enable Suspend-To-RAM (deep) instead of default Suspend-To-Idle (s2idle)
cat /sys/power/mem_sleep
[s2idle] deep
# append "mem_sleep_default=deep" to /boot/loader/entries/arch.conf
# Enable Chrome dark mode
vim ~/.config/chrome-flags.conf
--enable-features=WebUIDarkMode
--force-dark-mode
# or install Dark Reader
# /etc/sddm.conf
# [X11]
# ServerArguments=-nolisten tcp -dpi 276
# Useful programs
pacaur -S chromium
pacaur -S libreoffice-fresh hunspell hunspell-it hunspell-en_US
pacaur -S breeze-gtk kde-gtk-config
pacaur -S ttf-bitstream-vera ttf-croscore ttf-dejavu ttf-droid ttf-roboto noto-fonts ttf-liberation ttf-ubuntu-font-family
pacaur -S cups cups-pdf
pacaur -S copyq
pacaur -S kdeconnect
pacaus -S keeweb-desktop
pacaur -S syncthing
pacaur -S kernel-modules-hook # Keeps your Arch Linux fully functional after a kernel upgrade
pacaur -S etckeeper
pacaur -S zsh-completions
pacaur -S pacman-contrib
systemctl enable --now paccache.timer
pacaur -S broot # ls with steroid (https://github.com/Canop/broot)
pacaur -S fzf # grep with steroid, interactive filter for command-line (https://github.com/junegunn/fzf, https://wiki.archlinux.org/title/fzf)
pacaur -S antibody # zsh shell plugin manager (https://getantibody.github.io/)
pacaur -S kwin-bismuth-bin # kde/kwin tiling window managers (https://github.com/Bismuth-Forge/bismuth)
# Reminder
# on "Failed to create EFI Boot variable entry: No space left on device" or stuck on Dell logo on boot process:
ls /sys/firmware/efi/efivars/dump-*
rm /sys/firmware/efi/efivars/dump-*
# TODO:
https://github.com/robbyrussell/oh-my-zsh
https://github.com/systemd/systemd/issues/2750
https://bbs.archlinux.org/viewtopic.php?pid=1775108#p1775108
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment