Add promtail to the kodi group and set kodi home to 750 so promtail can read ~/.kodi/temp/kodi.log. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
145 lines
3.2 KiB
Nix
145 lines
3.2 KiB
Nix
{
|
|
config,
|
|
pkgs,
|
|
lib,
|
|
...
|
|
}:
|
|
|
|
let
|
|
kodiPkg = pkgs.kodi-wayland.withPackages (p: [
|
|
p.jellycon
|
|
p.sendtokodi
|
|
p.inputstream-adaptive
|
|
]);
|
|
|
|
hyprlandConfig = ''
|
|
# Monitor — auto-detect, native resolution
|
|
monitor = , preferred, auto, 1
|
|
|
|
# Launch Kodi and Firefox on login
|
|
exec-once = ${lib.getExe' kodiPkg "kodi"}
|
|
exec-once = ${lib.getExe pkgs.firefox}
|
|
|
|
# Workspace rules — Kodi on 1, Firefox on 2
|
|
windowrulev2 = workspace 1 silent, class:^(kodi)$
|
|
windowrulev2 = workspace 2 silent, class:^(firefox)$
|
|
windowrulev2 = fullscreen, class:^(kodi)$
|
|
windowrulev2 = fullscreen, class:^(firefox)$
|
|
|
|
# Start on workspace 1 (Kodi)
|
|
workspace = 1, default:true
|
|
|
|
# Switch workspaces with Super+1/2
|
|
bind = SUPER, 1, workspace, 1
|
|
bind = SUPER, 2, workspace, 2
|
|
|
|
# No gaps, no borders — TV setup
|
|
general {
|
|
gaps_in = 0
|
|
gaps_out = 0
|
|
border_size = 0
|
|
}
|
|
|
|
decoration {
|
|
rounding = 0
|
|
}
|
|
|
|
# Disable animations for snappy switching
|
|
animations {
|
|
enabled = false
|
|
}
|
|
|
|
misc {
|
|
# Disable Hyprland logo/splash
|
|
disable_hyprland_logo = true
|
|
disable_splash_rendering = true
|
|
}
|
|
'';
|
|
in
|
|
{
|
|
# Hyprland compositor with UWSM for proper dbus/systemd session management
|
|
programs.hyprland = {
|
|
enable = true;
|
|
withUWSM = true;
|
|
portalPackage = pkgs.xdg-desktop-portal-hyprland;
|
|
};
|
|
|
|
# greetd for auto-login — UWSM starts Hyprland as a systemd session
|
|
services.greetd = {
|
|
enable = true;
|
|
settings = {
|
|
default_session = {
|
|
command = "uwsm start hyprland-uwsm.desktop";
|
|
user = "kodi";
|
|
};
|
|
};
|
|
};
|
|
|
|
# Deploy Hyprland config to kodi user's XDG config dir
|
|
systemd.tmpfiles.rules = [
|
|
"d /home/kodi/.config/hypr 0755 kodi kodi -"
|
|
];
|
|
environment.etc."skel/hypr/hyprland.conf".text = hyprlandConfig;
|
|
system.activationScripts.hyprlandConfig = lib.stringAfter [ "users" ] ''
|
|
install -D -o kodi -g kodi -m 0644 /dev/stdin /home/kodi/.config/hypr/hyprland.conf <<'HYPRCONF'
|
|
${hyprlandConfig}
|
|
HYPRCONF
|
|
'';
|
|
|
|
# Kodi user
|
|
users.users.kodi = {
|
|
isNormalUser = true;
|
|
home = "/home/kodi";
|
|
homeMode = "750";
|
|
group = "kodi";
|
|
extraGroups = [
|
|
"video"
|
|
"audio"
|
|
"input"
|
|
];
|
|
};
|
|
users.groups.kodi = { };
|
|
|
|
# Allow promtail to read kodi logs
|
|
users.users.promtail.extraGroups = [ "kodi" ];
|
|
|
|
# Packages available on the system
|
|
environment.systemPackages = [
|
|
kodiPkg
|
|
pkgs.firefox
|
|
pkgs.yt-dlp
|
|
];
|
|
|
|
# PipeWire for audio (HDMI passthrough support)
|
|
services.pipewire = {
|
|
enable = true;
|
|
alsa.enable = true;
|
|
pulse.enable = true;
|
|
};
|
|
|
|
# Allow VA-API hardware decode in Firefox
|
|
environment.sessionVariables = {
|
|
MOZ_ENABLE_WAYLAND = "1";
|
|
LIBVA_DRIVER_NAME = "iHD";
|
|
};
|
|
|
|
# Ship Kodi logs to Loki
|
|
services.promtail.configuration.scrape_configs = [
|
|
{
|
|
job_name = "kodi";
|
|
static_configs = [
|
|
{
|
|
targets = [ "localhost" ];
|
|
labels = {
|
|
job = "kodi";
|
|
hostname = config.networking.hostName;
|
|
tier = config.homelab.host.tier;
|
|
role = config.homelab.host.role;
|
|
__path__ = "/home/kodi/.kodi/temp/kodi.log";
|
|
};
|
|
}
|
|
];
|
|
}
|
|
];
|
|
}
|