Files
literate-dotfiles/install.org

708 lines
17 KiB
Org Mode

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