{ config, pkgs, tree, ... }: let alsaDevice = "sysdefault:CARD=A"; alsaControl = "Headphone"; mpvDevice = "alsa/${alsaDevice}"; hardwareVolume = 80; startMusicPlayer = pkgs.writeShellScriptBin "startMusicPlayer" '' ${pkgs.alsa-utils}/bin/amixer -D "${alsaDevice}" sset "${alsaControl}" "${toString hardwareVolume}%" exec ${pkgs.mpv}/bin/mpv \ "https://music:$(cat /secrets/music_stream_password)@mpd.owo.monster/flac" \ --cache=yes --cache-pause-initial=yes --cache-pause-wait=5 \ --vo=gpu --force-window --script-opts-append=osc-visibility=always \ --ao=alsa --audio-device="${mpvDevice}" ''; startMusicPlayerSession = pkgs.writeShellScriptBin "startMusicPlayerSession" '' set -x export XDG_RUNTIME_DIR=/run/user/$UID dbus-update-activation-environment --systemd DISPLAY WAYLAND_DISPLAY XDG_CURRENT_DESKTOP exec systemd-inhibit --what=sleep:idle:handle-lid-switch ${startMusicPlayer}/bin/startMusicPlayer ''; in { imports = with tree; [ profiles.connectivity.networkManager profiles.wifiHardware ]; environment.systemPackages = [startMusicPlayer startMusicPlayerSession]; users.users.music-player = { uid = 1001; isNormalUser = true; linger = true; extraGroups = [ "video" "input" "audio" "rtkit" ]; }; home-manager.users.music-player = { programs.mpv.enable = true; imports = with tree; [ home.base ]; home.stateVersion = "23.05"; }; systemd.services."music-player" = { enable = true; after = [ "systemd-user-sessions.service" "plymouth-start.service" "plymouth-quit.service" "systemd-logind.service" "getty@tty1.service" "user@1001.service" "network.target" ]; before = ["music-player.target"]; wants = ["dbus.socket" "network.target" "user@1001.service" "systemd-logind.service" "plymouth-quit.service"]; wantedBy = ["music-player.target"]; conflicts = ["getty@tty1.service"]; restartIfChanged = true; unitConfig.ConditionPathExists = "/dev/tty1"; serviceConfig = { ExecStart = '' ${pkgs.cage}/bin/cage -s ${startMusicPlayerSession}/bin/startMusicPlayerSession ''; User = "music-player"; StandardError = "append:/var/log/music-player.log"; IgnoreSIGPIPE = "no"; UtmpIdentifier = "%n"; UtmpMode = "user"; TTYPath = "/dev/tty1"; TTYReset = "yes"; TTYVHangup = "yes"; TTYVTDisallocate = "yes"; StandardInput = "tty-fail"; PAMName = "music-player"; }; environment = { XDG_RUNTIME_DIR = "/run/user/1001"; XDG_SESSION_TYPE = "wayland"; }; }; security.polkit.enable = true; security.pam.services.music-player.text = '' auth required pam_unix.so nullok account required pam_unix.so session required pam_unix.so session required pam_env.so conffile=/etc/pam/environment readenv=0 session required ${config.systemd.package}/lib/security/pam_systemd.so ''; hardware.opengl.enable = true; systemd.targets.music-player = { description = "Music player"; wants = ["music-player.service" "networkmanager.service" "user@1001.service"]; }; }