Merge remote-tracking branch 'gum/master'

This commit is contained in:
lassulus 2022-09-26 15:36:25 +02:00
commit 059a5b48af
65 changed files with 926 additions and 2063 deletions

View File

@ -235,6 +235,7 @@ in {
maps.work.euer IN A ${nets.internet.ip4.addr}
play.work.euer IN A ${nets.internet.ip4.addr}
ul.work.euer IN A ${nets.internet.ip4.addr}
music.euer IN A ${nets.internet.ip4.addr}
'';
};
cores = 8;

View File

View File

@ -5,11 +5,14 @@ in {
imports = [
<stockholm/makefu>
./hardware-config.nix
<stockholm/makefu/2configs/home-manager>
<stockholm/makefu/2configs/home/3dprint.nix>
#./hardware-config.nix
{ environment.systemPackages = with pkgs;[ rsync screen curl git tmux picocom mosh ];}
# <stockholm/makefu/2configs/tools/core.nix>
<stockholm/makefu/2configs/binary-cache/nixos.nix>
#<stockholm/makefu/2configs/support-nixos.nix>
<stockholm/makefu/2configs/homeautomation/default.nix>
# <stockholm/makefu/2configs/homeautomation/default.nix>
# <stockholm/makefu/2configs/homeautomation/google-muell.nix>
# configure your hw:
# <stockholm/makefu/2configs/save-diskspace.nix>
@ -19,9 +22,11 @@ in {
tinc.retiolum.enable = true;
build.host = config.krebs.hosts.cake;
};
# ensure disk usage is limited
services.journald.extraConfig = "Storage=volatile";
networking.firewall.trustedInterfaces = [ primaryInterface ];
documentation.info.enable = false;
documentation.man.enable = false;
services.nixosManual.enable = false;
documentation.nixos.enable = false;
sound.enable = false;
}

View File

@ -1,42 +1,14 @@
{ pkgs, lib, ... }:
{
# raspi3
boot.kernelParams = ["cma=32M" "console=ttyS0,115200n8" "console=tty0" "console=ttyS1,115200n8" ];
boot.loader.grub.enable = false;
boot.loader.raspberryPi.enable = true;
boot.loader.raspberryPi.version = 3;
boot.loader.raspberryPi.uboot.enable = true;
boot.loader.raspberryPi.uboot.configurationLimit = 3;
boot.loader.raspberryPi.firmwareConfig = ''
gpu_mem=32
arm_freq=1350
core_freq=500
over_voltage=4
disable_splash=1
# bye bye warranty
force_turbo=1
'';
boot.loader.generationsDir.enable = lib.mkDefault false;
boot.tmpOnTmpfs = lib.mkForce false;
boot.cleanTmpDir = true;
hardware.enableRedistributableFirmware = true;
## wifi not working, will be fixed with https://github.com/NixOS/nixpkgs/pull/53747
# boot.kernelPackages = pkgs.linuxPackages_latest;
boot.kernelPackages = pkgs.linuxPackages_latest;
environment.systemPackages = [ pkgs.raspberrypi-tools ];
networking.wireless.enable = true;
# File systems configuration for using the installer's partition layout
swapDevices = [ { device = "/var/swap"; size = 2048; } ];
environment.systemPackages = [ pkgs.libraspberrypi ];
imports = [ <nixos-hardware/raspberry-pi/4> ];
boot.kernelPackages = pkgs.linuxPackages_rpi4;
fileSystems = {
"/boot" = {
device = "/dev/disk/by-label/NIXOS_BOOT";
fsType = "vfat";
};
"/" = {
device = "/dev/disk/by-label/NIXOS_SD";
fsType = "ext4";
options = [ "noatime" ];
};
};
#hardware.raspberry-pi."4".fkms-3d.enable = true;
}

View File

@ -1,4 +1,6 @@
{
name="cake";
full = true;
home-manager = true;
hw = true;
}

View File

@ -30,7 +30,7 @@ in {
# Storage
<stockholm/makefu/2configs/share>
<stockholm/makefu/2configs/share/hetzner-client.nix>
# <stockholm/makefu/2configs/share/hetzner-client.nix>
# Services:
<stockholm/makefu/2configs/nix-community/mediawiki-matrix-bot.nix>
@ -42,7 +42,7 @@ in {
# local usage:
<stockholm/makefu/2configs/mosh.nix>
<stockholm/makefu/2configs/bitlbee.nix>
# Supervision
<stockholm/makefu/2configs/nix-community/supervision.nix>
@ -53,6 +53,9 @@ in {
# backup
<stockholm/makefu/2configs/backup/state.nix>
# migrated:
# <stockholm/makefu/2configs/bitlbee.nix>
];
krebs = {

View File

@ -53,7 +53,6 @@ in {
<stockholm/makefu/2configs/share>
<stockholm/makefu/2configs/share/omo.nix>
<stockholm/makefu/2configs/share/gum-client.nix>
<stockholm/makefu/2configs/share/hetzner-client.nix>
<stockholm/makefu/2configs/sync>
<stockholm/makefu/2configs/dcpp/airdcpp.nix>
{ krebs.airdcpp.dcpp.shares = let

View File

@ -1,6 +1,6 @@
{
name="omo";
torrent = true;
#unstable = true;
unstable = true;
home-manager = true;
}

View File

@ -137,7 +137,6 @@
# <stockholm/makefu/2configs/share/anon-ftp.nix>
# <stockholm/makefu/2configs/share/anon-sftp.nix>
<stockholm/makefu/2configs/share/gum-client.nix>
<stockholm/makefu/2configs/share/hetzner-client.nix>
<stockholm/makefu/2configs/share>
# <stockholm/makefu/2configs/share/temp-share-samba.nix>

View File

@ -59,6 +59,11 @@ in {
systemd.services.nginx.serviceConfig.ReadWritePaths = [
"/var/spool/nginx/logs/"
];
security.acme.certs."download.binaergewitter.de" = {
dnsProvider = "cloudflare";
credentialsFile = toString <secrets/lego-binaergewitter>;
webroot = lib.mkForce null;
};
services.nginx = {
appendHttpConfig = ''
@ -70,6 +75,8 @@ in {
recommendedGzipSettings = true;
recommendedOptimisation = true;
virtualHosts."download.binaergewitter.de" = {
addSSL = true;
enableACME = true;
serverAliases = [ "dl2.binaergewitter.de" ];
root = "/var/www/binaergewitter";
extraConfig = ''

View File

@ -2,7 +2,7 @@
{
services.bitlbee = {
enable = true;
libpurple_plugins = [ pkgs.telegram-purple pkgs.pidgin-skypeweb];
# libpurple_plugins = [ pkgs.telegram-purple pkgs.pidgin-skypeweb];
};
users.users.makefu.packages = with pkgs; [ weechat tmux ];
state = [ "/var/lib/bitlbee" ];

View File

@ -52,6 +52,7 @@ with import <stockholm/lib>;
gnumake
rxvt_unicode.terminfo
htop
nix-output-monitor
];
programs.bash.enableCompletion = true;
@ -86,8 +87,9 @@ with import <stockholm/lib>;
'';
environment.pathsToLink = [ "/share" ];
security.acme = {
email = "letsencrypt@syntax-fehler.de";
defaults.email = "letsencrypt@syntax-fehler.de";
acceptTerms = true;
};
system.stateVersion = lib.mkDefault "20.03";
services.postgresql.package = pkgs.postgresql_14;
}

View File

@ -57,7 +57,7 @@ systemd.services.postgresqlBackup-nextcloud.serviceConfig.SupplementaryGroups =
users.users.nextcloud.extraGroups = [ "download" ];
services.nextcloud = {
enable = true;
package = pkgs.nextcloud23;
package = pkgs.nextcloud24;
hostName = "o.euer.krebsco.de";
# Use HTTPS for links
https = true;

View File

@ -0,0 +1,45 @@
{ pkgs, ... }:
{
services.mjpg-streamer = {
enable = true;
inputPlugin = "input_uvc.so -d /dev/web_cam -r 1280x960";
};
users.users.octoprint.extraGroups = [ "video" ];
# allow octoprint to access /dev/vchiq
# also ensure that the webcam always comes up under the same name
services.udev.extraRules = ''
SUBSYSTEM=="vchiq",GROUP="video",MODE="0660"
SUBSYSTEM=="video4linux", ATTR{name}=="UVC Camera (046d:0825)",SYMLINK+="web_cam", MODE="0666", GROUP="video"
'';
systemd.services.octoprint = {
path = [ pkgs.libraspberrypi ];
};
services.octoprint = {
enable = true;
plugins = plugins: with plugins;[
costestimation
displayprogress
mqtt
stlviewer
themeify
# octolapse
(buildPlugin rec {
pname = "OctoPrint-HomeAssistant";
version = "3.6.2";
src = pkgs.fetchFromGitHub {
owner = "cmroche";
repo = pname;
rev = version;
hash = "sha256-oo9OBmHoJFNGK7u9cVouMuBuUcUxRUrY0ppRq0OS1ro=";
};
})
];
extraConfig.plugins.mqtt.broker = {
url = "omo.lan";
# TODO TODO TODO
username = "hass";
password = "lksue43jrf";
# TODO TODO TODO
};
};
}

View File

@ -0,0 +1,4 @@
# good, bad radio
# stop
# start radio
# lauter, leister

View File

@ -0,0 +1,2 @@
Endlich ist Pappa fertig mit arbeit!
Heute hast du {{ states("sensor.felix_at_work_today") |round(1) }} Stunden gearbeitet.

View File

@ -7,6 +7,21 @@ let
in
{
services.home-assistant.config.input_boolean.felix_at_work.name = "Felix auf Arbeit";
services.home-assistant.config.timer.felix_at_work = {
name = "Felix auf Arbeit Timer";
duration = "10:00:00";
};
services.home-assistant.config.sensor = [
{
platform = "history_stats";
name = "Felix at work today";
entity_id = "input_boolean.felix_at_work";
state = "on";
type = "time";
start = "{{ now().replace(hour=0, minute=0, second=0) }}";
end = "{{ now() }}";
}
];
services.home-assistant.config.script.start_office_radio.sequence =
[
{ service = "media_player.play_media";
@ -19,13 +34,41 @@ in
];
services.home-assistant.config.automation =
[
{ service = "media_player.play_media";
data = {
media_content_id = "http://radio.lassul.us:8000/radio.mp3";
media_content_type = "music";
};
target.entity_id = "media_player.office";
}
{ alias = "Zu lange Felix!";
trigger =
{ platform = "event";
event_type = "timer.finished";
event_data.entity_id = "timer.felix_at_work";
};
condition =
{
condition = "state";
entity_id = at_work;
state = "off";
};
action = (say "Felix, die zehn Stunden sind um, aufhören jetzt");
}
{ alias = "Turn off at work sensor";
trigger = [
{ platform = "time"; at = "00:00:00"; }
];
condition =
{
condition = "state";
entity_id = at_work;
state = "off";
};
action =
[
# felix forgot to stamp out ...
{
service = "homeassistant.turn_off";
entity_id = [ at_work ];
}
];
}
{ alias = "Push Check-in Button Felix with button";
trigger = [
{
@ -54,15 +97,12 @@ in
{ service = "homeassistant.turn_on";
entity_id = at_work;
}
] ++ (say "Willkommen auf Arbeit") ++
[
{ service = "media_player.play_media";
data = {
media_content_id = "http://radio.lassul.us:8000/radio.mp3";
media_content_type = "music";
};
target.entity_id = "media_player.office";
{ service = "timer.start";
entity_id = [ "timer.felix_at_work" ] ;
}
] ++ (say (builtins.readFile ./welcome.txt.j2)) ++
[
{ service = "script.start_office_radio"; }
];
}
{
@ -78,7 +118,12 @@ in
{ service = "homeassistant.turn_off";
entity_id = at_work;
}
] ++ (say "Endlich ist Pappa fertig mit arbeit!");
] ++ (say (builtins.readFile ./bye.txt.j2)) ++
[
{ service = "timer.stop";
entity_id = [ "timer.felix_at_work" ] ;
}
];
}
];
}

View File

@ -0,0 +1,17 @@
{
services.home-assistant.config.automation =
[
{
trigger = [
{ platform = "time"; at = "03:21"; }
];
action =
[
{
service = "speedtestdotnet.speedtest";
}
];
}
];
}

View File

@ -4,6 +4,11 @@
# binary_sensor.badezimmer_fenster_contact
# binary_sensor.dusche_fenster_contact
let
hlib = import ../lib;
say = hlib.say.office;
draussen = "sensor.wohnzimmer_temp_temperature";
draussen_diff = "sensor.unterschied_draussen_drinnen";
draussen_heiss = 23;
min = 20;
fenster_offen = name: entity:
{ alias = "${name} seit ${toString min} Minuten offen";
@ -16,10 +21,6 @@ let
}
];
condition = [
{ condition = "state";
entity_id = "input_boolean.ist_sommer";
state = "off";
}
];
action =
[
@ -67,6 +68,17 @@ let
};
in {
services.home-assistant.config = {
template = [
{ sensor = {
name = "Unterschied Draussen Drinnen";
unit_of_measurement = "°C";
state = ''
{% set inside = states("${draussen}") | float | round(2) -%}
{% set outside = states("sensor.dark_sky_temperature") | float | round(2) -%}
{{ ((outside - inside) | round(1) )}}'';
};
}
];
sensor = [
{ platform = "season"; type = "meteorological";}
];
@ -86,6 +98,41 @@ in {
(fenster_offen "Badezimmerfenster" "binary_sensor.badezimmer_fenster_contact")
(fenster_offen "Duschfenster" "binary_sensor.dusche_fenster_contact")
{ alias = "Draussen ist wieder kaelter";
trigger = [
{
platform = "numeric_state";
entity_id = draussen_diff;
below = 0;
for.minutes = 20;
}
];
condition = [
{ condition = "numeric_state";
entity_id = draussen;
above = draussen_heiss;
}
];
action = (say "Draussen ist es endlich kühler, jetzt kann man die Fenster auf machen");
}
{ alias = "Draussen ist zu warm";
trigger = [
{
platform = "numeric_state";
entity_id = draussen_diff;
above = 0;
for.minutes = 20;
}
];
condition = [
{ condition = "numeric_state";
entity_id = draussen;
above = draussen_heiss;
}
];
action = (say "Draussen wird es jetzt zu warm, besser das fenster schliessen");
}
];
};
}

View File

@ -20,17 +20,17 @@ in
action = [
(cmd "reboot")
(sec 90) # go to my music because apparently select_source does not seem to always work
(cmd "HOME")
(sec 2)
(cmd "DOWN")
(sec 2)
(cmd "DOWN")
(sec 2)
(cmd "ENTER")
(sec 4)
(cmd "RIGHT")
(sec 2)
(cmd "RIGHT")
#(cmd "HOME")
#(sec 2)
#(cmd "DOWN")
#(sec 2)
#(cmd "DOWN")
#(sec 2)
#(cmd "ENTER")
#(sec 4)
#(cmd "RIGHT")
#(sec 2)
#(cmd "RIGHT")
];
}
];

View File

@ -32,12 +32,16 @@ in
[
{ choose = [
(lightcond "Badezimmer Fenster Auf"
{ condition = "state"; entity_id = "binary_sensor.badezimmer_fenster_contact"; state = "on"; }
[ 64 207 255 ] 255 # helblau
[ { condition = "state"; entity_id = "binary_sensor.badezimmer_fenster_contact"; state = "on"; }
{ condition = "state"; entity_id = "input_boolean.ist_sommer"; state = "off"; }
]
[ 64 207 255 ] 128 # hellblau
)
(lightcond "Duschenster auf"
{ condition = "state"; entity_id = "binary_sensor.dusche_fenster_contact"; state = "on"; }
[ 64 207 255 ] 255 # helblau
[ { condition = "state"; entity_id = "binary_sensor.dusche_fenster_contact"; state = "on"; }
{ condition = "state"; entity_id = "input_boolean.ist_sommer"; state = "off"; } ]
[ 64 207 255 ] 128 # hellblau
)
(lightcond "Nachtlicht"
{ condition = "state"; entity_id = "sun.sun"; state = "below_horizon"; }

View File

@ -1,5 +1,8 @@
let
btn = "sensor.arbeitszimmer_btn1_action";
lib = import ../lib;
say = lib.say.living_room;
all_lights = [
# Wohnzimmer
"light.wled"
@ -21,6 +24,8 @@ let
all_media_player = [
"media_player.living_room"
"media_player.office"
"media_player.bedroom"
];
in {
services.home-assistant.config.automation =
@ -30,13 +35,13 @@ in {
{
platform = "state";
entity_id = btn;
to = "on";
to = "single";
}
];
condition = [ ];
action = [
action = (say "Alles Aus" )++ [
{
service = "home_assistant.turn_off";
service = "light.turn_off";
target.entity_id = all_lights;
}
{ service = "media_player.media_stop";

View File

@ -4,7 +4,10 @@
# "all" lights
let
schranklicht = "light.wohnzimmer_schrank_osram";
schranklicht = [
"light.wohnzimmer_schrank_osram"
"light.wohnzimmer_komode_osram"
];
weihnachtslicht = "light.wohnzimmer_fenster_lichterkette_licht";
fernsehlicht = "light.wled";
@ -24,7 +27,7 @@ let
turn_on = entity_id: offset:
# negative offset => before sunset
{ alias = "Turn on ${entity_id} at sunset ${offset}";
{ alias = "Turn on ${toString entity_id} at sunset ${offset}";
trigger = [
{ platform = "sun"; event = "sunset"; inherit offset; }
];

View File

@ -0,0 +1,45 @@
{% set arbeit_heute = is_state("binary_sensor.arbeitstag","on") -%}
{% set weekday = ['Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag','Sonntag'][now().weekday()] -%}
{% set is_friday = now().weekday() == 4 %}
{% if not arbeit_heute %}
Heute ist {{ weekday }}, du solltest gar nicht arbeiten!
{% else %}
Willkommen auf Arbeit Felix.
{% endif -%}
Das aktuell gewählte Projekt ist {{ states("sensor.felix_project") }}.
{% set inside = states("sensor.wohnzimmer_temp_temperature") | float | round(2) -%}
{% set outside = states("sensor.dark_sky_temperature") | float | round(2) -%}
{% set arbeit_morgen = is_state("binary_sensor.arbeitstag_morgen","on") -%}
Die Wetteraussichten: {{ states("sensor.dark_sky_hourly_summary") | replace(".","")}} bei {{ states("sensor.dark_sky_temperature") }} Grad mit {{ states("sensor.dark_sky_humidity") | round(0) }}% Luftfeuchtigkeit.
{% if states("calendar.abfall_papiermuell") == "on" %}
Heute ist Papiermuell, bring noch schnell dein Papier raus
{% endif %}
{% if states("calendar.abfall_restmuell") == "on" %}
Ausserdem ist heute Restmuell.
{% endif -%}
{% if ( outside < inside ) and ( outside > 18 ) %}
Draussen ist es gerade {{ ((inside - outside) | round(1) )}} gerade kühler
{% endif -%}
{% set current_count = state_attr("sensor.dwd_weather_warnings_current_warning_level", "warning_count") %}
{% for i in range(current_count) %}
{% set idx = i + 1 %}
{% set headline = state_attr("sensor.dwd_weather_warnings_current_warning_level", "warning_" ~ idx ~ "_headline") %}
{% set description = state_attr("sensor.dwd_weather_warnings_current_warning_level", "warning_" ~ idx ~ "_description") %}
{% set level = state_attr("sensor.dwd_weather_warnings_current_warning_level", "warning_" ~ idx ~ "_level") %}
{% set time_start = state_attr("sensor.dwd_weather_warnings_current_warning_level", "warning_" ~ idx ~ "_start") %}
{% set time_end = state_attr("sensor.dwd_weather_warnings_current_warning_level", "warning_" ~ idx ~ "_end") %}
Wetterwarnung {{idx}}: {{ headline }} Stufe {{level}} von {{ time_start.strftime("%H:%M") ~ " bis " ~ time_end.strftime("%H:%M") }} Uhr
{{ description }}
{% endfor %}
{% if is_friday %}
Endlich ist Freitag!
{% elif not arbeit_morgen %}
Morgen ist Feiertag, also nicht versehentlich arbeiten
{% endif -%}

View File

@ -24,13 +24,17 @@ in {
./device_tracker/tile.nix
./sensor/outside.nix
./sensor/pollen.nix
./sensor/dwd.nix
./calendar/nextcloud.nix
./media/firetv.nix
./media/sonos.nix
./media/schlafzimmer_music_remote.nix
./media/remote_sound_wohnzimmer.nix
./media/remote_sound_arbeitszimmer.nix
./media/arbeitszimmer_matrix.nix
./automation/check-in.nix
./automation/fenster_auf.nix
@ -41,9 +45,12 @@ in {
./automation/flurlicht.nix
./automation/giesskanne.nix
./automation/pflanzen_giessen_erinnerung.nix
./automation/urlaub.nix
# ./automation/urlaub.nix
./automation/moodlight.nix
./automation/shutdown_button.nix
./automation/project_tracker.nix
./automation/daily_speedtext.nix
./light/arbeitszimmer.nix
./light/schlafzimmer.nix
@ -53,18 +60,14 @@ in {
];
services.home-assistant = {
package = (pkgs.home-assistant.overrideAttrs (old: {
doInstallCheck = false;
})).override {
extraPackages = p: [
(p.callPackage ./deps/dwdwfsapi.nix {})
# (p.callPackage ./signal-rest/pkg.nix {})
(p.callPackage ./deps/pykodi.nix {})
];
};
extraComponents = [ "mobile_app" ];
extraPackages = python3Packages: with python3Packages; [ pytz ];
config = {
default_config = {}; # for sonos aiodiscover
influxdb = {
api_version = 1;
database = "ham";
host = "localhost";
tags = {
@ -87,6 +90,25 @@ in {
{ type = "homeassistant"; }
];
};
binary_sensor = [
{ platform = "workday";
name = "Arbeitstag";
country = "DE";
province = "BW";
}
{ platform = "workday";
name = "Arbeitstag Morgen";
country = "DE";
province = "BW";
days_offset = 1;
}
{ platform = "workday";
name = "Arbeitstag Gestern";
country = "DE";
province = "BW";
days_offset = 1;
}
];
discovery = {};
conversation = {};
history = {};
@ -141,22 +163,19 @@ in {
retain = true;
};
};
#luftdaten = {
# show_on_map = true;
# sensor_id = 10529;
# sensors.monitored_conditions = [ "P1" "P2" ];
#};
luftdaten = {
# show_on_map = true;
sensor_id = 72935;
# sensors.monitored_conditions = [ "P1" "P2" ];
};
#binary_sensor =
# flurlicht.binary_sensor;
sensor = [
{ platform = "speedtestdotnet";
scan_interval.hours = 6;
monitored_conditions = [ "ping" "download" "upload" ];
}
# https://www.home-assistant.io/cookbook/automation_for_rainy_days/
];
frontend = { };
speedtestdotnet = { };
http = {
use_x_forwarded_for = true;
#server_host = "127.0.0.1";
@ -167,6 +186,7 @@ in {
switch = [];
automation = [];
script = { };
media_source = {};
};
enable = true;
configDir = hassdir;

View File

@ -14,7 +14,7 @@ in
{
service = "tts.google_say";
data = {
entity_id = entity;
entity_id = entity;
inherit message;
language = "de";
};
@ -27,10 +27,7 @@ in
#}
{ delay.seconds = 1; }
{ delay = ''
{% set duration = states.${entity}.attributes.media_duration %}
{% if duration > 0 %}
{% set duration = duration - 1 %}
{% endif %}
{% set duration = state_attr("${entity}","media_duration") %}
{% set seconds = duration % 60 %}
{% set minutes = (duration / 60)|int % 60 %}
{% set hours = (duration / 3600)|int %}
@ -53,6 +50,10 @@ in
inherit message;
entity = "media_player.office";
};
bedroom = message: tts {
inherit message;
entity = "media_player.bedroom";
};
};
zigbee.prefix = "/ham/zigbee";

View File

@ -21,24 +21,26 @@ let
group_id_2 = 16389;
group_id_3 = 16390;
remote = "sensor.schlafzimmer_remote1_action";
main_light_1 = "light.wled";
main_light_1 = "light.wled"; # fernseher
main_light_2 = "light.wled_2"; #fernsehwand
default_scene_1 = "Solid";
default_color_1 = "Default";
main_color_select_1 = "select.wled_color_palette";
light_group_1.entity_id = [
main_light_1
main_light_2
];
# contains only the actually changeable lights
light_group_2 = { entity_id = [
light_group_2.entity_id = [
"light.wohnzimmer_komode_osram"
"light.wohnzimmer_schrank_osram"
"light.wohnzimmer_fenster_lichterkette_licht"
];
};
light_group_3 = { entity_id = [
light_group_3.entity_id = [
"light.wohnzimmer_stehlampe_osram"
]; };
];
statecond = cond: { # cond must be a list
condition = "template";

View File

@ -0,0 +1,104 @@
{ lib, ... }:
let
remote = "sensor.schlafzimmer_music_remote_action";
hlib = import ../lib;
step = 0.02;
#room = "bedroom";
room = "office";
player = "media_player.${room}";
say = hlib.say."${room}";
remote_action = key: actions: {
conditions = ''{{ trigger.entity_id == 'binary_sensor.matrix_button_${toString key}' }}'';
sequence = actions;
};
all_buttons = map (key: "binary_sensor.matrix_button_${toString key}") [
0 1 2 3 4 5 6 7 8 9
"b9" "b10" "b11" "b12" "b13" "b14"
];
in
{
services.home-assistant.config.rest_command = {
good_song = {
url = "http://prism.r:8001/good";
method = "POST";
};
bad_song = {
url = "http://prism.r:8001/skip";
method = "POST";
};
};
services.home-assistant.config.automation =
[
{ alias = "Arbeitszimmer Matrix music action";
mode = "queued";
trigger = [
{
platform = "state";
entity_id = all_buttons;
to = "on"; # ignore 'unavailable'
}
];
action =
[
{ choose = [
(remote_action "9" {
service = "media_player.media_play";
target.entity_id = player;
})
(remote_action "7"
{
service = "media_player.media_mute";
target.entity_id = player;
data.is_volume_muted = ''{{ not state_attr('${player}' , 'is_volume_muted') }}'';
}
)
(remote_action "2"
{
service = "media_player.media_stop";
target.entity_id = player;
}
)
(remote_action "b9" [ { service = "rest_command.good_song"; } ])
(remote_action "b10" [ { service = "rest_command.bad_song"; } ])
(remote_action "3"
((say "Starte Lass") ++ [
{ service = "media_player.play_media";
data = {
media_content_id = "http://radio.lassul.us:8000/radio.mp3";
media_content_type = "music";
};
target.entity_id = player;
}
]))
(remote_action "1"
((say "Starte Groovesalad") ++ [
{ service = "media_player.play_media";
data = {
media_content_id = "http://ice2.somafm.com/groovesalad-128.mp3";
media_content_type = "music";
};
target.entity_id = player;
}
]))
(remote_action "8" {
service = "media_player.volume_set";
target.entity_id = player;
data.volume_level = ''{{ state_attr("${player}","volume_level") + (${toString step}|float) }}'';
})
(remote_action "5"{
service = "media_player.volume_set";
target.entity_id = player;
data.volume_level = ''{{ state_attr("${player}","volume_level") - (${toString step}|float) }}'';
})
];
#default = { };
}
];
}
];
}

View File

@ -3,14 +3,9 @@ let
in {
services.home-assistant.config = {
notify = [
#{
# platform = "kodi";
# name = "Kodi Wohnzimmer";
# host = firetv_stick;
#}
{
platform = "nfandroidtv";
name = "FireTV Wohnzimmer";
name = "FireTV Wohnzimmer Notification";
host = firetv_stick;
}
];
@ -20,10 +15,10 @@ in {
# name = "FireTV Stick kodi";
# host = firetv_stick;
#}
# Configuration needs to be done by hand via web interface "integration"
{ platform = "androidtv";
name = "FireTV Stick";
device_class = "firetv";
# adb_server_ip = firetv_stick;
name = "FireTV Stick Android";
device_class = "firetv";
host = firetv_stick;
port = 5555;
}

View File

@ -1,5 +1,10 @@
{ lib, ...}:
let
# https://www.radiotheque.de/stream/4744806739035994/ABC-Lounge-Music-Radio/pls/
# http://listen.radionomy.com/ABC-Lounge
# https://str1.openstream.co/589
# https://listen.openstream.co/3139/audio
# https://str1.openstream.co/589?aw_0_1st.collectionid%3D3139%26stationId%3D3139%26publisherId%3D613%26k%3D1659381767%26aw_0_azn.pcountry%3D%5B%22FR%22%2C%22IT%22%2C%22DE%22%2C%22ES%22%2C%22GB%22%2C%22CH%22%2C%22CA%22%2C%22AT%22%2C%22US%22%5D%26aw_0_azn.planguage%3D%5B%22en%22%2C%22fr%22%2C%22de%22%5D%26aw_0_azn.pgenre%3D%5B%22Jazz%22%2C%22Easy+Listening%22%2C%22Music%22%5D
statecond = cond: { # cond must be a list
condition = "template";
value_template = "{{ trigger.to_state.state in ( " +

View File

@ -0,0 +1,158 @@
{ lib, ... }:
let
remote = "sensor.schlafzimmer_music_remote_action";
hlib = import ../lib;
step = 0.03;
#room = "bedroom";
room = "living_room";
#room = "office";
player = "media_player.${room}";
say = hlib.say."${room}";
remote_action = state: actions: {
conditions = ''{{ trigger.to_state.attributes.action == '${state}' }}'';
sequence = actions;
};
album_list = [
# Wieso Weshalb Warum Junior
"Doris%20R%c3%bcbel,%20JUMBO%20Neue%20Medien%20%26%20Verlag%20GmbH/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Helfen,%20teilen,%20sich%20vertragen"
"Wieso%3f%20Weshalb%3f%20Warum%3f%20junior/Mein%20Kindergarten"
"Wieso%3f%20Weshalb%3f%20Warum%3f%20junior/Unser%20Werkzeug"
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Am%20Meer"
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Ampel,%20Stra%c3%9fe%20und%20Verkehr"
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Autos%20und%20Laster"
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Der%20Bagger"
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Der%20Bauernhof"
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Der%20Flughafen"
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Der%20Pinguin"
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Der%20Traktor"
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Die%20Baustelle"
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Die%20Eisenbahn"
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Die%20Feuerwehr"
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Die%20Jahreszeiten"
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Die%20M%c3%bcllabfuhr"
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Die%20Polizei"
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Die%20Rettungsfahrzeuge"
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Die%20Ritterburg"
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Heute,%20morgen,%20jetzt%20und%20gleich"
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Im%20Streichelzoo"
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20In%20den%20Bergen"
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Mama,%20Papa,%20Oma,%20Opa"
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Mein%20Hund"
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Tanken,%20waschen,%20reparieren"
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Tiere%20in%20Afrika"
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Unsere%20Tierkinder"
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Unterwegs%20mit%20Bus%20und%20Bahn"
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Was%20ich%20alles%20kann"
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Was%20kriecht%20und%20krabbelt%20da%3f"
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Was%20machen%20wir%20an%20Weihnachten%3f"
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Was%20machen%20wir%20im%20Fr%c3%bchling%3f"
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Was%20machen%20wir%20im%20Herbst%3f"
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Was%20machen%20wir%20im%20Sommer%3f"
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Was%20machen%20wir%20im%20Winter%3f"
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Was%20macht%20der%20Fu%c3%9fballer%3f"
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Was%20macht%20der%20Polizist"
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Was%20macht%20die%20Prinzessin%3f"
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Was%20w%c3%a4chst%20da%3f"
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Wenn%20es%20dunkel%20wird"
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Wer%20arbeitet%20auf%20der%20Baustelle%3f"
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Wir%20feiern%20Geburtstag"
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Wir%20gehen%20in%20den%20Zoo"
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Z%c3%a4hne%20putzen,%20Pipi%20machen"
];
albums = lib.concatMapStringsSep ", " (x: ''"A:ALBUMARTIST/${x}"'')
album_list;
in
{
services.home-assistant.config.automation =
[
{ alias = "Schlafzimmer music action";
mode = "queued";
trigger = [
{
platform = "state";
entity_id = remote;
attribute = "action";
not_to = "";
}
];
action =
[
{ choose = [
(remote_action "on"
((say "Starte Essensmusik") ++ [
{ service = "media_player.play_media";
data = {
media_content_id = "https://listen.openstream.co/4457/audio.mp3";
media_content_type = "music";
};
target.entity_id = player;
}
]))
(remote_action "off"
[
{
service = "media_player.media_stop";
target.entity_id = player;
}
]
)
(remote_action "arrow_right_hold"
((say "Starte Lass") ++ [
{ service = "media_player.play_media";
data = {
media_content_id = "http://radio.lassul.us:8000/radio.mp3";
media_content_type = "music";
};
target.entity_id = player;
}
]))
(remote_action "arrow_left_hold"
((say "Starte Deep House Music") ++ [
{ service = "media_player.play_media";
data = {
media_content_id = "http://live.dancemusic.ro:7000/stream.mp3";
media_content_type = "music";
};
target.entity_id = player;
}
]))
# TODO: choose random kindermusik?
(remote_action "brightness_move_up"
((say "Starte Liam Album") ++ [
{
service = "media_player.play_media";
target.entity_id = player;
data = {
media_content_id = "{{ [${albums}]|random }}";
media_content_type = "album";
};
}
])
)
#(remote_action "brightness_move_down"
#)
(remote_action "arrow_right_click" {
service = "media_player.volume_set";
target.entity_id = player;
data.volume_level = ''{{ state_attr("${player}","volume_level") + (${toString step}|float) }}'';
})
#(remote_action "brightness_move_down" {
(remote_action "arrow_left_click"{
service = "media_player.volume_set";
target.entity_id = player;
data.volume_level = ''{{ state_attr("${player}","volume_level") - (${toString step}|float) }}'';
})
];
#default = { };
}
];
}
];
}

View File

@ -4,5 +4,4 @@
"192.168.111.31"
"192.168.111.32"
];
}
}

View File

@ -0,0 +1,8 @@
{
services.home-assistant.config.sensor =
[
{ platform = "dwd_weather_warnings";
region_name = "Stadt Stuttgart";
}
];
}

View File

@ -0,0 +1,65 @@
{ pkgs, lib, ... }:
with lib;
let
region = "112";
types = [
"Erle"
"Beifuss"
"Ambrosia"
"Birke"
"Esche"
"Hasel"
"Graeser"
"Roggen"
];
gen_tomorrow_sensor = type: {
name = "dwd_pollenbelastung_${toLower type}_tomorrow";
value = {
icon_template = "mdi:grass";
friendly_name = "${type} Morgen";
value_template = "{{ state_attr('sensor.dwd_pollenbelastung_${toLower type}', 'tomorrow') }}";
};
};
gen_sensor = type: {
name = "dwd_pollenbelastung_${toLower type}";
value = {
icon_template = "mdi:tree-outline";
friendly_name = type;
value_template = ''
{% set dwd_state = state_attr('sensor.dwd_pollenbelastung_stuttgart', '${type}')['today'] %}
{% if dwd_state == "3" %}6{% elif dwd_state == "2-3"%}5{% elif dwd_state == "2"%}4{% elif dwd_state == "1-2"%}3{% elif dwd_state == "1"%}2{% elif dwd_state == "0-1"%}1{% else %}0{% endif %}
'';
attribute_templates.today = ''
{% set dwd_state = state_attr('sensor.dwd_pollenbelastung_stuttgart', '${type}')['today'] %}
{% if dwd_state == "3" %}6{% elif dwd_state == "2-3"%}5{% elif dwd_state == "2"%}4{% elif dwd_state == "1-2"%}3{% elif dwd_state == "1"%}2{% elif dwd_state == "0-1"%}1{% else %}0{% endif %}
'';
attribute_templates.tomorrow = ''
{% set dwd_state = state_attr('sensor.dwd_pollenbelastung_stuttgart', '${type}')['tomorrow'] %}
{% if dwd_state == "3" %}6{% elif dwd_state == "2-3"%}5{% elif dwd_state == "2"%}4{% elif dwd_state == "1-2"%}3{% elif dwd_state == "1"%}2{% elif dwd_state == "0-1"%}1{% else %}0{% endif %}
'';
# -1 == unknown
#attribute_templates.dayafter = ''
# {% set dwd_state = state_attr('sensor.dwd_pollenbelastung', '${type}')['dayafter_to'] %}
# {% if dwd_state == "3" %}6{% elif dwd_state == "2-3"%}5{% elif dwd_state == "2"%}4{% elif dwd_state == "1-2"%}3{% elif dwd_state == "1"%}2{% elif dwd_state == "0-1"%}1{% elif dwd_state == "-1"%}-1{% else %}0{% endif %}
#'';
};
};
in
{
services.home-assistant.config.sensor = [
{
platform = "rest";
scan_interval = 3600;
name = "DWD Pollenbelastung Stuttgart";
resource = "https://opendata.dwd.de/climate_environment/health/alerts/s31fg.json";
json_attributes_path = "$..content[?(@.partregion_id==${region})].Pollen";
json_attributes = types;
value_template = "{{ value_json.last_update }}";
}
{
platform = "template";
sensors = (listToAttrs (map gen_sensor types)) //
(listToAttrs (map gen_tomorrow_sensor types)) ;
}
];
}

View File

@ -14,5 +14,7 @@ in {
volumes = [
"${config}:/home/.local/share/signal-cli"
];
environment.MODE ="json-rpc";
#environment.MODE ="native"; # only required for reigstration
};
}

View File

@ -38,93 +38,6 @@ in
icon = "mdi:chip";
}
];
switch = [
{
platform = "mqtt";
name = "Zigbee2mqtt Main join";
state_topic = "${prefix}/bridge/config/permit_join";
command_topic = "${prefix}/bridge/config/permit_join";
payload_on = "true";
payload_off = "false";
}
];
automation = [
{
alias = "Zigbee2mqtt Log Level";
initial_state = "on";
trigger = {
platform = "state";
entity_id = "input_select.zigbee2mqtt_log_level";
};
action = [
{
service = "mqtt.publish";
data = {
payload_template = "{{ states('input_select.zigbee2mqtt_log_level') }}";
topic = "${prefix}/bridge/config/log_level";
};
}
];
}
# Automation to start timer when enable join is turned on
{
id = "zigbee_join_enabled";
alias = "Zigbee Join Enabled";
trigger =
{
platform = "state";
entity_id = "switch.zigbee2mqtt_main_join";
to = "on";
};
action =
{
service = "timer.start";
entity_id = "timer.zigbee_permit_join";
};
}
# # Automation to stop timer when switch turned off and turn off switch when timer finished
{
id = "zigbee_join_disabled";
alias = "Zigbee Join Disabled";
trigger = [
{
platform = "event";
event_type = "timer.finished";
event_data.entity_id = "timer.zigbee_permit_join";
}
{
platform = "state";
entity_id = "switch.zigbee2mqtt_main_join";
to = "off";
}
];
action = [
{ service = "timer.cancel";
data.entity_id = "timer.zigbee_permit_join";
}
{ service = "switch.turn_off";
entity_id = "switch.zigbee2mqtt_main_join";
}
];
}
];
input_select.zigbee2mqtt_log_level =
{
name = "Zigbee2mqtt Log Level";
options = [
"debug"
"info"
"warn"
"error"
];
initial = "info";
icon = "mdi:format-list-bulleted";
};
timer.zigbee_permit_join =
{
name = "Zigbee Time remaining";
duration = 120;
};
};
}

View File

@ -2,9 +2,65 @@
{
services.jellyfin.enable = true;
services.jellyfin.openFirewall = true;
#users.users.${config.services.jellyfin.user}.extraGroups = [ "download" "video" "render" ];
state = [ "/var/lib/jellyfin" ];
systemd.services.jellyfin.serviceConfig.PrivateDevices = lib.mkForce false;
systemd.services.jellyfin.serviceConfig.DeviceAllow = lib.mkForce ["char-drm rwm" "char-nvidia-frontend" "char-nvidia-uvm"];
systemd.services.jellyfin.serviceConfig.SupplementaryGroups = [ "video" "render" "download" ];
users.users.${config.services.jellyfin.user}.extraGroups = [ "download" "video" "render" ];
systemd.services.jellyfin = {
after = [ "media-cloud.mount" ];
serviceConfig = rec {
SupplementaryGroups = lib.mkForce [ "video" "render" "download" ];
UMask = lib.mkForce "0077";
Type = lib.mkForce "simple";
StateDirectory = lib.mkForce "jellyfin";
StateDirectoryMode = lib.mkForce "0700";
CacheDirectory = lib.mkForce "jellyfin";
CacheDirectoryMode = lib.mkForce "0700";
WorkingDirectory = lib.mkForce "/var/lib/jellyfin";
Restart = lib.mkForce "on-failure";
TimeoutSec = lib.mkForce 15;
SuccessExitStatus = lib.mkForce ["0" "143"];
# Security options:
NoNewPrivileges = lib.mkForce true;
SystemCallArchitectures = lib.mkForce "native";
# AF_NETLINK needed because Jellyfin monitors the network connection
RestrictAddressFamilies = lib.mkForce [ "AF_UNIX" "AF_INET" "AF_INET6" "AF_NETLINK" ];
RestrictNamespaces = lib.mkForce false;
RestrictRealtime = lib.mkForce true;
RestrictSUIDSGID = lib.mkForce true;
ProtectControlGroups = lib.mkForce false;
ProtectHostname = lib.mkForce true;
ProtectKernelLogs = lib.mkForce false;
ProtectKernelModules = lib.mkForce false;
ProtectKernelTunables = lib.mkForce false;
LockPersonality = lib.mkForce true;
PrivateTmp = lib.mkForce false;
# needed for hardware accelaration
PrivateDevices = lib.mkForce false;
PrivateUsers = lib.mkForce true;
RemoveIPC = lib.mkForce true;
SystemCallFilter = lib.mkForce [
"~@clock"
"~@aio"
"~@chown"
"~@cpu-emulation"
"~@debug"
"~@keyring"
"~@memlock"
"~@module"
"~@mount"
"~@obsolete"
"~@privileged"
"~@raw-io"
"~@reboot"
"~@setuid"
"~@swap"
];
SystemCallErrorNumber = lib.mkForce "EPERM";
};
};
}

View File

@ -22,10 +22,6 @@ in
locations."/".proxyPass = "http://localhost:${toString port}";
locations."/".proxyWebsockets = true;
extraConfig = ''
if ( $server_addr != "${internal-ip}" ) {
return 403;
}
'';
};
networking.firewall.allowedTCPPorts = [ port ];
}

View File

@ -0,0 +1,26 @@
{ config, lib, pkgs, ... }:
let
hostname = config.krebs.build.host.name;
user = config.services.nginx.user;
group = config.services.nginx.group;
external-ip = config.krebs.build.host.nets.internet.ip4.addr;
internal-ip = config.krebs.build.host.nets.retiolum.ip4.addr;
in {
services.nginx = {
enable = lib.mkDefault true;
virtualHosts."music.euer.krebsco.de" = {
forceSSL = true;
enableACME = true;
locations."/" = {
proxyPass = "http://omo:4533/";
proxyWebsockets = true;
extraConfig = ''
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
'';
};
};
};
}

View File

@ -0,0 +1,25 @@
{ pkgs, ... }:
let qemu-arm-static = pkgs.stdenv.mkDerivation {
name = "qemu-arm-static";
src = builtins.fetchurl {
url = "https://github.com/multiarch/qemu-user-static/releases/download/v6.1.0-8/qemu-arm-static";
sha256 = "06344d77d4f08b3e1b26ff440cb115179c63ca8047afb978602d7922a51231e3";
};
dontUnpack = true;
installPhase = "install -D -m 0755 $src $out/bin/qemu-arm-static";
};
in {
# Enable binfmt emulation of extra binary formats (armv7l-linux, for exmaple).
boot.binfmt.emulatedSystems = [ "aarch64-linux" ];
boot.binfmt.registrations.arm = {
interpreter = "${qemu-arm-static}/bin/qemu-arm-static";
magicOrExtension = ''\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00'';
mask = ''\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\x00\xff\xfe\xff\xff\xff'';
};
# Define additional settings for nix.
nix.extraOptions = ''
extra-platforms = armv7l-linux
'';
nix.sandboxPaths = [ "/run/binfmt/arm=${qemu-arm-static}/bin/qemu-arm-static" ];
}

View File

@ -2,21 +2,28 @@
let
automount_opts =
[ "x-systemd.automount"
"noauto" "x-systemd.idle-timeout=600"
"x-systemd.device-timeout=5s"
"x-systemd.mount-timeout=5s"
[ "x-systemd.automount" "noauto"
"x-systemd.idle-timeout=300"
"x-systemd.mount-timeout=60s"
];
host = "nextgum"; #TODO
host = "gum"; #TODO
in {
fileSystems."/media/download" = {
device = "//${host}/download";
boot.extraModprobeConfig = ''
options cifs CIFSMaxBufSize=130048
'';
fileSystems."/media/cloud" = {
device = "//${host}/cloud-proxy";
fsType = "cifs";
options = automount_opts ++
[ "credentials=/var/src/secrets/download.smb"
"file_mode=0775"
"dir_mode=0775"
"uid=9001"
"bsize=8388608"
"fsc"
"rsize=130048"
"cache=loose"
"uid=${toString config.users.users.download.uid}"
"gid=${toString config.users.groups.download.gid}"
"vers=3"
];
};

View File

@ -1,6 +1,5 @@
{ config, lib, pkgs, ... }:
with import <stockholm/lib>;
let
hostname = config.krebs.build.host.name;
in {
@ -11,15 +10,11 @@ in {
# home = "/var/empty";
# };
environment.systemPackages = [ pkgs.samba ];
users.users.download = {
uid = genid "download";
isNormalUser = true;
};
services.samba = {
enable = true;
shares = {
download = {
path = "/var/download";
cloud-proxy = {
path = "/media/cloud";
"read only" = "no";
browseable = "yes";
"guest ok" = "no";

View File

@ -21,11 +21,12 @@ in {
"dir_mode=0770"
"uid=${toString config.users.users.download.uid}"
"gid=${toString config.users.groups.download.gid}"
#"vers=3"
"vers=2.1"
"vers=3"
#"vers=2.1"
"rsize=65536"
"wsize=130048"
"iocharset=utf8"
"cache=loose"
];
};
}

View File

@ -87,6 +87,12 @@ in {
"guest ok" = "no";
"valid users" = "makefu";
};
#cloud = {
# path = "/media/cloud/download/finished";
# "read only" = "no";
# browseable = "yes";
# "guest ok" = "yes";
#};
};
extraConfig = ''
guest account = smbguest

View File

@ -2,18 +2,19 @@
imports = [
./android-pentest.nix
./consoles.nix
./core.nix
./core-gui.nix
./dev.nix
./core.nix
./desktop.nix
./dev.nix
./extra-gui.nix
./games.nix
./maker.nix
./media.nix
./mobility.nix
./pcmanfm-extra.nix
./scanner-tools.nix
./sec.nix
./sec-gui.nix
./sec.nix
./studio.nix
];
}

View File

@ -22,6 +22,7 @@
brain
whatsupnix
nixpkgs-pytools
nixpkgs-fmt
hydra-check
# git-related
git-preview

View File

@ -8,5 +8,6 @@
games-user-env
wine
pkg2zip
steam
];
}

View File

@ -0,0 +1,16 @@
{ pkgs, ... }:
{
users.users.makefu.packages = with pkgs; [
# media
picard
asunder
#darkice
lame
# creation
blender
openscad
# slicing
cura
chitubox
];
}

View File

@ -0,0 +1,21 @@
{ lib, ... }:
{
networking.wireguard.interfaces.thierry-wg = {
ips = [ "172.27.66.10/24" ]; # TODO: not dnyamic
privateKeyFile = (toString <secrets>) + "/wg-thierry.key";
allowedIPsAsRoutes = true;
# explicit route via eth0 to gum
peers = [
{
endpoint = "thierryhome.duckdns.org:51820";
allowedIPs = [ "172.27.66.0/24" ];
publicKey = "filYuG/xbb2YW8WT0xT26rzeZ/ZiM6NLnbxbsCR9rS0=";
persistentKeepalive = 25;
}
#{
# allowedIPs = [ "172.27.66.3/32" ];
# publicKey = "cDIf14LH4qleXNo889lS2ATIqDx9r//JNCkhHlHgc1Q=";
#}
];
};
}

View File

@ -41,7 +41,7 @@ let
};
serviceConfig = {
Type = "simple";
ExecStart = "${cfg.package}/bin/ps3netsrv++ ${shell.escape cfg.servedir}";
ExecStart = "${cfg.package}/bin/ps3netsrv ${shell.escape cfg.servedir}";
PrivateTmp = true;
User = "${cfg.user}";
};

View File

@ -22,7 +22,7 @@ let
${concatMapStrings (c: ''
f="$out/${c.name}.conf"
[ ! -e "$f" ] || chmod +w "$f"
cat ${builtins.toFile "" (c.value + "\n")} >>"$f"
cat ${builtins.toFile "outfile" (c.value + "\n")} >>"$f"
chmod -w "$f"
'') (mapAttrsToList nameValuePair cfg.extraConfig)}
chmod -w $out

View File

@ -1,93 +0,0 @@
# BeEF's Gemfile
#
# Copyright (c) 2006-2021 Wade Alcorn - wade@bindshell.net
# Browser Exploitation Framework (BeEF) - http://beefproject.com
# See the file 'doc/COPYING' for copying permission
#
#gem 'simplecov', require: false, group: :test
gem 'eventmachine'
gem 'thin'
gem 'sinatra', '>= 2.0.2'
gem 'rack', '>= 2.2.3'
gem 'rack-protection', '>= 2.0.0'
gem 'em-websocket' # WebSocket support
gem 'uglifier', '>= 2.7.2'
gem 'mime-types'
gem 'execjs'
gem 'ansi'
gem 'term-ansicolor', :require => 'term/ansicolor'
gem 'json'
gem 'rubyzip', '>= 1.2.2'
gem 'espeak-ruby', '>= 1.0.4' # Text-to-Voice
gem 'nokogiri', '>= 1.11.1'
gem 'rake', '>= 12.3.3'
gem 'otr-activerecord', '>= 1.4.2'
gem 'sqlite3'
gem 'rubocop', '~> 0.92.0', require: false
# Geolocation support
group :geoip do
gem 'maxmind-db'
end
gem 'parseconfig'
gem 'erubis'
# Metasploit Integration extension
group :ext_msf do
gem 'msfrpc-client'
gem 'xmlrpc'
end
# Notifications extension
group :ext_notifications do
# Pushover
gem 'rushover'
# Slack
gem 'slack-notifier'
# Twitter
gem 'twitter', '>= 5.0.0'
end
# DNS extension
group :ext_dns do
gem 'async-dns'
end
# QRcode extension
group :ext_qrcode do
gem 'qr4r'
end
# For running unit tests
group :test do
gem 'test-unit'
gem 'test-unit-full'
gem 'rspec'
gem 'rdoc'
# curb gem requires curl libraries
# sudo apt-get install libcurl4-openssl-dev
gem 'curb'
# selenium-webdriver 3.x is incompatible with Firefox version 48 and prior
# gem 'selenium' # Requires old version of selenium which is no longer available
gem 'geckodriver-helper'
gem 'selenium-webdriver'
# nokogirl is needed by capybara which may require one of the below commands
# sudo apt-get install libxslt-dev libxml2-dev
# sudo port install libxml2 libxslt
gem 'capybara'
# RESTful API tests/generic command module tests
gem 'rest-client', '>= 2.0.1'
gem 'irb'
gem 'pry-byebug'
gem "websocket-client-simple", "~> 0.3.0"
gem "browserstack-local", "~> 1.3"
end
source 'https://rubygems.org'

View File

@ -1,297 +0,0 @@
GEM
remote: https://rubygems.org/
specs:
activemodel (6.1.4)
activesupport (= 6.1.4)
activerecord (6.1.4)
activemodel (= 6.1.4)
activesupport (= 6.1.4)
activesupport (6.1.4)
concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 1.6, < 2)
minitest (>= 5.1)
tzinfo (~> 2.0)
zeitwerk (~> 2.3)
addressable (2.8.0)
public_suffix (>= 2.0.2, < 5.0)
ansi (1.5.0)
archive-zip (0.12.0)
io-like (~> 0.3.0)
ast (2.4.2)
async (1.30.1)
console (~> 1.10)
nio4r (~> 2.3)
timers (~> 4.1)
async-dns (1.2.6)
async-io (~> 1.15)
async-io (1.32.2)
async
browserstack-local (1.3.0)
buftok (0.2.0)
byebug (11.1.3)
capybara (3.35.3)
addressable
mini_mime (>= 0.1.3)
nokogiri (~> 1.8)
rack (>= 1.6.0)
rack-test (>= 0.6.3)
regexp_parser (>= 1.5, < 3.0)
xpath (~> 3.2)
childprocess (3.0.0)
coderay (1.1.3)
concurrent-ruby (1.1.9)
console (1.13.1)
fiber-local
curb (0.9.11)
daemons (1.4.0)
diff-lcs (1.4.4)
domain_name (0.5.20190701)
unf (>= 0.0.5, < 1.0.0)
em-websocket (0.5.2)
eventmachine (>= 0.12.9)
http_parser.rb (~> 0.6.0)
equalizer (0.0.11)
erubis (2.7.0)
espeak-ruby (1.0.4)
event_emitter (0.2.6)
eventmachine (1.2.7)
execjs (2.8.1)
ffi (1.15.3)
ffi-compiler (1.0.1)
ffi (>= 1.0.0)
rake
fiber-local (1.0.0)
geckodriver-helper (0.24.0)
archive-zip (~> 0.7)
hashie (4.1.0)
hashie-forbidden_attributes (0.1.1)
hashie (>= 3.0)
http (4.4.1)
addressable (~> 2.3)
http-cookie (~> 1.0)
http-form_data (~> 2.2)
http-parser (~> 1.2.0)
http-accept (1.7.0)
http-cookie (1.0.4)
domain_name (~> 0.5)
http-form_data (2.3.0)
http-parser (1.2.3)
ffi-compiler (>= 1.0, < 2.0)
http_parser.rb (0.6.0)
i18n (1.8.10)
concurrent-ruby (~> 1.0)
io-console (0.5.9)
io-like (0.3.1)
irb (1.3.6)
reline (>= 0.2.5)
json (2.5.1)
maxmind-db (1.1.1)
memoizable (0.4.2)
thread_safe (~> 0.3, >= 0.3.1)
method_source (1.0.0)
mime-types (3.3.1)
mime-types-data (~> 3.2015)
mime-types-data (3.2021.0704)
mini_mime (1.1.0)
mini_portile2 (2.6.1)
minitest (5.14.4)
mojo_magick (0.6.6)
msfrpc-client (1.1.2)
msgpack (~> 1)
msgpack (1.4.2)
multipart-post (2.1.1)
mustermann (1.1.1)
ruby2_keywords (~> 0.0.1)
naught (1.1.0)
netrc (0.11.0)
nio4r (2.5.8)
nokogiri (1.12.2)
mini_portile2 (~> 2.6.1)
racc (~> 1.4)
otr-activerecord (2.0.1)
activerecord (>= 4.0, < 6.3)
hashie-forbidden_attributes (~> 0.1)
parallel (1.20.1)
parseconfig (1.1.0)
parser (3.0.2.0)
ast (~> 2.4.1)
power_assert (2.0.0)
pry (0.13.1)
coderay (~> 1.1)
method_source (~> 1.0)
pry-byebug (3.9.0)
byebug (~> 11.0)
pry (~> 0.13.0)
public_suffix (4.0.6)
qr4r (0.6.1)
mojo_magick (~> 0.6.5)
rqrcode_core (~> 0.1)
racc (1.5.2)
rack (2.2.3)
rack-protection (2.1.0)
rack
rack-test (1.1.0)
rack (>= 1.0, < 3)
rainbow (3.0.0)
rake (13.0.6)
rdoc (6.3.2)
regexp_parser (2.1.1)
reline (0.2.6)
io-console (~> 0.5)
rest-client (2.1.0)
http-accept (>= 1.7.0, < 2.0)
http-cookie (>= 1.0.2, < 2.0)
mime-types (>= 1.16, < 4.0)
netrc (~> 0.8)
rexml (3.2.5)
rqrcode_core (0.2.0)
rr (3.0.5)
rspec (3.10.0)
rspec-core (~> 3.10.0)
rspec-expectations (~> 3.10.0)
rspec-mocks (~> 3.10.0)
rspec-core (3.10.1)
rspec-support (~> 3.10.0)
rspec-expectations (3.10.1)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.10.0)
rspec-mocks (3.10.2)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.10.0)
rspec-support (3.10.2)
rubocop (0.92.0)
parallel (~> 1.10)
parser (>= 2.7.1.5)
rainbow (>= 2.2.2, < 4.0)
regexp_parser (>= 1.7)
rexml
rubocop-ast (>= 0.5.0)
ruby-progressbar (~> 1.7)
unicode-display_width (>= 1.4.0, < 2.0)
rubocop-ast (1.8.0)
parser (>= 3.0.1.1)
ruby-progressbar (1.11.0)
ruby2_keywords (0.0.5)
rubyzip (2.3.2)
rushover (0.3.0)
json
rest-client
selenium-webdriver (3.142.7)
childprocess (>= 0.5, < 4.0)
rubyzip (>= 1.2.2)
simple_oauth (0.3.1)
sinatra (2.1.0)
mustermann (~> 1.0)
rack (~> 2.2)
rack-protection (= 2.1.0)
tilt (~> 2.0)
slack-notifier (2.4.0)
sqlite3 (1.4.2)
sync (0.5.0)
term-ansicolor (1.7.1)
tins (~> 1.0)
test-unit (3.4.4)
power_assert
test-unit-context (0.5.1)
test-unit (>= 2.4.0)
test-unit-full (0.0.5)
test-unit
test-unit-context
test-unit-notify
test-unit-rr
test-unit-runner-tap
test-unit-notify (1.0.4)
test-unit (>= 2.4.9)
test-unit-rr (1.0.5)
rr (>= 1.1.1)
test-unit (>= 2.5.2)
test-unit-runner-tap (1.1.2)
test-unit
thin (1.8.1)
daemons (~> 1.0, >= 1.0.9)
eventmachine (~> 1.0, >= 1.0.4)
rack (>= 1, < 3)
thread_safe (0.3.6)
tilt (2.0.10)
timers (4.3.3)
tins (1.29.1)
sync
twitter (7.0.0)
addressable (~> 2.3)
buftok (~> 0.2.0)
equalizer (~> 0.0.11)
http (~> 4.0)
http-form_data (~> 2.0)
http_parser.rb (~> 0.6.0)
memoizable (~> 0.4.0)
multipart-post (~> 2.0)
naught (~> 1.0)
simple_oauth (~> 0.3.0)
tzinfo (2.0.4)
concurrent-ruby (~> 1.0)
uglifier (4.2.0)
execjs (>= 0.3.0, < 3)
unf (0.1.4)
unf_ext
unf_ext (0.0.7.7)
unicode-display_width (1.7.0)
webrick (1.7.0)
websocket (1.2.9)
websocket-client-simple (0.3.0)
event_emitter
websocket
xmlrpc (0.3.2)
webrick
xpath (3.2.0)
nokogiri (~> 1.8)
zeitwerk (2.4.2)
PLATFORMS
ruby
DEPENDENCIES
ansi
async-dns
browserstack-local (~> 1.3)
capybara
curb
em-websocket
erubis
espeak-ruby (>= 1.0.4)
eventmachine
execjs
geckodriver-helper
irb
json
maxmind-db
mime-types
msfrpc-client
nokogiri (>= 1.11.1)
otr-activerecord (>= 1.4.2)
parseconfig
pry-byebug
qr4r
rack (>= 2.2.3)
rack-protection (>= 2.0.0)
rake (>= 12.3.3)
rdoc
rest-client (>= 2.0.1)
rspec
rubocop (~> 0.92.0)
rubyzip (>= 1.2.2)
rushover
selenium-webdriver
sinatra (>= 2.0.2)
slack-notifier
sqlite3
term-ansicolor
test-unit
test-unit-full
thin
twitter (>= 5.0.0)
uglifier (>= 2.7.2)
websocket-client-simple (~> 0.3.0)
xmlrpc
BUNDLED WITH
2.1.4

View File

@ -1,39 +0,0 @@
--- /beef 2018-08-16 19:03:55.199437566 +0200
+++ /beef 2018-08-16 19:27:34.735985233 +0200
@@ -110,9 +110,20 @@
#
# @note Database setup - use DataMapper::Logger.new($stdout, :debug) for development debugging
#
+
+#
+# @note Create ~/.beef/
+#
+begin
+ FileUtils.mkdir_p($home_dir) unless File.directory?($home_dir)
+rescue => e
+ print_error "Could not create '#{$home_dir}': #{e.message}"
+end
+
case config.get("beef.database.driver")
when "sqlite"
- DataMapper.setup(:default, "sqlite3://#{$root_dir}/#{config.get("beef.database.db_file")}")
+ print_info "Using Database #{$home_dir}/#{config.get("beef.database.db_file")}"
+ DataMapper.setup(:default, "sqlite3://#{$home_dir}/#{config.get("beef.database.db_file")}")
when "mysql", "postgres"
DataMapper.setup(:default,
:adapter => config.get("beef.database.driver"),
@@ -162,14 +173,6 @@
BeEF::Core::Console::Banners.print_network_interfaces_count
BeEF::Core::Console::Banners.print_network_interfaces_routes
-#
-# @note Create ~/.beef/
-#
-begin
- FileUtils.mkdir_p($home_dir) unless File.directory?($home_dir)
-rescue => e
- print_error "Could not create '#{$home_dir}': #{e.message}"
-end
#
# @note Check whether we load the Console Shell or not

View File

@ -1,45 +0,0 @@
{ stdenv, lib, bundlerEnv, ruby, fetchFromGitHub, nodejs }:
# nix-shell --command "bundler install && bundix" in the clone, copy gemset.nix, Gemfile and Gemfile.lock
let
gems = bundlerEnv {
name = "beef-env";
inherit ruby;
gemdir = ./.;
};
in stdenv.mkDerivation {
name = "beef-2018-09-21";
src = fetchFromGitHub {
owner = "beefproject";
repo = "beef";
rev = "d237c95";
sha256 = "1mykbjwjcbd2a18wycaf35hi3b9rmvqz1jnk2v55sd4c39f0jpf2";
};
prePatch = ''
ls -alhtr
'';
patches = [ ./db-in-homedir.patch ];
buildInputs = [gems ruby];
installPhase = ''
mkdir -p $out/{bin,share/beef}
cp -r * $out/share/beef
# set the default db path, unfortunately setting to /tmp does not seem to work
# sed -i 's#db_file: .*#db_file: "/tmp/beef.db"#' $out/share/beef/config.yaml
bin=$out/bin/beef
cat > $bin <<EOF
#!/bin/sh -e
PATH=$PATH:${nodejs}/bin/
exec ${gems}/bin/bundle exec ${ruby}/bin/ruby $out/share/beef/beef "\$@"
EOF
chmod +x $bin
'';
meta = with lib; {
homepage = https://beefproject.com/;
description = "The Browser Exploitation Framework";
platforms = platforms.linux;
maintainers = with maintainers; [ makefu ];
};
}

File diff suppressed because it is too large Load Diff

View File

@ -1,16 +0,0 @@
# Env to update Gemfile.lock / gemset.nix
with import <nixpkgs> {};
stdenv.mkDerivation {
name = "env";
buildInputs = [
ruby.devEnv
git
sqlite
libpcap
postgresql
libxml2
libxslt
pkgconfig
bundix
];
}

View File

@ -1,28 +0,0 @@
#!/usr/bin/env nix-shell
#!nix-shell -i bash -p curl bundix git libiconv libpcap libxml2 libxslt pkg-config postgresql ruby.devEnv sqlite xmlstarlet nix-update wget
set -eu -o pipefail
cd "$(dirname "$(readlink -f "$0")")"
# TODO find the correct tag
echo Fetching latest Gemfile
wget https://raw.githubusercontent.com/beefproject/beef/master/Gemfile -O Gemfile
rm -f Gemfile.lock
echo Running bundler install
bundler install
echo Running bundix
bundix
exit 0
latest=$(curl https://github.com/rapid7/metasploit-framework/releases.atom | xmlstarlet sel -N atom="http://www.w3.org/2005/Atom" -t -m /atom:feed/atom:entry -v atom:title -n | head -n1)
echo "Updating metasploit to $latest"
sed -i "s#refs/tags/.*#refs/tags/$latest\"#" Gemfile
bundler install
bundix
sed -i '/[ ]*dependencies =/d' gemset.nix
cd "../../../../"
nix-update beef --version "$latest"

View File

@ -16,7 +16,12 @@ buildPythonApplication rec {
nativeBuildInputs = [
mypy
];
checkPhase = ''
mypy --strict mediawiki_matrix_bot
'';
doCheck = false;
#checkInputs = [
# types-aiofiles
#];
#checkPhase = ''
# mypy --strict mediawiki_matrix_bot
#'';
}

View File

@ -1,3 +1,6 @@
let
unstable = (import <nixpkgs-unstable> {}).pkgs;
in
self: super:
with super.lib; with builtins; let
# This callPackage will try to detect obsolete overrides.
@ -43,6 +46,8 @@ in {
alsa-hdsploader = callPackage ./custom/alsa-tools { alsaToolTarget="hdsploader";};
qcma = super.pkgs.libsForQt5.callPackage ./custom/qcma { };
inherit (callPackage ./devpi {}) devpi-web ;
jellyfin = unstable.jellyfin;
jellyfin-web = unstable.jellyfin-web;
nodemcu-uploader = super.pkgs.callPackage ./nodemcu-uploader {};
liveproxy = super.pkgs.python3Packages.callPackage ./custom/liveproxy {};
mediawiki-matrix-bot = super.pkgs.python3Packages.callPackage ./custom/mediawiki-matrix-bot {};

View File

@ -2,8 +2,9 @@
, makeWrapper
, autoPatchelfHook
, xorg
, gnome3
, libpng12
, gtk3
, gnome
}:
stdenv.mkDerivation rec {
name = "ns-atmosphere-programmer-${version}";
@ -15,13 +16,13 @@ stdenv.mkDerivation rec {
sha256 = "1cnyydsmrcpfwpdiry7qybh179499wpbvlzq5rk442hq9ak416ri";
};
buildInputs = with xorg; [ libX11 libXxf86vm libSM gnome3.gtk libpng12 ];
buildInputs = with xorg; [ libX11 libXxf86vm libSM gtk3 libpng12 ];
nativeBuildInputs = [ autoPatchelfHook makeWrapper ];
installPhase = ''
install -D -m755 NS-Atmosphere $out/bin/NS-Atmosphere
wrapProgram $out/bin/NS-Atmosphere --prefix XDG_DATA_DIRS : "$GSETTINGS_SCHEMAS_PATH" \
--suffix XDG_DATA_DIRS : '${pkgs.gnome.adwaita-icon-theme}/share'
--suffix XDG_DATA_DIRS : '${gnome.adwaita-icon-theme}/share'
'';
dontStrip = true;

View File

@ -0,0 +1,33 @@
{ lib
, stdenv
, fetchFromGitHub
, meson
, ninja
, mbedtls
}:
stdenv.mkDerivation rec {
pname = "ps3netsrv";
version = "20220813";
src = fetchFromGitHub {
owner = "aldostools";
repo = "webMAN-MOD";
rev = "5301277a0eb2275c73d7c82af9cb9e9ec34369e4";
hash = "sha256-hgQSqRKFomHgOr1ejfKoR/Sywa3AjbinmAAgscVYs44=";
};
postUnpack = "pwd; ls -alhtr; ls -alhtr source";
#dontUseCmakeConfigure = true;
nativeBuildInputs = [ mbedtls meson ninja ];
buildInputs = [ mbedtls ];
sourceRoot = "./source/_Projects_/ps3netsrv";
meta = with lib; {
homepage = "https://github.com/aldostools/webMAN-MOD/wiki/~-PS3-NET-Server";
description = "a server application used to stream content from a remote server to the PS3";
maintainers = [ maintainers.makefu ];
platforms = platforms.unix;
license = licenses.mit;
};
}

View File

@ -11,7 +11,7 @@ buildGoModule rec {
};
proxyVendor = true;
vendorSha256 = "sha256-901xkzF/p/kUy7tZELwNhgepRDScUeWQM3isy7APuik=";
vendorSha256 = "sha256-AOtWR7Ew+0I7+TrMZOCxOKGCv+mlvcqy9s+gX2JKwnE=";
# tests try to access the internet to scrape websites
doCheck = false;

View File

@ -75,20 +75,20 @@
(lib.mkIf ( host-src.hw ) {
nixos-hardware.git = {
url = https://github.com/nixos/nixos-hardware.git;
ref = "a0d8383";
ref = "12620020f76b1b5d2b0e6fbbda831ed4f5fe56e1";
};
})
(lib.mkIf ( host-src.nix-ld ) {
nix-ld.git = {
url = https://github.com/Mic92/nix-ld.git;
ref = "eb9cb8d";
ref = "c25cc4b";
};
})
(lib.mkIf ( host-src.home-manager ) {
home-manager.git = {
url = https://github.com/rycee/home-manager;
ref = "426ab2cf111fca61308bd86fe652e14aa12cc2d2";
ref = "1de492f";
};
})
];
@ -97,7 +97,6 @@ in {
# usage: $(nix-build --no-out-link --argstr name HOSTNAME -A deploy)
deploy = pkgs.krops.writeDeploy "${name}-deploy" {
source = source { test = false; };
fast = true;
target = "root@${target}/var/src";
buildTarget = if target == buildTarget then "root@${target}/var/src" else "root@${buildTarget}/tmp/";
};