feat(desktop): consolidate declarative workstation profile

Capture desktop-specific system, session, Noctalia, and Pi integration alongside shared laptop support. Retire obsolete X11 configuration and make package ownership explicit for repeatable Decman deployments.
This commit is contained in:
2026-08-24 20:20:58 +02:00
parent bfc5aa7933
commit ed063ab1fe
105 changed files with 1479 additions and 8826 deletions
+61 -5
View File
@@ -28,7 +28,7 @@ class UserConfigConcern(decman.Module):
def __init__(
self,
name: str,
files: dict[str, str] | None = None,
files: dict[str, str | tuple[str, int]] | None = None,
directories: dict[str, str] | None = None,
user: str = "alex",
) -> None:
@@ -40,7 +40,11 @@ class UserConfigConcern(decman.Module):
def files(self) -> dict[str, decman.File]:
return {
target: decman.File(
source_file=str(ROOT / source), owner=self.user, permissions=0o644
source_file=str(
ROOT / (source[0] if isinstance(source, tuple) else source)
),
owner=self.user,
permissions=source[1] if isinstance(source, tuple) else 0o644,
)
for target, source in self._files.items()
}
@@ -113,6 +117,7 @@ def common_user_config() -> list[UserConfigConcern]:
"/home/alex/.config/hypr/hyprland.lua": "config/user/common/hypr/hyprland.lua",
"/home/alex/.config/hypr/hyprlock.conf": "config/user/common/hypr/hyprlock.conf",
"/home/alex/.config/kitty/kitty.conf": "config/user/common/kitty/kitty.conf",
"/home/alex/.config/mimeapps.list": "config/user/common/mime/mimeapps.list",
"/home/alex/.config/noctalia/10-base.toml": "config/user/common/noctalia/10-base.toml",
"/home/alex/.config/noctalia/palettes/Ember OLED.json": (
"config/user/common/noctalia/palettes/Ember OLED.json"
@@ -126,8 +131,33 @@ def common_user_config() -> list[UserConfigConcern]:
"/home/alex/.config/systemd/user/ssh-agent.service": (
"config/user/common/systemd/user/ssh-agent.service"
),
"/home/alex/.config/user-dirs.dirs": "config/user/common/user-dirs/user-dirs.dirs",
"/home/alex/.local/bin/idle-inhibitor-monitor": (
"config/user/common/bin/idle-inhibitor-monitor",
0o755,
),
"/home/alex/.local/bin/pi-status-ui": (
"config/user/common/bin/pi-status-ui",
0o755,
),
"/home/alex/.local/bin/wayshell-blanker": (
"config/user/common/bin/wayshell-blanker",
0o755,
),
},
{
"/home/alex/.config/alacritty": "config/user/common/alacritty",
"/home/alex/.config/yazi": "config/user/common/yazi",
"/home/alex/.local/share/noctalia/plugins/knowledge-lookup": (
"config/user/common/noctalia/plugins/knowledge-lookup"
),
"/home/alex/.local/share/noctalia/plugins/pi-status-bridge": (
"config/user/common/noctalia/plugins/pi-status-bridge"
),
"/home/alex/.local/share/noctalia/plugins/system-status": (
"config/user/common/noctalia/plugins/system-status"
),
},
{"/home/alex/.config/yazi": "config/user/common/yazi"},
)
]
@@ -234,5 +264,31 @@ def laptop_system() -> list[SystemConcern | UserConfigConcern]:
def desktop_system() -> list[SystemConcern | UserConfigConcern]:
"""Desktop: shared policy plus desktop-specific home configuration."""
return [*common_system(), *desktop_user_config()]
"""Desktop: shared policy plus this host's boot, GPU, input, and session state."""
return [
*common_system(),
SystemConcern(
"desktop-host",
{
"/etc/fstab": "config/system/desktop/storage/fstab",
"/etc/hostname": "config/system/desktop/identity/hostname",
"/etc/keyd/default.conf": "config/system/desktop/input/keyd.conf",
"/etc/modprobe.d/nvidia-pm.conf": "config/system/desktop/nvidia/nvidia-pm.conf",
"/etc/NetworkManager/NetworkManager.conf": (
"config/system/desktop/network/NetworkManager.conf"
),
"/etc/sddm.conf.d/10-theme.conf": "config/system/desktop/sddm/10-theme.conf",
"/etc/udev/rules.d/50-zsa.rules": "config/system/desktop/input/50-zsa.rules",
},
system_manifests=("desktop/hardware-system.txt",),
),
SystemConcern(
"boot",
{
"/boot/EFI/refind/refind.conf": "config/system/desktop/boot/refind.conf",
"/boot/refind_linux.conf": "config/system/desktop/boot/refind_linux.conf",
"/etc/mkinitcpio.conf": "config/system/desktop/boot/mkinitcpio.conf",
},
),
*desktop_user_config(),
]