diff options
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/Hyprland-LUA-analysis-Phase1.md | 159 | ||||
| -rw-r--r-- | docs/copy.sh-tui-analysis-3-14-2026.md | 105 |
2 files changed, 264 insertions, 0 deletions
diff --git a/docs/Hyprland-LUA-analysis-Phase1.md b/docs/Hyprland-LUA-analysis-Phase1.md new file mode 100644 index 00000000..e08901db --- /dev/null +++ b/docs/Hyprland-LUA-analysis-Phase1.md @@ -0,0 +1,159 @@ +# 🧭 Hyprland → Lua Migration Analysis (Phase 1) +<span style="color:#7dd3fc">Focus: identify scripts/configs that **write Hyprland config files** and therefore must change for Lua.</span> + +--- + +## 📌 Table of Contents +- [🎯 Scope & Assumptions](#-scope--assumptions) +- [🧩 Hyprland Config Entry Points](#-hyprland-config-entry-points) +- [✍️ Direct Hyprland Config Writers (must change)](#️-direct-hyprland-config-writers-must-change) +- [🧪 Indirect / Generated Config Writers](#-indirect--generated-config-writers) +- [🧰 Install/Upgrade Writers (copy/restore paths)](#-installupgrade-writers-copyrestore-paths) +- [📟 Runtime‑Only Files (no file writes)](#-runtime-only-files-no-file-writes) +- [📝 Notes / Follow‑ups](#-notes--follow-ups) + +--- + +## 🎯 Scope & Assumptions +<span style="color:#fbbf24">Goal:</span> Identify **files that directly modify Hyprland config on disk** (or generate files sourced by Hyprland), because those will need updating for Lua. + +<span style="color:#a3e635">Out of scope:</span> The new Lua syntax itself. + +--- + +## 🧩 Hyprland Config Entry Points +**Primary file:** `Hyprland-Dots/config/hypr/hyprland.conf` + +This file **sources**: +- `Hyprland-Dots/config/hypr/configs/*.conf` +- `Hyprland-Dots/config/hypr/UserConfigs/*.conf` +- `Hyprland-Dots/config/hypr/monitors.conf` +- `Hyprland-Dots/config/hypr/workspaces.conf` + +Also: +- `Hyprland-Dots/config/hypr/UserConfigs/UserDecorations.conf` **sources** + `~/.config/hypr/wallust/wallust-hyprland.conf` + +➡️ Any script that writes these files must be updated for Lua. + +--- + +## ✍️ Direct Hyprland Config Writers (must change) +These **write/overwrite Hyprland config files**: + +### 🖥️ Monitor Profiles +- `Hyprland-Dots/config/hypr/scripts/MonitorProfiles.sh` + **Writes:** `~/.config/hypr/monitors.conf` + **How:** `cp` chosen profile from `Monitor_Profiles/*.conf` + +### 🎞️ Animations +- `Hyprland-Dots/config/hypr/scripts/Animations.sh` + **Writes:** `~/.config/hypr/UserConfigs/UserAnimations.conf` + **How:** `cp` selected animation file into UserConfigs + +### 🧱 Window Rules Version Switch +- `Hyprland-Dots/config/hypr/scripts/update_WindowRules.sh` + **Writes:** `~/.config/hypr/configs/WindowRules.conf` + **How:** backup + `cp` from `WindowRules-config-v3.conf`, then `hyprctl reload` + +### 🎬 Startup Apps (wallpaper switching) +- `Hyprland-Dots/config/hypr/UserScripts/WallpaperSelect.sh` + **Writes:** `~/.config/hypr/UserConfigs/Startup_Apps.conf` + **How:** `sed -i` toggles `exec-once` lines and updates `$livewallpaper` + +### 🗂️ UserConfig swapper +- `Hyprland-Dots/config/hypr/scripts/UserConfigsSwitcher.sh` + **Writes:** directory move/rename + **How:** `mv` between `UserConfigs` and `UserConfigsBak` + +--- + +## 🧪 Indirect / Generated Config Writers +These generate **files that Hyprland sources**: + +### 🎨 Wallust → Hyprland colors +- `Hyprland-Dots/config/hypr/scripts/ThemeChanger.sh` +- `Hyprland-Dots/config/hypr/scripts/WallustSwww.sh` + +**Writes/overwrites:** +`~/.config/hypr/wallust/wallust-hyprland.conf` + +**Used by:** +`Hyprland-Dots/config/hypr/UserConfigs/UserDecorations.conf` (sources it) + +➡️ The Lua migration must either keep a compatible generated file or switch the generator target. + +--- + +## 🧰 Install/Upgrade Writers (copy/restore paths) +These **modify Hyprland configs during install/upgrade**: + +### 🔧 `copy.sh` +- Edits `Hyprland-Dots/config/hypr/configs/ENVariables.conf` (enables hyprcursor) +- Modifies `~/.config/hypr/configs/Startup_Apps.conf` (quickshell migration) +- Renames/switches `hyprlock.conf` variants (not Hyprland config, but in same dir) +- Calls restore helpers below + +### 🧱 `scripts/lib_copy.sh` +Restores/copies: +- `~/.config/hypr/monitors.conf` +- `~/.config/hypr/workspaces.conf` +- `~/.config/hypr/UserConfigs/Startup_Apps.conf` +- `~/.config/hypr/UserConfigs/WindowRules.conf` +- `~/.config/hypr/UserConfigs/UserKeybinds.conf` +- Additional UserConfigs overlay logic + +--- + +## 📟 Runtime‑Only Files (no file writes) +These **appear to be runtime-only** (no direct file writes detected; they act via `hyprctl`, process control, notifications, etc.): + +### ✅ Scripts +- `Hyprland-Dots/config/hypr/scripts/AirplaneMode.sh` +- `Hyprland-Dots/config/hypr/scripts/Battery.sh` +- `Hyprland-Dots/config/hypr/scripts/BrightnessKbd.sh` +- `Hyprland-Dots/config/hypr/scripts/Brightness.sh` +- `Hyprland-Dots/config/hypr/scripts/ChangeBlur.sh` +- `Hyprland-Dots/config/hypr/scripts/ChangeLayout.sh` +- `Hyprland-Dots/config/hypr/scripts/ClipManager.sh` +- `Hyprland-Dots/config/hypr/scripts/ExternalBrightness.sh` +- `Hyprland-Dots/config/hypr/scripts/fastfetch-wrapper.sh` +- `Hyprland-Dots/config/hypr/scripts/Float-all-Windows.sh` +- `Hyprland-Dots/config/hypr/scripts/GameMode.sh` +- `Hyprland-Dots/config/hypr/scripts/Hypridle.sh` +- `Hyprland-Dots/config/hypr/scripts/KeybindsLayoutInit.sh` +- `Hyprland-Dots/config/hypr/scripts/keybinds_parser.py` +- `Hyprland-Dots/config/hypr/scripts/KeyboardLayout.sh` +- `Hyprland-Dots/config/hypr/scripts/KeyHints.sh` +- `Hyprland-Dots/config/hypr/scripts/KillActiveProcess.sh` +- `Hyprland-Dots/config/hypr/scripts/LockScreen.sh` +- `Hyprland-Dots/config/hypr/scripts/MediaCtrl.sh` +- `Hyprland-Dots/config/hypr/scripts/OverviewToggle.sh` +- `Hyprland-Dots/config/hypr/scripts/Polkit-NixOS.sh` +- `Hyprland-Dots/config/hypr/scripts/Polkit.sh` +- `Hyprland-Dots/config/hypr/scripts/PortalHyprland.sh` +- `Hyprland-Dots/config/hypr/scripts/PortalHyprlandUbuntu.sh` +- `Hyprland-Dots/config/hypr/scripts/RefreshNoWaybar.sh` +- `Hyprland-Dots/config/hypr/scripts/rofi-emacs-keybinds` +- `Hyprland-Dots/config/hypr/scripts/RofiSearch.sh` +- `Hyprland-Dots/config/hypr/scripts/Sounds.sh` +- `Hyprland-Dots/config/hypr/scripts/Toggle-Active-Window-Audio.sh` +- `Hyprland-Dots/config/hypr/scripts/UptimeNixOS.sh` +- `Hyprland-Dots/config/hypr/scripts/Volume.sh` +- `Hyprland-Dots/config/hypr/scripts/WallpaperDaemon.sh` +- `Hyprland-Dots/config/hypr/scripts/WaybarScripts.sh` +- `Hyprland-Dots/config/hypr/scripts/Wlogout.sh` + +### ✅ UserScripts +- `Hyprland-Dots/config/hypr/UserScripts/00-Readme` +- `Hyprland-Dots/config/hypr/UserScripts/RofiCalc.sh` +- `Hyprland-Dots/config/hypr/UserScripts/WallpaperRandom.sh` +- `Hyprland-Dots/config/hypr/UserScripts/WeatherWrap.sh` + +--- + +## 📝 Notes / Follow‑ups +<span style="color:#f97316">Important:</span> +Some scripts are **file writers but not Hyprland config writers** (e.g., `install-uv.sh`, `Distro_update.sh`, and the binary `dots-tui-ubuntu-2404`). They don’t touch Hyprland configs but do modify the system. + +If you want an **exact “no file writes anywhere” list**, I can do a stricter pass (including temp/status files, downloads, etc.). diff --git a/docs/copy.sh-tui-analysis-3-14-2026.md b/docs/copy.sh-tui-analysis-3-14-2026.md new file mode 100644 index 00000000..2b94e693 --- /dev/null +++ b/docs/copy.sh-tui-analysis-3-14-2026.md @@ -0,0 +1,105 @@ +# copy.sh vs TUI Installer Parity Report (2026-03-14) + +This report compares the Bash-based `copy.sh` flow (including helper scripts) against the Python/Textual TUI installer in `../Hyprland-Dots-TUI-Installer/`. + +## ✅ Parity Matches + +### Core Modes & Flow +- Install / Upgrade / Express workflows exist in both. + - `copy.sh`, `scripts/copy_menu.sh` + - TUI: `src/dots_tui/__main__.py`, `src/dots_tui/screens/menu.py`, `src/dots_tui/logic/orchestrator.py` + +### Safety / Setup +- Root check (both abort if root). +- Repo update flow (stash + pull + summary). +- Logs written to `Copy-Logs/` with per-run log file. + +### Hardware / OS Detection + Tweaks +- Nvidia / VM / NixOS tweaks. + - `scripts/lib_detect.sh` + - `src/dots_tui/logic/orchestrator.py`, `src/dots_tui/logic/system.py` + +### User Prompts / Config Choices +- Keyboard layout detect + confirmation. +- Resolution selection (<1440p vs ≥1440p). +- 12h/24h clock (waybar + hyprlock edits). +- Default editor selection (nvim/vim). +- Optional app enablement: asusctl, blueman, ags, quickshell. + +### Copy / Backup / Restore +- Phase1 copy w/ replace prompts: fastfetch, kitty, rofi, swaync. +- Waybar merge semantics (backup, merge configs/styles/UserModules). +- Phase2 copy (btop, cava, hypr, etc.). +- Restore user configs / scripts / hypr files (with express skip). +- Duplicate UserConfigs cleanup. + +### Wallpapers +- Base wallpaper copy to `~/Pictures/wallpapers`. +- Optional 1GB Wallpaper-Bank download (skipped in express). + +### Finalization +- chmod scripts, waybar symlinks, cleanup backups, wallust init. + +## ⚠️ Parity Gaps (Missing or Divergent Behavior) + +### 1) waybar-weather install + config handling +`copy.sh` does **two things** the TUI does not: +- **Installs waybar-weather binary** + - `scripts/lib_apps.sh`: `install_waybar_weather()` + - `copy.sh`: calls it on non-NixOS, or warns on NixOS. +- **Copies waybar-weather config + prompts for units** + - `copy.sh`: block near `WAYBAR_WEATHER_SRC / DEST` (install/upgrade/express logic + Fahrenheit prompt). + +✅ **TUI currently has no references to waybar-weather**. + +--- + +### 2) KeybindsLayoutInit always enabled +`copy.sh` always ensures `exec-once = $scriptsDir/KeybindsLayoutInit.sh` via `ensure_keybinds_init` (called unconditionally). + +TUI only adds it if **one of** (asus / blueman / ags / quickshell) is enabled: +- `src/dots_tui/logic/orchestrator.py` → `_apply_user_choices` + +So if user disables all optional apps, TUI skips it while `copy.sh` still adds it. + +--- + +### 3) Waybar symlink enforcement +`copy.sh` forces `~/.config/waybar/config` and `style.css` to be symlinks even if they are regular files. + +TUI only replaces them **if missing or already a symlink**: +- `src/dots_tui/logic/orchestrator.py` → `_finalize_post_copy` + +So regular files won’t be converted in TUI. + +--- + +### 4) Express mode + SDDM 12h edits +`copy.sh` explicitly **skips SDDM 12h edits** in express mode to avoid sudo prompts. + +TUI still attempts SDDM edits if user chooses 12h: +- `src/dots_tui/logic/orchestrator.py` → `_finalize_post_copy` (SDDM clock edits run whenever `clock_24h` is false). + +--- + +### 5) Menu behavior / CLI flags +- `copy.sh` supports `--tty` to force non-whiptail menu. +- TUI has no equivalent. + +--- + +## ✅ TUI-only Extras (Not in copy.sh) +- Dry-run / plan mode (`--dry-run`). +- Download repo (clone flow). +- Path safety guard (prevents deletes outside `$HOME`). +- Default wallpaper initialization if `.wallpaper_current` missing. + +--- + +## Summary +The TUI installer is **mostly aligned** with `copy.sh`, but **not full parity** due to: +1) Missing `waybar-weather` binary + config + units prompt +2) KeybindsLayoutInit not always added +3) Waybar symlink enforcement behavior mismatch +4) Express-mode SDDM 12h edits mismatch +5) Minor CLI/menu flag mismatch |
