Repository files navigation

ThinkPad L13 NixOS Config

Full-wipe NixOS config for a ThinkPad L13 with encrypted btrfs, Hyprland, Nord theming, Home Manager, Spicetify, Zen Browser, latest Node/npm, latest Go, Zed, OpenCode, NordVPN CLI, and dev tools.

Hardware Target

  • ThinkPad L13
  • Intel i3 11th gen
  • 8GB RAM
  • 256GB SSD
  • UEFI boot
  • Default disk target: /dev/nvme0n1

What This Installs

  • NixOS 25.05 stable base
  • Unstable overlay for latest nodejs_latest, go, gopls, zed-editor, pnpm, and yarn
  • Disko full-disk layout: EFI + LUKS + btrfs subvolumes
  • Home Manager for user lawrence
  • Hyprland + greetd/tuigreet
  • Nord dark minimalist setup: Waybar, foot, fuzzel, GTK, cursor/icons
  • Zen Browser from zen-browser-flake
  • Spotify + Spicetify
  • NordVPN CLI with best-effort auto-connect service
  • Zed editor
  • nvm, latest Node from Nix, latest npm via user npm prefix
  • OpenCode via npm package opencode-ai
  • Go latest from unstable
  • Python 3, uv, Rust via rustup, Clang/LLVM, CMake, SQLite, and Postgres client tools
  • Docker, GitHub CLI, direnv, nix-direnv, fastfetch, btop, lazygit, ripgrep, fd, eza, fzf, jq, just, neovim, and common laptop tools
  • Bluetooth, screenshots, clipboard history, Thunar file manager

Important Safety Check

This config wipes the disk declared in hosts/thinkpad-l13/disk.nix.

Before installing, verify the disk name from the NixOS live ISO:

lsblk

If the SSD is not /dev/nvme0n1, edit:

hosts/thinkpad-l13/disk.nix

Change:

device="/dev/nvme0n1";

Fully Interactive ISO Installer

This is the easiest path for a fresh laptop install. Boot the NixOS live ISO, connect to Wi-Fi, then run:

sudo nix --extra-experimental-features "nix-command flakes" shell nixpkgs#git -c bash -c 'tmp=$(mktemp -d); git clone https://github.com/faint-dev/l13.git "$tmp" && bash "$tmp/scripts/install-iso.sh"'

The installer will:

  • Clone this repo to /tmp/l13-install
  • Ask which disk to wipe
  • Require a typed confirmation like WIPE /dev/nvme0n1
  • Patch the temporary disko config for that disk
  • Format Nix files
  • Create/update flake.lock
  • Run nix flake check
  • Partition, encrypt, format, and mount the disk with disko
  • Run nixos-install --flake .#thinkpad-l13
  • Ask you to set the lawrence password inside the installed system
  • Print first-login commands for NordVPN, Node/npm/OpenCode, and Linuxbrew

This script is destructive by design. It wipes only the disk you choose and confirm.

Install From NixOS Live ISO

Manual install path if you do not want the interactive installer.

Enable flakes in the live environment:

sudo nix --extra-experimental-features "nix-command flakes" shell nixpkgs#git nixpkgs#disko

Clone or copy this repo to the live ISO, then run disko:

sudo nix --extra-experimental-features "nix-command flakes" run github:nix-community/disko -- --mode disko ./hosts/thinkpad-l13/disk.nix

Install NixOS:

sudo nixos-install --flake .#thinkpad-l13

Set the lawrence password when prompted, then reboot.

One-Liner From Existing NixOS

Use this if you already installed NixOS with GNOME or another desktop and want to switch the machine to this config without repartitioning.

This path disables the disko import automatically, so it does not wipe or encrypt the disk. Use the live ISO flow above if you want the full LUKS+btrfs layout.

From inside a local checkout:

bash scripts/install-existing-nixos.sh

From a hosted git repo:

NIX_CONFIG="experimental-features = nix-command flakes" nix shell nixpkgs#git -c bash -c 'tmp=$(mktemp -d); git clone https://github.com/YOU/thinkpad-l13.git "$tmp" && cd "$tmp" && bash scripts/install-existing-nixos.sh'

Shorter curl form after you publish this repo:

curl -fsSL https://raw.githubusercontent.com/YOU/thinkpad-l13/main/scripts/install-existing-nixos.sh | REPO_URL=https://github.com/YOU/thinkpad-l13.git bash

Replace YOU/thinkpad-l13 with the real repo path.

After the switch, set a password for the new user if needed:

sudo passwd lawrence

First Boot

Log in through the greetd TUI and start Hyprland.

Run once after first login:

nvm install node
nvm alias default node
nvm use default
npm install -g npm@latest opencode-ai

Home Manager also attempts the npm global install automatically using the Nix-provided latest Node, but the manual command confirms the nvm side is ready too.

NordVPN

Log in once:

nordvpn login

Then connect or rely on the best-effort auto-connect service:

nordvpn set technology nordlynx
nordvpn set autoconnect on
nordvpn connect United_Kingdom

The config does not store NordVPN credentials.

Linuxbrew

The config sets the standard Linuxbrew prefix in PATH, creates /home/linuxbrew/.linuxbrew, and installs build/runtime dependencies. Bootstrap Homebrew once after login:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Then check:

brew doctor

Prefer Nix for system-critical packages and use Brew for tools that are awkward or unavailable in Nix.

Rebuild

If the repo lives at ~/nixos, use the included alias:

rebuild

Equivalent command:

sudo nixos-rebuild switch --flake ~/nixos#thinkpad-l13

Update

nix flake update
sudo nixos-rebuild switch --flake .#thinkpad-l13

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

ThinkPad L13 NixOS Config

Full-wipe NixOS config for a ThinkPad L13 with encrypted btrfs, Hyprland, Nord theming, Home Manager, Spicetify, Zen Browser, latest Node/npm, latest Go, Zed, OpenCode, NordVPN CLI, and dev tools.

Hardware Target

  • ThinkPad L13
  • Intel i3 11th gen
  • 8GB RAM
  • 256GB SSD
  • UEFI boot
  • Default disk target: /dev/nvme0n1

What This Installs

  • NixOS 25.05 stable base
  • Unstable overlay for latest nodejs_latest, go, gopls, zed-editor, pnpm, and yarn
  • Disko full-disk layout: EFI + LUKS + btrfs subvolumes
  • Home Manager for user lawrence
  • Hyprland + greetd/tuigreet
  • Nord dark minimalist setup: Waybar, foot, fuzzel, GTK, cursor/icons
  • Zen Browser from zen-browser-flake
  • Spotify + Spicetify
  • NordVPN CLI with best-effort auto-connect service
  • Zed editor
  • nvm, latest Node from Nix, latest npm via user npm prefix
  • OpenCode via npm package opencode-ai
  • Go latest from unstable
  • Python 3, uv, Rust via rustup, Clang/LLVM, CMake, SQLite, and Postgres client tools
  • Docker, GitHub CLI, direnv, nix-direnv, fastfetch, btop, lazygit, ripgrep, fd, eza, fzf, jq, just, neovim, and common laptop tools
  • Bluetooth, screenshots, clipboard history, Thunar file manager

Important Safety Check

This config wipes the disk declared in hosts/thinkpad-l13/disk.nix.

Before installing, verify the disk name from the NixOS live ISO:

lsblk

If the SSD is not /dev/nvme0n1, edit:

hosts/thinkpad-l13/disk.nix

Change:

device="/dev/nvme0n1";

Fully Interactive ISO Installer

This is the easiest path for a fresh laptop install. Boot the NixOS live ISO, connect to Wi-Fi, then run:

sudo nix --extra-experimental-features "nix-command flakes" shell nixpkgs#git -c bash -c 'tmp=$(mktemp -d); git clone https://github.com/faint-dev/l13.git "$tmp" && bash "$tmp/scripts/install-iso.sh"'

The installer will:

  • Clone this repo to /tmp/l13-install
  • Ask which disk to wipe
  • Require a typed confirmation like WIPE /dev/nvme0n1
  • Patch the temporary disko config for that disk
  • Format Nix files
  • Create/update flake.lock
  • Run nix flake check
  • Partition, encrypt, format, and mount the disk with disko
  • Run nixos-install --flake .#thinkpad-l13
  • Ask you to set the lawrence password inside the installed system
  • Print first-login commands for NordVPN, Node/npm/OpenCode, and Linuxbrew

This script is destructive by design. It wipes only the disk you choose and confirm.

Install From NixOS Live ISO

Manual install path if you do not want the interactive installer.

Enable flakes in the live environment:

sudo nix --extra-experimental-features "nix-command flakes" shell nixpkgs#git nixpkgs#disko

Clone or copy this repo to the live ISO, then run disko:

sudo nix --extra-experimental-features "nix-command flakes" run github:nix-community/disko -- --mode disko ./hosts/thinkpad-l13/disk.nix

Install NixOS:

sudo nixos-install --flake .#thinkpad-l13

Set the lawrence password when prompted, then reboot.

One-Liner From Existing NixOS

Use this if you already installed NixOS with GNOME or another desktop and want to switch the machine to this config without repartitioning.

This path disables the disko import automatically, so it does not wipe or encrypt the disk. Use the live ISO flow above if you want the full LUKS+btrfs layout.

From inside a local checkout:

bash scripts/install-existing-nixos.sh

From a hosted git repo:

NIX_CONFIG="experimental-features = nix-command flakes" nix shell nixpkgs#git -c bash -c 'tmp=$(mktemp -d); git clone https://github.com/YOU/thinkpad-l13.git "$tmp" && cd "$tmp" && bash scripts/install-existing-nixos.sh'

Shorter curl form after you publish this repo:

curl -fsSL https://raw.githubusercontent.com/YOU/thinkpad-l13/main/scripts/install-existing-nixos.sh | REPO_URL=https://github.com/YOU/thinkpad-l13.git bash

Replace YOU/thinkpad-l13 with the real repo path.

After the switch, set a password for the new user if needed:

sudo passwd lawrence

First Boot

Log in through the greetd TUI and start Hyprland.

Run once after first login:

nvm install node
nvm alias default node
nvm use default
npm install -g npm@latest opencode-ai

Home Manager also attempts the npm global install automatically using the Nix-provided latest Node, but the manual command confirms the nvm side is ready too.

NordVPN

Log in once:

nordvpn login

Then connect or rely on the best-effort auto-connect service:

nordvpn set technology nordlynx
nordvpn set autoconnect on
nordvpn connect United_Kingdom

The config does not store NordVPN credentials.

Linuxbrew

The config sets the standard Linuxbrew prefix in PATH, creates /home/linuxbrew/.linuxbrew, and installs build/runtime dependencies. Bootstrap Homebrew once after login:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Then check:

brew doctor

Prefer Nix for system-critical packages and use Brew for tools that are awkward or unavailable in Nix.

Rebuild

If the repo lives at ~/nixos, use the included alias:

rebuild

Equivalent command:

sudo nixos-rebuild switch --flake ~/nixos#thinkpad-l13

Update

nix flake update
sudo nixos-rebuild switch --flake .#thinkpad-l13

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

ThinkPad L13 NixOS Config

Full-wipe NixOS config for a ThinkPad L13 with encrypted btrfs, Hyprland, Nord theming, Home Manager, Spicetify, Zen Browser, latest Node/npm, latest Go, Zed, OpenCode, NordVPN CLI, and dev tools.

Hardware Target

  • ThinkPad L13
  • Intel i3 11th gen
  • 8GB RAM
  • 256GB SSD
  • UEFI boot
  • Default disk target: /dev/nvme0n1

What This Installs

  • NixOS 25.05 stable base
  • Unstable overlay for latest nodejs_latest, go, gopls, zed-editor, pnpm, and yarn
  • Disko full-disk layout: EFI + LUKS + btrfs subvolumes
  • Home Manager for user lawrence
  • Hyprland + greetd/tuigreet
  • Nord dark minimalist setup: Waybar, foot, fuzzel, GTK, cursor/icons
  • Zen Browser from zen-browser-flake
  • Spotify + Spicetify
  • NordVPN CLI with best-effort auto-connect service
  • Zed editor
  • nvm, latest Node from Nix, latest npm via user npm prefix
  • OpenCode via npm package opencode-ai
  • Go latest from unstable
  • Python 3, uv, Rust via rustup, Clang/LLVM, CMake, SQLite, and Postgres client tools
  • Docker, GitHub CLI, direnv, nix-direnv, fastfetch, btop, lazygit, ripgrep, fd, eza, fzf, jq, just, neovim, and common laptop tools
  • Bluetooth, screenshots, clipboard history, Thunar file manager

Important Safety Check

This config wipes the disk declared in hosts/thinkpad-l13/disk.nix.

Before installing, verify the disk name from the NixOS live ISO:

lsblk

If the SSD is not /dev/nvme0n1, edit:

hosts/thinkpad-l13/disk.nix

Change:

device="/dev/nvme0n1";

Fully Interactive ISO Installer

This is the easiest path for a fresh laptop install. Boot the NixOS live ISO, connect to Wi-Fi, then run:

sudo nix --extra-experimental-features "nix-command flakes" shell nixpkgs#git -c bash -c 'tmp=$(mktemp -d); git clone https://github.com/faint-dev/l13.git "$tmp" && bash "$tmp/scripts/install-iso.sh"'

The installer will:

  • Clone this repo to /tmp/l13-install
  • Ask which disk to wipe
  • Require a typed confirmation like WIPE /dev/nvme0n1
  • Patch the temporary disko config for that disk
  • Format Nix files
  • Create/update flake.lock
  • Run nix flake check
  • Partition, encrypt, format, and mount the disk with disko
  • Run nixos-install --flake .#thinkpad-l13
  • Ask you to set the lawrence password inside the installed system
  • Print first-login commands for NordVPN, Node/npm/OpenCode, and Linuxbrew

This script is destructive by design. It wipes only the disk you choose and confirm.

Install From NixOS Live ISO

Manual install path if you do not want the interactive installer.

Enable flakes in the live environment:

sudo nix --extra-experimental-features "nix-command flakes" shell nixpkgs#git nixpkgs#disko

Clone or copy this repo to the live ISO, then run disko:

sudo nix --extra-experimental-features "nix-command flakes" run github:nix-community/disko -- --mode disko ./hosts/thinkpad-l13/disk.nix

Install NixOS:

sudo nixos-install --flake .#thinkpad-l13

Set the lawrence password when prompted, then reboot.

One-Liner From Existing NixOS

Use this if you already installed NixOS with GNOME or another desktop and want to switch the machine to this config without repartitioning.

This path disables the disko import automatically, so it does not wipe or encrypt the disk. Use the live ISO flow above if you want the full LUKS+btrfs layout.

From inside a local checkout:

bash scripts/install-existing-nixos.sh

From a hosted git repo:

NIX_CONFIG="experimental-features = nix-command flakes" nix shell nixpkgs#git -c bash -c 'tmp=$(mktemp -d); git clone https://github.com/YOU/thinkpad-l13.git "$tmp" && cd "$tmp" && bash scripts/install-existing-nixos.sh'

Shorter curl form after you publish this repo:

curl -fsSL https://raw.githubusercontent.com/YOU/thinkpad-l13/main/scripts/install-existing-nixos.sh | REPO_URL=https://github.com/YOU/thinkpad-l13.git bash

Replace YOU/thinkpad-l13 with the real repo path.

After the switch, set a password for the new user if needed:

sudo passwd lawrence

First Boot

Log in through the greetd TUI and start Hyprland.

Run once after first login:

nvm install node
nvm alias default node
nvm use default
npm install -g npm@latest opencode-ai

Home Manager also attempts the npm global install automatically using the Nix-provided latest Node, but the manual command confirms the nvm side is ready too.

NordVPN

Log in once:

nordvpn login

Then connect or rely on the best-effort auto-connect service:

nordvpn set technology nordlynx
nordvpn set autoconnect on
nordvpn connect United_Kingdom

The config does not store NordVPN credentials.

Linuxbrew

The config sets the standard Linuxbrew prefix in PATH, creates /home/linuxbrew/.linuxbrew, and installs build/runtime dependencies. Bootstrap Homebrew once after login:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Then check:

brew doctor

Prefer Nix for system-critical packages and use Brew for tools that are awkward or unavailable in Nix.

Rebuild

If the repo lives at ~/nixos, use the included alias:

rebuild

Equivalent command:

sudo nixos-rebuild switch --flake ~/nixos#thinkpad-l13

Update

nix flake update
sudo nixos-rebuild switch --flake .#thinkpad-l13

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

ThinkPad L13 NixOS Config

Full-wipe NixOS config for a ThinkPad L13 with encrypted btrfs, Hyprland, Nord theming, Home Manager, Spicetify, Zen Browser, latest Node/npm, latest Go, Zed, OpenCode, NordVPN CLI, and dev tools.

Hardware Target

  • ThinkPad L13
  • Intel i3 11th gen
  • 8GB RAM
  • 256GB SSD
  • UEFI boot
  • Default disk target: /dev/nvme0n1

What This Installs

  • NixOS 25.05 stable base
  • Unstable overlay for latest nodejs_latest, go, gopls, zed-editor, pnpm, and yarn
  • Disko full-disk layout: EFI + LUKS + btrfs subvolumes
  • Home Manager for user lawrence
  • Hyprland + greetd/tuigreet
  • Nord dark minimalist setup: Waybar, foot, fuzzel, GTK, cursor/icons
  • Zen Browser from zen-browser-flake
  • Spotify + Spicetify
  • NordVPN CLI with best-effort auto-connect service
  • Zed editor
  • nvm, latest Node from Nix, latest npm via user npm prefix
  • OpenCode via npm package opencode-ai
  • Go latest from unstable
  • Python 3, uv, Rust via rustup, Clang/LLVM, CMake, SQLite, and Postgres client tools
  • Docker, GitHub CLI, direnv, nix-direnv, fastfetch, btop, lazygit, ripgrep, fd, eza, fzf, jq, just, neovim, and common laptop tools
  • Bluetooth, screenshots, clipboard history, Thunar file manager

Important Safety Check

This config wipes the disk declared in hosts/thinkpad-l13/disk.nix.

Before installing, verify the disk name from the NixOS live ISO:

lsblk

If the SSD is not /dev/nvme0n1, edit:

hosts/thinkpad-l13/disk.nix

Change:

device="/dev/nvme0n1";

Fully Interactive ISO Installer

This is the easiest path for a fresh laptop install. Boot the NixOS live ISO, connect to Wi-Fi, then run:

sudo nix --extra-experimental-features "nix-command flakes" shell nixpkgs#git -c bash -c 'tmp=$(mktemp -d); git clone https://github.com/faint-dev/l13.git "$tmp" && bash "$tmp/scripts/install-iso.sh"'

The installer will:

  • Clone this repo to /tmp/l13-install
  • Ask which disk to wipe
  • Require a typed confirmation like WIPE /dev/nvme0n1
  • Patch the temporary disko config for that disk
  • Format Nix files
  • Create/update flake.lock
  • Run nix flake check
  • Partition, encrypt, format, and mount the disk with disko
  • Run nixos-install --flake .#thinkpad-l13
  • Ask you to set the lawrence password inside the installed system
  • Print first-login commands for NordVPN, Node/npm/OpenCode, and Linuxbrew

This script is destructive by design. It wipes only the disk you choose and confirm.

Install From NixOS Live ISO

Manual install path if you do not want the interactive installer.

Enable flakes in the live environment:

sudo nix --extra-experimental-features "nix-command flakes" shell nixpkgs#git nixpkgs#disko

Clone or copy this repo to the live ISO, then run disko:

sudo nix --extra-experimental-features "nix-command flakes" run github:nix-community/disko -- --mode disko ./hosts/thinkpad-l13/disk.nix

Install NixOS:

sudo nixos-install --flake .#thinkpad-l13

Set the lawrence password when prompted, then reboot.

One-Liner From Existing NixOS

Use this if you already installed NixOS with GNOME or another desktop and want to switch the machine to this config without repartitioning.

This path disables the disko import automatically, so it does not wipe or encrypt the disk. Use the live ISO flow above if you want the full LUKS+btrfs layout.

From inside a local checkout:

bash scripts/install-existing-nixos.sh

From a hosted git repo:

NIX_CONFIG="experimental-features = nix-command flakes" nix shell nixpkgs#git -c bash -c 'tmp=$(mktemp -d); git clone https://github.com/YOU/thinkpad-l13.git "$tmp" && cd "$tmp" && bash scripts/install-existing-nixos.sh'

Shorter curl form after you publish this repo:

curl -fsSL https://raw.githubusercontent.com/YOU/thinkpad-l13/main/scripts/install-existing-nixos.sh | REPO_URL=https://github.com/YOU/thinkpad-l13.git bash

Replace YOU/thinkpad-l13 with the real repo path.

After the switch, set a password for the new user if needed:

sudo passwd lawrence

First Boot

Log in through the greetd TUI and start Hyprland.

Run once after first login:

nvm install node
nvm alias default node
nvm use default
npm install -g npm@latest opencode-ai

Home Manager also attempts the npm global install automatically using the Nix-provided latest Node, but the manual command confirms the nvm side is ready too.

NordVPN

Log in once:

nordvpn login

Then connect or rely on the best-effort auto-connect service:

nordvpn set technology nordlynx
nordvpn set autoconnect on
nordvpn connect United_Kingdom

The config does not store NordVPN credentials.

Linuxbrew

The config sets the standard Linuxbrew prefix in PATH, creates /home/linuxbrew/.linuxbrew, and installs build/runtime dependencies. Bootstrap Homebrew once after login:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Then check:

brew doctor

Prefer Nix for system-critical packages and use Brew for tools that are awkward or unavailable in Nix.

Rebuild

If the repo lives at ~/nixos, use the included alias:

rebuild

Equivalent command:

sudo nixos-rebuild switch --flake ~/nixos#thinkpad-l13

Update

nix flake update
sudo nixos-rebuild switch --flake .#thinkpad-l13

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

ThinkPad L13 NixOS Config

Full-wipe NixOS config for a ThinkPad L13 with encrypted btrfs, Hyprland, Nord theming, Home Manager, Spicetify, Zen Browser, latest Node/npm, latest Go, Zed, OpenCode, NordVPN CLI, and dev tools.

Hardware Target

  • ThinkPad L13
  • Intel i3 11th gen
  • 8GB RAM
  • 256GB SSD
  • UEFI boot
  • Default disk target: /dev/nvme0n1

What This Installs

  • NixOS 25.05 stable base
  • Unstable overlay for latest nodejs_latest, go, gopls, zed-editor, pnpm, and yarn
  • Disko full-disk layout: EFI + LUKS + btrfs subvolumes
  • Home Manager for user lawrence
  • Hyprland + greetd/tuigreet
  • Nord dark minimalist setup: Waybar, foot, fuzzel, GTK, cursor/icons
  • Zen Browser from zen-browser-flake
  • Spotify + Spicetify
  • NordVPN CLI with best-effort auto-connect service
  • Zed editor
  • nvm, latest Node from Nix, latest npm via user npm prefix
  • OpenCode via npm package opencode-ai
  • Go latest from unstable
  • Python 3, uv, Rust via rustup, Clang/LLVM, CMake, SQLite, and Postgres client tools
  • Docker, GitHub CLI, direnv, nix-direnv, fastfetch, btop, lazygit, ripgrep, fd, eza, fzf, jq, just, neovim, and common laptop tools
  • Bluetooth, screenshots, clipboard history, Thunar file manager

Important Safety Check

This config wipes the disk declared in hosts/thinkpad-l13/disk.nix.

Before installing, verify the disk name from the NixOS live ISO:

lsblk

If the SSD is not /dev/nvme0n1, edit:

hosts/thinkpad-l13/disk.nix

Change:

device="/dev/nvme0n1";

Fully Interactive ISO Installer

This is the easiest path for a fresh laptop install. Boot the NixOS live ISO, connect to Wi-Fi, then run:

sudo nix --extra-experimental-features "nix-command flakes" shell nixpkgs#git -c bash -c 'tmp=$(mktemp -d); git clone https://github.com/faint-dev/l13.git "$tmp" && bash "$tmp/scripts/install-iso.sh"'

The installer will:

  • Clone this repo to /tmp/l13-install
  • Ask which disk to wipe
  • Require a typed confirmation like WIPE /dev/nvme0n1
  • Patch the temporary disko config for that disk
  • Format Nix files
  • Create/update flake.lock
  • Run nix flake check
  • Partition, encrypt, format, and mount the disk with disko
  • Run nixos-install --flake .#thinkpad-l13
  • Ask you to set the lawrence password inside the installed system
  • Print first-login commands for NordVPN, Node/npm/OpenCode, and Linuxbrew

This script is destructive by design. It wipes only the disk you choose and confirm.

Install From NixOS Live ISO

Manual install path if you do not want the interactive installer.

Enable flakes in the live environment:

sudo nix --extra-experimental-features "nix-command flakes" shell nixpkgs#git nixpkgs#disko

Clone or copy this repo to the live ISO, then run disko:

sudo nix --extra-experimental-features "nix-command flakes" run github:nix-community/disko -- --mode disko ./hosts/thinkpad-l13/disk.nix

Install NixOS:

sudo nixos-install --flake .#thinkpad-l13

Set the lawrence password when prompted, then reboot.

One-Liner From Existing NixOS

Use this if you already installed NixOS with GNOME or another desktop and want to switch the machine to this config without repartitioning.

This path disables the disko import automatically, so it does not wipe or encrypt the disk. Use the live ISO flow above if you want the full LUKS+btrfs layout.

From inside a local checkout:

bash scripts/install-existing-nixos.sh

From a hosted git repo:

NIX_CONFIG="experimental-features = nix-command flakes" nix shell nixpkgs#git -c bash -c 'tmp=$(mktemp -d); git clone https://github.com/YOU/thinkpad-l13.git "$tmp" && cd "$tmp" && bash scripts/install-existing-nixos.sh'

Shorter curl form after you publish this repo:

curl -fsSL https://raw.githubusercontent.com/YOU/thinkpad-l13/main/scripts/install-existing-nixos.sh | REPO_URL=https://github.com/YOU/thinkpad-l13.git bash

Replace YOU/thinkpad-l13 with the real repo path.

After the switch, set a password for the new user if needed:

sudo passwd lawrence

First Boot

Log in through the greetd TUI and start Hyprland.

Run once after first login:

nvm install node
nvm alias default node
nvm use default
npm install -g npm@latest opencode-ai

Home Manager also attempts the npm global install automatically using the Nix-provided latest Node, but the manual command confirms the nvm side is ready too.

NordVPN

Log in once:

nordvpn login

Then connect or rely on the best-effort auto-connect service:

nordvpn set technology nordlynx
nordvpn set autoconnect on
nordvpn connect United_Kingdom

The config does not store NordVPN credentials.

Linuxbrew

The config sets the standard Linuxbrew prefix in PATH, creates /home/linuxbrew/.linuxbrew, and installs build/runtime dependencies. Bootstrap Homebrew once after login:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Then check:

brew doctor

Prefer Nix for system-critical packages and use Brew for tools that are awkward or unavailable in Nix.

Rebuild

If the repo lives at ~/nixos, use the included alias:

rebuild

Equivalent command:

sudo nixos-rebuild switch --flake ~/nixos#thinkpad-l13

Update

nix flake update
sudo nixos-rebuild switch --flake .#thinkpad-l13

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

ThinkPad L13 NixOS Config

Full-wipe NixOS config for a ThinkPad L13 with encrypted btrfs, Hyprland, Nord theming, Home Manager, Spicetify, Zen Browser, latest Node/npm, latest Go, Zed, OpenCode, NordVPN CLI, and dev tools.

Hardware Target

  • ThinkPad L13
  • Intel i3 11th gen
  • 8GB RAM
  • 256GB SSD
  • UEFI boot
  • Default disk target: /dev/nvme0n1

What This Installs

  • NixOS 25.05 stable base
  • Unstable overlay for latest nodejs_latest, go, gopls, zed-editor, pnpm, and yarn
  • Disko full-disk layout: EFI + LUKS + btrfs subvolumes
  • Home Manager for user lawrence
  • Hyprland + greetd/tuigreet
  • Nord dark minimalist setup: Waybar, foot, fuzzel, GTK, cursor/icons
  • Zen Browser from zen-browser-flake
  • Spotify + Spicetify
  • NordVPN CLI with best-effort auto-connect service
  • Zed editor
  • nvm, latest Node from Nix, latest npm via user npm prefix
  • OpenCode via npm package opencode-ai
  • Go latest from unstable
  • Python 3, uv, Rust via rustup, Clang/LLVM, CMake, SQLite, and Postgres client tools
  • Docker, GitHub CLI, direnv, nix-direnv, fastfetch, btop, lazygit, ripgrep, fd, eza, fzf, jq, just, neovim, and common laptop tools
  • Bluetooth, screenshots, clipboard history, Thunar file manager

Important Safety Check

This config wipes the disk declared in hosts/thinkpad-l13/disk.nix.

Before installing, verify the disk name from the NixOS live ISO:

lsblk

If the SSD is not /dev/nvme0n1, edit:

hosts/thinkpad-l13/disk.nix

Change:

device="/dev/nvme0n1";

Fully Interactive ISO Installer

This is the easiest path for a fresh laptop install. Boot the NixOS live ISO, connect to Wi-Fi, then run:

sudo nix --extra-experimental-features "nix-command flakes" shell nixpkgs#git -c bash -c 'tmp=$(mktemp -d); git clone https://github.com/faint-dev/l13.git "$tmp" && bash "$tmp/scripts/install-iso.sh"'

The installer will:

  • Clone this repo to /tmp/l13-install
  • Ask which disk to wipe
  • Require a typed confirmation like WIPE /dev/nvme0n1
  • Patch the temporary disko config for that disk
  • Format Nix files
  • Create/update flake.lock
  • Run nix flake check
  • Partition, encrypt, format, and mount the disk with disko
  • Run nixos-install --flake .#thinkpad-l13
  • Ask you to set the lawrence password inside the installed system
  • Print first-login commands for NordVPN, Node/npm/OpenCode, and Linuxbrew

This script is destructive by design. It wipes only the disk you choose and confirm.

Install From NixOS Live ISO

Manual install path if you do not want the interactive installer.

Enable flakes in the live environment:

sudo nix --extra-experimental-features "nix-command flakes" shell nixpkgs#git nixpkgs#disko

Clone or copy this repo to the live ISO, then run disko:

sudo nix --extra-experimental-features "nix-command flakes" run github:nix-community/disko -- --mode disko ./hosts/thinkpad-l13/disk.nix

Install NixOS:

sudo nixos-install --flake .#thinkpad-l13

Set the lawrence password when prompted, then reboot.

One-Liner From Existing NixOS

Use this if you already installed NixOS with GNOME or another desktop and want to switch the machine to this config without repartitioning.

This path disables the disko import automatically, so it does not wipe or encrypt the disk. Use the live ISO flow above if you want the full LUKS+btrfs layout.

From inside a local checkout:

bash scripts/install-existing-nixos.sh

From a hosted git repo:

NIX_CONFIG="experimental-features = nix-command flakes" nix shell nixpkgs#git -c bash -c 'tmp=$(mktemp -d); git clone https://github.com/YOU/thinkpad-l13.git "$tmp" && cd "$tmp" && bash scripts/install-existing-nixos.sh'

Shorter curl form after you publish this repo:

curl -fsSL https://raw.githubusercontent.com/YOU/thinkpad-l13/main/scripts/install-existing-nixos.sh | REPO_URL=https://github.com/YOU/thinkpad-l13.git bash

Replace YOU/thinkpad-l13 with the real repo path.

After the switch, set a password for the new user if needed:

sudo passwd lawrence

First Boot

Log in through the greetd TUI and start Hyprland.

Run once after first login:

nvm install node
nvm alias default node
nvm use default
npm install -g npm@latest opencode-ai

Home Manager also attempts the npm global install automatically using the Nix-provided latest Node, but the manual command confirms the nvm side is ready too.

NordVPN

Log in once:

nordvpn login

Then connect or rely on the best-effort auto-connect service:

nordvpn set technology nordlynx
nordvpn set autoconnect on
nordvpn connect United_Kingdom

The config does not store NordVPN credentials.

Linuxbrew

The config sets the standard Linuxbrew prefix in PATH, creates /home/linuxbrew/.linuxbrew, and installs build/runtime dependencies. Bootstrap Homebrew once after login:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Then check:

brew doctor

Prefer Nix for system-critical packages and use Brew for tools that are awkward or unavailable in Nix.

Rebuild

If the repo lives at ~/nixos, use the included alias:

rebuild

Equivalent command:

sudo nixos-rebuild switch --flake ~/nixos#thinkpad-l13

Update

nix flake update
sudo nixos-rebuild switch --flake .#thinkpad-l13

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

ThinkPad L13 NixOS Config

Full-wipe NixOS config for a ThinkPad L13 with encrypted btrfs, Hyprland, Nord theming, Home Manager, Spicetify, Zen Browser, latest Node/npm, latest Go, Zed, OpenCode, NordVPN CLI, and dev tools.

Hardware Target

  • ThinkPad L13
  • Intel i3 11th gen
  • 8GB RAM
  • 256GB SSD
  • UEFI boot
  • Default disk target: /dev/nvme0n1

What This Installs

  • NixOS 25.05 stable base
  • Unstable overlay for latest nodejs_latest, go, gopls, zed-editor, pnpm, and yarn
  • Disko full-disk layout: EFI + LUKS + btrfs subvolumes
  • Home Manager for user lawrence
  • Hyprland + greetd/tuigreet
  • Nord dark minimalist setup: Waybar, foot, fuzzel, GTK, cursor/icons
  • Zen Browser from zen-browser-flake
  • Spotify + Spicetify
  • NordVPN CLI with best-effort auto-connect service
  • Zed editor
  • nvm, latest Node from Nix, latest npm via user npm prefix
  • OpenCode via npm package opencode-ai
  • Go latest from unstable
  • Python 3, uv, Rust via rustup, Clang/LLVM, CMake, SQLite, and Postgres client tools
  • Docker, GitHub CLI, direnv, nix-direnv, fastfetch, btop, lazygit, ripgrep, fd, eza, fzf, jq, just, neovim, and common laptop tools
  • Bluetooth, screenshots, clipboard history, Thunar file manager

Important Safety Check

This config wipes the disk declared in hosts/thinkpad-l13/disk.nix.

Before installing, verify the disk name from the NixOS live ISO:

lsblk

If the SSD is not /dev/nvme0n1, edit:

hosts/thinkpad-l13/disk.nix

Change:

device="/dev/nvme0n1";

Fully Interactive ISO Installer

This is the easiest path for a fresh laptop install. Boot the NixOS live ISO, connect to Wi-Fi, then run:

sudo nix --extra-experimental-features "nix-command flakes" shell nixpkgs#git -c bash -c 'tmp=$(mktemp -d); git clone https://github.com/faint-dev/l13.git "$tmp" && bash "$tmp/scripts/install-iso.sh"'

The installer will:

  • Clone this repo to /tmp/l13-install
  • Ask which disk to wipe
  • Require a typed confirmation like WIPE /dev/nvme0n1
  • Patch the temporary disko config for that disk
  • Format Nix files
  • Create/update flake.lock
  • Run nix flake check
  • Partition, encrypt, format, and mount the disk with disko
  • Run nixos-install --flake .#thinkpad-l13
  • Ask you to set the lawrence password inside the installed system
  • Print first-login commands for NordVPN, Node/npm/OpenCode, and Linuxbrew

This script is destructive by design. It wipes only the disk you choose and confirm.

Install From NixOS Live ISO

Manual install path if you do not want the interactive installer.

Enable flakes in the live environment:

sudo nix --extra-experimental-features "nix-command flakes" shell nixpkgs#git nixpkgs#disko

Clone or copy this repo to the live ISO, then run disko:

sudo nix --extra-experimental-features "nix-command flakes" run github:nix-community/disko -- --mode disko ./hosts/thinkpad-l13/disk.nix

Install NixOS:

sudo nixos-install --flake .#thinkpad-l13

Set the lawrence password when prompted, then reboot.

One-Liner From Existing NixOS

Use this if you already installed NixOS with GNOME or another desktop and want to switch the machine to this config without repartitioning.

This path disables the disko import automatically, so it does not wipe or encrypt the disk. Use the live ISO flow above if you want the full LUKS+btrfs layout.

From inside a local checkout:

bash scripts/install-existing-nixos.sh

From a hosted git repo:

NIX_CONFIG="experimental-features = nix-command flakes" nix shell nixpkgs#git -c bash -c 'tmp=$(mktemp -d); git clone https://github.com/YOU/thinkpad-l13.git "$tmp" && cd "$tmp" && bash scripts/install-existing-nixos.sh'

Shorter curl form after you publish this repo:

curl -fsSL https://raw.githubusercontent.com/YOU/thinkpad-l13/main/scripts/install-existing-nixos.sh | REPO_URL=https://github.com/YOU/thinkpad-l13.git bash

Replace YOU/thinkpad-l13 with the real repo path.

After the switch, set a password for the new user if needed:

sudo passwd lawrence

First Boot

Log in through the greetd TUI and start Hyprland.

Run once after first login:

nvm install node
nvm alias default node
nvm use default
npm install -g npm@latest opencode-ai

Home Manager also attempts the npm global install automatically using the Nix-provided latest Node, but the manual command confirms the nvm side is ready too.

NordVPN

Log in once:

nordvpn login

Then connect or rely on the best-effort auto-connect service:

nordvpn set technology nordlynx
nordvpn set autoconnect on
nordvpn connect United_Kingdom

The config does not store NordVPN credentials.

Linuxbrew

The config sets the standard Linuxbrew prefix in PATH, creates /home/linuxbrew/.linuxbrew, and installs build/runtime dependencies. Bootstrap Homebrew once after login:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Then check:

brew doctor

Prefer Nix for system-critical packages and use Brew for tools that are awkward or unavailable in Nix.

Rebuild

If the repo lives at ~/nixos, use the included alias:

rebuild

Equivalent command:

sudo nixos-rebuild switch --flake ~/nixos#thinkpad-l13

Update

nix flake update
sudo nixos-rebuild switch --flake .#thinkpad-l13

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

ThinkPad L13 NixOS Config

Full-wipe NixOS config for a ThinkPad L13 with encrypted btrfs, Hyprland, Nord theming, Home Manager, Spicetify, Zen Browser, latest Node/npm, latest Go, Zed, OpenCode, NordVPN CLI, and dev tools.

Hardware Target

  • ThinkPad L13
  • Intel i3 11th gen
  • 8GB RAM
  • 256GB SSD
  • UEFI boot
  • Default disk target: /dev/nvme0n1

What This Installs

  • NixOS 25.05 stable base
  • Unstable overlay for latest nodejs_latest, go, gopls, zed-editor, pnpm, and yarn
  • Disko full-disk layout: EFI + LUKS + btrfs subvolumes
  • Home Manager for user lawrence
  • Hyprland + greetd/tuigreet
  • Nord dark minimalist setup: Waybar, foot, fuzzel, GTK, cursor/icons
  • Zen Browser from zen-browser-flake
  • Spotify + Spicetify
  • NordVPN CLI with best-effort auto-connect service
  • Zed editor
  • nvm, latest Node from Nix, latest npm via user npm prefix
  • OpenCode via npm package opencode-ai
  • Go latest from unstable
  • Python 3, uv, Rust via rustup, Clang/LLVM, CMake, SQLite, and Postgres client tools
  • Docker, GitHub CLI, direnv, nix-direnv, fastfetch, btop, lazygit, ripgrep, fd, eza, fzf, jq, just, neovim, and common laptop tools
  • Bluetooth, screenshots, clipboard history, Thunar file manager

Important Safety Check

This config wipes the disk declared in hosts/thinkpad-l13/disk.nix.

Before installing, verify the disk name from the NixOS live ISO:

lsblk

If the SSD is not /dev/nvme0n1, edit:

hosts/thinkpad-l13/disk.nix

Change:

device="/dev/nvme0n1";

Fully Interactive ISO Installer

This is the easiest path for a fresh laptop install. Boot the NixOS live ISO, connect to Wi-Fi, then run:

sudo nix --extra-experimental-features "nix-command flakes" shell nixpkgs#git -c bash -c 'tmp=$(mktemp -d); git clone https://github.com/faint-dev/l13.git "$tmp" && bash "$tmp/scripts/install-iso.sh"'

The installer will:

  • Clone this repo to /tmp/l13-install
  • Ask which disk to wipe
  • Require a typed confirmation like WIPE /dev/nvme0n1
  • Patch the temporary disko config for that disk
  • Format Nix files
  • Create/update flake.lock
  • Run nix flake check
  • Partition, encrypt, format, and mount the disk with disko
  • Run nixos-install --flake .#thinkpad-l13
  • Ask you to set the lawrence password inside the installed system
  • Print first-login commands for NordVPN, Node/npm/OpenCode, and Linuxbrew

This script is destructive by design. It wipes only the disk you choose and confirm.

Install From NixOS Live ISO

Manual install path if you do not want the interactive installer.

Enable flakes in the live environment:

sudo nix --extra-experimental-features "nix-command flakes" shell nixpkgs#git nixpkgs#disko

Clone or copy this repo to the live ISO, then run disko:

sudo nix --extra-experimental-features "nix-command flakes" run github:nix-community/disko -- --mode disko ./hosts/thinkpad-l13/disk.nix

Install NixOS:

sudo nixos-install --flake .#thinkpad-l13

Set the lawrence password when prompted, then reboot.

One-Liner From Existing NixOS

Use this if you already installed NixOS with GNOME or another desktop and want to switch the machine to this config without repartitioning.

This path disables the disko import automatically, so it does not wipe or encrypt the disk. Use the live ISO flow above if you want the full LUKS+btrfs layout.

From inside a local checkout:

bash scripts/install-existing-nixos.sh

From a hosted git repo:

NIX_CONFIG="experimental-features = nix-command flakes" nix shell nixpkgs#git -c bash -c 'tmp=$(mktemp -d); git clone https://github.com/YOU/thinkpad-l13.git "$tmp" && cd "$tmp" && bash scripts/install-existing-nixos.sh'

Shorter curl form after you publish this repo:

curl -fsSL https://raw.githubusercontent.com/YOU/thinkpad-l13/main/scripts/install-existing-nixos.sh | REPO_URL=https://github.com/YOU/thinkpad-l13.git bash

Replace YOU/thinkpad-l13 with the real repo path.

After the switch, set a password for the new user if needed:

sudo passwd lawrence

First Boot

Log in through the greetd TUI and start Hyprland.

Run once after first login:

nvm install node
nvm alias default node
nvm use default
npm install -g npm@latest opencode-ai

Home Manager also attempts the npm global install automatically using the Nix-provided latest Node, but the manual command confirms the nvm side is ready too.

NordVPN

Log in once:

nordvpn login

Then connect or rely on the best-effort auto-connect service:

nordvpn set technology nordlynx
nordvpn set autoconnect on
nordvpn connect United_Kingdom

The config does not store NordVPN credentials.

Linuxbrew

The config sets the standard Linuxbrew prefix in PATH, creates /home/linuxbrew/.linuxbrew, and installs build/runtime dependencies. Bootstrap Homebrew once after login:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Then check:

brew doctor

Prefer Nix for system-critical packages and use Brew for tools that are awkward or unavailable in Nix.

Rebuild

If the repo lives at ~/nixos, use the included alias:

rebuild

Equivalent command:

sudo nixos-rebuild switch --flake ~/nixos#thinkpad-l13

Update

nix flake update
sudo nixos-rebuild switch --flake .#thinkpad-l13

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages