summaryrefslogtreecommitdiffstats
path: root/makefu
diff options
context:
space:
mode:
Diffstat (limited to 'makefu')
-rw-r--r--makefu/0tests/data/secrets/lego-binaergewitter0
-rw-r--r--makefu/0tests/data/wg-thierry.key0
-rw-r--r--makefu/1systems/cake/config.nix9
-rw-r--r--makefu/1systems/cake/hardware-config.nix38
-rw-r--r--makefu/1systems/cake/source.nix2
-rw-r--r--makefu/1systems/latte/config.nix7
-rw-r--r--makefu/1systems/omo/config.nix1
-rw-r--r--makefu/1systems/omo/source.nix2
-rw-r--r--makefu/1systems/x/config.nix1
-rw-r--r--makefu/2configs/bgt/download.binaergewitter.de.nix7
-rw-r--r--makefu/2configs/bitlbee.nix2
-rw-r--r--makefu/2configs/default.nix4
-rw-r--r--makefu/2configs/deployment/owncloud.nix2
-rw-r--r--makefu/2configs/home/3dprint.nix45
-rw-r--r--makefu/2configs/home/ham/automation/buttonboard.nix4
-rw-r--r--makefu/2configs/home/ham/automation/bye.txt.j22
-rw-r--r--makefu/2configs/home/ham/automation/check-in.nix77
-rw-r--r--makefu/2configs/home/ham/automation/daily_speedtext.nix17
-rw-r--r--makefu/2configs/home/ham/automation/fenster_auf.nix55
-rw-r--r--makefu/2configs/home/ham/automation/firetv_restart.nix22
-rw-r--r--makefu/2configs/home/ham/automation/flurlicht.nix12
-rw-r--r--makefu/2configs/home/ham/automation/shutdown_button.nix11
-rw-r--r--makefu/2configs/home/ham/automation/urlaub.nix7
-rw-r--r--makefu/2configs/home/ham/automation/welcome.txt.j245
-rw-r--r--makefu/2configs/home/ham/default.nix58
-rw-r--r--makefu/2configs/home/ham/lib/default.nix11
-rw-r--r--makefu/2configs/home/ham/light/tint_wohnzimmer.nix12
-rw-r--r--makefu/2configs/home/ham/media/arbeitszimmer_matrix.nix104
-rw-r--r--makefu/2configs/home/ham/media/firetv.nix13
-rw-r--r--makefu/2configs/home/ham/media/remote_sound_arbeitszimmer.nix5
-rw-r--r--makefu/2configs/home/ham/media/schlafzimmer_music_remote.nix158
-rw-r--r--makefu/2configs/home/ham/media/sonos.nix3
-rw-r--r--makefu/2configs/home/ham/sensor/dwd.nix8
-rw-r--r--makefu/2configs/home/ham/sensor/pollen.nix65
-rw-r--r--makefu/2configs/home/ham/signal-rest/service.nix2
-rw-r--r--makefu/2configs/home/ham/zigbee2mqtt.nix87
-rw-r--r--makefu/2configs/home/jellyfin.nix64
-rw-r--r--makefu/2configs/home/music.nix6
-rw-r--r--makefu/2configs/nginx/music.euer.nix26
-rw-r--r--makefu/2configs/remote-build/arm-emulation.nix25
-rw-r--r--makefu/2configs/share/gum-client.nix23
-rw-r--r--makefu/2configs/share/gum.nix9
-rw-r--r--makefu/2configs/share/hetzner-client.nix5
-rw-r--r--makefu/2configs/share/omo.nix6
-rw-r--r--makefu/2configs/tools/all.nix7
-rw-r--r--makefu/2configs/tools/dev.nix1
-rw-r--r--makefu/2configs/tools/games.nix1
-rw-r--r--makefu/2configs/tools/maker.nix16
-rw-r--r--makefu/2configs/wireguard/thierry.nix21
-rw-r--r--makefu/3modules/ps3netsrv.nix2
-rw-r--r--makefu/3modules/sane-extra.nix2
-rw-r--r--makefu/5pkgs/beef/Gemfile93
-rw-r--r--makefu/5pkgs/beef/Gemfile.lock297
-rw-r--r--makefu/5pkgs/beef/db-in-homedir.patch39
-rw-r--r--makefu/5pkgs/beef/default.nix45
-rw-r--r--makefu/5pkgs/beef/gemset.nix1293
-rw-r--r--makefu/5pkgs/beef/shell.nix16
-rwxr-xr-xmakefu/5pkgs/beef/update.sh28
-rw-r--r--makefu/5pkgs/custom/mediawiki-matrix-bot/default.nix11
-rw-r--r--makefu/5pkgs/default.nix5
-rw-r--r--makefu/5pkgs/ns-atmosphere-programmer/default.nix7
-rw-r--r--makefu/5pkgs/ps3netsrv/default.nix33
-rw-r--r--makefu/5pkgs/ratt/default.nix2
-rw-r--r--makefu/krops.nix7
64 files changed, 925 insertions, 2063 deletions
diff --git a/makefu/0tests/data/secrets/lego-binaergewitter b/makefu/0tests/data/secrets/lego-binaergewitter
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/makefu/0tests/data/secrets/lego-binaergewitter
diff --git a/makefu/0tests/data/wg-thierry.key b/makefu/0tests/data/wg-thierry.key
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/makefu/0tests/data/wg-thierry.key
diff --git a/makefu/1systems/cake/config.nix b/makefu/1systems/cake/config.nix
index 3befa201d..8b9812cf4 100644
--- a/makefu/1systems/cake/config.nix
+++ b/makefu/1systems/cake/config.nix
@@ -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;
}
diff --git a/makefu/1systems/cake/hardware-config.nix b/makefu/1systems/cake/hardware-config.nix
index d021f9458..a0cd4fac1 100644
--- a/makefu/1systems/cake/hardware-config.nix
+++ b/makefu/1systems/cake/hardware-config.nix
@@ -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;
}
diff --git a/makefu/1systems/cake/source.nix b/makefu/1systems/cake/source.nix
index 22c40039e..8fc2fff2d 100644
--- a/makefu/1systems/cake/source.nix
+++ b/makefu/1systems/cake/source.nix
@@ -1,4 +1,6 @@
{
name="cake";
full = true;
+ home-manager = true;
+ hw = true;
}
diff --git a/makefu/1systems/latte/config.nix b/makefu/1systems/latte/config.nix
index 69e401d97..44fa14812 100644
--- a/makefu/1systems/latte/config.nix
+++ b/makefu/1systems/latte/config.nix
@@ -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 = {
diff --git a/makefu/1systems/omo/config.nix b/makefu/1systems/omo/config.nix
index ee29c03d2..3ff1d0238 100644
--- a/makefu/1systems/omo/config.nix
+++ b/makefu/1systems/omo/config.nix
@@ -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
diff --git a/makefu/1systems/omo/source.nix b/makefu/1systems/omo/source.nix
index af508fbd6..b56e855fc 100644
--- a/makefu/1systems/omo/source.nix
+++ b/makefu/1systems/omo/source.nix
@@ -1,6 +1,6 @@
{
name="omo";
torrent = true;
- #unstable = true;
+ unstable = true;
home-manager = true;
}
diff --git a/makefu/1systems/x/config.nix b/makefu/1systems/x/config.nix
index 0377c336f..3f9e071e6 100644
--- a/makefu/1systems/x/config.nix
+++ b/makefu/1systems/x/config.nix
@@ -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>
diff --git a/makefu/2configs/bgt/download.binaergewitter.de.nix b/makefu/2configs/bgt/download.binaergewitter.de.nix
index 1cf21f213..d49ad158b 100644
--- a/makefu/2configs/bgt/download.binaergewitter.de.nix
+++ b/makefu/2configs/bgt/download.binaergewitter.de.nix
@@ -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 = ''
diff --git a/makefu/2configs/bitlbee.nix b/makefu/2configs/bitlbee.nix
index 52b5d68a5..21626d406 100644
--- a/makefu/2configs/bitlbee.nix
+++ b/makefu/2configs/bitlbee.nix
@@ -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" ];
diff --git a/makefu/2configs/default.nix b/makefu/2configs/default.nix
index 7905cf4eb..66c77e1eb 100644
--- a/makefu/2configs/default.nix
+++ b/makefu/2configs/default.nix
@@ -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;
}
diff --git a/makefu/2configs/deployment/owncloud.nix b/makefu/2configs/deployment/owncloud.nix
index e5c7e48de..b660720e5 100644
--- a/makefu/2configs/deployment/owncloud.nix
+++ b/makefu/2configs/deployment/owncloud.nix
@@ -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;
diff --git a/makefu/2configs/home/3dprint.nix b/makefu/2configs/home/3dprint.nix
new file mode 100644
index 000000000..859a18840
--- /dev/null
+++ b/makefu/2configs/home/3dprint.nix
@@ -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
+ };
+ };
+}
diff --git a/makefu/2configs/home/ham/automation/buttonboard.nix b/makefu/2configs/home/ham/automation/buttonboard.nix
new file mode 100644
index 000000000..533311fc5
--- /dev/null
+++ b/makefu/2configs/home/ham/automation/buttonboard.nix
@@ -0,0 +1,4 @@
+# good, bad radio
+# stop
+# start radio
+# lauter, leister
diff --git a/makefu/2configs/home/ham/automation/bye.txt.j2 b/makefu/2configs/home/ham/automation/bye.txt.j2
new file mode 100644
index 000000000..8a5ba7257
--- /dev/null
+++ b/makefu/2configs/home/ham/automation/bye.txt.j2
@@ -0,0 +1,2 @@
+Endlich ist Pappa fertig mit arbeit!
+Heute hast du {{ states("sensor.felix_at_work_today") |round(1) }} Stunden gearbeitet.
diff --git a/makefu/2configs/home/ham/automation/check-in.nix b/makefu/2configs/home/ham/automation/check-in.nix
index d589a6971..db051757e 100644
--- a/makefu/2configs/home/ham/automation/check-in.nix
+++ b/makefu/2configs/home/ham/automation/check-in.nix
@@ -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" ] ;
+ }
+ ];
}
];
}
diff --git a/makefu/2configs/home/ham/automation/daily_speedtext.nix b/makefu/2configs/home/ham/automation/daily_speedtext.nix
new file mode 100644
index 000000000..70d59f6e1
--- /dev/null
+++ b/makefu/2configs/home/ham/automation/daily_speedtext.nix
@@ -0,0 +1,17 @@
+{
+ services.home-assistant.config.automation =
+ [
+ {
+ trigger = [
+ { platform = "time"; at = "03:21"; }
+ ];
+ action =
+ [
+ {
+ service = "speedtestdotnet.speedtest";
+ }
+ ];
+ }
+ ];
+
+}
diff --git a/makefu/2configs/home/ham/automation/fenster_auf.nix b/makefu/2configs/home/ham/automation/fenster_auf.nix
index fa2052be8..b3682fe0c 100644
--- a/makefu/2configs/home/ham/automation/fenster_auf.nix
+++ b/makefu/2configs/home/ham/automation/fenster_auf.nix
@@ -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");
+ }
];
};
}
diff --git a/makefu/2configs/home/ham/automation/firetv_restart.nix b/makefu/2configs/home/ham/automation/firetv_restart.nix
index 12e0e845a..01d1ba6e9 100644
--- a/makefu/2configs/home/ham/automation/firetv_restart.nix
+++ b/makefu/2configs/home/ham/automation/firetv_restart.nix
@@ -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")
];
}
];
diff --git a/makefu/2configs/home/ham/automation/flurlicht.nix b/makefu/2configs/home/ham/automation/flurlicht.nix
index aa62ab9e4..bb4877100 100644
--- a/makefu/2configs/home/ham/automation/flurlicht.nix
+++ b/makefu/2configs/home/ham/automation/flurlicht.nix
@@ -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"; }
diff --git a/makefu/2configs/home/ham/automation/shutdown_button.nix b/makefu/2configs/home/ham/automation/shutdown_button.nix
index 4c12be277..ec1a25567 100644
--- a/makefu/2configs/home/ham/automation/shutdown_button.nix
+++ b/makefu/2configs/home/ham/automation/shutdown_button.nix
@@ -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";
diff --git a/makefu/2configs/home/ham/automation/urlaub.nix b/makefu/2configs/home/ham/automation/urlaub.nix
index c11c589cf..7f47c9da5 100644
--- a/makefu/2configs/home/ham/automation/urlaub.nix
+++ b/makefu/2configs/home/ham/automation/urlaub.nix
@@ -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; }
];
diff --git a/makefu/2configs/home/ham/automation/welcome.txt.j2 b/makefu/2configs/home/ham/automation/welcome.txt.j2
new file mode 100644
index 000000000..76091b868
--- /dev/null
+++ b/makefu/2configs/home/ham/automation/welcome.txt.j2
@@ -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 -%}
diff --git a/makefu/2configs/home/ham/default.nix b/makefu/2configs/home/ham/default.nix
index f54fd32f7..b08152935 100644
--- a/makefu/2configs/home/ham/default.nix
+++ b/makefu/2configs/home/ham/default.nix
@@ -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;
diff --git a/makefu/2configs/home/ham/lib/default.nix b/makefu/2configs/home/ham/lib/default.nix
index 67e8e902d..cf1c32abd 100644
--- a/makefu/2configs/home/ham/lib/default.nix
+++ b/makefu/2configs/home/ham/lib/default.nix
@@ -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";
diff --git a/makefu/2configs/home/ham/light/tint_wohnzimmer.nix b/makefu/2configs/home/ham/light/tint_wohnzimmer.nix
index 474bf5c99..243243816 100644
--- a/makefu/2configs/home/ham/light/tint_wohnzimmer.nix
+++ b/makefu/2configs/home/ham/light/tint_wohnzimmer.nix
@@ -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";
diff --git a/makefu/2configs/home/ham/media/arbeitszimmer_matrix.nix b/makefu/2configs/home/ham/media/arbeitszimmer_matrix.nix
new file mode 100644
index 000000000..26fec370f
--- /dev/null
+++ b/makefu/2configs/home/ham/media/arbeitszimmer_matrix.nix
@@ -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 = { };
+ }
+ ];
+ }
+ ];
+
+}
diff --git a/makefu/2configs/home/ham/media/firetv.nix b/makefu/2configs/home/ham/media/firetv.nix
index 429688c6a..fc33346cd 100644
--- a/makefu/2configs/home/ham/media/firetv.nix
+++ b/makefu/2configs/home/ham/media/firetv.nix
@@ -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;
}
diff --git a/makefu/2configs/home/ham/media/remote_sound_arbeitszimmer.nix b/makefu/2configs/home/ham/media/remote_sound_arbeitszimmer.nix
index f59f022f4..cfa1da44e 100644
--- a/makefu/2configs/home/ham/media/remote_sound_arbeitszimmer.nix
+++ b/makefu/2configs/home/ham/media/remote_sound_arbeitszimmer.nix
@@ -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 ( " +
diff --git a/makefu/2configs/home/ham/media/schlafzimmer_music_remote.nix b/makefu/2configs/home/ham/media/schlafzimmer_music_remote.nix
new file mode 100644
index 000000000..438ce6bda
--- /dev/null
+++ b/makefu/2configs/home/ham/media/schlafzimmer_music_remote.nix
@@ -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 = { };
+ }
+ ];
+ }
+ ];
+
+}
diff --git a/makefu/2configs/home/ham/media/sonos.nix b/makefu/2configs/home/ham/media/sonos.nix
index 40dcfc3ca..c9cf1a510 100644
--- a/makefu/2configs/home/ham/media/sonos.nix
+++ b/makefu/2configs/home/ham/media/sonos.nix
@@ -4,5 +4,4 @@
"192.168.111.31"
"192.168.111.32"
];
-
- }
+}
diff --git a/makefu/2configs/home/ham/sensor/dwd.nix b/makefu/2configs/home/ham/sensor/dwd.nix
new file mode 100644
index 000000000..c1d55d03c
--- /dev/null
+++ b/makefu/2configs/home/ham/sensor/dwd.nix
@@ -0,0 +1,8 @@
+{
+ services.home-assistant.config.sensor =
+ [
+ { platform = "dwd_weather_warnings";
+ region_name = "Stadt Stuttgart";
+ }
+ ];
+}
diff --git a/makefu/2configs/home/ham/sensor/pollen.nix b/makefu/2configs/home/ham/sensor/pollen.nix
new file mode 100644
index 000000000..d95c199bf
--- /dev/null
+++ b/makefu/2configs/home/ham/sensor/pollen.nix
@@ -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)) ;
+ }
+ ];
+}
diff --git a/makefu/2configs/home/ham/signal-rest/service.nix b/makefu/2configs/home/ham/signal-rest/service.nix
index 250a3596d..1f718efa5 100644
--- a/makefu/2configs/home/ham/signal-rest/service.nix
+++ b/makefu/2configs/home/ham/signal-rest/service.nix
@@ -14,5 +14,7 @@ in {
volumes = [
"${config}:/home/.local/share/signal-cli"
];
+ environment.MODE ="json-rpc";
+ #environment.MODE ="native"; # only required for reigstration
};
}
diff --git a/makefu/2configs/home/ham/zigbee2mqtt.nix b/makefu/2configs/home/ham/zigbee2mqtt.nix
index 7809dbb51..efcbb0d00 100644
--- a/makefu/2configs/home/ham/zigbee2mqtt.nix
+++ b/makefu/2configs/home/ham/zigbee2mqtt.nix
@@ -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;
- };
};
}
diff --git a/makefu/2configs/home/jellyfin.nix b/makefu/2configs/home/jellyfin.nix
index 672a483e5..acfdb2599 100644
--- a/makefu/2configs/home/jellyfin.nix
+++ b/makefu/2configs/home/jellyfin.nix
@@ -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";
+ };
+ };
}
diff --git a/makefu/2configs/home/music.nix b/makefu/2configs/home/music.nix
index 7f5a425d2..7dd8ca6e1 100644
--- a/makefu/2configs/home/music.nix
+++ b/makefu/2configs/home/music.nix
@@ -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 ];
}
diff --git a/makefu/2configs/nginx/music.euer.nix b/makefu/2configs/nginx/music.euer.nix
new file mode 100644
index 000000000..e866f1b0d
--- /dev/null
+++ b/makefu/2configs/nginx/music.euer.nix
@@ -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;
+ '';
+ };
+ };
+ };
+}
diff --git a/makefu/2configs/remote-build/arm-emulation.nix b/makefu/2configs/remote-build/arm-emulation.nix
new file mode 100644
index 000000000..dbef25222
--- /dev/null
+++ b/makefu/2configs/remote-build/arm-emulation.nix
@@ -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" ];
+}
diff --git a/makefu/2configs/share/gum-client.nix b/makefu/2configs/share/gum-client.nix
index db2adfb1c..5192ef515 100644
--- a/makefu/2configs/share/gum-client.nix
+++ b/makefu/2configs/share/gum-client.nix
@@ -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"
];
};
diff --git a/makefu/2configs/share/gum.nix b/makefu/2configs/share/gum.nix
index fd81f28ca..9647e0a6c 100644
--- a/makefu/2configs/share/gum.nix
+++ b/makefu/2configs/share/gum.nix
@@ -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";
diff --git a/makefu/2configs/share/hetzner-client.nix b/makefu/2configs/share/hetzner-client.nix
index 90bc32deb..dc8637361 100644
--- a/makefu/2configs/share/hetzner-client.nix
+++ b/makefu/2configs/share/hetzner-client.nix
@@ -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"
];
};
}
diff --git a/makefu/2configs/share/omo.nix b/makefu/2configs/share/omo.nix
index e53158b8f..4756ccf81 100644
--- a/makefu/2configs/share/omo.nix
+++ b/makefu/2configs/share/omo.nix
@@ -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
diff --git a/makefu/2configs/tools/all.nix b/makefu/2configs/tools/all.nix
index 6844fdfe4..37673768a 100644
--- a/makefu/2configs/tools/all.nix
+++ b/makefu/2configs/tools/all.nix
@@ -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
];
}
diff --git a/makefu/2configs/tools/dev.nix b/makefu/2configs/tools/dev.nix
index 66bc9a0e6..2b9baa9c5 100644
--- a/makefu/2configs/tools/dev.nix
+++ b/makefu/2configs/tools/dev.nix
@@ -22,6 +22,7 @@
brain
whatsupnix
nixpkgs-pytools
+ nixpkgs-fmt
hydra-check
# git-related
git-preview
diff --git a/makefu/2configs/tools/games.nix b/makefu/2configs/tools/games.nix
index 0f1e61791..507887cff 100644
--- a/makefu/2configs/tools/games.nix
+++ b/makefu/2configs/tools/games.nix
@@ -8,5 +8,6 @@
games-user-env
wine
pkg2zip
+ steam
];
}
diff --git a/makefu/2configs/tools/maker.nix b/makefu/2configs/tools/maker.nix
new file mode 100644
index 000000000..8388db583
--- /dev/null
+++ b/makefu/2configs/tools/maker.nix
@@ -0,0 +1,16 @@
+{ pkgs, ... }:
+{
+ users.users.makefu.packages = with pkgs; [
+ # media
+ picard
+ asunder
+ #darkice
+ lame
+ # creation
+ blender
+ openscad
+ # slicing
+ cura
+ chitubox
+ ];
+}
diff --git a/makefu/2configs/wireguard/thierry.nix b/makefu/2configs/wireguard/thierry.nix
new file mode 100644
index 000000000..f1dfef192
--- /dev/null
+++ b/makefu/2configs/wireguard/thierry.nix
@@ -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=";
+ #}
+ ];
+ };
+}
diff --git a/makefu/3modules/ps3netsrv.nix b/makefu/3modules/ps3netsrv.nix
index bb2abd9a5..a0a6eb1f4 100644
--- a/makefu/3modules/ps3netsrv.nix
+++ b/makefu/3modules/ps3netsrv.nix
@@ -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}";
};
diff --git a/makefu/3modules/sane-extra.nix b/makefu/3modules/sane-extra.nix
index 2e0ce8f2f..8cbed572c 100644
--- a/makefu/3modules/sane-extra.nix
+++ b/makefu/3modules/sane-extra.nix
@@ -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
diff --git a/makefu/5pkgs/beef/Gemfile b/makefu/5pkgs/beef/Gemfile
deleted file mode 100644
index 759ba2d23..000000000
--- a/makefu/5pkgs/beef/Gemfile
+++ /dev/null
@@ -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'
-
-
-
-
-
diff --git a/makefu/5pkgs/beef/Gemfile.lock b/makefu/5pkgs/beef/Gemfile.lock
deleted file mode 100644
index fa6f32335..000000000
--- a/makefu/5pkgs/beef/Gemfile.lock
+++ /dev/null
@@ -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
diff --git a/makefu/5pkgs/beef/db-in-homedir.patch b/makefu/5pkgs/beef/db-in-homedir.patch
deleted file mode 100644
index e8dd8e3db..000000000
--- a/makefu/5pkgs/beef/db-in-homedir.patch
+++ /dev/null
@@ -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
diff --git a/makefu/5pkgs/beef/default.nix b/makefu/5pkgs/beef/default.nix
deleted file mode 100644
index c99577caf..000000000
--- a/makefu/5pkgs/beef/default.nix
+++ /dev/null
@@ -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 ];
- };
-
-}
diff --git a/makefu/5pkgs/beef/gemset.nix b/makefu/5pkgs/beef/gemset.nix
deleted file mode 100644
index 507ef9a27..000000000
--- a/makefu/5pkgs/beef/gemset.nix
+++ /dev/null
@@ -1,1293 +0,0 @@
-{
- activemodel = {
- dependencies = ["activesupport"];
- groups = ["default"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "0xjy8fg7n5wwv29ngvvdf5r6815s5f0knzyswxh8w6z8f8qj5wr7";
- type = "gem";
- };
- version = "6.1.4";
- };
- activerecord = {
- dependencies = ["activemodel" "activesupport"];
- groups = ["default"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "18897s9h9kha8vgky1yfq4x91m3p81k6rkrb1fgjlnqnvarh9vg0";
- type = "gem";
- };
- version = "6.1.4";
- };
- activesupport = {
- dependencies = ["concurrent-ruby" "i18n" "minitest" "tzinfo" "zeitwerk"];
- groups = ["default"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "0kqgywy4cj3h5142dh7pl0xx5nybp25jn0ykk0znziivzks68xdk";
- type = "gem";
- };
- version = "6.1.4";
- };
- addressable = {
- dependencies = ["public_suffix"];
- groups = ["default" "ext_notifications" "test"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "022r3m9wdxljpbya69y2i3h9g3dhhfaqzidf95m6qjzms792jvgp";
- type = "gem";
- };
- version = "2.8.0";
- };
- ansi = {
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "14ims9zfal4gs2wpx2m5rd8zsrl2k794d359shkrsgg3fhr2a22l";
- type = "gem";
- };
- version = "1.5.0";
- };
- archive-zip = {
- dependencies = ["io-like"];
- groups = ["default" "test"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "0ywpxgmhazmqcsjf3qhim3rdnbyjjl9nkj91kqgmrjq5q8j0r386";
- type = "gem";
- };
- version = "0.12.0";
- };
- ast = {
- groups = ["default"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "04nc8x27hlzlrr5c2gn7mar4vdr0apw5xg22wp6m8dx3wqr04a0y";
- type = "gem";
- };
- version = "2.4.2";
- };
- async = {
- dependencies = ["console" "nio4r" "timers"];
- groups = ["default" "ext_dns"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "0mdv66xn5xjyaidyrp66mfnx7d4habkbfmx9y57k75h5q6fd2b65";
- type = "gem";
- };
- version = "1.30.1";
- };
- async-dns = {
- dependencies = ["async-io"];
- groups = ["ext_dns"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "1jwgzdp0qi31c8wlflhqvjj5w1vfwyai9j2yzxrpsqjzcmwhiv90";
- type = "gem";
- };
- version = "1.2.6";
- };
- async-io = {
- dependencies = ["async"];
- groups = ["default" "ext_dns"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "10l9m0x2ffvsaaxc4mfalrljjx13njkyir9w6yfif8wpszc291h8";
- type = "gem";
- };
- version = "1.32.2";
- };
- browserstack-local = {
- groups = ["test"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "0wch4m064szfkk9fyp7f1yvkpbc3ajqdql0k4pjmqj2z38spsz9i";
- type = "gem";
- };
- version = "1.3.0";
- };
- buftok = {
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "1rzsy1vy50v55x9z0nivf23y0r9jkmq6i130xa75pq9i8qrn1mxs";
- type = "gem";
- };
- version = "0.2.0";
- };
- byebug = {
- groups = ["default" "test"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "0nx3yjf4xzdgb8jkmk2344081gqr22pgjqnmjg2q64mj5d6r9194";
- type = "gem";
- };
- version = "11.1.3";
- };
- capybara = {
- dependencies = ["addressable" "mini_mime" "nokogiri" "rack" "rack-test" "regexp_parser" "xpath"];
- groups = ["test"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "1viqcpsngy9fqjd68932m43ad6xj656d1x33nx9565q57chgi29k";
- type = "gem";
- };
- version = "3.35.3";
- };
- childprocess = {
- groups = ["default" "test"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "1ic028k8xgm2dds9mqnvwwx3ibaz32j8455zxr9f4bcnviyahya5";
- type = "gem";
- };
- version = "3.0.0";
- };
- coderay = {
- groups = ["default" "test"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "0jvxqxzply1lwp7ysn94zjhh57vc14mcshw1ygw14ib8lhc00lyw";
- type = "gem";
- };
- version = "1.1.3";
- };
- concurrent-ruby = {
- groups = ["default"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "0nwad3211p7yv9sda31jmbyw6sdafzmdi2i2niaz6f0wk5nq9h0f";
- type = "gem";
- };
- version = "1.1.9";
- };
- console = {
- dependencies = ["fiber-local"];
- groups = ["default" "ext_dns"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "04vhg3vnj2ky00fld4v6qywx32z4pjsa7l8i7sl1bl213s8334l9";
- type = "gem";
- };
- version = "1.13.1";
- };
- curb = {
- groups = ["test"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "1q7kqswm780vx1fannnrprbfbsp166smgyszgip5q7b859mk89wp";
- type = "gem";
- };
- version = "0.9.11";
- };
- daemons = {
- groups = ["default"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "1fki1aipqafqlg8xy25ykk0ql1dciy9kk6lcp5gzgkh9ccmaxzf3";
- type = "gem";
- };
- version = "1.4.0";
- };
- diff-lcs = {
- groups = ["default" "test"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "0m925b8xc6kbpnif9dldna24q1szg4mk0fvszrki837pfn46afmz";
- type = "gem";
- };
- version = "1.4.4";
- };
- domain_name = {
- dependencies = ["unf"];
- groups = ["default" "ext_notifications" "test"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "0lcqjsmixjp52bnlgzh4lg9ppsk52x9hpwdjd53k8jnbah2602h0";
- type = "gem";
- };
- version = "0.5.20190701";
- };
- em-websocket = {
- dependencies = ["eventmachine" "http_parser.rb"];
- groups = ["default"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "1mg1mx735a0k1l8y14ps2mxdwhi5r01ikydf34b0sp60v66nvbkb";
- type = "gem";
- };
- version = "0.5.2";
- };
- equalizer = {
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "1kjmx3fygx8njxfrwcmn7clfhjhb6bvv3scy2lyyi0wqyi3brra4";
- type = "gem";
- };
- version = "0.0.11";
- };
- erubis = {
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "1fj827xqjs91yqsydf0zmfyw9p4l2jz5yikg3mppz6d7fi8kyrb3";
- type = "gem";
- };
- version = "2.7.0";
- };
- espeak-ruby = {
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "0d658zr53jibyrs5qnic7bfl6h69k5987s8asncsbnxwbzzilj6y";
- type = "gem";
- };
- version = "1.0.4";
- };
- event_emitter = {
- groups = ["default" "test"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "148k9qv8102l3m6klc24dwip79f9y4bjr5z19dckd7ffbjyrf9n7";
- type = "gem";
- };
- version = "0.2.6";
- };
- eventmachine = {
- groups = ["default"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "0wh9aqb0skz80fhfn66lbpr4f86ya2z5rx6gm5xlfhd05bj1ch4r";
- type = "gem";
- };
- version = "1.2.7";
- };
- execjs = {
- groups = ["default"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "121h6af4i6wr3wxvv84y53jcyw2sk71j5wsncm6wq6yqrwcrk4vd";
- type = "gem";
- };
- version = "2.8.1";
- };
- ffi = {
- groups = ["default" "ext_notifications"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "1wgvaclp4h9y8zkrgz8p2hqkrgr4j7kz0366mik0970w532cbmcq";
- type = "gem";
- };
- version = "1.15.3";
- };
- ffi-compiler = {
- dependencies = ["ffi" "rake"];
- groups = ["default" "ext_notifications"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "0c2caqm9wqnbidcb8dj4wd3s902z15qmgxplwyfyqbwa0ydki7q1";
- type = "gem";
- };
- version = "1.0.1";
- };
- fiber-local = {
- groups = ["default" "ext_dns"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "1vrxxb09fc7aicb9zb0pmn5akggjy21dmxkdl3w949y4q05rldr9";
- type = "gem";
- };
- version = "1.0.0";
- };
- geckodriver-helper = {
- dependencies = ["archive-zip"];
- groups = ["test"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "14zw0hxsqhz8pirm4rll0wmv2yhsfdjf5pkp3pxg46jsryfpm288";
- type = "gem";
- };
- version = "0.24.0";
- };
- hashie = {
- groups = ["default"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "02bsx12ihl78x0vdm37byp78jjw2ff6035y7rrmbd90qxjwxr43q";
- type = "gem";
- };
- version = "4.1.0";
- };
- hashie-forbidden_attributes = {
- dependencies = ["hashie"];
- groups = ["default"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "1chgg5d2iddja6ww02x34g8avg11fzmzcb8yvnqlykii79zx6vis";
- type = "gem";
- };
- version = "0.1.1";
- };
- http = {
- dependencies = ["addressable" "http-cookie" "http-form_data" "http-parser"];
- groups = ["default" "ext_notifications"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "0z8vmvnkrllkpzsxi94284di9r63g9v561a16an35izwak8g245y";
- type = "gem";
- };
- version = "4.4.1";
- };
- http-accept = {
- groups = ["default" "ext_notifications" "test"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "09m1facypsdjynfwrcv19xcb1mqg8z6kk31g8r33pfxzh838c9n6";
- type = "gem";
- };
- version = "1.7.0";
- };
- http-cookie = {
- dependencies = ["domain_name"];
- groups = ["default" "ext_notifications" "test"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "19370bc97gsy2j4hanij246hv1ddc85hw0xjb6sj7n1ykqdlx9l9";
- type = "gem";
- };
- version = "1.0.4";
- };
- http-form_data = {
- groups = ["default" "ext_notifications"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "1wx591jdhy84901pklh1n9sgh74gnvq1qyqxwchni1yrc49ynknc";
- type = "gem";
- };
- version = "2.3.0";
- };
- http-parser = {
- dependencies = ["ffi-compiler"];
- groups = ["default" "ext_notifications"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "18qqvckvqjffh88hfib6c8pl9qwk9gp89w89hl3f2s1x8hgyqka1";
- type = "gem";
- };
- version = "1.2.3";
- };
- "http_parser.rb" = {
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "15nidriy0v5yqfjsgsra51wmknxci2n2grliz78sf9pga3n0l7gi";
- type = "gem";
- };
- version = "0.6.0";
- };
- i18n = {
- dependencies = ["concurrent-ruby"];
- groups = ["default"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "0g2fnag935zn2ggm5cn6k4s4xvv53v2givj1j90szmvavlpya96a";
- type = "gem";
- };
- version = "1.8.10";
- };
- io-console = {
- groups = ["default" "test"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "0pmafwxh8z1apnk7bb1ibnbhfrgb1jgilxm4j8d0fcqlc2ggmbja";
- type = "gem";
- };
- version = "0.5.9";
- };
- io-like = {
- groups = ["default" "test"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "01l358q8smk99k6c2h5zygyw4flqg93zk4x61amp9slbs4j0gbms";
- type = "gem";
- };
- version = "0.3.1";
- };
- irb = {
- dependencies = ["reline"];
- groups = ["test"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "0s4yjh5p1n05cm3pglh3g4ssrgy67x2bn3bsl0sydbm8mlf3xivr";
- type = "gem";
- };
- version = "1.3.6";
- };
- json = {
- groups = ["default" "ext_notifications"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "0lrirj0gw420kw71bjjlqkqhqbrplla61gbv1jzgsz6bv90qr3ci";
- type = "gem";
- };
- version = "2.5.1";
- };
- maxmind-db = {
- groups = ["geoip"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "0n0cazcsjd5cm50qg3iiy3cqvjg1zc40mmcllx88lj9wg0f1j4v9";
- type = "gem";
- };
- version = "1.1.1";
- };
- memoizable = {
- dependencies = ["thread_safe"];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "0v42bvghsvfpzybfazl14qhkrjvx0xlmxz0wwqc960ga1wld5x5c";
- type = "gem";
- };
- version = "0.4.2";
- };
- method_source = {
- groups = ["default" "test"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "1pnyh44qycnf9mzi1j6fywd5fkskv3x7nmsqrrws0rjn5dd4ayfp";
- type = "gem";
- };
- version = "1.0.0";
- };
- mime-types = {
- dependencies = ["mime-types-data"];
- groups = ["default" "ext_notifications" "test"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "1zj12l9qk62anvk9bjvandpa6vy4xslil15wl6wlivyf51z773vh";
- type = "gem";
- };
- version = "3.3.1";
- };
- mime-types-data = {
- groups = ["default" "ext_notifications" "test"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "0dlxwc75iy0dj23x824cxpvpa7c8aqcpskksrmb32j6m66h5mkcy";
- type = "gem";
- };
- version = "3.2021.0704";
- };
- mini_mime = {
- groups = ["default" "test"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "0kb7jq3wjgckmkzna799y5qmvn6vg52878bkgw35qay6lflcrwih";
- type = "gem";
- };
- version = "1.1.0";
- };
- mini_portile2 = {
- groups = ["default" "test"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "1lvxm91hi0pabnkkg47wh1siv56s6slm2mdq1idfm86dyfidfprq";
- type = "gem";
- };
- version = "2.6.1";
- };
- minitest = {
- groups = ["default"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "19z7wkhg59y8abginfrm2wzplz7py3va8fyngiigngqvsws6cwgl";
- type = "gem";
- };
- version = "5.14.4";
- };
- mojo_magick = {
- groups = ["default" "ext_qrcode"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "0r5b4jckcylg5q8dm0rzczkfaifjqf9p62hkkgj52k708q00vcpv";
- type = "gem";
- };
- version = "0.6.6";
- };
- msfrpc-client = {
- dependencies = ["msgpack"];
- groups = ["ext_msf"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "07hjr9j39n0hxlh26a69bsyhkgflxv8kwv8d10930njw3vgknq22";
- type = "gem";
- };
- version = "1.1.2";
- };
- msgpack = {
- groups = ["default" "ext_msf"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "06iajjyhx0rvpn4yr3h1hc4w4w3k59bdmfhxnjzzh76wsrdxxrc6";
- type = "gem";
- };
- version = "1.4.2";
- };
- multipart-post = {
- groups = ["default" "ext_notifications"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "1zgw9zlwh2a6i1yvhhc4a84ry1hv824d6g2iw2chs3k5aylpmpfj";
- type = "gem";
- };
- version = "2.1.1";
- };
- mustermann = {
- dependencies = ["ruby2_keywords"];
- groups = ["default"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "0ccm54qgshr1lq3pr1dfh7gphkilc19dp63rw6fcx7460pjwy88a";
- type = "gem";
- };
- version = "1.1.1";
- };
- naught = {
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "1wwjx35zgbc0nplp8a866iafk4zsrbhwwz4pav5gydr2wm26nksg";
- type = "gem";
- };
- version = "1.1.0";
- };
- netrc = {
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "0gzfmcywp1da8nzfqsql2zqi648mfnx6qwkig3cv36n9m0yy676y";
- type = "gem";
- };
- version = "0.11.0";
- };
- nio4r = {
- groups = ["default" "ext_dns"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "0xk64wghkscs6bv2n22853k2nh39d131c6rfpnlw12mbjnnv9v1v";
- type = "gem";
- };
- version = "2.5.8";
- };
- nokogiri = {
- dependencies = ["mini_portile2" "racc"];
- groups = ["default" "test"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "1iav4jrklvm8938bxhby0khs36mdndhvwia4hc85zxcb0yl1k8ll";
- type = "gem";
- };
- version = "1.12.2";
- };
- otr-activerecord = {
- dependencies = ["activerecord" "hashie-forbidden_attributes"];
- groups = ["default"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "1fzid0yyiyq565q1yi312adgfy3ybwkl5bc8ng338zb2szvjd3p3";
- type = "gem";
- };
- version = "2.0.1";
- };
- parallel = {
- groups = ["default"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "0055br0mibnqz0j8wvy20zry548dhkakws681bhj3ycb972awkzd";
- type = "gem";
- };
- version = "1.20.1";
- };
- parseconfig = {
- groups = ["default"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "09qhqrhcy7jwz4wls2l6z4dx4428csy27nbscxn72rd973k390yi";
- type = "gem";
- };
- version = "1.1.0";
- };
- parser = {
- dependencies = ["ast"];
- groups = ["default"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "06ma6w87ph8lnc9z4hi40ynmcdnjv0p8x53x0s3fjkz4q2p6sxh5";
- type = "gem";
- };
- version = "3.0.2.0";
- };
- power_assert = {
- groups = ["default" "test"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "172qfmzwxdf82bmwgcb13hnz9i3p6i2s2nijxnx6r63kn3drjppr";
- type = "gem";
- };
- version = "2.0.0";
- };
- pry = {
- dependencies = ["coderay" "method_source"];
- groups = ["default" "test"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "0iyw4q4an2wmk8v5rn2ghfy2jaz9vmw2nk8415nnpx2s866934qk";
- type = "gem";
- };
- version = "0.13.1";
- };
- pry-byebug = {
- dependencies = ["byebug" "pry"];
- groups = ["test"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "096y5vmzpyy4x9h4ky4cs4y7d19vdq9vbwwrqafbh5gagzwhifiv";
- type = "gem";
- };
- version = "3.9.0";
- };
- public_suffix = {
- groups = ["default" "ext_notifications" "test"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "1xqcgkl7bwws1qrlnmxgh8g4g9m10vg60bhlw40fplninb3ng6d9";
- type = "gem";
- };
- version = "4.0.6";
- };
- qr4r = {
- dependencies = ["mojo_magick" "rqrcode_core"];
- groups = ["ext_qrcode"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "0g534ra5v61lnxwp0qg9apmhk1ra44zax9fg1g7jlhbaf2ni6cpk";
- type = "gem";
- };
- version = "0.6.1";
- };
- racc = {
- groups = ["default" "test"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "178k7r0xn689spviqzhvazzvxfq6fyjldxb3ywjbgipbfi4s8j1g";
- type = "gem";
- };
- version = "1.5.2";
- };
- rack = {
- groups = ["default" "test"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "0i5vs0dph9i5jn8dfc6aqd6njcafmb20rwqngrf759c9cvmyff16";
- type = "gem";
- };
- version = "2.2.3";
- };
- rack-protection = {
- dependencies = ["rack"];
- groups = ["default"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "159a4j4kragqh0z0z8vrpilpmaisnlz3n7kgiyf16bxkwlb3qlhz";
- type = "gem";
- };
- version = "2.1.0";
- };
- rack-test = {
- dependencies = ["rack"];
- groups = ["default" "test"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "0rh8h376mx71ci5yklnpqqn118z3bl67nnv5k801qaqn1zs62h8m";
- type = "gem";
- };
- version = "1.1.0";
- };
- rainbow = {
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "0bb2fpjspydr6x0s8pn1pqkzmxszvkfapv0p4627mywl7ky4zkhk";
- type = "gem";
- };
- version = "3.0.0";
- };
- rake = {
- groups = ["default" "ext_notifications"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "15whn7p9nrkxangbs9hh75q585yfn66lv0v2mhj6q6dl6x8bzr2w";
- type = "gem";
- };
- version = "13.0.6";
- };
- rdoc = {
- groups = ["test"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "19h5g3g7k7wggy9amfx8b3m09ss7wrakbrva2xnda9sw4chagx6y";
- type = "gem";
- };
- version = "6.3.2";
- };
- regexp_parser = {
- groups = ["default" "test"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "0vg7imjnfcqjx7kw94ccj5r78j4g190cqzi1i59sh4a0l940b9cr";
- type = "gem";
- };
- version = "2.1.1";
- };
- reline = {
- dependencies = ["io-console"];
- groups = ["default" "test"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "10sib8k5w0x6s94infm657ys0k52kxql4cnkvfa7bcgy14r3qbza";
- type = "gem";
- };
- version = "0.2.6";
- };
- rest-client = {
- dependencies = ["http-accept" "http-cookie" "mime-types" "netrc"];
- groups = ["ext_notifications" "test"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "1qs74yzl58agzx9dgjhcpgmzfn61fqkk33k1js2y5yhlvc5l19im";
- type = "gem";
- };
- version = "2.1.0";
- };
- rexml = {
- groups = ["default"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "08ximcyfjy94pm1rhcx04ny1vx2sk0x4y185gzn86yfsbzwkng53";
- type = "gem";
- };
- version = "3.2.5";
- };
- rqrcode_core = {
- groups = ["default" "ext_qrcode"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "00kqasqja8zyzqvlgiwd9r0wndqk01qk5j68a8lhlz4ayrd4qy0y";
- type = "gem";
- };
- version = "0.2.0";
- };
- rr = {
- groups = ["default" "test"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "0ngsigzy06lz40vnvzmkbn6ch6rlk0czfn8228cwvd3lc4qkggna";
- type = "gem";
- };
- version = "3.0.5";
- };
- rspec = {
- dependencies = ["rspec-core" "rspec-expectations" "rspec-mocks"];
- groups = ["test"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "1dwai7jnwmdmd7ajbi2q0k0lx1dh88knv5wl7c34wjmf94yv8w5q";
- type = "gem";
- };
- version = "3.10.0";
- };
- rspec-core = {
- dependencies = ["rspec-support"];
- groups = ["default" "test"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "0wwnfhxxvrlxlk1a3yxlb82k2f9lm0yn0598x7lk8fksaz4vv6mc";
- type = "gem";
- };
- version = "3.10.1";
- };
- rspec-expectations = {
- dependencies = ["diff-lcs" "rspec-support"];
- groups = ["default" "test"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "1sz9bj4ri28adsklnh257pnbq4r5ayziw02qf67wry0kvzazbb17";
- type = "gem";
- };
- version = "3.10.1";
- };
- rspec-mocks = {
- dependencies = ["diff-lcs" "rspec-support"];
- groups = ["default" "test"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "1d13g6kipqqc9lmwz5b244pdwc97z15vcbnbq6n9rlf32bipdz4k";
- type = "gem";
- };
- version = "3.10.2";
- };
- rspec-support = {
- groups = ["default" "test"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "15j52parvb8cgvl6s0pbxi2ywxrv6x0764g222kz5flz0s4mycbl";
- type = "gem";
- };
- version = "3.10.2";
- };
- rubocop = {
- dependencies = ["parallel" "parser" "rainbow" "regexp_parser" "rexml" "rubocop-ast" "ruby-progressbar" "unicode-display_width"];
- groups = ["default"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "0jrfcxs7qm2jamh44djz322c8xpg8zyllg6xyk0r0qnvk71dwlrn";
- type = "gem";
- };
- version = "0.92.0";
- };
- rubocop-ast = {
- dependencies = ["parser"];
- groups = ["default"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "0dbbll8k2xqdfpirzpfl3gi4asplay25mg91510i7qb601xbjpcy";
- type = "gem";
- };
- version = "1.8.0";
- };
- ruby-progressbar = {
- groups = ["default"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "02nmaw7yx9kl7rbaan5pl8x5nn0y4j5954mzrkzi9i3dhsrps4nc";
- type = "gem";
- };
- version = "1.11.0";
- };
- ruby2_keywords = {
- groups = ["default"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "1vz322p8n39hz3b4a9gkmz9y7a5jaz41zrm2ywf31dvkqm03glgz";
- type = "gem";
- };
- version = "0.0.5";
- };
- rubyzip = {
- groups = ["default" "test"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "0grps9197qyxakbpw02pda59v45lfgbgiyw48i0mq9f2bn9y6mrz";
- type = "gem";
- };
- version = "2.3.2";
- };
- rushover = {
- dependencies = ["json" "rest-client"];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "0j6x61drcdfnbvgmkmrc92zw67acpfcz5h1a29sdf884zkwd1444";
- type = "gem";
- };
- version = "0.3.0";
- };
- selenium-webdriver = {
- dependencies = ["childprocess" "rubyzip"];
- groups = ["test"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "0adcvp86dinaqq3nhf8p3m0rl2g6q0a4h52k0i7kdnsg1qz9k86y";
- type = "gem";
- };
- version = "3.142.7";
- };
- simple_oauth = {
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "0dw9ii6m7wckml100xhjc6vxpjcry174lbi9jz5v7ibjr3i94y8l";
- type = "gem";
- };
- version = "0.3.1";
- };
- sinatra = {
- dependencies = ["mustermann" "rack" "rack-protection" "tilt"];
- groups = ["default"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "0dd53rzpkxgs697pycbhhgc9vcnxra4ly4xar8ni6aiydx2f88zk";
- type = "gem";
- };
- version = "2.1.0";
- };
- slack-notifier = {
- groups = ["ext_notifications"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "001bipchr45sny33nlavqgxca9y1qqxa7xpi7pvjfqiybwzvm6nd";
- type = "gem";
- };
- version = "2.4.0";
- };
- sqlite3 = {
- groups = ["default"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "0lja01cp9xd5m6vmx99zwn4r7s97r1w5cb76gqd8xhbm1wxyzf78";
- type = "gem";
- };
- version = "1.4.2";
- };
- sync = {
- groups = ["default"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "1z9qlq4icyiv3hz1znvsq1wz2ccqjb1zwd6gkvnwg6n50z65d0v6";
- type = "gem";
- };
- version = "0.5.0";
- };
- term-ansicolor = {
- dependencies = ["tins"];
- groups = ["default"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "1xq5kci9215skdh27npyd3y55p812v4qb4x2hv3xsjvwqzz9ycwj";
- type = "gem";
- };
- version = "1.7.1";
- };
- test-unit = {
- dependencies = ["power_assert"];
- groups = ["test"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "15isy7vhppbfd0032klirj9gxp65ygkzjdwrmm28xpirlcsk6qpd";
- type = "gem";
- };
- version = "3.4.4";
- };
- test-unit-context = {
- dependencies = ["test-unit"];
- groups = ["default" "test"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "0dnvl3nm876nw7fx8m6q5zj0cgqhyj4vr7c18yl0zj36pn0wcmib";
- type = "gem";
- };
- version = "0.5.1";
- };
- test-unit-full = {
- dependencies = ["test-unit" "test-unit-context" "test-unit-notify" "test-unit-rr" "test-unit-runner-tap"];
- groups = ["test"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "1fivczw5d1b5krpjp23yipq8055p1d6wmis13xwl21xxwc1z2dsy";
- type = "gem";
- };
- version = "0.0.5";
- };
- test-unit-notify = {
- dependencies = ["test-unit"];
- groups = ["default" "test"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "1dzv2d82z3rm1vl7qazgg48nlsdh5zp1z6rpijdj03y469yd6cyv";
- type = "gem";
- };
- version = "1.0.4";
- };
- test-unit-rr = {
- dependencies = ["rr" "test-unit"];
- groups = ["default" "test"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "0l42wxvqqd4g1968syy1wmr4j9z3cad8v5vv22lr7my4wjgz0sil";
- type = "gem";
- };
- version = "1.0.5";
- };
- test-unit-runner-tap = {
- dependencies = ["test-unit"];
- groups = ["default" "test"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "1r3yi3zb9ximl3xpaqi0clm4i013alkqivn4gi6dn7zliqhz5622";
- type = "gem";
- };
- version = "1.1.2";
- };
- thin = {
- dependencies = ["daemons" "eventmachine" "rack"];
- groups = ["default"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "123bh7qlv6shk8bg8cjc84ix8bhlfcilwnn3iy6zq3l57yaplm9l";
- type = "gem";
- };
- version = "1.8.1";
- };
- thread_safe = {
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "0nmhcgq6cgz44srylra07bmaw99f5271l0dpsvl5f75m44l0gmwy";
- type = "gem";
- };
- version = "0.3.6";
- };
- tilt = {
- groups = ["default"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "0rn8z8hda4h41a64l0zhkiwz2vxw9b1nb70gl37h1dg2k874yrlv";
- type = "gem";
- };
- version = "2.0.10";
- };
- timers = {
- groups = ["default" "ext_dns"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "00xdi97gm01alfqhjgvv5sff9n1n2l6aym69s9jh8l9clg63b0jc";
- type = "gem";
- };
- version = "4.3.3";
- };
- tins = {
- dependencies = ["sync"];
- groups = ["default"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "0nzp88y19rqlcizp1nw8m44fvfxs9g3bhjpscz44dwfawfrmr0cb";
- type = "gem";
- };
- version = "1.29.1";
- };
- twitter = {
- dependencies = ["addressable" "buftok" "equalizer" "http" "http-form_data" "http_parser.rb" "memoizable" "multipart-post" "naught" "simple_oauth"];
- groups = ["ext_notifications"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "13dmkjgsnym1avym9f7y2i2h3mlk8crqvc87drrzr4f0sf9l8g2y";
- type = "gem";
- };
- version = "7.0.0";
- };
- tzinfo = {
- dependencies = ["concurrent-ruby"];
- groups = ["default"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "10qp5x7f9hvlc0psv9gsfbxg4a7s0485wsbq1kljkxq94in91l4z";
- type = "gem";
- };
- version = "2.0.4";
- };
- uglifier = {
- dependencies = ["execjs"];
- groups = ["default"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "0wgh7bzy68vhv9v68061519dd8samcy8sazzz0w3k8kqpy3g4s5f";
- type = "gem";
- };
- version = "4.2.0";
- };
- unf = {
- dependencies = ["unf_ext"];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "0bh2cf73i2ffh4fcpdn9ir4mhq8zi50ik0zqa1braahzadx536a9";
- type = "gem";
- };
- version = "0.1.4";
- };
- unf_ext = {
- groups = ["default" "ext_notifications" "test"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "0wc47r23h063l8ysws8sy24gzh74mks81cak3lkzlrw4qkqb3sg4";
- type = "gem";
- };
- version = "0.0.7.7";
- };
- unicode-display_width = {
- groups = ["default"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "06i3id27s60141x6fdnjn5rar1cywdwy64ilc59cz937303q3mna";
- type = "gem";
- };
- version = "1.7.0";
- };
- webrick = {
- groups = ["default" "ext_msf"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "1d4cvgmxhfczxiq5fr534lmizkhigd15bsx5719r5ds7k7ivisc7";
- type = "gem";
- };
- version = "1.7.0";
- };
- websocket = {
- groups = ["default" "test"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "0dib6p55sl606qb4vpwrvj5wh881kk4aqn2zpfapf8ckx7g14jw8";
- type = "gem";
- };
- version = "1.2.9";
- };
- websocket-client-simple = {
- dependencies = ["event_emitter" "websocket"];
- groups = ["test"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "0n7cjfg21lvszgr0w6w0c59qpwzpb7w4b3c7i3nxdpckabk76sx8";
- type = "gem";
- };
- version = "0.3.0";
- };
- xmlrpc = {
- dependencies = ["webrick"];
- groups = ["ext_msf"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "1xa79ry3976ylap38cr5g6q3m81plm611flqd3dwgnmgbkycb6jp";
- type = "gem";
- };
- version = "0.3.2";
- };
- xpath = {
- dependencies = ["nokogiri"];
- groups = ["default" "test"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "0bh8lk9hvlpn7vmi6h4hkcwjzvs2y0cmkk3yjjdr8fxvj6fsgzbd";
- type = "gem";
- };
- version = "3.2.0";
- };
- zeitwerk = {
- groups = ["default"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "1746czsjarixq0x05f7p3hpzi38ldg6wxnxxw74kbjzh1sdjgmpl";
- type = "gem";
- };
- version = "2.4.2";
- };
-}
diff --git a/makefu/5pkgs/beef/shell.nix b/makefu/5pkgs/beef/shell.nix
deleted file mode 100644
index cd7a01214..000000000
--- a/makefu/5pkgs/beef/shell.nix
+++ /dev/null
@@ -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
- ];
-}
diff --git a/makefu/5pkgs/beef/update.sh b/makefu/5pkgs/beef/update.sh
deleted file mode 100755
index cce635f6d..000000000
--- a/makefu/5pkgs/beef/update.sh
+++ /dev/null
@@ -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"
diff --git a/makefu/5pkgs/custom/mediawiki-matrix-bot/default.nix b/makefu/5pkgs/custom/mediawiki-matrix-bot/default.nix
index 4a91a9161..421cb76f2 100644
--- a/makefu/5pkgs/custom/mediawiki-matrix-bot/default.nix
+++ b/makefu/5pkgs/custom/mediawiki-matrix-bot/default.nix
@@ -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
+ #'';
}
diff --git a/makefu/5pkgs/default.nix b/makefu/5pkgs/default.nix
index fd26f462e..66a8d99d1 100644
--- a/makefu/5pkgs/default.nix
+++ b/makefu/5pkgs/default.nix
@@ -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 {};
diff --git a/makefu/5pkgs/ns-atmosphere-programmer/default.nix b/makefu/5pkgs/ns-atmosphere-programmer/default.nix
index aa7af9922..7d9110e48 100644
--- a/makefu/5pkgs/ns-atmosphere-programmer/default.nix
+++ b/makefu/5pkgs/ns-atmosphere-programmer/default.nix
@@ -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;
diff --git a/makefu/5pkgs/ps3netsrv/default.nix b/makefu/5pkgs/ps3netsrv/default.nix
new file mode 100644
index 000000000..08d7dbfdc
--- /dev/null
+++ b/makefu/5pkgs/ps3netsrv/default.nix
@@ -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;
+ };
+}
diff --git a/makefu/5pkgs/ratt/default.nix b/makefu/5pkgs/ratt/default.nix
index 57ea545b9..0ad94c55e 100644
--- a/makefu/5pkgs/ratt/default.nix
+++ b/makefu/5pkgs/ratt/default.nix
@@ -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;
diff --git a/makefu/krops.nix b/makefu/krops.nix
index 2757519a6..d907c8e36 100644
--- a/makefu/krops.nix
+++ b/makefu/krops.nix
@@ -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/";
};
[cgit] Unable to lock slot /tmp/cgit/f2000000.lock: No such file or directory (2)