{
  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"];
  };
}