updates & move music to its own container
This commit is contained in:
parent
dff2b84dde
commit
09f47e0cd0
26
flake.lock
26
flake.lock
|
@ -138,11 +138,11 @@
|
||||||
"utils": "utils_4"
|
"utils": "utils_4"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1671459164,
|
"lastModified": 1671831633,
|
||||||
"narHash": "sha256-RbkDnvLV7WjbiF4Dpiezrf8kXxwieQXAVtY8ciRQj6Q=",
|
"narHash": "sha256-tANQOkJnlqK4M83KvvXFMFrIbR0xkloqXY5ruqzR3kE=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "home-manager",
|
"repo": "home-manager",
|
||||||
"rev": "e7eba9cc46547ae86642ad3c6a9a4fb22c07bc26",
|
"rev": "d7eee202e597bc7789498a8664082cf0ffedaa8f",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -175,27 +175,27 @@
|
||||||
},
|
},
|
||||||
"nixpkgs-fixed": {
|
"nixpkgs-fixed": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1670929434,
|
"lastModified": 1671722432,
|
||||||
"narHash": "sha256-n5UBO6XBV4h3TB7FYu2yAuNQMEYOrQyKeODUwKe06ow=",
|
"narHash": "sha256-ojcZUekIQeOZkHHzR81st7qxX99dB1Eaaq6PU5MNeKc=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "1710ed1f6f8ceb75cf7d1cf55ee0cc21760e1c7a",
|
"rev": "652e92b8064949a11bc193b90b74cb727f2a1405",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "1710ed1f6f8ceb75cf7d1cf55ee0cc21760e1c7a",
|
"rev": "652e92b8064949a11bc193b90b74cb727f2a1405",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nixpkgs-unstable": {
|
"nixpkgs-unstable": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1671359686,
|
"lastModified": 1671722432,
|
||||||
"narHash": "sha256-3MpC6yZo+Xn9cPordGz2/ii6IJpP2n8LE8e/ebUXLrs=",
|
"narHash": "sha256-ojcZUekIQeOZkHHzR81st7qxX99dB1Eaaq6PU5MNeKc=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "04f574a1c0fde90b51bf68198e2297ca4e7cccf4",
|
"rev": "652e92b8064949a11bc193b90b74cb727f2a1405",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -207,11 +207,11 @@
|
||||||
},
|
},
|
||||||
"nur": {
|
"nur": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1671541304,
|
"lastModified": 1671893061,
|
||||||
"narHash": "sha256-YDlK8nZpOk7YmOgs8LH6vnreXUx0p0GPxZXi6r6mJW4=",
|
"narHash": "sha256-ZtG0t7+AoviY+eUTVUJK1kiKtNx8XVet3+gMNq44MnU=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "NUR",
|
"repo": "NUR",
|
||||||
"rev": "7c843785562856dfcc78dde7d7141d89a0309402",
|
"rev": "898adb55e324245bd32bd5702decda4aa6471f7d",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
tree-input.inputs.nixpkgs.follows = "nixpkgs-unstable";
|
tree-input.inputs.nixpkgs.follows = "nixpkgs-unstable";
|
||||||
|
|
||||||
# update whenever
|
# update whenever
|
||||||
nixpkgs-fixed.url = "github:nixos/nixpkgs/?branch=nixos-unstable&rev=1710ed1f6f8ceb75cf7d1cf55ee0cc21760e1c7a";
|
nixpkgs-fixed.url = "github:nixos/nixpkgs/?branch=nixos-unstable&rev=652e92b8064949a11bc193b90b74cb727f2a1405";
|
||||||
|
|
||||||
nur.url = "github:nix-community/NUR";
|
nur.url = "github:nix-community/NUR";
|
||||||
|
|
||||||
|
|
|
@ -26,5 +26,5 @@ in {
|
||||||
};
|
};
|
||||||
programs.zsh.shellAliases.mpv-ontop = "mpv --profile=ontop";
|
programs.zsh.shellAliases.mpv-ontop = "mpv --profile=ontop";
|
||||||
programs.zsh.shellAliases.listen = ''
|
programs.zsh.shellAliases.listen = ''
|
||||||
mpv "https://music:$(cat ${listen-password-file})@stream.owo.monster/flac" --cache=yes --cache-pause-initial=yes --cache-pause-wait=5'';
|
mpv "https://music:$(cat ${listen-password-file})@stream.owo.monster/mpd/flac" --cache=yes --cache-pause-initial=yes --cache-pause-wait=5'';
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,16 +10,21 @@
|
||||||
}))
|
}))
|
||||||
++ [
|
++ [
|
||||||
{
|
{
|
||||||
"storage" = {
|
"container-storage" = {
|
||||||
user = "root";
|
user = "root";
|
||||||
hostname = "192.168.100.11";
|
hostname = "192.168.100.11";
|
||||||
proxyJump = "hetzner-vm";
|
proxyJump = "hetzner-vm";
|
||||||
};
|
};
|
||||||
"matrix" = {
|
"container-matrix" = {
|
||||||
user = "root";
|
user = "root";
|
||||||
hostname = "192.168.100.12";
|
hostname = "192.168.100.12";
|
||||||
proxyJump = "hetzner-vm";
|
proxyJump = "hetzner-vm";
|
||||||
};
|
};
|
||||||
|
"container-music" = {
|
||||||
|
user = "root";
|
||||||
|
hostname = "192.168.100.13";
|
||||||
|
proxyJump = "hetzner-vm";
|
||||||
|
};
|
||||||
"blahaj" = {
|
"blahaj" = {
|
||||||
user = "chaos";
|
user = "chaos";
|
||||||
hostname = "blahaj.sapphicco.de";
|
hostname = "blahaj.sapphicco.de";
|
||||||
|
|
7
hosts/hetzner-vm/containers/music/data/ports.nix
Normal file
7
hosts/hetzner-vm/containers/music/data/ports.nix
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
{}: {
|
||||||
|
mpd = 6600;
|
||||||
|
mpd-opus-low = 4242;
|
||||||
|
mpd-opus-medium = 4243;
|
||||||
|
mpd-opus-high = 4244;
|
||||||
|
mpd-flac = 4245;
|
||||||
|
}
|
121
hosts/hetzner-vm/containers/music/music.nix
Normal file
121
hosts/hetzner-vm/containers/music/music.nix
Normal file
|
@ -0,0 +1,121 @@
|
||||||
|
{
|
||||||
|
tree,
|
||||||
|
lib,
|
||||||
|
inputs,
|
||||||
|
pkgs,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
hostIP = "192.168.100.10";
|
||||||
|
containerIP = "192.168.100.13";
|
||||||
|
|
||||||
|
# Using secrets from Host
|
||||||
|
secrets = config.services.secrets.secrets;
|
||||||
|
|
||||||
|
ports = import ./data/ports.nix {};
|
||||||
|
in {
|
||||||
|
networking.nat.forwardPorts = [
|
||||||
|
{
|
||||||
|
sourcePort = 6600;
|
||||||
|
destination = "${containerIP}\:6600";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
containers.music = {
|
||||||
|
autoStart = true;
|
||||||
|
privateNetwork = true;
|
||||||
|
hostAddress = hostIP;
|
||||||
|
localAddress = containerIP;
|
||||||
|
bindMounts = lib.mkMerge (lib.forEach ["mpd_control_password"] (secret_name: let
|
||||||
|
path = "${secrets.${secret_name}.path}";
|
||||||
|
in {
|
||||||
|
"${path}" = {
|
||||||
|
hostPath = "${path}";
|
||||||
|
};
|
||||||
|
}));
|
||||||
|
|
||||||
|
config = {
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
_module.args = {
|
||||||
|
inherit inputs;
|
||||||
|
inherit tree;
|
||||||
|
host_secrets = secrets;
|
||||||
|
};
|
||||||
|
|
||||||
|
imports = with tree;
|
||||||
|
[
|
||||||
|
profiles.base
|
||||||
|
inputs.home-manager-unstable.nixosModules.home-manager
|
||||||
|
|
||||||
|
profiles.sshd
|
||||||
|
|
||||||
|
modules.nixos.secrets
|
||||||
|
|
||||||
|
users.root
|
||||||
|
]
|
||||||
|
++ (with hosts.hetzner-vm.containers.music; [
|
||||||
|
profiles.music-sync
|
||||||
|
profiles.mpd
|
||||||
|
]);
|
||||||
|
|
||||||
|
# For Shared Secrets
|
||||||
|
systemd.tmpfiles.rules = [
|
||||||
|
"d ${config.services.secrets.secretsDir} - root root"
|
||||||
|
];
|
||||||
|
|
||||||
|
networking.firewall = {
|
||||||
|
enable = true;
|
||||||
|
allowedTCPPorts = [22] ++ lib.mapAttrsToList (_name: value: value) ports;
|
||||||
|
};
|
||||||
|
|
||||||
|
home-manager.users.root = {
|
||||||
|
imports = with tree; [home.base home.dev.small];
|
||||||
|
home.packages = with pkgs; [vault];
|
||||||
|
home.stateVersion = "22.05";
|
||||||
|
};
|
||||||
|
|
||||||
|
# Manually configure nameserver. Using resolved inside the container seems to fail
|
||||||
|
# currently
|
||||||
|
environment.etc."resolv.conf".text = "nameserver 8.8.8.8";
|
||||||
|
system.stateVersion = "22.05";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
services.nginx.virtualHosts."stream.owo.monster" = let
|
||||||
|
extraConfig = ''
|
||||||
|
auth_basic "Music Password";
|
||||||
|
auth_basic_user_file ${secrets.music_stream_passwd.path};
|
||||||
|
'';
|
||||||
|
in {
|
||||||
|
forceSSL = true;
|
||||||
|
enableACME = true;
|
||||||
|
locations = lib.mkMerge ([
|
||||||
|
{
|
||||||
|
"/mpd/flac" = {
|
||||||
|
proxyPass = "http://${containerIP}:${toString ports.mpd-flac}";
|
||||||
|
inherit extraConfig;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
]
|
||||||
|
++ (lib.forEach ["low" "medium" "high"] (quality: {
|
||||||
|
"/mpd/opus-${quality}" = {
|
||||||
|
proxyPass = "http://${containerIP}:${toString ports."mpd-opus-${quality}"}";
|
||||||
|
inherit extraConfig;
|
||||||
|
};
|
||||||
|
})));
|
||||||
|
};
|
||||||
|
|
||||||
|
# For permissions of secrets
|
||||||
|
users.users."mpd" = {
|
||||||
|
uid = config.ids.uids.mpd;
|
||||||
|
group = "mpd";
|
||||||
|
};
|
||||||
|
users.groups."mpd" = {
|
||||||
|
gid = config.ids.gids.mpd;
|
||||||
|
};
|
||||||
|
|
||||||
|
networking.firewall.allowedTCPPorts = [6600];
|
||||||
|
}
|
98
hosts/hetzner-vm/containers/music/profiles/mpd.nix
Normal file
98
hosts/hetzner-vm/containers/music/profiles/mpd.nix
Normal file
|
@ -0,0 +1,98 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
host_secrets,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
ports = import ../data/ports.nix {};
|
||||||
|
secrets = host_secrets;
|
||||||
|
in {
|
||||||
|
environment.systemPackages = with pkgs; [mpc_cli];
|
||||||
|
|
||||||
|
systemd.tmpfiles.rules = [
|
||||||
|
"d /Music - root root"
|
||||||
|
];
|
||||||
|
|
||||||
|
systemd.services.music-sync = {
|
||||||
|
wantedBy = ["multi-user.target"];
|
||||||
|
after = ["network.target"];
|
||||||
|
partOf = ["mpd.service"];
|
||||||
|
|
||||||
|
path = with pkgs; [bash rclone mount umount];
|
||||||
|
script = let
|
||||||
|
rclone_config = pkgs.writeText "rclone.conf" ''
|
||||||
|
[Music]
|
||||||
|
type = webdav
|
||||||
|
url = https://storage-webdav.owo.monster/music_ro/
|
||||||
|
vendor = nextcloud
|
||||||
|
'';
|
||||||
|
in ''
|
||||||
|
set -e
|
||||||
|
rclone --config ${rclone_config} sync Music: /Music
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.timers.music-sync = {
|
||||||
|
wantedBy = ["timers.target"];
|
||||||
|
partOf = ["music-sync.service"];
|
||||||
|
timerConfig.OnCalendar = "hourly";
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.services.mpd = {
|
||||||
|
after = ["music-copy.service"];
|
||||||
|
};
|
||||||
|
|
||||||
|
services.mpd = {
|
||||||
|
enable = true;
|
||||||
|
network.listenAddress = "0.0.0.0";
|
||||||
|
musicDirectory = "/Music";
|
||||||
|
credentials = [
|
||||||
|
{
|
||||||
|
passwordFile = "${secrets.mpd_control_password.path}";
|
||||||
|
permissions = ["read" "add" "control" "admin"];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
extraConfig =
|
||||||
|
''
|
||||||
|
host_permissions "127.0.0.1 read,add,control,admin"
|
||||||
|
samplerate_converter "0"
|
||||||
|
metadata_to_use "title,artist"
|
||||||
|
auto_update "yes"
|
||||||
|
audio_buffer_size "4096"
|
||||||
|
replaygain "track"
|
||||||
|
audio_output_format "44100:16:2"
|
||||||
|
''
|
||||||
|
+ lib.concatStringsSep "\n" (lib.forEach ["low" "medium" "high"] (quality: let
|
||||||
|
bitrates = {
|
||||||
|
"low" = "64";
|
||||||
|
"medium" = "96";
|
||||||
|
"high" = "128";
|
||||||
|
};
|
||||||
|
bitrate = bitrates.${quality};
|
||||||
|
in ''
|
||||||
|
audio_output {
|
||||||
|
type "httpd"
|
||||||
|
name "HTTP Opus ${bitrate}k"
|
||||||
|
encoder "opus"
|
||||||
|
port "${toString ports."mpd-opus-${quality}"}"
|
||||||
|
bitrate "${bitrate}000"
|
||||||
|
format "44100:16:2"
|
||||||
|
always_on "yes"
|
||||||
|
tags "yes"
|
||||||
|
signal "music"
|
||||||
|
}
|
||||||
|
''))
|
||||||
|
+ ''
|
||||||
|
audio_output {
|
||||||
|
type "httpd"
|
||||||
|
name "HTTP FLAC"
|
||||||
|
encoder "flac"
|
||||||
|
port "${toString ports.mpd-flac}"
|
||||||
|
format "44100:16:2"
|
||||||
|
always_on "yes"
|
||||||
|
tags "yes"
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
38
hosts/hetzner-vm/containers/music/profiles/music-sync.nix
Normal file
38
hosts/hetzner-vm/containers/music/profiles/music-sync.nix
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
{pkgs, ...}: {
|
||||||
|
systemd.tmpfiles.rules = [
|
||||||
|
"d /Music - mpd mpd"
|
||||||
|
];
|
||||||
|
|
||||||
|
systemd.services.music-sync = {
|
||||||
|
wantedBy = ["multi-user.target"];
|
||||||
|
after = ["network.target"];
|
||||||
|
partOf = ["mpd.service"];
|
||||||
|
|
||||||
|
path = with pkgs; [bash rclone mount umount];
|
||||||
|
script = let
|
||||||
|
rclone_config = pkgs.writeText "rclone.conf" ''
|
||||||
|
[Music]
|
||||||
|
type = webdav
|
||||||
|
url = https://storage-webdav.owo.monster/music_ro/
|
||||||
|
vendor = nextcloud
|
||||||
|
'';
|
||||||
|
in ''
|
||||||
|
set -e
|
||||||
|
rclone --config ${rclone_config} sync Music: /Music
|
||||||
|
chown -R mpd:mpd /Music
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.timers.music-sync = {
|
||||||
|
wantedBy = ["timers.target"];
|
||||||
|
partOf = ["music-sync.service"];
|
||||||
|
timerConfig.OnCalendar = "hourly";
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.services.mpd = {
|
||||||
|
after = ["music-copy.service"];
|
||||||
|
serviceConfig = {
|
||||||
|
ReadOnlyPaths = "/Music";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
|
@ -12,12 +12,11 @@
|
||||||
|
|
||||||
./containers/storage/storage.nix
|
./containers/storage/storage.nix
|
||||||
./containers/matrix/matrix.nix
|
./containers/matrix/matrix.nix
|
||||||
|
./containers/music/music.nix
|
||||||
|
|
||||||
hosts.hetzner-vm.profiles.restic
|
hosts.hetzner-vm.profiles.restic
|
||||||
#hosts.hetzner-vm.profiles.invidious
|
|
||||||
hosts.hetzner-vm.profiles.piped
|
hosts.hetzner-vm.profiles.piped
|
||||||
hosts.hetzner-vm.profiles.quassel
|
hosts.hetzner-vm.profiles.quassel
|
||||||
hosts.hetzner-vm.profiles.mpd
|
|
||||||
hosts.hetzner-vm.profiles.mailserver
|
hosts.hetzner-vm.profiles.mailserver
|
||||||
hosts.hetzner-vm.profiles.gitlab-static-sites
|
hosts.hetzner-vm.profiles.gitlab-static-sites
|
||||||
hosts.hetzner-vm.profiles.misskey
|
hosts.hetzner-vm.profiles.misskey
|
||||||
|
|
|
@ -1,8 +1,4 @@
|
||||||
{}: {
|
{}: {
|
||||||
mpd = 6600; # default
|
|
||||||
mpd-opus = 8012;
|
|
||||||
mpd-flac = 8013;
|
|
||||||
|
|
||||||
quassel = 4242; # default
|
quassel = 4242; # default
|
||||||
|
|
||||||
misskey = 3020;
|
misskey = 3020;
|
||||||
|
|
|
@ -1,58 +0,0 @@
|
||||||
{...}: let
|
|
||||||
ports = import ../ports.nix {};
|
|
||||||
in {
|
|
||||||
services.invidious = {
|
|
||||||
enable = true;
|
|
||||||
port = ports.invidious;
|
|
||||||
settings = {
|
|
||||||
full_refresh = true;
|
|
||||||
https_only = true;
|
|
||||||
popular_enabled = true;
|
|
||||||
statistics_enabled = true;
|
|
||||||
registration_enabled = true;
|
|
||||||
channel_threads = 2;
|
|
||||||
feed_threads = 2;
|
|
||||||
default_user_preferences = {
|
|
||||||
locale = "en-US";
|
|
||||||
region = "GB";
|
|
||||||
captions = ["English (auto-generated)" "English" ""];
|
|
||||||
dark_mode = true;
|
|
||||||
feed_menu = ["Subscriptions" "Popular"];
|
|
||||||
default_home = "Subscriptions";
|
|
||||||
max_results = 30;
|
|
||||||
annotations = true;
|
|
||||||
annotations_subscribed = true;
|
|
||||||
comments = [];
|
|
||||||
player_style = "invidious";
|
|
||||||
related_videos = true;
|
|
||||||
autoplay = true;
|
|
||||||
continue = true;
|
|
||||||
continue_autoplay = true;
|
|
||||||
quality = "hd720";
|
|
||||||
local = false;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
systemd.services.invidious.serviceConfig = {
|
|
||||||
Restart = "always";
|
|
||||||
RuntimeMaxSec = "${toString (60 * 60 * 2)}";
|
|
||||||
};
|
|
||||||
|
|
||||||
services.nginx.virtualHosts."invidious.owo.monster" = {
|
|
||||||
forceSSL = true;
|
|
||||||
enableACME = true;
|
|
||||||
locations = {
|
|
||||||
"/".proxyPass = "http://127.0.0.1:${toString ports.invidious}";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
services.nginx.virtualHosts."invidious-nojs.owo.monster" = {
|
|
||||||
forceSSL = true;
|
|
||||||
enableACME = true;
|
|
||||||
locations = {
|
|
||||||
"/".proxyPass = "http://127.0.0.1:${toString ports.invidious}";
|
|
||||||
"/js/".extraConfig = "deny all;";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,112 +0,0 @@
|
||||||
{
|
|
||||||
config,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
ports = import ../ports.nix {};
|
|
||||||
secrets = config.services.secrets.secrets;
|
|
||||||
in {
|
|
||||||
environment.systemPackages = with pkgs; [mpc_cli];
|
|
||||||
|
|
||||||
systemd.tmpfiles.rules = [
|
|
||||||
"d /Music - root root"
|
|
||||||
];
|
|
||||||
|
|
||||||
systemd.services.music-sync = {
|
|
||||||
wantedBy = ["multi-user.target"];
|
|
||||||
after = ["network.target"];
|
|
||||||
partOf = ["mpd.service"];
|
|
||||||
|
|
||||||
path = with pkgs; [bash rclone mount umount];
|
|
||||||
script = let
|
|
||||||
rclone_config = pkgs.writeText "rclone.conf" ''
|
|
||||||
[Music]
|
|
||||||
type = webdav
|
|
||||||
url = https://storage-webdav.owo.monster/music_ro/
|
|
||||||
vendor = nextcloud
|
|
||||||
'';
|
|
||||||
in ''
|
|
||||||
set -e
|
|
||||||
rclone --config ${rclone_config} sync Music: /Music
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
systemd.timers.music-sync = {
|
|
||||||
wantedBy = ["timers.target"];
|
|
||||||
partOf = ["music-sync.service"];
|
|
||||||
timerConfig.OnCalendar = "hourly";
|
|
||||||
};
|
|
||||||
|
|
||||||
systemd.services.mpd = {
|
|
||||||
after = ["music-copy.service"];
|
|
||||||
};
|
|
||||||
|
|
||||||
services.mpd = {
|
|
||||||
enable = true;
|
|
||||||
network.listenAddress = "0.0.0.0";
|
|
||||||
dataDir = "/mpd";
|
|
||||||
playlistDirectory = "/mpd/playlists";
|
|
||||||
musicDirectory = "/Music";
|
|
||||||
user = "root";
|
|
||||||
group = "root";
|
|
||||||
credentials = [
|
|
||||||
{
|
|
||||||
passwordFile = "${secrets.mpd_control_password.path}";
|
|
||||||
permissions = ["read" "add" "control" "admin"];
|
|
||||||
}
|
|
||||||
];
|
|
||||||
extraConfig = ''
|
|
||||||
host_permissions "127.0.0.1 read,add,control,admin"
|
|
||||||
samplerate_converter "0"
|
|
||||||
metadata_to_use "title,artist"
|
|
||||||
auto_update "yes"
|
|
||||||
audio_buffer_size "4096"
|
|
||||||
replaygain "track"
|
|
||||||
audio_output_format "44100:16:2"
|
|
||||||
audio_output {
|
|
||||||
type "httpd"
|
|
||||||
name "HTTP Opus"
|
|
||||||
encoder "opus"
|
|
||||||
port "${toString ports.mpd-opus}"
|
|
||||||
bitrate "96000"
|
|
||||||
format "44100:16:2"
|
|
||||||
always_on "yes"
|
|
||||||
tags "yes"
|
|
||||||
signal "music"
|
|
||||||
packet_loss "5"
|
|
||||||
}
|
|
||||||
audio_output {
|
|
||||||
type "httpd"
|
|
||||||
name "HTTP FLAC"
|
|
||||||
encoder "flac"
|
|
||||||
port "${toString ports.mpd-flac}"
|
|
||||||
format "44100:16:2"
|
|
||||||
always_on "yes"
|
|
||||||
tags "yes"
|
|
||||||
}
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
services.nginx.virtualHosts."stream.owo.monster" = {
|
|
||||||
forceSSL = true;
|
|
||||||
enableACME = true;
|
|
||||||
locations = {
|
|
||||||
"/" = {
|
|
||||||
proxyPass = "http://127.0.0.1:${toString ports.mpd-opus}";
|
|
||||||
extraConfig = ''
|
|
||||||
auth_basic "Music Password";
|
|
||||||
auth_basic_user_file ${secrets.music_stream_passwd.path};
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
"/flac" = {
|
|
||||||
proxyPass = "http://127.0.0.1:${toString ports.mpd-flac}";
|
|
||||||
extraConfig = ''
|
|
||||||
auth_basic "Music Password";
|
|
||||||
auth_basic_user_file ${secrets.music_stream_passwd.path};
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
networking.firewall.allowedTCPPorts = [6600];
|
|
||||||
}
|
|
|
@ -9,19 +9,12 @@
|
||||||
|
|
||||||
secrets = {
|
secrets = {
|
||||||
mpd_control_password = {
|
mpd_control_password = {
|
||||||
user = "root";
|
user = "mpd";
|
||||||
group = "root";
|
group = "mpd";
|
||||||
fetchScript = ''
|
fetchScript = ''
|
||||||
simple_get "/api-keys/mpd" .password > $secretFile
|
simple_get "/api-keys/mpd" .password > $secretFile
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
private_mail_aliases = {
|
|
||||||
user = "root";
|
|
||||||
group = "root";
|
|
||||||
fetchScript = ''
|
|
||||||
kv_get "/infra/private-mail-aliases" | jq .data.data | jq -r 'to_entries|map("\(.key) \(.value.to)")[]' > $secretFile
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
music_stream_passwd = {
|
music_stream_passwd = {
|
||||||
user = "nginx";
|
user = "nginx";
|
||||||
group = "nginx";
|
group = "nginx";
|
||||||
|
@ -31,6 +24,13 @@
|
||||||
htpasswd -bc $secretFile "$username" "$password" 2>/dev/null
|
htpasswd -bc $secretFile "$username" "$password" 2>/dev/null
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
private_mail_aliases = {
|
||||||
|
user = "root";
|
||||||
|
group = "root";
|
||||||
|
fetchScript = ''
|
||||||
|
kv_get "/infra/private-mail-aliases" | jq .data.data | jq -r 'to_entries|map("\(.key) \(.value.to)")[]' > $secretFile
|
||||||
|
'';
|
||||||
|
};
|
||||||
chaos_mail_passwd = {
|
chaos_mail_passwd = {
|
||||||
user = "dovecot2";
|
user = "dovecot2";
|
||||||
group = "dovecot2";
|
group = "dovecot2";
|
||||||
|
|
|
@ -24,11 +24,11 @@
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name = "_antfu_install_pkg___install_pkg_0.1.0.tgz";
|
name = "_antfu_install_pkg___install_pkg_0.1.1.tgz";
|
||||||
path = fetchurl {
|
path = fetchurl {
|
||||||
name = "_antfu_install_pkg___install_pkg_0.1.0.tgz";
|
name = "_antfu_install_pkg___install_pkg_0.1.1.tgz";
|
||||||
url = "https://registry.yarnpkg.com/@antfu/install-pkg/-/install-pkg-0.1.0.tgz";
|
url = "https://registry.yarnpkg.com/@antfu/install-pkg/-/install-pkg-0.1.1.tgz";
|
||||||
sha512 = "VaIJd3d1o7irZfK1U0nvBsHMyjkuyMP3HKYVV53z8DKyulkHKmjhhtccXO51WSPeeSHIeoJEoNOKavYpS7jkZw==";
|
sha512 = "LyB/8+bSfa0DFGC06zpCEfs89/XoWZwws5ygEa5D+Xsm3OfI+aXQ86VgVG7Acyef+rSZ5HE7J8rrxzrQeM3PjQ==";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
|
@ -944,11 +944,11 @@
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name = "_iconify_json___json_2.1.154.tgz";
|
name = "_iconify_json___json_2.1.155.tgz";
|
||||||
path = fetchurl {
|
path = fetchurl {
|
||||||
name = "_iconify_json___json_2.1.154.tgz";
|
name = "_iconify_json___json_2.1.155.tgz";
|
||||||
url = "https://registry.yarnpkg.com/@iconify/json/-/json-2.1.154.tgz";
|
url = "https://registry.yarnpkg.com/@iconify/json/-/json-2.1.155.tgz";
|
||||||
sha512 = "RpUu4zDoeqIAzD54t8mfCKca+fzASgFf+lFE7Y9OzvScrf+IbUrvyZZEcOkjEB1cB4emDgmWGTAAkVTihhaqxQ==";
|
sha512 = "Zr0809RkIKB/0pX3jFfLX4TI8fv1aW6+FHXlfRiDhFKQSmhcs2x5xYhtxI5GUzl+9o6Le544uUCljmHBYJUFrA==";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
|
@ -960,11 +960,11 @@
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name = "_iconify_utils___utils_2.0.2.tgz";
|
name = "_iconify_utils___utils_2.0.4.tgz";
|
||||||
path = fetchurl {
|
path = fetchurl {
|
||||||
name = "_iconify_utils___utils_2.0.2.tgz";
|
name = "_iconify_utils___utils_2.0.4.tgz";
|
||||||
url = "https://registry.yarnpkg.com/@iconify/utils/-/utils-2.0.2.tgz";
|
url = "https://registry.yarnpkg.com/@iconify/utils/-/utils-2.0.4.tgz";
|
||||||
sha512 = "13B3wJxDLmSNBEIEpKleKSkJVQgdAy9ra3Xsu233i/5qD5yXBGhpOFxTB/k8cqme0xVsMKBPV5vbvq9MgQlX+w==";
|
sha512 = "/ZYdSK+vao8XPoRPkdQeetGBtuCcPcVTtuXUz2Y+281EpcmM/5G1SCbtgty28r/Y9HkR9ePbKst7eWUOK7/jNQ==";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
|
@ -1264,163 +1264,163 @@
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name = "_unocss_astro___astro_0.47.6.tgz";
|
name = "_unocss_astro___astro_0.48.0.tgz";
|
||||||
path = fetchurl {
|
path = fetchurl {
|
||||||
name = "_unocss_astro___astro_0.47.6.tgz";
|
name = "_unocss_astro___astro_0.48.0.tgz";
|
||||||
url = "https://registry.yarnpkg.com/@unocss/astro/-/astro-0.47.6.tgz";
|
url = "https://registry.yarnpkg.com/@unocss/astro/-/astro-0.48.0.tgz";
|
||||||
sha512 = "8lR4KwuCeVxOTKk6g6hx6VUHhW1u+hki8oRsJaKEB0s5iUPmY6rCNtb/iaBJdceY11bZMMy5LZHJFTkod/T/zg==";
|
sha512 = "MoINkgukO6YxVVEmEsY0oLWqU+Fv/dzPtUQhfsfek1mqtUbnwQ3n1xuOJ2S0eJSYmbprSuhvW/yTFVn1twsM1A==";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name = "_unocss_cli___cli_0.47.6.tgz";
|
name = "_unocss_cli___cli_0.48.0.tgz";
|
||||||
path = fetchurl {
|
path = fetchurl {
|
||||||
name = "_unocss_cli___cli_0.47.6.tgz";
|
name = "_unocss_cli___cli_0.48.0.tgz";
|
||||||
url = "https://registry.yarnpkg.com/@unocss/cli/-/cli-0.47.6.tgz";
|
url = "https://registry.yarnpkg.com/@unocss/cli/-/cli-0.48.0.tgz";
|
||||||
sha512 = "Lwuzl6xK+67LUb4pCKlyrMv9cDuTvywhlSBiYzDj1Su+21IQVRxUagpo10b1WlLXWWQz4J3bOJZYE/e/QV2/HQ==";
|
sha512 = "stfRsxzWK11VtrwUXTRPUyndzhdc2UUp5J148QlgMOClLpR370LADSfj8SHawF5+ID/0k+pd65r7fMGQsx75pw==";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name = "_unocss_config___config_0.47.6.tgz";
|
name = "_unocss_config___config_0.48.0.tgz";
|
||||||
path = fetchurl {
|
path = fetchurl {
|
||||||
name = "_unocss_config___config_0.47.6.tgz";
|
name = "_unocss_config___config_0.48.0.tgz";
|
||||||
url = "https://registry.yarnpkg.com/@unocss/config/-/config-0.47.6.tgz";
|
url = "https://registry.yarnpkg.com/@unocss/config/-/config-0.48.0.tgz";
|
||||||
sha512 = "KycIrpKqPrTnrbNRLUgePuzfZUKk6afsKII6B53q9rVxxC1og4g7wCsvrn2D89lPipsJ6B9041VsdIhNqa8bFg==";
|
sha512 = "fr4baghDl8QhlRiGbIO6FWB0k/MGzm9uiWe+Azhpwi6DgFd3MUJMfTfEqia4n/u/sRRaUAbD1nrWrDtpneFLPQ==";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name = "_unocss_core___core_0.47.6.tgz";
|
name = "_unocss_core___core_0.48.0.tgz";
|
||||||
path = fetchurl {
|
path = fetchurl {
|
||||||
name = "_unocss_core___core_0.47.6.tgz";
|
name = "_unocss_core___core_0.48.0.tgz";
|
||||||
url = "https://registry.yarnpkg.com/@unocss/core/-/core-0.47.6.tgz";
|
url = "https://registry.yarnpkg.com/@unocss/core/-/core-0.48.0.tgz";
|
||||||
sha512 = "Pjg/NdpuTwZk2Ns3bzI/3XVPuXU+AQ78Sw+9QJyMgA56dArd3TlpNDN6UTOD9XAK6mxdPUu7rNSKpNTLpBW2og==";
|
sha512 = "WvAvChbJ65l97mHismyApeFVgNeGR4uSZl1BzVY+E/fRmyooE4QxiCm3g2akox6mQryzxvBvgSpP9aPzH676ZQ==";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name = "_unocss_inspector___inspector_0.47.6.tgz";
|
name = "_unocss_inspector___inspector_0.48.0.tgz";
|
||||||
path = fetchurl {
|
path = fetchurl {
|
||||||
name = "_unocss_inspector___inspector_0.47.6.tgz";
|
name = "_unocss_inspector___inspector_0.48.0.tgz";
|
||||||
url = "https://registry.yarnpkg.com/@unocss/inspector/-/inspector-0.47.6.tgz";
|
url = "https://registry.yarnpkg.com/@unocss/inspector/-/inspector-0.48.0.tgz";
|
||||||
sha512 = "enYQJo7+/UtSbgzpyKzL4vZU9Tz3QyoPGDmuKoHXSIt6sAtB+DQelW7vMWjcmwA19uaISxIGXx9BJPj5XV67UA==";
|
sha512 = "Yr/O8oWmm5wfbnKJQF8IMH7GMmQEKcuunzI5KaZLK0QgS/5viPS+rcTOSwowYKRkXx5HUS+ClkA3+FMzoS9eYQ==";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name = "_unocss_preset_attributify___preset_attributify_0.47.6.tgz";
|
name = "_unocss_preset_attributify___preset_attributify_0.48.0.tgz";
|
||||||
path = fetchurl {
|
path = fetchurl {
|
||||||
name = "_unocss_preset_attributify___preset_attributify_0.47.6.tgz";
|
name = "_unocss_preset_attributify___preset_attributify_0.48.0.tgz";
|
||||||
url = "https://registry.yarnpkg.com/@unocss/preset-attributify/-/preset-attributify-0.47.6.tgz";
|
url = "https://registry.yarnpkg.com/@unocss/preset-attributify/-/preset-attributify-0.48.0.tgz";
|
||||||
sha512 = "s5XB8JpBPbGCHjvzc2j+Cx9o+QQm2CjRdQ7UjL05+uQcVYb8PBjlfD3BeIA21eBH5IxXF9SdOJfx8kUWNa5WFQ==";
|
sha512 = "2W6PTX85dLbKm0wAUKfVbMD8rDxE3DSPSWQNfbLewC1o202qzIS8PeTKh++nHMVw1gzpATd546FbPvbZJlTtzw==";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name = "_unocss_preset_icons___preset_icons_0.47.6.tgz";
|
name = "_unocss_preset_icons___preset_icons_0.48.0.tgz";
|
||||||
path = fetchurl {
|
path = fetchurl {
|
||||||
name = "_unocss_preset_icons___preset_icons_0.47.6.tgz";
|
name = "_unocss_preset_icons___preset_icons_0.48.0.tgz";
|
||||||
url = "https://registry.yarnpkg.com/@unocss/preset-icons/-/preset-icons-0.47.6.tgz";
|
url = "https://registry.yarnpkg.com/@unocss/preset-icons/-/preset-icons-0.48.0.tgz";
|
||||||
sha512 = "YvANR5ueN+r1E4YOfqF1llyUzS6yxROrJ+7MGNdIfyNHFcTwdHRy0f6y8uyiMYWyLc6nGGrUjjdo+DEc30obSA==";
|
sha512 = "3vro36gTkjEic5rO9BcUudby8tQ9ZRCduKZ1+4CKP0hKoB58nDm1QZM+kvWQ8RVN2xoSU9vWkHhx1RLl8miE0g==";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name = "_unocss_preset_mini___preset_mini_0.47.6.tgz";
|
name = "_unocss_preset_mini___preset_mini_0.48.0.tgz";
|
||||||
path = fetchurl {
|
path = fetchurl {
|
||||||
name = "_unocss_preset_mini___preset_mini_0.47.6.tgz";
|
name = "_unocss_preset_mini___preset_mini_0.48.0.tgz";
|
||||||
url = "https://registry.yarnpkg.com/@unocss/preset-mini/-/preset-mini-0.47.6.tgz";
|
url = "https://registry.yarnpkg.com/@unocss/preset-mini/-/preset-mini-0.48.0.tgz";
|
||||||
sha512 = "XP7ShDB42WU0xvZA1dG4E3LnzN4TYISm6AKQee3gmITUtE0ELTp9XutMgt0sqTe5FXeTRqw9XH7axv+4EqnE3Q==";
|
sha512 = "u1EWnmLt25SmCC201+9MqLn1qFYw0aRFH+3clHn9xkrLxXMdb5hnCNssTHItalvht+mskHrfxpQmKUBtxpls+g==";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name = "_unocss_preset_tagify___preset_tagify_0.47.6.tgz";
|
name = "_unocss_preset_tagify___preset_tagify_0.48.0.tgz";
|
||||||
path = fetchurl {
|
path = fetchurl {
|
||||||
name = "_unocss_preset_tagify___preset_tagify_0.47.6.tgz";
|
name = "_unocss_preset_tagify___preset_tagify_0.48.0.tgz";
|
||||||
url = "https://registry.yarnpkg.com/@unocss/preset-tagify/-/preset-tagify-0.47.6.tgz";
|
url = "https://registry.yarnpkg.com/@unocss/preset-tagify/-/preset-tagify-0.48.0.tgz";
|
||||||
sha512 = "9MxgZAUWWEg5OPLY+fpEf/Clw88pi57HON95E9zKvRy816S5gqhbt3PSxal7pCB9WO+3JM6BFLazAJ7DHpT1qA==";
|
sha512 = "vHlm3Ag15DHALgnhUZwWZvJXPpJFqxxaCsPdlDsAFRa65FPZEu5iM5V6jzn5H0/GCbTil/WARytlG95m369Scg==";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name = "_unocss_preset_typography___preset_typography_0.47.6.tgz";
|
name = "_unocss_preset_typography___preset_typography_0.48.0.tgz";
|
||||||
path = fetchurl {
|
path = fetchurl {
|
||||||
name = "_unocss_preset_typography___preset_typography_0.47.6.tgz";
|
name = "_unocss_preset_typography___preset_typography_0.48.0.tgz";
|
||||||
url = "https://registry.yarnpkg.com/@unocss/preset-typography/-/preset-typography-0.47.6.tgz";
|
url = "https://registry.yarnpkg.com/@unocss/preset-typography/-/preset-typography-0.48.0.tgz";
|
||||||
sha512 = "/Hfsw05ogolLXqrxTu5bLFIgGGmVdRHGw5vSmY3g+YPy37HfWpbP3cOs8YEOv8r3lV9J7vzAxAKKT0MQgukiHQ==";
|
sha512 = "CB5hPe9jP/tZI/H49nE7e79Accgu2q8yp2qRGIM4jlDcU1Tz4g0JmAxg8MeIqrqajVuJQhAu9cd3QnZ5wuh6hA==";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name = "_unocss_preset_uno___preset_uno_0.47.6.tgz";
|
name = "_unocss_preset_uno___preset_uno_0.48.0.tgz";
|
||||||
path = fetchurl {
|
path = fetchurl {
|
||||||
name = "_unocss_preset_uno___preset_uno_0.47.6.tgz";
|
name = "_unocss_preset_uno___preset_uno_0.48.0.tgz";
|
||||||
url = "https://registry.yarnpkg.com/@unocss/preset-uno/-/preset-uno-0.47.6.tgz";
|
url = "https://registry.yarnpkg.com/@unocss/preset-uno/-/preset-uno-0.48.0.tgz";
|
||||||
sha512 = "pDRuFmPzshX6ICaWhj7UBrnoL++rYD/QY52aljg9L4yAOZsZ1m0XRUlbnoXXXsEqDjw38SYNUzA1LtYcevBRvA==";
|
sha512 = "mTauhEXdy3ClSPiC6/wgZvSClkBVmrJjuCQFu4mGzFB0IuelsbEjxT7OHlv3Nrwv1d4xEcr9ed6JWm31ketdtA==";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name = "_unocss_preset_web_fonts___preset_web_fonts_0.47.6.tgz";
|
name = "_unocss_preset_web_fonts___preset_web_fonts_0.48.0.tgz";
|
||||||
path = fetchurl {
|
path = fetchurl {
|
||||||
name = "_unocss_preset_web_fonts___preset_web_fonts_0.47.6.tgz";
|
name = "_unocss_preset_web_fonts___preset_web_fonts_0.48.0.tgz";
|
||||||
url = "https://registry.yarnpkg.com/@unocss/preset-web-fonts/-/preset-web-fonts-0.47.6.tgz";
|
url = "https://registry.yarnpkg.com/@unocss/preset-web-fonts/-/preset-web-fonts-0.48.0.tgz";
|
||||||
sha512 = "TkN/etSSl61TtqxQJSVG/zfJUccdpgIuvqYrJOf4OZMj2rLwNHU2kOJEPFCfDyHTS+UjQ7LibfnE6snFDJ3pgQ==";
|
sha512 = "eH2tcr2ax1EWKVnT8lZWPGMZDur70UNhyyhF1qZaBdGmbRG4qxEhro9TB70FaNJ/ggHEpvUE8g/t1ZZ5IgwtdQ==";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name = "_unocss_preset_wind___preset_wind_0.47.6.tgz";
|
name = "_unocss_preset_wind___preset_wind_0.48.0.tgz";
|
||||||
path = fetchurl {
|
path = fetchurl {
|
||||||
name = "_unocss_preset_wind___preset_wind_0.47.6.tgz";
|
name = "_unocss_preset_wind___preset_wind_0.48.0.tgz";
|
||||||
url = "https://registry.yarnpkg.com/@unocss/preset-wind/-/preset-wind-0.47.6.tgz";
|
url = "https://registry.yarnpkg.com/@unocss/preset-wind/-/preset-wind-0.48.0.tgz";
|
||||||
sha512 = "yl9zayR/CRfgnlM1iGEBKI3CkIVADv72UQHY+ZHqq/0VzeW8lSRG1KezqDKz2x3fMfrtbfls/fGLXQPNpD0mIw==";
|
sha512 = "dd91Ja8K9gqjl27QcY9B5eVS2ScYDXGAPk6/zxDdNVehpKyrLhoCApO7UN0BR6rJSV5jJXi6ztByIDsBg8d6UQ==";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name = "_unocss_reset___reset_0.47.6.tgz";
|
name = "_unocss_reset___reset_0.48.0.tgz";
|
||||||
path = fetchurl {
|
path = fetchurl {
|
||||||
name = "_unocss_reset___reset_0.47.6.tgz";
|
name = "_unocss_reset___reset_0.48.0.tgz";
|
||||||
url = "https://registry.yarnpkg.com/@unocss/reset/-/reset-0.47.6.tgz";
|
url = "https://registry.yarnpkg.com/@unocss/reset/-/reset-0.48.0.tgz";
|
||||||
sha512 = "bdc2dbuDg+CzgeLowEwO1URRIMdzmCE4RH4IKpCpT1Xoa+92RRubdtzK4N/9ZiSo8d4vvfWcc8fvhZko/6smPQ==";
|
sha512 = "i7z6Rbs7fXFD3NdlVJViFltpDJUCo5xDm5y01Xaoa4mJQHr/1335Ht0JW/emAJXf170UYSwb2rUeK1J3fty9eg==";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name = "_unocss_scope___scope_0.47.6.tgz";
|
name = "_unocss_scope___scope_0.48.0.tgz";
|
||||||
path = fetchurl {
|
path = fetchurl {
|
||||||
name = "_unocss_scope___scope_0.47.6.tgz";
|
name = "_unocss_scope___scope_0.48.0.tgz";
|
||||||
url = "https://registry.yarnpkg.com/@unocss/scope/-/scope-0.47.6.tgz";
|
url = "https://registry.yarnpkg.com/@unocss/scope/-/scope-0.48.0.tgz";
|
||||||
sha512 = "aI7B4Il5xYfMcr50AC90I+Igi3KB9U0JPX2yiU2/WhOaO33ZReBWJmBQ4LhBGrdgNh8vkHpeqs8ntwq/o25nbA==";
|
sha512 = "r/a89Ip2NWlhvEglsZ4qQMy6smCmgGyA8aOKSEpU59il9Lmxjsz8eVLqofeiRzjBI9NTutpfLoEw3vrAK0YxRA==";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name = "_unocss_transformer_attributify_jsx___transformer_attributify_jsx_0.47.6.tgz";
|
name = "_unocss_transformer_attributify_jsx___transformer_attributify_jsx_0.48.0.tgz";
|
||||||
path = fetchurl {
|
path = fetchurl {
|
||||||
name = "_unocss_transformer_attributify_jsx___transformer_attributify_jsx_0.47.6.tgz";
|
name = "_unocss_transformer_attributify_jsx___transformer_attributify_jsx_0.48.0.tgz";
|
||||||
url = "https://registry.yarnpkg.com/@unocss/transformer-attributify-jsx/-/transformer-attributify-jsx-0.47.6.tgz";
|
url = "https://registry.yarnpkg.com/@unocss/transformer-attributify-jsx/-/transformer-attributify-jsx-0.48.0.tgz";
|
||||||
sha512 = "1sjBPNpczbg1ZsM4OKr9SCisc3vXEpW+3aeCRlBq7UGlJId3vJlX19Yp6IV9IEnVubsUkgo/3nr0B12OD58VdQ==";
|
sha512 = "aKWE2qvCeM+ev91tdnDoLVY53cNtRhqlisJnvmFUkIkDTJBZiMQnkKQdaoCrZDbIptRogqMtpJVlGxPe41z2WA==";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name = "_unocss_transformer_compile_class___transformer_compile_class_0.47.6.tgz";
|
name = "_unocss_transformer_compile_class___transformer_compile_class_0.48.0.tgz";
|
||||||
path = fetchurl {
|
path = fetchurl {
|
||||||
name = "_unocss_transformer_compile_class___transformer_compile_class_0.47.6.tgz";
|
name = "_unocss_transformer_compile_class___transformer_compile_class_0.48.0.tgz";
|
||||||
url = "https://registry.yarnpkg.com/@unocss/transformer-compile-class/-/transformer-compile-class-0.47.6.tgz";
|
url = "https://registry.yarnpkg.com/@unocss/transformer-compile-class/-/transformer-compile-class-0.48.0.tgz";
|
||||||
sha512 = "/+O0qJlHFOF4iO+RVkK5sPLJJzWp8dkAJGH/ArBzpT4hnxe8W7c0tb0hlJxwUp5J7UcP4lDhd8VKKvlyadHkuA==";
|
sha512 = "8Hi1KRQfqac7AT+YQuVM0eW6Z83u7PzuKD+SU7k+UzQLpX+M/S5t4iYJPYDSJ34btN8VhvXcn5iV//kclFAWgg==";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name = "_unocss_transformer_directives___transformer_directives_0.47.6.tgz";
|
name = "_unocss_transformer_directives___transformer_directives_0.48.0.tgz";
|
||||||
path = fetchurl {
|
path = fetchurl {
|
||||||
name = "_unocss_transformer_directives___transformer_directives_0.47.6.tgz";
|
name = "_unocss_transformer_directives___transformer_directives_0.48.0.tgz";
|
||||||
url = "https://registry.yarnpkg.com/@unocss/transformer-directives/-/transformer-directives-0.47.6.tgz";
|
url = "https://registry.yarnpkg.com/@unocss/transformer-directives/-/transformer-directives-0.48.0.tgz";
|
||||||
sha512 = "vRY9bNhE+iNlRpsnky86MtKpRb8ipk3IHvtuRkK5DSjcjn7RGmh5ZpH9pzg39NvbWtRYq5/EN19riIYQHRetnA==";
|
sha512 = "Iq55a/vAcTM7xoEtMkqlDP3BT+0ljaqTFctvlentJWDoAjJlbOoPe4gE5BKld5ulWEsV4wvpY2acn/y8SGvJUw==";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name = "_unocss_transformer_variant_group___transformer_variant_group_0.47.6.tgz";
|
name = "_unocss_transformer_variant_group___transformer_variant_group_0.48.0.tgz";
|
||||||
path = fetchurl {
|
path = fetchurl {
|
||||||
name = "_unocss_transformer_variant_group___transformer_variant_group_0.47.6.tgz";
|
name = "_unocss_transformer_variant_group___transformer_variant_group_0.48.0.tgz";
|
||||||
url = "https://registry.yarnpkg.com/@unocss/transformer-variant-group/-/transformer-variant-group-0.47.6.tgz";
|
url = "https://registry.yarnpkg.com/@unocss/transformer-variant-group/-/transformer-variant-group-0.48.0.tgz";
|
||||||
sha512 = "+uXz0pOv6WbEzQuW5RbgDSiwO274blsOsE63PdiRBMID1eSYKffGBcmiDh875QWc9ncFpjSKml+4q8jU7I+a0w==";
|
sha512 = "a3S4NTCt2JacUl+qL4eIpUjw1hkvthGV5pgkq8wMa5cGxJy2NpS/ZaLMfwsUA1Eo6fgMfK/QwMeLJihhs7G/qQ==";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name = "_unocss_vite___vite_0.47.6.tgz";
|
name = "_unocss_vite___vite_0.48.0.tgz";
|
||||||
path = fetchurl {
|
path = fetchurl {
|
||||||
name = "_unocss_vite___vite_0.47.6.tgz";
|
name = "_unocss_vite___vite_0.48.0.tgz";
|
||||||
url = "https://registry.yarnpkg.com/@unocss/vite/-/vite-0.47.6.tgz";
|
url = "https://registry.yarnpkg.com/@unocss/vite/-/vite-0.48.0.tgz";
|
||||||
sha512 = "NL3A20sJHwMyCHOaxLlFXnr71QHEd118GN82e/mtFluEh7F3WyLndaZfWQLmLEeJ3z+P4nURFCLirZJIXr4XgQ==";
|
sha512 = "j4QS2Ns02J9LRwdpLNiKt+Fo0+YUtvTQ66Xc/xq9s/ErptUwNnXsTCEDQzadXwPw+I8REKakLUve32to8VAd0w==";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
|
@ -1936,11 +1936,11 @@
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name = "css_tree___css_tree_2.2.1.tgz";
|
name = "css_tree___css_tree_2.3.1.tgz";
|
||||||
path = fetchurl {
|
path = fetchurl {
|
||||||
name = "css_tree___css_tree_2.2.1.tgz";
|
name = "css_tree___css_tree_2.3.1.tgz";
|
||||||
url = "https://registry.yarnpkg.com/css-tree/-/css-tree-2.2.1.tgz";
|
url = "https://registry.yarnpkg.com/css-tree/-/css-tree-2.3.1.tgz";
|
||||||
sha512 = "OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==";
|
sha512 = "6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
|
@ -3120,11 +3120,11 @@
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name = "kolorist___kolorist_1.5.1.tgz";
|
name = "kolorist___kolorist_1.6.0.tgz";
|
||||||
path = fetchurl {
|
path = fetchurl {
|
||||||
name = "kolorist___kolorist_1.5.1.tgz";
|
name = "kolorist___kolorist_1.6.0.tgz";
|
||||||
url = "https://registry.yarnpkg.com/kolorist/-/kolorist-1.5.1.tgz";
|
url = "https://registry.yarnpkg.com/kolorist/-/kolorist-1.6.0.tgz";
|
||||||
sha512 = "lxpCM3HTvquGxKGzHeknB/sUjuVoUElLlfYnXZT73K8geR9jQbroGlSCFBax9/0mpGoD3kzcMLnOlGQPJJNyqQ==";
|
sha512 = "dLkz37Ab97HWMx9KTes3Tbi3D1ln9fCAy2zr2YVExJasDRPGRaKcoE4fycWNtnCAJfjFqe0cnY+f8KT2JePEXQ==";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
|
@ -3224,11 +3224,11 @@
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name = "mdn_data___mdn_data_2.0.28.tgz";
|
name = "mdn_data___mdn_data_2.0.30.tgz";
|
||||||
path = fetchurl {
|
path = fetchurl {
|
||||||
name = "mdn_data___mdn_data_2.0.28.tgz";
|
name = "mdn_data___mdn_data_2.0.30.tgz";
|
||||||
url = "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.28.tgz";
|
url = "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.30.tgz";
|
||||||
sha512 = "aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==";
|
sha512 = "GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
|
@ -4256,11 +4256,11 @@
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name = "unocss___unocss_0.47.6.tgz";
|
name = "unocss___unocss_0.48.0.tgz";
|
||||||
path = fetchurl {
|
path = fetchurl {
|
||||||
name = "unocss___unocss_0.47.6.tgz";
|
name = "unocss___unocss_0.48.0.tgz";
|
||||||
url = "https://registry.yarnpkg.com/unocss/-/unocss-0.47.6.tgz";
|
url = "https://registry.yarnpkg.com/unocss/-/unocss-0.48.0.tgz";
|
||||||
sha512 = "cc+m2h/Iky24zwAKir9ElmIhkPYNjZEUTemInctWlVN8QX9qpzsRZahAl7ZmKsBorXPFtux/JYoUCCtXftyxOw==";
|
sha512 = "rDyMHyvRTRUPOd406CzgoYfiQ4tzN/TGU++jFTDzLsJ9Unuwf/pBBclP6z6aqt5eRBoEOEMqrJJwm9QN7aeYdA==";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"frontend": {
|
"frontend": {
|
||||||
"rev": "394362c8fd1eafcdf93c1123937455fd70bda8a8",
|
"rev": "bffc08127f352fa17f12930b0167a7e63726e58b",
|
||||||
"sha256": "sha256-pvj6qvhAKuOrhNd/+P/lOa5RL+j+gBeebQXX1pymrb8="
|
"sha256": "sha256-r3taWU2EsMtwqp6rXaNAkh6Jt/LyEqK1UIXCRtqHzAc="
|
||||||
},
|
},
|
||||||
"backend": {
|
"backend": {
|
||||||
"rev": "3b4f5274e66fe7ba35ef8ddc979d4ff19b9a102b",
|
"rev": "3b4f5274e66fe7ba35ef8ddc979d4ff19b9a102b",
|
||||||
|
|
|
@ -4,7 +4,6 @@ SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
|
||||||
REPO_ROOT="${SCRIPT_DIR}/.."
|
REPO_ROOT="${SCRIPT_DIR}/.."
|
||||||
cd $REPO_ROOT
|
cd $REPO_ROOT
|
||||||
|
|
||||||
./overlay/invidious/update.sh
|
|
||||||
./overlay/misskey/update.sh
|
./overlay/misskey/update.sh
|
||||||
./overlay/piped/update.sh
|
./overlay/piped/update.sh
|
||||||
nix flake update
|
nix flake update
|
Loading…
Reference in a new issue