summaryrefslogtreecommitdiffstats
path: root/makefu
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2020-10-03 13:44:30 +0200
committertv <tv@krebsco.de>2020-10-03 13:44:30 +0200
commitd1e52425e0d5d79a33b11c92cc2afb498075d953 (patch)
tree29277982f014eaae680e006b6afc7fdb42e8d9b2 /makefu
parent654f64f05935a69607a540f2e8d15619cee9e15e (diff)
parent7e7499d86302d261c8f8404fb34f2ac091318d0e (diff)
Merge remote-tracking branch 'prism/master'
Diffstat (limited to 'makefu')
-rw-r--r--makefu/1systems/wbob/config.nix4
-rw-r--r--makefu/2configs/bureautomation/kalauerbot.nix17
-rw-r--r--makefu/2configs/deployment/docker/template.md23
-rw-r--r--makefu/2configs/ham/default.nix13
-rw-r--r--makefu/2configs/ham/device_tracker/openwrt.nix10
-rw-r--r--makefu/2configs/home-manager/cli.nix25
-rw-r--r--makefu/2configs/hw/switch.nix6
-rw-r--r--makefu/2configs/stats/server.nix33
-rw-r--r--makefu/2configs/tools/consoles.nix1
-rw-r--r--makefu/2configs/tools/dev.nix3
-rw-r--r--makefu/5pkgs/awesomecfg/default.nix4
-rw-r--r--makefu/5pkgs/awesomecfg/full.cfg21
-rw-r--r--makefu/5pkgs/chapter-marker/default.nix9
-rw-r--r--makefu/5pkgs/kalauerbot/default.nix18
-rw-r--r--makefu/5pkgs/kalauerbot/matrixbot.patch12
-rw-r--r--makefu/5pkgs/kalauerbot/python-matrixbot.nix31
-rw-r--r--makefu/5pkgs/kalauerbot/translate.patch17
-rw-r--r--makefu/5pkgs/nsrenamer/default.nix3
-rwxr-xr-xmakefu/5pkgs/nsrenamer/nsrenamer.sh58
-rw-r--r--makefu/5pkgs/tt-rss/default.nix25
20 files changed, 252 insertions, 81 deletions
diff --git a/makefu/1systems/wbob/config.nix b/makefu/1systems/wbob/config.nix
index 9d0c7af61..32dedbde2 100644
--- a/makefu/1systems/wbob/config.nix
+++ b/makefu/1systems/wbob/config.nix
@@ -26,7 +26,8 @@ in {
# <stockholm/makefu/2configs/audio/jack-on-pulse.nix>
# <stockholm/makefu/2configs/audio/realtime-audio.nix>
# <stockholm/makefu/2configs/vncserver.nix>
- <stockholm/makefu/2configs/logging/server.nix>
+ ## no need for dns logs anymore
+ # <stockholm/makefu/2configs/logging/server.nix>
# Services
# <stockholm/makefu/2configs/hydra/stockholm.nix>
@@ -48,6 +49,7 @@ in {
<stockholm/makefu/2configs/bureautomation> # new hass entry point
<stockholm/makefu/2configs/bureautomation/led-fader.nix>
+ <stockholm/makefu/2configs/bureautomation/kalauerbot.nix>
# <stockholm/makefu/2configs/bureautomation/visitor-photostore.nix>
# <stockholm/makefu/2configs/bureautomation/mpd.nix> #mpd is only used for TTS, this is the web interface
<stockholm/makefu/2configs/mqtt.nix>
diff --git a/makefu/2configs/bureautomation/kalauerbot.nix b/makefu/2configs/bureautomation/kalauerbot.nix
new file mode 100644
index 000000000..d61b8885e
--- /dev/null
+++ b/makefu/2configs/bureautomation/kalauerbot.nix
@@ -0,0 +1,17 @@
+{ config, lib, pkgs, ... }:
+
+{
+ systemd.services.kalauerbot = {
+ description = "Kalauerbot";
+ after = [ "network-online.target" ];
+ wantedBy = [ "multi-user.target" ];
+ environment = import <secrets/bureautomation/citadel.nix>;
+ serviceConfig = {
+ DynamicUser = true;
+ StateDirectory = "kalauerbot";
+ WorkingDirectory = "/var/lib/kalauerbot";
+ ExecStart = "${pkgs.kalauerbot}/bin/kalauerbot";
+ PrivateTmp = true;
+ };
+ };
+}
diff --git a/makefu/2configs/deployment/docker/template.md b/makefu/2configs/deployment/docker/template.md
index a26b2f042..690ce236e 100644
--- a/makefu/2configs/deployment/docker/template.md
+++ b/makefu/2configs/deployment/docker/template.md
@@ -1,15 +1,20 @@
# BGT<NUMBER>
-1. studio-link aufnehmen drücken (wichtig)
- - markus 6407eb63@studio-link.de
- - Felix1 1f1021b2@studio-link.de
- - L33tFelix 4d47a82a@studio-link.de
- - Ingo 03b33b4a@studio-link.de
+1. studio-link aufnehmen drücken, schauen ob file größer wird (wichtig)
+ - markus 6407eb63@studio-link.de
+ - Felix1 1f1021b2@studio-link.de
+ - L33tFelix 842f85eb@studio-link.de
+ - Ingo 03b33b4a@studio-link.de
2. audiocity starten, 48000Hz einstellen, Audio-Device checken und aufnehmen drücken (wichtig)
+ * alternativ:
+ `$ pacmd list-sources | grep -e device.string -e 'name:' # keins der "monitor" devices`
+ `$ parecord --channels=1 -d alsa_input.usb-Burr-Brown_from_TI_USB_Audio_CODEC-00.analog-stereo bgt.wav`
3. obs starten und aufnehmen drücken (eher unwichtig)
-4. darkice starten (wichtig)
-4. klatschen
-5. Hallo und herzlich Willkommen
+5. darkice starten (wichtig)
+6. klatschen
+7. Hallihallo und Herzlich Willkommen
+8. chapter-marker starten mit ctrl-u auf "H" von "Halli" (wichtig)
+9. Blast markieren und ctrl-j drücken für neuen Eintrag
## Vorschläge
### Backlog von Picks und Lesefoo aus der letzten Woche
@@ -31,3 +36,5 @@
## Lesefoo
## Picks
+
+## Ende
diff --git a/makefu/2configs/ham/default.nix b/makefu/2configs/ham/default.nix
index c7e8733b7..8311a1a76 100644
--- a/makefu/2configs/ham/default.nix
+++ b/makefu/2configs/ham/default.nix
@@ -39,6 +39,15 @@ in {
];
};
config = {
+ influxdb = {
+ database = "ham";
+ host = "localhost:8086";
+ tags = {
+ instance = "omo";
+ source = "hass";
+ };
+ };
+
config = {};
input_select = zigbee.input_select; # dict
timer = zigbee.timer // kurzzeitwecker.timer; # dict
@@ -91,6 +100,7 @@ in {
];
sun.elevation = 247;
recorder = {};
+ device_tracker = (import ./device_tracker/openwrt.nix);
media_player = [
{ platform = "FireTV Stick kodi";
host = firetv_stick;
@@ -128,7 +138,7 @@ in {
};
luftdaten = {
show_on_map = true;
- sensor_id = 679;
+ sensor_id = 10529;
sensors.monitored_conditions = [ "P1" "P2" ];
};
#binary_sensor =
@@ -162,4 +172,5 @@ in {
configDir = hassdir;
};
+ state = [ "/var/lib/hass/known_devices.yaml" ];
}
diff --git a/makefu/2configs/ham/device_tracker/openwrt.nix b/makefu/2configs/ham/device_tracker/openwrt.nix
new file mode 100644
index 000000000..8173fcfcb
--- /dev/null
+++ b/makefu/2configs/ham/device_tracker/openwrt.nix
@@ -0,0 +1,10 @@
+[
+ { platform = "luci";
+ host = "192.168.1.5";
+ username = "root";
+ password = import <secrets/hass/router.nix>;
+ interval_seconds = 30; # instead of 12seconds
+ consider_home = 300; # 5 minutes timeout
+ new_device_defaults.track_new_devices = true;
+ }
+]
diff --git a/makefu/2configs/home-manager/cli.nix b/makefu/2configs/home-manager/cli.nix
index 5d5673b81..38d02424c 100644
--- a/makefu/2configs/home-manager/cli.nix
+++ b/makefu/2configs/home-manager/cli.nix
@@ -2,31 +2,6 @@
imports = [ ./zsh.nix ];
home-manager.users.makefu = {
programs.direnv = {
- stdlib = ''
-use_nix() {
- local cache=".direnv.$(nixos-version --hash)"
-
- if [[ ! -e "$cache" ]] || \
- [[ "$HOME/.direnvrc" -nt "$cache" ]] || \
- [[ ".envrc" -nt "$cache" ]] || \
- [[ "default.nix" -nt "$cache" ]] || \
- [[ "shell.nix" -nt "$cache" ]];
- then
- local tmp="$(mktemp "$${cache}.tmp-XXXXXXXX")"
- trap "rm -rf '$tmp' >/dev/null" EXIT
- nix-shell --show-trace "$@" --run 'direnv dump' > "$tmp" && \
- mv "$tmp" "$cache"
- fi
-
- direnv_load cat "$cache"
-
- if [[ $# = 0 ]]; then
- watch_file default.nix
- watch_file shell.nix
- rm direnv.* 2>/dev/null
- fi
-}
-'';
enableZshIntegration = true;
};
};
diff --git a/makefu/2configs/hw/switch.nix b/makefu/2configs/hw/switch.nix
index d46e8cf3f..79de7ffb1 100644
--- a/makefu/2configs/hw/switch.nix
+++ b/makefu/2configs/hw/switch.nix
@@ -2,9 +2,11 @@
{
- users.extraUsers.${config.krebs.build.user.name}.extraGroups = [ "plugdev" ];
-
+ users.users.makefu.extraGroups = [ "plugdev" ];
+ users.groups.plugdev = {};
services.udev.extraRules = ''
SUBSYSTEM=="usb", ATTR{idVendor}=="0955", MODE="0664", GROUP="plugdev"
+ SUBSYSTEM=="usb", ATTR{idVendor}=="16c0", ATTR{idProduct}=="27e2", SYMLINK+="switch-%k", MODE="0664", GROUP="plugdev"
+ SUBSYSTEM=="usb", ATTR{idVendor}=="057e", ATTR{idProduct}=="3000", SYMLINK+="switch-%k", MODE="0664", GROUP="plugdev"
'';
}
diff --git a/makefu/2configs/stats/server.nix b/makefu/2configs/stats/server.nix
index bb8fd1750..a2d0693ab 100644
--- a/makefu/2configs/stats/server.nix
+++ b/makefu/2configs/stats/server.nix
@@ -41,40 +41,7 @@ in {
bind-address = ":${toString collectd-port}";
}];
};
- krebs.kapacitor =
- let
- echoToIrc = pkgs.writeDash "echo_irc" ''
- set -euf
- data="$(${pkgs.jq}/bin/jq -r .message)"
- export LOGNAME=${irc-nick}
- ${pkgs.irc-announce}/bin/irc-announce \
- ${irc-server} 6667 ${irc-nick} \#noise "$data" >/dev/null
- '';
- in {
- enable = true;
- alarms = {
- cpu_deadman.database = db;
- cpu_deadman.text = ''
- var data = batch
- |query(${"'''"}
- SELECT mean("value") AS mean
- FROM "collectd_db"."default"."cpu_value"
- WHERE "type_instance" = 'idle' AND "type" = 'percent' fill(0)
- ${"'''"})
- .period(10m)
- .every(1m)
- .groupBy('host')
- data |alert()
- .crit(lambda: "mean" < 50)
- .stateChangesOnly()
- .exec('${echoToIrc}')
- data |deadman(1.0,5m)
- .stateChangesOnly()
- .exec('${echoToIrc}')
- '';
- };
- };
networking.firewall.extraCommands = ''
iptables -A INPUT -i retiolum -p udp --dport ${toString collectd-port} -j ACCEPT
iptables -A INPUT -i retiolum -p tcp --dport ${toString influx-port} -j ACCEPT
diff --git a/makefu/2configs/tools/consoles.nix b/makefu/2configs/tools/consoles.nix
index e54ff4ff5..a4c474c5b 100644
--- a/makefu/2configs/tools/consoles.nix
+++ b/makefu/2configs/tools/consoles.nix
@@ -7,5 +7,6 @@
cue2pops
nx_game_info
hactool
+ nsrenamer
];
}
diff --git a/makefu/2configs/tools/dev.nix b/makefu/2configs/tools/dev.nix
index 276ed6cdc..2acdcf69c 100644
--- a/makefu/2configs/tools/dev.nix
+++ b/makefu/2configs/tools/dev.nix
@@ -13,8 +13,7 @@
gi
flashrom
mosquitto
- nodemcu-uploader
- esptool
+ esphome
# nix related
nix-index
nix-review
diff --git a/makefu/5pkgs/awesomecfg/default.nix b/makefu/5pkgs/awesomecfg/default.nix
index 1ae2f50d9..acbe61f3f 100644
--- a/makefu/5pkgs/awesomecfg/default.nix
+++ b/makefu/5pkgs/awesomecfg/default.nix
@@ -6,15 +6,17 @@
, blueman
, clipit
, flameshot
+, chapter-marker
, modkey ? "Mod4"
, locker? "${pkgs.xlock}/bin/xlock -mode blank"
, ... }:
{
- # replace: @alsaUtils@ @xlockmore@ @xbacklight@ @modkey@
+ # replace: @alsaUtils@ @xlockmore@ @xbacklight@ @modkey@ @chapter-marker@
full = lib.makeOverridable pkgs.substituteAll {
name = "awesome_full_config";
inherit alsaUtils locker xbacklight modkey networkmanagerapplet blueman clipit flameshot ;
+ chaptermarker = chapter-marker;
isExecutable = false;
src = ./full.cfg;
};
diff --git a/makefu/5pkgs/awesomecfg/full.cfg b/makefu/5pkgs/awesomecfg/full.cfg
index d96b61ad6..86b401cfa 100644
--- a/makefu/5pkgs/awesomecfg/full.cfg
+++ b/makefu/5pkgs/awesomecfg/full.cfg
@@ -376,6 +376,12 @@ globalkeys = awful.util.table.join(
awful.key({ }, "XF86AudioMute", function ()
awful.util.spawn("@alsaUtils@/bin/amixer -q -D default sset Master toggle", false) end),
+ -- chapter-marker
+ awful.key({ "Control" }, "u", function () awful.spawn("@chaptermarker@/bin/chapter-start") end,
+ {description = "start the chapter marker",}),
+ awful.key({ "Control" }, "j", function () awful.spawn("@chaptermarker@/bin/chapter-mark") end,
+ {description = "create a chapter mark",}),
+
-- Prompt
awful.key({ modkey }, "r", function () awful.screen.focused().mypromptbox:run() end,
{description = "run prompt", group = "launcher"}),
@@ -492,9 +498,16 @@ awful.rules.rules = {
properties = { floating = true } },
--{ rule = { class = "gimp" },
-- properties = { floating = true } },
- -- Set Firefox to always map on tags number 2 of screen 1.
- -- { rule = { class = "Firefox" },
- -- properties = { tag = tags[1][2] } },
+ { rule = { class = "Firefox" },
+ properties = { tag = tags[3] } },
+ { rule = { class = "signal-desktop" },
+ properties = { tag = tags[4] } },
+ { rule = { class = "telegram-desktop" },
+ properties = { tag = tags[4] } },
+ { rule = { class = "mutt" },
+ properties = { tag = tags[5] } },
+ { rule = { class = "mosh" },
+ properties = { tag = tags[2] } },
}
-- }}}
@@ -569,7 +582,7 @@ local os = {
-- {{{ autostart
do
- awful.spawn("urxvt", { tag = tags[1] }) -- dev shell
+ -- awful.spawn("urxvt", { tag = tags[1] }) -- dev shell
awful.spawn("urxvt -e mosh makefu@gum.i", { tag = tags[2] })
awful.spawn("firefox", { tag = tags[3] })
awful.spawn("telegram-desktop", { tag = tags[4] })
diff --git a/makefu/5pkgs/chapter-marker/default.nix b/makefu/5pkgs/chapter-marker/default.nix
index fe3e48142..5ffb63ae9 100644
--- a/makefu/5pkgs/chapter-marker/default.nix
+++ b/makefu/5pkgs/chapter-marker/default.nix
@@ -1,4 +1,4 @@
-{ coreutils, fetchFromGitHub, makeWrapper, xdotool, stdenv, ... }:
+{ coreutils, fetchFromGitHub, makeWrapper, xclip, libnotify, stdenv, ... }:
stdenv.mkDerivation rec {
name = "chapter-marker-${version}";
@@ -6,8 +6,8 @@ stdenv.mkDerivation rec {
src = fetchFromGitHub {
owner = "makefu";
repo = "chapter-marker";
- rev = "7602b611fb3d67fdb8a86db23220074dfa9dfa1e";
- sha256 = "0cwh650c3qhdrcvrqfzgrwpsnj4lbq64fw2sfwvnbxz94b4q36av";
+ rev = "71b9bb8bc4d6fa87de6bea8f42d5486d05cf5443";
+ sha256 = "13cvk24pwwyv9i21h57690s5niwkcrcvn8l24zfxwbgq0wwzw38x";
};
buildInputs = [ makeWrapper ];
@@ -16,7 +16,8 @@ stdenv.mkDerivation rec {
let
path = stdenv.lib.makeBinPath [
coreutils
- xdotool
+ libnotify
+ xclip
];
in
''
diff --git a/makefu/5pkgs/kalauerbot/default.nix b/makefu/5pkgs/kalauerbot/default.nix
new file mode 100644
index 000000000..2cecbc3f2
--- /dev/null
+++ b/makefu/5pkgs/kalauerbot/default.nix
@@ -0,0 +1,18 @@
+{ stdenv, python3, fetchgit }:
+python3.pkgs.buildPythonPackage rec {
+name = "kalauerbot";
+rev = "08d98aa";
+ src = fetchgit {
+ url = "http://cgit.euer.krebsco.de/kalauerbot";
+ inherit rev;
+ sha256 = "017hh61smgq4zsxd10brgwmykwgwabgllxjs31xayvs1hnqmkv2v";
+ };
+ propagatedBuildInputs = with python3.pkgs;[
+ (callPackage ./python-matrixbot.nix {})
+ (stdenv.lib.overrideDerivation googletrans (self: {
+ patches = [ ./translate.patch ];
+ }))
+ ];
+ checkInputs = [ python3.pkgs.black ];
+}
+
diff --git a/makefu/5pkgs/kalauerbot/matrixbot.patch b/makefu/5pkgs/kalauerbot/matrixbot.patch
new file mode 100644
index 000000000..2b9bbbea1
--- /dev/null
+++ b/makefu/5pkgs/kalauerbot/matrixbot.patch
@@ -0,0 +1,12 @@
+diff --git a/matrixbot/matrixbot.py b/matrixbot/matrixbot.py
+index 8e5598c..d8c23d2 100644
+--- a/matrixbot/matrixbot.py
++++ b/matrixbot/matrixbot.py
+@@ -51,7 +51,6 @@ class MatrixBot:
+ self.user = None
+ if self.token is not None and self.user_id is not None:
+ self.user = self.client.get_user(self.user_id)
+- self.user.set_display_name(self.display_name)
+ self.init_rooms(self.client.rooms)
+ self.invite_listener = self.client.add_invite_listener(self.handle_invite)
+ self.cache = Cache(dbfile=cache_db)
diff --git a/makefu/5pkgs/kalauerbot/python-matrixbot.nix b/makefu/5pkgs/kalauerbot/python-matrixbot.nix
new file mode 100644
index 000000000..7bc5aa7f3
--- /dev/null
+++ b/makefu/5pkgs/kalauerbot/python-matrixbot.nix
@@ -0,0 +1,31 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, markdown
+, matrix-client
+}:
+
+buildPythonPackage rec {
+ pname = "python-matrixbot";
+ version = "0.0.7";
+ CI_COMMIT_TAG = version;
+
+ #src = ./python-matrixbot;
+ src = fetchPypi {
+ inherit pname version;
+ sha256 = "9412981b14ff3ab7ffbb1bfc1691758113ab8d71f731b3093d8808c286b69c71";
+ };
+ patches = [ ./matrixbot.patch ];
+
+ propagatedBuildInputs = [
+ markdown
+ matrix-client
+ ];
+
+ meta = with lib; {
+ description = "A basic bot for Matrix";
+ homepage = https://gitlab.com/gibberfish/python-matrixbot;
+ license = licenses.mit;
+ # maintainers = [ maintainers. ];
+ };
+}
diff --git a/makefu/5pkgs/kalauerbot/translate.patch b/makefu/5pkgs/kalauerbot/translate.patch
new file mode 100644
index 000000000..6ff820726
--- /dev/null
+++ b/makefu/5pkgs/kalauerbot/translate.patch
@@ -0,0 +1,17 @@
+diff --git a/googletrans/client.py b/googletrans/client.py
+index 89c2237..c203b44 100644
+--- a/googletrans/client.py
++++ b/googletrans/client.py
+@@ -190,6 +190,13 @@ class Translator(object):
+ pass
+ if not PY3 and isinstance(pron, unicode) and isinstance(origin, str): # pragma: nocover
+ origin = origin.decode('utf-8')
++
++ if pron is None:
++ try:
++ pron = data[0][2][2]
++ except: # pragma: nocover
++ pass
++
+ if dest in EXCLUDES and pron == origin:
+ pron = translated
diff --git a/makefu/5pkgs/nsrenamer/default.nix b/makefu/5pkgs/nsrenamer/default.nix
new file mode 100644
index 000000000..16b9a4f20
--- /dev/null
+++ b/makefu/5pkgs/nsrenamer/default.nix
@@ -0,0 +1,3 @@
+{ pkgs,... }:
+# TODO: dependencies: coreutils, nx_game_info,
+pkgs.writeScriptBin "nsrenamer" (builtins.readFile ./nsrenamer.sh)
diff --git a/makefu/5pkgs/nsrenamer/nsrenamer.sh b/makefu/5pkgs/nsrenamer/nsrenamer.sh
new file mode 100755
index 000000000..16aec3113
--- /dev/null
+++ b/makefu/5pkgs/nsrenamer/nsrenamer.sh
@@ -0,0 +1,58 @@
+#!/usr/bin/env bash
+set -euf
+indir=$(dirname "$1")
+inname=$(basename "$1")
+out=$(nxgameinfo_cli "$1")
+ext=${1##*.}
+id=$(awk -F: '/├ Title ID:/{print $2}' <<<"$out" |xargs)
+baseid=$(awk -F: '/Base Title ID:/{print $2}' <<<"$out" |xargs)
+version=$(awk -F: '/├ Version:/{print $2}' <<<"$out" |xargs)
+name=$(awk -F: '/Title Name/{print $2}' <<<"$out" | sed "s/[:']//g" | xargs )
+type=$(awk -F: '/Type:/{print $2}' <<<"$out" | xargs)
+
+! test -n "$id" && echo "Title ID cannot be empty!" && exit 1
+! test -n "$type" && echo "type cannot be empty!" && exit 1
+
+if test "$type" == Base;then
+ ! test -n "$name" && echo "Title Name cannot be empty!" && exit 1
+ NAME="$name [$id][v$version].$ext"
+elif test "$type" == Update;then
+ ! test -n "$name" && echo "Title Name cannot be empty!" && exit 1
+ ! test -n "$version" && echo "Version cannot be empty!" && exit 1
+ NAME="$name [UPD][$id][v$version].$ext"
+elif test "$type" == DLC;then
+ dlcname=$(jq -r --arg id "$id" '.[$id].name' < ~/.switch/titles.US.en.json | sed "s/[:']//g")
+ if test -n "$dlcname" ;then
+ NAME="$dlcname [DLC][$id][v$version].$ext"
+ else
+ ! test -n "$name" && echo "dlcname cannot be found in titles.US.en.json and $name is empty!" && exit 1
+ NAME="$dlcname [DLC][$id][v$version].$ext"
+ fi
+else
+ echo "unknown type '$type'"
+ exit 1
+fi
+newname=$indir/$NAME
+
+if test "$NAME" == "${inname}";then
+ echo "name didn't change,doing nothing"
+ exit 0
+fi
+if test -e "$newname" ;then
+ echo "'$NAME' already exists, will not override"
+ exit 1
+fi
+
+if test -n "${FORCE:-}" ;then
+ CONFIRM=y
+else
+ read -p "rename '$inname' to '$NAME' - [y/N]" CONFIRM
+fi
+
+if test -n "${FORCE:-}" -o "$CONFIRM" == "y" -o "$CONFIRM" == "Y";then
+ mv -nv "$1" "$newname"
+else
+ echo "bailing out"
+ exit 1
+fi
+
diff --git a/makefu/5pkgs/tt-rss/default.nix b/makefu/5pkgs/tt-rss/default.nix
new file mode 100644
index 000000000..4907a73a5
--- /dev/null
+++ b/makefu/5pkgs/tt-rss/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+ pname = "tt-rss";
+ version = "2020-09-23";
+ rev = "d0ed7890df";
+
+ src = fetchurl {
+ url = "https://git.tt-rss.org/git/tt-rss/archive/${rev}.tar.gz";
+ sha256 = "1b2fczd41bqg9bq37r99svrqswr9qrp35m6gn3nz032yqcwc22ij";
+ };
+
+ installPhase = ''
+ mkdir $out
+ cp -ra * $out/
+ '';
+
+ meta = with stdenv.lib; {
+ description = "Web-based news feed (RSS/Atom) aggregator";
+ license = licenses.gpl2Plus;
+ homepage = "https://tt-rss.org";
+ maintainers = with maintainers; [ globin zohl ];
+ platforms = platforms.all;
+ };
+}