Merge remote-tracking branch 'prism/master'
This commit is contained in:
commit
f78ceaffa2
@ -10,6 +10,11 @@ with import <stockholm/lib>;
|
|||||||
(s: substring 1 (stringLength s - 2) s)
|
(s: substring 1 (stringLength s - 2) s)
|
||||||
(toJSON value);
|
(toJSON value);
|
||||||
|
|
||||||
|
to-lsearch = concatMapStrings ({ from, to, ... }: "${from}: ${to}\n");
|
||||||
|
lsearch = mapAttrs (name: set: toFile name (to-lsearch set)) ({
|
||||||
|
inherit (cfg) system-aliases;
|
||||||
|
});
|
||||||
|
|
||||||
in {
|
in {
|
||||||
options.krebs.exim-retiolum = {
|
options.krebs.exim-retiolum = {
|
||||||
enable = mkEnableOption "krebs.exim-retiolum";
|
enable = mkEnableOption "krebs.exim-retiolum";
|
||||||
@ -59,6 +64,19 @@ in {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
system-aliases = mkOption {
|
||||||
|
type = types.listOf (types.submodule ({
|
||||||
|
options = {
|
||||||
|
from = mkOption {
|
||||||
|
type = types.str; # TODO e-mail address
|
||||||
|
};
|
||||||
|
to = mkOption {
|
||||||
|
type = types.str; # TODO e-mail address / TODO listOf
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}));
|
||||||
|
default = [];
|
||||||
|
};
|
||||||
};
|
};
|
||||||
imports = [
|
imports = [
|
||||||
{
|
{
|
||||||
@ -145,6 +163,11 @@ in {
|
|||||||
|
|
||||||
begin routers
|
begin routers
|
||||||
|
|
||||||
|
system_aliases:
|
||||||
|
debug_print = "R: system_aliases for $local_part@$domain"
|
||||||
|
driver = redirect
|
||||||
|
data = ''${lookup{$local_part}lsearch{${lsearch.system-aliases}}}
|
||||||
|
|
||||||
local:
|
local:
|
||||||
driver = accept
|
driver = accept
|
||||||
domains = +local_domains
|
domains = +local_domains
|
||||||
|
@ -108,7 +108,10 @@ pkgs.writers.writeDashBin "generate-wallpaper" ''
|
|||||||
'https://neo.sci.gsfc.nasa.gov/view.php?datasetId=MOD14A1_E_FIRE') &
|
'https://neo.sci.gsfc.nasa.gov/view.php?datasetId=MOD14A1_E_FIRE') &
|
||||||
|
|
||||||
# regular fetches
|
# regular fetches
|
||||||
fetch marker.json "$marker_url" &
|
fetch marker.json.tmp "$marker_url"
|
||||||
|
if [ -s marker.json.tmp ]; then
|
||||||
|
mv marker.json.tmp marker.json
|
||||||
|
fi
|
||||||
fetch sun-raw.jpg 'https://sdo.gsfc.nasa.gov/assets/img/latest/latest_512_0171.jpg' &
|
fetch sun-raw.jpg 'https://sdo.gsfc.nasa.gov/assets/img/latest/latest_512_0171.jpg' &
|
||||||
|
|
||||||
wait
|
wait
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
{
|
{
|
||||||
"url": "https://github.com/NixOS/nixpkgs",
|
"url": "https://github.com/NixOS/nixpkgs",
|
||||||
"rev": "a322b32e9d74fb476944ff6cfb55833dc69cfaaa",
|
"rev": "e9158eca70ae59e73fae23be5d13d3fa0cfc78b4",
|
||||||
"date": "2020-11-19T01:15:20+01:00",
|
"date": "2020-12-09T15:09:49+01:00",
|
||||||
"path": "/nix/store/cgb65l8rr7v7dd4hk5sv05bnmqkcgl0n-nixpkgs",
|
"path": "/nix/store/cx4wf6pi1l2p01sz7png891m65kinfz3-nixpkgs",
|
||||||
"sha256": "1r0mkiqxija75spnyksmh8x5j4smnrxv5f7768s81gsl570kls0l",
|
"sha256": "0cnmvnvin9ixzl98fmlm3g17l6w95gifqfb3rfxs55c0wj2ddy53",
|
||||||
"fetchSubmodules": false,
|
"fetchSubmodules": false,
|
||||||
"deepClone": false,
|
"deepClone": false,
|
||||||
"leaveDotGit": false
|
"leaveDotGit": false
|
||||||
|
@ -1,7 +1,10 @@
|
|||||||
{
|
{
|
||||||
"url": "https://github.com/NixOS/nixpkgs",
|
"url": "https://github.com/NixOS/nixpkgs",
|
||||||
"rev": "f41c0fc7d8e49d94220f74495d4d702922df2a67",
|
"rev": "3d2d8f281a27d466fa54b469b5993f7dde198375",
|
||||||
"date": "2020-11-15T21:38:00-06:00",
|
"date": "2020-12-20T14:17:36+01:00",
|
||||||
"sha256": "01wim7ayn69y056q28ifw2f0mdypidpc0z15dda54aj5yy5vai09",
|
"path": "/nix/store/mqn37480fj6x9xbq3igz4haw3m2lc7fm-nixpkgs",
|
||||||
"fetchSubmodules": false
|
"sha256": "1hfis53xyzy6hfdivlwkwdy7irbhk7c500a4lf7x43cfkijx5ks1",
|
||||||
|
"fetchSubmodules": false,
|
||||||
|
"deepClone": false,
|
||||||
|
"leaveDotGit": false
|
||||||
}
|
}
|
||||||
|
@ -1,14 +1,5 @@
|
|||||||
{ lib, pkgs, ... }:
|
{ lib, pkgs, ... }:
|
||||||
{
|
{
|
||||||
nixpkgs = lib.mkForce {
|
nixpkgs-unstable = lib.mkForce { file = "/var/empty"; };
|
||||||
file = {
|
nixpkgs.git.shallow = true;
|
||||||
path = toString (pkgs.fetchFromGitHub {
|
|
||||||
owner = "nixos";
|
|
||||||
repo = "nixpkgs";
|
|
||||||
rev = (lib.importJSON ../../../krebs/nixpkgs.json).rev;
|
|
||||||
sha256 = (lib.importJSON ../../../krebs/nixpkgs.json).sha256;
|
|
||||||
});
|
|
||||||
useChecksum = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
@ -1,38 +1,40 @@
|
|||||||
{config, pkgs, lib, ...}: let
|
{config, pkgs, lib, ...}: let
|
||||||
|
|
||||||
zigbee2mqtt_cfg = pkgs.writeText "zigbee2mqtt.json" (builtins.toJSON {
|
unstable-pkgs = import <nixpkgs-unstable> {};
|
||||||
homeassistant = true;
|
|
||||||
permit_join = false;
|
|
||||||
mqtt = {
|
|
||||||
discovery = true;
|
|
||||||
base_topic = "zigbee";
|
|
||||||
server = "mqtt://10.42.0.1";
|
|
||||||
user = "gg23";
|
|
||||||
password = "gg23-mqtt";
|
|
||||||
};
|
|
||||||
serial.port = "/dev/cc2531";
|
|
||||||
});
|
|
||||||
|
|
||||||
in {
|
in {
|
||||||
# symlink the zigbee controller
|
# symlink the zigbee controller
|
||||||
services.udev.extraRules = ''
|
services.udev.extraRules = ''
|
||||||
SUBSYSTEM=="tty", ATTRS{idVendor}=="0451", ATTRS{idProduct}=="16a8", SYMLINK+="cc2531", MODE="0660", GROUP="dailout"
|
SUBSYSTEM=="tty", ATTRS{idVendor}=="0451", ATTRS{idProduct}=="16a8", SYMLINK+="cc2531", MODE="0660", GROUP="dialout"
|
||||||
|
SUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", SYMLINK+="cc2652", MODE="0660", GROUP="dialout"
|
||||||
'';
|
'';
|
||||||
|
|
||||||
system.activationScripts.installZigbee = ''
|
# needed to use unstable package
|
||||||
install -d /var/lib/zigbee2mqtt
|
systemd.services.zigbee2mqtt.environment.ZIGBEE2MQTT_DATA = "/var/lib/zigbee2mqtt";
|
||||||
install ${zigbee2mqtt_cfg} /var/lib/zigbee2mqtt/configuration.yaml
|
|
||||||
'';
|
|
||||||
|
|
||||||
# hack to restart docker container on config change
|
services.zigbee2mqtt = {
|
||||||
systemd.services.docker-zigbee2mqtt.environment.cfg = zigbee2mqtt_cfg;
|
enable = true;
|
||||||
|
package = unstable-pkgs.zigbee2mqtt;
|
||||||
docker-containers.zigbee2mqtt = {
|
config = {
|
||||||
image = "koenkk/zigbee2mqtt";
|
homeassistant = true;
|
||||||
extraDockerOptions = [
|
frontend.port = 1337;
|
||||||
"--device=/dev/cc2531:/dev/cc2531"
|
experimental.new_api = true;
|
||||||
];
|
permit_join = false;
|
||||||
volumes = ["/var/lib/zigbee2mqtt:/app/data"];
|
mqtt = {
|
||||||
|
discovery = true;
|
||||||
|
base_topic = "zigbee";
|
||||||
|
server = "mqtt://10.42.0.1";
|
||||||
|
user = "gg23";
|
||||||
|
password = "gg23-mqtt";
|
||||||
|
};
|
||||||
|
serial = {
|
||||||
|
port = "/dev/cc2652";
|
||||||
|
# disable_led = true;
|
||||||
|
};
|
||||||
|
advanced = {
|
||||||
|
pan_id = 4222;
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
services.home-assistant.config = {
|
services.home-assistant.config = {
|
||||||
@ -93,7 +95,6 @@ in {
|
|||||||
{
|
{
|
||||||
id = "zigbee_join_enabled";
|
id = "zigbee_join_enabled";
|
||||||
alias = "";
|
alias = "";
|
||||||
hide_entity = "true";
|
|
||||||
trigger = {
|
trigger = {
|
||||||
platform = "state";
|
platform = "state";
|
||||||
entity_id = "switch.zigbee2mqtt_join";
|
entity_id = "switch.zigbee2mqtt_join";
|
||||||
@ -107,7 +108,6 @@ in {
|
|||||||
# Automation to stop timer when switch turned off and turn off switch when timer finished
|
# Automation to stop timer when switch turned off and turn off switch when timer finished
|
||||||
{
|
{
|
||||||
id = "zigbee_join_disabled";
|
id = "zigbee_join_disabled";
|
||||||
hide_entity = "true";
|
|
||||||
trigger = [
|
trigger = [
|
||||||
{
|
{
|
||||||
platform = "event";
|
platform = "event";
|
||||||
|
@ -6,9 +6,6 @@ let
|
|||||||
name = "radio";
|
name = "radio";
|
||||||
mainUser = config.users.extraUsers.mainUser;
|
mainUser = config.users.extraUsers.mainUser;
|
||||||
|
|
||||||
admin-password = import <secrets/icecast-admin-pw>;
|
|
||||||
source-password = import <secrets/icecast-source-pw>;
|
|
||||||
|
|
||||||
music_dir = "/home/radio/music";
|
music_dir = "/home/radio/music";
|
||||||
|
|
||||||
add_random = pkgs.writeDashBin "add_random" ''
|
add_random = pkgs.writeDashBin "add_random" ''
|
||||||
@ -138,51 +135,16 @@ in {
|
|||||||
auto_update "yes"
|
auto_update "yes"
|
||||||
|
|
||||||
audio_output {
|
audio_output {
|
||||||
type "shout"
|
type "httpd"
|
||||||
encoding "lame"
|
name "lassulus radio"
|
||||||
name "the_playlist_mp3"
|
encoder "vorbis" # optional
|
||||||
host "localhost"
|
port "8000"
|
||||||
port "8000"
|
quality "5.0" # do not define if bitrate is defined
|
||||||
mount "/radio.mp3"
|
# bitrate "128" # do not define if quality is defined
|
||||||
password "${source-password}"
|
format "44100:16:2"
|
||||||
bitrate "128"
|
always_on "yes" # prevent MPD from disconnecting all listeners when playback is stopped.
|
||||||
|
tags "yes" # httpd supports sending tags to listening streams.
|
||||||
format "44100:16:2"
|
|
||||||
|
|
||||||
user "source"
|
|
||||||
genre "good music"
|
|
||||||
}
|
}
|
||||||
audio_output {
|
|
||||||
type "shout"
|
|
||||||
encoding "ogg"
|
|
||||||
name "the_playlist_ogg"
|
|
||||||
host "localhost"
|
|
||||||
port "8000"
|
|
||||||
mount "/radio.ogg"
|
|
||||||
password "${source-password}"
|
|
||||||
bitrate "128"
|
|
||||||
|
|
||||||
format "44100:16:2"
|
|
||||||
|
|
||||||
user "source"
|
|
||||||
genre "good music"
|
|
||||||
}
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
services.icecast = {
|
|
||||||
enable = true;
|
|
||||||
hostname = "radio.lassul.us";
|
|
||||||
admin.password = admin-password;
|
|
||||||
extraConf = ''
|
|
||||||
<mount>
|
|
||||||
<mount-name>/radio.mp3</mount-name>
|
|
||||||
<password>${source-password}</password>
|
|
||||||
</mount>
|
|
||||||
<mount>
|
|
||||||
<mount-name>/radio.ogg</mount-name>
|
|
||||||
<password>${source-password}</password>
|
|
||||||
</mount>
|
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -206,7 +168,7 @@ in {
|
|||||||
|
|
||||||
systemd.services.radio = let
|
systemd.services.radio = let
|
||||||
autoAdd = pkgs.writeDash "autoAdd" ''
|
autoAdd = pkgs.writeDash "autoAdd" ''
|
||||||
LIMIT=$1 #in secconds
|
LIMIT=$1 #in seconds
|
||||||
|
|
||||||
timeLeft () {
|
timeLeft () {
|
||||||
playlistDuration=$(${pkgs.mpc_cli}/bin/mpc --format '%time%' playlist | ${pkgs.gawk}/bin/awk -F ':' 'BEGIN{t=0} {t+=$1*60+$2} END{print t}')
|
playlistDuration=$(${pkgs.mpc_cli}/bin/mpc --format '%time%' playlist | ${pkgs.gawk}/bin/awk -F ':' 'BEGIN{t=0} {t+=$1*60+$2} END{print t}')
|
||||||
@ -238,8 +200,7 @@ in {
|
|||||||
${pkgs.mpc_cli}/bin/mpc idle player > /dev/null
|
${pkgs.mpc_cli}/bin/mpc idle player > /dev/null
|
||||||
${pkgs.mpc_cli}/bin/mpc current -f %file%
|
${pkgs.mpc_cli}/bin/mpc current -f %file%
|
||||||
done | while read track; do
|
done | while read track; do
|
||||||
listeners=$(${pkgs.curl}/bin/curl 'http://localhost:8000/status-json.xsl' \
|
listeners=$(${pkgs.iproute}/bin/ss -Hno state established '( sport = :8000 )' | wc -l)
|
||||||
| ${pkgs.jq}/bin/jq '[.icestats.source[].listeners] | add')
|
|
||||||
echo "$(date -Is)" "$track" | tee -a "$HISTORY_FILE"
|
echo "$(date -Is)" "$track" | tee -a "$HISTORY_FILE"
|
||||||
echo "$(tail -$LIMIT "$HISTORY_FILE")" > "$HISTORY_FILE"
|
echo "$(tail -$LIMIT "$HISTORY_FILE")" > "$HISTORY_FILE"
|
||||||
${write_to_irc} "playing: $track listeners: $listeners"
|
${write_to_irc} "playing: $track listeners: $listeners"
|
||||||
|
@ -91,7 +91,7 @@ in {
|
|||||||
services.nextcloud = {
|
services.nextcloud = {
|
||||||
enable = true;
|
enable = true;
|
||||||
hostName = "o.xanf.org";
|
hostName = "o.xanf.org";
|
||||||
package = pkgs.nextcloud19;
|
package = pkgs.nextcloud20;
|
||||||
config = {
|
config = {
|
||||||
adminpassFile = toString <secrets> + "/nextcloud_pw";
|
adminpassFile = toString <secrets> + "/nextcloud_pw";
|
||||||
overwriteProtocol = "https";
|
overwriteProtocol = "https";
|
||||||
|
Loading…
Reference in New Issue
Block a user