add arch to graduated infrastructure
This commit is contained in:
10
README.md
10
README.md
@@ -10,6 +10,7 @@ A project to store homelab stuff.
|
|||||||
- [Supported Projects](#supported-projects)
|
- [Supported Projects](#supported-projects)
|
||||||
- [Graduation Requirements](#graduation-requirements)
|
- [Graduation Requirements](#graduation-requirements)
|
||||||
- [Retirement Requirements](#retirement-requirements)
|
- [Retirement Requirements](#retirement-requirements)
|
||||||
|
- [Order of Operations](#order-of-operations)
|
||||||
|
|
||||||
## Project Lifecycle
|
## Project Lifecycle
|
||||||
|
|
||||||
@@ -76,3 +77,12 @@ Kubernetes projects are helm, kustomize, kubectl, or some other kubernetes compl
|
|||||||
- [ ] A reason for retirement is documented
|
- [ ] A reason for retirement is documented
|
||||||
- [ ] If applicable, a replacement has been identified and documented
|
- [ ] If applicable, a replacement has been identified and documented
|
||||||
- [ ] If applicable, backup data locations are documented
|
- [ ] If applicable, backup data locations are documented
|
||||||
|
|
||||||
|
## Order of Operations
|
||||||
|
|
||||||
|
1. Install cloud projects. These usually have no dependencies and typically provide critical services
|
||||||
|
to other projects (DNS, email notifications, etc.)
|
||||||
|
2. Install infrastructure projects. Usually these only have dependencies on cloud services.
|
||||||
|
3. Install systemd services. These are usually low-level programs that require a dedicated machine
|
||||||
|
and perform semi-critical functions (ipv4 proxy, ddns, etc.).
|
||||||
|
4. Install kubernetes, docker, podman, and other services.
|
||||||
|
|||||||
1123
infrastructure/graduated/arch/README.md
Normal file
1123
infrastructure/graduated/arch/README.md
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,9 @@
|
|||||||
|
[Trigger]
|
||||||
|
Type = Package
|
||||||
|
Operation = Upgrade
|
||||||
|
Target = systemd
|
||||||
|
|
||||||
|
[Action]
|
||||||
|
Description = Gracefully upgrading systemd-boot...
|
||||||
|
When = PostTransaction
|
||||||
|
Exec = /usr/bin/systemctl restart systemd-boot-update.service
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
title Arch Linux
|
||||||
|
linux /vmlinuz-linux
|
||||||
|
initrd /initramfs-linux.img
|
||||||
|
options quiet splash rd.luks.name=UUID=root root=/dev/mapper/root rootflags=subvol=root nvme.noacpi=1 acpi_osi="!Windows 2020" mem_sleep_default="deep" rw
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
default arch.conf
|
||||||
|
timeout 4
|
||||||
|
console-mode max
|
||||||
|
editor no
|
||||||
1032
infrastructure/graduated/arch/ath12k/ath12k-fw-repo
Executable file
1032
infrastructure/graduated/arch/ath12k/ath12k-fw-repo
Executable file
File diff suppressed because it is too large
Load Diff
BIN
infrastructure/graduated/arch/ath12k/board.bin
Normal file
BIN
infrastructure/graduated/arch/ath12k/board.bin
Normal file
Binary file not shown.
BIN
infrastructure/graduated/arch/ath12k/regdb.bin
Normal file
BIN
infrastructure/graduated/arch/ath12k/regdb.bin
Normal file
Binary file not shown.
61
infrastructure/graduated/arch/deprecated.md
Normal file
61
infrastructure/graduated/arch/deprecated.md
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
# Deprecated
|
||||||
|
|
||||||
|
## Firejail
|
||||||
|
|
||||||
|
Don't use firejail, it's a suid binary which only runs in userspace. Apparmor does
|
||||||
|
almost exactly the same thing but runs in the kernel at boot and protects you more
|
||||||
|
completely. I'm leaving this here in case you're interested but realistically you
|
||||||
|
should just learn apparmor.
|
||||||
|
|
||||||
|
Firejail launches supported applications in a sandboxed environment where it limits access
|
||||||
|
to system files and resources.
|
||||||
|
|
||||||
|
For example:
|
||||||
|
|
||||||
|
- Firefox will not be able to access more than a small subset of your home directory.
|
||||||
|
- VSCode will not be able to acces ~/.config/autostart.
|
||||||
|
|
||||||
|
1. `sudo pacman -S firejail`
|
||||||
|
2. `sudo apparmor_parser -r /etc/apparmor.d/firejail-default`
|
||||||
|
3. `sudo firecfg`
|
||||||
|
4. `firecfg --fix`
|
||||||
|
5. `sudo rm /usr/local/bin/dnsmasq` (this fixes an issue with virsh network start)
|
||||||
|
6. Add a pacman hook to apply firejail on install
|
||||||
|
|
||||||
|
/etc/pacman.d/hooks/firejail.hook
|
||||||
|
|
||||||
|
```conf
|
||||||
|
[Trigger]
|
||||||
|
Type = Path
|
||||||
|
Operation = Install
|
||||||
|
Operation = Upgrade
|
||||||
|
Operation = Remove
|
||||||
|
Target = usr/bin/*
|
||||||
|
Target = usr/share/applications/*.desktop
|
||||||
|
|
||||||
|
[Action]
|
||||||
|
Description = Configure symlinks in /usr/local/bin based on firecfg.config...
|
||||||
|
When = PostTransaction
|
||||||
|
Depends = firejail
|
||||||
|
Exec = /bin/sh -c 'firecfg >/dev/null 2>&1'
|
||||||
|
```
|
||||||
|
|
||||||
|
You can run firejail with noprofile to fix access issues (like firefox gnome connector)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
firejail --noprofile firefox
|
||||||
|
```
|
||||||
|
|
||||||
|
You'll probably want to enable the following
|
||||||
|
|
||||||
|
`sudo cat /etc/firejail/firejail.config | grep -e '^[^#].*'`
|
||||||
|
|
||||||
|
/etc/firejail/firejail.config
|
||||||
|
|
||||||
|
```conf
|
||||||
|
browser-disable-u2f no
|
||||||
|
chroot yes
|
||||||
|
firejail-prompt yes
|
||||||
|
force-nonewprivs yes
|
||||||
|
tracelog yes
|
||||||
|
```
|
||||||
413
infrastructure/graduated/arch/gaming.md
Normal file
413
infrastructure/graduated/arch/gaming.md
Normal file
@@ -0,0 +1,413 @@
|
|||||||
|
# Gaming
|
||||||
|
|
||||||
|
- [Gaming](#gaming)
|
||||||
|
- [Discord](#discord)
|
||||||
|
- [Steam](#steam)
|
||||||
|
- [autostart](#autostart)
|
||||||
|
- [mangohud](#mangohud)
|
||||||
|
- [Streaming](#streaming)
|
||||||
|
- [FSR](#fsr)
|
||||||
|
- [Sunshine and Moonlight](#sunshine-and-moonlight)
|
||||||
|
- [Install Sunshine](#install-sunshine)
|
||||||
|
- [Install Moonlight](#install-moonlight)
|
||||||
|
- [Configuration](#configuration)
|
||||||
|
- [ProtonUp-QT](#protonup-qt)
|
||||||
|
- [VSCode](#vscode)
|
||||||
|
- [XWayland](#xwayland)
|
||||||
|
- [Wine](#wine)
|
||||||
|
- [Spotify](#spotify)
|
||||||
|
- [VLC](#vlc)
|
||||||
|
- [Remote Desktop](#remote-desktop)
|
||||||
|
- [Bitwarden](#bitwarden)
|
||||||
|
- [OBS](#obs)
|
||||||
|
- [Xbox Controller](#xbox-controller)
|
||||||
|
- [Mangohud](#mangohud-1)
|
||||||
|
- [ffmpeg](#ffmpeg)
|
||||||
|
- [Intel 11th gen](#intel-11th-gen)
|
||||||
|
- [AMD 7900xtx](#amd-7900xtx)
|
||||||
|
- [Minecraft](#minecraft)
|
||||||
|
- [Launcher](#launcher)
|
||||||
|
- [MultiMC](#multimc)
|
||||||
|
|
||||||
|
## Discord
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mv ~/Downloads/Discord ~/Applications/Discord
|
||||||
|
```
|
||||||
|
|
||||||
|
```conf
|
||||||
|
[Desktop Entry]
|
||||||
|
Name=Discord
|
||||||
|
Exec=/home/ducoterra/Applications/Discord/Discord
|
||||||
|
Icon=/home/ducoterra/Applications/Discord/discord.png
|
||||||
|
Type=Application
|
||||||
|
```
|
||||||
|
|
||||||
|
## Steam
|
||||||
|
|
||||||
|
<https://wiki.archlinux.org/title/Official_repositories#multilib>
|
||||||
|
|
||||||
|
Edit /etc/pacman.conf
|
||||||
|
|
||||||
|
```conf
|
||||||
|
[multilib]
|
||||||
|
Include = /etc/pacman.d/mirrorlist
|
||||||
|
```
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pacman -S steam
|
||||||
|
```
|
||||||
|
|
||||||
|
When prompted use vulkan-radeon on AMD and vulkan-intel on intel.
|
||||||
|
|
||||||
|
### autostart
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ln -s ~/.local/share/applications/steam-native.desktop ~/.config/autostart/
|
||||||
|
```
|
||||||
|
|
||||||
|
### mangohud
|
||||||
|
|
||||||
|
Start steam with mangohud
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pacman -S mangohud lib32-mangohud
|
||||||
|
cp /usr/share/applications/steam-native.desktop ~/.local/share/applications/steam.desktop
|
||||||
|
```
|
||||||
|
|
||||||
|
Edit ~/.local/share/applications/steam.desktop:
|
||||||
|
|
||||||
|
```conf
|
||||||
|
Exec=/usr/bin/mangohud /usr/bin/steam-native %U
|
||||||
|
```
|
||||||
|
|
||||||
|
### Streaming
|
||||||
|
|
||||||
|
See [Sunshine and Moonlight](#sunshine-and-moonlight) first! It's much better than steam streaming.
|
||||||
|
|
||||||
|
Works great from Arch hosts to Arch guests with a little configuration.
|
||||||
|
|
||||||
|
1. wifi
|
||||||
|
|
||||||
|
Your wifi should be isolated to the fastest band you have available at the widest channel width on
|
||||||
|
the least populated channel. BSS Transition and Fast Roaming are the only settings I enable since
|
||||||
|
they do make a difference for video calls and streaming while moving from room to room but don't
|
||||||
|
cause interference or connectivity issues like the other settings.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
2. host
|
||||||
|
|
||||||
|
Your host settings don't matter too much since you'll be limited to Steam's compatibility with
|
||||||
|
Arch's mesa drivers, the current kernel version, and whether Mercury is retrograde. Steam does a
|
||||||
|
pretty good job automatically selecting the correct libraries and capture mechanism. Here are
|
||||||
|
the settings I use:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
3. Client
|
||||||
|
|
||||||
|
Here's where things start to matter. As of kernel `6.7.6-arch1-2`, `mesa 1:24.0.2-1`,
|
||||||
|
`libva 2.20.0-1`, `mesa-vdpau 1:24.0.2-1`, and `libvdpau 1.5-2` hardware decoding works on Arch
|
||||||
|
with AMD integrated graphics on both my framework (Ryzen 7 7840U w/ Radeon 780M Graphics) and my
|
||||||
|
Steam Deck.
|
||||||
|
|
||||||
|
In the steam advanced client settings select "Enhanced 4k" to start. Do not change
|
||||||
|
the Resolution limit. Decoding at the native resolution of your screen will always perform
|
||||||
|
better than using a non-native resolution. In my testing even lower resolutions result in
|
||||||
|
20-30ms of additional delay over native. Framerate limit should stay at automatic. This will try
|
||||||
|
to match the streaming framerate to your display's refresh rate. You can set this to 60 if
|
||||||
|
things are lagging too much. Bandwidth limit can be adjusted up and down to fit your wifi's
|
||||||
|
limitations if you are experience frame drops and stuttering. If you experience issues like
|
||||||
|
crashing on launch, blank screen or strange artifacts disable hardware decoding. HEVC and low
|
||||||
|
latency networking have never caused me issues. Here are my settings:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
And to show what a properly configured client can do, here's Crab Champions streamed to my
|
||||||
|
laptop at 2k, 99fps. Note the streaming latency is ~10ms and the dark blue (encode time), light
|
||||||
|
blue (network transmit time), and red (decode time) lines are extremely close together.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
My Steam Deck performs about the same but with a lower (~7ms) streaming latency. This is
|
||||||
|
expected because the steam deck streams at 1280x720 which means faster encode and transmit.
|
||||||
|
|
||||||
|
If the red line is far above the blue lines it means your decoding (software or hardware) is
|
||||||
|
struggling to keep up. Either it's not decoding at native resolution (likely transforming the
|
||||||
|
decoded frame to match the display resolution) or your cpu/gpu is doing something else.
|
||||||
|
|
||||||
|
If the light blue line is far above the dark blue line your wifi is slow. Increase channel
|
||||||
|
width, increase transmit power, ensure devices are connected to 5 or 6Ghz, and ensure your
|
||||||
|
device has the latest drivers.
|
||||||
|
|
||||||
|
If the dark blue line is far above the x axis of the graph your host is struggling to encode
|
||||||
|
fast enough. Likely the host's cpu/gpu is doing something else or it's an old computer
|
||||||
|
|
||||||
|
### FSR
|
||||||
|
|
||||||
|
<https://linux-gaming.kwindu.eu/index.php?title=FSR_-_FidelityFX_Super_Resolution>
|
||||||
|
|
||||||
|
> This sharpens the image. 4 is an example value. 0 is maximum sharpness, higher values mean less sharpening. 5 is the maximum value. The default is 2
|
||||||
|
|
||||||
|
```bash
|
||||||
|
WINE_FULLSCREEN_FSR=1 WINE_FULLSCREEN_FSR_STRENGTH=2
|
||||||
|
```
|
||||||
|
|
||||||
|
## Sunshine and Moonlight
|
||||||
|
|
||||||
|
<https://docs.lizardbyte.dev/projects/sunshine/en/latest/>
|
||||||
|
|
||||||
|
Sunshine is desktop streaming service that leverages hardware encoding to provide near-zero latency
|
||||||
|
network streaming to any device that can run moonlight.
|
||||||
|
|
||||||
|
### Install Sunshine
|
||||||
|
|
||||||
|
<https://docs.lizardbyte.dev/projects/sunshine/en/latest/about/setup.html#install>
|
||||||
|
|
||||||
|
I used the Archlinux pkg. Follow the instructions (including the autostart instructions).
|
||||||
|
|
||||||
|
```bash
|
||||||
|
wget https://github.com/LizardByte/Sunshine/releases/latest/download/sunshine.pkg.tar.zst
|
||||||
|
pacman -U --noconfirm sunshine.pkg.tar.zst
|
||||||
|
```
|
||||||
|
|
||||||
|
### Install Moonlight
|
||||||
|
|
||||||
|
<https://github.com/moonlight-stream/moonlight-qt/releases>
|
||||||
|
|
||||||
|
Ctrl + Alt + Shift + Q (Moonlight Stream)
|
||||||
|
Quit the streaming session (leaving the game running on the host PC)
|
||||||
|
|
||||||
|
Ctrl + Alt + Shift + S (Moonlight Stream)
|
||||||
|
Open performance stats overlay (not supported on Steam Link or Raspberry Pi)
|
||||||
|
|
||||||
|
Ctrl + Alt + Shift + M (Moonlight Stream)
|
||||||
|
Toggle mouse mode (pointer capture or direct control)
|
||||||
|
|
||||||
|
Ctrl + Alt + Shift + V (Moonlight Stream)
|
||||||
|
Type clipboard text on the host
|
||||||
|
|
||||||
|
### Configuration
|
||||||
|
|
||||||
|
Sunshine doesn't need a ton of config. For streaming to devices like the steam deck
|
||||||
|
and my computer I would recommend adding a new application that uses the `display_scale.py`
|
||||||
|
script to set the resolution of the host before connecting.
|
||||||
|
|
||||||
|
1. Copy `display_scale.py` to your host
|
||||||
|
2. Create a new application
|
||||||
|
3. Add command: `/home/ducoterra/display_scale.py 1920x1080 1`
|
||||||
|
4. Optionally add undo command: `/home/ducoterra/display_scale.py 3840x2160 1`
|
||||||
|
5. Save and connect!
|
||||||
|
|
||||||
|
## ProtonUp-QT
|
||||||
|
|
||||||
|
<https://davidotek.github.io/protonup-qt/>
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mv ~/Downloads/ProtonUp-Qt*.AppImage ~/Applications/ProtonUp-Qt.AppImage
|
||||||
|
chmod +x ~/Applications/*.AppImage
|
||||||
|
```
|
||||||
|
|
||||||
|
```conf
|
||||||
|
[Desktop Entry]
|
||||||
|
Name=ProtonUp-Qt
|
||||||
|
Exec=/home/ducoterra/Applications/ProtonUp-Qt.AppImage
|
||||||
|
Icon=/home/ducoterra/.icons/ProtonUp-Qt.png
|
||||||
|
Type=Application
|
||||||
|
```
|
||||||
|
|
||||||
|
## VSCode
|
||||||
|
|
||||||
|
For the open source version of code install `code`:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pacman -S code
|
||||||
|
```
|
||||||
|
|
||||||
|
## XWayland
|
||||||
|
|
||||||
|
Provides compatibility with X server applications (like wine)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pacman -S xorg-xwayland
|
||||||
|
```
|
||||||
|
|
||||||
|
## Wine
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pacman -S wine
|
||||||
|
```
|
||||||
|
|
||||||
|
## Spotify
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pacman -S spotify-launcher
|
||||||
|
```
|
||||||
|
|
||||||
|
## VLC
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pacman -S vlc
|
||||||
|
```
|
||||||
|
|
||||||
|
## Remote Desktop
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pacman -S remmina freerdp
|
||||||
|
```
|
||||||
|
|
||||||
|
## Bitwarden
|
||||||
|
|
||||||
|
<https://bitwarden.com/download/>
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mv ~/Downloads/Bitwarden*.AppImage ~/Applications/Bitwarden.AppImage
|
||||||
|
chmod +x ~/Applications/*.AppImage
|
||||||
|
```
|
||||||
|
|
||||||
|
```conf
|
||||||
|
[Desktop Entry]
|
||||||
|
Name=Bitwarden
|
||||||
|
Exec=/home/ducoterra/Applications/Bitwarden.AppImage
|
||||||
|
Icon=/home/ducoterra/.icons/bitwarden.png
|
||||||
|
Type=Application
|
||||||
|
```
|
||||||
|
|
||||||
|
## OBS
|
||||||
|
|
||||||
|
<https://aur.archlinux.org/packages/obs-vkcapture-git>
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pacman -S obs-studio qt6-wayland
|
||||||
|
cd ~/aur
|
||||||
|
git clone https://aur.archlinux.org/obs-vkcapture-git.git
|
||||||
|
cd obs-vkcapture-git
|
||||||
|
makepkg -si
|
||||||
|
```
|
||||||
|
|
||||||
|
Add "Game Capture" to your scene.
|
||||||
|
|
||||||
|
Start your games with `env OBS_VKCAPTURE=1 %command%`
|
||||||
|
|
||||||
|
## Xbox Controller
|
||||||
|
|
||||||
|
1. Install bluetooth packages
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pacman -S bluez bluez-plugins bluez-utils
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Edit the bluetooth conf and set the controller to bredr
|
||||||
|
|
||||||
|
/etc/bluetooth/main.conf
|
||||||
|
|
||||||
|
```conf
|
||||||
|
ControllerMode = bredr
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Now reset the bluetooth service
|
||||||
|
|
||||||
|
```bash
|
||||||
|
systemctl restart bluetooth
|
||||||
|
```
|
||||||
|
|
||||||
|
4. Connect your controller
|
||||||
|
5. Comment out the line in the bluetooth conf you just edited
|
||||||
|
6. Restart the bluetooth service
|
||||||
|
|
||||||
|
## Mangohud
|
||||||
|
|
||||||
|
<https://github.com/flightlessmango/MangoHud#arch-based-distributions>
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo pacman -S mangohud lib32-mangohud
|
||||||
|
```
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mkdir ~/.config/MangoHud
|
||||||
|
cp /usr/share/doc/mangohud/MangoHud.conf.example ~/.config/MangoHud/MangoHud.conf
|
||||||
|
```
|
||||||
|
|
||||||
|
Edit `~/.config/MangoHud/MangoHud.conf` and tweak as you see fit.
|
||||||
|
|
||||||
|
Then add `mangohud env MANGOHUD_CONFIGFILE=/home/ducoterra/.config/MangoHud/MangoHud.conf %command%` to your steam launch.
|
||||||
|
|
||||||
|
## ffmpeg
|
||||||
|
|
||||||
|
<https://wiki.archlinux.org/title/FFmpeg>
|
||||||
|
|
||||||
|
### Intel 11th gen
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pacman -S ffmpeg libmfx intel-media-sdk
|
||||||
|
|
||||||
|
ffmpeg \
|
||||||
|
-hwaccel qsv \
|
||||||
|
-c:v hevc_qsv \
|
||||||
|
-hwaccel_output_format qsv \
|
||||||
|
-i input.mkv \
|
||||||
|
-c:v hevc_qsv \
|
||||||
|
-global_quality 25 \
|
||||||
|
output.mp4
|
||||||
|
```
|
||||||
|
|
||||||
|
### AMD 7900xtx
|
||||||
|
|
||||||
|
<https://wiki.archlinux.org/title/FFmpeg#VA-API>
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo pacman -S ffpmeg mesa libva-mesa-driver
|
||||||
|
|
||||||
|
reboot
|
||||||
|
|
||||||
|
ffmpeg \
|
||||||
|
-hwaccel vaapi \
|
||||||
|
-vaapi_device /dev/dri/renderD128 \
|
||||||
|
-hwaccel_output_format vaapi \
|
||||||
|
-i input.mp4 \
|
||||||
|
-c:v hevc_vaapi \
|
||||||
|
-rc_mode 1 \
|
||||||
|
-qp 25 \
|
||||||
|
output.mp4
|
||||||
|
|
||||||
|
ffmpeg \
|
||||||
|
-hwaccel vaapi \
|
||||||
|
-vaapi_device /dev/dri/renderD128 \
|
||||||
|
-hwaccel_output_format vaapi \
|
||||||
|
-i input.mp4 \
|
||||||
|
-c:v h264_vaapi \
|
||||||
|
-b:v 0 \
|
||||||
|
-maxrate 100M \
|
||||||
|
output.mp4
|
||||||
|
```
|
||||||
|
|
||||||
|
## Minecraft
|
||||||
|
|
||||||
|
### Launcher
|
||||||
|
|
||||||
|
<https://wiki.archlinux.org/title/minecraft>
|
||||||
|
|
||||||
|
<https://aur.archlinux.org/packages/minecraft-launcher>
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd ~/aur
|
||||||
|
git clone https://aur.archlinux.org/minecraft-launcher.git
|
||||||
|
cd minecraft-launcher
|
||||||
|
makepkg -si
|
||||||
|
```
|
||||||
|
|
||||||
|
### MultiMC
|
||||||
|
|
||||||
|
MultiMC allows you to maintain and run multiple installations of minecraft with handy
|
||||||
|
shortcuts for installing mod loaders and many more features. It's super easy to install
|
||||||
|
on arch.
|
||||||
|
|
||||||
|
<https://github.com/MultiMC/multimc-pkgbuild>
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd ~/aur
|
||||||
|
git clone https://github.com/MultiMC/multimc-pkgbuild.git
|
||||||
|
cd multimc-pkgbuild
|
||||||
|
makepkg -si
|
||||||
|
```
|
||||||
55
infrastructure/graduated/arch/help.md
Normal file
55
infrastructure/graduated/arch/help.md
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
# Help
|
||||||
|
|
||||||
|
- [Help](#help)
|
||||||
|
- [Remove unused packages](#remove-unused-packages)
|
||||||
|
- [Update Grub](#update-grub)
|
||||||
|
- [Downgrading Kernel](#downgrading-kernel)
|
||||||
|
- [Set Plymouth Background Image](#set-plymouth-background-image)
|
||||||
|
|
||||||
|
## Remove unused packages
|
||||||
|
|
||||||
|
Make sure to use the `-Rs` flag when removing. This will clean up deps.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pacman -Rs package
|
||||||
|
```
|
||||||
|
|
||||||
|
To see a list of packages that are orphaned you can run:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pacman -Qtdq
|
||||||
|
```
|
||||||
|
|
||||||
|
To remove those packages you can run
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pacman -Qtdq | pacman -Rns -
|
||||||
|
```
|
||||||
|
|
||||||
|
## Update Grub
|
||||||
|
|
||||||
|
1. `grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=BOOT`
|
||||||
|
1. `cp /boot/EFI/BOOT/grubx64.efi /boot/EFI/BOOT/bootx64.efi`
|
||||||
|
|
||||||
|
## Downgrading Kernel
|
||||||
|
|
||||||
|
You can find old kernel versions at <https://archive.archlinux.org/packages/l/linux/>
|
||||||
|
|
||||||
|
You can find old kernel-header versions at <https://archive.archlinux.org/packages/l/linux-headers/>
|
||||||
|
|
||||||
|
If you want to downgrade to a previously installed kernel you can use pacman cache:
|
||||||
|
|
||||||
|
1. `cd /var/cache/pacman/pkg`
|
||||||
|
2. `pacman -U linux-x.x.x.arch1-1-x86_64.pkg.tar.zst linux-headers-x.x.x.arch1-1-x86_64.pkg.tar.zst`
|
||||||
|
3. `reboot`
|
||||||
|
|
||||||
|
If you want to downgrade to a kernel that wasn't previously installed:
|
||||||
|
|
||||||
|
1. Download linux... and linux-headers... from above
|
||||||
|
2. `pacman -U linux-x.x.x.arch1-1-x86_64.pkg.tar.zst linux-headers-x.x.x.arch1-1-x86_64.pkg.tar.zst`
|
||||||
|
3. `reboot`
|
||||||
|
|
||||||
|
## Set Plymouth Background Image
|
||||||
|
|
||||||
|
1. `sudo cp image.png /usr/share/plymouth/themes/spinner/background-tile.png`
|
||||||
|
1. `sudo plymouth-set-default-theme -R spinner`
|
||||||
65
infrastructure/graduated/arch/k3s.md
Normal file
65
infrastructure/graduated/arch/k3s.md
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
# K3S Cluster
|
||||||
|
|
||||||
|
## Cluster Setup
|
||||||
|
|
||||||
|
1. Install wireguard
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pacman -S wireguard-tools linux-headers
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Assign static IPs to each node
|
||||||
|
|
||||||
|
/etc/dhcpcd.conf
|
||||||
|
|
||||||
|
```conf
|
||||||
|
...
|
||||||
|
interface enp1s0
|
||||||
|
static ip_address=192.168.122.51/24 # 52, 53
|
||||||
|
static routers=192.168.122.1
|
||||||
|
static domain_name_servers=192.168.122.1
|
||||||
|
```
|
||||||
|
|
||||||
|
## K3S Installation
|
||||||
|
|
||||||
|
1. Generate a secure token
|
||||||
|
|
||||||
|
```bash
|
||||||
|
umask 077
|
||||||
|
k3s token generate > token.txt
|
||||||
|
export SECRET=$(cat token.txt)
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Create the cluster
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -sfL https://get.k3s.io | K3S_TOKEN=$SECRET sh -s - server \
|
||||||
|
--cluster-init \
|
||||||
|
--flannel-backend=wireguard-native \
|
||||||
|
--disable=traefik \
|
||||||
|
--secrets-encryption \
|
||||||
|
--tls-san=192.168.122.51
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Join each server node
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -sfL https://get.k3s.io | K3S_TOKEN=$SECRET sh -s - server \
|
||||||
|
--server https://192.168.122.51:6443 \
|
||||||
|
--flannel-backend=wireguard-native \
|
||||||
|
--disable=traefik \
|
||||||
|
--secrets-encryption \
|
||||||
|
--tls-san=192.168.122.52
|
||||||
|
```
|
||||||
|
|
||||||
|
4. Copy the kube config at /etc/rancher/k3s/k3s.yaml to YOUR computer at ~/.kube/dev-config
|
||||||
|
|
||||||
|
```bash
|
||||||
|
export KUBECONFIG=~/.kube/dev-config
|
||||||
|
```
|
||||||
|
|
||||||
|
5. Modify the dev-config file's `server` attribute, replace with your IP/hostname
|
||||||
|
|
||||||
|
## Secrets Encryption
|
||||||
|
|
||||||
|
<https://docs.k3s.io/cli/secrets-encrypt>
|
||||||
222
infrastructure/graduated/arch/kubernetes.md
Normal file
222
infrastructure/graduated/arch/kubernetes.md
Normal file
@@ -0,0 +1,222 @@
|
|||||||
|
# Kubernetes
|
||||||
|
|
||||||
|
- [Kubernetes](#kubernetes)
|
||||||
|
- [Setup](#setup)
|
||||||
|
- [MetalLB](#metallb)
|
||||||
|
- [Ingress Nginx](#ingress-nginx)
|
||||||
|
- [Cert Manager](#cert-manager)
|
||||||
|
- [Storage](#storage)
|
||||||
|
|
||||||
|
<https://wiki.archlinux.org/title/Kubernetes>
|
||||||
|
|
||||||
|
## Setup
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pacman -S kubeadm kubelet containerd cni-plugins cilium-cli helm kubectl
|
||||||
|
```
|
||||||
|
|
||||||
|
/etc/modules-load.d/k8s.conf
|
||||||
|
|
||||||
|
```conf
|
||||||
|
overlay
|
||||||
|
br_netfilter
|
||||||
|
```
|
||||||
|
|
||||||
|
/etc/sysctl.d/k8s.conf
|
||||||
|
|
||||||
|
```conf
|
||||||
|
net.bridge.bridge-nf-call-iptables = 1
|
||||||
|
net.bridge.bridge-nf-call-ip6tables = 1
|
||||||
|
net.ipv4.ip_forward = 1
|
||||||
|
```
|
||||||
|
|
||||||
|
/etc/containerd/config.toml
|
||||||
|
|
||||||
|
```toml
|
||||||
|
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
|
||||||
|
...
|
||||||
|
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
|
||||||
|
SystemdCgroup = true
|
||||||
|
```
|
||||||
|
|
||||||
|
```bash
|
||||||
|
reboot
|
||||||
|
mkdir /etc/containerd
|
||||||
|
containerd config default > /etc/containerd/config.toml
|
||||||
|
systemctl enable --now containerd
|
||||||
|
systemctl enable --now kubelet
|
||||||
|
kubeadm init --pod-network-cidr='10.244.0.0/16'
|
||||||
|
|
||||||
|
mkdir -p $HOME/.kube
|
||||||
|
cp /etc/kubernetes/admin.conf $HOME/.kube/config
|
||||||
|
chown $(id -u):$(id -g) $HOME/.kube/config
|
||||||
|
|
||||||
|
cilium-cli install
|
||||||
|
|
||||||
|
# Note the "-" at the end, this removes the taint
|
||||||
|
kubectl taint node kube node-role.kubernetes.io/control-plane:NoSchedule-
|
||||||
|
```
|
||||||
|
|
||||||
|
## MetalLB
|
||||||
|
|
||||||
|
Install with helm:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
helm repo add metallb https://metallb.github.io/metallb
|
||||||
|
helm install metallb metallb/metallb -n kube-system
|
||||||
|
```
|
||||||
|
|
||||||
|
You must create a production pool if IP Addresses. Apply the following config
|
||||||
|
(substituting your public IP address space)
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: metallb.io/v1beta1
|
||||||
|
kind: IPAddressPool
|
||||||
|
metadata:
|
||||||
|
name: production
|
||||||
|
namespace: kube-system
|
||||||
|
spec:
|
||||||
|
# Production services will go here. Public IPs are expensive, so we leased
|
||||||
|
# just 4 of them.
|
||||||
|
addresses:
|
||||||
|
- 192.168.122.206/32
|
||||||
|
```
|
||||||
|
|
||||||
|
Here is an example service which allows IP sharing and uses the "production" address pool.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: ingress-nginx-demo
|
||||||
|
annotations:
|
||||||
|
metallb.universe.tf/address-pool: production
|
||||||
|
metallb.universe.tf/allow-shared-ip: "nginx"
|
||||||
|
spec:
|
||||||
|
type: LoadBalancer
|
||||||
|
externalTrafficPolicy: Cluster
|
||||||
|
selector:
|
||||||
|
app.kubernetes.io/name: ingress-nginx-demo
|
||||||
|
ports:
|
||||||
|
- name: ingress-nginx-demo
|
||||||
|
protocol: TCP
|
||||||
|
port: 8000
|
||||||
|
targetPort: http
|
||||||
|
```
|
||||||
|
|
||||||
|
## Ingress Nginx
|
||||||
|
|
||||||
|
Now we need an ingress solution (preferably with certs for https). We'll be using nginx since
|
||||||
|
it's a little bit more configurable than traefik (though don't sell traefik short, it's really
|
||||||
|
good. Just finnicky when you have use cases they haven't explicitly coded for).
|
||||||
|
|
||||||
|
```bash
|
||||||
|
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
|
||||||
|
helm repo update
|
||||||
|
helm upgrade --install \
|
||||||
|
ingress-nginx \
|
||||||
|
ingress-nginx/ingress-nginx \
|
||||||
|
--values ingress-nginx-values.yaml \
|
||||||
|
--namespace ingress-nginx \
|
||||||
|
--create-namespace
|
||||||
|
```
|
||||||
|
|
||||||
|
## Cert Manager
|
||||||
|
|
||||||
|
Cert manager handles automatic TLS for our ingress with Let's Encrypt.
|
||||||
|
|
||||||
|
Install with helm:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
helm repo add jetstack https://charts.jetstack.io
|
||||||
|
helm repo update
|
||||||
|
helm upgrade --install \
|
||||||
|
cert-manager jetstack/cert-manager \
|
||||||
|
--namespace cert-manager \
|
||||||
|
--create-namespace \
|
||||||
|
--version v1.12.4 \
|
||||||
|
--set installCRDs=true
|
||||||
|
```
|
||||||
|
|
||||||
|
Now we need to create an issuer. Apply the following config:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: cert-manager.io/v1
|
||||||
|
kind: ClusterIssuer
|
||||||
|
metadata:
|
||||||
|
name: letsencrypt
|
||||||
|
spec:
|
||||||
|
acme:
|
||||||
|
# The ACME server URL
|
||||||
|
server: https://acme-v02.api.letsencrypt.org/directory
|
||||||
|
# Email address used for ACME registration
|
||||||
|
email: nginx@ducoterra.net
|
||||||
|
# Name of a secret used to store the ACME account private key
|
||||||
|
privateKeySecretRef:
|
||||||
|
name: letsencrypt
|
||||||
|
# Enable the HTTP-01 challenge provider
|
||||||
|
solvers:
|
||||||
|
- http01:
|
||||||
|
ingress:
|
||||||
|
class: nginx
|
||||||
|
```
|
||||||
|
|
||||||
|
Here's an example ingress definition:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: ingress-nginx-demo
|
||||||
|
annotations:
|
||||||
|
cert-manager.io/cluster-issuer: letsencrypt
|
||||||
|
kubernetes.io/ingress.class: nginx
|
||||||
|
nginx.ingress.kubernetes.io/proxy-body-size: "0"
|
||||||
|
nginx.org/client-max-body-size: "0"
|
||||||
|
spec:
|
||||||
|
rules:
|
||||||
|
- host: ingress-nginx-demo.reeseapps.com
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
pathType: Prefix
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: ingress-nginx-demo
|
||||||
|
port:
|
||||||
|
number: 80
|
||||||
|
tls:
|
||||||
|
- hosts:
|
||||||
|
- ingress-nginx-demo.reeseapps.com
|
||||||
|
secretName: ingress-nginx-demo-tls-cert
|
||||||
|
```
|
||||||
|
|
||||||
|
## Storage
|
||||||
|
|
||||||
|
We can use host-path storage immediately like so:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Pod
|
||||||
|
metadata:
|
||||||
|
name: test-webserver
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: test-webserver
|
||||||
|
image: registry.k8s.io/test-webserver:latest
|
||||||
|
volumeMounts:
|
||||||
|
- mountPath: /var/local/aaa
|
||||||
|
name: mydir
|
||||||
|
- mountPath: /var/local/aaa/1.txt
|
||||||
|
name: myfile
|
||||||
|
volumes:
|
||||||
|
- name: mydir
|
||||||
|
hostPath:
|
||||||
|
# Ensure the file directory is created.
|
||||||
|
path: /var/local/aaa
|
||||||
|
type: DirectoryOrCreate
|
||||||
|
- name: myfile
|
||||||
|
hostPath:
|
||||||
|
path: /var/local/aaa/1.txt
|
||||||
|
type: FileOrCreate
|
||||||
|
```
|
||||||
BIN
infrastructure/graduated/arch/media/enhanced_4k_framework.png
Normal file
BIN
infrastructure/graduated/arch/media/enhanced_4k_framework.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.4 MiB |
BIN
infrastructure/graduated/arch/media/steam_client_settings.png
Normal file
BIN
infrastructure/graduated/arch/media/steam_client_settings.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 75 KiB |
BIN
infrastructure/graduated/arch/media/steam_host_settings.png
Normal file
BIN
infrastructure/graduated/arch/media/steam_host_settings.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 213 KiB |
BIN
infrastructure/graduated/arch/media/unifi_wifi_config.png
Normal file
BIN
infrastructure/graduated/arch/media/unifi_wifi_config.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 83 KiB |
619
infrastructure/graduated/arch/workstation.md
Normal file
619
infrastructure/graduated/arch/workstation.md
Normal file
@@ -0,0 +1,619 @@
|
|||||||
|
# Workstation
|
||||||
|
|
||||||
|
- [Workstation](#workstation)
|
||||||
|
- [Framework AMD Notes](#framework-amd-notes)
|
||||||
|
- [ATH12K Wifi Drivers](#ath12k-wifi-drivers)
|
||||||
|
- [Microcode](#microcode)
|
||||||
|
- [linux-git kernel](#linux-git-kernel)
|
||||||
|
- [Base Tools](#base-tools)
|
||||||
|
- [ZSH](#zsh)
|
||||||
|
- [Prompt Themes](#prompt-themes)
|
||||||
|
- [Aliases](#aliases)
|
||||||
|
- [Rollback Pacman Update](#rollback-pacman-update)
|
||||||
|
- [Podman](#podman)
|
||||||
|
- [Docker](#docker)
|
||||||
|
- [QEMU/KVM](#qemukvm)
|
||||||
|
- [Arch Guests](#arch-guests)
|
||||||
|
- [Restore qcow snapshots](#restore-qcow-snapshots)
|
||||||
|
- [Convert qcow to bootable drive](#convert-qcow-to-bootable-drive)
|
||||||
|
- [Kubernetes](#kubernetes)
|
||||||
|
- [VSCode](#vscode)
|
||||||
|
- [Shell](#shell)
|
||||||
|
- [Fonts](#fonts)
|
||||||
|
- [Navigation](#navigation)
|
||||||
|
- [Extensions](#extensions)
|
||||||
|
- [Wireguard](#wireguard)
|
||||||
|
- [Remote Desktop](#remote-desktop)
|
||||||
|
- [Transmission](#transmission)
|
||||||
|
- [VLC](#vlc)
|
||||||
|
- [Bitwarden](#bitwarden)
|
||||||
|
- [Nextcloud](#nextcloud)
|
||||||
|
- [Insomnia](#insomnia)
|
||||||
|
- [QMK](#qmk)
|
||||||
|
- [Initialization](#initialization)
|
||||||
|
- [Development](#development)
|
||||||
|
- [Cura](#cura)
|
||||||
|
- [Creality Print](#creality-print)
|
||||||
|
- [Orca Slicer](#orca-slicer)
|
||||||
|
- [AWS CLI](#aws-cli)
|
||||||
|
- [NSlookup](#nslookup)
|
||||||
|
- [rpi-imager](#rpi-imager)
|
||||||
|
- [Install rpi-imager](#install-rpi-imager)
|
||||||
|
- [Upgrade rpi-imager](#upgrade-rpi-imager)
|
||||||
|
- [qFlipper](#qflipper)
|
||||||
|
|
||||||
|
## Framework AMD Notes
|
||||||
|
|
||||||
|
### ATH12K Wifi Drivers
|
||||||
|
|
||||||
|
Install the wireless-regdb to set the regulatory domain to US
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pacman -S wireless-regdb
|
||||||
|
```
|
||||||
|
|
||||||
|
Edit `/etc/conf.d/wireless-regdom` to set the domain
|
||||||
|
|
||||||
|
<https://git.codelinaro.org/clo/ath-firmware/ath12k-firmware/-/tree/main>
|
||||||
|
|
||||||
|
1. `git clone https://git.codelinaro.org/clo/ath-firmware/ath12k-firmware`
|
||||||
|
2. `cd ath12k-firmware`
|
||||||
|
3. Run the following:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
wget https://github.com/qca/qca-swiss-army-knife/raw/master/tools/scripts/ath12k/ath12k-fw-repo
|
||||||
|
chmod 755 ath12k-fw-repo
|
||||||
|
sudo ./ath12k-fw-repo --install /lib/firmware
|
||||||
|
```
|
||||||
|
|
||||||
|
4. `sudo cp ath12k/board.bin /lib/firmware/ath12k/WCN7850/hw2.0/`
|
||||||
|
5. `sudo cp ath12k/regdb.bin /lib/firmware/ath12k/WCN7850/hw2.0/`
|
||||||
|
6. Reboot
|
||||||
|
|
||||||
|
### Microcode
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pacman -S amd-ucode
|
||||||
|
```
|
||||||
|
|
||||||
|
Edit /boot/loader/entries/.conf and add the following:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
title Arch Linux (Work)
|
||||||
|
linux /vmlinuz-linux
|
||||||
|
initrd /amd-ucode.img
|
||||||
|
initrd /initramfs-linux.img
|
||||||
|
options ...
|
||||||
|
```
|
||||||
|
|
||||||
|
### linux-git kernel
|
||||||
|
|
||||||
|
<https://aur.archlinux.org/packages/linux-git>
|
||||||
|
|
||||||
|
1. `git clone https://aur.archlinux.org/linux-git.git`
|
||||||
|
2. `cd linux-git`
|
||||||
|
3. `makepkg`
|
||||||
|
4. `sudo pacman -U linux-git... linux-git-headers...`
|
||||||
|
|
||||||
|
## Base Tools
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# gvfs and gvfs-dnssd are for webdav support
|
||||||
|
pacman -S rsync which git iperf3 pwgen dosfstools exfatprogs gvfs gvfs-dnssd
|
||||||
|
```
|
||||||
|
|
||||||
|
## ZSH
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pacman -S zsh grml-zsh-config zsh-syntax-highlighting zsh-autosuggestions pkgfile
|
||||||
|
chsh -s $(which zsh)
|
||||||
|
|
||||||
|
cat <<EOF > ~/.zshrc
|
||||||
|
# Basic settings
|
||||||
|
autoload bashcompinit && bashcompinit
|
||||||
|
autoload -U compinit; compinit
|
||||||
|
zstyle ':completion:*' menu select
|
||||||
|
|
||||||
|
# Prompt settings
|
||||||
|
autoload -Uz promptinit
|
||||||
|
promptinit
|
||||||
|
PROMPT_EOL_MARK=
|
||||||
|
|
||||||
|
# Syntax Highlighting
|
||||||
|
source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
|
||||||
|
source /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh
|
||||||
|
|
||||||
|
# Command Not Found Autocomplete
|
||||||
|
source /usr/share/doc/pkgfile/command-not-found.zsh
|
||||||
|
|
||||||
|
### Custom Commands and Aliases ###
|
||||||
|
EOF
|
||||||
|
```
|
||||||
|
|
||||||
|
### Prompt Themes
|
||||||
|
|
||||||
|
See: <https://wiki.archlinux.org/title/Zsh#Prompt_themes>
|
||||||
|
|
||||||
|
Use `prompt -l` to list prompts
|
||||||
|
|
||||||
|
Use `prompt -p` to see previews
|
||||||
|
|
||||||
|
In your `.zshrc` set the following:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
autoload -Uz promptinit
|
||||||
|
promptinit
|
||||||
|
prompt grml
|
||||||
|
```
|
||||||
|
|
||||||
|
### Aliases
|
||||||
|
|
||||||
|
You can put you aliases in `.zshrc` with the following format:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
alias update='sudo pacman -Syu --noconfirm'
|
||||||
|
```
|
||||||
|
|
||||||
|
It's recommended that for complicated/multiline aliases you create a folder called
|
||||||
|
`~/.local/scripts` where you store each alias. Make sure to back up this folder!
|
||||||
|
|
||||||
|
#### Rollback Pacman Update
|
||||||
|
|
||||||
|
This script will grep for all updates performed today and roll them back one by one.
|
||||||
|
|
||||||
|
rollback_update.sh
|
||||||
|
|
||||||
|
```bash
|
||||||
|
grep -a upgraded /var/log/pacman.log| grep $(date +"%Y-%m-%d") > /tmp/lastupdates.txt
|
||||||
|
awk '{print $4}' /tmp/lastupdates.txt > /tmp/lines1;awk '{print $5}' /tmp/lastupdates.txt | sed 's/(/-/g' > /tmp/lines2
|
||||||
|
paste /tmp/lines1 /tmp/lines2 > /tmp/lines
|
||||||
|
tr -d "[:blank:]" < /tmp/lines > /tmp/packages
|
||||||
|
cd /var/cache/pacman/pkg/
|
||||||
|
for i in $(cat /tmp/packages); do sudo pacman --noconfirm -U "$i"*; done
|
||||||
|
```
|
||||||
|
|
||||||
|
## Podman
|
||||||
|
|
||||||
|
Install with the following
|
||||||
|
|
||||||
|
`pacman -S podman buildah cni-plugins slirp4netns podman-dnsname aardvark-dns`
|
||||||
|
|
||||||
|
Then you can run rootless containers like so:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
podman pull docker.io/library/python:3.11
|
||||||
|
podman run -it python:3.11 bash
|
||||||
|
|
||||||
|
podman network create test
|
||||||
|
podman pod create --network test --publish 8000:8000 test1
|
||||||
|
podman run -it --pod test1 python:3.11 bash
|
||||||
|
```
|
||||||
|
|
||||||
|
You can also deploy pods with kubernetes yamls.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
podman network create test
|
||||||
|
podman kube play --network test podman-deploy.yaml --replace
|
||||||
|
```
|
||||||
|
|
||||||
|
## Docker
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pacman -Sy docker docker-compose
|
||||||
|
usermod -aG docker ducoterra
|
||||||
|
```
|
||||||
|
|
||||||
|
logout, log back in to use docker as non-root user.
|
||||||
|
|
||||||
|
You can use btrfs as your storage driver by following these instructions:
|
||||||
|
|
||||||
|
<https://docs.docker.com/storage/storagedriver/btrfs-driver/>
|
||||||
|
|
||||||
|
## QEMU/KVM
|
||||||
|
|
||||||
|
1. Install virtualization capabilties
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pacman -S qemu-full libvirt iptables-nft dnsmasq virt-manager qemu-desktop swtpm
|
||||||
|
usermod -aG libvirt ducoterra
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Edit /etc/libvirt/libvirtd.conf
|
||||||
|
|
||||||
|
```conf
|
||||||
|
...
|
||||||
|
unix_sock_group = 'libvirt'
|
||||||
|
...
|
||||||
|
unix_sock_rw_perms = '0770'
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Edit /etc/libvirt/qemu.conf
|
||||||
|
|
||||||
|
```conf
|
||||||
|
# Some examples of valid values are:
|
||||||
|
#
|
||||||
|
# user = "qemu" # A user named "qemu"
|
||||||
|
# user = "+0" # Super user (uid=0)
|
||||||
|
# user = "100" # A user named "100" or a user with uid=100
|
||||||
|
#
|
||||||
|
user = "ducoterra"
|
||||||
|
|
||||||
|
# The group for QEMU processes run by the system instance. It can be
|
||||||
|
# specified in a similar way to user.
|
||||||
|
group = "ducoterra"
|
||||||
|
```
|
||||||
|
|
||||||
|
4. `sudo systemctl enable --now libvirtd`
|
||||||
|
5. `sudo virsh net-autostart default`
|
||||||
|
|
||||||
|
If you get a blank screen when launching a VM check that you've used the correct bios -
|
||||||
|
either secboot or not secboot. This is the most common problem.
|
||||||
|
|
||||||
|
### Arch Guests
|
||||||
|
|
||||||
|
In order to get drivers for spice you'll need the guest spice drivers:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo pacman -S qemu-guest-agent spice-vdagent
|
||||||
|
```
|
||||||
|
|
||||||
|
### Restore qcow snapshots
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Create a snapshot
|
||||||
|
qemu-img snapshot -c snapshot-name /var/lib/libvirt/images/vm-image.qcow2
|
||||||
|
|
||||||
|
# List snapshots for a given image
|
||||||
|
qemu-img snapshot -l /var/lib/libvirt/images/vm-image.qcow2
|
||||||
|
|
||||||
|
# Restore snapshot
|
||||||
|
qemu-img snapshot -a snapshot-name /var/lib/libvirt/images/vm-image.qcow2
|
||||||
|
```
|
||||||
|
|
||||||
|
### Convert qcow to bootable drive
|
||||||
|
|
||||||
|
```bash
|
||||||
|
qemu-img convert -f qcow2 -O raw /var/lib/libvirt/images/vm-image.qcow2 /dev/sdb
|
||||||
|
```
|
||||||
|
|
||||||
|
If you need to resize a windows partition to non-continuous space simply grow the
|
||||||
|
last partition, shrink it to the end of the drive, then grow the windows partition
|
||||||
|
with gparted.
|
||||||
|
|
||||||
|
## Kubernetes
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pacman -S kubectl helm
|
||||||
|
```
|
||||||
|
|
||||||
|
## VSCode
|
||||||
|
|
||||||
|
For the open source version of code install `code`:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo pacman -S code
|
||||||
|
```
|
||||||
|
|
||||||
|
For the proprietary version of vscode use the AUR:
|
||||||
|
|
||||||
|
<https://aur.archlinux.org/packages/visual-studio-code-bin>
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd ~/aur
|
||||||
|
git clone https://aur.archlinux.org/visual-studio-code-bin.git
|
||||||
|
cd visual-studio-code-bin
|
||||||
|
makepkg -si
|
||||||
|
```
|
||||||
|
|
||||||
|
### Shell
|
||||||
|
|
||||||
|
Edit settings.json
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"terminal.integrated.defaultProfile.linux": "zsh",
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Fonts
|
||||||
|
|
||||||
|
Intel One Mono is designed to be easily readable for developers.
|
||||||
|
|
||||||
|
<https://github.com/intel/intel-one-mono>
|
||||||
|
|
||||||
|
Download and extract the ttf.zip
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mkdir ~/.local/share/fonts
|
||||||
|
rsync -av /path/to/download/*.ttf ~/.local/share/fonts/
|
||||||
|
```
|
||||||
|
|
||||||
|
Edit settings.json
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"editor.fontFamily": "Intel One Mono",
|
||||||
|
"editor.fontLigatures": true,
|
||||||
|
"terminal.integrated.fontFamily": "Intel One Mono",
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Navigation
|
||||||
|
|
||||||
|
The best navigation shortcut ever is alt+left and alt+right to move the cursor to it's
|
||||||
|
previous positions.
|
||||||
|
|
||||||
|
```json
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"key": "alt+left",
|
||||||
|
"command": "workbench.action.navigateBack",
|
||||||
|
"when": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "alt+right",
|
||||||
|
"command": "workbench.action.navigateForward",
|
||||||
|
"when": ""
|
||||||
|
}
|
||||||
|
]
|
||||||
|
```
|
||||||
|
|
||||||
|
### Extensions
|
||||||
|
|
||||||
|
To save a list of installed extensions run:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
code --list-extensions >> vscode_extensions.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
To install that list of extensions run:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cat vscode_extensions.txt | xargs -L 1 code --install-extension
|
||||||
|
```
|
||||||
|
|
||||||
|
## Wireguard
|
||||||
|
|
||||||
|
Wireguard requires `linux-headers`. If that isn't installed or is misconfigured your
|
||||||
|
vpn likely won't activate.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pacman -S wireguard-tools
|
||||||
|
```
|
||||||
|
|
||||||
|
## Remote Desktop
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pacman -S remmina freerdp
|
||||||
|
```
|
||||||
|
|
||||||
|
## Transmission
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pacman -S gtk4 transmission-gtk
|
||||||
|
```
|
||||||
|
|
||||||
|
## VLC
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pacman -S vlc
|
||||||
|
```
|
||||||
|
|
||||||
|
## Bitwarden
|
||||||
|
|
||||||
|
<https://bitwarden.com/download/>
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mv ~/Downloads/Bitwarden*.AppImage ~/Applications/Bitwarden.AppImage
|
||||||
|
chmod +x ~/Applications/*.AppImage
|
||||||
|
```
|
||||||
|
|
||||||
|
```conf
|
||||||
|
[Desktop Entry]
|
||||||
|
Name=Bitwarden
|
||||||
|
Exec=/home/ducoterra/Applications/Bitwarden.AppImage
|
||||||
|
Icon=/home/ducoterra/.icons/bitwarden.png
|
||||||
|
Type=Application
|
||||||
|
```
|
||||||
|
|
||||||
|
## Nextcloud
|
||||||
|
|
||||||
|
<https://nextcloud.com/install/#install-clients>
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mv ~/Downloads/Nextcloud*.AppImage ~/Applications/Nextcloud.AppImage
|
||||||
|
chmod +x ~/Applications/*.AppImage
|
||||||
|
```
|
||||||
|
|
||||||
|
```conf
|
||||||
|
[Desktop Entry]
|
||||||
|
Name=Nextcloud
|
||||||
|
Exec=/home/ducoterra/Applications/Nextcloud.AppImage
|
||||||
|
Icon=/home/ducoterra/.icons/nextcloud.png
|
||||||
|
Type=Application
|
||||||
|
```
|
||||||
|
|
||||||
|
## Insomnia
|
||||||
|
|
||||||
|
<https://github.com/Kong/insomnia/releases/tag/core@2023.5.7>
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mv ~/Downloads/Insomnia*.AppImage ~/Applications/Insomnia.AppImage
|
||||||
|
chmod +x ~/Applications/*.AppImage
|
||||||
|
```
|
||||||
|
|
||||||
|
```conf
|
||||||
|
[Desktop Entry]
|
||||||
|
Name=Insomnia
|
||||||
|
Exec=/home/ducoterra/Applications/Insomnia.AppImage
|
||||||
|
Icon=/home/ducoterra/.icons/insomnia.png
|
||||||
|
Type=Application
|
||||||
|
```
|
||||||
|
|
||||||
|
## QMK
|
||||||
|
|
||||||
|
### Initialization
|
||||||
|
|
||||||
|
I have a mirror and a fork of the mirror on my personal Gitea. For this strategy you'll
|
||||||
|
need to checkout the fork and add the mirror. This ensures I'll always have an up-to-date
|
||||||
|
mirror of qmk while also giving me a repo to make changes for my personal keyboards.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone git@gitea.reeseapps.com:ducoterra/qmk_firmware.git
|
||||||
|
cd qmk_firmware
|
||||||
|
git remote add mirror git@gitea.reeseapps.com:mirrors/qmk_firmware.git
|
||||||
|
git fetch mirror
|
||||||
|
git rebase mirror/master
|
||||||
|
pacman -S qmk
|
||||||
|
qmk setup
|
||||||
|
sudo cp /home/ducoterra/qmk_firmware/util/udev/50-qmk.rules /etc/udev/rules.d/
|
||||||
|
qmk config user.keyboard=keychron/q11/ansi_encoder
|
||||||
|
qmk config user.keymap=ducoterra
|
||||||
|
```
|
||||||
|
|
||||||
|
### Development
|
||||||
|
|
||||||
|
Every time you start a project you'll want to sync with the mirror.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git fetch mirror
|
||||||
|
git rebase mirror/master
|
||||||
|
```
|
||||||
|
|
||||||
|
Commit to master while you're in the fork.
|
||||||
|
|
||||||
|
## Cura
|
||||||
|
|
||||||
|
<https://ultimaker.com/software/ultimaker-cura/#links>
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mv ~/Downloads/*Cura*.AppImage ~/Applications/Cura.AppImage
|
||||||
|
chmod +x ~/Applications/*.AppImage
|
||||||
|
```
|
||||||
|
|
||||||
|
```conf
|
||||||
|
[Desktop Entry]
|
||||||
|
Name=Cura
|
||||||
|
Exec=/home/ducoterra/Applications/Cura.AppImage
|
||||||
|
Icon=/home/ducoterra/.icons/cura.png
|
||||||
|
Type=Application
|
||||||
|
```
|
||||||
|
|
||||||
|
## Creality Print
|
||||||
|
|
||||||
|
<https://www.creality.com/pages/download-software?spm=..page_11657537.creality_print_1.1>
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mv ~/Downloads/Creality_Print*.AppImage ~/Applications/Creality_Print.AppImage
|
||||||
|
chmod +x ~/Applications/*.AppImage
|
||||||
|
```
|
||||||
|
|
||||||
|
```conf
|
||||||
|
[Desktop Entry]
|
||||||
|
Name=Creality Print
|
||||||
|
Exec=/home/ducoterra/Applications/Creality_Print.AppImage
|
||||||
|
Icon=/home/ducoterra/.icons/creality_print.png
|
||||||
|
Type=Application
|
||||||
|
```
|
||||||
|
|
||||||
|
## Orca Slicer
|
||||||
|
|
||||||
|
<https://github.com/SoftFever/OrcaSlicer>
|
||||||
|
|
||||||
|
This is an open source fork of Bambu Slicer with more features.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# You might need to install webkit2gtk
|
||||||
|
pacman -S webkit2gtk
|
||||||
|
```
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mv ~/Downloads/OrcaSlicer*.AppImage ~/Applications/OrcaSlicer.AppImage
|
||||||
|
chmod +x ~/Applications/*.AppImage
|
||||||
|
```
|
||||||
|
|
||||||
|
```conf
|
||||||
|
[Desktop Entry]
|
||||||
|
Name=Orca Slicer
|
||||||
|
Exec=/home/ducoterra/Applications/OrcaSlicer.AppImage
|
||||||
|
Icon=/home/ducoterra/.icons/orca_slicer.png
|
||||||
|
Type=Application
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## AWS CLI
|
||||||
|
|
||||||
|
<https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html>
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Install less if you don't have it already
|
||||||
|
pacman -S less
|
||||||
|
|
||||||
|
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
|
||||||
|
unzip awscliv2.zip
|
||||||
|
sudo ./aws/install
|
||||||
|
```
|
||||||
|
|
||||||
|
Add the following to your .zshrc:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
complete -C '/usr/local/bin/aws_completer' aws
|
||||||
|
```
|
||||||
|
|
||||||
|
## NSlookup
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pacman -Syu bind
|
||||||
|
```
|
||||||
|
|
||||||
|
## rpi-imager
|
||||||
|
|
||||||
|
<https://github.com/raspberrypi/rpi-imager>
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo pacman -S cmake qt5-base
|
||||||
|
```
|
||||||
|
|
||||||
|
### Install rpi-imager
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://github.com/raspberrypi/rpi-imager.git
|
||||||
|
cd rpi-imager
|
||||||
|
mkdir -p build
|
||||||
|
cd build
|
||||||
|
cmake ../src
|
||||||
|
make
|
||||||
|
sudo make install
|
||||||
|
```
|
||||||
|
|
||||||
|
### Upgrade rpi-imager
|
||||||
|
|
||||||
|
```bash
|
||||||
|
```bash
|
||||||
|
cd rpi-imager
|
||||||
|
git pull
|
||||||
|
rm -r build
|
||||||
|
mkdir -p build
|
||||||
|
cd build
|
||||||
|
cmake ../src
|
||||||
|
make
|
||||||
|
sudo make install
|
||||||
|
```
|
||||||
|
|
||||||
|
## qFlipper
|
||||||
|
|
||||||
|
<https://flipperzero.one/update>
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mv ~/Downloads/*qFlipper*.AppImage ~/Applications/qFlipper.AppImage
|
||||||
|
chmod +x ~/Applications/*.AppImage
|
||||||
|
```
|
||||||
|
|
||||||
|
```conf
|
||||||
|
[Desktop Entry]
|
||||||
|
Name=qFlipper
|
||||||
|
Exec=/home/ducoterra/Applications/qFlipper.AppImage
|
||||||
|
Icon=/home/ducoterra/.icons/qFlipper.png
|
||||||
|
Type=Application
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user