diff options
Diffstat (limited to 'makefu')
64 files changed, 1311 insertions, 565 deletions
diff --git a/makefu/1systems/gum/config.nix b/makefu/1systems/gum/config.nix index 3b084d35a..8603d7696 100644 --- a/makefu/1systems/gum/config.nix +++ b/makefu/1systems/gum/config.nix @@ -21,11 +21,12 @@ in { ]; }; } + <stockholm/makefu/2configs/nur.nix> <stockholm/makefu/2configs/support-nixos.nix> <stockholm/makefu/2configs/home-manager> <stockholm/makefu/2configs/home-manager/cli.nix> # <stockholm/makefu/2configs/stats/client.nix> - <stockholm/makefu/2configs/stats/netdata-server.nix> + # <stockholm/makefu/2configs/stats/netdata-server.nix> <stockholm/makefu/2configs/headless.nix> <stockholm/makefu/2configs/smart-monitor.nix> @@ -89,8 +90,8 @@ in { # services # <stockholm/makefu/2configs/sabnzbd.nix> - <stockholm/makefu/2configs/mail/mail.euer.nix> - { krebs.exim.enable = mkForce false; } + # <stockholm/makefu/2configs/mail/mail.euer.nix> + { krebs.exim.enable = mkDefault true; } # sharing <stockholm/makefu/2configs/share/gum.nix> @@ -119,7 +120,7 @@ in { <stockholm/makefu/2configs/urlwatch> # Removed until move: avoid letsencrypt ban ### Web - #<stockholm/makefu/2configs/nginx/share-download.nix> + <stockholm/makefu/2configs/nginx/dl.euer.krebsco.de.nix> #<stockholm/makefu/2configs/nginx/euer.test.nix> <stockholm/makefu/2configs/nginx/euer.mon.nix> <stockholm/makefu/2configs/nginx/euer.wiki.nix> @@ -131,10 +132,14 @@ in { # <stockholm/makefu/2configs/nginx/gold.krebsco.de.nix> # <stockholm/makefu/2configs/nginx/iso.euer.nix> - <stockholm/makefu/2configs/deployment/photostore.krebsco.de.nix> + # <stockholm/makefu/2configs/deployment/photostore.krebsco.de.nix> <stockholm/makefu/2configs/deployment/graphs.nix> <stockholm/makefu/2configs/deployment/owncloud.nix> + <stockholm/makefu/2configs/deployment/board.euer.krebsco.de.nix> + <stockholm/makefu/2configs/deployment/rss.euer.krebsco.de.nix> <stockholm/makefu/2configs/deployment/boot-euer.nix> + <stockholm/makefu/2configs/deployment/gecloudpad> + <stockholm/makefu/2configs/deployment/docker/archiveteam-warrior.nix> <stockholm/makefu/2configs/shiori.nix> <stockholm/makefu/2configs/bgt/download.binaergewitter.de.nix> @@ -171,7 +176,8 @@ in { services.nginx.virtualHosts."cgit.euer.krebsco.de" = { forceSSL = true; enableACME = true; - locations."/".proxyPass = "http://cgit.gum.r"; + locations."/".proxyPass = "http://localhost/"; + locations."/".extraConfig = ''proxy_set_header Host cgit;''; }; krebs.build.host = config.krebs.hosts.gum; diff --git a/makefu/1systems/omo/config.nix b/makefu/1systems/omo/config.nix index 9b9b91a6f..37fb9128d 100644 --- a/makefu/1systems/omo/config.nix +++ b/makefu/1systems/omo/config.nix @@ -57,7 +57,7 @@ in { <stockholm/makefu/2configs/stats/telegraf> # <stockholm/makefu/2configs/stats/telegraf/europastats.nix> <stockholm/makefu/2configs/stats/telegraf/hamstats.nix> - <stockholm/makefu/2configs/stats/arafetch.nix> + # <stockholm/makefu/2configs/stats/arafetch.nix> # services { @@ -71,14 +71,9 @@ in { <stockholm/makefu/2configs/virtualisation/docker.nix> <stockholm/makefu/2configs/bluetooth-mpd.nix> - { - # Risikoübernahme - nixpkgs.config.permittedInsecurePackages = [ - "homeassistant-0.77.2" - ]; - } - <stockholm/makefu/2configs/homeautomation> - <stockholm/makefu/2configs/homeautomation/google-muell.nix> + <stockholm/makefu/2configs/ham> + <stockholm/makefu/2configs/ham/google-muell.nix> + <stockholm/makefu/2configs/ham/zigbee2mqtt> { makefu.ps3netsrv = { enable = true; @@ -90,7 +85,6 @@ in { makefu.mpd.musicDirectory = "/media/cryptX/music"; } - # security <stockholm/makefu/2configs/sshd-totp.nix> # <stockholm/makefu/2configs/logging/central-logging-client.nix> @@ -120,7 +114,7 @@ in { gid = (import <stockholm/lib>).genid "share"; members = [ "makefu" "misa" ]; }; - networking.firewall.trustedInterfaces = [ primaryInterface ]; + networking.firewall.trustedInterfaces = [ primaryInterface "docker0" ]; @@ -141,18 +135,18 @@ in { sed-plugin random-emoji ]; }; - krebs.Reaktor.reaktor-bgt = { - nickname = "Reaktor|bgt"; - workdir = "/var/lib/Reaktor/bgt"; - channels = [ "#binaergewitter" ]; - plugins = with pkgs.ReaktorPlugins; - [ titlebot - # stockholm-issue - nixos-version - shack-correct - sed-plugin - random-emoji ]; - }; + #krebs.Reaktor.reaktor-bgt = { + # nickname = "Reaktor|bgt"; + # workdir = "/var/lib/Reaktor/bgt"; + # channels = [ "#binaergewitter" ]; + # plugins = with pkgs.ReaktorPlugins; + # [ titlebot + # # stockholm-issue + # nixos-version + # shack-correct + # sed-plugin + # random-emoji ]; + #}; krebs.build.host = config.krebs.hosts.omo; } diff --git a/makefu/1systems/omo/hw/omo.nix b/makefu/1systems/omo/hw/omo.nix index 31db335bb..87af2a314 100644 --- a/makefu/1systems/omo/hw/omo.nix +++ b/makefu/1systems/omo/hw/omo.nix @@ -26,9 +26,10 @@ let # |_______| # cryptDisk0 = byid "ata-ST2000DM001-1CH164_Z240XTT6"; cryptDisk0 = byid "ata-ST8000DM004-2CX188_ZCT01PLV"; - cryptDisk1 = byid "ata-TP02000GB_TPW151006050068"; - cryptDisk2 = byid "ata-ST4000DM000-1F2168_Z303HVSG"; + cryptDisk1 = byid "ata-WDC_WD80EZAZ-11TDBA0_7SJPVLYW"; cryptDisk3 = byid "ata-ST8000DM004-2CX188_ZCT01SG4"; + cryptDisk2 = byid "ata-WDC_WD80EZAZ-11TDBA0_7SJPWT5W"; + # cryptDisk3 = byid "ata-WDC_WD20EARS-00MVWB0_WD-WMAZA1786907"; # all physical disks @@ -48,8 +49,8 @@ in { makefu.snapraid = { enable = true; - disks = map toMapper [ 0 2 3 ]; - parity = toMapper 1; + disks = map toMapper [ 0 1 3 ]; + parity = toMapper 2; # find -name PARITY_PARTITION }; fileSystems = let cryptMount = name: @@ -102,6 +103,8 @@ in { "firewire_ohci" "usb_storage" "usbhid" + "raid456" + "megaraid_sas" ]; kernelModules = [ "kvm-intel" ]; diff --git a/makefu/1systems/omo/source.nix b/makefu/1systems/omo/source.nix index 0d42cc9e2..05c17377f 100644 --- a/makefu/1systems/omo/source.nix +++ b/makefu/1systems/omo/source.nix @@ -1,4 +1,5 @@ { name="omo"; torrent = true; + unstable = true; } diff --git a/makefu/1systems/x/config.nix b/makefu/1systems/x/config.nix index ea18c68ac..4c479875e 100644 --- a/makefu/1systems/x/config.nix +++ b/makefu/1systems/x/config.nix @@ -58,7 +58,7 @@ # Krebs <stockholm/makefu/2configs/tinc/retiolum.nix> - <stockholm/makefu/2configs/share/gum-client.nix> + # <stockholm/makefu/2configs/share/gum-client.nix> # <stockholm/makefu/2configs/share/temp-share-samba.nix> @@ -103,6 +103,7 @@ # <stockholm/makefu/2configs/hw/malduino_elite.nix> <stockholm/makefu/2configs/hw/switch.nix> # <stockholm/makefu/2configs/hw/rad1o.nix> + <stockholm/makefu/2configs/hw/cc2531.nix> <stockholm/makefu/2configs/hw/smartcard.nix> <stockholm/makefu/2configs/hw/upower.nix> @@ -142,7 +143,6 @@ ]; }; } - ]; makefu.server.primary-itf = "wlp3s0"; diff --git a/makefu/2configs/bureautomation/automation/daily-news.nix b/makefu/2configs/bureautomation/automation/daily-news.nix new file mode 100644 index 000000000..2bafe4795 --- /dev/null +++ b/makefu/2configs/bureautomation/automation/daily-news.nix @@ -0,0 +1,20 @@ +[ + { + alias = "Daily news for Felix"; + trigger = { + platform = "time"; + at = "07:35:00"; + }; + action = + [ + { + service = "notify.telegrambot"; + data_template = { + title = "Daily News"; + # TODO + message = ""; + }; + } + ]; + } +] diff --git a/makefu/2configs/bureautomation/automation/quotes.nix b/makefu/2configs/bureautomation/automation/quotes.nix new file mode 100644 index 000000000..c4625ae30 --- /dev/null +++ b/makefu/2configs/bureautomation/automation/quotes.nix @@ -0,0 +1,4 @@ +# heiss +Lieber Freund, was für ein Sommer! Ich denke Sie mir im Zimmer sitzend, mehr Omelette als Mensch. +Sommer ist die Zeit, in der es zu heiß ist, um das zu tun, wozu es im Winter zu kalt war. + diff --git a/makefu/2configs/bureautomation/automation/schlechteluft.nix b/makefu/2configs/bureautomation/automation/schlechteluft.nix index 8787ee280..370334743 100644 --- a/makefu/2configs/bureautomation/automation/schlechteluft.nix +++ b/makefu/2configs/bureautomation/automation/schlechteluft.nix @@ -66,9 +66,6 @@ in [ language = "de"; }; } - { service = "notify.matrix_notify"; - data_template.message = "Schlechte Luft Alarm seit ${toString long_threshold} Minuten ({{states.sensor.air_quality.state_with_unit}})!"; - } ]; } ] diff --git a/makefu/2configs/bureautomation/camera/stuttgart.nix b/makefu/2configs/bureautomation/camera/stuttgart.nix new file mode 100644 index 000000000..78cbeb3e2 --- /dev/null +++ b/makefu/2configs/bureautomation/camera/stuttgart.nix @@ -0,0 +1,26 @@ + +let + cam = name: still_image_url: + { + inherit name still_image_url; + platform = "generic"; + }; +in [ + ( cam "Max-Eyth-See" https://www.wav-stuttgart.de/webcam/_/webcam1.jpg ) + ( cam "Wilhelma" http://webcam.wilhelma.de/webcam02/webcam02.jpg ) + ( cam "Marktplatz" https://webcam.stuttgart.de/wcam007/current.jpg ) + ( cam "Schoch Areal" https://webcam.stuttgart.de/wcam004/current.jpg ) + ( cam "Leuze" https://webcam.stuttgart.de/wcam005/current.jpg ) + ( cam "Straße Wilhelma" https://webcam.stuttgart.de/wcam006/current.jpg ) + ( cam "Fernsehturm 1" http://webcam.fernsehturmstuttgart.com/current.jpg ) + ( cam "Fernsehturm 2" http://webcam.fernsehturmstuttgart.com/current2.jpg ) + ( cam "Feuerbach Lemberg" http://www.regio7.de/handy/current.jpg ) + ( cam "Flughafen Stuttgart 1" http://webcam.flughafen-stuttgart.de/Flughafen_Stuttgart_Webcam2.jpg ) + ( cam "Flughafen Stuttgart 2" http://webcam.flughafen-stuttgart.de/Flughafen_Stuttgart_Webcam5.jpg ) + ( cam "Flughafen Stuttgart 3" http://webcam.flughafen-stuttgart.de/Flughafen_Stuttgart_Webcam7.jpg ) + ( cam "S21 1" http://webcam-bahnprojekt-stuttgart-ulm.de/S21-Turm-03/s21-turm03.jpg ) + ( cam "S21 2" http://webcam-bahnprojekt-stuttgart-ulm.de/S21-Turm-02/s21-turm-02.jpg ) + ( cam "S21 3" http://webcam-bahnprojekt-stuttgart-ulm.de/S21-Turm-01/s21-turm-01.jpg ) + ( cam "S21 4" http://webcam-bahnprojekt-stuttgart-ulm.de/S21-Jaegerstrasse-Nordkopf/s21-jaegerstrassse-nordkopf.jpg ) + ( cam "S21 5" http://webcam-bahnprojekt-stuttgart-ulm.de/S21-Bahndirektion-Nord/S21-Bundesbahndirektion-Nord.jpg ) +] diff --git a/makefu/2configs/bureautomation/default.nix b/makefu/2configs/bureautomation/default.nix index c55bc1d14..3c1659558 100644 --- a/makefu/2configs/bureautomation/default.nix +++ b/makefu/2configs/bureautomation/default.nix @@ -11,6 +11,7 @@ in { imports = [ ./ota.nix ./comic-updater.nix + ./puppy-proxy.nix ]; networking.firewall.allowedTCPPorts = [ 8123 ]; state = [ "/var/lib/hass/known_devices.yaml" ]; @@ -33,13 +34,14 @@ in { ''; })).override { extraPackages = ps: with ps; [ - pkgs.pico2wave + pkgs.picotts python-forecastio jsonrpc-async jsonrpc-websocket mpd2 (callPackage ./deps/openwrt-luci-rpc.nix { }) ]; }; autoExtraComponents = true; config = { + discovery = {}; homeassistant = { name = "Bureautomation"; time_zone = "Europe/Berlin"; @@ -72,6 +74,8 @@ in { }; matrix = matrix.matrix; mqtt = { + discovery = true; + discovery_prefix = "homeassistant"; broker = "localhost"; port = 1883; client_id = "home-assistant"; @@ -124,7 +128,7 @@ in { frosch.script ten_hours.script mittagessen.script - standup.script + # standup.script ]; binary_sensor = (import ./binary_sensor/buttons.nix) @@ -145,7 +149,8 @@ in { camera = (import ./camera/verkehrskamera.nix) - ++ (import ./camera/comic.nix); + ++ (import ./camera/comic.nix) + ++ (import ./camera/stuttgart.nix); person = (import ./person/team.nix ); @@ -198,9 +203,10 @@ in { "switch.blitzdings" "switch.fernseher" "switch.feuer" + "switch.frosch_blasen" "light.status_felix" - "light.status_daniel" - "light.buslicht" + # "light.status_daniel" + # "light.buslicht" ]; team = [ "person.thorsten" @@ -212,6 +218,7 @@ in { "person.thierry" "person.frank" "person.emeka" + "person.tancrede" #"device_tracker.felix_phone" #"device_tracker.ecki_tablet" #"device_tracker.daniel_phone" @@ -228,6 +235,7 @@ in { "camera.Baumarkt" "camera.Autobahn_Heilbronn" "camera.Autobahn_Singen" + "camera.puppies" "camera.poorly_drawn_lines" ]; nachtlicht = [ @@ -264,7 +272,6 @@ in { outside = [ # "sensor.ditzingen_pm10" # "sensor.ditzingen_pm25" - "sensor.dark_sky_icon" "sensor.dark_sky_temperature" "sensor.dark_sky_humidity" "sensor.dark_sky_uv_index" @@ -282,7 +289,7 @@ in { ++ (import ./automation/hass-restart.nix) ++ ten_hours.automation ++ matrix.automation - ++ standup.automation + # ++ standup.automation ++ frosch.automation ++ mittagessen.automation; device_tracker = (import ./device_tracker/openwrt.nix ); diff --git a/makefu/2configs/bureautomation/deps/aresponses.nix b/makefu/2configs/bureautomation/deps/aresponses.nix new file mode 100644 index 000000000..9e64d2f65 --- /dev/null +++ b/makefu/2configs/bureautomation/deps/aresponses.nix @@ -0,0 +1,38 @@ +{ lib +, buildPythonPackage +, fetchPypi +# propagatedBuildInputs +, aiohttp +# buildInputs +, pytest +, pytest-asyncio +}: + +buildPythonPackage rec { + pname = "aresponses"; + version = "1.1.1"; + + src = fetchPypi { + inherit pname version; + sha256 = "d1d6ef52b9a97142d106688cf9b112602ef3dc66f6368de8f91f47241d8cfc9c"; + }; + + propagatedBuildInputs = [ + aiohttp + ]; + + buildInputs = [ + pytest + pytest-asyncio + ]; + + # tests only distributed via git repository, not pypi + doCheck = false; + + meta = with lib; { + description = "Asyncio testing server"; + homepage = "https://github.com/circleup/aresponses"; + license = licenses.mit; + maintainers = [ maintainers.makefu ]; + }; +} diff --git a/makefu/2configs/bureautomation/multi/10h_timers.nix b/makefu/2configs/bureautomation/multi/10h_timers.nix index 73709e738..a30fb28b0 100644 --- a/makefu/2configs/bureautomation/multi/10h_timers.nix +++ b/makefu/2configs/bureautomation/multi/10h_timers.nix @@ -2,6 +2,8 @@ let persons = [ "frank" "daniel" "thorsten" "carsten" "ecki" "felix" "thierry" # tjeri + "emeka" + "tancrede" ]; random_zu_lange = name: ''{{ [ "Du musst jetzt endlich nach Hause gehen ${name}!", @@ -20,6 +22,7 @@ let random_announce = name: ''{{ [ "${name} is in da House", "Ahoi ${name}", + "Hallöchen Popöchen ${name}", "Moinsen ${name}", "Moin Moin ${name}", "Palim, Palim ${name}", @@ -55,7 +58,7 @@ let "Und es startet für ${name} wieder ein Tag im Paradies", "Lieber ${name}, Markus Keck hat dich bereits drei mal Versucht anzurufen!", "Trotz schwerer Männergrippe ist ${name} heute im Büro erschienen.", - "${name} kenne keine Parteien mehr, ${name} kenne nur noch Arbeitsplätze", + "${name} kennt keine Parteien mehr, ${name} kennt nur noch Arbeitsplätze", "${name}, Frage nicht, was dein Arbeitsplatz für dich tun kann. Frage, was du für deinen Arbeitsplatz tun kannst", "${name} läuft bis in den Jemen - für sein Unternehmen. ${name} schwimmt bis nach Birma - für seine Firma", "Der Cyberian ${name} ist gekommen um die Bahnwelt vor Cyber-Angriffen zu schützen", @@ -121,7 +124,6 @@ let { alias = "start ${name} 10h"; trigger = { platform = "state"; - # TODO: ecki entity_id = [ "person.${name}"]; from = "not_home"; to = "home"; @@ -129,13 +131,11 @@ let condition = { condition = "and"; conditions = [ - { - condition = "state"; + { condition = "state"; entity_id = "timer.${name}_10h"; state = "idle"; } - { - condition = "time"; + { condition = "time"; after = "06:00:00"; before = "12:00:00"; } @@ -146,8 +146,8 @@ let entity_id = [ "timer.${name}_10h" ] ; } { service = "homeassistant.turn_on"; - entity_id = [ - # "switch.fernseher" + entity_id = + [ "switch.fernseher" "script.blitz_10s" "script.announce_${name}" ]; @@ -155,30 +155,45 @@ let ]; } + { alias = "pommes announce ${name}"; + trigger = + { platform = "event"; + event_type = "timer.started"; + event_data.entity_id = "timer.${name}_10h"; + }; + + condition = + { condition = "state"; + entity_id = "binary_sensor.pommes"; + state = "on"; + }; + + action = + { service = "homeassistant.turn_on"; + entity_id = "script.blasen_10s" ; + }; + } + { alias = "Zu lange ${name}!"; trigger = - { - platform = "event"; + { platform = "event"; event_type = "timer.finished"; event_data.entity_id = "timer.${name}_10h"; }; condition = - { - condition = "state"; + { condition = "state"; entity_id = "person.${name}"; state = "home"; }; action = - [ - { service = "homeassistant.turn_on"; - entity_id = [ - "script.blitz_10s" - "script.zu_lange_${name}" - ]; - } - ]; + { service = "homeassistant.turn_on"; + entity_id = [ + "script.blitz_10s" + "script.zu_lange_${name}" + ]; + }; } ]; in @@ -187,7 +202,7 @@ in (map tmr_10h persons); automation = (lib.flatten (map automation_10h persons)); script = lib.fold lib.recursiveUpdate {} ( - (map (p: announce_user p) persons) ++ - (map (p: zu_lange_user p) persons) + (map announce_user persons) ++ + (map zu_lange_user persons) ); } diff --git a/makefu/2configs/bureautomation/multi/daily-standup.nix b/makefu/2configs/bureautomation/multi/daily-standup.nix index f5bd85b9d..38fb22c1a 100644 --- a/makefu/2configs/bureautomation/multi/daily-standup.nix +++ b/makefu/2configs/bureautomation/multi/daily-standup.nix @@ -3,9 +3,9 @@ let random_daily_text = ''{{ [ "Es ist so weit, es ist Standup Zeit!", "Zehn Uhr Fünfunddreissig ist genau die richtige Zeit für ein Standup!", - "Hat jeder seine Hausaufgaben gemacht? Bitte einmal aufstehen und den Zettel nach rechts geben", + "Hat jeder seine zum Standup seine Hausaufgaben gemacht. Bitte einmal aufstehen und den Zettel nach rechts geben", "Aufstehen zum Appell, es wird die Anwesenheit kontrolliert!", - "Hallo Kinder, wisst ihr welche Zeit es ist??? ... Genau! ... Standup Zeit!", + "Hallo Kinder, wisst ihr welche Zeit es ist ... Genau ... Standup Zeit!", "Morgens, halb elf in Deutschland - das Standupchen" ] | random }}''; in { diff --git a/makefu/2configs/bureautomation/multi/frosch.nix b/makefu/2configs/bureautomation/multi/frosch.nix index c0e267b69..816539d46 100644 --- a/makefu/2configs/bureautomation/multi/frosch.nix +++ b/makefu/2configs/bureautomation/multi/frosch.nix @@ -1,5 +1,6 @@ { lib }: # needs: binary_sensor.pommes +# notify.matrix_notify let random_pommes = '' {{ [ "Nur ein Pommes Tag ist ein guter Tag", @@ -51,7 +52,7 @@ in { { alias = "Pommeszeit"; trigger = { platform = "time"; - at = "12:15:00"; + at = "11:00:00"; }; condition = { condition = "state"; @@ -89,6 +90,9 @@ in { language = "de"; }; } + { service = "notify.matrix_notify"; + data_template.message = random_pommes; + } ]; }; }; diff --git a/makefu/2configs/bureautomation/multi/mittagessen.nix b/makefu/2configs/bureautomation/multi/mittagessen.nix index 3ec70998d..2a9993e92 100644 --- a/makefu/2configs/bureautomation/multi/mittagessen.nix +++ b/makefu/2configs/bureautomation/multi/mittagessen.nix @@ -22,9 +22,9 @@ let "Heute bei Aramark: Rezepte aus Ländern, von denen Ihr noch nie gehört habt, Deutsch zubereitet", "Heute bei Aramark im Angebot: Scheiss mit Reis oder Reste von Freitag", "MHHHH es ist wieder mal so weit, lecker Bayerisch Kraut mit asiatischen Nudeln", - "Es ist 12 Uhr 30 und Heute gibt es Pommes - vielleicht", - "Heute gibt es Pommes - leider nicht einzeln zu verkaufen, da die Schälchen alle sind", - "Heute gibt es Pommes - verarscht! Natürlich gibt es nur salzlosen Reis, oder salzlose Nudeln.", + "Es ist 12 Uhr 30 und Heute gibt es nur Pommes, wenn der Pommesfrosch Blasen gespuckt hat.", + "Heute gibt es Pommes leider nicht einzeln zu verkaufen, da die Schälchen alle sind", + "Heute gibt es Pommes, verarscht! Natürlich gibt es nur salzlosen Reis, oder salzlose Nudeln.", "Heute auf dem Speiseplan: Sushi vom Vortag", "Aramark Kantinenessen: Der Hunger treibt es rein, der Geiz hält es drin.", "Das Essen in der Snackeria sieht heute wie die bessere Alternative aus", diff --git a/makefu/2configs/bureautomation/person/team.nix b/makefu/2configs/bureautomation/person/team.nix index fc2d9ba17..2a15abaf5 100644 --- a/makefu/2configs/bureautomation/person/team.nix +++ b/makefu/2configs/bureautomation/person/team.nix @@ -50,16 +50,23 @@ "device_tracker.emeka_phone" ]; } - #{ name = "Sabine"; - # id = 9; - # device_trackers = [ - # "device_tracker.sabine_phone" - # ]; - #} + { name = "Sabine"; + id = 9; + device_trackers = [ + "device_tracker.sabine_phone" + ]; + } { name = "Tobias"; id = 10; device_trackers = [ "device_tracker.tobias_phone" ]; } + { name = "Tancrede"; + id = 11; + device_trackers = [ + "device_tracker.tancrede_phone" + "device_tracker.tancrede_laptop" + ]; + } ] diff --git a/makefu/2configs/bureautomation/puppy-proxy.nix b/makefu/2configs/bureautomation/puppy-proxy.nix new file mode 100644 index 000000000..9e3542509 --- /dev/null +++ b/makefu/2configs/bureautomation/puppy-proxy.nix @@ -0,0 +1,5 @@ +{ pkgs, ... }: +# streamlink 'https://www.ustream.tv/channel/maximilian-schnauzers-cam4' worst --player-external-http --player-external-http-port 15321 --player-passthrough rtsp --retry-streams 60 +{ + environment.systemPackages = [ pkgs.liveproxy ]; +} diff --git a/makefu/2configs/bureautomation/script/multi_blink.nix b/makefu/2configs/bureautomation/script/multi_blink.nix index 5076111ac..e6acdc303 100644 --- a/makefu/2configs/bureautomation/script/multi_blink.nix +++ b/makefu/2configs/bureautomation/script/multi_blink.nix @@ -36,6 +36,18 @@ in { count = 1; alias = "blitz for 10 seconds"; }); + blasen_10s = (flash_entity { + entity = "switch.frosch_blasen"; + delay = 10000; + count = 1; + alias = "blasen for 10 seconds"; + }); + blasen_30s = (flash_entity { + entity = "switch.frosch_blasen"; + delay = 30000; + count = 1; + alias = "blasen for 30 seconds"; + }); schlechteluft = (flash_entity { entity = "switch.bauarbeiterlampe"; alias = "Schlechte Luft Lampe 5 secs"; diff --git a/makefu/2configs/bureautomation/stream/puppies.nix b/makefu/2configs/bureautomation/stream/puppies.nix new file mode 100644 index 000000000..d22be9ea6 --- /dev/null +++ b/makefu/2configs/bureautomation/stream/puppies.nix @@ -0,0 +1,4 @@ +[ + { stream_source = "http://127.0.0.1:53422/base64/c3RyZWFtbGluayBodHRwczovL3d3dy51c3RyZWFtLnR2L2NoYW5uZWwvbWF4aW1pbGlhbi1zY2huYXV6ZXJzLWNhbTIgd29yc3Q=/"; + } +] diff --git a/makefu/2configs/default.nix b/makefu/2configs/default.nix index 5faf3ce93..0cbb5efe7 100644 --- a/makefu/2configs/default.nix +++ b/makefu/2configs/default.nix @@ -28,6 +28,7 @@ with import <stockholm/lib>; openssh.authorizedKeys.keys = [ config.krebs.users.makefu.pubkey ]; }; }; + nix.trustedUsers = [ config.krebs.build.user.name ]; boot.kernelPackages = lib.mkDefault pkgs.linuxPackages_latest; @@ -41,8 +42,6 @@ with import <stockholm/lib>; }; - - boot.tmpOnTmpfs = true; systemd.tmpfiles.rules = [ "d /tmp 1777 root root - -" @@ -61,7 +60,7 @@ with import <stockholm/lib>; environment.shellAliases = { # TODO: see .aliases lsl = "ls -lAtr"; - dmesg = "journalctl -kb | cat"; + dmesg = "dmesg -L --reltime"; psg = "ps -ef | grep"; nmap = "nmap -oN $HOME/loot/scan-`date +\%s`.nmap -oX $HOME/loot/scan-`date +%s`.xml"; grep = "grep --color=auto"; diff --git a/makefu/2configs/deployment/board.euer.krebsco.de.nix b/makefu/2configs/deployment/board.euer.krebsco.de.nix new file mode 100644 index 000000000..ca617976d --- /dev/null +++ b/makefu/2configs/deployment/board.euer.krebsco.de.nix @@ -0,0 +1,15 @@ +let + fqdn = "board.euer.krebsco.de"; + port = 13113; +in { + services.restya-board = { + enable = true; + virtualHost.listenPort = port; + }; + services.nginx.virtualHosts."${fqdn}" = { + enableACME = true; + forceSSL = true; + locations."/".proxyPass = "http://localhost:${toString port}"; + }; +} + diff --git a/makefu/2configs/deployment/docker/archiveteam-warrior.nix b/makefu/2configs/deployment/docker/archiveteam-warrior.nix new file mode 100644 index 000000000..8eef27a20 --- /dev/null +++ b/makefu/2configs/deployment/docker/archiveteam-warrior.nix @@ -0,0 +1,39 @@ +{ lib, ... }: +with lib; +let + port = ident: toString (28000 + ident); + instances = [ 1 2 3 4 5 6 7 8 9 ]; +in { + services.nginx.recommendedProxySettings = true; + services.nginx.virtualHosts."warrior.gum.r".locations = let + # TODO location "/" shows all warrior instances + proxy = ident: + { + "/warrior${toString ident}/" = { + proxyPass = "http://localhost:${port ident}/"; + # rewrite ^/info /warrior${toString ident}/info; + extraConfig = '' + sub_filter "http://warrior.gum.r/info" "http://warrior.gum.r/warrior${toString ident}/info"; + sub_filter_once off; + ''; + }; + + }; + in + foldl' mergeAttrs {} (map proxy instances); + docker-containers = let + container = ident: + { "archiveteam-warrior${toString ident}" = { + image = "archiveteam/warrior-dockerfile"; + ports = [ "127.0.0.1:${port ident}:8001" ]; + environment = { + DOWNLOADER = "makefu"; + SELECTED_PROJECT = "auto"; + CONCURRENT_ITEMS = "6"; + WARRIOR_ID = toString ident; + }; + }; + }; + in + foldl' mergeAttrs {} (map container instances); +} diff --git a/makefu/2configs/deployment/gecloudpad/default.nix b/makefu/2configs/deployment/gecloudpad/default.nix new file mode 100644 index 000000000..e13ec6ae6 --- /dev/null +++ b/makefu/2configs/deployment/gecloudpad/default.nix @@ -0,0 +1,43 @@ +{ config, lib, pkgs, ... }: +# more than just nginx config but not enough to become a module +let + wsgi-sock = "${workdir}/uwsgi-gecloudpad.sock"; + workdir = config.services.uwsgi.runDir; + gecloudpad = pkgs.python3Packages.callPackage ./gecloudpad.nix {}; +in { + + services.uwsgi = { + enable = true; + user = "nginx"; + # runDir = "/var/lib/photostore"; + plugins = [ "python3" ]; + instance = { + type = "emperor"; + vassals = { + gecloudpad = { + type = "normal"; + pythonPackages = self: with self; [ gecloudpad ]; + socket = wsgi-sock; + }; + }; + }; + }; + + services.nginx = { + enable = lib.mkDefault true; + virtualHosts."pad.binaergewitter.de" = { + enableACME = true; + forceSSL = true; + locations = { + "/".extraConfig = '' + expires -1; + uwsgi_pass unix://${wsgi-sock}; + uwsgi_param UWSGI_CHDIR ${gecloudpad}/${pkgs.python.sitePackages}; + uwsgi_param UWSGI_MODULE gecloudpad.main; + uwsgi_param UWSGI_CALLABLE app; + include ${pkgs.nginx}/conf/uwsgi_params; + ''; + }; + }; + }; +} diff --git a/makefu/2configs/deployment/gecloudpad/gecloudpad.nix b/makefu/2configs/deployment/gecloudpad/gecloudpad.nix new file mode 100644 index 000000000..7d51dfa0d --- /dev/null +++ b/makefu/2configs/deployment/gecloudpad/gecloudpad.nix @@ -0,0 +1,24 @@ +{ lib, pkgs, fetchFromGitHub, ... }: + +with pkgs.python3Packages;buildPythonPackage rec { + name = "gecloudpad-${version}"; + version = "0.2.3"; + + propagatedBuildInputs = [ + flask requests + ]; + + src = fetchFromGitHub { + owner = "binaergewitter"; + repo = "gecloudpad"; + rev = "master"; + sha256 = "0p9lcphp3r7hyypxadzw4x9ix6d0anmspxnjnj0v2jjll8gxqlhf"; + }; + + meta = { + homepage = https://github.com/binaergeiwtter/gecloudpad; + description = "server side for gecloudpad"; + license = lib.licenses.wtfpl; + }; +} + diff --git a/makefu/2configs/deployment/rss.euer.krebsco.de.nix b/makefu/2configs/deployment/rss.euer.krebsco.de.nix new file mode 100644 index 000000000..c827c5a53 --- /dev/null +++ b/makefu/2configs/deployment/rss.euer.krebsco.de.nix @@ -0,0 +1,14 @@ +let + fqdn = "rss.euer.krebsco.de"; +in { + services.tt-rss = { + enable = true; + virtualHost = fqdn; + selfUrlPath = "https://${fqdn}"; + }; + services.nginx.virtualHosts."${fqdn}" = { + enableACME = true; + forceSSL = true; + }; +} + diff --git a/makefu/2configs/ham/androidtv/adbshell.nix b/makefu/2configs/ham/androidtv/adbshell.nix new file mode 100644 index 000000000..f5b96c859 --- /dev/null +++ b/makefu/2configs/ham/androidtv/adbshell.nix @@ -0,0 +1,38 @@ +{ lib +, buildPythonPackage +, fetchPypi +, cryptography +, pyasn1 +, rsa +, pycryptodome +}: + +buildPythonPackage rec { + pname = "adb_shell"; + version = "0.0.8"; + + src = fetchPypi { + inherit pname version; + sha256 = "01f9jinhfyjldg9793gz2i7gcd9xyx0a62r7a5ijssklcnn2rwnm"; + }; + + propagatedBuildInputs = [ + cryptography + pyasn1 + rsa + ]; + + # tests are not part of pypi package + doCheck = false; + + checkInputs = [ + pycryptodome + ]; + + meta = with lib; { + description = "A Python implementation of ADB with shell and FileSync functionality"; + homepage = https://github.com/JeffLIrion/adb_shell/; + license = licenses.mit; + # maintainers = [ maintainers. ]; + }; +} diff --git a/makefu/2configs/ham/androidtv/default.nix b/makefu/2configs/ham/androidtv/default.nix new file mode 100644 index 000000000..8f3bdc1f3 --- /dev/null +++ b/makefu/2configs/ham/androidtv/default.nix @@ -0,0 +1,30 @@ +{ lib +, buildPythonPackage +, callPackage +, fetchPypi +}: + +buildPythonPackage rec { + pname = "androidtv"; + version = "0.0.34"; + + src = fetchPypi { + inherit pname version; + sha256 = "13078i2a9hglpv4ldycph5n5485np21vs6z2qn830hybmx8kfxsw"; + }; + + propagatedBuildInputs = [ + (callPackage ./adbshell.nix {}) + (callPackage ./purepythonadb.nix {}) + ]; + + # tests are not packaged in pypi release + doCheck = false; + + meta = with lib; { + description = "Communicate with an Android TV or Fire TV device via ADB over a network"; + homepage = https://github.com/JeffLIrion/python-androidtv/; + license = licenses.mit; + # maintainers = [ maintainers. ]; + }; +} diff --git a/makefu/2configs/ham/androidtv/purepythonadb.nix b/makefu/2configs/ham/androidtv/purepythonadb.nix new file mode 100644 index 000000000..d4e763b70 --- /dev/null +++ b/makefu/2configs/ham/androidtv/purepythonadb.nix @@ -0,0 +1,21 @@ +{ lib +, buildPythonPackage +, fetchPypi +}: + +buildPythonPackage rec { + pname = "pure-python-adb"; + version = "0.2.3.dev0"; + + src = fetchPypi { + inherit pname version; + sha256 = "88e5a4578435197799aa368fb1a5d87fe43e02a888cb7e85c2ad66173b383c89"; + }; + + meta = with lib; { + description = "Pure python implementation of the adb client"; + homepage = https://github.com/Swind/pure-python-adb; + license = licenses.mit; + # maintainers = [ maintainers. ]; + }; +}
\ No newline at end of file diff --git a/makefu/2configs/ham/automation/firetv_restart.nix b/makefu/2configs/ham/automation/firetv_restart.nix new file mode 100644 index 000000000..1094d177f --- /dev/null +++ b/makefu/2configs/ham/automation/firetv_restart.nix @@ -0,0 +1,33 @@ +let + cmd = command: { + service = "androidtv.adb_command"; + data = { + entity_id = "media_player.firetv_stick"; + inherit command; + }; + }; + sec = seconds: { delay.seconds = seconds; }; +in [ + { + alias = "Nightly reboot of firetv"; + trigger = { + platform = "time"; + at = "03:00:00"; + }; + 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") + ]; + } +] diff --git a/makefu/2configs/ham/default.nix b/makefu/2configs/ham/default.nix new file mode 100644 index 000000000..53723299c --- /dev/null +++ b/makefu/2configs/ham/default.nix @@ -0,0 +1,152 @@ +{ pkgs, lib, config, ... }: + +# Ideas: +## wake-on-lan server +## +let + upkgs = (import <nixpkgs-unstable> {}).pkgs; + hlib = (import ./lib); + prefix = hlib.prefix; + tasmota = hlib.tasmota; + firetv_stick = "192.168.1.24"; + hassdir = "/var/lib/hass"; + zigbee = import ./multi/zigbee2mqtt.nix; + #flurlicht = import ./multi/flurlicht.nix; + kurzzeitwecker = import ./multi/kurzzeitwecker.nix; + firetv_restart = import ./multi/firetv_restart.nix; +# switch +# automation +# binary_sensor +# sensor +# input_select +# timer +in { + imports = [ + ./mqtt.nix + ]; + + services.home-assistant = { + package = (upkgs.home-assistant.overrideAttrs (old: { + })).override { + extraPackages = ps: with ps; [ + python-forecastio jsonrpc-async jsonrpc-websocket mpd2 pkgs.picotts + (ps.callPackage ./androidtv {}) + ]; + }; + config = { + input_select = zigbee.input_select; # dict + timer = zigbee.timer // kurzzeitwecker.timer; # dict + homeassistant = { + name = "Home"; time_zone = "Europe/Berlin"; + latitude = "48.7687"; + longitude = "9.2478"; + elevation = 247; + }; + discovery = {}; + conversation = {}; + history = {}; + logbook = {}; + logger = { + default = "info"; + }; + tts = [ + { platform = "google_translate"; + language = "de"; + time_memory = 57600; + service_name = "google_say"; + } + ]; + + telegram_bot = [ + # secrets file: { + # "platform": "broadcast", + # "api_key": "", # talk to Botfather /newbot + # "allowed_chat_ids": [ ID ] # curl -X GET # https://api.telegram.org/bot<YOUR_API_TOKEN>/getUpdates + #} + (builtins.fromJSON + (builtins.readFile <secrets/hass/telegram-bot.json>)) + ]; + notify = [ + { + platform = "kodi"; + name = "wohnzimmer"; + host = firetv_stick; + } + { + platform = "telegram"; + name = "telegrambot"; + chat_id = builtins.elemAt + (builtins.fromJSON (builtins.readFile + <secrets/hass/telegram-bot.json>)).allowed_chat_ids 0; + } + ]; + sun.elevation = 247; + recorder = {}; + media_player = [ + { platform = "FireTV Stick kodi"; + host = firetv_stick; + } + { platform = "androidtv"; + name = "FireTV Stick"; + device_class = "firetv"; + # adb_server_ip = firetv_stick; + host = firetv_stick; + port = 5555; + } + ]; + mqtt = { + broker = "localhost"; + discovery = true; #enable esphome discovery + discovery_prefix = "homeassistant"; + port = 1883; + client_id = "home-assistant"; + username = "hass"; + password = lib.removeSuffix "\n" (builtins.readFile <secrets/mqtt/hass>); + keepalive = 60; + protocol = 3.1; + birth_message = { + topic = "${prefix}/hass/tele/LWT"; + payload = "Online"; + qos = 1; + retain = true; + }; + will_message = { + topic = "${prefix}/hass/tele/LWT"; + payload = "Offline"; + qos = 1; + retain = true; + }; + }; + luftdaten = { + show_on_map = true; + sensor_id = 679; + sensors.monitored_conditions = [ "P1" "P2" ]; + }; + #binary_sensor = + # flurlicht.binary_sensor; + sensor = [ + { platform = "speedtest"; + monitored_conditions = [ "ping" "download" "upload" ]; + } + # https://www.home-assistant.io/cookbook/automation_for_rainy_days/ + ] + ++ ((import ./sensor/outside.nix) {inherit lib;}) + ++ zigbee.sensor ; + frontend = { }; + # light = flurlicht.light; + http = { }; + switch = []; + automation = [] + ++ (import ./automation/firetv_restart.nix) + ++ kurzzeitwecker.automation + #++ flurlicht.automation + ++ zigbee.automation; + script = + { } + // kurzzeitwecker.script; # dict + }; + enable = true; + configDir = hassdir; + }; + +} diff --git a/makefu/2configs/homeautomation/google-muell.nix b/makefu/2configs/ham/google-muell.nix index c81eae201..c81eae201 100644 --- a/makefu/2configs/homeautomation/google-muell.nix +++ b/makefu/2configs/ham/google-muell.nix diff --git a/makefu/2configs/ham/lib/default.nix b/makefu/2configs/ham/lib/default.nix new file mode 100644 index 000000000..45c86138b --- /dev/null +++ b/makefu/2configs/ham/lib/default.nix @@ -0,0 +1,44 @@ +let + prefix = "/ham"; +in +{ + inherit prefix; + say = let + # returns a list of actions to be performed on an mpd to say something + tts = { message, entity }: + [ + { + service = "media_player.turn_on"; + data.entity_id = entity; + } + { + service = "media_player.play_media"; + data = { + entity_id = entity; + media_content_type = "playlist"; + media_content_id = "ansage"; + }; + } + { + service = "media_player.turn_on"; + data.entity_id = entity; + } + { delay.seconds = 8; } + { + service = "tts.say"; + entity_id = entity; + data_template = { + inherit message; + language = "de"; + }; + } + ]; + in + { + firetv = message: tts { + inherit message; + entity = "firetv"; + }; + }; + zigbee.prefix = "/ham/zigbee"; +} diff --git a/makefu/2configs/homeautomation/mqtt.nix b/makefu/2configs/ham/mqtt.nix index cd1c328d7..cd1c328d7 100644 --- a/makefu/2configs/homeautomation/mqtt.nix +++ b/makefu/2configs/ham/mqtt.nix diff --git a/makefu/2configs/ham/multi/flurlicht.nix b/makefu/2configs/ham/multi/flurlicht.nix new file mode 100644 index 000000000..25eb78b7f --- /dev/null +++ b/makefu/2configs/ham/multi/flurlicht.nix @@ -0,0 +1,57 @@ +# provides: +# light +# automation +# binary_sensor +let + hlib = (import ../lib); + tasmota = hlib.tasmota; +in +{ + binary_sensor = [ + (tasmota.motion { name = "Flur Bewegung"; host = "flurlicht";}) + ]; + light = [ (tasmota.rgb { name = "Flurlicht"; host = "flurlicht";} ) ]; + automation = [ + { alias = "Dunkel bei Sonnenuntergang"; + trigger = { + platform = "sun"; + event = "sunset"; + # offset: "-00:45:00" + }; + action = [ + { + service= "light.turn_on"; + data = { + entity_id= "light.flurlicht"; + # rgb_color = [ 0,0,0 ]; <-- TODO default color + brightness_pct = 15; + }; + } + { + service= "light.turn_off"; + entity_id= "light.flurlicht"; + } + ]; + } + { alias = "Hell bei Sonnenaufgang"; + trigger = { + platform = "sun"; + event = "sunrise"; + # offset: "-00:00:00" + }; + action = [ + { + service= "light.turn_on"; + data = { + entity_id= "light.flurlicht"; + brightness_pct = 85; + }; + } + { + service= "light.turn_off"; + entity_id= "light.flurlicht"; + } + ]; + } + ]; +} diff --git a/makefu/2configs/ham/multi/kurzzeitwecker.nix b/makefu/2configs/ham/multi/kurzzeitwecker.nix new file mode 100644 index 000000000..03d0d5aac --- /dev/null +++ b/makefu/2configs/ham/multi/kurzzeitwecker.nix @@ -0,0 +1,132 @@ +# Provides: +# timer +# automation +# script + +# Needs: +# sensor.zigbee_btn1_click +# notify.telegrambot +let + button = "sensor.zigbee_btn2_click"; +in { + timer.kurzzeitwecker = + { + name = "Zigbee Kurzzeitwecker"; + duration = 300; + }; + script.add_5_minutes_to_kurzzeitwecker = + { + alias = "Add 5 minutes to kurzzeitwecker"; + sequence = [ + { service = "timer.pause"; + entity_id = "timer.kurzzeitwecker"; + } + { service = "timer.start"; + data_template = { + entity_id = "timer.kurzzeitwecker"; + duration = '' + {% set r = state_attr('timer.kurzzeitwecker', 'remaining') ~ '-0000' %} + {% set t = strptime(r, '%H:%M:%S.%f%z') %} + {{ (as_timestamp(t) + 300) | timestamp_custom('%H:%M:%S', false) }} + ''; + }; + } + ]; + }; + automation = + [ + { + alias = "Start Timer 5min"; + trigger = { + platform = "state"; + entity_id = button; + to = "single"; + }; + condition = + { condition = "state"; + entity_id = "timer.kurzzeitwecker"; + state = "idle"; + }; + + action = [ + { service = "timer.start"; + entity_id = "timer.kurzzeitwecker"; + data.duration = "00:05:00"; + } + { + service = "notify.telegrambot"; + data.message = "Timer gestartet {{state_attr('timer.kurzzeitwecker', 'remaining') }}, verbleibend "; + } + ]; + } + { + alias = "Add Timer 5min"; + trigger = { + platform = "state"; + entity_id = button; + to = "single"; + }; + condition = + { condition = "state"; + entity_id = "timer.kurzzeitwecker"; + state = "active"; + }; + + action = [ + { service = "homeassistant.turn_on"; + entity_id = "script.add_5_minutes_to_kurzzeitwecker"; + } + { + service = "notify.telegrambot"; + data.message = ''Timer um 5 minuten verlängert, {{ state_attr('timer.kurzzeitwecker', 'remaining') | truncate(9,True," ") }} verbleibend ''; + } + ]; + } + { + alias = "Stop timer on double click"; + trigger = [ + { + platform = "state"; + entity_id = button; + to = "double"; + } + { + platform = "state"; + entity_id = button; + to = "triple"; + } + ]; + condition = + { + condition = "state"; + entity_id = "timer.kurzzeitwecker"; + state = "active"; + }; + + action = [ + { + service = "timer.cancel"; + entity_id = "timer.kurzzeitwecker"; + } + { + service = "notify.telegrambot"; + data.message = "Timer gestoppt, abgebrochen"; + } + ]; + } + { + alias = "Timer Finished"; + trigger = { + platform = "event"; + event_type = "timer.finished"; + event_data.entity_id = "timer.kurzzeitwecker"; + }; + action = [ + { + service = "notify.telegrambot"; + data.message = "Timer beendet"; + } + ]; + } + ]; +} diff --git a/makefu/2configs/ham/multi/zigbee2mqtt.nix b/makefu/2configs/ham/multi/zigbee2mqtt.nix new file mode 100644 index 000000000..947eb5517 --- /dev/null +++ b/makefu/2configs/ham/multi/zigbee2mqtt.nix @@ -0,0 +1,129 @@ +# provides: +# switch +# automation +# binary_sensor +# sensor +# input_select +# timer +let + inherit (import ../lib) zigbee; + prefix = zigbee.prefix; +in { + sensor = + + [ + # Sensor for monitoring the bridge state + { + platform = "mqtt"; + name = "Zigbee2mqtt Bridge state"; + state_topic = "${prefix}/bridge/state"; + icon = "mdi:router-wireless"; + } + # Sensor for Showing the Zigbee2mqtt Version + { + platform = "mqtt"; + name = "Zigbee2mqtt Version"; + state_topic = "${prefix}/bridge/config"; + value_template = "{{ value_json.version }}"; + icon = "mdi:zigbee"; + } + # Sensor for Showing the Coordinator Version + { + platform = "mqtt"; + name = "Coordinator Version"; + state_topic = "${prefix}/bridge/config"; + value_template = "{{ value_json.coordinator }}"; + 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"; + hide_entity = "true"; + 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"; + hide_entity = "true"; + 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; + }; +} diff --git a/makefu/2configs/ham/sensor/outside.nix b/makefu/2configs/ham/sensor/outside.nix new file mode 100644 index 000000000..c46b35ba3 --- /dev/null +++ b/makefu/2configs/ham/sensor/outside.nix @@ -0,0 +1,20 @@ +{lib,...}: [ + { platform = "darksky"; + api_key = lib.removeSuffix "\n" + (builtins.readFile <secrets/hass/darksky.apikey>); + language = "de"; + monitored_conditions = [ + "summary" "icon" + "nearest_storm_distance" "precip_probability" + "precip_intensity" + "temperature" # "temperature_high" "temperature_low" + "apparent_temperature" + "hourly_summary" # next 24 hours text + "humidity" + "pressure" + "uv_index" + ]; + units = "si" ; + scan_interval = "00:30:00"; + } + ] diff --git a/makefu/2configs/ham/zigbee2mqtt/default.nix b/makefu/2configs/ham/zigbee2mqtt/default.nix new file mode 100644 index 000000000..7c55326f9 --- /dev/null +++ b/makefu/2configs/ham/zigbee2mqtt/default.nix @@ -0,0 +1,20 @@ +{config, pkgs, lib, ...}: + + +{ + # symlink the zigbee controller + services.udev.extraRules = '' + SUBSYSTEM=="tty", ATTRS{idVendor}=="0451", ATTRS{idProduct}=="16a8", SYMLINK+="cc2531", MODE="0660", GROUP="dailout" + ''; + + system.activationScripts.installZigbee = '' + install -d /var/lib/zigbee2mqtt + ''; + + docker-containers.zigbee2mqtt = { + image = "koenkk/zigbee2mqtt"; + extraDockerOptions = [ "--device=/dev/cc2531:/dev/cc2531" ]; + volumes = ["/var/lib/zigbee2mqtt:/app/data"]; + }; + state = [ "/var/lib/zigbee2mqtt/configuration.yaml" "/var/lib/zigbee2mqtt/state.json" ]; +} diff --git a/makefu/2configs/home-manager/mail.nix b/makefu/2configs/home-manager/mail.nix index 467e0d7a0..ba29e86a4 100644 --- a/makefu/2configs/home-manager/mail.nix +++ b/makefu/2configs/home-manager/mail.nix @@ -1,6 +1,8 @@ { home-manager.users.makefu = { + programs.mbsync.enable = true; accounts.email.maildirBasePath = "/home/makefu/Mail"; + accounts.email.certificatesFile = "/etc/ssl/certs/ca-certificates.crt"; accounts.email.accounts.syntaxfehler = { address = "felix.richter@syntax-fehler.de"; userName = "Felix.Richter@syntax-fehler.de"; @@ -10,18 +12,34 @@ enable = true; }; }; + mbsync = { + enable = true; + create = "both"; + remove = "both"; + expunge = "both"; + patterns = [ "*" "!INBOX.Sent*"]; + }; smtp = { host = "syntax-fehler.de"; tls = { enable = true; }; }; + folders = { + sent = "Sent"; + trash = "Trash"; + inbox = "INBOX"; + drafts = "Drafts"; + }; msmtp.enable = true; notmuch.enable = true; offlineimap = { enable = true; postSyncHookCommand = "notmuch new"; extraConfig.remote = { + auth_mechanisms = "LOGIN"; + tls_level = "tls_secure"; + ssl_version = "tls1_2"; holdconnectionopen = true; idlefolders = "['INBOX']"; }; diff --git a/makefu/2configs/home-manager/zsh.nix b/makefu/2configs/home-manager/zsh.nix index d24969ef0..4cd9becc7 100644 --- a/makefu/2configs/home-manager/zsh.nix +++ b/makefu/2configs/home-manager/zsh.nix @@ -2,65 +2,8 @@ { imports = [ { #direnv - home-manager.users.makefu.home.packages = [ pkgs.direnv ]; - home-manager.users.makefu.home.file.".direnvrc".text = '' - use_nix() { - local path="$(nix-instantiate --find-file nixpkgs)" - - if [ -f "$${path}/.version-suffix" ]; then - local version="$(< $path/.version-suffix)" - elif [ -f "$path/.version" ]; then - local version="$(< $path/.version)" - else - local version="$(< $(< $path/.git/HEAD))" - fi - - local cache=".direnv/cache-''${version:-unknown}" - - if [[ ! -e "$cache" ]] || \ - [[ "$HOME/.direnvrc" -nt "$cache" ]] || \ - [[ .envrc -nt "$cache" ]] || \ - [[ default.nix -nt "$cache" ]] || \ - [[ shell.nix -nt "$cache" ]]; - then - [ -d .direnv ] || mkdir .direnv - local tmp=$(nix-shell --show-trace "$@" \ - --run "\"$direnv\" dump zsh") - echo "$tmp" > "$cache" - fi - - local path_backup=$PATH term_backup=$TERM - . "$cache" - - export PATH=$PATH:$path_backup TERM=$term_backup - - if [[ $# = 0 ]]; then - watch_file default.nix - watch_file shell.nix - fi - } - ''; - home-manager.users.makefu.programs.zsh.initExtra = '' - nixify() { - if [ ! -e ./.envrc ]; then - echo "use nix" > .envrc - direnv allow - fi - if [ ! -e default.nix ]; then - cat > default.nix <<'EOF' - with import <nixpkgs> {}; - stdenv.mkDerivation { - name = "env"; - buildInputs = [ - bashInteractive - ]; - } - EOF - ''${EDITOR:-vim} default.nix - fi - } - eval "$(direnv hook zsh)" - ''; + home-manager.users.makefu.home.packages = [ pkgs.direnv pkgs.nur.repos.kalbasit.nixify ]; + # home-manager.users.makefu.home.file.".direnvrc".text = ''''; } { # bat home-manager.users.makefu.home.packages = [ pkgs.bat ]; diff --git a/makefu/2configs/homeautomation/default.nix b/makefu/2configs/homeautomation/default.nix deleted file mode 100644 index 4e9ac0ee3..000000000 --- a/makefu/2configs/homeautomation/default.nix +++ /dev/null @@ -1,305 +0,0 @@ -{ pkgs, lib, config, ... }: - -# Ideas: -## wake-on-lan server -## -let - tasmota_rgb = name: topic: -# LED WS2812b -# effect_state_topic: "stat/led/Scheme" -# effect_command_topic: "cmnd/led/Scheme" -# effect_value_template: "{{ value_json.Scheme }}" - { platform = "mqtt"; - inherit name; - retain = false; - qos = 1; - optimistic = false; - # state - # TODO: currently broken, will not use the custom state topic - #state_topic = "/ham/${topic}/stat/POWER"; - state_topic = "/ham/${topic}/stat/POWER"; - command_topic = "/ham/${topic}/cmnd/POWER"; - availability_topic = "/ham/${topic}/tele/LWT"; - payload_on= "ON"; - payload_off= "OFF"; - payload_available= "Online"; - payload_not_available= "Offline"; - # brightness - brightness_state_topic = "/ham/${topic}/stat/Dimmer"; - brightness_command_topic = "/ham/${topic}/cmnd/Dimmer"; - brightness_value_template = "{{ value_json.Dimmer }}"; - brightness_scale = 100; - # color - rgb_state_topic = "/ham/${topic}/stat/Color"; - rgb_command_topic = "/ham/${topic}/cmnd/MEM1"; # use enabled tasmota rule - rgb_command_mode = "hex"; - rgb_command_template = "{{ '%02x%02x%02x' | format(red, green, blue)}}"; - # effects - effect_state_topic = "/ham/${topic}/stat/Scheme"; - effect_command_topic = "/ham/${topic}/cmnd/Scheme"; - effect_value_template = "{{ value_json.Scheme }}"; - effect_list = [ 0 1 2 3 4 5 6 7 8 9 10 11 12 ]; -}; - # switchmode 1 - also toggle power - # switchtopic flurlicht - tasmota_motion = name: topic: - { platform = "mqtt"; - device_class = "motion"; - inherit name; - # TODO: currently broken, will not use the custom state topic - state_topic = "/ham/${topic}/stat/POWER"; - payload_on = "ON"; - payload_off = "OFF"; - availability_topic = "/ham/${topic}/tele/LWT"; - payload_available = "Online"; - payload_not_available = "Offline"; - }; - - firetv = "192.168.1.183"; - hassdir = "/var/lib/hass"; - tasmota_plug = name: topic: - { platform = "mqtt"; - inherit name; - state_topic = "/ham/${topic}/stat/POWER1"; - command_topic = "/ham/${topic}/cmnd/POWER1"; - availability_topic = "/ham/${topic}/tele/LWT"; - payload_on= "ON"; - payload_off= "OFF"; - payload_available= "Online"; - payload_not_available= "Offline"; - }; - tasmota_bme = name: topic: - [ { platform = "mqtt"; - name = "${name} Temperatur"; - state_topic = "/ham/${topic}/tele/SENSOR"; - value_template = "{{ value_json.BME280.Temperature }}"; - unit_of_measurement = "°C"; - } - { platform = "mqtt"; - name = "${name} Luftfeuchtigkeit"; - state_topic = "/ham/${topic}/tele/SENSOR"; - value_template = "{{ value_json.BME280.Humidity }}"; - unit_of_measurement = "%"; - } - { platform = "mqtt"; - name = "${name} Luftdruck"; - state_topic = "/ham/${topic}/tele/SENSOR"; - value_template = "{{ value_json.BME280.Pressure }}"; - unit_of_measurement = "hPa"; - } - ]; - tasmota_am2301 = name: topic: - [ { platform = "mqtt"; - name = "${name} Temperatur"; - state_topic = "/ham/${topic}/tele/SENSOR"; - value_template = "{{ value_json.AM2301.Temperature }}"; - unit_of_measurement = "°C"; - } - { platform = "mqtt"; - name = "${name} Luftfeuchtigkeit"; - state_topic = "/ham/${topic}/tele/SENSOR"; - value_template = "{{ value_json.AM2301.Humidity }}"; - unit_of_measurement = "%"; - } - ]; -in { - imports = [ - ./mqtt.nix - ]; - - services.home-assistant = { - config = { - homeassistant = { - name = "Home"; time_zone = "Europe/Berlin"; - latitude = "48.7687"; - longitude = "9.2478"; - elevation = 247; - }; - #discovery = {}; - conversation = {}; - history = {}; - logbook = {}; - tts = [ - { platform = "google";} - ]; - sun.elevation = 247; - recorder = {}; - media_player = [ - { platform = "kodi"; - host = firetv; - } - { platform = "firetv"; - name = "FireTV Stick"; - host = firetv; - adbkey = <secrets/hass/adbkey>; - } - ]; - mqtt = { - broker = "localhost"; - port = 1883; - client_id = "home-assistant"; - username = "hass"; - password = lib.removeSuffix "\n" (builtins.readFile <secrets/mqtt/hass>); - keepalive = 60; - protocol = 3.1; - birth_message = { - topic = "/ham/hass/tele/LWT"; - payload = "Online"; - qos = 1; - retain = true; - }; - will_message = { - topic = "/ham/hass/tele/LWT"; - payload = "Offline"; - qos = 1; - retain = true; - }; - }; - binary_sensor = [ - (tasmota_motion "Flur Bewegung" "flurlicht") - ]; - sensor = [ - # broken - #{ platform = "speedtest"; - # monitored_conditions = [ "ping" "download" "upload" ]; - #} - { platform = "luftdaten"; - name = "Wangen"; - sensorid = "663"; - monitored_conditions = [ "P1" "P2" ]; - } - # https://www.home-assistant.io/cookbook/automation_for_rainy_days/ - { platform = "darksky"; - api_key = lib.removeSuffix "\n" - (builtins.readFile <secrets/hass/darksky.apikey>); - language = "de"; - monitored_conditions = [ "summary" "icon" - "nearest_storm_distance" "precip_probability" - "precip_intensity" - "temperature" - "apparent_temperature" - "hourly_summary" - "humidity" - "pressure" - "uv_index" ]; - units = "si" ; - update_interval = { - days = 0; - hours = 0; - minutes = 30; - seconds = 0; - }; - } - ] - ++ (tasmota_bme "Schlafzimmer" "schlafzimmer") - ++ (tasmota_am2301 "Arbeitszimmer" "arbeitszimmer"); - frontend = { }; - group = - { default_view = - { view = "yes"; - entities = [ - "group.flur" - "group.schlafzimmer" - "group.draussen" - "group.wohnzimmer" - "group.arbeitszimmer" - ]; - }; - flur = [ - "light.flurlicht" - "binary_sensor.flur_bewegung" - "automation.dunkel_bei_sonnenuntergang" - "automation.hell_bei_sonnenaufgang" - ]; - wohnzimmer = [ - "media_player.kodi" - "media_player.firetv_stick" - ]; - draussen = [ - "sensor.dark_sky_temperature" - "sensor.dark_sky_hourly_summary" - "sensor.wangen_pm10" - "sensor.wangen_pm25" - ]; - schlafzimmer = [ - "sensor.schlafzimmer_temperatur" - "sensor.schlafzimmer_luftdruck" - "sensor.schlafzimmer_luftfeuchtigkeit" - "switch.lichterkette_schlafzimmer" - ]; - arbeitszimmer = [ - "switch.strom_staubsauger" - "sensor.arbeitszimmer_temperatur" - "sensor.arbeitszimmer_luftfeuchtigkeit" - ]; - }; - http = { }; - switch = [ - (tasmota_plug "Lichterkette Schlafzimmer" "schlafzimmer") - (tasmota_plug "Strom Staubsauger" "arbeitszimmer") - ]; - light = [ (tasmota_rgb "Flurlicht" "flurlicht" ) ]; - automation = [ - { alias = "Dunkel bei Sonnenuntergang"; - trigger = { - platform = "sun"; - event = "sunset"; - # offset: "-00:45:00" - }; - action = [ - { - service= "light.turn_on"; - data = { - entity_id= "light.flurlicht"; - # rgb_color = [ 0,0,0 ]; <-- TODO default color - brightness_pct = 15; - }; - } - { - service= "light.turn_off"; - entity_id= "light.flurlicht"; - } - ]; - } - { alias = "Hell bei Sonnenaufgang"; - trigger = { - platform = "sun"; - event = "sunrise"; - # offset: "-00:00:00" - }; - action = [ - { - service= "light.turn_on"; - data = { - entity_id= "light.flurlicht"; - brightness_pct = 85; - }; - } - { - service= "light.turn_off"; - entity_id= "light.flurlicht"; - } - ]; - } - { alias = "Staubsauger Strom aus nach 6h"; - trigger = { - platform = "state"; - entity_id = "switch.strom_staubsauger"; - to = "on"; - for.hours = 6; - }; - action = { - service= "homeassistant.turn_off"; - entity_id= "switch.strom_staubsauger"; - }; - } - ]; - }; - enable = true; - configDir = hassdir; - }; - nixpkgs.config.permittedInsecurePackages = [ - "homeassistant-0.77.2" - ]; - -} diff --git a/makefu/2configs/hw/bluetooth.nix b/makefu/2configs/hw/bluetooth.nix index 972753080..e6a534b7b 100644 --- a/makefu/2configs/hw/bluetooth.nix +++ b/makefu/2configs/hw/bluetooth.nix @@ -40,10 +40,4 @@ ''; }; services.dbus.packages = [ pkgs.blueman ]; - nixpkgs.overlays = [ - (self: super: { - blueman = super.blueman.overrideAttrs (oldAttrs: { - buildInputs = oldAttrs.buildInputs ++ [ self.gnome3.adwaita-icon-theme ]; - }); - })]; } diff --git a/makefu/2configs/hw/cc2531.nix b/makefu/2configs/hw/cc2531.nix new file mode 100644 index 000000000..3bc2c6834 --- /dev/null +++ b/makefu/2configs/hw/cc2531.nix @@ -0,0 +1,10 @@ +{ config, lib, pkgs, ... }: + +{ + + users.users.${config.krebs.build.user.name}.extraGroups = [ "dialout" ]; + + services.udev.extraRules = '' + SUBSYSTEM=="tty", ATTRS{idVendor}=="0451", ATTRS{idProduct}=="16a8", SYMLINK+="cc2531", MODE="0660", GROUP="dailout" + ''; +} diff --git a/makefu/2configs/main-laptop.nix b/makefu/2configs/main-laptop.nix index 315fc4706..cb78c823f 100644 --- a/makefu/2configs/main-laptop.nix +++ b/makefu/2configs/main-laptop.nix @@ -68,11 +68,10 @@ in { }; security.sudo.extraConfig = "${config.krebs.power-action.user} ALL= (root) NOPASSWD: ${pkgs.systemd}/bin/systemctl suspend"; - services.redshift = { - enable = true; - latitude = "48.7"; - longitude = "9.1"; - }; + services.redshift.enable = true; + location.latitude = 48.7; + location.longitude = 9.1; + systemd.services.look-up = { startAt = "*:30"; serviceConfig = { diff --git a/makefu/2configs/minimal.nix b/makefu/2configs/minimal.nix index cb2ef09e3..ad4c128ec 100644 --- a/makefu/2configs/minimal.nix +++ b/makefu/2configs/minimal.nix @@ -74,11 +74,7 @@ }; # suppress chrome autit event messages - security.audit = { - rules = [ - "-a task,never" - ]; - }; + security.audit.rules = [ "-a task,never" ]; # Enable IPv6 Privacy Extensions boot.kernel.sysctl = { diff --git a/makefu/2configs/mqtt.nix b/makefu/2configs/mqtt.nix index 8b77df962..9d1da8392 100644 --- a/makefu/2configs/mqtt.nix +++ b/makefu/2configs/mqtt.nix @@ -6,7 +6,7 @@ users = {}; # TODO: secure that shit aclExtraConf = '' - pattern readwrite /# + pattern readwrite # ''; allowAnonymous = true; }; diff --git a/makefu/2configs/nginx/rompr.nix b/makefu/2configs/nginx/rompr.nix index 8c1fbc53b..c7dc3ff17 100644 --- a/makefu/2configs/nginx/rompr.nix +++ b/makefu/2configs/nginx/rompr.nix @@ -15,7 +15,6 @@ let in { services.phpfpm = { - # phpfpm does not have an enable option poolConfigs = { mpd = '' user = ${user} diff --git a/makefu/2configs/nur.nix b/makefu/2configs/nur.nix index 3cb4981e0..891144957 100644 --- a/makefu/2configs/nur.nix +++ b/makefu/2configs/nur.nix @@ -1,6 +1,10 @@ { pkgs, ... }:{ nixpkgs.config.packageOverrides = pkgs: { - nur = import (builtins.fetchTarball "https://github.com/nix-community/NUR/archive/master.tar.gz") { + nur = import (builtins.fetchTarball { + url = "https://github.com/nix-community/NUR/archive/7bfd0117b359d0f72d086ff7e1f0ba3aeaf8d91e.tar.gz"; + sha256 = "0gb2np1r2m9kkz1s374gxdqrwhkzx48iircy00y6mjr7h14rhyxk"; + } + ){ inherit pkgs; }; }; diff --git a/makefu/2configs/sickbeard/cheetah3.nix b/makefu/2configs/sickbeard/cheetah3.nix new file mode 100644 index 000000000..df928edd6 --- /dev/null +++ b/makefu/2configs/sickbeard/cheetah3.nix @@ -0,0 +1,25 @@ +{ lib +, buildPythonPackage +, fetchPypi +}: + +buildPythonPackage rec { + pname = "cheetah3"; + version = "3.2.4"; + + + src = fetchPypi { + pname = "Cheetah3"; + inherit version; + sha256 = "caabb9c22961a3413ac85cd1e5525ec9ca80daeba6555f4f60802b6c256e252b"; + }; + + doCheck = false; + + meta = with lib; { + description = "Cheetah is a template engine and code generation tool"; + homepage = https://cheetahtemplate.org/; + license = licenses.mit; + # maintainers = [ maintainers. ]; + }; +} diff --git a/makefu/2configs/sickbeard/debug.patch b/makefu/2configs/sickbeard/debug.patch new file mode 100644 index 000000000..aa22142c8 --- /dev/null +++ b/makefu/2configs/sickbeard/debug.patch @@ -0,0 +1,91 @@ +diff --git a/SickBeard.py b/SickBeard.py +index 31cfd1e1..10a4ef5e 100755 +--- a/SickBeard.py ++++ b/SickBeard.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python2 ++#!/usr/bin/env python3 + # + # This file is part of SickGear. + # +diff --git a/sickbeard/providers/generic.py b/sickbeard/providers/generic.py +index 5c1f7bfe..8999b468 100644 +--- a/sickbeard/providers/generic.py ++++ b/sickbeard/providers/generic.py +@@ -1203,6 +1203,7 @@ class GenericProvider(object): + ep_num = None + if 1 == len(ep_obj_results): + ep_num = ep_obj_results[0].episode ++ logger.log(f'{ep_obj_results[0]}',logger.DEBUG) + logger.log(u'Single episode result.', logger.DEBUG) + elif 1 < len(ep_obj_results): + ep_num = MULTI_EP_RESULT +diff --git a/sickbeard/providers/horriblesubs.py b/sickbeard/providers/horriblesubs.py +index 870e8461..dbdeacc8 100644 +--- a/sickbeard/providers/horriblesubs.py ++++ b/sickbeard/providers/horriblesubs.py +@@ -98,6 +98,7 @@ class HorribleSubsProvider(generic.TorrentProvider): + + results = self._sort_seeding(mode, results + items[mode]) + ++ logger.log(f"{results}",logger.DEBUG) + return results + + def _season_strings(self, *args, **kwargs): +@@ -131,6 +132,7 @@ class HorribleSubsProvider(generic.TorrentProvider): + .find_all('a', href=re.compile('(?i)(torrent$|^magnet:)'))))[0] + except (BaseException, Exception): + pass ++ logger.log(f"{result}",logger.DEBUG) + return result + + +diff --git a/sickbeard/search.py b/sickbeard/search.py +index f4957c3a..dd3a352d 100644 +--- a/sickbeard/search.py ++++ b/sickbeard/search.py +@@ -986,22 +986,26 @@ def search_providers( + + best_result = pick_best_result(found_results[provider_id][cur_search_result], show_obj, quality_list, + filter_rls=orig_thread_name) +- ++ logger.log(f"Best result: {best_result}",logger.DEBUG) + # if all results were rejected move on to the next episode + if not best_result: + continue +- ++ + # filter out possible bad torrents from providers + if 'torrent' == best_result.resultType: ++ logger.log(f"Best result is torrent {best_result.url}",logger.DEBUG) + if not best_result.url.startswith('magnet') and None is not best_result.get_data_func: + best_result.url = best_result.get_data_func(best_result.url) + best_result.get_data_func = None # consume only once + if not best_result.url: + continue + if best_result.url.startswith('magnet'): ++ logger.log("url is magnet link",logger.DEBUG) + if 'blackhole' != sickbeard.TORRENT_METHOD: ++ logger.log(f"Setting content to None because TORRENT_METHODD is not blackhole ({sickbeard.TORRENT_METHOD} instead)",logger.DEBUG) + best_result.content = None + else: ++ logger.log("url is torrent link",logger.DEBUG) + cache_file = ek.ek(os.path.join, sickbeard.CACHE_DIR or helpers.get_system_temp_dir(), + '%s.torrent' % (helpers.sanitize_filename(best_result.name))) + if not helpers.download_file(best_result.url, cache_file, session=best_result.provider.session): +@@ -1044,6 +1048,7 @@ def search_providers( + best_result.after_get_data_func(best_result) + best_result.after_get_data_func = None # consume only once + ++ logger.log(f"After torrent detection",logger.DEBUG) + # add result if its not a duplicate + found = False + for i, result in enumerate(final_results): +@@ -1054,6 +1059,7 @@ def search_providers( + else: + found = True + if not found: ++ logger.log(f"Not already found, adding to best_result to final_results",logger.DEBUG) + final_results += [best_result] + + # check that we got all the episodes we wanted first before doing a match and snatch diff --git a/makefu/2configs/sickbeard/sickgear.nix b/makefu/2configs/sickbeard/sickgear.nix index 1b7a57e8b..9746ee073 100644 --- a/makefu/2configs/sickbeard/sickgear.nix +++ b/makefu/2configs/sickbeard/sickgear.nix @@ -1,16 +1,19 @@ -{ stdenv, fetchFromGitHub, python2, makeWrapper }: +{ stdenv, fetchFromGitHub, python3, makeWrapper }: let - pythonEnv = python2.withPackages(ps: with ps; [ cheetah ]); + pythonEnv = python3.withPackages(ps: with ps; [ + (python3.pkgs.callPackage ./cheetah3.nix {}) + ]); in stdenv.mkDerivation rec { pname = "sickgear"; - version = "0.20.0"; + #version = "0.21.6"; + version = "0.21.21"; src = fetchFromGitHub { owner = "SickGear"; repo = "SickGear"; rev = "release_${version}"; - sha256 = "1zg95szvfbmwinx1z5nlbmyck7ximvyna0x71yflmadkgf88nv0k"; + sha256 = "15nlxg2867l846qqxklmfyqmn5nc01ksd4lpwbrbjdzpk4y3xi78"; }; dontBuild = true; @@ -18,12 +21,13 @@ in stdenv.mkDerivation rec { nativeBuildInputs = [ makeWrapper ]; buildInputs = [ pythonEnv ]; + patches = [ ./debug.patch ]; installPhase = '' mkdir -p $out/bin cp -R {autoProcessTV,gui,lib,sickbeard,sickgear.py,SickBeard.py} $out/ - makeWrapper $out/SickBeard.py $out/bin/sickgear + makeWrapper $out/sickgear.py $out/bin/sickgear ''; meta = with stdenv.lib; { diff --git a/makefu/2configs/stats/arafetch.nix b/makefu/2configs/stats/arafetch.nix index a078e3646..e96daa038 100644 --- a/makefu/2configs/stats/arafetch.nix +++ b/makefu/2configs/stats/arafetch.nix @@ -2,7 +2,7 @@ with import <stockholm/lib>; let pkg = with pkgs.python3Packages;buildPythonPackage rec { - rev = "cce2394"; + rev = "56d41de8219adc"; name = "arafetch-${rev}"; propagatedBuildInputs = [ requests @@ -14,7 +14,7 @@ let src = pkgs.fetchgit { url = "http://cgit.euer.krebsco.de/arafetch"; inherit rev; - sha256 = "sha256:0zdz8sqn9n8i69rqngcg7nakmvahf1i5dwajzjpylsh1x5csv2gs"; + sha256 = "0hnwbmj0plynhv3h2idhrzf2zcqx3qnw6lq8zzyn9am74pmvza39"; }; }; home = "/var/lib/arafetch"; diff --git a/makefu/2configs/stats/external/aralast.nix b/makefu/2configs/stats/external/aralast.nix index 870db99a8..19c7327af 100644 --- a/makefu/2configs/stats/external/aralast.nix +++ b/makefu/2configs/stats/external/aralast.nix @@ -1,14 +1,13 @@ { config, lib, pkgs, ... }: -with import <stockholm/lib>; let pkg = pkgs.stdenv.mkDerivation { name = "aralast-master"; src = pkgs.fetchFromGitHub { owner = "makefu"; repo = "aralast"; - rev = "7121598"; - sha256 = "0vw027c698h9b69ksid5p3pji9960hd7n9xi4arrax0vfkwryb4m"; + rev = "a0d3aeaa109e219fb6fc57170e59020c23413718"; + sha256 = "0bi0nc51z5wk72lnjhg1gfzr5yvvsshyzq924yjbbqpqw08v7i4p"; }; installPhase = '' install -m755 -D aralast.sh $out/bin/aralast diff --git a/makefu/2configs/tools/extra-gui.nix b/makefu/2configs/tools/extra-gui.nix index 5f8614719..7c01104a0 100644 --- a/makefu/2configs/tools/extra-gui.nix +++ b/makefu/2configs/tools/extra-gui.nix @@ -4,6 +4,7 @@ users.users.makefu.packages = with pkgs;[ # media gimp + mirage inkscape libreoffice # skype diff --git a/makefu/2configs/tools/mobility.nix b/makefu/2configs/tools/mobility.nix index 11151003d..0cf218d46 100644 --- a/makefu/2configs/tools/mobility.nix +++ b/makefu/2configs/tools/mobility.nix @@ -11,5 +11,6 @@ opensc pcsctools libu2f-host ]; - # boot.extraModulePackages = [ config.boot.kernelPackages.exfat-nofuse ]; + boot.extraModulePackages = [ config.boot.kernelPackages.exfat-nofuse ]; + boot.supportedFilesystems = [ "exfat" ]; } diff --git a/makefu/2configs/tools/studio.nix b/makefu/2configs/tools/studio.nix index e0c68167f..2c8ca399d 100644 --- a/makefu/2configs/tools/studio.nix +++ b/makefu/2configs/tools/studio.nix @@ -11,7 +11,7 @@ pactl load-module module-null-sink sink_name=stream sink_properties=device.description="Streaming" pactl load-module module-loopback source=alsa_output.usb-Burr-Brown_from_TI_USB_Audio_CODEC-00.analog-stereo.monitor sink=stream pactl load-module module-loopback source=alsa_input.usb-Burr-Brown_from_TI_USB_Audio_CODEC-00.analog-stereo sink=stream - darkice -c ~/lol.conf + darkice -c ./lol.conf '') ]; } diff --git a/makefu/5pkgs/cc-tool/default.nix b/makefu/5pkgs/cc-tool/default.nix new file mode 100644 index 000000000..71d5f8a7d --- /dev/null +++ b/makefu/5pkgs/cc-tool/default.nix @@ -0,0 +1,32 @@ +{ stdenv, lib, pkgs, autoreconfHook ,libtool, fetchFromGitHub, boost, libusb1, +pkgconfig,file }: +stdenv.mkDerivation rec { + pname = "cc-tool"; + version = "407fd7e"; + name = "${pname}-${version}"; + + src = fetchFromGitHub { + owner = "dashesy"; + repo = "cc-tool"; + rev = version; + sha256 = "1q7zqib4rn5l8clk2hj7078rfyrjdwxzpyg4r10is31lq22zhxqj"; + }; + + buildInputs = [ boost libtool libusb1 pkgconfig autoreconfHook ]; + + preConfigure = '' + substituteInPlace configure \ + --replace /usr/bin/file ${file}/bin/file + + ''; + + postInstall = '' + install -m755 -D ./udev/90-cc-debugger.rules $out/etc/udev/rules.d/90-cc-debugger.rules + ''; + + meta = { + homepage = https://github.com/AKuHAK/hdl-dump ; + description = "copy isos to psx hdd"; + license = lib.licenses.gpl2; + }; +} diff --git a/makefu/5pkgs/custom/hydra-check/default.nix b/makefu/5pkgs/custom/hydra-check/default.nix new file mode 100644 index 000000000..cfaaaab73 --- /dev/null +++ b/makefu/5pkgs/custom/hydra-check/default.nix @@ -0,0 +1,19 @@ +{ docopt, requests, beautifulsoup4, fetchFromGitHub, buildPythonPackage }: + +buildPythonPackage rec { + name = "hydra-check"; + version = "1.1.0"; + + src = fetchFromGitHub { + owner = "nix-community"; + repo = "hydra-check"; + rev = version; + sha256 = "1q4n5l238lnzcms3z1ax4860inaliawqlxv7nf1wb4knl4wr26fk"; + }; + propagatedBuildInputs = [ + docopt + requests + beautifulsoup4 + ]; + doCheck = false; # no tests +} diff --git a/makefu/5pkgs/custom/liveproxy/default.nix b/makefu/5pkgs/custom/liveproxy/default.nix new file mode 100644 index 000000000..ba5ddee66 --- /dev/null +++ b/makefu/5pkgs/custom/liveproxy/default.nix @@ -0,0 +1,30 @@ +{ lib +, buildPythonPackage +, fetchPypi +, streamlink +}: + +buildPythonPackage rec { + pname = "liveproxy"; + version = "0.3.0"; + + src = fetchPypi { + inherit pname version; + sha256 = "70ba2f7b57cdf19c6d971a434ed47cccb5fdfe4621baa76a3f6221e75b7f2729"; + }; + + # # Package conditions to handle + # # might have to sed setup.py and egg.info in patchPhase + # # sed -i "s/<package>.../<package>/" + # streamlink (>=1.1.1) + propagatedBuildInputs = [ + streamlink + ]; + + meta = with lib; { + description = "LiveProxy is a local Proxyserver between Streamlink and an URL"; + homepage = https://github.com/back-to/liveproxy; + license = lib.licenses.bsd2; + # maintainers = [ maintainers. ]; + }; +} diff --git a/makefu/5pkgs/default.nix b/makefu/5pkgs/default.nix index bbd99ffe7..1b07fd5f8 100644 --- a/makefu/5pkgs/default.nix +++ b/makefu/5pkgs/default.nix @@ -40,6 +40,8 @@ in { qcma = super.pkgs.libsForQt5.callPackage ./custom/qcma { }; inherit (callPackage ./devpi {}) devpi-web ; nodemcu-uploader = super.pkgs.callPackage ./nodemcu-uploader {}; + liveproxy = super.pkgs.python3Packages.callPackage ./custom/liveproxy {}; + hydra-check = super.pkgs.python3Packages.callPackage ./custom/hydra-check {}; } // (mapAttrs (_: flip callPackage {}) diff --git a/makefu/5pkgs/libcoap/default.nix b/makefu/5pkgs/libcoap/default.nix deleted file mode 100644 index 7e8d03edd..000000000 --- a/makefu/5pkgs/libcoap/default.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ lib, stdenv, fetchFromGitHub, autoreconfHook, autoconf-archive, pkgconfig, -gettext, asciidoc, doxygen, libxml2, libxslt, docbook_xsl, ... }: -stdenv.mkDerivation rec { - name = "libcoap-${version}"; - version = "4.1.2"; - - src = fetchFromGitHub { - owner = "obgm"; - repo = "libcoap"; - rev = "v${version}"; - sha256 = "0f0qq15480ja1s03vn8lzw4b3mzdgy46hng4aigi6i6qbzf29kf5"; - }; - - patchPhase = '' - sed -i 's/$(A2X)/& --no-xmllint/' examples/Makefile.am - ''; - buildInputs = [ gettext asciidoc doxygen libxml2.bin libxslt docbook_xsl]; - nativeBuildInputs = [ autoreconfHook autoconf-archive pkgconfig ]; - - meta = { - description = ""; - homepage = http://coap.technology; - license = stdenv.lib.licenses.gpl2; - platforms = stdenv.lib.platforms.linux; - maintainers = with stdenv.lib.maintainers; [ makefu ]; - }; -} diff --git a/makefu/5pkgs/pico2wave/default.nix b/makefu/5pkgs/pico2wave/default.nix deleted file mode 100644 index b2d18fee1..000000000 --- a/makefu/5pkgs/pico2wave/default.nix +++ /dev/null @@ -1,51 +0,0 @@ -{ stdenv, lib, fetchurl -, popt -, libredirect -, dpkg -, makeWrapper -, autoPatchelfHook -, ... -}: -# https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=svox-pico-bin -let - pkgrel="8"; - _arch = "amd64"; -in -stdenv.mkDerivation rec { - name = "pico2wave"; # svox-pico-bin - version = "1.0+git20130326"; - srcs = [ - (fetchurl { url = "http://mirrors.kernel.org/ubuntu/pool/multiverse/s/svox/libttspico0_${version}-${pkgrel}_${_arch}.deb"; sha256 = "0b8r7r8by5kamnm960bsicimnj1a40ghy3475nzy1jvwj5xgqhrj"; }) - (fetchurl { url = "http://mirrors.kernel.org/ubuntu/pool/multiverse/s/svox/libttspico-dev_${version}-${pkgrel}_${_arch}.deb"; sha256 = "1knjiwi117h02nbf7k6ll080vl65gxwx3rpj0fq5xkvxbqpjjbvz"; }) - (fetchurl { url = "http://mirrors.kernel.org/ubuntu/pool/multiverse/s/svox/libttspico-data_${version}-${pkgrel}_all.deb"; sha256 = "0k0x5jh5qzzasrg766pfmls3ksj18wwdbssysvpxkq98aqg4fgmx"; }) - (fetchurl { url = "http://mirrors.kernel.org/ubuntu/pool/multiverse/s/svox/libttspico-utils_${version}-${pkgrel}_${_arch}.deb"; sha256 = "11yk25fh4n7qz4xjg0dri68ygc3aapj1bk9cvhcwkfvm46j5lrjv"; }) - ] ; - - nativeBuildInputs = [ dpkg makeWrapper autoPatchelfHook ]; - - dontBuild = true; - - buildInputs = [ popt ]; - - unpackPhase = lib.concatMapStringsSep ";" (src: "dpkg-deb -x ${src} .") srcs; - - installPhase = '' - mkdir -p $out - cp -r usr/. $out/ - - mv $out/lib/*-linux-gnu/* $out/lib/ - rmdir $out/lib/*-linux-gnu - - wrapProgram "$out/bin/pico2wave" \ - --set LD_PRELOAD "${libredirect}/lib/libredirect.so" \ - --set NIX_REDIRECTS /usr/share/pico/lang=$out/share/pico/lang - ''; - - meta = with stdenv.lib; { - description = "Text-to-speech engine"; - homepage = https://android.googlesource.com/platform/external/svox; - platforms = platforms.linux; - license = licenses.asl20; - maintainers = with maintainers; [ abbradar ]; - }; -} diff --git a/makefu/5pkgs/studio-link/default.nix b/makefu/5pkgs/studio-link/default.nix index 8c796b43b..8786f3574 100644 --- a/makefu/5pkgs/studio-link/default.nix +++ b/makefu/5pkgs/studio-link/default.nix @@ -11,17 +11,22 @@ stdenv.mkDerivation rec { name = "studio-link-${version}"; version = "17.03.1-beta"; + src = fetchurl { url = "https://github.com/Studio-Link-v2/backend/releases/download/v${version}/studio-link-standalone-linux.zip"; sha256 = "1y21nymin7iy64hcffc8g37fv305b1nvmh944hkf7ipb06kcx6r9"; }; - nativeBuildInputs = [ unzip autoPatchelfHook ]; - buildInputs = [ - alsaLib - openssl_1_0_2 - zlib - libjack2 + nativeBuildInputs = [ + unzip + autoPatchelfHook + ]; + + buildInputs = [ + alsaLib + openssl_1_0_2 + zlib + libjack2 ]; unpackPhase = '' @@ -29,9 +34,7 @@ stdenv.mkDerivation rec { ''; installPhase = '' - mkdir -p $out/bin - cp studio-link-standalone $out/bin/studio-link - chmod +x $out/bin/studio-link + install -m755 -D studio-link-standalone $out/bin/studio-link ''; meta = with stdenv.lib; { diff --git a/makefu/krops.nix b/makefu/krops.nix index 6913a5c63..13a228d9d 100644 --- a/makefu/krops.nix +++ b/makefu/krops.nix @@ -46,6 +46,12 @@ }; }; } + (lib.mkIf (host-src.unstable) { + nixpkgs-unstable.git = { + url = "https://github.com/nixos/nixpkgs-channels"; + ref = (lib.importJSON ../krebs/nixpkgs-unstable.json).rev; + }; + }) (lib.mkIf (host-src.torrent) { torrent-secrets = if test then { file = toString ./0tests/data/secrets; @@ -71,7 +77,7 @@ (lib.mkIf ( host-src.home-manager ) { home-manager.git = { url = https://github.com/rycee/home-manager; - ref = "f856c78a4a220f44b64ce5045f228cbb9d4d9f31"; + ref = "9781f37"; }; }) ]; |