User:NTia89/My XPS System Installation

From ArchWiki
Note: first, this page is for my XPS 9343 only.
Note: second, handle it as a recap-page. Rely on main ArchWiki pages instead.
Note: third, treat backed-up configuration files on Dropbox as example/reminder. Don't substitute them entirely, rather use them as help for editing original/system files.

Things to do BEFORE formatting

Warning: first of all, read the ToDos list at the and of the document. Then try to solve the issue or at least update their status. Just now you can continue with the instructions below.
  • Close/save all opened tabs in Firefox
  • Clean-up the $HOME:
  1. then backup the content on an external storage
  • Save Firefox stuff:
  1. Backup manually bookmarks into both .html and .json files (straight away from FF > Bookmarks > Manage).
  2. Backup manually uBlock Origin settings (directly from extension's preference window).
Note: for point 1. this is done for emergency purpose-only, since Firefox Sync already takes care of bookmarks and retrieve them automatically when I log-in in Firefox.
Note: for point 2. this is done for emergency-case only because uBlock Origin already saves settings using the Firefox Sync cloud storage; even if they have to be retrieved manually from the uBlock Origin interface.
  • Update every customized file! (should be already backed-up in Dropbox)
  1. /boot
  2. /etc
  3. $HOME
  4. /usr

Getting and installing Arch

Prepare the system

  • Disable Secure boot feature from the EFI interface (press F2 during the boot)
Note: simply worthless on a such system.
  • Boot the USB (press F12 during the boot)
  • Erase (securely) the disk, Securely wipe disk#hdparm from a live environment i.e. SystemRescue on USB

Installation guide

  • Install the system, with this Partition layout:
UEFI with GPT
Device Partition type File system Size Mount point Notes
/dev/sda1 EFI System FAT32 1 GiB /boot boot stuff will reside here
/dev/sda2 Linux swap linux-swap 11 GiB --- swap space[1]
/dev/sda3 Linux filesystem ext4 45 GiB / the root
/dev/sda4 Linux filesystem ext4 173 GiB /home my $HOME
unallocated space --- --- remaining space (8.49 GiB) --- see note below
Note: leaving unallocated space at the end of the SSD was a good practice to lower wearing[2] and allow to round up partitions size.
  • Configure the SSD
Note: despite many suggestions[3] to use periodic TRIM over continuous TRIM due to firmware bugs and more, I have never had problems with my hardware, thus I continue prefer this option.
  • Install base software sudo pacman -S base linux-zen linux-zen-headers nano
Note: new base metapackage does not provide neither a kernel nor a text editor.
  • Install first bunch of extra software sudo pacman -S base-devel broadcom-wl-dkms efibootmgr intel-ucode
  • Finally, install the bootloader systemd-boot
Note: you have to add a temporary entry (just follow the wiki) because you have to reboot the system despite Dropbox (for configuration files) is not yet ready.
  • Clean-up EFI boot entries with efibootmgr
Warning: an UEFI firmware bug makes impossible to delete boot entries (if you delete them, they will be recreated automatically on next boot).
Workaround: set them as inactive with sudo efibootmgr -v -b N -A where N={4,3,2,1}.

GNOME

  • first, install basic GNOME software to have a working, graphical and internet connected environment:
sudo pacman -S firefox gdm gnome-control-center gnome-keyring gnome-terminal nautilus networkmanager

Configure GDM, GNOME, NetworkManager and reboot.

Note: now you have a working graphical DE.
  • second, complete GNOME packages installation:
sudo pacman -S baobab caribou cheese dconf-editor drawing eog eog-plugins evince file-roller gcolor3 gedit gedit-plugins gnome-backgrounds gnome-calculator gnome-characters gnome-clocks gnome-disk-utility gnome-firmware gnome-font-viewer gnome-logs gnome-mines gnome-nettool gnome-screenshot gnome-shell-extensions gnome-sound-recorder gnome-system-monitor gnome-tweaks gnome-user-docs gnome-user-share gnome-video-effects gpaste grilo-plugins gst-libav gst-plugins-ugly gstreamer-vaapi gvfs-mtp libcanberra-gstreamer net-tools libopenraw nuspell p7zip pipewire-jack python-pyudev rygel libgepub system-config-printer texlive-bin texlive-core unrar unace usbguard xdg-desktop-portal-gnome xdg-user-dirs yelp
  • finally tweak it (you can do it graphically via dconf-editor):
    • set Search as recursive in Downloads and Dropbox folders with:
$ gsettings set org.freedesktop.Tracker3.Miner.Files index-recursive-directories "['&DOWNLOAD', 'Dropbox']"
    • tune volume step with:
$ gsettings set org.gnome.settings-daemon.plugins.media-keys volume-step 3
    • adjust border drag-ability
$ gsettings set org.gnome.mutter draggable-border-width 20

Software, software and fonts

  • install software packages from official repo:
sudo pacman -S 0ad alsa-utils android-tools android-udev aspell-en aspell-it atomicparsley audacity bash-completion beanshell bluez-utils btop bwm-ng ccid cdtools chromium clonezilla clinfo coin-or-mp colord-sane cpupower crda cups dialog dmidecode dnsmasq easyeffects easytag ed exfatprogs expac ext4magic f2fs-tools filezilla firefox-i18n-en-gb firefox-i18n-it geeqie gimagereader-gtk gimp gimp-dbp glmark2 gnome-shell-extension-appindicator gparted gping gpxsee grsync gsmartcontrol gthumb java-runtime-common jre-openjdk handbrake hugin hunspell-en_GB hunspell-it hyphen-en hwinfo img2pdf intel-compute-runtime intel-gpu-tools intel-media-driver iotop libdvdcss libmythes libreoffice-fresh libreoffice-fresh-en-gb libreoffice-fresh-it libva-mesa-driver libva-utils libvdpau-va-gl linux-lts linux-lts-headers lostfiles lynx malcontent mangohud mariadb-libs mediainfo-gui meld memtest86+-efi mesa-utils mkvtoolnix-gui mpv mpv-mpris mtools mythes-en namcap ncdu nethogs nfoview openblas opensc otf-cormorant pacman-contrib pcsc-tools pdfarranger perl-file-mimeinfo perl-image-exiftool picard pkgstats postgresql-libs powertop profile-cleaner profile-sync-daemon pstoedit python-libevdev python-pipx python-pycryptodome python-pyopenssl python-pysmbc python-pysocks qt5-svg qt{5,6}-wayland rawtherapee realtime-privileges reflector rmlint rmlint-shredder sof-firmware squashfs-tools stress supertuxkart tesseract-data-eng tesseract-data-ita tlp transmission-gtk tree ttf-linux-libertine udftools unixodbc vdpauinfo vkmark vulkan-intel vulkan-mesa-layer vulkan-tools wavemon workrave yt-dlp
  • then start reflector by enabling its .timer
systemctl enable reflector.timer
Note:
(September-2019) Yaourt is not maintained anymore![4] and removed from AUR, as well. I have switched to pikaur[5]. All commands stay the same due to my aliases.
(January-2024) Switching from pikaur to paru[6], a brand-new, blazing-fast AUR helper.
  • install software from AUR:
  1. First, let's install paru from scratch:
  2. Install git package
  3. Move to /tmp
  4. Download snapshot git clone https://aur.archlinux.org/paru.git
  5. Enter in its directory cd paru
  6. Compile and install it makepkg -si
  7. Lastly, install its own optional dependency bat devtools
  • continue with installation of dropbox
  1. paru dropbox
  2. execute and sync
  3. change Dropbox folder icon, using SVG icon from /usr/share/pixmaps/ folder
  4. and copy/use every files backed up in arch-xps.
    Warning: prior to compile any of the following packages.
  5. Create and own BUILDDIR and PKGDEST directories
sudo mkdir -p /var/cache/pacman/pkg/{paru-sources,paru-packages}
sudo chown mattia:mattia /var/cache/pacman/pkg/{paru-sources,paru-packages}
  • now disable Password timeout for sudo by adding the following lines using visudo
# this disable the timeout of password using `sudo`:
# once you entered the password correctly, it will never expire,
# asking you it again; this help long tasks like software compilation
# and installation with `paru`.
# [https://wiki.archlinux.org/title/Sudo#Disable_password_prompt_timeout]
Defaults passwd_timeout=0
  • conclude by installing all remaining pip packages:
    • pipx install tcx2gpx
  • conclude by installing all remaining AUR packages:
    • yy fonts-meta-base
    • yy fonts-meta-extended-lt
    • yy ttf-impallari-libre-baskerville
    • yy otf-latin-modern
    • yy otf-latinmodern-math
    • yy mei-amt-check-git
    • yy phantomjs-bin
    • yy masterpdfeditor
    • yy pipes.sh
    • yy powerstat-git
    • yy tor-browser
    • yy diffpdf
    • yy spectre-meltdown-checker
    • yy extension-manager
    • yy downgrade
    • yy reboot-arch-btw
Warning: now you should remove paru cache in $HOME, since it has been just temporary.
rm -rf ~/.cache/paru/
Warning: now you should recompile and reinstall paru due to customized configuration files added after, which includes paru 's configuration file.

Further steps + Tuning

  • Install Gnome-shell's extensions via extension-manager:
    • Open extension-manager, go to Browse, type their name and install them
      • Bluetooth Quick Connect
      • Blur my Shell
      • Clipboard Indicator
      • Fullscreen Notifications
      • Just Perfection
      • Tiling Assistant
      • TopHat
    • then configure them all.
  • Install Firefox's extensions:
    • First, login with your Account and let it to sync
    • Open Firefox, then go to Add-ons and themes
      • enhanced-h264ify
      • Load Progress Bar
      • Reload in address bar
      • Simple Translate
      • Swift Selection Search
      • uBlock Origin
      • YouTube Auto HD + FPS
    • and configure them all (remember backups!).
Note: remember to add special filter lists ITA and EasyList Cookie, under respectively Regional and Annoyances sections.
  • Enable boot script:
    • Run the command $ systemctl enable boot-script.service; systemctl start boot-script.service
Note: you can check any problem with $ systemctl status boot-script.service.
  • Check Java environment (installed as optional dependency of previously installed packages):
$ archlinux-java status
  • Enable native systemd-boot automatic updater:
$ systemctl enable systemd-boot-update.service}}
  • Enable experimental feature for Bluez:
    • Just uncomment the right line here /etc/bluetooth/main.conf.
  • Copy customized pacman's hooks (backed up in Dropbox) in /etc/pacman.d/hooks/:
    • 11-reboot-on-kernel-upgrade.hook, automate reboot-arch-btw execution on linux-zen upgrade
    • 81-hunspell.hook, for removing useless variants of English or Italian dictionaries from hunspell
    • 82-hyphen.hook, for removing useless variants of English or Italian dictionaries from hyphen
    • 83-mythes.hook, for removing useless variants of English or Italian dictionaries from mythes
    • 94-lsp-plugins.hook, for removing useless .desktop entries from lsp-plugins
  • Install pre-compiled packages (by me! from Dropbox):
    • Go into $HOME/Dropbox/arch-xps/pre-compiled packages
    • Install ttf-weblysleekui font
    • Install Bluetooth firmware bcm20702a1-firmware
  • Install SystemRescueCd 5.3.2 directly in /boot (as emergency tool, useful if Arch is broken):
    • Download ISO[7] and check its hash.
    • Mount the .iso file and copy isolinux/{rescue64,initram.igz} files into /boot/SRCD as well as the entire ISO systemrescuecd-x86-5.3.2.iso
    • Add menu entry placing .conf file in the /boot/loader/entries folder; the interested file it's backed up in Dropbox, thus already placed there
Note: current versions (>6) are based on Arch Linux, in place of Debian; this led me huge problems that makes me decide to skip future version and stay with the legacy one.
Anyway, version 5.3.2 fits perfectly for me and my XPS.
In the meantime, project changed its name from SystemRescueCd to SystemRescue.
  • Install UEFI Shell (as emergency tool, useful if the boot manager is broken):
Note: some systems have already an UEFI Shell, built-in, this is not my case! An UEFI Shell acts like a minimal boot-loader. I want to have it, I need it as emergency boot-loader, since systemd-boot future upgrades could break it up.
    • Download latest UEFI Shell binary from the package ShellBinPkg.zip, located here[8].
    • Unpack and place the right version (UefiShell/X64/Shell.efi) in the folder /boot/EFI/Boot/
    • Add menu entry using sudo efibootmgr --create --label "UEFI Shell" --loader /EFI/Boot/Shell.efi --verbose
    • Reorder boot order with sudo efibootmgr -o 0000,0005
Note: you can do it also directly from EFI/BIOS settings.
    • In case of need, boot into UEFI Shell, cd into $ESP with fs0: and launch kernel using vmlinuz-linux{-lts} initrd=initramfs-linux{-lts}.img root=/dev/sda3 rw
Warning: I would have booted directly from EFI using EFISTUB feature; unfortunately, booting from EFISTUB is broken on this machine. See Dell XPS 13 (9343)#EFISTUB does not boot.
  • Get rid of old wpa_supplicant in favour of iwd as new NetworkManager's default backend:
    • Install iwd package,
    • Add the configuration file source (backed up in Dropbox) in /etc/NetworkManager/conf.d,
  • Finally, to get all these customizations working, reboot the entire system

Sources + ToDos

Here is a Future Developments or Work In Progress list. In the list below I keep track of long-term ToDos where their development requires much time.

Tip: .
  • WIP-0, update this guide to ARCHINSTALL [9] because this is the future! AND report my experience HERE! updating this tutorial; THIS WILL BE THE LAST STEP

,WIP-0

  • WIP2, switch to WAYLAND. Mainly I am waiting for official Firefox (the "foreign"/not-GNOME application I use the most) support because GNOME is in good shape, now! EVEN IF, NOT PERFECT AT ALL!! This is the new challenge. Così finalmente potrò usare le gesture di GNOME! [...] GNOME on Xorg does not natively implement any gestures. [...]. vedi [10] ed altro...; così finalmente funzionerà l'HW-accel su FF! [11][12].
    • as of 09-dic-22 ancora troppi problemi, vedi: mpv [13]+[14], gtk [15], gnome-shell missing RESTART under WAYLAND [16] & eog cannot zoom with mouse scrolling/touchpad [17], file-roller [18].
    • as of 29-dic-22, still has: FF non riesci ad aprire menu principale + vari glitch grafici + scrolling kinetico è da mal di mare SEBBENE PERFORMANCE SEMBRINO MIGLIORATE... quindi peccato [19]; possibili con la TRAY ICON di dropbox, (non so se è un problema di DropBox stesso oppure dell'estensione di gnome-shell che ne permette la visualizzazione nella tray bar! provato con GNOME v41.1 al 14 novembre 2021; qualche BUG VARI di gnome-shell, tipo la mancanza di suoni per gli eventi (anche se questo potrebbe essere un problema di PIPEWIRE... e SEBBENE guadagni, finalmente, le GESTUREs native!!!); MPV ha qualche problema con la sua finestra; supporto HW-accell. / VAAPI buggy on wayland, both FF che MPV; BONUS: miglioramento consumi [20];
    • as of 04-gen-23, FF cannot go WAYLAND [21];
    • as of GNOME 43 version is out, I switched to WAYLAND-only (by disabling XWayland !!! too !!!) and it (GNOME) works! well!! and I use it as daily-driver;
    • as of 10-oct-23, GNOME fully working on WAYLAND and main apps too (Firefox, even if not-"officially" supported, it works and I have enabled it and I use it daily) but other common-used apps do not work, completely or partially; e.g. GIMP does not work at all, PICARD works but not-perfectly...
    • gparted requires X11 as well...
    • tor-browser-launcher does not work except when launched from terminal (a GNOME-SHELL bug?)
  • WIP7, ToDo: switch file-system, from EXT4 to ... see [22]
    • to F2FS!
      • benchmark non affidabili! basati su ALPHA... infatti impossibile che EXT4 sia così lento...
        • ad oggi (01-11-2023) la configurazione sembra essere ext4/xfs per la root e zfs per la home... certo data la conndizione di zfs su linux, è più facile a dirsi che a farsi;...
  • WhenNewLaptop(1), quando avrò hw che supporta BENE! EFI STUB:... [24]
  • WhenNewLaptop(2), questo video [25] mi ha aperto gli occhi su un aspetto sempre snobbato: TPM; configure the TPM support for the next laptop, since my 9343 does not have it! [26]; quindi per il futuro, se il nuovo hardware lo supporterà, ed è molto probabile visto che è mandatory per WIN11! la nuova installazione di Arch avrà la FDE (full disk encryption) [27] coadiuvata dal modulo TPM2.0 [28]; + add new information here and on 9343 arch-wiki page;
  • todo 11 get rid of GTK2 [29]; this probably means removing appindicator-gtk2... but I have -> already removed!
    • as of 09-dic-22 `calf` and `gimp` requires GTK2; the former will fix it with gimp3; just wait for new version hits repo; `calf` removed since I do not think I need it; let's start a trial period!;
      • as of 01-nov-23, still here with GTK2, at least ONLY GIMP relies on gtk2 and this will end when GIMP-3.0 will be released. waiting for it...; on the other hand, `calf` has been fixed! (see comment above.);
  • todo 1:1 BIG OVERHAUL, FF: attualmente sto usando ancora la configurazione di partenza di FF (impostazioni e settaggi derivanti da ANNI di utilizzo, certo evoluti, cambiati durante il tempo ma non sono mai partito da una BASE PULITA!); l'obiettivo è partire da una base pulita e cambiare le impostazioni;
    • questo deve essere fatto un po' alla volta (& dopo aver fatto switch vs WAYLAND) per testare i cambiamenti ed essere sicuro che non rompano alcun sito; poichè i parametri sono tantissimi, non esiste una guida completa o addirittura ne esistono di troppo complete, che inficiano in modo eccessivo sulla privacy e per questo rompono alcuni siti, devo procedere così; devo quindi partire da un profilo di FF pulito MA DEVE ESSERE QUELLO CHE UTILIZZO TUTTI I GIORNI PER TESTARNE LA NON-ROTTURA DEI SITI! ma per questo devo fare pulizia dei TABs; dopo, installo le estensioni (e qui ho già fatto una pulita...) alcune risorse da prendere in considerazione [30], [31]; BUT, I hope for a thing like this: [32]; devo dare importanza alle performance, migliorarle piuttosto/oltre che alla privacy; NB: che ho scoperto che i parametri in about:config sono ssalvabili nel file user.js, quindi non dovrò più segnarmi sul file FF tweaks cosa fare a mano (quantomeno non tutto...); a questo punto aggiornare le istruzioni di questa pagina! E anche i file di backup su Dropbox!!
      • un'altra risorsa fondamentale per l'operazione [33]
        • l'idea è: 1, partire da un profilo pulito; 2, fare un backup di pref.js -> pref_ORIG.js; 3, cambiare le impostazione da GUI about:preferences e fare backup di pref.js -> pref_1E.js; 4, fare un diff tramite MELD delle differenze; 5, ... continuare a lavorare sui settaggi nascosti about:config, con backup incrementali del file pref.js -> pref_2E.js, testando la configurazione per diciamo un mese, prima di promuoverla, e partendo dai settaggi più sicuri; FINO A CHE SONO SODDISFATTO!

NEW_2: aggiornare lo script/.bashrc per rispecchiare il cambiamento, la modifica al fatto che il gruppo base-devel non esiste più, ma: "moved to a meta package for base-devel"; the same as for `base`...;

NEW_6: valutare `auto-cpufreq` [34] & se possibile combinazione con TLP [35] [36];

NEW_7: completely disable XWayland [37]; I hope that will be done upstream in the near future; if not, do it by yourself! this means all app would must work in Wayland!!

NEW_8: valutare VIVALDI due to its customizeability

NEW_9: ho scoperto che gpaste non funziona nativamente con wayland, infatti viene lanciato Xwayland; sostituito con estensione di gnome-shell; in TESTING al momento, su AUR anche altrimenti installa direttamente da extension [gnome-shell-extension-clipboard-indicator]

NEW_10: disable XWayland completely `$ systemctl --user edit org.gnome.Shell@wayland.service` ```[Service] ExecStart= ExecStart=/usr/bin/gnome-shell --no-x11``` [38]

NEW_11: easytag is going to be replaced: evaluating `tagger` but it has a bunch of *brutte* deps and `eartag`

NEW_12: installed `mglru-desktop-settings` and trying if it helps performance (as of 04-10-2023);

NEW_13: add a section `GNOME extensions` since I started installing extaension not from repo/AUR but directly from extension manager; e.g. (Hibernate Status Button);

NEW_14: add somewhere this `https://github.com/albfan/miraclecast` provides .sh test for testing P2P capabilities of Wi-Fi driver mandatory for screencasting;

NEW_15: fix bash's history [39];

NEW_16: gnome-terminal is porting in GTK4 (probably v46); when it's done, try it again (today I switched to console...) [40];

NEW_17: [41] but requiring EFISTUB, it a matter for when new HW;