From 1e0fabf9a0f1ac5e6c1e962a556f9f486fd59ef5 Mon Sep 17 00:00:00 2001 From: zuckerberg <5-zuckerberg@users.noreply.git.neet.dev> Date: Sun, 22 Aug 2021 23:21:05 -0400 Subject: [PATCH] radio --- common/common.nix | 1 + common/server/radio.nix | 73 +++++++++++++++++++++++++++++++++ flake.lock | 69 ++++++++++++++++++++++++++++++- flake.nix | 5 ++- machines/liza/configuration.nix | 10 ++--- 5 files changed, 149 insertions(+), 9 deletions(-) create mode 100644 common/server/radio.nix diff --git a/common/common.nix b/common/common.nix index 5ff9d77..f9dae4f 100644 --- a/common/common.nix +++ b/common/common.nix @@ -19,6 +19,7 @@ ./server/gitea.nix ./server/privatebin/privatebin.nix ./server/drastikbot.nix + ./server/radio.nix ./pc/de.nix ]; diff --git a/common/server/radio.nix b/common/server/radio.nix new file mode 100644 index 0000000..78aa7e7 --- /dev/null +++ b/common/server/radio.nix @@ -0,0 +1,73 @@ +{ config, pkgs, lib, inputs, system, ... }: + +let + cfg = config.services.radio; + radioPackage = inputs.radio.packages.${system}.radio; +in { + options.services.radio = { + enable = lib.mkEnableOption "enable radio"; + user = lib.mkOption { + type = lib.types.str; + default = "radio"; + description = '' + The user radio should run as + ''; + }; + group = lib.mkOption { + type = lib.types.str; + default = "radio"; + description = '' + The group radio should run as + ''; + }; + dataDir = lib.mkOption { + type = lib.types.str; + default = "/var/lib/radio"; + description = '' + Path to the radio data directory + ''; + }; + host = lib.mkOption { + type = lib.types.str; + description = '' + Domain radio is hosted on + ''; + }; + }; + + config = lib.mkIf cfg.enable { + services.icecast = { + enable = true; + hostname = cfg.host; + mount = "stream.mp3"; + fallback = "fallback.mp3"; + }; + + services.nginx.virtualHosts.${cfg.host} = { + enableACME = true; + forceSSL = true; + locations."/".root = inputs.radio-web; + }; + + users.users.${cfg.user} = { + isSystemUser = true; + group = cfg.group; + home = cfg.dataDir; + createHome = true; + }; + users.groups.${cfg.group} = {}; + systemd.services.radio = { + enable = true; + after = ["network.target"]; + wantedBy = ["multi-user.target"]; + serviceConfig.ExecStart = "${radioPackage}/bin/radio"; + serviceConfig.User = cfg.user; + serviceConfig.Group = cfg.group; + serviceConfig.WorkingDirectory = cfg.dataDir; + preStart = '' + mkdir -p ${cfg.dataDir} + chown ${cfg.user} ${cfg.dataDir} + ''; + }; + }; +} \ No newline at end of file diff --git a/flake.lock b/flake.lock index cdcc974..cb453c9 100644 --- a/flake.lock +++ b/flake.lock @@ -18,6 +18,21 @@ "type": "github" } }, + "flake-utils": { + "locked": { + "lastModified": 1620759905, + "narHash": "sha256-WiyWawrgmyN0EdmiHyG2V+fqReiVi8bM9cRdMaKQOFg=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "b543720b25df6ffdfcf9227afafc5b8c1fabfae8", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, "nixpkgs": { "locked": { "lastModified": 1618628710, @@ -64,6 +79,20 @@ } }, "nixpkgs_3": { + "locked": { + "lastModified": 1621784194, + "narHash": "sha256-CQWN/QvVHG8qCn7UhGGwoT3jAPvnJHQUvzBlIt48FGs=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c5265c01a944b1cecfcfab392d5204d73d65d4ec", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "type": "indirect" + } + }, + "nixpkgs_4": { "locked": { "lastModified": 1607522989, "narHash": "sha256-o/jWhOSAlaK7y2M57OIriRt6whuVVocS/T0mG7fd1TI=", @@ -78,17 +107,55 @@ "type": "indirect" } }, + "radio": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs_3" + }, + "locked": { + "lastModified": 1623978466, + "narHash": "sha256-uwVzyiHrlVxtQ2HsnWEfkdRY7i5GEEj3/M27Ht/3gjg=", + "ref": "main", + "rev": "71a1443301540a70930d8edc4528a93ec9745e21", + "revCount": 21, + "type": "git", + "url": "https://git.neet.dev/zuckerberg/radio.git" + }, + "original": { + "ref": "main", + "type": "git", + "url": "https://git.neet.dev/zuckerberg/radio.git" + } + }, + "radio-web": { + "flake": false, + "locked": { + "lastModified": 1629688573, + "narHash": "sha256-ORZ8bc3aWUnvkDDkhyVfGBLWr3fO5LmmiJLdLWGoV80=", + "ref": "master", + "rev": "57322a3c213713371604ecc82a448451d636b0b4", + "revCount": 3, + "type": "git", + "url": "https://git.neet.dev/zuckerberg/radio-web.git" + }, + "original": { + "type": "git", + "url": "https://git.neet.dev/zuckerberg/radio-web.git" + } + }, "root": { "inputs": { "agenix": "agenix", "nixpkgs": "nixpkgs_2", "nixpkgs-peertube": "nixpkgs-peertube", + "radio": "radio", + "radio-web": "radio-web", "simple-nixos-mailserver": "simple-nixos-mailserver" } }, "simple-nixos-mailserver": { "inputs": { - "nixpkgs": "nixpkgs_3", + "nixpkgs": "nixpkgs_4", "utils": "utils" }, "locked": { diff --git a/flake.nix b/flake.nix index efd4289..7db76e6 100644 --- a/flake.nix +++ b/flake.nix @@ -4,6 +4,9 @@ nixpkgs-peertube.url = "github:GoogleBot42/nixpkgs/add-peertube-service"; simple-nixos-mailserver.url = "gitlab:simple-nixos-mailserver/nixos-mailserver/nixos-21.05"; agenix.url = "github:ryantm/agenix"; + radio.url = "git+https://git.neet.dev/zuckerberg/radio.git?ref=main"; + radio-web.url = "git+https://git.neet.dev/zuckerberg/radio-web.git"; + radio-web.flake = false; }; outputs = inputs: { @@ -24,7 +27,7 @@ environment.systemPackages = [ inputs.agenix.defaultPackage.${system} ]; } ]; - specialArgs = { inherit inputs; }; + specialArgs = { inherit inputs; inherit system; }; }; in { diff --git a/machines/liza/configuration.nix b/machines/liza/configuration.nix index 040f793..382f776 100644 --- a/machines/liza/configuration.nix +++ b/machines/liza/configuration.nix @@ -110,13 +110,9 @@ }); }; - services.nginx.virtualHosts."radio.neet.space" = { - enableACME = true; - forceSSL = true; - locations."/".root = builtins.fetchTarball { - url = "https://git.neet.dev/zuckerberg/radio-web/archive/a69e0e27b70694a8fffe8834d7e5f0e67db83dfa.tar.gz"; - sha256 = "076q540my5ssbhwlc8v8vafcddcq7ydxnzagw4qqr1ii6ikfn80w"; - }; + services.radio = { + enable = true; + host = "radio.neet.space"; }; services.nginx.virtualHosts."paradigminteractive.agency" = {