#+TITLE: Installation #+SETUPFILE: ./setup/org-setup-file.org * Overview This file documents how to set up a fresh Arch Linux installation. It tangles several install scripts: - =~/install-main.sh= — core desktop environment and tools - =~/install-desktop.sh= — tangle and reload the full desktop environment (i3, polybar, sxhkd, picom, rofi, kitty, bash, X11) - =~/install-mail.sh= — mail setup (mbsync, msmtp, neomutt, mu) - =~/install-calendar.sh= — calendar and contacts (vdirsyncer, khal, khard) - =~/install-music.sh= — music server and client (mopidy, ncmpcpp) - =~/install-latex.sh= — LaTeX toolchain (texlive, biber) - =~/install-laptop.sh= — laptop-specific tools (tlp, powertop, thermald) All scripts use =paru -S --needed= to be idempotent (safe to re-run). * Prerequisites ** =git= #+begin_src bash :tangle no sudo pacman -S git #+end_src [[file:git.org][Git]] configuration: =~/.gitconfig=, =~/.gitignore_global= ** =paru= - AUR Helper Must be installed first before running any script: #+begin_src bash :tangle no mkdir -p ~/.local/soft && cd ~/.local/soft sudo pacman -S --needed base-devel git clone https://aur.archlinux.org/paru.git cd paru makepkg -si #+end_src After that, the =paru= folder may be removed. * Desktop Install Script :PROPERTIES: :header-args:bash: :tangle scripts/install-desktop.sh :shebang "#!/bin/bash" :mkdirp yes :END: Installs packages and tangles configs for the core desktop environment. Run this after =paru= is available to get a working, familiar environment fast. #+begin_src bash set -euo pipefail DOTFILES="${HOME}/.config/literate-dotfiles" tangle() { emacsclient -e "(org-babel-tangle-file \"${DOTFILES}/$1\")" \ || emacs --batch -l org --eval "(org-babel-tangle-file \"${DOTFILES}/$1\")" } #+end_src ** Packages #+begin_src bash echo "==> Desktop packages" paru -S --needed \ i3-wm \ sxhkd \ polybar \ picom \ dunst \ rofi rofi-calc dmenu \ kitty \ bash bash-completion \ zoxide \ nerd-fonts-hack noto-fonts-emoji \ xorg-xrandr arandr \ xautocfg \ arc-gtk-theme xcursor-breeze \ feh xwallpaper #+end_src ** Tangle Configs #+begin_src bash echo "==> Tangling desktop configs" tangle "xconfig.org" # ~/.Xresources, ~/.xprofile, ~/.config/X11/xinitrc tangle "bash.org" # ~/.bashrc, ~/.bash_profile, ~/.profile tangle "kitty.org" # ~/.config/kitty/kitty.conf tangle "i3.org" # ~/.config/i3/config tangle "sxhkd.org" # ~/.config/sxhkd/sxhkdrc tangle "polybar.org" # ~/.config/polybar/config.ini + scripts tangle "compositor.org" # ~/.config/picom/picom.conf tangle "rofi.org" # ~/.config/rofi/config.rasi tangle "binaries.org" # ~/.local/bin/* scripts tangle "binaries-private.org" # ~/.local/bin/* scripts #+end_src ** Reload If already running inside i3, restart in place — no need to log out: #+begin_src bash echo "==> Reloading desktop" i3-msg restart 2>/dev/null || echo " (i3 not running, config will apply on next login)" #+end_src * Main Install Script :PROPERTIES: :header-args:bash: :tangle scripts/install-main.sh :shebang "#!/bin/bash" :mkdirp yes :END: #+begin_src bash set -euo pipefail #+end_src ** Shell and Terminal #+begin_src bash echo "==> Shell and Terminal" paru -S --needed \ bash bash-completion zsh \ kitty \ tmux #+end_src [[file:bash.org][Bash]] configuration: =~/.bashrc=, =~/.bash_profile=, =~/.config/bash/=, =~/.profile= ** Fonts #+begin_src bash echo "==> Fonts" paru -S --needed \ nerd-fonts-hack \ noto-fonts-emoji #+end_src Default fonts: Monospace/Serif/Sans = =Hack Nerd Font=. ** Text Editors #+begin_src bash echo "==> Text Editors" paru -S --needed \ neovim python-pynvim nodejs-neovim \ emacs \ aspell aspell-en aspell-fr #+end_src Neovim config: [[file:vim.org][vim.org]] Install Doom Emacs framework: #+begin_src bash :tangle no git clone --depth 1 https://github.com/hlissner/doom-emacs ~/.emacs.d ~/.emacs.d/bin/doom install #+end_src Emacs config: [[./doom.org][doom.org]] ** Security: GnuPG and Pass #+begin_src bash echo "==> GnuPG and Pass" paru -S --needed \ gnupg gnome-keyring \ pass rofi-pass pass-git-helper #+end_src Generate a GPG key: #+begin_src bash :tangle no gpg --full-gen-key #+end_src To cache the passphrase, edit =~/.local/share/gnupg/gpg-agent.conf=: #+begin_src conf :tangle no default-cache-ttl 60480000 max-cache-ttl 60480000 #+end_src Initialize the password store: #+begin_src bash :tangle no pass git init pass git remote add origin https://github.com/tdehaeze/pass.git #+end_src ** SSH Generate a new SSH key: #+begin_src bash :tangle no ssh-keygen -t ed25519 -C "dehaeze.thomas@gmail.com" eval "$(ssh-agent -s)" ssh-add ~/.ssh/id_ed25519 #+end_src ** Window Manager and Desktop #+begin_src bash echo "==> Window Manager and Desktop" paru -S --needed \ i3-wm \ sxhkd \ polybar \ picom \ dunst \ rofi rofi-calc dmenu \ xautocfg \ xorg-xrandr arandr #+end_src - i3 config: [[file:i3.org][i3.org]] - sxhkd config: [[file:sxhkd.org][sxhkd.org]] - polybar config: [[file:polybar.org][polybar.org]] - compositor config: [[file:compositor.org][compositor.org]] - notifications config: [[file:notifications.org][notifications.org]] ** File Manager #+begin_src bash echo "==> File Manager" paru -S --needed yazi #+end_src Yazi config: [[file:yazi.org][yazi.org]] ** Terminal Utilities #+begin_src bash echo "==> Terminal Utilities" paru -S --needed \ fd ripgrep fzf \ xclip xsel \ atool unzip \ trash-cli \ man-db \ neofetch #+end_src ** Browser #+begin_src bash echo "==> Browser" paru -S --needed \ qutebrowser python-adblock pdfjs \ firefox-developer-edition passff-host #+end_src Qutebrowser config: [[file:qutebrowser.org][qutebrowser.org]] Spell checking for qutebrowser: #+begin_src bash :tangle no /usr/share/qutebrowser/scripts/dictcli.py install fr-FR /usr/share/qutebrowser/scripts/dictcli.py install en-US #+end_src ** Media #+begin_src bash echo "==> Media" paru -S --needed \ mpv \ jellyfin-tui \ nsxiv \ zathura zathura-pdf-mupdf zathura-djvu zathura-ps zathura-cb \ pdfpc \ gst-plugins-ugly gst-plugins-good gst-plugins-base-libs gst-plugins-base gst-plugins-bad gst-libav #+end_src ** Sound (PipeWire) #+begin_src bash echo "==> PipeWire" paru -S --needed \ pipewire pipewire-alsa pipewire-audio pipewire-jack pipewire-pulse \ wireplumber \ pwvucontrol #+end_src Enable PipeWire services: #+begin_src bash :tangle no systemctl --user enable --now pipewire.socket systemctl --user enable --now pipewire-pulse.socket systemctl --user enable --now wireplumber.service #+end_src ** PDF and Image Utilities #+begin_src bash echo "==> PDF and Image Utilities" paru -S --needed \ pdf2svg pdftk pdfarranger \ imagemagick \ maim flameshot \ unclutter \ poppler #+end_src ** Office #+begin_src bash echo "==> Office" paru -S --needed \ onlyoffice-bin \ libreoffice-fresh libreoffice-fresh-fr \ inkscape #+end_src ** System Utilities #+begin_src bash echo "==> System Utilities" paru -S --needed \ udiskie \ blueman \ sshfs \ xwallpaper \ sof-firmware \ usbutils \ xautolock \ npm \ xorg-xkill \ syncthing \ wireguard-tools \ gotify-dunst-git \ gomuks \ yt-dlp \ python ipython python-pip #+end_src Enable Syncthing: #+begin_src bash :tangle no systemctl --user enable --now syncthing #+end_src ** GTK Theme #+begin_src bash echo "==> GTK Theme" paru -S --needed \ lxappearance \ arc-gtk-theme \ xcursor-breeze \ gtk2fontsel #+end_src ** Misc Utilities #+begin_src bash echo "==> Misc Utilities" paru -S --needed \ screenkey \ xwallpaper \ highlight-pointer-git \ mpd #+end_src ** Systemd Services Enable custom systemd services (tangle [[file:systemd.org][systemd.org]] first): #+begin_src bash :tangle no systemctl --user enable --now homelab-tunnel systemctl --user enable --now esrf-tunnel systemctl --user enable --now syncthing #+end_src ** After Install Enable TRIM (SSD only): #+begin_src bash :tangle no sudo systemctl enable --now fstrim.timer #+end_src ** Default Applications #+begin_src bash :tangle no xdg-mime default qutebrowser.desktop x-scheme-handler/http xdg-mime default qutebrowser.desktop x-scheme-handler/https #+end_src * Mail Install Script :PROPERTIES: :header-args:bash: :tangle scripts/install-mail.sh :shebang "#!/bin/bash" :mkdirp yes :END: Mail setup documentation: [[file:mail.org][mail.org]] #+begin_src bash set -euo pipefail #+end_src ** Packages #+begin_src bash echo "==> Mail packages" paru -S --needed \ isync \ msmtp \ neomutt \ mu \ lynx urlview #+end_src ** Initialize mu #+begin_src bash :tangle no echo "==> Initializing mu index" mu init -m ~/.mail/ mu index #+end_src ** Systemd Timers #+begin_src bash :tangle no echo "==> Enabling mail timers" systemctl --user enable --now checkmail.timer systemctl --user enable --now syncmail.timer #+end_src * Calendar Install Script :PROPERTIES: :header-args:bash: :tangle scripts/install-calendar.sh :shebang "#!/bin/bash" :mkdirp yes :END: Calendar/contact documentation: [[file:calendar-contact.org][calendar-contact.org]] #+begin_src bash set -euo pipefail #+end_src ** Packages #+begin_src bash echo "==> Calendar and contacts packages" paru -S --needed \ vdirsyncer \ khal \ khard \ mu #+end_src ** Systemd Timer #+begin_src bash :tangle no echo "==> Enabling vdirsyncer timer" systemctl --user enable --now vdirsyncer.timer #+end_src * LaTeX Install Script :PROPERTIES: :header-args:bash: :tangle scripts/install-latex.sh :shebang "#!/bin/bash" :mkdirp yes :END: #+begin_src bash set -euo pipefail #+end_src ** Packages #+begin_src bash echo "==> LaTeX packages" paru -S --needed \ texlive-most tllocalmgr-git \ biber #+end_src Custom packages/classes go in =~/.local/share/texmf/tex/latex/local/=. After adding new packages, run =sudo texhash=. * Laptop Install Script :PROPERTIES: :header-args:bash: :tangle scripts/install-laptop.sh :shebang "#!/bin/bash" :mkdirp yes :END: #+begin_src bash set -euo pipefail #+end_src ** Power Management #+begin_src bash echo "==> Laptop power management" paru -S --needed \ powertop \ tlp \ thermald #+end_src #+begin_src bash sudo systemctl enable --now tlp sudo systemctl enable --now tlp-sleep sudo systemctl enable --now thermald sudo tlp start #+end_src ** Lid Open/Close Configure in =/etc/systemd/logind.conf=. See [[https://wiki.archlinux.org/index.php/Power_management][Arch Wiki: Power management]]. * Matlab Matlab is installed manually via [[https://github.com/mathworks-ref-arch/matlab-dockerfile][MPM]]: #+begin_src bash :eval no :tangle no wget https://www.mathworks.com/mpm/glnxa64/mpm chmod +x ./mpm ./mpm install --inputfile=./mpm_input_r2024b.txt #+end_src The MPM input file: #+begin_src conf :tangle ~/Downloads/mpm_input_r2024b.txt ######################################################################## ## Configuration File for Installing or Downloading R2024b MathWorks Products ######################################################################## destinationFolder=/home/thomas/.local/soft/Matlab/R2024b ######################################################################## ## PRODUCTS ######################################################################## #product.5G_Toolbox #product.AUTOSAR_Blockset #product.Aerospace_Blockset #product.Aerospace_Toolbox #product.Antenna_Toolbox #product.Audio_Toolbox #product.Automated_Driving_Toolbox #product.Bioinformatics_Toolbox #product.Bluetooth_Toolbox #product.C2000_Microcontroller_Blockset #product.Communications_Toolbox #product.Computer_Vision_Toolbox product.Control_System_Toolbox product.Curve_Fitting_Toolbox #product.DDS_Blockset #product.DSP_HDL_Toolbox #product.DSP_System_Toolbox #product.Data_Acquisition_Toolbox #product.Database_Toolbox #product.Datafeed_Toolbox #product.Deep_Learning_HDL_Toolbox #product.Deep_Learning_Toolbox #product.Econometrics_Toolbox #product.Embedded_Coder #product.Filter_Design_HDL_Coder #product.Financial_Instruments_Toolbox #product.Financial_Toolbox #product.Fixed-Point_Designer #product.Fuzzy_Logic_Toolbox #product.GPU_Coder #product.Global_Optimization_Toolbox #product.HDL_Coder #product.HDL_Verifier #product.Image_Acquisition_Toolbox #product.Image_Processing_Toolbox #product.Industrial_Communication_Toolbox #product.Instrument_Control_Toolbox #product.LTE_Toolbox #product.Lidar_Toolbox product.MATLAB product.MATLAB_Coder product.MATLAB_Compiler #product.MATLAB_Compiler_SDK product.MATLAB_Parallel_Server #product.MATLAB_Production_Server #product.MATLAB_Report_Generator #product.MATLAB_Test #product.MATLAB_Web_App_Server #product.Mapping_Toolbox #product.Medical_Imaging_Toolbox #product.Mixed-Signal_Blockset #product.Model_Predictive_Control_Toolbox #product.Model-Based_Calibration_Toolbox #product.Motor_Control_Blockset #product.Navigation_Toolbox product.Optimization_Toolbox product.Parallel_Computing_Toolbox #product.Partial_Differential_Equation_Toolbox #product.Phased_Array_System_Toolbox #product.Polyspace_Bug_Finder #product.Polyspace_Bug_Finder_Server #product.Polyspace_Code_Prover #product.Polyspace_Code_Prover_Server #product.Polyspace_Test #product.Powertrain_Blockset #product.Predictive_Maintenance_Toolbox #product.RF_Blockset #product.RF_PCB_Toolbox #product.RF_Toolbox #product.ROS_Toolbox #product.Radar_Toolbox #product.Reinforcement_Learning_Toolbox #product.Requirements_Toolbox #product.Risk_Management_Toolbox #product.Robotics_System_Toolbox product.Robust_Control_Toolbox #product.Satellite_Communications_Toolbox #product.Sensor_Fusion_and_Tracking_Toolbox #product.SerDes_Toolbox #product.Signal_Integrity_Toolbox product.Signal_Processing_Toolbox #product.SimBiology #product.SimEvents product.Simscape #product.Simscape_Battery #product.Simscape_Driveline product.Simscape_Electrical #product.Simscape_Fluids product.Simscape_Multibody product.Simulink #product.Simulink_3D_Animation #product.Simulink_Check product.Simulink_Coder product.Simulink_Compiler product.Simulink_Control_Design #product.Simulink_Coverage #product.Simulink_Design_Optimization #product.Simulink_Design_Verifier product.Simulink_Desktop_Real-Time #product.Simulink_Fault_Analyzer #product.Simulink_PLC_Coder product.Simulink_Real-Time #product.Simulink_Report_Generator #product.Simulink_Test #product.SoC_Blockset #product.Spreadsheet_Link #product.Stateflow #product.Statistics_and_Machine_Learning_Toolbox product.Symbolic_Math_Toolbox #product.System_Composer product.System_Identification_Toolbox #product.Text_Analytics_Toolbox #product.UAV_Toolbox #product.Vehicle_Dynamics_Blockset #product.Vehicle_Network_Toolbox #product.Vision_HDL_Toolbox #product.WLAN_Toolbox #product.Wavelet_Toolbox #product.Wireless_HDL_Toolbox #product.Wireless_Testbench ######################################################################## ## CHECKSUM ######################################################################## ?checksum=UjIwMjRi #+end_src Add Matlab binaries to PATH: #+begin_src bash :eval no :tangle no ln -s ~/.local/soft/Matlab/R2024b/bin/mex ~/.local/bin ln -s ~/.local/soft/Matlab/R2024b/bin/matlab ~/.local/bin ln -s ~/.local/soft/Matlab/R2024b/bin/glnxa64/mlint ~/.local/bin #+end_src Fix for gnutls crash on Arch (R2024b), see [[https://bbs.archlinux.org/viewtopic.php?id=306939][bbs.archlinux.org #10]]: #+begin_src bash :eval no :tangle no MATLABPATH=$HOME/.local/soft/Matlab/R2024B/bin/glnxa64/ GNUTLSPATH=/tmp/gnutls-3.8.9-1-x86_64.pkg wget https://archive.archlinux.org/packages/g/gnutls/gnutls-3.8.9-1-x86_64.pkg.tar.zst mkdir -p "${GNUTLSPATH}" tar -xvf gnutls-3.8.9-1-x86_64.pkg.tar.zst -C ${GNUTLSPATH} mkdir "${MATLABPATH}"/gnutls cp -a "${GNUTLSPATH}"/usr/lib/* "${MATLABPATH}"/gnutls/ cd "${MATLABPATH}" ln -s gnutls/* ./ #+end_src See also the [[https://wiki.archlinux.org/title/MATLAB][Arch Wiki]] for other issues. * Useful Reference ** Readline shortcuts | Keyboard | Description | |------------+--------------------------------| | =Ctrl+a= | Move to start of line | | =Ctrl+e= | Move to end of line | | =Alt+b/f= | Move word left/right | | =Ctrl+u= | Cut to start of line | | =Ctrl+k= | Cut to end of line | | =Ctrl+w= | Cut word before cursor | | =Ctrl+y= | Paste | | =Ctrl+r= | Reverse history search | | =Alt+r= | Restore original line | ** Archive and Extract Use =apack= / =aunpack= (from =atool=): | Command | Usage | |-------------------------------+--------------------------------| | =aunpack foobar.tar.gz= | Extract all files from archive | | =apack myarchive.zip foo bar= | Create zip archive | ** Hardware | =dmesg= | Detected hardware and boot messages | | =lshw= | Display information on hardware | | =lsusb -tv= | Show USB devices | ** Network | =ip addr show= | Show all network interfaces | | =netstat -tulp= | List all active ports | * Resources ** Dotfiles - https://github.com/LukeSmithxyz/voidrice - https://github.com/wincent/wincent - https://github.com/korolr/dotfiles - https://github.com/addy-dclxvi/almighty-dotfiles ** Linux Software Lists - [[https://github.com/k4m4/terminals-are-sexy][terminals-are-sexy]] - [[https://wiki.archlinux.org/index.php/List_of_applications][Arch Wiki: List of applications]] - https://github.com/jlevy/the-art-of-command-line