blog: The Immutable Workstation - Fedora Kinoite

This commit is contained in:
fiatcode 2026-02-20 13:10:22 +07:00
parent be69a22174
commit 383f9d0bad
2 changed files with 97 additions and 8 deletions

9
package-lock.json generated
View file

@ -2138,7 +2138,6 @@
"resolved": "https://registry.npmjs.org/astro/-/astro-5.16.10.tgz", "resolved": "https://registry.npmjs.org/astro/-/astro-5.16.10.tgz",
"integrity": "sha512-mBaRwFrqwCHiKDvvfNW2rRRkLAqnkj3lbkte6Vg4OzeUiDyEsdU4oOqTZxHJf/mxzZvBiU37BxG1oeh+tq1IUA==", "integrity": "sha512-mBaRwFrqwCHiKDvvfNW2rRRkLAqnkj3lbkte6Vg4OzeUiDyEsdU4oOqTZxHJf/mxzZvBiU37BxG1oeh+tq1IUA==",
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"@astrojs/compiler": "^2.13.0", "@astrojs/compiler": "^2.13.0",
"@astrojs/internal-helpers": "0.7.5", "@astrojs/internal-helpers": "0.7.5",
@ -4722,7 +4721,6 @@
} }
], ],
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"nanoid": "^3.3.11", "nanoid": "^3.3.11",
"picocolors": "^1.1.1", "picocolors": "^1.1.1",
@ -4790,7 +4788,6 @@
"integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==", "integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"peer": true,
"bin": { "bin": {
"prettier": "bin/prettier.cjs" "prettier": "bin/prettier.cjs"
}, },
@ -5125,7 +5122,6 @@
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.55.1.tgz", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.55.1.tgz",
"integrity": "sha512-wDv/Ht1BNHB4upNbK74s9usvl7hObDnvVzknxqY/E/O3X6rW1U1rV1aENEfJ54eFZDTNo7zv1f5N4edCluH7+A==", "integrity": "sha512-wDv/Ht1BNHB4upNbK74s9usvl7hObDnvVzknxqY/E/O3X6rW1U1rV1aENEfJ54eFZDTNo7zv1f5N4edCluH7+A==",
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"@types/estree": "1.0.8" "@types/estree": "1.0.8"
}, },
@ -5400,8 +5396,7 @@
"version": "4.1.18", "version": "4.1.18",
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.18.tgz", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.18.tgz",
"integrity": "sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==", "integrity": "sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==",
"license": "MIT", "license": "MIT"
"peer": true
}, },
"node_modules/tapable": { "node_modules/tapable": {
"version": "2.3.0", "version": "2.3.0",
@ -5849,7 +5844,6 @@
"resolved": "https://registry.npmjs.org/vite/-/vite-6.4.1.tgz", "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.1.tgz",
"integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==", "integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==",
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"esbuild": "^0.25.0", "esbuild": "^0.25.0",
"fdir": "^6.4.4", "fdir": "^6.4.4",
@ -6048,7 +6042,6 @@
"resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz",
"integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==",
"license": "MIT", "license": "MIT",
"peer": true,
"funding": { "funding": {
"url": "https://github.com/sponsors/colinhacks" "url": "https://github.com/sponsors/colinhacks"
} }

View file

@ -0,0 +1,96 @@
---
title: "The Immutable Workstation - Fedora Kinoite"
description: "My journey with atomic desktop from Fedora"
date: 2026-02-20T13:08:00+07:00
draft: false
tags:
- linux
- fedora
- engineering
- developer_experience
---
Theres a specific kind of anxiety that comes with running a system upgrade on a deadline. Youre not just updating a browser; youre shifting the ground beneath your IDE, your compilers, and your carefully tuned environment. One bad dependency, and your afternoon is gone.
Lately, Ive been looking for a way to stop fighting my OS. I wanted a workstation that felt less like a house of cards and more like a solid piece of hardware.
Enter **Fedora Kinoite** (using version 43 as of this post).
### The "Atomic" Difference
Fedora 43 Kinoite isn't your typical Linux distro. Its an **Atomic Desktop**.
Instead of a traditional package manager that swaps files out one by one, Kinoite uses `rpm-ostree`. Think of it like Git for your operating system. When I update, the system pulls a brand-new, verified image in the background. My current environment stays untouched until I reboot into the new one.
If an update breaks a driver or a core library? I just select the previous deployment at boot, and Im back to work in seconds. Its a built-in "undo" button for your entire OS.
---
### Where the "Atomic" Life Shines
If you're a developer, the Atomic workflow solves problems you didn't even realize you had:
- **Disposable Databases:** I need PostgreSQL for my Spring projects, but I hate background services eating 200MB of RAM 24/7. In Kinoite, I run the database in a **Toolbox**. I start it when I code; I kill it when Im done. My host OS stays "database-free."
- **Version Manager Heaven:** By keeping the system root read-only, youre forced to manage Node, Java, and Flutter in your Home folder. This creates a clean separation that makes your entire dev-stack portable and incredibly fast.
- **Home-Run IDEs:** I run heavy IDEs (Android Studio, Antigravity, VS Code) as "Home-run" apps. I extract them directly to `~/.local/apps`. They get native performance without "sandboxing" headaches, but they never touch my system root.
---
### Getting Started: Building Your Stack
If you want to try this "Hybrid-Atomic" approach, here is the toolkit Ive found most effective. Every one of these tools lives in your home directory, keeping your system image pristine.
#### 1. Node.js via [fnm](https://github.com/Schniz/fnm)
Forget NVM; `fnm` is written in Rust and is near-instant.
```bash
curl -fsSL https://fnm.vercel.app/install | bash -s -- --install-dir "./.fnm" --skip-shell
```
#### 2. Java via [SDKMAN!](https://github.com/sdkman/sdkman-cli)
The gold standard for JVM developers. It handles your `JAVA_HOME` symlinks so your IDEs stay synced even when you swap JDK versions.
```bash
curl -s "https://get.sdkman.io" | bash
```
#### 3. Flutter via [Puro](https://github.com/pingbird/puro)
A much faster way to manage Flutter versions and environments than the standard manual install.
```bash
curl -o- https://puro.dev/install.sh | bash
```
#### 4. The "Glue" (Environment Config)
The secret to making this work is using `~/.config/environment.d/60-development.conf`. This tells your "Home-run" IDEs where your tools are before the desktop even loads. No more "JDK not found" errors.
```ini
ANDROID_HOME=/home/user/.local/share/sdks/android
JAVA_HOME=/home/user/.sdkman/candidates/java/current
PURO_ROOT=/home/user/.puro
```
---
### The Verdict
Running Fedora 43 on my IdeaPad 14AHP10 has been a revelation. Because Ive only "layered" my shell (Fish) onto the host, the system is incredibly lean.
Ive stopped worrying about my OS. Im just building things again.
---
### **Final Documentation Summary**
- **OS:** Fedora 43 Kinoite (KDE Plasma 6)
- **Shell:** Fish
- **Hardware:** IdeaPad 14AHP10 (Ryzen 7 8845HS)
- **Method:** Hybrid-Atomic / Home-run management