{"id":15007170,"url":"https://github.com/krish-gh/linux-setup","last_synced_at":"2026-03-14T21:07:18.266Z","repository":{"id":248244016,"uuid":"828166181","full_name":"krish-gh/linux-setup","owner":"krish-gh","description":"Fully automated post installation setup for desktop linux","archived":false,"fork":false,"pushed_at":"2026-02-21T19:58:25.000Z","size":2463,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-02-21T23:10:08.093Z","etag":null,"topics":["archlinux","cinnamon","debian","fedora","gnome","kde-plasma","linux","linux-desktop","linux-distribution","linux-setup","linux-setup-scripts","linuxmint","opensuse","ubuntu","xfce"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/krish-gh.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"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}},"created_at":"2024-07-13T10:11:08.000Z","updated_at":"2026-02-21T16:55:32.000Z","dependencies_parsed_at":"2024-07-14T11:49:24.624Z","dependency_job_id":"c7dab636-dd77-4e3f-98c3-fdca2afabe75","html_url":"https://github.com/krish-gh/linux-setup","commit_stats":null,"previous_names":["krish-gh/linux-setup"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/krish-gh/linux-setup","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/krish-gh%2Flinux-setup","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/krish-gh%2Flinux-setup/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/krish-gh%2Flinux-setup/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/krish-gh%2Flinux-setup/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/krish-gh","download_url":"https://codeload.github.com/krish-gh/linux-setup/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/krish-gh%2Flinux-setup/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30517773,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-14T19:51:21.629Z","status":"ssl_error","status_checked_at":"2026-03-14T19:51:12.959Z","response_time":57,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["archlinux","cinnamon","debian","fedora","gnome","kde-plasma","linux","linux-desktop","linux-distribution","linux-setup","linux-setup-scripts","linuxmint","opensuse","ubuntu","xfce"],"created_at":"2024-09-24T19:05:04.581Z","updated_at":"2026-03-14T21:07:18.261Z","avatar_url":"https://github.com/krish-gh.png","language":"Shell","readme":"# Post installation setup for desktop linux\n\nAutomated post-installation setup script for Linux desktop environments. This project automates system configuration, package installation, debloating, and desktop environment setup across multiple Linux distributions and desktop environments.\n\n## Features\n\n- **Automatic Distro Detection**: Detects your Linux distribution and desktop environment automatically\n- **Debloating**: Removes unnecessary pre-installed packages to reduce system bloat\n- **Package Management**: Installs essential system, development, and application packages\n- **Shell Configuration**: Sets up Bash with aliases, Starship prompt, and syntax highlighting for Nano\n- **Font Setup**: Installs and configures fonts including Nerd Fonts for terminal use\n- **Terminal Emulator Setup**: Configures Alacritty, Kitty, WezTerm, or GNOME Terminal with themes\n- **Desktop Environment Configuration**: Applies dconf settings for GNOME, KDE, Cinnamon, and XFCE\n- **Home Directory Setup**: Configures user home files (.bashrc, .profile, .xresources, etc.)\n- **Security**: Sets up keyring, sudo configuration, and autologin capabilities\n- **Hardware Support**: Installs drivers for Intel, VMware, VirtualBox, Hyper-V, and QEMU\n- **System Customization**: Applies kernel parameters, journald, and core dump configurations\n\n## Prerequisites\n\n- A supported Linux distribution (see [Supported Scenarios](#supported-scenario))\n- Sudo access for system-level configuration\n- Internet connection to download packages and resources\n- `curl` command-line tool (required)\n\n## Supported scenario\n\n\u003e **_NOTE:_** KDE's config system is all over the places and many things are only possible from UI. So, I could automate only few things. That's one of the reasons I don't like KDE.\n\n| Distrution Type | Specific                | Desktop Environment        |\n| --------------- | ----------------------- | -------------------------- |\n| Arch            | Arch                    | Gnome, KDE, Cinnamon, XFCE |\n|                 | EndeavourOS             | Gnome, KDE, Cinnamon       |\n| Debian          | Debian                  | Gnome, XFCE                |\n|                 | Ubuntu                  | Gnome                      |\n|                 | Mint                    | Cinnamon, XFCE             |\n|                 | LMDE                    | Cinnamon                   |\n| Fedora          | Fedora (Non-Silverblue) | Gnome, KDE, Cinnamon, XFCE |\n| OpenSUSE        | Tumbleweed, Leap        | Gnome, KDE, Cinnamon, XFCE |\n\n## Project Structure\n\n### Main Scripts\n\n- [setup.sh](setup.sh) - Entry point that detects whether running local or remote and executes `setup-main.sh`\n- [scripts/setup-main.sh](scripts/setup-main.sh) - Primary orchestration script that handles:\n  - Distribution and desktop environment detection\n  - Variable initialization for package managers\n  - Package installation and system configuration\n  - Home directory and dconf setup\n- [scripts/setup-guide.sh](scripts/setup-guide.sh) - Quick reference and example usage\n\n### `/debloat`\nContains lists of packages to uninstall for each distribution to reduce bloat:\n- `arch.txt` - Packages to remove from Arch-based systems\n- `debian.txt` - Packages to remove from Debian-based systems\n- `fedora.txt` - Packages to remove from Fedora\n- `opensuse.txt` - Packages to remove from OpenSUSE\n\n### `/desktop`\nDesktop environment configuration scripts and dconf boolean settings:\n- `gnome.sh` - GNOME setup: installs tweaks, extensions, applies dconf settings\n- `gnome.dconf` - GNOME dconf database settings (schemas, keybindings, appearance)\n- `kde.sh` - KDE Plasma setup and limited configuration (KDE is mostly UI-driven)\n- `cinnamon.sh` - Cinnamon setup: installs packages, applies themes\n- `cinnamon.dconf` - Cinnamon dconf settings (panel, themes, animations)\n- `xfce.sh` - XFCE setup: installs packages, configures panels and themes\n- `xfce.dconf` - XFCE dconf settings (panel layout, window manager behavior)\n- `gterm.dconf` - GNOME Terminal color scheme and appearance settings\n- `common.dconf` - Shared dconf settings applied across all desktop environments\n\n### `/distros`\nDistribution-specific setup and package lists. Each distro has:\n\n**Arch-based systems:**\n- `arch.sh` - Package manager commands and package lists for Arch (pacman)\n- `arch.aliases` - Useful shell aliases for Arch (pacman, yay, etc.)\n\n**Debian-based systems:**\n- `debian.sh` - Package manager commands and package lists for Debian/Ubuntu (apt)\n- `debian.aliases` - Useful shell aliases for Debian systems\n\n**Fedora:**\n- `fedora.sh` - Package manager commands and package lists for Fedora (dnf)\n- `fedora.aliases` - Useful shell aliases for Fedora (dnf, rpm, etc.)\n\n**OpenSUSE:**\n- `opensuse.sh` - Package manager commands and package lists for OpenSUSE (zypper)\n- `opensuse.aliases` - Useful shell aliases for OpenSUSE\n\n### `/home`\nUser home directory configuration files and templates:\n- `.bashrc` - Bash initialization (custom functions, sourcing from .aliases)\n- `.profile` - Shell login profile environment setup\n- `.xinitrc` - X11 initialization (for startx)\n- `.xprofile` - X11 session startup profile\n- `.xsessionrc` - X11 session configuration\n- `.Xresources` - X11 resource database (font DPI, colors, etc.)\n- `.config/` - Desktop environment and application configs\n- `.local/` - User-local binaries and data files\n- `.config/fontconfig/fonts.conf` - Font rendering configuration\n- `.config/nano/nanorc` - Nano editor configuration\n- `.config/alacritty/alacritty.toml` - Alacritty terminal emulator config\n- `.config/kitty/kitty.conf` - Kitty terminal emulator config\n- `.local/share/keyrings/` - GNOME Keyring files\n\n### `/specific`\nFine-grained, distro-version specific configurations:\n- `arch.sh` - Arch-specific setup hooks\n- `debian.sh` - Debian-specific setup hooks\n- `ubuntu.sh` - Ubuntu-specific setup hooks\n- `linuxmint.sh` - Linux Mint-specific setup hooks\n- `linuxmint.dconf` - Linux Mint dconf settings\n- `neon.sh` - KDE Neon-specific setup hooks\n\n### `/system`\nSystem-level configuration files (require sudo):\n\n**Kernel and System Parameters:**\n- `etc/sysctl.d/999-sysctl.conf` - Kernel parameters (network, memory, security)\n\n**Systemd Services:**\n- `etc/systemd/journald.conf.d/00-journal-size.conf` - Journal size and retention policy\n- `etc/systemd/coredump.conf.d/custom.conf` - Core dump handling configuration\n\n**Display Manager:**\n- `etc/dconf/db/gdm.d/95-gdm-settings` - GNOME Display Manager (GDM) login screen settings\n\n## Customization\n\n### Modifying Package Lists\n\nTo customize which packages are installed/removed:\n\n1. **For your specific distribution**, edit `/distros/{arch,debian,fedora,opensuse}.sh`:\n   - Modify `*_PACKAGES_TO_INSTALL` variables to add/remove packages\n   - Update `UNINSTALL_CMD` options for removal behavior\n\n2. **For debloating**, edit `/debloat/{arch,debian,fedora,opensuse}.txt`:\n   - Add or remove one package name per line\n   - Comment out lines starting with `#` to skip removal\n\n3. **For your specific distro version**, edit `/specific/{arch,debian,ubuntu,linuxmint,neon}.sh`:\n   - Add distro-specific hooks and configurations\n   - Override variables from `/distros` scripts if needed\n\n### Customizing Desktop Environment Settings\n\nEdit the relevant dconf file in `/desktop/`:\n- **GNOME**: Modify `gnome.dconf` (keybindings, schema settings, appearance)\n- **XFCE**: Modify `xfce.dconf` (panel, window manager, workspace)\n- **Cinnamon**: Modify `cinnamon.dconf` (animations, themes, effects)\n- **Common**: Modify `common.dconf` (settings applied to all DEs)\n\nDConf files use a simple key=value format. See [DConf documentation](https://wiki.gnome.org/Projects/dconf) for details.\n\n### Terminal Emulator Configuration\n\nConfigure terminal theme and appearance:\n\n- **Alacritty** (`.config/alacritty/alacritty.toml`): Edit for font, colors, padding\n- **Kitty** (`.config/kitty/kitty.conf`): Edit for font, opacity, keybindings  \n- **WezTerm** (`.config/wezterm/wezterm.lua`): Configure with Lua scripting\n\nThemes are downloaded from upstream projects (Catppuccin by default).\n\n### Shell Aliases and Functions\n\nCustomize `/distros/{distro}.aliases` to add your own shell aliases sourced at login.\n\n## Logging and Debugging\n\nThe setup script creates a log file in your home directory for each run:\n```\n~/setup-2026-02-21-14:30:45.log\n```\n\nView the log:\n```bash\ncat ~/setup-*.log\ntail -f ~/setup-*.log  # Follow in real-time\n```\n\n## Notes and Limitations\n\n- **KDE Plasmi**: KDE's configuration system is complex and mostly UI-driven. The automation covers basic packages and themes only. Manual configuration of many settings is still required.\n- **GDM Configuration**: Commented out in the main setup—uncomment `/desktop/gnome.sh` if you need to customize the login screen.\n- **Waylan d/Xorg**: The script detects your current session; some settings may not apply if switching between Wayland and Xorg.\n- **Interactive Setup**: The script includes interactive checks and may pause for confirmation on some steps.\n\n## Requirements\n\n- **Supported Distributions**: Arch, Debian, Fedora, OpenSUSE (and their derivatives)\n- **Sudo Access**: Required for system-level configuration\n- **Internet Connection**: Needed for downloading packages and resources\n- **curl**: Required for downloading remote files\n- **jq**: JSON parser (installed during setup if not present)\n\n## License\n\nThis project is provided as-is for personal use and customization.\n\n## Installation\n\n### Quick Start - Option #1 (Remote)\nRun without cloning this repo. It downloads required files when needed:\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/krish-gh/linux-setup/main/setup.sh | bash\n```\n\n### Option #2 (Local Clone)\nClone the repo first and run from local files:\n\n```bash\ngit clone https://github.com/krish-gh/linux-setup.git \u0026\u0026\n. linux-setup/setup.sh \u0026\u0026\nrm -rf linux-setup\n```\n\nThe script will:\n1. Detect your distribution and desktop environment\n2. Display detected configuration\n3. Ask for confirmation before making any changes\n4. Create a timestamped log file at `~/setup-YYYY-MM-DD-HH:MM:SS.log`\n\n## Setup Overview\n\nThe setup process is orchestrated by `setup-main.sh` which performs the following in order:\n\n1. **Detection Phase**: Identifies Linux distribution, package manager, and desktop environment\n2. **System Update**: Refreshes package sources and updates the system\n3. **Debloating**: Removes unnecessary pre-installed packages from `/debloat` directory\n4. **Package Installation**: Installs software in categories:\n   - System packages (firmware, ALSA, power management)\n   - Hardware drivers (Intel, VMware, VirtualBox, etc.)\n   - Fonts and rendering improvements\n   - Terminal utilities (Shellcheck, Starship, Fastfetch)\n   - Applications (Firefox, VLC, Seahorse, etc.)\n   - Development tools (Git, Python, Visual Studio Code, etc.)\n   - DE-specific packages and themes\n5. **Shell Configuration**: Sets up Bash completion, aliases, and Starship prompt\n6. **Font Installation**: Configures fonts with proper hinting and installs Nerd Fonts\n7. **Terminal Emulator**: Sets up terminal configuration with color themes\n8. **Home Directory**: Copies configuration files and sets up keyring\n9. **Desktop Environment**: Applies aesthetic and behavior settings via dconf\n10. **System Configuration**: Sets kernel parameters, journald logging, and core dumps\n11. **Permissions**: Configures sudo rules and autologin group membership\n\n## Configuration Files\n\n### Distribution-Specific Variables\n\nEach distro script (in `/distros`) defines package managers and package lists:\n- Package manager commands (install, remove, update)\n- System packages by category\n- Hardware-specific drivers\n- Application packages\n- Development packages\n- Desktop environment packages\n\n### Desktop Environment Settings\n\nDConf files (in `/desktop`) store graphical settings for:\n- **GNOME**: Window manager, keyboard shortcuts, color scheme\n- **Cinnamon**: Panel layout, themes, animations\n- **XFCE**: Panel configuration, window behavior\n- **KDE**: Limited automation (requires manual configuration in many cases)\n\n### Package Removal Lists\n\nFiles in `/debloat` contain package names to remove by distribution:\n- Games, media players (if pre-installed)\n- Extra applications\n- Language plugins\n- Accessibility tools (if not needed)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkrish-gh%2Flinux-setup","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkrish-gh%2Flinux-setup","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkrish-gh%2Flinux-setup/lists"}