Merge remote-tracking branch 'gum/master'
This commit is contained in:
commit
059a5b48af
@ -235,6 +235,7 @@ in {
|
|||||||
maps.work.euer IN A ${nets.internet.ip4.addr}
|
maps.work.euer IN A ${nets.internet.ip4.addr}
|
||||||
play.work.euer IN A ${nets.internet.ip4.addr}
|
play.work.euer IN A ${nets.internet.ip4.addr}
|
||||||
ul.work.euer IN A ${nets.internet.ip4.addr}
|
ul.work.euer IN A ${nets.internet.ip4.addr}
|
||||||
|
music.euer IN A ${nets.internet.ip4.addr}
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
cores = 8;
|
cores = 8;
|
||||||
|
0
makefu/0tests/data/secrets/lego-binaergewitter
Normal file
0
makefu/0tests/data/secrets/lego-binaergewitter
Normal file
0
makefu/0tests/data/wg-thierry.key
Normal file
0
makefu/0tests/data/wg-thierry.key
Normal file
@ -5,11 +5,14 @@ in {
|
|||||||
imports = [
|
imports = [
|
||||||
<stockholm/makefu>
|
<stockholm/makefu>
|
||||||
./hardware-config.nix
|
./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 ];}
|
{ environment.systemPackages = with pkgs;[ rsync screen curl git tmux picocom mosh ];}
|
||||||
# <stockholm/makefu/2configs/tools/core.nix>
|
# <stockholm/makefu/2configs/tools/core.nix>
|
||||||
<stockholm/makefu/2configs/binary-cache/nixos.nix>
|
<stockholm/makefu/2configs/binary-cache/nixos.nix>
|
||||||
#<stockholm/makefu/2configs/support-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>
|
# <stockholm/makefu/2configs/homeautomation/google-muell.nix>
|
||||||
# configure your hw:
|
# configure your hw:
|
||||||
# <stockholm/makefu/2configs/save-diskspace.nix>
|
# <stockholm/makefu/2configs/save-diskspace.nix>
|
||||||
@ -19,9 +22,11 @@ in {
|
|||||||
tinc.retiolum.enable = true;
|
tinc.retiolum.enable = true;
|
||||||
build.host = config.krebs.hosts.cake;
|
build.host = config.krebs.hosts.cake;
|
||||||
};
|
};
|
||||||
|
# ensure disk usage is limited
|
||||||
|
services.journald.extraConfig = "Storage=volatile";
|
||||||
networking.firewall.trustedInterfaces = [ primaryInterface ];
|
networking.firewall.trustedInterfaces = [ primaryInterface ];
|
||||||
documentation.info.enable = false;
|
documentation.info.enable = false;
|
||||||
documentation.man.enable = false;
|
documentation.man.enable = false;
|
||||||
services.nixosManual.enable = false;
|
documentation.nixos.enable = false;
|
||||||
sound.enable = false;
|
sound.enable = false;
|
||||||
}
|
}
|
||||||
|
@ -1,42 +1,14 @@
|
|||||||
{ pkgs, lib, ... }:
|
{ pkgs, lib, ... }:
|
||||||
{
|
{
|
||||||
# raspi3
|
environment.systemPackages = [ pkgs.libraspberrypi ];
|
||||||
boot.kernelParams = ["cma=32M" "console=ttyS0,115200n8" "console=tty0" "console=ttyS1,115200n8" ];
|
imports = [ <nixos-hardware/raspberry-pi/4> ];
|
||||||
boot.loader.grub.enable = false;
|
boot.kernelPackages = pkgs.linuxPackages_rpi4;
|
||||||
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; } ];
|
|
||||||
fileSystems = {
|
fileSystems = {
|
||||||
"/boot" = {
|
|
||||||
device = "/dev/disk/by-label/NIXOS_BOOT";
|
|
||||||
fsType = "vfat";
|
|
||||||
};
|
|
||||||
"/" = {
|
"/" = {
|
||||||
device = "/dev/disk/by-label/NIXOS_SD";
|
device = "/dev/disk/by-label/NIXOS_SD";
|
||||||
fsType = "ext4";
|
fsType = "ext4";
|
||||||
|
options = [ "noatime" ];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
#hardware.raspberry-pi."4".fkms-3d.enable = true;
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
{
|
{
|
||||||
name="cake";
|
name="cake";
|
||||||
full = true;
|
full = true;
|
||||||
|
home-manager = true;
|
||||||
|
hw = true;
|
||||||
}
|
}
|
||||||
|
@ -30,7 +30,7 @@ in {
|
|||||||
|
|
||||||
# Storage
|
# Storage
|
||||||
<stockholm/makefu/2configs/share>
|
<stockholm/makefu/2configs/share>
|
||||||
<stockholm/makefu/2configs/share/hetzner-client.nix>
|
# <stockholm/makefu/2configs/share/hetzner-client.nix>
|
||||||
|
|
||||||
# Services:
|
# Services:
|
||||||
<stockholm/makefu/2configs/nix-community/mediawiki-matrix-bot.nix>
|
<stockholm/makefu/2configs/nix-community/mediawiki-matrix-bot.nix>
|
||||||
@ -42,7 +42,7 @@ in {
|
|||||||
|
|
||||||
# local usage:
|
# local usage:
|
||||||
<stockholm/makefu/2configs/mosh.nix>
|
<stockholm/makefu/2configs/mosh.nix>
|
||||||
<stockholm/makefu/2configs/bitlbee.nix>
|
|
||||||
|
|
||||||
# Supervision
|
# Supervision
|
||||||
<stockholm/makefu/2configs/nix-community/supervision.nix>
|
<stockholm/makefu/2configs/nix-community/supervision.nix>
|
||||||
@ -53,6 +53,9 @@ in {
|
|||||||
# backup
|
# backup
|
||||||
<stockholm/makefu/2configs/backup/state.nix>
|
<stockholm/makefu/2configs/backup/state.nix>
|
||||||
|
|
||||||
|
# migrated:
|
||||||
|
# <stockholm/makefu/2configs/bitlbee.nix>
|
||||||
|
|
||||||
|
|
||||||
];
|
];
|
||||||
krebs = {
|
krebs = {
|
||||||
|
@ -53,7 +53,6 @@ in {
|
|||||||
<stockholm/makefu/2configs/share>
|
<stockholm/makefu/2configs/share>
|
||||||
<stockholm/makefu/2configs/share/omo.nix>
|
<stockholm/makefu/2configs/share/omo.nix>
|
||||||
<stockholm/makefu/2configs/share/gum-client.nix>
|
<stockholm/makefu/2configs/share/gum-client.nix>
|
||||||
<stockholm/makefu/2configs/share/hetzner-client.nix>
|
|
||||||
<stockholm/makefu/2configs/sync>
|
<stockholm/makefu/2configs/sync>
|
||||||
<stockholm/makefu/2configs/dcpp/airdcpp.nix>
|
<stockholm/makefu/2configs/dcpp/airdcpp.nix>
|
||||||
{ krebs.airdcpp.dcpp.shares = let
|
{ krebs.airdcpp.dcpp.shares = let
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
name="omo";
|
name="omo";
|
||||||
torrent = true;
|
torrent = true;
|
||||||
#unstable = true;
|
unstable = true;
|
||||||
home-manager = true;
|
home-manager = true;
|
||||||
}
|
}
|
||||||
|
@ -137,7 +137,6 @@
|
|||||||
# <stockholm/makefu/2configs/share/anon-ftp.nix>
|
# <stockholm/makefu/2configs/share/anon-ftp.nix>
|
||||||
# <stockholm/makefu/2configs/share/anon-sftp.nix>
|
# <stockholm/makefu/2configs/share/anon-sftp.nix>
|
||||||
<stockholm/makefu/2configs/share/gum-client.nix>
|
<stockholm/makefu/2configs/share/gum-client.nix>
|
||||||
<stockholm/makefu/2configs/share/hetzner-client.nix>
|
|
||||||
<stockholm/makefu/2configs/share>
|
<stockholm/makefu/2configs/share>
|
||||||
# <stockholm/makefu/2configs/share/temp-share-samba.nix>
|
# <stockholm/makefu/2configs/share/temp-share-samba.nix>
|
||||||
|
|
||||||
|
@ -59,6 +59,11 @@ in {
|
|||||||
systemd.services.nginx.serviceConfig.ReadWritePaths = [
|
systemd.services.nginx.serviceConfig.ReadWritePaths = [
|
||||||
"/var/spool/nginx/logs/"
|
"/var/spool/nginx/logs/"
|
||||||
];
|
];
|
||||||
|
security.acme.certs."download.binaergewitter.de" = {
|
||||||
|
dnsProvider = "cloudflare";
|
||||||
|
credentialsFile = toString <secrets/lego-binaergewitter>;
|
||||||
|
webroot = lib.mkForce null;
|
||||||
|
};
|
||||||
|
|
||||||
services.nginx = {
|
services.nginx = {
|
||||||
appendHttpConfig = ''
|
appendHttpConfig = ''
|
||||||
@ -70,6 +75,8 @@ in {
|
|||||||
recommendedGzipSettings = true;
|
recommendedGzipSettings = true;
|
||||||
recommendedOptimisation = true;
|
recommendedOptimisation = true;
|
||||||
virtualHosts."download.binaergewitter.de" = {
|
virtualHosts."download.binaergewitter.de" = {
|
||||||
|
addSSL = true;
|
||||||
|
enableACME = true;
|
||||||
serverAliases = [ "dl2.binaergewitter.de" ];
|
serverAliases = [ "dl2.binaergewitter.de" ];
|
||||||
root = "/var/www/binaergewitter";
|
root = "/var/www/binaergewitter";
|
||||||
extraConfig = ''
|
extraConfig = ''
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
{
|
{
|
||||||
services.bitlbee = {
|
services.bitlbee = {
|
||||||
enable = true;
|
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 ];
|
users.users.makefu.packages = with pkgs; [ weechat tmux ];
|
||||||
state = [ "/var/lib/bitlbee" ];
|
state = [ "/var/lib/bitlbee" ];
|
||||||
|
@ -52,6 +52,7 @@ with import <stockholm/lib>;
|
|||||||
gnumake
|
gnumake
|
||||||
rxvt_unicode.terminfo
|
rxvt_unicode.terminfo
|
||||||
htop
|
htop
|
||||||
|
nix-output-monitor
|
||||||
];
|
];
|
||||||
|
|
||||||
programs.bash.enableCompletion = true;
|
programs.bash.enableCompletion = true;
|
||||||
@ -86,8 +87,9 @@ with import <stockholm/lib>;
|
|||||||
'';
|
'';
|
||||||
environment.pathsToLink = [ "/share" ];
|
environment.pathsToLink = [ "/share" ];
|
||||||
security.acme = {
|
security.acme = {
|
||||||
email = "letsencrypt@syntax-fehler.de";
|
defaults.email = "letsencrypt@syntax-fehler.de";
|
||||||
acceptTerms = true;
|
acceptTerms = true;
|
||||||
};
|
};
|
||||||
system.stateVersion = lib.mkDefault "20.03";
|
system.stateVersion = lib.mkDefault "20.03";
|
||||||
|
services.postgresql.package = pkgs.postgresql_14;
|
||||||
}
|
}
|
||||||
|
@ -57,7 +57,7 @@ systemd.services.postgresqlBackup-nextcloud.serviceConfig.SupplementaryGroups =
|
|||||||
users.users.nextcloud.extraGroups = [ "download" ];
|
users.users.nextcloud.extraGroups = [ "download" ];
|
||||||
services.nextcloud = {
|
services.nextcloud = {
|
||||||
enable = true;
|
enable = true;
|
||||||
package = pkgs.nextcloud23;
|
package = pkgs.nextcloud24;
|
||||||
hostName = "o.euer.krebsco.de";
|
hostName = "o.euer.krebsco.de";
|
||||||
# Use HTTPS for links
|
# Use HTTPS for links
|
||||||
https = true;
|
https = true;
|
||||||
|
45
makefu/2configs/home/3dprint.nix
Normal file
45
makefu/2configs/home/3dprint.nix
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
services.mjpg-streamer = {
|
||||||
|
enable = true;
|
||||||
|
inputPlugin = "input_uvc.so -d /dev/web_cam -r 1280x960";
|
||||||
|
};
|
||||||
|
users.users.octoprint.extraGroups = [ "video" ];
|
||||||
|
# allow octoprint to access /dev/vchiq
|
||||||
|
# also ensure that the webcam always comes up under the same name
|
||||||
|
services.udev.extraRules = ''
|
||||||
|
SUBSYSTEM=="vchiq",GROUP="video",MODE="0660"
|
||||||
|
SUBSYSTEM=="video4linux", ATTR{name}=="UVC Camera (046d:0825)",SYMLINK+="web_cam", MODE="0666", GROUP="video"
|
||||||
|
'';
|
||||||
|
systemd.services.octoprint = {
|
||||||
|
path = [ pkgs.libraspberrypi ];
|
||||||
|
};
|
||||||
|
services.octoprint = {
|
||||||
|
enable = true;
|
||||||
|
plugins = plugins: with plugins;[
|
||||||
|
costestimation
|
||||||
|
displayprogress
|
||||||
|
mqtt
|
||||||
|
stlviewer
|
||||||
|
themeify
|
||||||
|
# octolapse
|
||||||
|
(buildPlugin rec {
|
||||||
|
pname = "OctoPrint-HomeAssistant";
|
||||||
|
version = "3.6.2";
|
||||||
|
src = pkgs.fetchFromGitHub {
|
||||||
|
owner = "cmroche";
|
||||||
|
repo = pname;
|
||||||
|
rev = version;
|
||||||
|
hash = "sha256-oo9OBmHoJFNGK7u9cVouMuBuUcUxRUrY0ppRq0OS1ro=";
|
||||||
|
};
|
||||||
|
})
|
||||||
|
];
|
||||||
|
extraConfig.plugins.mqtt.broker = {
|
||||||
|
url = "omo.lan";
|
||||||
|
# TODO TODO TODO
|
||||||
|
username = "hass";
|
||||||
|
password = "lksue43jrf";
|
||||||
|
# TODO TODO TODO
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
4
makefu/2configs/home/ham/automation/buttonboard.nix
Normal file
4
makefu/2configs/home/ham/automation/buttonboard.nix
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
# good, bad radio
|
||||||
|
# stop
|
||||||
|
# start radio
|
||||||
|
# lauter, leister
|
2
makefu/2configs/home/ham/automation/bye.txt.j2
Normal file
2
makefu/2configs/home/ham/automation/bye.txt.j2
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Endlich ist Pappa fertig mit arbeit!
|
||||||
|
Heute hast du {{ states("sensor.felix_at_work_today") |round(1) }} Stunden gearbeitet.
|
@ -7,6 +7,21 @@ let
|
|||||||
in
|
in
|
||||||
{
|
{
|
||||||
services.home-assistant.config.input_boolean.felix_at_work.name = "Felix auf Arbeit";
|
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 =
|
services.home-assistant.config.script.start_office_radio.sequence =
|
||||||
[
|
[
|
||||||
{ service = "media_player.play_media";
|
{ service = "media_player.play_media";
|
||||||
@ -19,13 +34,41 @@ in
|
|||||||
];
|
];
|
||||||
services.home-assistant.config.automation =
|
services.home-assistant.config.automation =
|
||||||
[
|
[
|
||||||
{ service = "media_player.play_media";
|
{ alias = "Zu lange Felix!";
|
||||||
data = {
|
trigger =
|
||||||
media_content_id = "http://radio.lassul.us:8000/radio.mp3";
|
{ platform = "event";
|
||||||
media_content_type = "music";
|
event_type = "timer.finished";
|
||||||
};
|
event_data.entity_id = "timer.felix_at_work";
|
||||||
target.entity_id = "media_player.office";
|
};
|
||||||
}
|
|
||||||
|
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";
|
{ alias = "Push Check-in Button Felix with button";
|
||||||
trigger = [
|
trigger = [
|
||||||
{
|
{
|
||||||
@ -54,15 +97,12 @@ in
|
|||||||
{ service = "homeassistant.turn_on";
|
{ service = "homeassistant.turn_on";
|
||||||
entity_id = at_work;
|
entity_id = at_work;
|
||||||
}
|
}
|
||||||
] ++ (say "Willkommen auf Arbeit") ++
|
{ service = "timer.start";
|
||||||
[
|
entity_id = [ "timer.felix_at_work" ] ;
|
||||||
{ 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";
|
|
||||||
}
|
}
|
||||||
|
] ++ (say (builtins.readFile ./welcome.txt.j2)) ++
|
||||||
|
[
|
||||||
|
{ service = "script.start_office_radio"; }
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
@ -78,7 +118,12 @@ in
|
|||||||
{ service = "homeassistant.turn_off";
|
{ service = "homeassistant.turn_off";
|
||||||
entity_id = at_work;
|
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" ] ;
|
||||||
|
}
|
||||||
|
];
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
17
makefu/2configs/home/ham/automation/daily_speedtext.nix
Normal file
17
makefu/2configs/home/ham/automation/daily_speedtext.nix
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
services.home-assistant.config.automation =
|
||||||
|
[
|
||||||
|
{
|
||||||
|
trigger = [
|
||||||
|
{ platform = "time"; at = "03:21"; }
|
||||||
|
];
|
||||||
|
action =
|
||||||
|
[
|
||||||
|
{
|
||||||
|
service = "speedtestdotnet.speedtest";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
}
|
@ -4,6 +4,11 @@
|
|||||||
# binary_sensor.badezimmer_fenster_contact
|
# binary_sensor.badezimmer_fenster_contact
|
||||||
# binary_sensor.dusche_fenster_contact
|
# binary_sensor.dusche_fenster_contact
|
||||||
let
|
let
|
||||||
|
hlib = import ../lib;
|
||||||
|
say = hlib.say.office;
|
||||||
|
draussen = "sensor.wohnzimmer_temp_temperature";
|
||||||
|
draussen_diff = "sensor.unterschied_draussen_drinnen";
|
||||||
|
draussen_heiss = 23;
|
||||||
min = 20;
|
min = 20;
|
||||||
fenster_offen = name: entity:
|
fenster_offen = name: entity:
|
||||||
{ alias = "${name} seit ${toString min} Minuten offen";
|
{ alias = "${name} seit ${toString min} Minuten offen";
|
||||||
@ -16,10 +21,6 @@ let
|
|||||||
}
|
}
|
||||||
];
|
];
|
||||||
condition = [
|
condition = [
|
||||||
{ condition = "state";
|
|
||||||
entity_id = "input_boolean.ist_sommer";
|
|
||||||
state = "off";
|
|
||||||
}
|
|
||||||
];
|
];
|
||||||
action =
|
action =
|
||||||
[
|
[
|
||||||
@ -67,6 +68,17 @@ let
|
|||||||
};
|
};
|
||||||
in {
|
in {
|
||||||
services.home-assistant.config = {
|
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 = [
|
sensor = [
|
||||||
{ platform = "season"; type = "meteorological";}
|
{ platform = "season"; type = "meteorological";}
|
||||||
];
|
];
|
||||||
@ -86,6 +98,41 @@ in {
|
|||||||
|
|
||||||
(fenster_offen "Badezimmerfenster" "binary_sensor.badezimmer_fenster_contact")
|
(fenster_offen "Badezimmerfenster" "binary_sensor.badezimmer_fenster_contact")
|
||||||
(fenster_offen "Duschfenster" "binary_sensor.dusche_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");
|
||||||
|
}
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -20,17 +20,17 @@ in
|
|||||||
action = [
|
action = [
|
||||||
(cmd "reboot")
|
(cmd "reboot")
|
||||||
(sec 90) # go to my music because apparently select_source does not seem to always work
|
(sec 90) # go to my music because apparently select_source does not seem to always work
|
||||||
(cmd "HOME")
|
#(cmd "HOME")
|
||||||
(sec 2)
|
#(sec 2)
|
||||||
(cmd "DOWN")
|
#(cmd "DOWN")
|
||||||
(sec 2)
|
#(sec 2)
|
||||||
(cmd "DOWN")
|
#(cmd "DOWN")
|
||||||
(sec 2)
|
#(sec 2)
|
||||||
(cmd "ENTER")
|
#(cmd "ENTER")
|
||||||
(sec 4)
|
#(sec 4)
|
||||||
(cmd "RIGHT")
|
#(cmd "RIGHT")
|
||||||
(sec 2)
|
#(sec 2)
|
||||||
(cmd "RIGHT")
|
#(cmd "RIGHT")
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
@ -32,12 +32,16 @@ in
|
|||||||
[
|
[
|
||||||
{ choose = [
|
{ choose = [
|
||||||
(lightcond "Badezimmer Fenster Auf"
|
(lightcond "Badezimmer Fenster Auf"
|
||||||
{ condition = "state"; entity_id = "binary_sensor.badezimmer_fenster_contact"; state = "on"; }
|
[ { condition = "state"; entity_id = "binary_sensor.badezimmer_fenster_contact"; state = "on"; }
|
||||||
[ 64 207 255 ] 255 # helblau
|
{ condition = "state"; entity_id = "input_boolean.ist_sommer"; state = "off"; }
|
||||||
|
|
||||||
|
]
|
||||||
|
[ 64 207 255 ] 128 # hellblau
|
||||||
)
|
)
|
||||||
(lightcond "Duschenster auf"
|
(lightcond "Duschenster auf"
|
||||||
{ condition = "state"; entity_id = "binary_sensor.dusche_fenster_contact"; state = "on"; }
|
[ { condition = "state"; entity_id = "binary_sensor.dusche_fenster_contact"; state = "on"; }
|
||||||
[ 64 207 255 ] 255 # helblau
|
{ condition = "state"; entity_id = "input_boolean.ist_sommer"; state = "off"; } ]
|
||||||
|
[ 64 207 255 ] 128 # hellblau
|
||||||
)
|
)
|
||||||
(lightcond "Nachtlicht"
|
(lightcond "Nachtlicht"
|
||||||
{ condition = "state"; entity_id = "sun.sun"; state = "below_horizon"; }
|
{ condition = "state"; entity_id = "sun.sun"; state = "below_horizon"; }
|
||||||
|
@ -1,5 +1,8 @@
|
|||||||
let
|
let
|
||||||
btn = "sensor.arbeitszimmer_btn1_action";
|
btn = "sensor.arbeitszimmer_btn1_action";
|
||||||
|
lib = import ../lib;
|
||||||
|
say = lib.say.living_room;
|
||||||
|
|
||||||
all_lights = [
|
all_lights = [
|
||||||
# Wohnzimmer
|
# Wohnzimmer
|
||||||
"light.wled"
|
"light.wled"
|
||||||
@ -21,6 +24,8 @@ let
|
|||||||
all_media_player = [
|
all_media_player = [
|
||||||
"media_player.living_room"
|
"media_player.living_room"
|
||||||
"media_player.office"
|
"media_player.office"
|
||||||
|
"media_player.bedroom"
|
||||||
|
|
||||||
];
|
];
|
||||||
in {
|
in {
|
||||||
services.home-assistant.config.automation =
|
services.home-assistant.config.automation =
|
||||||
@ -30,13 +35,13 @@ in {
|
|||||||
{
|
{
|
||||||
platform = "state";
|
platform = "state";
|
||||||
entity_id = btn;
|
entity_id = btn;
|
||||||
to = "on";
|
to = "single";
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
condition = [ ];
|
condition = [ ];
|
||||||
action = [
|
action = (say "Alles Aus" )++ [
|
||||||
{
|
{
|
||||||
service = "home_assistant.turn_off";
|
service = "light.turn_off";
|
||||||
target.entity_id = all_lights;
|
target.entity_id = all_lights;
|
||||||
}
|
}
|
||||||
{ service = "media_player.media_stop";
|
{ service = "media_player.media_stop";
|
||||||
|
@ -4,7 +4,10 @@
|
|||||||
# "all" lights
|
# "all" lights
|
||||||
|
|
||||||
let
|
let
|
||||||
schranklicht = "light.wohnzimmer_schrank_osram";
|
schranklicht = [
|
||||||
|
"light.wohnzimmer_schrank_osram"
|
||||||
|
"light.wohnzimmer_komode_osram"
|
||||||
|
];
|
||||||
weihnachtslicht = "light.wohnzimmer_fenster_lichterkette_licht";
|
weihnachtslicht = "light.wohnzimmer_fenster_lichterkette_licht";
|
||||||
fernsehlicht = "light.wled";
|
fernsehlicht = "light.wled";
|
||||||
|
|
||||||
@ -24,7 +27,7 @@ let
|
|||||||
|
|
||||||
turn_on = entity_id: offset:
|
turn_on = entity_id: offset:
|
||||||
# negative offset => before sunset
|
# negative offset => before sunset
|
||||||
{ alias = "Turn on ${entity_id} at sunset ${offset}";
|
{ alias = "Turn on ${toString entity_id} at sunset ${offset}";
|
||||||
trigger = [
|
trigger = [
|
||||||
{ platform = "sun"; event = "sunset"; inherit offset; }
|
{ platform = "sun"; event = "sunset"; inherit offset; }
|
||||||
];
|
];
|
||||||
|
45
makefu/2configs/home/ham/automation/welcome.txt.j2
Normal file
45
makefu/2configs/home/ham/automation/welcome.txt.j2
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
{% set arbeit_heute = is_state("binary_sensor.arbeitstag","on") -%}
|
||||||
|
{% set weekday = ['Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag','Sonntag'][now().weekday()] -%}
|
||||||
|
{% set is_friday = now().weekday() == 4 %}
|
||||||
|
|
||||||
|
{% if not arbeit_heute %}
|
||||||
|
Heute ist {{ weekday }}, du solltest gar nicht arbeiten!
|
||||||
|
{% else %}
|
||||||
|
Willkommen auf Arbeit Felix.
|
||||||
|
{% endif -%}
|
||||||
|
Das aktuell gewählte Projekt ist {{ states("sensor.felix_project") }}.
|
||||||
|
|
||||||
|
{% set inside = states("sensor.wohnzimmer_temp_temperature") | float | round(2) -%}
|
||||||
|
{% set outside = states("sensor.dark_sky_temperature") | float | round(2) -%}
|
||||||
|
{% set arbeit_morgen = is_state("binary_sensor.arbeitstag_morgen","on") -%}
|
||||||
|
|
||||||
|
Die Wetteraussichten: {{ states("sensor.dark_sky_hourly_summary") | replace(".","")}} bei {{ states("sensor.dark_sky_temperature") }} Grad mit {{ states("sensor.dark_sky_humidity") | round(0) }}% Luftfeuchtigkeit.
|
||||||
|
{% if states("calendar.abfall_papiermuell") == "on" %}
|
||||||
|
Heute ist Papiermuell, bring noch schnell dein Papier raus
|
||||||
|
{% endif %}
|
||||||
|
{% if states("calendar.abfall_restmuell") == "on" %}
|
||||||
|
Ausserdem ist heute Restmuell.
|
||||||
|
{% endif -%}
|
||||||
|
|
||||||
|
{% if ( outside < inside ) and ( outside > 18 ) %}
|
||||||
|
Draussen ist es gerade {{ ((inside - outside) | round(1) )}} gerade kühler
|
||||||
|
{% endif -%}
|
||||||
|
|
||||||
|
{% set current_count = state_attr("sensor.dwd_weather_warnings_current_warning_level", "warning_count") %}
|
||||||
|
{% for i in range(current_count) %}
|
||||||
|
{% set idx = i + 1 %}
|
||||||
|
{% set headline = state_attr("sensor.dwd_weather_warnings_current_warning_level", "warning_" ~ idx ~ "_headline") %}
|
||||||
|
{% set description = state_attr("sensor.dwd_weather_warnings_current_warning_level", "warning_" ~ idx ~ "_description") %}
|
||||||
|
{% set level = state_attr("sensor.dwd_weather_warnings_current_warning_level", "warning_" ~ idx ~ "_level") %}
|
||||||
|
{% set time_start = state_attr("sensor.dwd_weather_warnings_current_warning_level", "warning_" ~ idx ~ "_start") %}
|
||||||
|
{% set time_end = state_attr("sensor.dwd_weather_warnings_current_warning_level", "warning_" ~ idx ~ "_end") %}
|
||||||
|
Wetterwarnung {{idx}}: {{ headline }} Stufe {{level}} von {{ time_start.strftime("%H:%M") ~ " bis " ~ time_end.strftime("%H:%M") }} Uhr
|
||||||
|
|
||||||
|
{{ description }}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
{% if is_friday %}
|
||||||
|
Endlich ist Freitag!
|
||||||
|
{% elif not arbeit_morgen %}
|
||||||
|
Morgen ist Feiertag, also nicht versehentlich arbeiten
|
||||||
|
{% endif -%}
|
@ -24,13 +24,17 @@ in {
|
|||||||
./device_tracker/tile.nix
|
./device_tracker/tile.nix
|
||||||
|
|
||||||
./sensor/outside.nix
|
./sensor/outside.nix
|
||||||
|
./sensor/pollen.nix
|
||||||
|
./sensor/dwd.nix
|
||||||
|
|
||||||
./calendar/nextcloud.nix
|
./calendar/nextcloud.nix
|
||||||
|
|
||||||
./media/firetv.nix
|
./media/firetv.nix
|
||||||
./media/sonos.nix
|
./media/sonos.nix
|
||||||
|
./media/schlafzimmer_music_remote.nix
|
||||||
./media/remote_sound_wohnzimmer.nix
|
./media/remote_sound_wohnzimmer.nix
|
||||||
./media/remote_sound_arbeitszimmer.nix
|
./media/remote_sound_arbeitszimmer.nix
|
||||||
|
./media/arbeitszimmer_matrix.nix
|
||||||
|
|
||||||
./automation/check-in.nix
|
./automation/check-in.nix
|
||||||
./automation/fenster_auf.nix
|
./automation/fenster_auf.nix
|
||||||
@ -41,9 +45,12 @@ in {
|
|||||||
./automation/flurlicht.nix
|
./automation/flurlicht.nix
|
||||||
./automation/giesskanne.nix
|
./automation/giesskanne.nix
|
||||||
./automation/pflanzen_giessen_erinnerung.nix
|
./automation/pflanzen_giessen_erinnerung.nix
|
||||||
./automation/urlaub.nix
|
# ./automation/urlaub.nix
|
||||||
./automation/moodlight.nix
|
./automation/moodlight.nix
|
||||||
./automation/shutdown_button.nix
|
./automation/shutdown_button.nix
|
||||||
|
./automation/project_tracker.nix
|
||||||
|
./automation/daily_speedtext.nix
|
||||||
|
|
||||||
|
|
||||||
./light/arbeitszimmer.nix
|
./light/arbeitszimmer.nix
|
||||||
./light/schlafzimmer.nix
|
./light/schlafzimmer.nix
|
||||||
@ -53,18 +60,14 @@ in {
|
|||||||
];
|
];
|
||||||
|
|
||||||
services.home-assistant = {
|
services.home-assistant = {
|
||||||
package = (pkgs.home-assistant.overrideAttrs (old: {
|
extraComponents = [ "mobile_app" ];
|
||||||
doInstallCheck = false;
|
extraPackages = python3Packages: with python3Packages; [ pytz ];
|
||||||
})).override {
|
|
||||||
extraPackages = p: [
|
|
||||||
(p.callPackage ./deps/dwdwfsapi.nix {})
|
|
||||||
# (p.callPackage ./signal-rest/pkg.nix {})
|
|
||||||
(p.callPackage ./deps/pykodi.nix {})
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
config = {
|
config = {
|
||||||
|
default_config = {}; # for sonos aiodiscover
|
||||||
|
|
||||||
influxdb = {
|
influxdb = {
|
||||||
|
api_version = 1;
|
||||||
database = "ham";
|
database = "ham";
|
||||||
host = "localhost";
|
host = "localhost";
|
||||||
tags = {
|
tags = {
|
||||||
@ -87,6 +90,25 @@ in {
|
|||||||
{ type = "homeassistant"; }
|
{ 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 = {};
|
discovery = {};
|
||||||
conversation = {};
|
conversation = {};
|
||||||
history = {};
|
history = {};
|
||||||
@ -141,22 +163,19 @@ in {
|
|||||||
retain = true;
|
retain = true;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
#luftdaten = {
|
luftdaten = {
|
||||||
# show_on_map = true;
|
# show_on_map = true;
|
||||||
# sensor_id = 10529;
|
sensor_id = 72935;
|
||||||
# sensors.monitored_conditions = [ "P1" "P2" ];
|
# sensors.monitored_conditions = [ "P1" "P2" ];
|
||||||
#};
|
};
|
||||||
#binary_sensor =
|
#binary_sensor =
|
||||||
# flurlicht.binary_sensor;
|
# flurlicht.binary_sensor;
|
||||||
|
|
||||||
sensor = [
|
sensor = [
|
||||||
{ platform = "speedtestdotnet";
|
|
||||||
scan_interval.hours = 6;
|
|
||||||
monitored_conditions = [ "ping" "download" "upload" ];
|
|
||||||
}
|
|
||||||
# https://www.home-assistant.io/cookbook/automation_for_rainy_days/
|
# https://www.home-assistant.io/cookbook/automation_for_rainy_days/
|
||||||
];
|
];
|
||||||
frontend = { };
|
frontend = { };
|
||||||
|
speedtestdotnet = { };
|
||||||
http = {
|
http = {
|
||||||
use_x_forwarded_for = true;
|
use_x_forwarded_for = true;
|
||||||
#server_host = "127.0.0.1";
|
#server_host = "127.0.0.1";
|
||||||
@ -167,6 +186,7 @@ in {
|
|||||||
switch = [];
|
switch = [];
|
||||||
automation = [];
|
automation = [];
|
||||||
script = { };
|
script = { };
|
||||||
|
media_source = {};
|
||||||
};
|
};
|
||||||
enable = true;
|
enable = true;
|
||||||
configDir = hassdir;
|
configDir = hassdir;
|
||||||
|
@ -14,7 +14,7 @@ in
|
|||||||
{
|
{
|
||||||
service = "tts.google_say";
|
service = "tts.google_say";
|
||||||
data = {
|
data = {
|
||||||
entity_id = entity;
|
entity_id = entity;
|
||||||
inherit message;
|
inherit message;
|
||||||
language = "de";
|
language = "de";
|
||||||
};
|
};
|
||||||
@ -27,10 +27,7 @@ in
|
|||||||
#}
|
#}
|
||||||
{ delay.seconds = 1; }
|
{ delay.seconds = 1; }
|
||||||
{ delay = ''
|
{ delay = ''
|
||||||
{% set duration = states.${entity}.attributes.media_duration %}
|
{% set duration = state_attr("${entity}","media_duration") %}
|
||||||
{% if duration > 0 %}
|
|
||||||
{% set duration = duration - 1 %}
|
|
||||||
{% endif %}
|
|
||||||
{% set seconds = duration % 60 %}
|
{% set seconds = duration % 60 %}
|
||||||
{% set minutes = (duration / 60)|int % 60 %}
|
{% set minutes = (duration / 60)|int % 60 %}
|
||||||
{% set hours = (duration / 3600)|int %}
|
{% set hours = (duration / 3600)|int %}
|
||||||
@ -53,6 +50,10 @@ in
|
|||||||
inherit message;
|
inherit message;
|
||||||
entity = "media_player.office";
|
entity = "media_player.office";
|
||||||
};
|
};
|
||||||
|
bedroom = message: tts {
|
||||||
|
inherit message;
|
||||||
|
entity = "media_player.bedroom";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
zigbee.prefix = "/ham/zigbee";
|
zigbee.prefix = "/ham/zigbee";
|
||||||
|
@ -21,24 +21,26 @@ let
|
|||||||
group_id_2 = 16389;
|
group_id_2 = 16389;
|
||||||
group_id_3 = 16390;
|
group_id_3 = 16390;
|
||||||
remote = "sensor.schlafzimmer_remote1_action";
|
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_scene_1 = "Solid";
|
||||||
default_color_1 = "Default";
|
default_color_1 = "Default";
|
||||||
main_color_select_1 = "select.wled_color_palette";
|
main_color_select_1 = "select.wled_color_palette";
|
||||||
light_group_1.entity_id = [
|
light_group_1.entity_id = [
|
||||||
main_light_1
|
main_light_1
|
||||||
|
main_light_2
|
||||||
];
|
];
|
||||||
|
|
||||||
# contains only the actually changeable lights
|
# contains only the actually changeable lights
|
||||||
light_group_2 = { entity_id = [
|
light_group_2.entity_id = [
|
||||||
"light.wohnzimmer_komode_osram"
|
"light.wohnzimmer_komode_osram"
|
||||||
"light.wohnzimmer_schrank_osram"
|
"light.wohnzimmer_schrank_osram"
|
||||||
"light.wohnzimmer_fenster_lichterkette_licht"
|
"light.wohnzimmer_fenster_lichterkette_licht"
|
||||||
];
|
];
|
||||||
};
|
light_group_3.entity_id = [
|
||||||
light_group_3 = { entity_id = [
|
|
||||||
"light.wohnzimmer_stehlampe_osram"
|
"light.wohnzimmer_stehlampe_osram"
|
||||||
]; };
|
];
|
||||||
|
|
||||||
statecond = cond: { # cond must be a list
|
statecond = cond: { # cond must be a list
|
||||||
condition = "template";
|
condition = "template";
|
||||||
|
104
makefu/2configs/home/ham/media/arbeitszimmer_matrix.nix
Normal file
104
makefu/2configs/home/ham/media/arbeitszimmer_matrix.nix
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
{ lib, ... }:
|
||||||
|
let
|
||||||
|
remote = "sensor.schlafzimmer_music_remote_action";
|
||||||
|
hlib = import ../lib;
|
||||||
|
step = 0.02;
|
||||||
|
#room = "bedroom";
|
||||||
|
room = "office";
|
||||||
|
|
||||||
|
player = "media_player.${room}";
|
||||||
|
say = hlib.say."${room}";
|
||||||
|
|
||||||
|
remote_action = key: actions: {
|
||||||
|
conditions = ''{{ trigger.entity_id == 'binary_sensor.matrix_button_${toString key}' }}'';
|
||||||
|
sequence = actions;
|
||||||
|
};
|
||||||
|
all_buttons = map (key: "binary_sensor.matrix_button_${toString key}") [
|
||||||
|
0 1 2 3 4 5 6 7 8 9
|
||||||
|
"b9" "b10" "b11" "b12" "b13" "b14"
|
||||||
|
];
|
||||||
|
in
|
||||||
|
{
|
||||||
|
services.home-assistant.config.rest_command = {
|
||||||
|
good_song = {
|
||||||
|
url = "http://prism.r:8001/good";
|
||||||
|
method = "POST";
|
||||||
|
};
|
||||||
|
bad_song = {
|
||||||
|
url = "http://prism.r:8001/skip";
|
||||||
|
method = "POST";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
services.home-assistant.config.automation =
|
||||||
|
[
|
||||||
|
{ alias = "Arbeitszimmer Matrix music action";
|
||||||
|
mode = "queued";
|
||||||
|
trigger = [
|
||||||
|
{
|
||||||
|
platform = "state";
|
||||||
|
entity_id = all_buttons;
|
||||||
|
to = "on"; # ignore 'unavailable'
|
||||||
|
}
|
||||||
|
];
|
||||||
|
action =
|
||||||
|
[
|
||||||
|
{ choose = [
|
||||||
|
(remote_action "9" {
|
||||||
|
service = "media_player.media_play";
|
||||||
|
target.entity_id = player;
|
||||||
|
})
|
||||||
|
(remote_action "7"
|
||||||
|
{
|
||||||
|
service = "media_player.media_mute";
|
||||||
|
target.entity_id = player;
|
||||||
|
data.is_volume_muted = ''{{ not state_attr('${player}' , 'is_volume_muted') }}'';
|
||||||
|
}
|
||||||
|
)
|
||||||
|
(remote_action "2"
|
||||||
|
{
|
||||||
|
service = "media_player.media_stop";
|
||||||
|
target.entity_id = player;
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
(remote_action "b9" [ { service = "rest_command.good_song"; } ])
|
||||||
|
(remote_action "b10" [ { service = "rest_command.bad_song"; } ])
|
||||||
|
|
||||||
|
(remote_action "3"
|
||||||
|
((say "Starte Lass") ++ [
|
||||||
|
{ service = "media_player.play_media";
|
||||||
|
data = {
|
||||||
|
media_content_id = "http://radio.lassul.us:8000/radio.mp3";
|
||||||
|
media_content_type = "music";
|
||||||
|
};
|
||||||
|
target.entity_id = player;
|
||||||
|
}
|
||||||
|
]))
|
||||||
|
(remote_action "1"
|
||||||
|
((say "Starte Groovesalad") ++ [
|
||||||
|
{ service = "media_player.play_media";
|
||||||
|
data = {
|
||||||
|
media_content_id = "http://ice2.somafm.com/groovesalad-128.mp3";
|
||||||
|
media_content_type = "music";
|
||||||
|
};
|
||||||
|
target.entity_id = player;
|
||||||
|
}
|
||||||
|
]))
|
||||||
|
(remote_action "8" {
|
||||||
|
service = "media_player.volume_set";
|
||||||
|
target.entity_id = player;
|
||||||
|
data.volume_level = ''{{ state_attr("${player}","volume_level") + (${toString step}|float) }}'';
|
||||||
|
})
|
||||||
|
(remote_action "5"{
|
||||||
|
service = "media_player.volume_set";
|
||||||
|
target.entity_id = player;
|
||||||
|
data.volume_level = ''{{ state_attr("${player}","volume_level") - (${toString step}|float) }}'';
|
||||||
|
})
|
||||||
|
];
|
||||||
|
#default = { };
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
}
|
@ -3,14 +3,9 @@ let
|
|||||||
in {
|
in {
|
||||||
services.home-assistant.config = {
|
services.home-assistant.config = {
|
||||||
notify = [
|
notify = [
|
||||||
#{
|
|
||||||
# platform = "kodi";
|
|
||||||
# name = "Kodi Wohnzimmer";
|
|
||||||
# host = firetv_stick;
|
|
||||||
#}
|
|
||||||
{
|
{
|
||||||
platform = "nfandroidtv";
|
platform = "nfandroidtv";
|
||||||
name = "FireTV Wohnzimmer";
|
name = "FireTV Wohnzimmer Notification";
|
||||||
host = firetv_stick;
|
host = firetv_stick;
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
@ -20,10 +15,10 @@ in {
|
|||||||
# name = "FireTV Stick kodi";
|
# name = "FireTV Stick kodi";
|
||||||
# host = firetv_stick;
|
# host = firetv_stick;
|
||||||
#}
|
#}
|
||||||
|
# Configuration needs to be done by hand via web interface "integration"
|
||||||
{ platform = "androidtv";
|
{ platform = "androidtv";
|
||||||
name = "FireTV Stick";
|
name = "FireTV Stick Android";
|
||||||
device_class = "firetv";
|
device_class = "firetv";
|
||||||
# adb_server_ip = firetv_stick;
|
|
||||||
host = firetv_stick;
|
host = firetv_stick;
|
||||||
port = 5555;
|
port = 5555;
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,10 @@
|
|||||||
{ lib, ...}:
|
{ lib, ...}:
|
||||||
let
|
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
|
statecond = cond: { # cond must be a list
|
||||||
condition = "template";
|
condition = "template";
|
||||||
value_template = "{{ trigger.to_state.state in ( " +
|
value_template = "{{ trigger.to_state.state in ( " +
|
||||||
|
158
makefu/2configs/home/ham/media/schlafzimmer_music_remote.nix
Normal file
158
makefu/2configs/home/ham/media/schlafzimmer_music_remote.nix
Normal file
@ -0,0 +1,158 @@
|
|||||||
|
{ lib, ... }:
|
||||||
|
let
|
||||||
|
remote = "sensor.schlafzimmer_music_remote_action";
|
||||||
|
hlib = import ../lib;
|
||||||
|
step = 0.03;
|
||||||
|
#room = "bedroom";
|
||||||
|
room = "living_room";
|
||||||
|
#room = "office";
|
||||||
|
|
||||||
|
player = "media_player.${room}";
|
||||||
|
say = hlib.say."${room}";
|
||||||
|
|
||||||
|
remote_action = state: actions: {
|
||||||
|
conditions = ''{{ trigger.to_state.attributes.action == '${state}' }}'';
|
||||||
|
sequence = actions;
|
||||||
|
};
|
||||||
|
album_list = [
|
||||||
|
# Wieso Weshalb Warum Junior
|
||||||
|
"Doris%20R%c3%bcbel,%20JUMBO%20Neue%20Medien%20%26%20Verlag%20GmbH/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Helfen,%20teilen,%20sich%20vertragen"
|
||||||
|
"Wieso%3f%20Weshalb%3f%20Warum%3f%20junior/Mein%20Kindergarten"
|
||||||
|
"Wieso%3f%20Weshalb%3f%20Warum%3f%20junior/Unser%20Werkzeug"
|
||||||
|
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Am%20Meer"
|
||||||
|
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Ampel,%20Stra%c3%9fe%20und%20Verkehr"
|
||||||
|
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Autos%20und%20Laster"
|
||||||
|
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Der%20Bagger"
|
||||||
|
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Der%20Bauernhof"
|
||||||
|
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Der%20Flughafen"
|
||||||
|
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Der%20Pinguin"
|
||||||
|
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Der%20Traktor"
|
||||||
|
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Die%20Baustelle"
|
||||||
|
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Die%20Eisenbahn"
|
||||||
|
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Die%20Feuerwehr"
|
||||||
|
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Die%20Jahreszeiten"
|
||||||
|
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Die%20M%c3%bcllabfuhr"
|
||||||
|
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Die%20Polizei"
|
||||||
|
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Die%20Rettungsfahrzeuge"
|
||||||
|
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Die%20Ritterburg"
|
||||||
|
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Heute,%20morgen,%20jetzt%20und%20gleich"
|
||||||
|
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Im%20Streichelzoo"
|
||||||
|
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20In%20den%20Bergen"
|
||||||
|
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Mama,%20Papa,%20Oma,%20Opa"
|
||||||
|
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Mein%20Hund"
|
||||||
|
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Tanken,%20waschen,%20reparieren"
|
||||||
|
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Tiere%20in%20Afrika"
|
||||||
|
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Unsere%20Tierkinder"
|
||||||
|
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Unterwegs%20mit%20Bus%20und%20Bahn"
|
||||||
|
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Was%20ich%20alles%20kann"
|
||||||
|
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Was%20kriecht%20und%20krabbelt%20da%3f"
|
||||||
|
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Was%20machen%20wir%20an%20Weihnachten%3f"
|
||||||
|
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Was%20machen%20wir%20im%20Fr%c3%bchling%3f"
|
||||||
|
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Was%20machen%20wir%20im%20Herbst%3f"
|
||||||
|
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Was%20machen%20wir%20im%20Sommer%3f"
|
||||||
|
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Was%20machen%20wir%20im%20Winter%3f"
|
||||||
|
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Was%20macht%20der%20Fu%c3%9fballer%3f"
|
||||||
|
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Was%20macht%20der%20Polizist"
|
||||||
|
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Was%20macht%20die%20Prinzessin%3f"
|
||||||
|
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Was%20w%c3%a4chst%20da%3f"
|
||||||
|
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Wenn%20es%20dunkel%20wird"
|
||||||
|
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Wer%20arbeitet%20auf%20der%20Baustelle%3f"
|
||||||
|
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Wir%20feiern%20Geburtstag"
|
||||||
|
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Wir%20gehen%20in%20den%20Zoo"
|
||||||
|
"Wieso%3f%20Weshalb%3f%20Warum%3f/Wieso%3f%20Weshalb%3f%20Warum%3f%20junior.%20Z%c3%a4hne%20putzen,%20Pipi%20machen"
|
||||||
|
|
||||||
|
];
|
||||||
|
albums = lib.concatMapStringsSep ", " (x: ''"A:ALBUMARTIST/${x}"'')
|
||||||
|
album_list;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
services.home-assistant.config.automation =
|
||||||
|
[
|
||||||
|
{ alias = "Schlafzimmer music action";
|
||||||
|
mode = "queued";
|
||||||
|
trigger = [
|
||||||
|
{
|
||||||
|
platform = "state";
|
||||||
|
entity_id = remote;
|
||||||
|
attribute = "action";
|
||||||
|
not_to = "";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
action =
|
||||||
|
[
|
||||||
|
{ choose = [
|
||||||
|
(remote_action "on"
|
||||||
|
((say "Starte Essensmusik") ++ [
|
||||||
|
{ service = "media_player.play_media";
|
||||||
|
data = {
|
||||||
|
media_content_id = "https://listen.openstream.co/4457/audio.mp3";
|
||||||
|
media_content_type = "music";
|
||||||
|
};
|
||||||
|
target.entity_id = player;
|
||||||
|
}
|
||||||
|
]))
|
||||||
|
(remote_action "off"
|
||||||
|
[
|
||||||
|
{
|
||||||
|
service = "media_player.media_stop";
|
||||||
|
target.entity_id = player;
|
||||||
|
}
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
(remote_action "arrow_right_hold"
|
||||||
|
((say "Starte Lass") ++ [
|
||||||
|
{ service = "media_player.play_media";
|
||||||
|
data = {
|
||||||
|
media_content_id = "http://radio.lassul.us:8000/radio.mp3";
|
||||||
|
media_content_type = "music";
|
||||||
|
};
|
||||||
|
target.entity_id = player;
|
||||||
|
}
|
||||||
|
]))
|
||||||
|
(remote_action "arrow_left_hold"
|
||||||
|
((say "Starte Deep House Music") ++ [
|
||||||
|
{ service = "media_player.play_media";
|
||||||
|
data = {
|
||||||
|
media_content_id = "http://live.dancemusic.ro:7000/stream.mp3";
|
||||||
|
media_content_type = "music";
|
||||||
|
};
|
||||||
|
target.entity_id = player;
|
||||||
|
}
|
||||||
|
]))
|
||||||
|
|
||||||
|
# TODO: choose random kindermusik?
|
||||||
|
(remote_action "brightness_move_up"
|
||||||
|
((say "Starte Liam Album") ++ [
|
||||||
|
{
|
||||||
|
service = "media_player.play_media";
|
||||||
|
target.entity_id = player;
|
||||||
|
data = {
|
||||||
|
media_content_id = "{{ [${albums}]|random }}";
|
||||||
|
media_content_type = "album";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
])
|
||||||
|
)
|
||||||
|
#(remote_action "brightness_move_down"
|
||||||
|
#)
|
||||||
|
(remote_action "arrow_right_click" {
|
||||||
|
|
||||||
|
service = "media_player.volume_set";
|
||||||
|
target.entity_id = player;
|
||||||
|
data.volume_level = ''{{ state_attr("${player}","volume_level") + (${toString step}|float) }}'';
|
||||||
|
})
|
||||||
|
#(remote_action "brightness_move_down" {
|
||||||
|
(remote_action "arrow_left_click"{
|
||||||
|
service = "media_player.volume_set";
|
||||||
|
target.entity_id = player;
|
||||||
|
data.volume_level = ''{{ state_attr("${player}","volume_level") - (${toString step}|float) }}'';
|
||||||
|
})
|
||||||
|
];
|
||||||
|
#default = { };
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
}
|
@ -4,5 +4,4 @@
|
|||||||
"192.168.111.31"
|
"192.168.111.31"
|
||||||
"192.168.111.32"
|
"192.168.111.32"
|
||||||
];
|
];
|
||||||
|
}
|
||||||
}
|
|
||||||
|
8
makefu/2configs/home/ham/sensor/dwd.nix
Normal file
8
makefu/2configs/home/ham/sensor/dwd.nix
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
services.home-assistant.config.sensor =
|
||||||
|
[
|
||||||
|
{ platform = "dwd_weather_warnings";
|
||||||
|
region_name = "Stadt Stuttgart";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
65
makefu/2configs/home/ham/sensor/pollen.nix
Normal file
65
makefu/2configs/home/ham/sensor/pollen.nix
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
{ pkgs, lib, ... }:
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
region = "112";
|
||||||
|
types = [
|
||||||
|
"Erle"
|
||||||
|
"Beifuss"
|
||||||
|
"Ambrosia"
|
||||||
|
"Birke"
|
||||||
|
"Esche"
|
||||||
|
"Hasel"
|
||||||
|
"Graeser"
|
||||||
|
"Roggen"
|
||||||
|
];
|
||||||
|
gen_tomorrow_sensor = type: {
|
||||||
|
name = "dwd_pollenbelastung_${toLower type}_tomorrow";
|
||||||
|
value = {
|
||||||
|
icon_template = "mdi:grass";
|
||||||
|
friendly_name = "${type} Morgen";
|
||||||
|
value_template = "{{ state_attr('sensor.dwd_pollenbelastung_${toLower type}', 'tomorrow') }}";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
gen_sensor = type: {
|
||||||
|
name = "dwd_pollenbelastung_${toLower type}";
|
||||||
|
value = {
|
||||||
|
icon_template = "mdi:tree-outline";
|
||||||
|
friendly_name = type;
|
||||||
|
value_template = ''
|
||||||
|
{% set dwd_state = state_attr('sensor.dwd_pollenbelastung_stuttgart', '${type}')['today'] %}
|
||||||
|
{% if dwd_state == "3" %}6{% elif dwd_state == "2-3"%}5{% elif dwd_state == "2"%}4{% elif dwd_state == "1-2"%}3{% elif dwd_state == "1"%}2{% elif dwd_state == "0-1"%}1{% else %}0{% endif %}
|
||||||
|
'';
|
||||||
|
attribute_templates.today = ''
|
||||||
|
{% set dwd_state = state_attr('sensor.dwd_pollenbelastung_stuttgart', '${type}')['today'] %}
|
||||||
|
{% if dwd_state == "3" %}6{% elif dwd_state == "2-3"%}5{% elif dwd_state == "2"%}4{% elif dwd_state == "1-2"%}3{% elif dwd_state == "1"%}2{% elif dwd_state == "0-1"%}1{% else %}0{% endif %}
|
||||||
|
'';
|
||||||
|
attribute_templates.tomorrow = ''
|
||||||
|
{% set dwd_state = state_attr('sensor.dwd_pollenbelastung_stuttgart', '${type}')['tomorrow'] %}
|
||||||
|
{% if dwd_state == "3" %}6{% elif dwd_state == "2-3"%}5{% elif dwd_state == "2"%}4{% elif dwd_state == "1-2"%}3{% elif dwd_state == "1"%}2{% elif dwd_state == "0-1"%}1{% else %}0{% endif %}
|
||||||
|
'';
|
||||||
|
# -1 == unknown
|
||||||
|
#attribute_templates.dayafter = ''
|
||||||
|
# {% set dwd_state = state_attr('sensor.dwd_pollenbelastung', '${type}')['dayafter_to'] %}
|
||||||
|
# {% if dwd_state == "3" %}6{% elif dwd_state == "2-3"%}5{% elif dwd_state == "2"%}4{% elif dwd_state == "1-2"%}3{% elif dwd_state == "1"%}2{% elif dwd_state == "0-1"%}1{% elif dwd_state == "-1"%}-1{% else %}0{% endif %}
|
||||||
|
#'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
services.home-assistant.config.sensor = [
|
||||||
|
{
|
||||||
|
platform = "rest";
|
||||||
|
scan_interval = 3600;
|
||||||
|
name = "DWD Pollenbelastung Stuttgart";
|
||||||
|
resource = "https://opendata.dwd.de/climate_environment/health/alerts/s31fg.json";
|
||||||
|
json_attributes_path = "$..content[?(@.partregion_id==${region})].Pollen";
|
||||||
|
json_attributes = types;
|
||||||
|
value_template = "{{ value_json.last_update }}";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
platform = "template";
|
||||||
|
sensors = (listToAttrs (map gen_sensor types)) //
|
||||||
|
(listToAttrs (map gen_tomorrow_sensor types)) ;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
@ -14,5 +14,7 @@ in {
|
|||||||
volumes = [
|
volumes = [
|
||||||
"${config}:/home/.local/share/signal-cli"
|
"${config}:/home/.local/share/signal-cli"
|
||||||
];
|
];
|
||||||
|
environment.MODE ="json-rpc";
|
||||||
|
#environment.MODE ="native"; # only required for reigstration
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -38,93 +38,6 @@ in
|
|||||||
icon = "mdi:chip";
|
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;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -2,9 +2,65 @@
|
|||||||
{
|
{
|
||||||
services.jellyfin.enable = true;
|
services.jellyfin.enable = true;
|
||||||
services.jellyfin.openFirewall = true;
|
services.jellyfin.openFirewall = true;
|
||||||
#users.users.${config.services.jellyfin.user}.extraGroups = [ "download" "video" "render" ];
|
|
||||||
state = [ "/var/lib/jellyfin" ];
|
state = [ "/var/lib/jellyfin" ];
|
||||||
systemd.services.jellyfin.serviceConfig.PrivateDevices = lib.mkForce false;
|
users.users.${config.services.jellyfin.user}.extraGroups = [ "download" "video" "render" ];
|
||||||
systemd.services.jellyfin.serviceConfig.DeviceAllow = lib.mkForce ["char-drm rwm" "char-nvidia-frontend" "char-nvidia-uvm"];
|
|
||||||
systemd.services.jellyfin.serviceConfig.SupplementaryGroups = [ "video" "render" "download" ];
|
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";
|
||||||
|
};
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
@ -22,10 +22,6 @@ in
|
|||||||
|
|
||||||
locations."/".proxyPass = "http://localhost:${toString port}";
|
locations."/".proxyPass = "http://localhost:${toString port}";
|
||||||
locations."/".proxyWebsockets = true;
|
locations."/".proxyWebsockets = true;
|
||||||
extraConfig = ''
|
|
||||||
if ( $server_addr != "${internal-ip}" ) {
|
|
||||||
return 403;
|
|
||||||
}
|
|
||||||
'';
|
|
||||||
};
|
};
|
||||||
|
networking.firewall.allowedTCPPorts = [ port ];
|
||||||
}
|
}
|
||||||
|
26
makefu/2configs/nginx/music.euer.nix
Normal file
26
makefu/2configs/nginx/music.euer.nix
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
|
let
|
||||||
|
hostname = config.krebs.build.host.name;
|
||||||
|
user = config.services.nginx.user;
|
||||||
|
group = config.services.nginx.group;
|
||||||
|
external-ip = config.krebs.build.host.nets.internet.ip4.addr;
|
||||||
|
internal-ip = config.krebs.build.host.nets.retiolum.ip4.addr;
|
||||||
|
in {
|
||||||
|
services.nginx = {
|
||||||
|
enable = lib.mkDefault true;
|
||||||
|
virtualHosts."music.euer.krebsco.de" = {
|
||||||
|
forceSSL = true;
|
||||||
|
enableACME = true;
|
||||||
|
locations."/" = {
|
||||||
|
proxyPass = "http://omo:4533/";
|
||||||
|
proxyWebsockets = true;
|
||||||
|
extraConfig = ''
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
25
makefu/2configs/remote-build/arm-emulation.nix
Normal file
25
makefu/2configs/remote-build/arm-emulation.nix
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
let qemu-arm-static = pkgs.stdenv.mkDerivation {
|
||||||
|
name = "qemu-arm-static";
|
||||||
|
src = builtins.fetchurl {
|
||||||
|
url = "https://github.com/multiarch/qemu-user-static/releases/download/v6.1.0-8/qemu-arm-static";
|
||||||
|
sha256 = "06344d77d4f08b3e1b26ff440cb115179c63ca8047afb978602d7922a51231e3";
|
||||||
|
};
|
||||||
|
dontUnpack = true;
|
||||||
|
installPhase = "install -D -m 0755 $src $out/bin/qemu-arm-static";
|
||||||
|
};
|
||||||
|
in {
|
||||||
|
# Enable binfmt emulation of extra binary formats (armv7l-linux, for exmaple).
|
||||||
|
boot.binfmt.emulatedSystems = [ "aarch64-linux" ];
|
||||||
|
boot.binfmt.registrations.arm = {
|
||||||
|
interpreter = "${qemu-arm-static}/bin/qemu-arm-static";
|
||||||
|
magicOrExtension = ''\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00'';
|
||||||
|
mask = ''\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\x00\xff\xfe\xff\xff\xff'';
|
||||||
|
};
|
||||||
|
|
||||||
|
# Define additional settings for nix.
|
||||||
|
nix.extraOptions = ''
|
||||||
|
extra-platforms = armv7l-linux
|
||||||
|
'';
|
||||||
|
nix.sandboxPaths = [ "/run/binfmt/arm=${qemu-arm-static}/bin/qemu-arm-static" ];
|
||||||
|
}
|
@ -2,21 +2,28 @@
|
|||||||
|
|
||||||
let
|
let
|
||||||
automount_opts =
|
automount_opts =
|
||||||
[ "x-systemd.automount"
|
[ "x-systemd.automount" "noauto"
|
||||||
"noauto" "x-systemd.idle-timeout=600"
|
"x-systemd.idle-timeout=300"
|
||||||
"x-systemd.device-timeout=5s"
|
"x-systemd.mount-timeout=60s"
|
||||||
"x-systemd.mount-timeout=5s"
|
|
||||||
];
|
];
|
||||||
host = "nextgum"; #TODO
|
host = "gum"; #TODO
|
||||||
in {
|
in {
|
||||||
fileSystems."/media/download" = {
|
boot.extraModprobeConfig = ''
|
||||||
device = "//${host}/download";
|
options cifs CIFSMaxBufSize=130048
|
||||||
|
'';
|
||||||
|
fileSystems."/media/cloud" = {
|
||||||
|
device = "//${host}/cloud-proxy";
|
||||||
fsType = "cifs";
|
fsType = "cifs";
|
||||||
options = automount_opts ++
|
options = automount_opts ++
|
||||||
[ "credentials=/var/src/secrets/download.smb"
|
[ "credentials=/var/src/secrets/download.smb"
|
||||||
"file_mode=0775"
|
"file_mode=0775"
|
||||||
"dir_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"
|
"vers=3"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
{ config, lib, pkgs, ... }:
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
with import <stockholm/lib>;
|
|
||||||
let
|
let
|
||||||
hostname = config.krebs.build.host.name;
|
hostname = config.krebs.build.host.name;
|
||||||
in {
|
in {
|
||||||
@ -11,15 +10,11 @@ in {
|
|||||||
# home = "/var/empty";
|
# home = "/var/empty";
|
||||||
# };
|
# };
|
||||||
environment.systemPackages = [ pkgs.samba ];
|
environment.systemPackages = [ pkgs.samba ];
|
||||||
users.users.download = {
|
|
||||||
uid = genid "download";
|
|
||||||
isNormalUser = true;
|
|
||||||
};
|
|
||||||
services.samba = {
|
services.samba = {
|
||||||
enable = true;
|
enable = true;
|
||||||
shares = {
|
shares = {
|
||||||
download = {
|
cloud-proxy = {
|
||||||
path = "/var/download";
|
path = "/media/cloud";
|
||||||
"read only" = "no";
|
"read only" = "no";
|
||||||
browseable = "yes";
|
browseable = "yes";
|
||||||
"guest ok" = "no";
|
"guest ok" = "no";
|
||||||
|
@ -21,11 +21,12 @@ in {
|
|||||||
"dir_mode=0770"
|
"dir_mode=0770"
|
||||||
"uid=${toString config.users.users.download.uid}"
|
"uid=${toString config.users.users.download.uid}"
|
||||||
"gid=${toString config.users.groups.download.gid}"
|
"gid=${toString config.users.groups.download.gid}"
|
||||||
#"vers=3"
|
"vers=3"
|
||||||
"vers=2.1"
|
#"vers=2.1"
|
||||||
"rsize=65536"
|
"rsize=65536"
|
||||||
"wsize=130048"
|
"wsize=130048"
|
||||||
"iocharset=utf8"
|
"iocharset=utf8"
|
||||||
|
"cache=loose"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -87,6 +87,12 @@ in {
|
|||||||
"guest ok" = "no";
|
"guest ok" = "no";
|
||||||
"valid users" = "makefu";
|
"valid users" = "makefu";
|
||||||
};
|
};
|
||||||
|
#cloud = {
|
||||||
|
# path = "/media/cloud/download/finished";
|
||||||
|
# "read only" = "no";
|
||||||
|
# browseable = "yes";
|
||||||
|
# "guest ok" = "yes";
|
||||||
|
#};
|
||||||
};
|
};
|
||||||
extraConfig = ''
|
extraConfig = ''
|
||||||
guest account = smbguest
|
guest account = smbguest
|
||||||
|
@ -2,18 +2,19 @@
|
|||||||
imports = [
|
imports = [
|
||||||
./android-pentest.nix
|
./android-pentest.nix
|
||||||
./consoles.nix
|
./consoles.nix
|
||||||
./core.nix
|
|
||||||
./core-gui.nix
|
./core-gui.nix
|
||||||
./dev.nix
|
./core.nix
|
||||||
./desktop.nix
|
./desktop.nix
|
||||||
|
./dev.nix
|
||||||
./extra-gui.nix
|
./extra-gui.nix
|
||||||
./games.nix
|
./games.nix
|
||||||
|
./maker.nix
|
||||||
./media.nix
|
./media.nix
|
||||||
./mobility.nix
|
./mobility.nix
|
||||||
./pcmanfm-extra.nix
|
./pcmanfm-extra.nix
|
||||||
./scanner-tools.nix
|
./scanner-tools.nix
|
||||||
./sec.nix
|
|
||||||
./sec-gui.nix
|
./sec-gui.nix
|
||||||
|
./sec.nix
|
||||||
./studio.nix
|
./studio.nix
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
brain
|
brain
|
||||||
whatsupnix
|
whatsupnix
|
||||||
nixpkgs-pytools
|
nixpkgs-pytools
|
||||||
|
nixpkgs-fmt
|
||||||
hydra-check
|
hydra-check
|
||||||
# git-related
|
# git-related
|
||||||
git-preview
|
git-preview
|
||||||
|
@ -8,5 +8,6 @@
|
|||||||
games-user-env
|
games-user-env
|
||||||
wine
|
wine
|
||||||
pkg2zip
|
pkg2zip
|
||||||
|
steam
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
16
makefu/2configs/tools/maker.nix
Normal file
16
makefu/2configs/tools/maker.nix
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
users.users.makefu.packages = with pkgs; [
|
||||||
|
# media
|
||||||
|
picard
|
||||||
|
asunder
|
||||||
|
#darkice
|
||||||
|
lame
|
||||||
|
# creation
|
||||||
|
blender
|
||||||
|
openscad
|
||||||
|
# slicing
|
||||||
|
cura
|
||||||
|
chitubox
|
||||||
|
];
|
||||||
|
}
|
21
makefu/2configs/wireguard/thierry.nix
Normal file
21
makefu/2configs/wireguard/thierry.nix
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
{ lib, ... }:
|
||||||
|
{
|
||||||
|
networking.wireguard.interfaces.thierry-wg = {
|
||||||
|
ips = [ "172.27.66.10/24" ]; # TODO: not dnyamic
|
||||||
|
privateKeyFile = (toString <secrets>) + "/wg-thierry.key";
|
||||||
|
allowedIPsAsRoutes = true;
|
||||||
|
# explicit route via eth0 to gum
|
||||||
|
peers = [
|
||||||
|
{
|
||||||
|
endpoint = "thierryhome.duckdns.org:51820";
|
||||||
|
allowedIPs = [ "172.27.66.0/24" ];
|
||||||
|
publicKey = "filYuG/xbb2YW8WT0xT26rzeZ/ZiM6NLnbxbsCR9rS0=";
|
||||||
|
persistentKeepalive = 25;
|
||||||
|
}
|
||||||
|
#{
|
||||||
|
# allowedIPs = [ "172.27.66.3/32" ];
|
||||||
|
# publicKey = "cDIf14LH4qleXNo889lS2ATIqDx9r//JNCkhHlHgc1Q=";
|
||||||
|
#}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
@ -41,7 +41,7 @@ let
|
|||||||
};
|
};
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
Type = "simple";
|
Type = "simple";
|
||||||
ExecStart = "${cfg.package}/bin/ps3netsrv++ ${shell.escape cfg.servedir}";
|
ExecStart = "${cfg.package}/bin/ps3netsrv ${shell.escape cfg.servedir}";
|
||||||
PrivateTmp = true;
|
PrivateTmp = true;
|
||||||
User = "${cfg.user}";
|
User = "${cfg.user}";
|
||||||
};
|
};
|
||||||
|
@ -22,7 +22,7 @@ let
|
|||||||
${concatMapStrings (c: ''
|
${concatMapStrings (c: ''
|
||||||
f="$out/${c.name}.conf"
|
f="$out/${c.name}.conf"
|
||||||
[ ! -e "$f" ] || chmod +w "$f"
|
[ ! -e "$f" ] || chmod +w "$f"
|
||||||
cat ${builtins.toFile "" (c.value + "\n")} >>"$f"
|
cat ${builtins.toFile "outfile" (c.value + "\n")} >>"$f"
|
||||||
chmod -w "$f"
|
chmod -w "$f"
|
||||||
'') (mapAttrsToList nameValuePair cfg.extraConfig)}
|
'') (mapAttrsToList nameValuePair cfg.extraConfig)}
|
||||||
chmod -w $out
|
chmod -w $out
|
||||||
|
@ -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'
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -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
|
|
@ -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
|
|
@ -1,45 +0,0 @@
|
|||||||
{ stdenv, lib, bundlerEnv, ruby, fetchFromGitHub, nodejs }:
|
|
||||||
# nix-shell --command "bundler install && bundix" in the clone, copy gemset.nix, Gemfile and Gemfile.lock
|
|
||||||
let
|
|
||||||
gems = bundlerEnv {
|
|
||||||
name = "beef-env";
|
|
||||||
inherit ruby;
|
|
||||||
gemdir = ./.;
|
|
||||||
};
|
|
||||||
in stdenv.mkDerivation {
|
|
||||||
name = "beef-2018-09-21";
|
|
||||||
src = fetchFromGitHub {
|
|
||||||
owner = "beefproject";
|
|
||||||
repo = "beef";
|
|
||||||
rev = "d237c95";
|
|
||||||
sha256 = "1mykbjwjcbd2a18wycaf35hi3b9rmvqz1jnk2v55sd4c39f0jpf2";
|
|
||||||
};
|
|
||||||
prePatch = ''
|
|
||||||
ls -alhtr
|
|
||||||
'';
|
|
||||||
patches = [ ./db-in-homedir.patch ];
|
|
||||||
buildInputs = [gems ruby];
|
|
||||||
installPhase = ''
|
|
||||||
mkdir -p $out/{bin,share/beef}
|
|
||||||
|
|
||||||
cp -r * $out/share/beef
|
|
||||||
# set the default db path, unfortunately setting to /tmp does not seem to work
|
|
||||||
# sed -i 's#db_file: .*#db_file: "/tmp/beef.db"#' $out/share/beef/config.yaml
|
|
||||||
|
|
||||||
bin=$out/bin/beef
|
|
||||||
cat > $bin <<EOF
|
|
||||||
#!/bin/sh -e
|
|
||||||
PATH=$PATH:${nodejs}/bin/
|
|
||||||
exec ${gems}/bin/bundle exec ${ruby}/bin/ruby $out/share/beef/beef "\$@"
|
|
||||||
EOF
|
|
||||||
chmod +x $bin
|
|
||||||
'';
|
|
||||||
|
|
||||||
meta = with lib; {
|
|
||||||
homepage = https://beefproject.com/;
|
|
||||||
description = "The Browser Exploitation Framework";
|
|
||||||
platforms = platforms.linux;
|
|
||||||
maintainers = with maintainers; [ makefu ];
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
File diff suppressed because it is too large
Load Diff
@ -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
|
|
||||||
];
|
|
||||||
}
|
|
@ -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"
|
|
@ -16,7 +16,12 @@ buildPythonApplication rec {
|
|||||||
nativeBuildInputs = [
|
nativeBuildInputs = [
|
||||||
mypy
|
mypy
|
||||||
];
|
];
|
||||||
checkPhase = ''
|
|
||||||
mypy --strict mediawiki_matrix_bot
|
doCheck = false;
|
||||||
'';
|
#checkInputs = [
|
||||||
|
# types-aiofiles
|
||||||
|
#];
|
||||||
|
#checkPhase = ''
|
||||||
|
# mypy --strict mediawiki_matrix_bot
|
||||||
|
#'';
|
||||||
}
|
}
|
||||||
|
@ -1,3 +1,6 @@
|
|||||||
|
let
|
||||||
|
unstable = (import <nixpkgs-unstable> {}).pkgs;
|
||||||
|
in
|
||||||
self: super:
|
self: super:
|
||||||
with super.lib; with builtins; let
|
with super.lib; with builtins; let
|
||||||
# This callPackage will try to detect obsolete overrides.
|
# This callPackage will try to detect obsolete overrides.
|
||||||
@ -43,6 +46,8 @@ in {
|
|||||||
alsa-hdsploader = callPackage ./custom/alsa-tools { alsaToolTarget="hdsploader";};
|
alsa-hdsploader = callPackage ./custom/alsa-tools { alsaToolTarget="hdsploader";};
|
||||||
qcma = super.pkgs.libsForQt5.callPackage ./custom/qcma { };
|
qcma = super.pkgs.libsForQt5.callPackage ./custom/qcma { };
|
||||||
inherit (callPackage ./devpi {}) devpi-web ;
|
inherit (callPackage ./devpi {}) devpi-web ;
|
||||||
|
jellyfin = unstable.jellyfin;
|
||||||
|
jellyfin-web = unstable.jellyfin-web;
|
||||||
nodemcu-uploader = super.pkgs.callPackage ./nodemcu-uploader {};
|
nodemcu-uploader = super.pkgs.callPackage ./nodemcu-uploader {};
|
||||||
liveproxy = super.pkgs.python3Packages.callPackage ./custom/liveproxy {};
|
liveproxy = super.pkgs.python3Packages.callPackage ./custom/liveproxy {};
|
||||||
mediawiki-matrix-bot = super.pkgs.python3Packages.callPackage ./custom/mediawiki-matrix-bot {};
|
mediawiki-matrix-bot = super.pkgs.python3Packages.callPackage ./custom/mediawiki-matrix-bot {};
|
||||||
|
@ -2,8 +2,9 @@
|
|||||||
, makeWrapper
|
, makeWrapper
|
||||||
, autoPatchelfHook
|
, autoPatchelfHook
|
||||||
, xorg
|
, xorg
|
||||||
, gnome3
|
|
||||||
, libpng12
|
, libpng12
|
||||||
|
, gtk3
|
||||||
|
, gnome
|
||||||
}:
|
}:
|
||||||
stdenv.mkDerivation rec {
|
stdenv.mkDerivation rec {
|
||||||
name = "ns-atmosphere-programmer-${version}";
|
name = "ns-atmosphere-programmer-${version}";
|
||||||
@ -15,13 +16,13 @@ stdenv.mkDerivation rec {
|
|||||||
sha256 = "1cnyydsmrcpfwpdiry7qybh179499wpbvlzq5rk442hq9ak416ri";
|
sha256 = "1cnyydsmrcpfwpdiry7qybh179499wpbvlzq5rk442hq9ak416ri";
|
||||||
};
|
};
|
||||||
|
|
||||||
buildInputs = with xorg; [ libX11 libXxf86vm libSM gnome3.gtk libpng12 ];
|
buildInputs = with xorg; [ libX11 libXxf86vm libSM gtk3 libpng12 ];
|
||||||
nativeBuildInputs = [ autoPatchelfHook makeWrapper ];
|
nativeBuildInputs = [ autoPatchelfHook makeWrapper ];
|
||||||
|
|
||||||
installPhase = ''
|
installPhase = ''
|
||||||
install -D -m755 NS-Atmosphere $out/bin/NS-Atmosphere
|
install -D -m755 NS-Atmosphere $out/bin/NS-Atmosphere
|
||||||
wrapProgram $out/bin/NS-Atmosphere --prefix XDG_DATA_DIRS : "$GSETTINGS_SCHEMAS_PATH" \
|
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;
|
dontStrip = true;
|
||||||
|
33
makefu/5pkgs/ps3netsrv/default.nix
Normal file
33
makefu/5pkgs/ps3netsrv/default.nix
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
{ lib
|
||||||
|
, stdenv
|
||||||
|
, fetchFromGitHub
|
||||||
|
, meson
|
||||||
|
, ninja
|
||||||
|
, mbedtls
|
||||||
|
}:
|
||||||
|
|
||||||
|
stdenv.mkDerivation rec {
|
||||||
|
pname = "ps3netsrv";
|
||||||
|
version = "20220813";
|
||||||
|
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
owner = "aldostools";
|
||||||
|
repo = "webMAN-MOD";
|
||||||
|
rev = "5301277a0eb2275c73d7c82af9cb9e9ec34369e4";
|
||||||
|
hash = "sha256-hgQSqRKFomHgOr1ejfKoR/Sywa3AjbinmAAgscVYs44=";
|
||||||
|
};
|
||||||
|
postUnpack = "pwd; ls -alhtr; ls -alhtr source";
|
||||||
|
|
||||||
|
#dontUseCmakeConfigure = true;
|
||||||
|
nativeBuildInputs = [ mbedtls meson ninja ];
|
||||||
|
buildInputs = [ mbedtls ];
|
||||||
|
sourceRoot = "./source/_Projects_/ps3netsrv";
|
||||||
|
|
||||||
|
meta = with lib; {
|
||||||
|
homepage = "https://github.com/aldostools/webMAN-MOD/wiki/~-PS3-NET-Server";
|
||||||
|
description = "a server application used to stream content from a remote server to the PS3";
|
||||||
|
maintainers = [ maintainers.makefu ];
|
||||||
|
platforms = platforms.unix;
|
||||||
|
license = licenses.mit;
|
||||||
|
};
|
||||||
|
}
|
@ -11,7 +11,7 @@ buildGoModule rec {
|
|||||||
};
|
};
|
||||||
|
|
||||||
proxyVendor = true;
|
proxyVendor = true;
|
||||||
vendorSha256 = "sha256-901xkzF/p/kUy7tZELwNhgepRDScUeWQM3isy7APuik=";
|
vendorSha256 = "sha256-AOtWR7Ew+0I7+TrMZOCxOKGCv+mlvcqy9s+gX2JKwnE=";
|
||||||
|
|
||||||
# tests try to access the internet to scrape websites
|
# tests try to access the internet to scrape websites
|
||||||
doCheck = false;
|
doCheck = false;
|
||||||
|
@ -75,20 +75,20 @@
|
|||||||
(lib.mkIf ( host-src.hw ) {
|
(lib.mkIf ( host-src.hw ) {
|
||||||
nixos-hardware.git = {
|
nixos-hardware.git = {
|
||||||
url = https://github.com/nixos/nixos-hardware.git;
|
url = https://github.com/nixos/nixos-hardware.git;
|
||||||
ref = "a0d8383";
|
ref = "12620020f76b1b5d2b0e6fbbda831ed4f5fe56e1";
|
||||||
};
|
};
|
||||||
})
|
})
|
||||||
|
|
||||||
(lib.mkIf ( host-src.nix-ld ) {
|
(lib.mkIf ( host-src.nix-ld ) {
|
||||||
nix-ld.git = {
|
nix-ld.git = {
|
||||||
url = https://github.com/Mic92/nix-ld.git;
|
url = https://github.com/Mic92/nix-ld.git;
|
||||||
ref = "eb9cb8d";
|
ref = "c25cc4b";
|
||||||
};
|
};
|
||||||
})
|
})
|
||||||
(lib.mkIf ( host-src.home-manager ) {
|
(lib.mkIf ( host-src.home-manager ) {
|
||||||
home-manager.git = {
|
home-manager.git = {
|
||||||
url = https://github.com/rycee/home-manager;
|
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)
|
# usage: $(nix-build --no-out-link --argstr name HOSTNAME -A deploy)
|
||||||
deploy = pkgs.krops.writeDeploy "${name}-deploy" {
|
deploy = pkgs.krops.writeDeploy "${name}-deploy" {
|
||||||
source = source { test = false; };
|
source = source { test = false; };
|
||||||
fast = true;
|
|
||||||
target = "root@${target}/var/src";
|
target = "root@${target}/var/src";
|
||||||
buildTarget = if target == buildTarget then "root@${target}/var/src" else "root@${buildTarget}/tmp/";
|
buildTarget = if target == buildTarget then "root@${target}/var/src" else "root@${buildTarget}/tmp/";
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user