dotfiles/README.md

110 lines
5.8 KiB
Markdown

# Arch Linux Dotfiles & Hyprland Setup
This repository manages your personal dotfiles and a modular, Wayland-ready desktop environment for Arch Linux using `paru`.
---
## Features
- Modular setup: each aspect (packages, symlinks, shell, Neovim, Hyprland, sound, browsers, devtools, etc.) is handled by its own script in `modules/`.
- All dotfiles and app configs are version-controlled and symlinked to your home directory.
- Device-aware: uses `$DOTFILES_DEVICE` and `$HOSTNAME` to select device-specific config fragments (e.g., laptop/desktop, monitor layouts).
- Out-of-the-box integration for Hyprland, Waybar, Rofi, Mako, Alacritty, wlogout, and more.
- Modern sound stack (PipeWire, WirePlumber, pavucontrol, etc.).
- Volume notifications: see current volume as a Mako popup at the bottom center when changed.
- Multi-monitor workspace rules: workspace 1 always on laptop, others on external (DP-1) if connected; all on laptop if standalone.
- Brave browser always launches on workspace 10 and autostarts with Hyprland.
- TTY/console uses German nodeadkeys layout (`de-latin1-nodeadkeys`).
- Devtools module installs git, Python, Node.js, Docker, VS Code, opencode-bin, and more.
- Easily extensible: add new modules, fragments, or configs as needed.
---
## Setup
1. Clone this repository:
```sh
git clone https://github.com/yourusername/dotfiles.git ~/git/dotfiles
cd ~/git/dotfiles
```
2. Run the setup script:
```sh
./setup.sh
```
When you run `setup.sh`, your device profile is detected via `host-profiles.conf` (mapping `$HOSTNAME` to `$DOTFILES_DEVICE`, e.g., `laptop` or `desktop`).
This ensures that device-specific configs (battery, backlight, touchpad, monitor layout, etc.) are applied correctly for your hardware.
You can also set the environment variable manually to override:
```sh
DOTFILES_DEVICE=desktop ./setup.sh
```
The script will install all required packages and symlink dotfiles and configs (including everything in `.config/`) to your home directory, using the correct device-specific fragments for Hyprland, Waybar, and more.
---
## Customization & Extending
- Add new dotfiles to the repo root (e.g., `.zshrc`, `.tmux.conf`).
- Place app configs in `.config/` (e.g., `.config/hypr/hyprland.conf`).
- Add or edit modules in the `modules/` directory to automate more setup steps.
- To add custom scripts, place them in `.local/bin/` in the repo; they will be symlinked to `~/.local/bin/`.
- To add browsers, edit `modules/06-browsers.sh` (Chrome, Firefox, Brave supported out of the box).
- To add devtools, edit `modules/50-devtools.sh` (includes VS Code, opencode-bin, lazygit, etc.).
- To add new device types (e.g., tablet, server), update `host-profiles.conf` and add corresponding config fragments (e.g., `hypridle-tablet.conf`).
- To add new fragment types, extend the `fragment_types` array in `modules/02-symlinks.sh`.
---
## Requirements
- Arch Linux
- [paru](https://github.com/Morganamilo/paru) (will be installed automatically if missing)
- For TTY keymap: `kbd` package (should be present on most systems)
---
## Quick Reference: Main Modules
| Module | Purpose |
|-----------------------|-----------------------------------------|
| 01-packages.sh | Base packages (shell, tools, etc.) |
| 02-symlinks.sh | Symlinks dotfiles/configs, device-aware |
| 03-shell.sh | Shell setup (Zsh, keymap) |
| 04-nvim.sh | Neovim (AstroNvim) setup |
| 05-sound.sh | Sound stack (PipeWire, etc.) |
| 06-hyprland.sh | Hyprland, Waybar, Rofi, etc. |
| 07-browsers.sh | Browsers (Chrome, Firefox, Brave) |
| 50-devtools.sh | Devtools (git, VS Code, etc.) |
| 99-postinstall.sh | Post-install steps |
---
## Troubleshooting
- **Missing device-specific fragment:** If you see a warning about a missing fragment (e.g., `hypridle-laptop.conf`), create the file in `.config/hypr/includes/` or update your `host-profiles.conf` mapping.
- **Symlink warnings:** If a non-empty directory exists where a symlink should be, the script will warn and skip removal for safety. Manually back up and remove if needed.
- **Package install errors:** Ensure your Arch system is up to date and AUR is reachable. Rerun `setup.sh` after fixing network or package issues.
- **Updating dotfiles:** Pull the latest changes and re-run `./setup.sh` to sync configs and packages.
---
## Safety & Idempotence
- All scripts are safe to re-run and will not overwrite user files unintentionally.
- Symlinking logic only removes symlinks or empty directories; non-empty directories are preserved with a warning.
---
## Notable Integrations & Tips
- **Browsers:** Chrome, Firefox, and Brave are installed via the browser module. Brave autostarts and is always on workspace 10.
- **Devtools:** Includes VS Code (`visual-studio-code-bin`), opencode-bin, lazygit, and more.
- **Volume OSD:** Volume changes show a notification at the bottom center of the screen (Mako).
- **Multi-monitor:** Workspace 1 is always on the laptop display, others on DP-1 if connected.
- **TTY Keymap:** Console uses German nodeadkeys layout for all users (system-wide via `localectl`).
- **No official Teams/Outlook client:** Use the web app or AUR wrappers for best compatibility.
- **TortoiseGit alternative:** Use GitKraken, Sublime Merge, SmartGit, or lazygit for graphical Git workflows.
- **Logitech Battery Status:**
If you have Logitech G915 (keyboard) or G903 (mouse), battery status is shown in Waybar via the `custom/logitech-battery` module.
The script at `.local/bin/logitech_battery.sh` uses `solaar` to report battery and status for both devices.
To use, ensure `solaar` is installed and your devices are paired. The module appears in the Waybar right section on both desktop and laptop profiles.
---
## License
MIT