Files
homelab/infrastructure/graduated/fedora/fedora-kinoite.md

632 lines
13 KiB
Markdown

# Fedora Kinoite
- [Fedora Kinoite](#fedora-kinoite)
- [Podman](#podman)
- [Autostarting services with quadlets](#autostarting-services-with-quadlets)
- [Libvirt, Qemu, KVM](#libvirt-qemu-kvm)
- [Network](#network)
- [VLAN Setup with nmcli](#vlan-setup-with-nmcli)
- [Apps](#apps)
- [Gear Lever](#gear-lever)
- [VSCode](#vscode)
- [rpm-ostree](#rpm-ostree)
- [Flatpak](#flatpak)
- [Bitwarden](#bitwarden)
- [MPV](#mpv)
- [Nextcloud Desktop](#nextcloud-desktop)
- [Nextcloud Talk](#nextcloud-talk)
- [Discord](#discord)
- [Proton Mail](#proton-mail)
- [Gimp](#gimp)
- [Minecraft](#minecraft)
- [Moonlight](#moonlight)
- [Steam](#steam)
- [MangoHud](#mangohud)
- [Raspberry Pi Imager](#raspberry-pi-imager)
- [Fedora Media Writer](#fedora-media-writer)
- [Pods](#pods)
- [Bambu Studio](#bambu-studio)
- [Freecad](#freecad)
- [Eyedropper](#eyedropper)
- [Mingle](#mingle)
- [Obsidian](#obsidian)
- [Dev Toolbox](#dev-toolbox)
- [Junction](#junction)
- [Kdenlive](#kdenlive)
- [The Powder Toy](#the-powder-toy)
- [Pika](#pika)
- [Filezilla](#filezilla)
- [Transmission](#transmission)
- [Frog](#frog)
- [CPU-X](#cpu-x)
- [Ungoogled Chromium](#ungoogled-chromium)
- [Signal](#signal)
- [Toolbox](#toolbox)
- [Reese's Arch Toolbox](#reeses-arch-toolbox)
- [Using Reese's Arch Toolbox](#using-reeses-arch-toolbox)
- [CPU Image](#cpu-image)
- [AMD GPU Image](#amd-gpu-image)
- [Updating Reese's Arch Toolbox](#updating-reeses-arch-toolbox)
- [Building Reese's Arch Toolbox](#building-reeses-arch-toolbox)
## Podman
Since you'll be using podman for most container-based services, you'll want to set the
the podman auth file to somewhere persistent, otherwise it'll get deleted every time you
reboot.
Add this to your `.bashrc`:
```bash
# Podman auth file
export REGISTRY_AUTH_FILE=$HOME/.podman-auth.json
```
Source that and then run `podman login` to create the file.
### Autostarting services with quadlets
If you want to run something as your user at boot (like a systemd process, think ollama) you can
create a user quadlets like so:
```bash
# Generate the .container file
podman run --rm ghcr.io/containers/podlet --install --description "Local AI" \
podman run \
-d \
-v ollama:/root/.ollama \
-p 11434:11434 \
--name ollama \
--restart always \
docker.io/ollama/ollama > ~/.config/containers/systemd/ollama.container
# Verify the service (Note the filename:service, this is required! You will get "Failed to prepare filename" without it)
systemd-analyze verify ~/.config/containers/systemd/ollama.container:ollama.service
# Start the service
systemctl --user daemon-reload
systemctl --user start ollama
```
## Libvirt, Qemu, KVM
```bash
rpm-ostree install virt-manager libvirt
systemctl enable --now libvirtd
```
## Network
### VLAN Setup with nmcli
```bash
# VLAN 2
nmcli conn
export NMCLI_DEVICE=enp195s0f4u1u3
nmcli connection add type VLAN con-name $NMCLI_DEVICE.2 dev $NMCLI_DEVICE id 2
```
## Apps
Flatpak installs are from Flathub unless otherwise noted.
Add flathub with:
```bash
flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
```
When prompted, prefer flathub.
### Gear Lever
I would recommend you install Gear Lever to manage App Images:
```bash
flatpak install it.mijorus.gearlever
```
### VSCode
Write code.
#### rpm-ostree
This layers vscode on the system and lets you download the latest release without waiting
for flathub to update the flatpak. Offers some advantages over flatpak, like not needing
to use flatseal/other to manage host permissions, but the flatpak install works just fine.
<https://code.visualstudio.com/docs/setup/linux#_installing-rpm-package-manually>
1. Download the rpm
2. sudo rpm-ostree install ./vscode-something-something.rpm
3. Reboot
#### Flatpak
```bash
flatpak install com.visualstudio.code
```
Add to settings.json so the host shell is spawned
```json
{
"terminal.integrated.defaultProfile.linux": "bash",
"terminal.integrated.profiles.linux": {
"bash": {
"path": "/app/bin/host-spawn",
"args": ["bash"],
"icon": "terminal-bash",
"overrideName": true
}
}
}
```
Add these keyboard shortcuts to allow forward and back with alt:
```json
[
...
{ "key": "alt+left", "command": "workbench.action.navigateBack" },
{ "key": "alt+right", "command": "workbench.action.navigateForward" },
...
]
```
### Bitwarden
Password manager.
```bash
flatpak install com.bitwarden.desktop
```
### MPV
Video player (like VLC but can frame-by-frame in reverse).
```bash
flatpak install io.mpv.Mpv
```
### Nextcloud Desktop
Sync your files.
```bash
flatpak install com.nextcloud.desktopclient.nextcloud
```
```bash
# Autostart
ln -s ~/.local/share/applications/com.nextcloud.talk.desktop ~/.config/autostart/
```
### Nextcloud Talk
Talk to your friends.
Download nextcloud talk from:
<https://github.com/nextcloud-releases/talk-desktop/releases>
```bash
flatpak install ./Nextcloud.Talk-linux-x64.flatpak
# autostart
ln -s /var/lib/flatpak/exports/share/applications/com.nextcloud.talk.desktop ~/.config/autostart/
```
### Discord
Talk to your enemies.
```bash
flatpak install com.discordapp.Discord
```
### Proton Mail
Talk to your business partners?
```bash
flatpak install me.proton.Mail
```
```bash
# Autostart
ln -s ~/.local/share/applications/me.proton.Mail.desktop ~/.config/autostart/
```
### Gimp
Photoshop for Linux.
```bash
flatpak install org.gimp.GIMP
```
### Minecraft
Mine. Craft.
```bash
flatpak install com.mojang.Minecraft
```
### Moonlight
Mine. Craft. But somewhere else.
```bash
flatpak install com.moonlight_stream.Moonlight
flatpak install flathub org.freedesktop.Platform.GL.default//22.08-extra
```
### Steam
Play games.
```bash
flatpak install com.valvesoftware.Steam
```
### MangoHud
<https://github.com/flightlessmango/MangoHud?tab=readme-ov-file#flatpak>
Pretty Numbers for your Games.
```bash
flatpak install org.freedesktop.Platform.VulkanLayer.MangoHud
flatpak override --user --env=MANGOHUD=1 com.valvesoftware.Steam
# Allow flatpak apps to read Mangohud config
flatpak override --user --filesystem=xdg-config/MangoHud:ro
```
Edit `~/.config/MangoHud/MangoHud.conf`
```conf
### pre defined presets
# -1 = default
# 0 = no display
# 1 = fps only
# 2 = horizontal view
# 3 = extended
# 4 = high detailed information
preset=2
### Enable most of the toggleable parameters (currently excludes `histogram`)
# full
```
### Raspberry Pi Imager
Flash your pi.
```bash
flatpak install org.raspberrypi.rpi-imager
```
### Fedora Media Writer
Flash your stick.
```bash
flatpak install org.fedoraproject.MediaWriter
```
### Pods
Remember Docker Desktop? Pods is the new Docker Desktop.
```bash
flatpak install com.github.marhkb.Pods
systemctl --user enable --now podman.socket
```
### Bambu Studio
Benchy benchy benchy benchy
```bash
flatpak install com.bambulab.BambuStudio
```
The config is located at `~/.var/app/com.bambulab.BambuStudio/config/BambuStudio/BambuStudio.conf`
At the very top of the config you can add a pin for a printer permanently with:
(Do this with Bambu Studio closed, it'll overwrite if it's open.)
```json
{
"user_access_code": {
"printer serial number": "access code here"
},
...
}
```
### Freecad
Benchy benchy benchy oh no, I can't do that, this is hard.
Download the AppImage and use [Gear Lever](#apps) to install:
<https://www.freecad.org/downloads.php>
### Eyedropper
Pick a color, any color (from your screen).
```bash
flatpak install com.github.finefindus.eyedropper
```
### Mingle
Create custom emojis.
```bash
flatpak install io.github.halfmexican.Mingle
```
### Obsidian
Show your friends your massive graph
```bash
flatpak install md.obsidian.Obsidian
```
### Dev Toolbox
Format JSON, base64 encode, and color blindness simulator.
```bash
flatpak install me.iepure.devtoolbox
```
### Junction
Choose how to open links you click on
```bash
flatpak install re.sonny.Junction
```
### Kdenlive
Edit videos without Adobe
```bash
flatpak install org.kde.kdenlive
```
### The Powder Toy
I love sandboxes.
```bash
flatpak install uk.co.powdertoy.tpt
```
### Pika
Backup with Borg.
```bash
flatpak install org.gnome.World.PikaBackup
```
### Filezilla
Really easy ftp, ftps, sftp, etc. file transfer.
```bash
flatpak install org.filezillaproject.Filezilla
```
### Transmission
Expand your "ISO" collection.
```bash
flatpak install com.transmissionbt.Transmission
```
### Frog
Extract text, scan QR codes, from images.
```bash
flatpak install com.github.tenderowl.frog
```
### CPU-X
CPU-Z but X this time
```bash
flatpak install io.github.thetumultuousunicornofdarkness.cpu-x
```
### Ungoogled Chromium
Chrom
```bash
flatpak install io.github.ungoogled_software.ungoogled_chromium
```
### Signal
Chat when Nextcloud Talk is down
```bash
flatpak install org.signal.Signal
```
```bash
# Autostart
ln -s ~/.local/share/applications/org.signal.Signal.desktop ~/.config/autostart/
```
## Toolbox
```bash
# Create and use an Arch Toolbox
toolbox create --distro arch
toolbox enter arch-toolbox-latest
```
I'd recommend adding this alias to your `.bashrc` to make things easier
```bash
# Toolbox quick enter
alias tbox='SHELL=zsh toolbox enter arch-toolbox-latest'
```
### Reese's Arch Toolbox
I have a custom arch image based on the default arch-toolbox image. It offers:
- zsh with many completions installed/enabled
- vim
- nslookup
- iperf3
- kubectl
- helm
- nethogs
- python, pip, and pipx
- ansible
- aws cli
- podman (connected automatically to the host machine via the unix socket)
- tmux
- ffmpeg
- wine
- podman
- unzip
- bat
- btop
- jq
- yq
- imagemagick
### Using Reese's Arch Toolbox
Copy the relevant aliases below into your `.bashrc`.
Run `ntbox` the first time to create a new toolbox.
Run `tbox` anytime you want to enter the toolbox.
Run `rtbox` to delete the toolbox.
Run `utbox` to update the toolbox image. You'll need to run `rtbox && ntbox` after to spin up the toolbox with the new image.
#### CPU Image
Add the following to your `.bashrc`
```bash
# Reese's Toolbox Commands
export TBOX_REPO='gitea.reeseapps.com/services'
export TBOX_IMAGE='arch-toolbox'
export TBOX_TAG='latest'
export TBOX_NAME="$TBOX_IMAGE-$TBOX_TAG"
# Creates a new toolbox
alias ntbox="toolbox create -i $TBOX_REPO/$TBOX_IMAGE:$TBOX_TAG"
# Enters the toolbox when you want to use it, you'll be running this all the time
alias tbox="SHELL=/bin/zsh toolbox enter $TBOX_NAME"
# Removes the toolbox
alias rtbox="podman container stop $TBOX_NAME && podman container rm $TBOX_NAME"
# Updates the toolbox
alias utbox="podman pull $TBOX_REPO/$TBOX_IMAGE:$TBOX_TAG"
```
#### AMD GPU Image
Add the following to your `.bashrc`
```bash
# Reese's Toolbox Commands
export TBOX_REPO='gitea.reeseapps.com/services'
export TBOX_IMAGE='arch-toolbox-amdgpu'
export TBOX_TAG='latest'
export TBOX_NAME="$TBOX_IMAGE-$TBOX_TAG"
# Creates a new toolbox
alias ntbox="toolbox create -i $TBOX_REPO/$TBOX_IMAGE:$TBOX_TAG"
# Enters the toolbox when you want to use it, you'll be running this all the time
alias tbox="SHELL=/bin/zsh toolbox enter $TBOX_NAME"
# Removes the toolbox
alias rtbox="podman container stop $TBOX_NAME && podman container rm $TBOX_NAME"
# Updates the toolbox
alias utbox="podman pull $TBOX_REPO/$TBOX_IMAGE:$TBOX_TAG"
```
### Updating Reese's Arch Toolbox
```bash
# Stop the current arch toolbox
untbox
# Pull the newest image
podman pull gitea.reeseapps.com/services/arch-toolbox:latest
# Start with the new image
toolbox create -i gitea.reeseapps.com/services/arch-toolbox:latest
```
### Building Reese's Arch Toolbox
You can build and run the image wit this (See `Containerfile` in this directory):
```bash
# Build latest image
podman build \
--no-cache \
-t gitea.reeseapps.com/services/arch-toolbox:latest \
-f ./infrastructure/graduated/fedora/Containerfile
# Test with podman
podman run -it --rm gitea.reeseapps.com/services/arch-toolbox:latest
# Stop the current arch toolbox
podman container stop arch-toolbox-latest
# Remove the old container
podman container rm arch-toolbox-latest
# Start with the new image
toolbox create -i gitea.reeseapps.com/services/arch-toolbox:latest
SHELL=/bin/zsh toolbox enter
```
In vscode you can set this as your default build task for homelab and trigger it with
`ctrl shift B`
.vscode/tasks.json
```json
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "Build arch-toolbox",
"type": "shell",
"command": "./infrastructure/graduated/fedora/arch-build.sh",
"problemMatcher": [],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
```