{"id":50498106,"url":"https://github.com/manicshadow/linux-configs","last_synced_at":"2026-06-02T10:00:38.356Z","repository":{"id":360210493,"uuid":"1236393132","full_name":"ManicShadow/linux-configs","owner":"ManicShadow","description":"❄️ Zero to DevOps in 10 minutes. An idempotent, interactive bash script to instantly bootstrap a fully configured, Nord-themed development environment on Ubuntu 24.04 \u0026 WSL2. Automates dotfiles, Zsh+P10k, Vim, SSH/GPG keys, and a 40+ container/cloud toolchain (Docker, K8s, Terraform). Answer a few prompts, grab a coffee, and start coding.","archived":false,"fork":false,"pushed_at":"2026-05-25T14:03:00.000Z","size":69,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-05-25T14:26:06.793Z","etag":null,"topics":["automation","bash","bash-script","devops","dotfiles","kubernetes","linux","nord-theme","powerlevel10k","ubuntu","wsl2","zsh"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ManicShadow.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"patreon":"ManicShadow","custom":["https://www.buymeacoffee.com/ManicShadow","https://ko-fi.com/ManicShadow"]}},"created_at":"2026-05-12T07:53:07.000Z","updated_at":"2026-05-25T14:02:39.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/ManicShadow/linux-configs","commit_stats":null,"previous_names":["manicshadow/linux-configs"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/ManicShadow/linux-configs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ManicShadow%2Flinux-configs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ManicShadow%2Flinux-configs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ManicShadow%2Flinux-configs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ManicShadow%2Flinux-configs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ManicShadow","download_url":"https://codeload.github.com/ManicShadow/linux-configs/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ManicShadow%2Flinux-configs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33816488,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-02T02:00:07.132Z","response_time":109,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["automation","bash","bash-script","devops","dotfiles","kubernetes","linux","nord-theme","powerlevel10k","ubuntu","wsl2","zsh"],"created_at":"2026-06-02T10:00:17.933Z","updated_at":"2026-06-02T10:00:38.350Z","avatar_url":"https://github.com/ManicShadow.png","language":"Shell","funding_links":["https://patreon.com/ManicShadow","https://www.buymeacoffee.com/ManicShadow","https://ko-fi.com/ManicShadow"],"categories":[],"sub_categories":[],"readme":"# ❄️   linux-configs — Full Dev Environment Setup\n\n[![Support me on Patreon](https://img.shields.io/badge/Patreon-Support_Me-F96854?style=for-the-badge\u0026logo=patreon\u0026logoColor=white)](https://patreon.com/ManicShadow)\n\nA single, idempotent Bash script that clones a complete DevOps-ready development environment onto any fresh Ubuntu 24.04 machine or WSL instance. Answer the prompts once, grab a coffee, and come back to a fully configured workstation.\n\n---\n\n## Table of Contents\n\n- [Features](#features)\n- [Quick Start](#quick-start)\n- [Interactive Prompts](#interactive-prompts)\n- [Nord Theme](#nord-theme)\n- [Tools Installed](#tools-installed)\n- [Dotfiles Generated](#dotfiles-generated)\n- [Shell Configuration](#shell-configuration)\n- [WSL Integration](#wsl-integration)\n- [Post-Install Checklist](#post-install-checklist)\n- [Requirements](#requirements)\n- [License](#license)\n\n---\n\n## Features\n\n| Feature | Details |\n| :--- | :--- |\n| **Idempotent** | Safe to re-run — already-installed packages are skipped; dotfiles are updated/overwritten by default. Existing dotfiles are automatically backed up with a timestamp (e.g. `~/.bashrc.backup.20260514120000`) before any overwrite. |\n| **Nord Theme** | Live terminal colour palette preview before you choose; applied to Vim, Terminator, and shell prompts. **Fallback to clean global defaults if disabled.** |\n| **Dual Shell** | Choose `zsh` (recommended, with Oh My Zsh + Powerlevel10k) or `bash` as your default login shell |\n| **Powerlevel10k Config** | Your personal `~/.p10k.zsh` is embedded directly — prompt is ready on first login, no wizard needed. Directory segment names are always shown in full (`truncate_to_last`, 3 segments kept); no single-char abbreviations even with long Kubernetes context names. |\n| **History Migration** | When switching to zsh, bash history is automatically deduplicated and merged into `~/.zsh_history` |\n| **Nerd Font** | MesloLGS NF downloaded and optionally set as the global monospace font. **Fallback to Ubuntu Mono / DejaVu if disabled.** |\n| **GPG Signing** | Generate a new ed25519 GPG key, or import an existing one — both are auto-trusted and wired into git commit signing |\n| **SSH Key** | Generate a new Ed25519 SSH key, or import an existing key pair — public key is derived automatically if only the private key is provided |\n| **Multi-Identity Git** | Per-directory `[includeIf]` blocks for work vs. personal git identities |\n| **Sudo Keep-Alive** | Background process keeps sudo credentials refreshed for the entire run |\n| **WSL Extras** | Smart launch scripts (BAT + VBS wrappers), Terminator icon, Windows shared-folder alias, WSL Preboot startup shortcut, and a custom Terminator Grid Layout plugin |\n\n---\n\n## Quick Start\n\n```bash\n# Clone the repo\ngit clone https://github.com/ManicShadow/linux-configs.git\ncd linux-configs\n\n# Make executable and run\nchmod +x scripts/devops-setup.sh\nbash scripts/devops-setup.sh\n```\n\n\u003e **Run as your normal user — not root.** You need `sudo` access.  \n\u003e The full run takes approximately **5–10 minutes** on a fresh machine.\n\n---\n\n## Interactive Prompts\n\nAll personal data is collected up-front in Section 0. Nothing is hardcoded in the script. Prompts follow a two-line format: a description line with a context-specific emoji, followed by an input line with default value indicators. **Press ENTER to accept [defaults \u003cdefault value\u003e] y/n.**\n\n### Prompt Format Example:\n```bash\n🐚   Choose your default login shell.\n 💭  Default shell Press ENTER to accept [defaults zsh] y/n: \n```\n*(Pressing ENTER here would select zsh)*\n\n| Prompt | Default | Category | Notes |\n| :--- | :---: | :---: | :--- |\n| Overwrite dotfiles? | `Y` | 🧹   | Overwrites .bashrc, .zshrc, .vimrc, terminator config, etc. The previous version of each file is saved as `\u003cfile\u003e.backup.\u003ctimestamp\u003e` before being replaced. |\n| Overwrite SSH \u0026 GPG keys? | `N` | 🔐   | Safe to answer `N` on re-runs |\n| Git name | — | 👤   | Your full name for git commits |\n| Git email | — | 📧   | Your primary git email |\n| GitHub username | — | 🐙   | Used for GitHub CLI (gh) authentication guidance |\n| Create ~/.gitconfig? | `N` | 📝   | Opt-in — writes identity, GPG signing, LFS filters, aliases; never touched unless `Y` |\n| SSH key action | `skip` | 🔑   | `new` (generate Ed25519), `existing` (import key pair), or `skip` |\n| Path to SSH private key | — | 📥  | Only shown when action is `existing` — copied to `~/.ssh/id_ed25519` |\n| Path to SSH public key | — | 📥  | Optional — if blank, derived automatically from the private key |\n| GPG key action | `skip` | 🛡️    | `new`, `existing`, or `skip` |\n| GPG signing key ID | — | 🔑   | 16-char hex ID from your old machine |\n| Path to GPG key file | — | 📥  | Auto-imported and trusted at ultimate level |\n| Multiple git identities? | `N` | 🔀   | Sets up `[includeIf]` blocks in `.gitconfig` |\n| Windows username | detected | 🪟   | Sets `shared_folder` alias (WSL only) |\n| Set up Vim with plugins? | `Y` | 🪄   | Installs vim-plug + NERDTree, CoC, etc. |\n| Default shell | `zsh` | 🐚   | `zsh` or `bash` |\n| Apply Nord Theme? | `Y` | ❄️    | Live colour palette preview shown before this |\n| Set global font? | `Y` | 🔤   | Applies via `gsettings` and `fontconfig` |\n| Kubernetes channel | `v1.33` | ☸️    | Determines `kubectl` apt minor version |\n| Node.js version | `20` | 🟢   | Installed via NodeSource (20, 22) |\n\n---\n\n## Nord Theme\n\nThe script renders a true-colour palette preview in your terminal so you can see the theme before committing to it.\n\n### Polar Night — dark backgrounds\n\n| Swatch | Hex | Usage |\n| :---: | :--- | :--- |\n| ![#2E3440](https://placehold.co/24x24/2E3440/2E3440.png) | `#2E3440` | Primary terminal / editor background |\n| ![#3B4252](https://placehold.co/24x24/3B4252/3B4252.png) | `#3B4252` | Status bars, tab backgrounds |\n| ![#434C5E](https://placehold.co/24x24/434C5E/434C5E.png) | `#434C5E` | Selection highlights, indent guides |\n| ![#4C566A](https://placehold.co/24x24/4C566A/4C566A.png) | `#4C566A` | Comments, subtle UI elements |\n\n### Snow Storm — light text\n\n| Swatch | Hex | Usage |\n| :---: | :--- | :--- |\n| ![#D8DEE9](https://placehold.co/24x24/D8DEE9/D8DEE9.png) | `#D8DEE9` | Primary foreground text |\n| ![#E5E9F0](https://placehold.co/24x24/E5E9F0/E5E9F0.png) | `#E5E9F0` | Brighter text, active item labels |\n| ![#ECEFF4](https://placehold.co/24x24/ECEFF4/ECEFF4.png) | `#ECEFF4` | Highlighted / selected text |\n\n### Frost — blue accents\n\n| Swatch | Hex | Usage |\n| :---: | :--- | :--- |\n| ![#8FBCBB](https://placehold.co/24x24/8FBCBB/8FBCBB.png) | `#8FBCBB` | Classes, types |\n| ![#88C0D0](https://placehold.co/24x24/88C0D0/88C0D0.png) | `#88C0D0` | Functions, primary accent |\n| ![#81A1C1](https://placehold.co/24x24/81A1C1/81A1C1.png) | `#81A1C1` | Keywords, links |\n| ![#5E81AC](https://placehold.co/24x24/5E81AC/5E81AC.png) | `#5E81AC` | Operators, constants |\n\n### Aurora — semantic colours\n\n| Swatch | Hex | Usage |\n| :---: | :--- | :--- |\n| ![#BF616A](https://placehold.co/24x24/BF616A/BF616A.png) | `#BF616A` | Errors, deleted lines |\n| ![#D08770](https://placehold.co/24x24/D08770/D08770.png) | `#D08770` | Warnings, annotations |\n| ![#EBCB8B](https://placehold.co/24x24/EBCB8B/EBCB8B.png) | `#EBCB8B` | Modified lines, strings |\n| ![#A3BE8C](https://placehold.co/24x24/A3BE8C/A3BE8C.png) | `#A3BE8C` | Added lines, success |\n| ![#B48EAD](https://placehold.co/24x24/B48EAD/B48EAD.png) | `#B48EAD` | Numbers, constants |\n\nNord is applied to **Vim** (via `vim-nord`), **Terminator** (colour palette + profile), **tmux** (status bar), and **shell** (FZF colours + terminal palette via `apply_nord_palette`). \n\n**Declining Nord keeps a clean default configuration instead**, with fallback logic for fonts (Ubuntu Mono / DejaVu) and CLI tools (base16 for bat, rounded borders for fzf).\n\n---\n\n## Tools Installed\n\n### APT packages\n\n| Category | Packages |\n| :--- | :--- |\n| **Containers** | `docker-ce`, `docker-ce-cli`, `containerd.io`, `docker-buildx-plugin`, `docker-compose-plugin` |\n| **Kubernetes** | `kubectl` (via official k8s apt channel) |\n| **Cloud / IaC** | `terraform`, `ansible`, `azure-cli`, `google-cloud-cli`, `google-cloud-sdk-gke-gcloud-auth-plugin` |\n| **Shell** | `zsh`, `fzf`, `zoxide`, `eza`, `tmux` |\n| **Editors** | `vim-gtk3` |\n| **VCS** | `git`, `git-lfs`, `gh` (GitHub CLI) |\n| **Languages** | `python3`, `python3.11`, `python3.12` (with `-dev`/`-venv` variants), `python3-pip`, `pipx`, `nodejs`, `openjdk-21-jdk`, `openjdk-21-jre`, `maven`, `gradle` |\n| **Utilities** | `bat`, `jq`, `ripgrep`, `fd-find`, `wget`, `curl`, `unzip`, `fontconfig`, `imagemagick`, `google-chrome-stable`, `bind9-dnsutils`, `sshuttle`, `extundelete` |\n| **Terminal** | `terminator`, `pcmanfm`, `powerline`, `powerline-doc`, `powerline-gitstatus`, `python3-powerline-gitstatus`, `fonts-powerline`, `xclip` |\n| **WSL / Display** | `xvfb`, `dbus-x11`, `mesa-utils`, `mesa-vulkan-drivers`, `xfonts-cyrillic`, `xfonts-scalable`, `libsecret-1-0` |\n| **Fonts (apt)** | `fonts-font-awesome`, `fonts-freefont-ttf`, `fonts-ipafont-gothic`, `fonts-liberation`, `fonts-noto-color-emoji`, `fonts-tlwg-loma-otf`, `fonts-unifont`, `fonts-wqy-zenhei` |\n\n### Snap\n\n| Package | Notes |\n| :--- | :--- |\n| `yq` | YAML processor (classic channel) |\n\n### Binary installs (to `/usr/local/bin`)\n\n| Tool | Source |\n| :--- | :--- |\n| **Helm** | Latest release from `get.helm.sh` |\n| **Helmfile** | Latest GitHub release |\n| **kubelogin** | Latest GitHub release (Azure AD kubectl plugin) |\n| **Lazygit** | Latest GitHub release |\n\n### pipx\n\n| Package | Notes |\n| :--- | :--- |\n| `git-filter-repo` | Rewrites git history without BFG |\n\n### Zsh plugins (Oh My Zsh)\n\n| Plugin | Source |\n| :--- | :--- |\n| **Oh My Zsh** | `ohmyzsh/ohmyzsh` |\n| **Powerlevel10k** | `romkatv/powerlevel10k` theme |\n| **zsh-autosuggestions** | `zsh-users/zsh-autosuggestions` |\n| **zsh-syntax-highlighting** | `zsh-users/zsh-syntax-highlighting` |\n\n### Fonts\n\n| Font | Source |\n| :--- | :--- |\n| **MesloLGS NF** | 4 variants (Regular, Bold, Italic, Bold Italic) from `romkatv/powerlevel10k-media` |\n| **Font Awesome Free** | Latest desktop `.zip` from `FortAwesome/Font-Awesome` GitHub Releases (OTF files) |\n\n---\n\n## Dotfiles Generated\n\n| File | Contents |\n| :--- | :--- |\n| `~/.bashrc` | PATH, GPG TTY, aliases, `gacp` function, Nord FZF colours + terminal palette (when Nord enabled) |\n| `~/.zshrc` | Oh My Zsh + Powerlevel10k, same aliases as bashrc, zoxide init, Nord FZF colours + terminal palette |\n| `~/.vimrc` | vim-plug, NERDTree, Lightline, Nord colorscheme, CoC LSP, fzf.vim, GitGutter, auto-pairs, vim-devicons, vim-fugitive, vim-polyglot |\n| `~/.gitconfig` | **Opt-in** (`Create ~/.gitconfig? → Y`). Writes: `user.name/email`, GPG signing, `push.autoSetupRemote`, `pull.rebase`, LFS filters, `init.defaultBranch = main`, `core.filemode = false`, `[includeIf]` identity blocks, `cleanup` alias |\n| `~/.tmux.conf` | Mouse support, Nord status bar, intuitive split/reload bindings |\n| `~/.config/terminator/config` | Nord colour palette profile, custom font, layout |\n| `~/.config/terminator/plugins/grid_tabs.py` | GridTabIconizer — Python plugin that shows pane-layout icons (▪ ⬛ etc.) in Terminator tab and window titles |\n| `~/.p10k.zsh` | Your saved Powerlevel10k configuration — embedded directly, active on first zsh login *(zsh only)* |\n| `~/.config/fontconfig/fonts.conf` | Prefers MesloLGS NF for all monospace applications (when enabled) |\n\n---\n\n## Shell Configuration\n\n### Aliases (available in both bash and zsh)\n\n| Alias | Expands to |\n| :--- | :--- |\n| `ls` | `eza --color=always --icons --group-directories-first` |\n| `ll` | `eza -la --icons --group-directories-first --git` |\n| `cat` | `batcat --style=plain --paging=never` |\n| `k` | `kubectl` *(added when kubectl is on PATH)* |\n| `..` / `...` / `....` | `cd ..` / `cd ../..` / `cd ../../..` |\n| `gco` | `git checkout` |\n| `gcb` | `git checkout -b` |\n| `gfpo` | `git fetch --prune origin` |\n| `gbd` | `git branch -D` |\n| `git-perms-on` | `git config core.filemode true` |\n| `git-perms-off` | `git config core.filemode false` |\n| `bashconfig` | `vim ~/.bashrc` *(bash only)* |\n| `vimconfig` | `vim ~/.vimrc` |\n| `bash_reload` | `source ~/.bashrc` *(bash only)* |\n| `zshconfig` | `vim ~/.zshrc` *(zsh only)* |\n| `zsh_reload` | `source ~/.zshrc` *(zsh only)* |\n| `explorer` | `explorer.exe .` *(WSL only)* |\n| `chrome` | `google-chrome --use-angle=vulkan --use-vulkan --enable-features=Vulkan --ignore-gpu-blocklist \u0026` *(WSL only)* |\n| `shared_folder` | `cd /mnt/c/Users/\u003cWINDOWS_USER\u003e/Documents/SharedLinux` *(WSL only)* |\n\n### `gacp` function\n\nA single command to stage, commit (with optional GPG signing), and push:\n\n```bash\ngacp \"commit message\"\n# expands to: git add -A \u0026\u0026 git commit [-S] -m \"commit message\" \u0026\u0026 git push\n```\n\n### Other shell functions (available in both bash and zsh)\n\n| Function | Description |\n| :--- | :--- |\n| `connect_cluster \u003csub\u003e \u003crg\u003e \u003ccluster\u003e` | Sets `KUBECONFIG`, runs `az aks get-credentials`, and converts kubeconfig with `kubelogin` (Azure AD). Also updates the shell prompt to show the cluster name. |\n| `maincolors` | Prints a visual grid of the 16 terminal colours (indices 0–15) with their current hex values — useful for verifying Nord or custom palette output. |\n| `fm [path]` | Opens PCManFM file manager detached from the terminal (silent, backgrounded). |\n\n### Bash → Zsh history migration\n\nWhen you choose `zsh` as your default shell, the script automatically:\n\n1. Reads `~/.bash_history` and strips timestamp comment lines (`#1234567890`)\n2. Deduplicates against any existing `~/.zsh_history` entries\n3. Appends the unique commands to `~/.zsh_history`\n\n\u003e **Manual tip (if skipping migration):** `cat ~/.bash_history \u003e\u003e ~/.zsh_history`\n\n### GPG TTY\n\nBoth dotfiles export `GPG_TTY=$(tty)` so commit signing works correctly in terminal sessions.\n\n---\n\n## WSL Integration\n\nWhen the script detects WSL (`/proc/version` contains `microsoft`), it performs additional setup:\n\n| Feature | Details |\n| :--- | :--- |\n| **Smart Launch Scripts** | Writes four files to `%USERPROFILE%\\Documents`: `terminator-launch.bat` (RAM-marker logic — cold-boots WSL only once per Windows session), `terminator-invisible.vbs` (invisible wrapper for the BAT), `wsl-preboot.bat` (shuts down WSL and sets the session marker), and `wsl-preboot.vbs` (invisible wrapper for the preboot BAT) |\n| **Terminator Icon** | Converts the installed `terminator.png` to `terminator.ico` (via ImageMagick) and saves it to your Windows Documents folder (`%USERPROFILE%\\Documents`) |\n| **Shared Folder Alias** | `shared_folder` alias → `/mnt/c/Users/\u003cWINDOWS_USER\u003e/Documents/SharedLinux` |\n| **WSL Preboot Shortcut** | Creates `WSL Preboot.lnk` in the Windows Startup folder — silently runs `wsl-preboot.vbs` on every Windows login, which shuts down WSL and writes the `/dev/shm/wsl_flushed` RAM marker so `terminator-launch.bat` can skip redundant cold-boots. Any legacy `WSL Flush.lnk` is removed once during setup. |\n\n### Creating a Windows Desktop Shortcut for Terminator\n\n1. **Right-click** the Desktop → **New** → **Shortcut**\n2. **Target:** `wscript.exe \"%USERPROFILE%\\Documents\\terminator-invisible.vbs\"`\n3. Click **Next**, name it `Terminator`, click **Finish**\n4. **Right-click** the shortcut → **Properties** → **Change Icon** → browse to `%USERPROFILE%\\Documents\\terminator.ico`\n5. Click **OK** and pin to taskbar if desired\n\n---\n\n## Post-Install Checklist\n\nAfter the script completes, follow these steps:\n\n- [ ] **Log out and log back in** — activates the new default shell and `docker` group membership\n- [ ] **Add SSH key to GitHub** *(if you chose `new`)*: `cat ~/.ssh/id_ed25519.pub` then paste into GitHub → Settings → SSH Keys. Skip if you imported an existing key that is already there.\n- [ ] **Add GPG key to GitHub:** `gpg --armor --export \u003cKEY_ID\u003e` then paste into GitHub → Settings → SSH and GPG Keys → New GPG key\n- [ ] **Back up your GPG key** *(if you chose `new`)*: `gpg --export-secret-keys \u003cKEY_ID\u003e \u003e ~/gpg-backup.key` and store it safely\n- [ ] **Powerlevel10k:** your saved `~/.p10k.zsh` config is embedded and written automatically — no setup needed. Run `p10k configure` only if you want to regenerate it.\n- [ ] **Set terminal font:** In Terminator/your terminal emulator, select **MesloLGS NF** as the font to display Powerlevel10k icons correctly\n- [ ] **Verify commit signing:** `git commit --allow-empty -m \"test gpg\" -S` then `git log --show-signature -1`\n- [ ] **WSL only:** Create the Windows Terminator shortcut as described above\n- [ ] **WSL only:** `WSL Preboot.lnk` was placed in your Windows Startup folder automatically — it runs silently on every login to prepare the WSL session (no manual steps needed)\n\n---\n\n## Requirements\n\n| Requirement | Notes |\n| :--- | :--- |\n| Ubuntu 24.04 (or WSL2 running Ubuntu 24.04) | Other Debian-based distros may work with minor adjustments |\n| `sudo` access | Required for apt installs, `chsh`, and Docker group management |\n| Internet connection | All tools are downloaded from official sources during the run |\n| ~3 GB disk space | For all packages, fonts, and plugin installations |\n\n---\n\n## License\n\nThis project is licensed under the GNU General Public License v3.0 — see the [LICENSE](LICENSE) file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmanicshadow%2Flinux-configs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmanicshadow%2Flinux-configs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmanicshadow%2Flinux-configs/lists"}