diff --git a/package-lock.json b/package-lock.json index d335857..7f0dc48 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2138,7 +2138,6 @@ "resolved": "https://registry.npmjs.org/astro/-/astro-5.16.10.tgz", "integrity": "sha512-mBaRwFrqwCHiKDvvfNW2rRRkLAqnkj3lbkte6Vg4OzeUiDyEsdU4oOqTZxHJf/mxzZvBiU37BxG1oeh+tq1IUA==", "license": "MIT", - "peer": true, "dependencies": { "@astrojs/compiler": "^2.13.0", "@astrojs/internal-helpers": "0.7.5", @@ -4722,7 +4721,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -4790,7 +4788,6 @@ "integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==", "dev": true, "license": "MIT", - "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -5125,7 +5122,6 @@ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.55.1.tgz", "integrity": "sha512-wDv/Ht1BNHB4upNbK74s9usvl7hObDnvVzknxqY/E/O3X6rW1U1rV1aENEfJ54eFZDTNo7zv1f5N4edCluH7+A==", "license": "MIT", - "peer": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -5400,8 +5396,7 @@ "version": "4.1.18", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.18.tgz", "integrity": "sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/tapable": { "version": "2.3.0", @@ -5849,7 +5844,6 @@ "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.1.tgz", "integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==", "license": "MIT", - "peer": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.4", @@ -6048,7 +6042,6 @@ "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/src/content/blog/immutable-workstation-fedora-kinoite.md b/src/content/blog/immutable-workstation-fedora-kinoite.md new file mode 100644 index 0000000..76848fd --- /dev/null +++ b/src/content/blog/immutable-workstation-fedora-kinoite.md @@ -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 +--- + +There’s a specific kind of anxiety that comes with running a system upgrade on a deadline. You’re not just updating a browser; you’re shifting the ground beneath your IDE, your compilers, and your carefully tuned environment. One bad dependency, and your afternoon is gone. + +Lately, I’ve 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. It’s 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 I’m back to work in seconds. It’s 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 I’m done. My host OS stays "database-free." +- **Version Manager Heaven:** By keeping the system root read-only, you’re 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 I’ve 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 I’ve only "layered" my shell (Fish) onto the host, the system is incredibly lean. + +I’ve stopped worrying about my OS. I’m 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