# Gentoo Legion Complete Gentoo Linux installation with Hyprland, greetd, and hybrid GPU support for Lenovo Legion laptops and similar AMD + NVIDIA setups. ## About This represents my third attempt at getting Gentoo running properly on this laptop with my preferred Hyprland setup. The hybrid GPU setup was the main challenge - particularly understanding how the USB-C ports route through the NVIDIA GPU while the laptop panel connects to the AMD iGPU. Once that clicked, everything fell into place. The result is a lean system that idles under 2GB of RAM while still providing a full Hyprland desktop. I opted for the distribution kernel (`gentoo-kernel`) rather than a custom compile - it works out of the box with the hardware and saves hours of configuration. Your mileage may vary - I tried to isolate as many of the use flags as I could ## Features - **Full disk encryption** - LUKS2 with Btrfs subvolumes - **Hybrid GPU support** - AMD iGPU + NVIDIA dGPU working together - **Hyprland desktop** - Modern Wayland compositor with greetd + regreet login - **OpenRC init** - Traditional init system, no systemd - **Automated installation** - Scripts for disk setup, chroot, and service configuration ## Hardware Tested **Lenovo Legion S7 15ACH6** - AMD Ryzen 9 5900HX (Zen 3, 16 threads) - AMD Radeon Vega (Cezanne) - integrated GPU - NVIDIA GeForce RTX 3050 Ti Mobile - discrete GPU - 24GB DDR4 RAM (THIS IS AN UPGRADE FROM STANDARD! 8GB ON THIS MODEL IS SOLDERED) - NVMe SSD with LUKS2 encryption This configuration should work with other Legion models and similar AMD + NVIDIA hybrid laptops with minor adjustments. ## Quick Start 1. Boot Gentoo minimal install ISO 2. Clone this repository: ```bash git clone https://github.com//gentoo-legion cd gentoo-legion ``` 3. Follow the [Installation Guide](docs/installation.md) ## Directory Structure ``` gentoo-legion/ ├── docs/ # Documentation │ ├── installation.md # Full installation guide │ ├── hybrid-gpu.md # AMD+NVIDIA GPU configuration │ ├── greetd-setup.md # Display manager setup │ └── troubleshooting.md # Common issues and fixes ├── install/ # Installation scripts │ ├── init.sh # Stage 1: Disk partitioning, LUKS, Btrfs │ ├── chroot.sh # Chroot helper script │ └── services.sh # Stage 3: Service configuration ├── portage/ # Portage configuration → /etc/portage/ │ ├── make.conf # Compiler flags, USE flags │ ├── package.use/ # Package-specific USE flags │ ├── package.accept_keywords/ # ~amd64 keywords │ ├── package.license/ # License acceptance │ └── sets/ # Package sets (@hyprland) ├── system/ # System configuration │ ├── ccache.conf # Compiler cache config │ ├── dracut.conf.d/ # Initramfs configuration │ ├── conf.d/ # OpenRC service configs │ └── udev/ # udev rules (power profile switching) ├── greetd/ # Display manager configuration │ ├── config.toml # greetd main config │ ├── regreet.toml # GTK greeter theming │ ├── hyprland.conf # Greeter Hyprland session │ ├── greetd.pam # PAM configuration │ └── start-hyprland-dbus # User session launcher ├── firewall/ # iptables rules │ ├── iptables.rules.example # IPv4 rules (customize) │ └── ip6tables.rules # IPv6 rules ├── hypr/ # Hyprland configuration │ ├── ENVariables.conf # GPU environment variables │ ├── monitors.conf.example # Monitor layout (customize) │ └── wlogout-layout # Power menu for OpenRC └── shell/ # Shell configuration ├── zshrc.example # Zsh config (customize) └── starship.toml # Starship prompt theme ``` ## Configuration Categories ### Copy As-Is These files can be copied directly to your system: | Source | Destination | |--------|-------------| | `portage/*` | `/etc/portage/` | | `system/ccache.conf` | `/etc/ccache.conf` | | `system/dracut.conf.d/*` | `/etc/dracut.conf.d/` | | `system/conf.d/{iptables,ip6tables,snapper}` | `/etc/conf.d/` | | `system/udev/*` | `/etc/udev/rules.d/` | | `greetd/*` | `/etc/greetd/` (and `/etc/pam.d/greetd`) | | `firewall/ip6tables.rules` | `/etc/iptables/` | | `shell/starship.toml` | `~/.config/starship.toml` | ### Customize Before Use These files need editing for your system: | File | What to customize | |------|-------------------| | `system/conf.d/dmcrypt.example` | Set your swap partition device | | `firewall/iptables.rules.example` | Add your trusted networks | | `hypr/monitors.conf.example` | Configure your display layout | | `shell/zshrc.example` | Add your aliases, paths, etc. | ## Key Technologies - **Compositor**: [Hyprland](https://hyprland.org/) with [KooL's dotfiles](https://github.com/JaKooLit/Hyprland-Dots) - **Display Manager**: [greetd](https://sr.ht/~kennylevinsen/greetd/) + [regreet](https://github.com/rharish101/ReGreet) - **Init System**: OpenRC - **Filesystem**: Btrfs with zstd compression - **Encryption**: LUKS2 (dm-crypt) - **Snapshots**: Snapper for system rollback - **Shell**: Zsh with Starship prompt ## Documentation - [Installation Guide](docs/installation.md) - Complete step-by-step installation - [Hybrid GPU Guide](docs/hybrid-gpu.md) - AMD + NVIDIA configuration - [greetd Setup](docs/greetd-setup.md) - Display manager configuration - [Troubleshooting](docs/troubleshooting.md) - Common issues and fixes ## Btrfs Subvolume Layout | Subvolume | Mount Point | Purpose | |-----------|-------------|---------| | @ | / | Root filesystem | | @home | /home | User data | | @var | /var | Variable data | | @log | /var/log | System logs | | @snapshots | /.snapshots | Snapper backups | ## OpenRC Services **Boot runlevel:** dbus, elogind, dmcrypt **Default runlevel:** sysklogd, sshd, NetworkManager, chronyd, cronie, power-profiles-daemon, display-manager, bluetooth, iptables, ip6tables ## Contributing Contributions are welcome! Please: 1. Fork the repository 2. Create a feature branch 3. Test your changes on actual hardware if possible 4. Submit a pull request ## License MIT License - See [LICENSE](LICENSE) ## Acknowledgments - [JaKooLit](https://github.com/JaKooLit) for Hyprland dotfiles - [Gentoo Wiki](https://wiki.gentoo.org/) for comprehensive documentation - [Hyprland](https://hyprland.org/) for the compositor - The Gentoo and Hyprland communities