Author: planetis-m
- Download the latest Fedora Workstation ISO from Fedora Downloads.
- Burn the ISO to a USB drive using Fedora Media Writer or Rufus.
- Boot from the USB drive and start the live installation.
Reference: Fedora 42 Manual Partition Guide
Partition scheme (GPT):
/boot/efi– 512M (EFI System Partition)/boot– 1G (EXT4)/var– 10G (XFS)/(root) – 15G (XFS)/home– Remaining space (XFS)
sudo dnf update --refresh
sudo dnf install chromium
cp /usr/share/applications/chromium-browser.desktop ~/.local/share/applications/
nano ~/.local/share/applications/chromium-browser.desktopIn the opened file, find each Exec= line and append the following flags:
--password-store=gnome-libsecret --disable-pinch
Extensions:
- Freedium Link Converter
- uBlock Origin Lite
- Google Docs Offline
- Show Youtube Dislike Counter
- GoFullPage
The profile appears to be in use by another Chromium process on another computer.
rm -rf ~/.config/chromium/Singleton*sudo dnf install gnome-extensions-appRemove LibreOffice and other preinstalled apps you don’t use:
sudo dnf remove \
libreoffice* \
gnome-boxes \
evince \
evince-libs \
btrfs-progs \
hplip \
hplip-common \
ibus \
mediawriter \
qt5-qtbase \
anaconda \
anaconda-live \
anaconda-install-env-deps \
sos \
virtualbox-guest-additions \
gnome-tour \
gnome-initial-setup \
dracut-live \
simple-scan \
sane-backends \
qemu-guest-agent \
cups-client \
gnome-disk-utility \
gnome-abrtReference: Arch Wiki
sudo dnf install kvantum
kvantummanagerSelect theme → KvLibadwaita
# PDF and torrent clients
sudo dnf install papers fragments showtime --setopt=install_weak_deps=False
# Gaming support
sudo dnf copr enable jc141/DwarFS
sudo dnf install dwarfswget https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews-gambling/hosts -O hosts.txt
sudo mv -Z hosts.txt /etc/hostsDocs: containertoolbx.org
Containerfile:
FROM registry.fedoraproject.org/fedora-toolbox:43
# Base tools and compilers
RUN dnf -y upgrade --refresh && \
dnf -y --setopt=install_weak_deps=False install \
git-credential-libsecret nano gdb gcc git curl wget ca-certificates \
gcc-c++ cmake uv python3-pip \
alsa-lib-devel mesa-libGL-devel libxkbcommon-devel wayland-devel libatomic \
nodejs nodejs-full-i18n npm tesseract tesseract-langpack-eng \
unzip xz tar libasan libubsan libtsan valgrind valgrind-devel unifdef && \
dnf -y copr enable planetis/nim && \
dnf -y install nim-devel nimony-devel && \
dnf clean allBuild and create the toolbox:
podman system prune -a --force
podman build --pull --squash -t localhost/toolbox-dev:v1.0 .
toolbox create -c devcontainer -i localhost/toolbox-dev:v1.0
toolbox enter devcontainer# Native GNOME Builder
mkdir -p ~/.local/share/gtksourceview-5/language-specs/
wget https://github.com/dom96/Aporia/raw/refs/heads/master/share/gtksourceview-2.0/language-specs/nim.lang -O nim.lang
mv nim.lang ~/.local/share/gtksourceview-5/language-specs/
# Flatpak GNOME Builder
mkdir -p ~/.var/app/org.gnome.Builder/data/gtksourceview-5/language-specs/
ln -s ~/.local/share/gtksourceview-5/language-specs/nim.lang \
~/.var/app/org.gnome.Builder/data/gtksourceview-5/language-specs/nim.langecho 'export PATH=~/.nimble/bin:$PATH' >> ~/.bashrc
nimble install --useSystemNim https://github.com/elcritch/ntaggerEnable ntagger integration in GNOME Builder:
sudo dnf copr enable planetis/gnome-builder-nim
sudo dnf install gnome-builder-nimIn GNOME Builder: Preferences → Editor → Code Completions → Ctags path:
~/.nimble/bin/ntagger --private
git config --global user.name "Antonis Geralis"
git config --global user.email [email protected]
git config --global init.defaultBranch master
sudo dnf install git-credential-libsecret
git config --global credential.helper libsecretGenerate token:
- GitHub → Settings → Developer Settings → Fine-grained tokens
- Repo access: All → Permissions: Contents (Read/Write), Workflows
~/.qwen/settings.json
{
"selectedAuthType": "openai",
"preferredEditor": "nano",
"contextFileName": "AGENTS.md",
"disableUpdateNag": true,
"mcpServers": {
"excel": { "command": "uvx", "args": ["excel-mcp-server", "stdio"] },
"pdf-reader": { "command": "uvx", "args": ["mcp-pdf-reader", "stdio"] }
}
}~/.qwen/.env
OPENAI_API_KEY=<api_key>
OPENAI_BASE_URL=https://api.groq.com/openai/v1
OPENAI_MODEL=openai/gpt-oss-120bmkdir ~/.npm-global
npm config set prefix '~/.npm-global'
echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
npm install -g @qwen-code/qwen-code
qwen --versionTutorials:
cd ~/Projects
# c2nim
git clone --depth 1 https://github.com/nim-lang/c2nim
cd c2nim
nim c c2nim.nim
cp c2nim ~/.local/bin/
# atlas
git clone --depth 1 https://github.com/nim-lang/atlas
cd atlas
atlas init
atlas use sat
nim c atlas
cp atlas ~/.local/bin/mkdir -p ~/Projects/esp && cd ~/Projects/esp
wget https://github.com/espressif/esp-idf/releases/download/v5.5.1/esp-idf-v5.5.1.zip
unzip esp-idf-v5.5.1.zip
cd esp-idf-v5.5.1
export IDF_GITHUB_ASSETS="dl.espressif.com/github_assets"
./install.sh esp32s3Update ~/.bashrc:
alias get_idf='. $HOME/Projects/esp/esp-idf-v1.0/export.sh'Reload:
source ~/.bashrcRun toolbox create --verbose, extract the podman create command, and add --group-add keep-groups to preserve dialout group access for ESP32 serial devices.
podman build --pull --squash -t localhost/toolbox-esp:v1.0 .
podman --log-level error create \
--cgroupns host \
--dns none \
--env TOOLBOX_PATH=/usr/bin/toolbox \
--env XDG_RUNTIME_DIR=/run/user/1000 \
--hostname toolbx \
--ipc host \
--label com.github.containers.toolbox=true \
--mount type=devpts,destination=/dev/pts \
--name esp-dev \
--network host \
--no-hosts \
--pid host \
--privileged \
--security-opt label=disable \
--ulimit host \
--userns keep-id \
--group-add keep-groups \
--user root:root \
--volume /:/run/host:rslave \
--volume /dev:/dev:rslave \
--volume /run/dbus/system_bus_socket:/run/dbus/system_bus_socket \
--volume /home/${USER}:/home/${USER}:rslave \
--volume /usr/bin/toolbox:/usr/bin/toolbox:ro \
--volume /run/user/1000:/run/user/1000 \
--volume /run/avahi-daemon/socket:/run/avahi-daemon/socket \
--volume /run/.heim_org.h5l.kcm-socket:/run/.heim_org.h5l.kcm-socket \
--volume /media:/media:rslave \
--volume /mnt:/mnt:rslave \
--volume /run/pcscd/pcscd.comm:/run/pcscd/pcscd.comm \
--volume /run/media:/run/media:rslave \
--volume /etc/profile.d/toolbox.sh:/etc/profile.d/toolbox.sh:ro \
localhost/toolbox-esp:v1.0 \
toolbox --log-level debug init-container \
--gid 1000 \
--home /home/${USER} \
--shell /bin/bash \
--uid 1000 \
--user ${USER}podman inspect --latest # Inspect last used container
toolbox list # List toolbox containers/images
podman stop <name> # Stop a running container
toolbox rm <name> # Remove a toolbox containerWhen toolbox list shows:
IMAGE ID IMAGE NAME
f0dfc31ec879 <none>
…and removal fails with:
Error: image <ID> has dependent children
…it usually means an external buildah container is still referencing it. — list them with:
podman ps --all --externalRemove the storage containers podman rm <ID>, then remove the image podman rmi <ID>.
Warning: Installing VS Code will override your Git credential helper configuration.
Reference: VS Code Linux Setup Guide
systemctl --user enable --now podman.socketAfter installation, open VS Code and install the Dev Containers extension.
Make sure the following are configured:
podman-composepodman/var/run/podman/podman.sock
To attach to a running container:
Ctrl + Shift + P → Dev Containers: Attach to Running Container
For Toolbox support, use the Flatpak version of VS Code:
cd ~/.vscode
git clone https://github.com/owtaylor/toolbox-vscode.git
cd toolbox-vscode
ln -s "$PWD/code.sh" ~/.local/bin/codesudo flatpak uninstall --unused -y
sudo flatpak repairsudo dnf install \
https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm
sudo dnf group upgrade coresudo dnf install libavcodec-freeworld ffmpeg --allowerasingrpm -q kernel-core
sudo dnf remove kernel*<version>*Disable the d3cold power state for the WiFi controller:
lspci -nnk | grep -A 3 -i network # 02:00.0 Network controller...
cat << EOF | sudo tee /etc/udev/rules.d/99-rtw89-d3cold.rules
SUBSYSTEM=="pci", KERNEL=="0000:02:00.0", ATTR{d3cold_allowed}="0"
EOF
sudo udevadm control --reload-rules && sudo udevadm trigger
cat /sys/bus/pci/devices/0000:02:00.0/d3cold_allowed # Should output "0"When a GitHub access token expires, explicitly reject the cached credential and then retry the push.
Explicitly reject the credential with input, then push.
printf "protocol=https\nhost=github.com\n\n" | git credential reject
git push
npm install -g @google/gemini-cli@latest @qwen-code/qwen-code@latest @openai/codex@latest @anthropic-ai/claude-code@latestYou must force a relabel whenever files are modified outside the normal boot path.
Cannot open access to console, the root account is locked.
Recovery mode cannot be used because Fedora ships with root disabled by default.
If you haven't run sudo passwd root before and cannot enter Emergency Mode:
Boot once with:
rw init=/bin/bash
From the emergency shell, looks like bash-5.x#:
passwd root
Then force a relabel.
touch /.autorelabelThen reboot:
exec /sbin/reboot -f