HON95 пре 3 година
родитељ
комит
a356aee242
6 измењених фајлова са 441 додато и 13 уклоњено
  1. 11 0
      config/general/linux-examples.md
  2. 48 4
      config/pc/applications.md
  3. 381 0
      config/pc/arch-i3.md
  4. 0 5
      config/pc/kubuntu.md
  5. 0 4
      config/pc/manjaro-kde.md
  6. 1 0
      index.md

+ 11 - 0
config/general/linux-examples.md

@@ -114,6 +114,17 @@ breadcrumbs:
     - Remvoe key: `apt-key del <key-id>`
         - The 8-digit hex key ID may either be found on `pub` line or as the last 8 hex digits on the continuation line.
 
+#### Pacman (Arch)
+
+- Full system upgrade: `pacman -Syu`
+- Search package: `pacman -Ss <package-name>`
+- Show package info: `pacman -Si <package>`
+- Install package: `pacman -S <packages>`
+    - Never use `-Sy` to avoid partial upgrades.
+- Remove package: `pacman -R <packages>`
+    - Remove orphans too: `-s`
+    - Purge configurations: `-n`
+
 ### Network
 
 - Monitor usage:

+ 48 - 4
config/pc/applications.md

@@ -66,6 +66,46 @@ breadcrumbs:
 
 - To save, use the "save current configuration" button and save it to `/etc/X11/xorg.conf`.
 
+## i3
+
+### Installation
+
+See my [Arch setup with i3](../arch-i3/).
+
+### Configuration
+
+#### Keyboard Bindings
+
+- Specified using the `bindsym` statements for key symbols (`a` etc.) or `bindcode` statements for physical button numbers.
+- Use `exec <executable> [args]` to run an application. Use `exec --no-startup-id` to avoid startup notifications ("loading" cursor etc.), for programs that don't support that (the "loading" cursor doesn't go away).
+
+### Usage
+
+Assuming default keybinds.
+
+#### Files
+
+- User config: `~/.config/i3/config`
+
+#### Basics
+
+- Exit: `Mod+Shift+E`
+- Reload: `Mod+Shift+R`
+- Open terminal: `Mod+Enter`
+- Open application (using dmenu/rofi): `Mod+D`
+- Exit application: `Mod+Shift+Q`
+
+#### Navigation and Layout
+
+- Move between windows: `Mod+ArrowKey`
+- Change mode:
+    - Tiling mode (standard): `Mod+E`
+    - Stacking mode: `Mod+S`
+    - Tabbed mode: `Mod+W`
+- Workspaces:
+    - Change workspace: `Mod+<1-9>`
+    - Move window to another workspace: `Mod+Shift+<1-9>`
+
 ## Piper (Linux)
 
 GUI for configuring gaming mice.
@@ -204,9 +244,9 @@ Note: Since Steam requires 32-bit (i386) variants of certain NVIDIA packages, an
     - Windows: `%APPDATA%\Code\User\settings.json`
 - [Example](https://github.com/HON95/configs/blob/master/vscode/settings.json).
 
-## ZSH (personal) (Linux)
+## ZSH (Linux)
 
-This is my personal ZSH setup using Oh-My-ZSH with the Powerlevel9k theme and Hack font.
+This is my ZSH setup preference, using Oh-My-ZSH with the Powerlevel10k theme and some recommended font.
 
 1. Install ZSH:
     1. `apt install zsh`
@@ -214,7 +254,9 @@ This is my personal ZSH setup using Oh-My-ZSH with the Powerlevel9k theme and Ha
     1. See [ohmyz.sh](https://ohmyz.sh/).
     1. When it asks, set it as your default shell. This won't take effect until the next login.
 1. Setup Powerlevel10k theme:
-    1. Download and install the suggested fonts (manually is simplest): [Fonts (powerlevel10k)](https://github.com/romkatv/powerlevel10k#fonts)
+    1. Download and install the suggested fonts: [Fonts (powerlevel10k)](https://github.com/romkatv/powerlevel10k#fonts)
+        - For KDE Plasma, download and open with the font installer.
+        - For manual installation, move the `.ttf` files to `/usr/share/fonts/TTF/`.
     1. Open a new terminal window and set change the profile to use the new font.
     1. Clone the theme: `git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~/.oh-my-zsh/themes/powerlevel10k`
     1. In `~/.zshrc`, set `ZSH_THEME="powerlevel10k/powerlevel10k"`.
@@ -222,9 +264,11 @@ This is my personal ZSH setup using Oh-My-ZSH with the Powerlevel9k theme and Ha
     1. Configure the theme (if it didn't automatically start): `p10k configure`
 1. Make zprofile include profile (to avoid breaking certain things):
     1. In `~/.zprofile`, add: `emulate sh -c "source /etc/profile"`
+1. Setup plugins:
+    1. In `.zshrc`, set e.g. `plugins=(git docker docker-compose golang rust cargo rustup)`.
 1. Setup syntax highlighting plugin:
     1. Clone it: `git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ~/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting`
-    1. Add it to `plugins` in `.zshrc` (e.g. `plugins=(git zsh-syntax-highlighting)`).
+    1. Add `zsh-syntax-highlighting` it to `plugins` in `.zshrc`.
 1. Configure `~/.zshrc`:
     1. Example [zshrc](https://github.com/HON95/configs/blob/master/zsh/zshrc).
 

+ 381 - 0
config/pc/arch-i3.md

@@ -0,0 +1,381 @@
+---
+title: Arch (i3)
+breadcrumbs:
+- title: Configuration
+- title: PC
+---
+{% include header.md %}
+
+For Arch with LUKS encrypted root (and boot), using the i3 (gaps) window manager.
+
+### Related Pages
+{:.no_toc}
+
+- [Applications: i3](../applications/#i3)
+
+## Resources
+
+### Arch
+
+- [Installation guide (Arch Wiki)](https://wiki.archlinux.org/title/Installation_guide)
+- [General recommendations (Arch Wiki)](https://wiki.archlinux.org/title/General_recommendations)
+- [Frequently asked questions (Arch Wiki)](https://wiki.archlinux.org/title/Frequently_asked_questions)
+- [List of applications (Arch Wiki)](https://wiki.archlinux.org/title/List_of_applications)
+- [dm-crypt/Encrypting an entire system (Arch Wiki)](https://wiki.archlinux.org/title/Dm-crypt/Encrypting_an_entire_system)
+
+### i3
+
+- [i3 User's Guide](https://i3wm.org/docs/userguide.html)
+
+## TODO
+
+- The "i3 User's Guide"
+- Plymouth
+- LightDM "Multiple-monitor setup"
+- picom compositor
+- https://wiki.archlinux.org/title/Power_management
+- https://wiki.archlinux.org/title/Display_Power_Management_Signaling
+- Screen snippet tool
+
+## Installation
+
+### Live Image Install
+
+1. (Pre install) Download and burn an Arch ISO:
+    - [Arch downloads](https://archlinux.org/download/).
+    - Always verify the ISO's hash or PGP signature found on the Arch download page (not from the download mirrors).
+1. (Pre install) Disable secure boot in the BIOS settings.
+1. Boot into the Arch live image:
+    1. Make sure you're in UEFI BIOS mode. Disable CSM in the BIOS settings if you don't need legacy BIOS for anything, to avoid future complications.
+    1. Avoid broken display drivers: In the GRUB bootloader menu, press `E` on the main entry, add `nomodeset` at the end, and press enter to boot.
+1. Set the keymap:
+    1. List available keymaps: `ls /usr/share/kbd/keymaps/**/*.map.gz | less`
+    1. Find the appropriate keymap, e.g. the Norwegian `no` for `/usr/share/kbd/keymaps/i386/qwerty/no.map.gz`
+    1. Load: `loadkeys <keymap>` (e.g. `loadkeys no`)
+1. Verify the (UEFI) boot mode:
+    1. Check `efivar --list` or `ls /sys/firmware/efi/efivars`. If either exists, it's in UEFI mode.
+1. Setup networking:
+    1. Note: For cabled Ethernet with DHCP, it should already be working. For WLAN or exotic setups, check the wiki.
+    1. Test it somehow (e.g. with `ping` or `curl`).
+1. Setup time:
+    1. Enable NTP: `timedatectl set-ntp true`
+    1. Check the "synchronized" line from `timedatectl`.
+1. Partition the main disk (for LUKS encryption):
+    1. Find the main disk: `lsblk`
+    1. (Optional) Overwrite the full disk to get rid of all traces of the previous install: `dd if=/dev/zero of=/dev/<disk> bs=1M conv=fsync status=progress`
+    1. See the main disk partition table below for an overview of the partition to create.
+    1. Setup and partition the disk: `fdisk /dev/<disk>`
+        1. Create a new GPT partition table: `g`
+        1. Start the new partition wizard (for each partition): `n`
+            - Partition number: See table.
+            - First sector: Default.
+            - Last sector (effectively partition size): See table. e.g. `+512M` for a 512MiB volume or nothing to fill it all.
+        1. Set the partition type (for each partition): `t`
+            - Partition number and type: See table.
+        1. Show partitions: `p`
+        1. Write to disk and exit: `w`
+1. Format the ESP:
+    1. `mkfs.fat -F32 /dev/<partition-1>`
+1. Create encrypted root volume:
+    1. Note: GRUB has limited support for LUKS2, so use LUKS1.
+    1. Check which cryptohash and encryption algorithms are fastest on the system: `cryptsetup benchmark`
+    1. Create: `cryptsetup luksFormat --type=luks1 --use-random -h sha256 -i 5000 -c aes-xts-plain64 -s 256 /dev/<partition-2>` (example parameters)
+    1. Enter the password to unlock the system during boot.
+    1. Note: See the step way down for avoiding entering the password twice during boot.
+1. Unlock the encrypted root volume:
+    1. `cryptsetup luksOpen /dev/<partition> crypt_root` (for example name `crypt_root`)
+1. Format the root volume:
+    1. `mkfs.ext4 /dev/mapper/crypt_root`
+1. Mount the volumes:
+    - Mount root: `mount /dev/mapper/crypt_root /mnt`
+    - Mount ESP: `mkdir -p /mnt/boot/efi && mount /dev/<partition> /mnt/boot/efi`
+1. Install packages to the new root:
+    - Base command and packages: `pacstrap /mnt base linux linux-firmware vim sudo bash-completion man-db man-pages xdg-utils xdg-user-dirs`
+    - **TODO** Maybe: `wpa_supplicant networkmanager`
+1. Generate the fstab file:
+    1. `genfstab -U /mnt >> /mnt/etc/fstab`
+    1. Check it for errors or duplicates.
+1. Chroot into the new root:
+    1. `arch-chroot /mnt`
+1. Setup localization:
+    1. Set time zone: `ln -sf /usr/share/zoneinfo/<region>/<city> /etc/localtime`
+    1. Update the hardware clock (using UTC): `hwclock --systohc`
+    1. Uncomment locales to generate: `vim /etc/locale.gen`
+        - Always include `en_US.UTF-8 UTF-8`.
+    1. Generate selected locales: `locale-gen`
+    1. Set the locale: In `/etc/locale.conf`, set `LANG=<locale>` (e.g. `LANG=en_US.UTF-8`).
+    1. Set the keyboard layout: In `/etc/vconsole.conf`, set `KEYMAP=<keymap>` (e.g. `KEYMAP=no`).
+1. Set hostname:
+    1. `echo <hostname> > /etc/hostname`
+1. Set the root password:
+    1. `passwd`
+1. Create the initial ramdisk:
+    1. Add extra hooks: In `/etc/mkinitcpio.conf`, find the `HOOKS=()` line. Add `encrypt` after `block` and `keymap` after `keyboard` (ordering matters).
+    1. Create the initial ramdisk: `mkinitcpio -P`
+1. Setup GRUB:
+    1. Install bootloader: `pacman -S grub efibootmgr`
+    1. Install CPU microcode updates: `pacman -S X-ucode` (for `X={amd, intel}`)
+    1. Enable encrypted disk support: In `/etc/default/grub`, set `GRUB_ENABLE_CRYPTODISK=y`.
+    1. Find the UUID of the encrypted root partition: `blkid`
+    1. Add kernel parameters for the encrypted root (e.g. `/dev/sda2`): In `/etc/default/grub`, in the `GRUB_CMDLINE_LINUX` variable, add `cryptdevice=UUID=<device-UUID>:crypt_root root=/dev/mapper/crypt_root`.
+    1. Install GRUB to ESP: `grub-install --target=x86_64-efi --efi-directory=/boot/efi`
+    1. Generate GRUB config: `grub-mkconfig -o /boot/grub/grub.cfg`
+1. Exit the chroot and reboot:
+    1. `exit`
+    1. `reboot`
+1. Wait for the GRUB screen.
+
+### Post Install Setup
+
+1. Boot into the newly installed system:
+    1. Avoid broken display drivers: In the GRUB bootloader menu, press `E` on the main entry and add `nomodeset` at the end of the `linux` line. Press `Ctrl+X` to continue. After proper display drivers are installed, this is no longer required.
+1. (Optional) Disable the beeper:
+    1. Unload the module: `rmmod pcspkr`
+    1. Blacklist the module: `echo blacklist pcspkr > /etc/modprobe.d/nobeep.conf`
+1. Setup default editor:
+    - Create a new profile file: `/etc/profile.d/editor.sh`
+    - Set the editor: `export EDITOR=vim`
+    - Set the visual editor: `export VISUAL=vim`
+1. Setup wired networking:
+    1. Enable and start: `systemctl enable --now systemd-networkd`
+    1. Add a config for the main interface (or all interfaces): See the section with an example below.
+    1. Restart: `systemctl restart systemd-networkd`
+    1. Wait for connectivity (see `ip a`).
+1. Setup DNS server(s):
+    1. `echo nameserver 1.1.1.1 >> /etc/resolv.conf` (Cloudflare)
+    1. `echo nameserver 2606:4700:4700::1111 >> /etc/resolv.conf` (Cloudflare)
+1. Setup Pacman:
+    1. Enable color: In `/etc/pacman.conf`, uncomment `Color`.
+1. Update the system and install useful stuff:
+    1. Upgrade: `pacman -Syu`
+    1. Install useful tools: `pacman -S --needed most zsh vim man-db man-pages htop bash-completion p7zip git jq rsync openssh tmux screen reflector`
+1. Install display driver:
+    - For NVIDIA Maxwell and newer GPUs: `pacman -S nvidia nvidia-utils nvidia-settings`.
+    - (Optional) For NVIDIA CUDA (in addition to driver): `pacman -S cuda`
+    - For AMD GPUs, older NVIDIA GPUs and other GPUs, check the wiki.
+1. Avoid having to enter the encryption password twice during boot:
+    1. Note: To avoid entering the password once for GRUB and then for the initramfs, we can create a keyfile and embed it into the initramfs. If the keyfile fails, it will fall back to asking for a password again.
+    1. Secure the boot dir: `chmod 700 /boot`
+    1. Generate keyfile:
+        1. `mkdir -p /root/.keys && chmod 700 /root/.keys`
+        1. `dd if=/dev/random of=/root/.keys/crypt_root bs=2048 count=1 iflag=fullblock`
+        1. `chmod 600 /root/.keys/crypt_root`
+    1. Add key to LUKS: `cryptsetup luksAddKey /dev/<partition> /root/.keys/crypt_root`
+    1. Add key to initramfs: In `/etc/mkinitcpio.conf`, set `FILES=(/root/.keys/crypt_root)`.
+    1. Recreate initramfs: `mkinitcpio -P`
+    1. Add extra kernel parameters for the keyfile: In `/etc/default/grub`, in the `GRUB_CMDLINE_LINUX` variable, add `cryptkey=rootfs:/root/.keys/crypt_root`.
+    1. Update GRUB config: `grub-mkconfig -o /boot/grub/grub.cfg`
+    1. Reboot to make sure it works. If not, it should fall back to the extra password prompt.
+1. Setup sudo:
+    1. Note: Both the `wheel` and `sudo` groups are commonly used for giving sudo access, but I personally prefer `sudo` since `wheel` _may_ also be used by polkit rules, su (`pam_wheel`), etc.
+    1. Install: `pacman -S sudo`
+    1. Add the sudo group: `groupadd -r sudo`
+    1. Enter the config: `EDITOR=vim visudo`
+    1. Add line to allow sudo group without password: `%sudo ALL=(ALL) NOPASSWD: ALL`
+    1. (Later) Give users sudo access through the group: `usermod -aG sudo <user>`
+1. Add a personal user:
+    1. Create the user and add it to relevant groups: `useradd -m -G sudo,adm,sys,uucp,proc,systemd-journal <user>`
+    1. Set its password: `passwd <user>`
+    1. **TODO** Required to run `xdg-user-dirs-update` manually, at least before a DE/WM is installed?
+    1. Relog as the new user, both to make sure that it's working and because some next steps require a non-root user.
+1. Install yay to access the AUR:
+    1. Note: This needs to be done as non-root.
+    1. Install requirements: `pacman -S --needed base-devel git`
+    1. Clone and enter: `git clone https://aur.archlinux.org/yay.git && cd yay`
+    1. Install: `makepkg -si`
+    1. Remove the tmp. repo: `cd .. && rm -rf yay`
+    1. Idk (once): `yay -Y --gendb`
+1. Enable early numlock (initramfs phase):
+    1. Install package: `yay -S mkinitcpio-numlock`
+    1. Add `numlock` to the `HOOKS` list in `/etc/mkinitcpio.conf` before `encrypt` (assuming the system is encrypted) (e.g. before `modconf`).
+    1. Regenerate the initramfs: `mkinitcpio -P`
+1. Tweak the PAM login faillock:
+    1. Note: It applies to password logins only, not SSH keys.
+    1. Note: To unlock a user, run `faillock --reset --user <user>`.
+    1. Increase the failed login count threshold: In `/etc/security/faillock.conf`, set `deny = 5`.
+1. Setup the local DNS resolver (systemd):
+    1. Note: The systemd-resolve config is `/etc/systemd/resolved.conf`.
+    1. Configure the upstream DNS servers: In the confug, set `DNS=1.1.1.1 2606:4700:4700::1111`.
+    1. (Optional) Set the domain/search string: In the config, set `Domains=<domain>`.
+    1. Enable or disable DNSSEC validation (do if the upstream servers don't): In the config, set `DNSSEC=<yes|no>`.
+    1. Enable and start it: `systemctl enable --now systemd-resolved`
+    1. Setup `resolv.conf`: `ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf`
+    1. Check: `curl google.com`
+1. Setup the NTP client (systemd):
+    1. Note: The default server pool is fine.
+    1. Enable: `timedatectl set-ntp true`
+    1. Check: `timedatectl` (see the "synchronized" field)
+1. Setup firewall (IPTables):
+    1. Install IPTables: `sudo pacman -S iptables`
+    1. Enable the IPTables services: `sudo systemctl enable --now iptables.service ip6tables.service`
+    1. Download my IPTables script (or do it yourself): `curl https://raw.githubusercontent.com/HON95/scripts/master/linux/iptables/iptables.sh -o /etc/iptables/config.sh`
+    1. Make it executable: `chmod +x /etc/iptables/config.sh`
+    1. Modify it.
+    1. Run it: `/etc/iptables/config.sh`
+
+### Setup Xorg, LightDM and i3
+
+1. Setup the Xorg display server (minimal):
+    1. Install: `pacman -S xorg-server xorg-xinit xorg-xrandr`
+    1. Fix the keyboard layout for X11: `sudo localectl set-x11-keymap <keymap>` (e.1. `no`)
+1. Setup the LightDM display manager (aka login manager):
+    1. Note: User-local configuration/profile-stuff should be placed in `~/.xprofile`.
+    1. Install: `pacman -S lightdm`
+    1. Enable: `systemctl enable lightdm`
+1. Setup the LightDM GTK+ greeter (aka login screen) (one of many):
+    1. Note: The GTK+ greeter may be configured in `/etc/lightdm/lightdm-gtk-greeter.conf` or using the `lightdm-gtk-greeter-settings` GUI.
+    1. Install: `pacman -S lightdm-gtk-greeter`
+    1. Set it as the default: In `/etc/lightdm/lightdm.conf`, under the `[Seat:*]` section, set `greeter-session=lightdm-gtk-greeter`.
+    1. (Optional) Set the background: In `/etc/lightdm/lightdm-gtk-greeter.conf`, under the `[greeter]` section, set `background=<image-path>`. The `/usr/share/pixmaps` dir is recommended for storing backgrounds.
+1. **TODO** Setup the Webkit2 greeter with the Litarvan theme.
+1. Enable numlock on by default for LightDM:
+    1. Install: `pacman -S numlockx`
+    1. Configure: In `/etc/lightdm/lightdm.conf`, under the `[Seat:*]` section, set `greeter-setup-script=/usr/bin/numlockx on`.
+1. Install the i3 window manager:
+    1. Note: The "gaps" part will be set up later, i3-gaps will work just like plain i3 for now.
+    1. Install: `pacman -S i3-gaps`
+1. Setup the Polybar system bar:
+    1. Note: i3bar, the default i3 system bar, shows workspaces and tray icons. It can include extra info like IP addresses and resource usage using i3status or i3blocks. Polybar is a replacement for i3bar.
+    1. Disable i3bar: Comment the whole `bar` section of the i3 config.
+    1. Install polybar: `yay -S polybar`
+    1. Create the config: `mkdir ~/.config/polybar && cp /usr/share/doc/polybar/config ~/.config/polybar/config`
+    1. Customize config:
+        - Rename the "example" bar to e.g. "main" (or create one from scratch).
+        - For the bar, set `bottom = true` to move it to the bottom.
+        - For the bar, comment `radius` to disable rounded corners.
+        - For the bar, comment `border-size` to disable the padding/border around the bar.
+        - For the date module, customize how time should appear. "Alt" variants are swapped to when the module is clicked ().
+        - For the network/"eth" module, use `%local_ip6%` for the IPv6 address (one of them).
+    1. Create a startup script: See the section below to use the new "main" bar.
+    1. Add to i3: In the i3 config, add `exec_always --no-startup-id $HOME/.config/polybar/launch.sh`.
+1. Setup the some terminal emulator:
+    1. (Alternative) Setup xfce4-terminal (GUI config, copy-paste, just works):
+        1. Install: `pacman -S xfce4-terminal`
+        1. Update font (example): Install `ttf-hack`, restart the terminal, and change to "Hack" size 10.
+    1. (Alternative) Install urxvt (ugly and useless by default but very customizable and extendable):
+        1. Install: `pacman -S rxvt-unicode`
+        1. Fix the ugliness and uselessness.
+    1. Setup i3: In the i3 config, replace the `bindsym $mod+Return` line with `bindsym $mod+Return exec <terminal>`
+1. Setup the Rofi application launcher:
+    1. Install: `pacman -S rofi`
+    1. Install rofimoji for emoji menu: `pacman -S rofimoji xdotool`
+    1. Find a theme interactively (without selecting any): `rofi-theme-selector` (e.g. `glue_pro_blue`)
+    1. Configure Rofi: Create `~/.config/rofi/config.rasi`, see the example below.
+    1. Configure Rofimoji: Create `~/.config/rofimoji.rc` and set `action = copy` (copy to clipboard by default).
+    1. Disable old i3 dmenu shortcut: In the i3 config, comment the `bindsym $mod+d` line.
+    1. Setup i3 drun shortcut: In the i3 config, set `bindsym $mod+d exec rofi -show drun`.
+    1. Setup i3 window shortcut: In the i3 config, set `bindsym $mod+shift+d exec rofi -show window`.
+    1. Setup i3 emoji shortcut: In the i3 config, set `bindsym $mod+mod1+d exec rofi -modi "emoji:rofimoji" -show emoji`.
+1. Setup fonts:
+    1. `pacman -S noto-fonts notn-fonts-emoji`
+1. Test LightDM and i3:
+    1. Restart LightDM and get pulled into it: `systemctl restart lightdm`
+    1. Select the i3 WM and log in.
+    1. Follow the basic i3 setup wizard:
+        1. Generate a new config.
+        1. `Win` as default modifier.
+    1. Test i3: `Mod+Return` to open terminal, `Mod+D` to open app launcher, etc.
+1. Setup background image:
+    1. Download a desktop image.
+    1. Install the FEH image viewer: `pacman -S feh`
+    1. Update i3: In the i3 config, set `exec_always --no-startup-id feh --bg-scale $HOME/Pictures/mc.jpg` (example image).
+1. Setup i3 gaps:
+    1. Disable window title bar (required): In the i3 config, add `for_window [class=".*"] border pixel 4` to only show the border and no title bar, or `0` to remove the border too.
+    1. Add gaps around windows: In the i3 config, add `gaps inner 8`.
+1. Install clipboard manager:
+    1. `pacman -S xsel`
+1. Setup screen locking:
+    1. **TODO** Multi-monitor support? Haven't tested yet.
+    1. Install the `i3lock-fancy` screen locker: `yay -S i3lock-fancy-git`
+    1. Install the `xss-lock` automatic locker trigger: `pacman -S xss-lock`
+    1. Update i3 to use `i3lock-fancy`: In the i3 config, find the example `xss-lock` line and replace it with `exec --no-startup-id xss-lock --transfer-sleep-lock -- i3lock-fancy --nofork`. i3 needs to be completely restarted for this to start.
+    1. Set a locking keybind in i3: In the i3 config, add `bindsym $mod+l exec --no-startup-id i3lock-fancy --nofork`. This may conflict with some `focus` keybinds you probably don't need, so just remove those.
+
+### Setup Audio
+
+1. Note: We're using the PipeWire sound server, a compatible replacement for both PulseAudio and JACK.
+1. Install ALSA stuff:
+    1. Note: ALSA itself is already provided as built-in kernel modules and ALSA drivers will just work.
+    1. Install ALSA utils and firmware: `pacman -S alsa-utils alsa-firmware`
+1. Install PipeWire (including WirePlumber and adapters):
+    1. Install: `pacman -S pipewire pipewire-alsa pipewire-pulse pipewire-jack pipewire-v4l2 wireplumber pavucontrol`
+    1. Start the PulseAudio adapter (to avoid relogging): `systemctl start --user pipewire-pulse`
+1. Configure inputs and outputs:
+    1. Run `pavucontrol` to configure volumes, inputs, outputs and stuff.
+1. Test it:
+    1. Try playing something from the browser or whatever. It should work.
+1. **TODO** Bluetooth support. Check the PipeWire page.
+1. Install useful audio applications:
+    1. Install the Helvum patchbay to patch nodes and endpoints (inputs and outputs for all audio devices): `pacman -S helvum`
+    1. See the [PipeWire page (Arch Wiki)](https://wiki.archlinux.org/title/PipeWire).
+
+### Setup Applications
+
+1. Setup terminal emulator:
+    1. Already done.
+1. Setup ZSH:
+    1. See [Applications: ZSH](../applications/#zsh-linux) (includes font, theme and plugins).
+1. Setup the VLC video and audio player:w
+    1. `pacman -S vlc`
+1. Setup the Mirage image viewer:
+    1. `yay -S mirage`
+1. Setup the Thunar graphical file manager:
+    1. `pacman -S thunar`
+1. Setup the Ranger terminal file explorer:
+    1. `pacman -S ranger`
+1. Setup the VS Code text editor (and much more):
+    1. `pacman -S code`
+
+### Extra steps (Optional)
+
+- Setup secure boot using your own keys.
+
+### Notes and Snippets
+
+#### Main Disk Partitions
+
+| Partition Number | Size | Type | Description | Mountpoint |
+| - | - | - | - | - |
+| 1 | 512MiB | ESP, 1 (fdisk), EF00 (gdisk) | EFI system partition (ESP) | `/boot/efi/` |
+| 2 | Remaining | Doesn't matter | LUKS | `/` |
+
+**Swap**:
+
+Avoid creating an unencrypted swap partition. Just use a swap file in the (encrypted) root filesystem instead.
+
+#### systemd-networkd Network Config
+
+This example sets up interface `eno1` (the main interface, see `ip a`) to use DHCPv4 and SLAAC/DHCPv6.
+
+`/etc/systemd/network/eno1.network` (example):
+
+```
+[Match]
+Name=eno1
+
+[Network]
+DHCP=yes
+```
+
+#### Polybar Launch Script
+
+```bash
+#!/bin/bash
+
+killall -q polybar
+
+polybar main &>>/tmp/polybar.log
+
+echo "Polybar launched"
+```
+
+#### Rofi Config
+
+```
+configuration {
+    font: "hack 12";
+}
+@theme "glue_pro_blue"
+```
+
+{% include footer.md %}

+ 0 - 5
config/pc/kubuntu.md

@@ -42,11 +42,6 @@ breadcrumbs:
     - Install IPTables stuff: `sudo apt install iptables iptables-persistent netfilter-persistent`
     - (Alternative 1) Create an IPTables script (e.g. [iptables.sh](https://github.com/HON95/scripts/blob/master/linux/iptables/iptables.sh)).
     - (Alternative 2) Run my preset (basics only, no SSH etc.): `curl https://raw.githubusercontent.com/HON95/scripts/master/linux/iptables/iptables.sh | sudo bash`
-1. Firefox:
-    - Disable middle mouse paste by setting `middlemouse.paste` to false in `about:config`.
-    - Enable middle mouse "drag scrolling" by setting `general.autoScroll` to true in `about:config`.
-    - Disable external media keys by setting `media.hardwaremediakeys.enabled` to false in `about:config`.
-    - Install missing language support: `apt install $(check-language-support)`
 
 ### Extra
 

+ 0 - 4
config/pc/manjaro-kde.md

@@ -48,10 +48,6 @@ Nothing special.
     - Make it executable: `chmod +x /etc/iptables/config.sh`
     - Modify it.
     - Run it: `/etc/iptables/config.sh`
-1. Firefox:
-    - Disable middle mouse paste by setting `middlemouse.paste` to false in `about:config`.
-    - Enable middle mouse "drag scrolling" by setting `general.autoScroll` to true in `about:config`.
-    - Disable external media keys by setting `media.hardwaremediakeys.enabled` to false in `about:config`.
 
 ### Extra
 

+ 1 - 0
index.md

@@ -103,6 +103,7 @@ Random collection of config notes and miscellaneous stuff. _Technically not a wi
 
 ### PC
 
+- [Arch (i3)](/config/pc/arch-i3/)
 - [Kubuntu](/config/pc/kubuntu/)
 - [Manjaro (KDE)](/config/pc/manjaro-kde/)
 - [Windows](/config/pc/windows/)