diff --git a/infrastructure/graduated/fedora/fedora.md b/infrastructure/graduated/fedora/fedora.md new file mode 100644 index 0000000..93fc31a --- /dev/null +++ b/infrastructure/graduated/fedora/fedora.md @@ -0,0 +1,632 @@ +# Fedora + +- [Fedora](#fedora) + - [Podman](#podman) + - [Autostarting services with quadlets](#autostarting-services-with-quadlets) + - [Network](#network) + - [VLAN Setup with nmcli](#vlan-setup-with-nmcli) + - [Apps](#apps) + - [Gear Lever](#gear-lever) + - [VSCode](#vscode) + - [DNF](#dnf) + - [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 +``` + +## 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 + +# Remove the fedora flathub +flatpak remote-delete fedora +``` + +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. + +#### DNF + + + +#### 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: + + + +```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. + +Run discord in [ungoogled chromium](#ungoogled-chromium) for now so wayland screen share works. + +```bash +flatpak run io.github.ungoogled_software.ungoogled_chromium \ + --app='https://discord.com/channels/@me' +``` + +Copy this into `~/.local/share/applications/Discord.desktop` + +```conf +[Desktop Entry] +# Created by desktopfilecreator.com +Type=Application +Version=1.0 +Name=Ungoogled Chromium +Comment=Run discord in chromium +Exec=flatpak run io.github.ungoogled_software.ungoogled_chromium --app='https://discord.com/channels/@me' +Terminal=false +Icon=discord +StartupWMClass=Io.github.ungoogled_software.ungoogled_chromium +``` + +Or copy this into + +### Proton Mail + +Talk to your business partners? + +```bash +flatpak install me.proton.Mail +``` + +### 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 +``` + +### Steam + +Play games. + +```bash +flatpak install com.valvesoftware.Steam +``` + +### MangoHud + + + +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: + + + +### 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 + } + } + ] +} +```