mirror of
https://github.com/kmein/niveum
synced 2026-03-16 10:11:08 +01:00
format
This commit is contained in:
@@ -1,50 +1,81 @@
|
|||||||
let
|
let
|
||||||
lib = import <nixpkgs/lib>;
|
lib = import <nixpkgs/lib>;
|
||||||
in rec {
|
in
|
||||||
|
rec {
|
||||||
inherit lib;
|
inherit lib;
|
||||||
|
|
||||||
input = [
|
input = [
|
||||||
{
|
{
|
||||||
x = ["pool" "zfs"];
|
x = [
|
||||||
y = ["mdadm" "raid1"];
|
"pool"
|
||||||
|
"zfs"
|
||||||
|
];
|
||||||
|
y = [
|
||||||
|
"mdadm"
|
||||||
|
"raid1"
|
||||||
|
];
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
x = ["pool" "zfs"];
|
x = [
|
||||||
y = ["disk" "sda"];
|
"pool"
|
||||||
|
"zfs"
|
||||||
|
];
|
||||||
|
y = [
|
||||||
|
"disk"
|
||||||
|
"sda"
|
||||||
|
];
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
x = ["mdadm" "raid1"];
|
x = [
|
||||||
y = ["disk" "sdb"];
|
"mdadm"
|
||||||
|
"raid1"
|
||||||
|
];
|
||||||
|
y = [
|
||||||
|
"disk"
|
||||||
|
"sdb"
|
||||||
|
];
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
x = ["mdadm" "raid1"];
|
x = [
|
||||||
y = ["disk" "sdc"];
|
"mdadm"
|
||||||
|
"raid1"
|
||||||
|
];
|
||||||
|
y = [
|
||||||
|
"disk"
|
||||||
|
"sdc"
|
||||||
|
];
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
outNodes = node: graph:
|
outNodes = node: graph: lib.unique (builtins.map (e: e.y) (builtins.filter (v: v.x == node) graph));
|
||||||
lib.unique
|
|
||||||
(builtins.map (e: e.y)
|
|
||||||
(builtins.filter (v: v.x == node) graph));
|
|
||||||
|
|
||||||
vertices = graph:
|
vertices = graph: lib.unique (builtins.map (x: x.y) graph ++ builtins.map (x: x.x) graph);
|
||||||
lib.unique
|
|
||||||
(builtins.map (x: x.y) graph ++ builtins.map (x: x.x) graph);
|
|
||||||
|
|
||||||
deleteVertex = node: graph: (builtins.filter (v: v.x != node && v.y != node) graph);
|
deleteVertex = node: graph: (builtins.filter (v: v.x != node && v.y != node) graph);
|
||||||
|
|
||||||
findSink = graph:
|
findSink =
|
||||||
lib.findFirst
|
graph:
|
||||||
(v: outNodes v graph == [])
|
lib.findFirst (v: outNodes v graph == [ ]) (lib.trace graph (builtins.abort "No sink found")) (
|
||||||
(lib.trace graph (builtins.abort "No sink found"))
|
vertices graph
|
||||||
(vertices graph);
|
);
|
||||||
|
|
||||||
topSort = graph:
|
topSort =
|
||||||
if graph == []
|
graph:
|
||||||
then []
|
if graph == [ ] then
|
||||||
else if builtins.length graph == 1
|
[ ]
|
||||||
then let only = builtins.head graph; in [only.y only.x]
|
else if builtins.length graph == 1 then
|
||||||
else let sink = findSink graph; in [sink] ++ topSort (deleteVertex sink graph);
|
let
|
||||||
|
only = builtins.head graph;
|
||||||
|
in
|
||||||
|
[
|
||||||
|
only.y
|
||||||
|
only.x
|
||||||
|
]
|
||||||
|
else
|
||||||
|
let
|
||||||
|
sink = findSink graph;
|
||||||
|
in
|
||||||
|
[ sink ] ++ topSort (deleteVertex sink graph);
|
||||||
|
|
||||||
output = topSort input;
|
output = topSort input;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,11 +2,12 @@
|
|||||||
pkgs,
|
pkgs,
|
||||||
lib,
|
lib,
|
||||||
...
|
...
|
||||||
}: let
|
}:
|
||||||
|
let
|
||||||
darwin = lib.strings.hasSuffix "-darwin" pkgs.stdenv.hostPlatform.system;
|
darwin = lib.strings.hasSuffix "-darwin" pkgs.stdenv.hostPlatform.system;
|
||||||
in {
|
in
|
||||||
environment.systemPackages =
|
{
|
||||||
[
|
environment.systemPackages = [
|
||||||
pkgs.htop
|
pkgs.htop
|
||||||
pkgs.w3m
|
pkgs.w3m
|
||||||
pkgs.wget
|
pkgs.wget
|
||||||
@@ -52,7 +53,6 @@ in {
|
|||||||
pkgs.psmisc # for killall, pstree
|
pkgs.psmisc # for killall, pstree
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
||||||
security.wrappers = {
|
security.wrappers = {
|
||||||
pmount = {
|
pmount = {
|
||||||
setuid = true;
|
setuid = true;
|
||||||
@@ -75,7 +75,8 @@ in {
|
|||||||
fi
|
fi
|
||||||
'';
|
'';
|
||||||
|
|
||||||
environment.shellAliases = let
|
environment.shellAliases =
|
||||||
|
let
|
||||||
take = pkgs.writers.writeDash "take" ''
|
take = pkgs.writers.writeDash "take" ''
|
||||||
mkdir "$1" && cd "$1"
|
mkdir "$1" && cd "$1"
|
||||||
'';
|
'';
|
||||||
@@ -110,9 +111,10 @@ in {
|
|||||||
la = "${pkgs.coreutils}/bin/ls --color=auto --time-style=long-iso --almost-all -l";
|
la = "${pkgs.coreutils}/bin/ls --color=auto --time-style=long-iso --almost-all -l";
|
||||||
}
|
}
|
||||||
// (
|
// (
|
||||||
if darwin
|
if darwin then
|
||||||
then {}
|
{ }
|
||||||
else {
|
else
|
||||||
|
{
|
||||||
"ß" = "${pkgs.util-linux}/bin/setsid";
|
"ß" = "${pkgs.util-linux}/bin/setsid";
|
||||||
ip = "${pkgs.iproute2}/bin/ip -c";
|
ip = "${pkgs.iproute2}/bin/ip -c";
|
||||||
# systemd
|
# systemd
|
||||||
|
|||||||
@@ -2,8 +2,10 @@
|
|||||||
pkgs,
|
pkgs,
|
||||||
lib,
|
lib,
|
||||||
...
|
...
|
||||||
}: let
|
}:
|
||||||
in {
|
let
|
||||||
|
in
|
||||||
|
{
|
||||||
environment.variables.TERMINAL = "alacritty";
|
environment.variables.TERMINAL = "alacritty";
|
||||||
|
|
||||||
home-manager.users.me = {
|
home-manager.users.me = {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
programs.adb.enable = true;
|
programs.adb.enable = true;
|
||||||
|
|
||||||
users.users.me.extraGroups = ["adbusers"];
|
users.users.me.extraGroups = [ "adbusers" ];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{pkgs, ...}: {
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
programs.bash = {
|
programs.bash = {
|
||||||
promptInit = ''
|
promptInit = ''PS1="$(${pkgs.ncurses}/bin/tput bold)\w \$([[ \$? == 0 ]] && echo \"\[\033[1;32m\]\" || echo \"\[\033[1;31m\]\")\$$(${pkgs.ncurses}/bin/tput sgr0) "'';
|
||||||
PS1="$(${pkgs.ncurses}/bin/tput bold)\w \$([[ \$? == 0 ]] && echo \"\[\033[1;32m\]\" || echo \"\[\033[1;31m\]\")\$$(${pkgs.ncurses}/bin/tput sgr0) "'';
|
|
||||||
interactiveShellInit = ''
|
interactiveShellInit = ''
|
||||||
set -o vi
|
set -o vi
|
||||||
'';
|
'';
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
{pkgs, ...}: {
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
hardware.bluetooth = {
|
hardware.bluetooth = {
|
||||||
enable = true;
|
enable = true;
|
||||||
settings.general = {
|
settings.general = {
|
||||||
|
|||||||
@@ -2,16 +2,18 @@
|
|||||||
config,
|
config,
|
||||||
inputs,
|
inputs,
|
||||||
...
|
...
|
||||||
}: let
|
}:
|
||||||
|
let
|
||||||
autorenkalender = inputs.autorenkalender.packages.x86_64-linux.default;
|
autorenkalender = inputs.autorenkalender.packages.x86_64-linux.default;
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
niveum.bots.autorenkalender = {
|
niveum.bots.autorenkalender = {
|
||||||
enable = true;
|
enable = true;
|
||||||
time = "07:00";
|
time = "07:00";
|
||||||
telegram = {
|
telegram = {
|
||||||
enable = true;
|
enable = true;
|
||||||
tokenFile = config.age.secrets.telegram-token-kmein.path;
|
tokenFile = config.age.secrets.telegram-token-kmein.path;
|
||||||
chatIds = ["@autorenkalender"];
|
chatIds = [ "@autorenkalender" ];
|
||||||
parseMode = "Markdown";
|
parseMode = "Markdown";
|
||||||
};
|
};
|
||||||
command = "${autorenkalender}/bin/autorenkalender";
|
command = "${autorenkalender}/bin/autorenkalender";
|
||||||
|
|||||||
@@ -3,21 +3,23 @@
|
|||||||
lib,
|
lib,
|
||||||
config,
|
config,
|
||||||
...
|
...
|
||||||
}: {
|
}:
|
||||||
|
{
|
||||||
niveum.bots.celan = {
|
niveum.bots.celan = {
|
||||||
enable = true;
|
enable = true;
|
||||||
time = "08:00";
|
time = "08:00";
|
||||||
telegram = {
|
telegram = {
|
||||||
enable = true;
|
enable = true;
|
||||||
tokenFile = config.age.secrets.telegram-token-kmein.path;
|
tokenFile = config.age.secrets.telegram-token-kmein.path;
|
||||||
chatIds = ["@PaulCelan"];
|
chatIds = [ "@PaulCelan" ];
|
||||||
};
|
};
|
||||||
mastodon = {
|
mastodon = {
|
||||||
enable = true;
|
enable = true;
|
||||||
tokenFile = config.age.secrets.mastodon-token-celan.path;
|
tokenFile = config.age.secrets.mastodon-token-celan.path;
|
||||||
language = "de";
|
language = "de";
|
||||||
};
|
};
|
||||||
command = toString (pkgs.writers.writePython3 "random-celan.py" { libraries = [pkgs.python3Packages.lxml]; } ''
|
command = toString (
|
||||||
|
pkgs.writers.writePython3 "random-celan.py" { libraries = [ pkgs.python3Packages.lxml ]; } ''
|
||||||
from lxml import etree
|
from lxml import etree
|
||||||
import random
|
import random
|
||||||
|
|
||||||
@@ -26,10 +28,12 @@
|
|||||||
return "".join("".join(t.itertext()) for t in elements).strip()
|
return "".join("".join(t.itertext()) for t in elements).strip()
|
||||||
|
|
||||||
|
|
||||||
tree = etree.parse('${pkgs.fetchurl {
|
tree = etree.parse('${
|
||||||
|
pkgs.fetchurl {
|
||||||
url = "http://c.krebsco.de/celan.tei.xml";
|
url = "http://c.krebsco.de/celan.tei.xml";
|
||||||
hash = "sha256-HgNmJYfhuwyfm+FcNtnnYWpJpIIU1ElHLeLiIFjF9mE=";
|
hash = "sha256-HgNmJYfhuwyfm+FcNtnnYWpJpIIU1ElHLeLiIFjF9mE=";
|
||||||
}}')
|
}
|
||||||
|
}')
|
||||||
root = tree.getroot()
|
root = tree.getroot()
|
||||||
|
|
||||||
tei = {"tei": "http://www.tei-c.org/ns/1.0"}
|
tei = {"tei": "http://www.tei-c.org/ns/1.0"}
|
||||||
@@ -60,7 +64,8 @@
|
|||||||
current_element = current_element.getparent()
|
current_element = current_element.getparent()
|
||||||
|
|
||||||
print("\n\n#PaulCelan #Celan #Lyrik #poetry")
|
print("\n\n#PaulCelan #Celan #Lyrik #poetry")
|
||||||
'');
|
''
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
age.secrets = {
|
age.secrets = {
|
||||||
|
|||||||
@@ -4,11 +4,13 @@
|
|||||||
lib,
|
lib,
|
||||||
inputs,
|
inputs,
|
||||||
...
|
...
|
||||||
}: let
|
}:
|
||||||
|
let
|
||||||
telebots = inputs.telebots.defaultPackage.x86_64-linux;
|
telebots = inputs.telebots.defaultPackage.x86_64-linux;
|
||||||
reverseDirectory = "/run/telegram-reverse";
|
reverseDirectory = "/run/telegram-reverse";
|
||||||
proverbDirectory = "/run/telegram-proverb";
|
proverbDirectory = "/run/telegram-proverb";
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
imports = [
|
imports = [
|
||||||
./logotheca.nix
|
./logotheca.nix
|
||||||
./transits.nix
|
./transits.nix
|
||||||
@@ -25,13 +27,21 @@ in {
|
|||||||
telegram-token-kmein.file = ../../secrets/telegram-token-kmein.age;
|
telegram-token-kmein.file = ../../secrets/telegram-token-kmein.age;
|
||||||
};
|
};
|
||||||
|
|
||||||
systemd.tmpfiles.rules = map (path:
|
systemd.tmpfiles.rules =
|
||||||
|
map
|
||||||
|
(
|
||||||
|
path:
|
||||||
pkgs.lib.niveum.tmpfilesConfig {
|
pkgs.lib.niveum.tmpfilesConfig {
|
||||||
type = "d";
|
type = "d";
|
||||||
mode = "0750";
|
mode = "0750";
|
||||||
age = "1h";
|
age = "1h";
|
||||||
inherit path;
|
inherit path;
|
||||||
}) [reverseDirectory proverbDirectory];
|
}
|
||||||
|
)
|
||||||
|
[
|
||||||
|
reverseDirectory
|
||||||
|
proverbDirectory
|
||||||
|
];
|
||||||
|
|
||||||
niveum.passport.services = [
|
niveum.passport.services = [
|
||||||
{
|
{
|
||||||
@@ -59,9 +69,9 @@ in {
|
|||||||
};
|
};
|
||||||
|
|
||||||
systemd.services.telegram-reverse = {
|
systemd.services.telegram-reverse = {
|
||||||
wantedBy = ["multi-user.target"];
|
wantedBy = [ "multi-user.target" ];
|
||||||
description = "Telegram reverse bot";
|
description = "Telegram reverse bot";
|
||||||
path = [pkgs.ffmpeg];
|
path = [ pkgs.ffmpeg ];
|
||||||
enable = true;
|
enable = true;
|
||||||
script = ''
|
script = ''
|
||||||
TELEGRAM_BOT_TOKEN="$(cat "$CREDENTIALS_DIRECTORY/token")" ${telebots}/bin/telegram-reverse
|
TELEGRAM_BOT_TOKEN="$(cat "$CREDENTIALS_DIRECTORY/token")" ${telebots}/bin/telegram-reverse
|
||||||
@@ -72,7 +82,7 @@ in {
|
|||||||
};
|
};
|
||||||
|
|
||||||
systemd.services.telegram-streaming-link = {
|
systemd.services.telegram-streaming-link = {
|
||||||
wantedBy = ["multi-user.target"];
|
wantedBy = [ "multi-user.target" ];
|
||||||
description = "Telegram bot converting YouTube Music <-> Spotify";
|
description = "Telegram bot converting YouTube Music <-> Spotify";
|
||||||
enable = true;
|
enable = true;
|
||||||
script = ''
|
script = ''
|
||||||
@@ -83,7 +93,7 @@ in {
|
|||||||
};
|
};
|
||||||
|
|
||||||
systemd.services.telegram-betacode = {
|
systemd.services.telegram-betacode = {
|
||||||
wantedBy = ["multi-user.target"];
|
wantedBy = [ "multi-user.target" ];
|
||||||
description = "Telegram beta code bot";
|
description = "Telegram beta code bot";
|
||||||
enable = true;
|
enable = true;
|
||||||
script = ''
|
script = ''
|
||||||
@@ -94,7 +104,7 @@ in {
|
|||||||
};
|
};
|
||||||
|
|
||||||
systemd.services.telegram-proverb = {
|
systemd.services.telegram-proverb = {
|
||||||
wantedBy = ["multi-user.target"];
|
wantedBy = [ "multi-user.target" ];
|
||||||
description = "Telegram proverb bot";
|
description = "Telegram proverb bot";
|
||||||
enable = true;
|
enable = true;
|
||||||
script = ''
|
script = ''
|
||||||
|
|||||||
@@ -4,9 +4,11 @@
|
|||||||
inputs,
|
inputs,
|
||||||
lib,
|
lib,
|
||||||
...
|
...
|
||||||
}: let
|
}:
|
||||||
|
let
|
||||||
hesychius = inputs.scripts.outPath + "/hesychius/hesychius.txt";
|
hesychius = inputs.scripts.outPath + "/hesychius/hesychius.txt";
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
niveum.bots.hesychius = {
|
niveum.bots.hesychius = {
|
||||||
enable = true;
|
enable = true;
|
||||||
time = "08:00";
|
time = "08:00";
|
||||||
@@ -18,7 +20,7 @@ in {
|
|||||||
telegram = {
|
telegram = {
|
||||||
enable = true;
|
enable = true;
|
||||||
tokenFile = config.age.secrets.telegram-token-kmein.path;
|
tokenFile = config.age.secrets.telegram-token-kmein.path;
|
||||||
chatIds = ["@HesychiosAlexandreus"];
|
chatIds = [ "@HesychiosAlexandreus" ];
|
||||||
};
|
};
|
||||||
command = "${pkgs.coreutils}/bin/shuf -n1 ${hesychius}";
|
command = "${pkgs.coreutils}/bin/shuf -n1 ${hesychius}";
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -2,14 +2,15 @@
|
|||||||
pkgs,
|
pkgs,
|
||||||
config,
|
config,
|
||||||
...
|
...
|
||||||
}: {
|
}:
|
||||||
|
{
|
||||||
niveum.bots.logotheca = {
|
niveum.bots.logotheca = {
|
||||||
enable = true;
|
enable = true;
|
||||||
time = "08/6:00";
|
time = "08/6:00";
|
||||||
telegram = {
|
telegram = {
|
||||||
enable = true;
|
enable = true;
|
||||||
tokenFile = config.age.secrets.telegram-token-kmein.path;
|
tokenFile = config.age.secrets.telegram-token-kmein.path;
|
||||||
chatIds = ["-1001760262519"];
|
chatIds = [ "-1001760262519" ];
|
||||||
parseMode = "Markdown";
|
parseMode = "Markdown";
|
||||||
};
|
};
|
||||||
matrix = {
|
matrix = {
|
||||||
|
|||||||
@@ -3,11 +3,15 @@
|
|||||||
config,
|
config,
|
||||||
lib,
|
lib,
|
||||||
...
|
...
|
||||||
}: let
|
}:
|
||||||
nachtischsatan-bot = {tokenFile}:
|
let
|
||||||
pkgs.writers.writePython3 "nachtischsatan-bot" {
|
nachtischsatan-bot =
|
||||||
libraries = [pkgs.python3Packages.python-telegram-bot];
|
{ tokenFile }:
|
||||||
} ''
|
pkgs.writers.writePython3 "nachtischsatan-bot"
|
||||||
|
{
|
||||||
|
libraries = [ pkgs.python3Packages.python-telegram-bot ];
|
||||||
|
}
|
||||||
|
''
|
||||||
from telegram.ext import Application, ContextTypes, MessageHandler, filters
|
from telegram.ext import Application, ContextTypes, MessageHandler, filters
|
||||||
from telegram import Update
|
from telegram import Update
|
||||||
import random
|
import random
|
||||||
@@ -25,9 +29,10 @@
|
|||||||
application.add_handler(MessageHandler(filters.ALL, flubber))
|
application.add_handler(MessageHandler(filters.ALL, flubber))
|
||||||
application.run_polling()
|
application.run_polling()
|
||||||
'';
|
'';
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
systemd.services.telegram-nachtischsatan = {
|
systemd.services.telegram-nachtischsatan = {
|
||||||
wantedBy = ["multi-user.target"];
|
wantedBy = [ "multi-user.target" ];
|
||||||
description = "*flubberflubber*";
|
description = "*flubberflubber*";
|
||||||
enable = true;
|
enable = true;
|
||||||
script = toString (nachtischsatan-bot {
|
script = toString (nachtischsatan-bot {
|
||||||
|
|||||||
@@ -2,7 +2,8 @@
|
|||||||
config,
|
config,
|
||||||
pkgs,
|
pkgs,
|
||||||
...
|
...
|
||||||
}: {
|
}:
|
||||||
|
{
|
||||||
niveum.bots.nietzsche = {
|
niveum.bots.nietzsche = {
|
||||||
enable = true;
|
enable = true;
|
||||||
time = "08:00";
|
time = "08:00";
|
||||||
@@ -11,7 +12,8 @@
|
|||||||
tokenFile = config.age.secrets.mastodon-token-nietzsche.path;
|
tokenFile = config.age.secrets.mastodon-token-nietzsche.path;
|
||||||
language = "de";
|
language = "de";
|
||||||
};
|
};
|
||||||
command = toString (pkgs.writers.writeBash "random-nietzsche" ''
|
command = toString (
|
||||||
|
pkgs.writers.writeBash "random-nietzsche" ''
|
||||||
set -efu
|
set -efu
|
||||||
random_number=$(( ($RANDOM % 10) + 1 ))
|
random_number=$(( ($RANDOM % 10) + 1 ))
|
||||||
if [ "$random_number" -eq 1 ]; then
|
if [ "$random_number" -eq 1 ]; then
|
||||||
@@ -19,7 +21,8 @@
|
|||||||
else
|
else
|
||||||
${pkgs.random-zeno}/bin/random-zeno "/Philosophie/M/Nietzsche,+Friedrich"
|
${pkgs.random-zeno}/bin/random-zeno "/Philosophie/M/Nietzsche,+Friedrich"
|
||||||
fi
|
fi
|
||||||
'');
|
''
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
systemd.timers.bot-nietzsche.timerConfig.RandomizedDelaySec = "10h";
|
systemd.timers.bot-nietzsche.timerConfig.RandomizedDelaySec = "10h";
|
||||||
|
|||||||
@@ -3,7 +3,8 @@
|
|||||||
pkgs,
|
pkgs,
|
||||||
lib,
|
lib,
|
||||||
...
|
...
|
||||||
}: {
|
}:
|
||||||
|
{
|
||||||
niveum.bots.smyth = {
|
niveum.bots.smyth = {
|
||||||
enable = true;
|
enable = true;
|
||||||
time = "08:00";
|
time = "08:00";
|
||||||
@@ -15,9 +16,10 @@
|
|||||||
telegram = {
|
telegram = {
|
||||||
enable = true;
|
enable = true;
|
||||||
tokenFile = config.age.secrets.telegram-token-kmein.path;
|
tokenFile = config.age.secrets.telegram-token-kmein.path;
|
||||||
chatIds = ["@HerbertWeirSmyth"];
|
chatIds = [ "@HerbertWeirSmyth" ];
|
||||||
};
|
};
|
||||||
command = toString (pkgs.writers.writeDash "random-smyth" ''
|
command = toString (
|
||||||
|
pkgs.writers.writeDash "random-smyth" ''
|
||||||
set -efu
|
set -efu
|
||||||
|
|
||||||
good_curl() {
|
good_curl() {
|
||||||
@@ -50,7 +52,8 @@
|
|||||||
| ${pkgs.pandoc}/bin/pandoc -f html -t plain --wrap=none
|
| ${pkgs.pandoc}/bin/pandoc -f html -t plain --wrap=none
|
||||||
|
|
||||||
printf '\n%s\n\n#AncientGreek' "$url"
|
printf '\n%s\n\n#AncientGreek' "$url"
|
||||||
'');
|
''
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
systemd.timers.bot-smyth.timerConfig.RandomizedDelaySec = "10h";
|
systemd.timers.bot-smyth.timerConfig.RandomizedDelaySec = "10h";
|
||||||
|
|||||||
@@ -2,16 +2,27 @@
|
|||||||
pkgs,
|
pkgs,
|
||||||
config,
|
config,
|
||||||
...
|
...
|
||||||
}: let
|
}:
|
||||||
|
let
|
||||||
mastodonEndpoint = "https://social.krebsco.de";
|
mastodonEndpoint = "https://social.krebsco.de";
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
systemd.services.bot-tlg-wotd = {
|
systemd.services.bot-tlg-wotd = {
|
||||||
# TODO reenable
|
# TODO reenable
|
||||||
# once https://github.com/NixOS/nixpkgs/pull/462893 is in stable NixOS
|
# once https://github.com/NixOS/nixpkgs/pull/462893 is in stable NixOS
|
||||||
enable = true;
|
enable = true;
|
||||||
wants = ["network-online.target"];
|
wants = [ "network-online.target" ];
|
||||||
startAt = "9:30";
|
startAt = "9:30";
|
||||||
path = [ pkgs.jq pkgs.curl pkgs.recode pkgs.deno pkgs.imagemagick pkgs.gawk pkgs.gnugrep pkgs.coreutils ];
|
path = [
|
||||||
|
pkgs.jq
|
||||||
|
pkgs.curl
|
||||||
|
pkgs.recode
|
||||||
|
pkgs.deno
|
||||||
|
pkgs.imagemagick
|
||||||
|
pkgs.gawk
|
||||||
|
pkgs.gnugrep
|
||||||
|
pkgs.coreutils
|
||||||
|
];
|
||||||
environment = {
|
environment = {
|
||||||
NPM_CONFIG_CACHE = "/tmp";
|
NPM_CONFIG_CACHE = "/tmp";
|
||||||
CLTK_DATA = "/tmp";
|
CLTK_DATA = "/tmp";
|
||||||
@@ -42,9 +53,12 @@ in {
|
|||||||
|
|
||||||
#ancientgreek #classics #wotd #wordoftheday
|
#ancientgreek #classics #wotd #wordoftheday
|
||||||
|
|
||||||
transliteration=$(${pkgs.writers.writePython3 "translit.py" {
|
transliteration=$(${
|
||||||
|
pkgs.writers.writePython3 "translit.py"
|
||||||
|
{
|
||||||
libraries = py: [ py.cltk ];
|
libraries = py: [ py.cltk ];
|
||||||
} ''
|
}
|
||||||
|
''
|
||||||
import sys
|
import sys
|
||||||
from cltk.phonology.grc.transcription import Transcriber
|
from cltk.phonology.grc.transcription import Transcriber
|
||||||
|
|
||||||
@@ -53,7 +67,8 @@ in {
|
|||||||
ipa = probert.transcribe(text)
|
ipa = probert.transcribe(text)
|
||||||
|
|
||||||
print(ipa)
|
print(ipa)
|
||||||
''} "$compact_word")
|
''
|
||||||
|
} "$compact_word")
|
||||||
|
|
||||||
|
|
||||||
photo_path=/tmp/output.png
|
photo_path=/tmp/output.png
|
||||||
|
|||||||
@@ -3,7 +3,8 @@
|
|||||||
pkgs,
|
pkgs,
|
||||||
lib,
|
lib,
|
||||||
...
|
...
|
||||||
}: let
|
}:
|
||||||
|
let
|
||||||
toSymbols = pkgs.writers.writeDash "to-symbols" ''
|
toSymbols = pkgs.writers.writeDash "to-symbols" ''
|
||||||
${pkgs.gnused}/bin/sed '
|
${pkgs.gnused}/bin/sed '
|
||||||
s/\bTri\b/△/;
|
s/\bTri\b/△/;
|
||||||
@@ -40,7 +41,8 @@
|
|||||||
s/^\s*//
|
s/^\s*//
|
||||||
'
|
'
|
||||||
'';
|
'';
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
niveum.bots.transits = {
|
niveum.bots.transits = {
|
||||||
enable = true;
|
enable = true;
|
||||||
time = "*:0/1";
|
time = "*:0/1";
|
||||||
@@ -51,9 +53,10 @@ in {
|
|||||||
telegram = {
|
telegram = {
|
||||||
enable = true;
|
enable = true;
|
||||||
tokenFile = config.age.secrets.telegram-token-kmein.path;
|
tokenFile = config.age.secrets.telegram-token-kmein.path;
|
||||||
chatIds = ["-1001796440545"];
|
chatIds = [ "-1001796440545" ];
|
||||||
};
|
};
|
||||||
command = toString (pkgs.writers.writeDash "common-transits" ''
|
command = toString (
|
||||||
|
pkgs.writers.writeDash "common-transits" ''
|
||||||
set -efu
|
set -efu
|
||||||
|
|
||||||
now=$(${pkgs.coreutils}/bin/date +%_H:%M | ${pkgs.gnused}/bin/sed 's/^\s*//')
|
now=$(${pkgs.coreutils}/bin/date +%_H:%M | ${pkgs.gnused}/bin/sed 's/^\s*//')
|
||||||
@@ -63,7 +66,8 @@ in {
|
|||||||
# ./astrolog -Yt -Yd -q 10 22 1999 6:32 -zN Kassel -td $date -R Uranus Neptune Pluto "North Node"
|
# ./astrolog -Yt -Yd -q 10 22 1999 6:32 -zN Kassel -td $date -R Uranus Neptune Pluto "North Node"
|
||||||
./astrolog -qd $date -zN Berlin -Yt -Yd -d -R Uranus Neptune Pluto "North Node" -A 2
|
./astrolog -qd $date -zN Berlin -Yt -Yd -d -R Uranus Neptune Pluto "North Node" -A 2
|
||||||
) | ${toSymbols} | ${pkgs.coreutils}/bin/sort -n | ${pkgs.gnugrep}/bin/grep "^$now" || :
|
) | ${toSymbols} | ${pkgs.coreutils}/bin/sort -n | ${pkgs.gnugrep}/bin/grep "^$now" || :
|
||||||
'');
|
''
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
age.secrets = {
|
age.secrets = {
|
||||||
|
|||||||
@@ -2,7 +2,8 @@
|
|||||||
config,
|
config,
|
||||||
pkgs,
|
pkgs,
|
||||||
...
|
...
|
||||||
}: {
|
}:
|
||||||
|
{
|
||||||
environment.systemPackages = [
|
environment.systemPackages = [
|
||||||
pkgs.cro
|
pkgs.cro
|
||||||
pkgs.tor-browser
|
pkgs.tor-browser
|
||||||
@@ -13,7 +14,8 @@
|
|||||||
home-manager.users.me = {
|
home-manager.users.me = {
|
||||||
programs.firefox = {
|
programs.firefox = {
|
||||||
enable = true;
|
enable = true;
|
||||||
profiles = let
|
profiles =
|
||||||
|
let
|
||||||
defaultSettings = {
|
defaultSettings = {
|
||||||
"beacon.enabled" = false;
|
"beacon.enabled" = false;
|
||||||
"browser.bookmarks.showMobileBookmarks" = true;
|
"browser.bookmarks.showMobileBookmarks" = true;
|
||||||
@@ -58,7 +60,8 @@
|
|||||||
"toolkit.telemetry.updatePing.enabled" = false;
|
"toolkit.telemetry.updatePing.enabled" = false;
|
||||||
"ui.prefersReducedMotion" = 1;
|
"ui.prefersReducedMotion" = 1;
|
||||||
};
|
};
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
default = {
|
default = {
|
||||||
id = 0;
|
id = 0;
|
||||||
isDefault = true;
|
isDefault = true;
|
||||||
@@ -82,7 +85,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
home-manager.users.me = {
|
home-manager.users.me = {
|
||||||
stylix.targets.firefox.profileNames = ["default"];
|
stylix.targets.firefox.profileNames = [ "default" ];
|
||||||
};
|
};
|
||||||
|
|
||||||
environment.variables.BROWSER = "firefox";
|
environment.variables.BROWSER = "firefox";
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
config,
|
config,
|
||||||
pkgs,
|
pkgs,
|
||||||
...
|
...
|
||||||
}: {
|
}:
|
||||||
|
{
|
||||||
services.clipmenu.enable = true;
|
services.clipmenu.enable = true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,8 @@
|
|||||||
lib,
|
lib,
|
||||||
pkgs,
|
pkgs,
|
||||||
...
|
...
|
||||||
}: {
|
}:
|
||||||
|
{
|
||||||
systemd.user.services.systemd-tmpfiles-clean = {
|
systemd.user.services.systemd-tmpfiles-clean = {
|
||||||
enable = true;
|
enable = true;
|
||||||
wantedBy = [ "default.target" ];
|
wantedBy = [ "default.target" ];
|
||||||
@@ -14,7 +15,8 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
systemd.user.tmpfiles.users.me.rules = map pkgs.lib.niveum.tmpfilesConfig [
|
systemd.user.tmpfiles.users.me.rules =
|
||||||
|
map pkgs.lib.niveum.tmpfilesConfig [
|
||||||
{
|
{
|
||||||
type = "d";
|
type = "d";
|
||||||
mode = "0755";
|
mode = "0755";
|
||||||
@@ -27,14 +29,26 @@
|
|||||||
age = "7d";
|
age = "7d";
|
||||||
path = "${config.users.users.me.home}/cloud/nextcloud/tmp";
|
path = "${config.users.users.me.home}/cloud/nextcloud/tmp";
|
||||||
}
|
}
|
||||||
] ++ map (path: pkgs.lib.niveum.tmpfilesConfig {
|
]
|
||||||
|
++
|
||||||
|
map
|
||||||
|
(
|
||||||
|
path:
|
||||||
|
pkgs.lib.niveum.tmpfilesConfig {
|
||||||
type = "L+";
|
type = "L+";
|
||||||
user = config.users.users.me.name;
|
user = config.users.users.me.name;
|
||||||
group = config.users.users.me.group;
|
group = config.users.users.me.group;
|
||||||
mode = "0755";
|
mode = "0755";
|
||||||
argument = "${config.users.users.me.home}/sync/${path}";
|
argument = "${config.users.users.me.home}/sync/${path}";
|
||||||
path = "${config.users.users.me.home}/${path}";
|
path = "${config.users.users.me.home}/${path}";
|
||||||
}) [".ssh" ".gnupg" ".pki" ".local/share/aerc"];
|
}
|
||||||
|
)
|
||||||
|
[
|
||||||
|
".ssh"
|
||||||
|
".gnupg"
|
||||||
|
".pki"
|
||||||
|
".local/share/aerc"
|
||||||
|
];
|
||||||
|
|
||||||
services.gnome.gnome-keyring.enable = true;
|
services.gnome.gnome-keyring.enable = true;
|
||||||
security.pam.services.lightdm.enableGnomeKeyring = true;
|
security.pam.services.lightdm.enableGnomeKeyring = true;
|
||||||
@@ -48,17 +62,19 @@
|
|||||||
|
|
||||||
systemd.user.services.nextcloud-syncer = {
|
systemd.user.services.nextcloud-syncer = {
|
||||||
enable = false;
|
enable = false;
|
||||||
wants = ["network-online.target"];
|
wants = [ "network-online.target" ];
|
||||||
wantedBy = ["default.target"];
|
wantedBy = [ "default.target" ];
|
||||||
startAt = "*:00/10";
|
startAt = "*:00/10";
|
||||||
script = let
|
script =
|
||||||
|
let
|
||||||
kieran = {
|
kieran = {
|
||||||
user = "kieran";
|
user = "kieran";
|
||||||
passwordFile = config.age.secrets.nextcloud-password-kieran.path;
|
passwordFile = config.age.secrets.nextcloud-password-kieran.path;
|
||||||
endpoint = "https://cloud.kmein.de";
|
endpoint = "https://cloud.kmein.de";
|
||||||
target = "${config.users.users.me.home}/notes";
|
target = "${config.users.users.me.home}/notes";
|
||||||
};
|
};
|
||||||
in ''
|
in
|
||||||
|
''
|
||||||
mkdir -p ${lib.escapeShellArg kieran.target}
|
mkdir -p ${lib.escapeShellArg kieran.target}
|
||||||
${pkgs.nextcloud-client}/bin/nextcloudcmd --non-interactive --user ${kieran.user} --password "$(cat ${kieran.passwordFile})" --path /Notes ${lib.escapeShellArg kieran.target} ${kieran.endpoint}
|
${pkgs.nextcloud-client}/bin/nextcloudcmd --non-interactive --user ${kieran.user} --password "$(cat ${kieran.passwordFile})" --path /Notes ${lib.escapeShellArg kieran.target} ${kieran.endpoint}
|
||||||
'';
|
'';
|
||||||
@@ -77,12 +93,15 @@
|
|||||||
} | ${pkgs.fzf}/bin/fzf)"
|
} | ${pkgs.fzf}/bin/fzf)"
|
||||||
exec ${pkgs.zathura}/bin/zathura "$book"
|
exec ${pkgs.zathura}/bin/zathura "$book"
|
||||||
'')
|
'')
|
||||||
(let
|
(
|
||||||
|
let
|
||||||
kieran = {
|
kieran = {
|
||||||
user = "kieran.meinhardt@gmail.com";
|
user = "kieran.meinhardt@gmail.com";
|
||||||
passwordFile = config.age.secrets.mega-password.path;
|
passwordFile = config.age.secrets.mega-password.path;
|
||||||
};
|
};
|
||||||
megatools = command: ''${pkgs.megatools}/bin/megatools ${command} --username ${lib.escapeShellArg kieran.user} --password "$(cat ${kieran.passwordFile})"'';
|
megatools =
|
||||||
|
command:
|
||||||
|
''${pkgs.megatools}/bin/megatools ${command} --username ${lib.escapeShellArg kieran.user} --password "$(cat ${kieran.passwordFile})"'';
|
||||||
in
|
in
|
||||||
pkgs.writers.writeDashBin "book-mega" ''
|
pkgs.writers.writeDashBin "book-mega" ''
|
||||||
set -efu
|
set -efu
|
||||||
@@ -100,7 +119,8 @@
|
|||||||
${megatools "get"} "$selection"
|
${megatools "get"} "$selection"
|
||||||
exec ${pkgs.zathura}/bin/zathura "$(basename "$selection")"
|
exec ${pkgs.zathura}/bin/zathura "$(basename "$selection")"
|
||||||
)
|
)
|
||||||
'')
|
''
|
||||||
|
)
|
||||||
];
|
];
|
||||||
|
|
||||||
age.secrets.mega-password = {
|
age.secrets.mega-password = {
|
||||||
@@ -122,13 +142,22 @@
|
|||||||
devices = pkgs.lib.niveum.syncthingIds;
|
devices = pkgs.lib.niveum.syncthingIds;
|
||||||
folders = {
|
folders = {
|
||||||
"${config.users.users.me.home}/sync" = {
|
"${config.users.users.me.home}/sync" = {
|
||||||
devices = ["kabsa" "manakish" "fatteh"];
|
devices = [
|
||||||
|
"kabsa"
|
||||||
|
"manakish"
|
||||||
|
"fatteh"
|
||||||
|
];
|
||||||
label = "sync";
|
label = "sync";
|
||||||
versioning.type = "trashcan";
|
versioning.type = "trashcan";
|
||||||
versioning.params.cleanoutDays = 100;
|
versioning.params.cleanoutDays = 100;
|
||||||
};
|
};
|
||||||
"${config.users.users.me.home}/mobile" = {
|
"${config.users.users.me.home}/mobile" = {
|
||||||
devices = ["kabsa" "manakish" "fatteh" "kibbeh"];
|
devices = [
|
||||||
|
"kabsa"
|
||||||
|
"manakish"
|
||||||
|
"fatteh"
|
||||||
|
"kibbeh"
|
||||||
|
];
|
||||||
id = "mobile";
|
id = "mobile";
|
||||||
label = "mobile";
|
label = "mobile";
|
||||||
versioning.type = "trashcan";
|
versioning.type = "trashcan";
|
||||||
|
|||||||
@@ -137,7 +137,11 @@ in
|
|||||||
agent = {
|
agent = {
|
||||||
enable = true;
|
enable = true;
|
||||||
pinentryPackage = pkgs.pinentry-qt;
|
pinentryPackage = pkgs.pinentry-qt;
|
||||||
settings = let defaultCacheTtl = 2 * 60 * 60; in {
|
settings =
|
||||||
|
let
|
||||||
|
defaultCacheTtl = 2 * 60 * 60;
|
||||||
|
in
|
||||||
|
{
|
||||||
default-cache-ttl = defaultCacheTtl;
|
default-cache-ttl = defaultCacheTtl;
|
||||||
max-cache-ttl = 4 * defaultCacheTtl;
|
max-cache-ttl = 4 * defaultCacheTtl;
|
||||||
};
|
};
|
||||||
@@ -253,7 +257,11 @@ in
|
|||||||
./mastodon-bot.nix
|
./mastodon-bot.nix
|
||||||
{
|
{
|
||||||
home-manager.users.me = {
|
home-manager.users.me = {
|
||||||
xdg.userDirs = let pictures = "${config.users.users.me.home}/cloud/nextcloud/Bilder"; in {
|
xdg.userDirs =
|
||||||
|
let
|
||||||
|
pictures = "${config.users.users.me.home}/cloud/nextcloud/Bilder";
|
||||||
|
in
|
||||||
|
{
|
||||||
enable = true;
|
enable = true;
|
||||||
documents = "${config.users.users.me.home}/cloud/nextcloud/Documents";
|
documents = "${config.users.users.me.home}/cloud/nextcloud/Documents";
|
||||||
desktop = "/tmp";
|
desktop = "/tmp";
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
{pkgs, ...}: let
|
{ pkgs, ... }:
|
||||||
|
let
|
||||||
nixify = pkgs.writers.writeDashBin "nixify" ''
|
nixify = pkgs.writers.writeDashBin "nixify" ''
|
||||||
set -efuC
|
set -efuC
|
||||||
|
|
||||||
@@ -16,8 +17,12 @@
|
|||||||
''${EDITOR:-vim} shell.nix
|
''${EDITOR:-vim} shell.nix
|
||||||
fi
|
fi
|
||||||
'';
|
'';
|
||||||
in {
|
in
|
||||||
environment.systemPackages = [pkgs.direnv nixify];
|
{
|
||||||
|
environment.systemPackages = [
|
||||||
|
pkgs.direnv
|
||||||
|
nixify
|
||||||
|
];
|
||||||
|
|
||||||
home-manager.users.me.programs.direnv = {
|
home-manager.users.me.programs.direnv = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|||||||
@@ -2,7 +2,8 @@
|
|||||||
lib,
|
lib,
|
||||||
pkgs,
|
pkgs,
|
||||||
...
|
...
|
||||||
}: {
|
}:
|
||||||
|
{
|
||||||
virtualisation.docker = {
|
virtualisation.docker = {
|
||||||
enable = true;
|
enable = true;
|
||||||
# for ICE wifi, ref https://gist.github.com/sunsided/7840e89ff4e11b64a2d7503fafa0290c
|
# for ICE wifi, ref https://gist.github.com/sunsided/7840e89ff4e11b64a2d7503fafa0290c
|
||||||
@@ -11,6 +12,9 @@
|
|||||||
"--fixed-cidr=172.39.1.0/25"
|
"--fixed-cidr=172.39.1.0/25"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
users.users.me.extraGroups = ["docker"];
|
users.users.me.extraGroups = [ "docker" ];
|
||||||
environment.systemPackages = [pkgs.docker pkgs.docker-compose];
|
environment.systemPackages = [
|
||||||
|
pkgs.docker
|
||||||
|
pkgs.docker-compose
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,9 +2,11 @@
|
|||||||
lib,
|
lib,
|
||||||
pkgs,
|
pkgs,
|
||||||
...
|
...
|
||||||
}: let
|
}:
|
||||||
|
let
|
||||||
sgr = code: string: ''\u001b[${code}m${string}\u001b[0m'';
|
sgr = code: string: ''\u001b[${code}m${string}\u001b[0m'';
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
environment.systemPackages = [
|
environment.systemPackages = [
|
||||||
(pkgs.writers.writeDashBin "notifications" ''
|
(pkgs.writers.writeDashBin "notifications" ''
|
||||||
${pkgs.dunst}/bin/dunstctl history \
|
${pkgs.dunst}/bin/dunstctl history \
|
||||||
|
|||||||
@@ -2,7 +2,8 @@
|
|||||||
lib,
|
lib,
|
||||||
pkgs,
|
pkgs,
|
||||||
...
|
...
|
||||||
}: {
|
}:
|
||||||
|
{
|
||||||
home-manager.users.me = {
|
home-manager.users.me = {
|
||||||
services.flameshot = {
|
services.flameshot = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|||||||
@@ -1,20 +1,25 @@
|
|||||||
{
|
{
|
||||||
pkgs,
|
pkgs,
|
||||||
...
|
...
|
||||||
}: let
|
}:
|
||||||
zip-font = name: arguments: let
|
let
|
||||||
|
zip-font =
|
||||||
|
name: arguments:
|
||||||
|
let
|
||||||
directory = pkgs.fetchzip arguments;
|
directory = pkgs.fetchzip arguments;
|
||||||
in
|
in
|
||||||
pkgs.runCommand name {} ''
|
pkgs.runCommand name { } ''
|
||||||
mkdir -p $out/share/fonts/{truetype,opentype,woff}
|
mkdir -p $out/share/fonts/{truetype,opentype,woff}
|
||||||
${pkgs.findutils}/bin/find ${directory} -name '*.ttf' -exec install '{}' $out/share/fonts/truetype \;
|
${pkgs.findutils}/bin/find ${directory} -name '*.ttf' -exec install '{}' $out/share/fonts/truetype \;
|
||||||
${pkgs.findutils}/bin/find ${directory} -name '*.otf' -exec install '{}' $out/share/fonts/opentype \;
|
${pkgs.findutils}/bin/find ${directory} -name '*.otf' -exec install '{}' $out/share/fonts/opentype \;
|
||||||
${pkgs.findutils}/bin/find ${directory} -name '*.woff' -exec install '{}' $out/share/fonts/woff \;
|
${pkgs.findutils}/bin/find ${directory} -name '*.woff' -exec install '{}' $out/share/fonts/woff \;
|
||||||
'';
|
'';
|
||||||
simple-ttf = name: arguments: let
|
simple-ttf =
|
||||||
|
name: arguments:
|
||||||
|
let
|
||||||
file = pkgs.fetchurl arguments;
|
file = pkgs.fetchurl arguments;
|
||||||
in
|
in
|
||||||
pkgs.runCommand name {} ''
|
pkgs.runCommand name { } ''
|
||||||
mkdir -p $out/share/fonts/truetype
|
mkdir -p $out/share/fonts/truetype
|
||||||
install ${file} $out/share/fonts/truetype
|
install ${file} $out/share/fonts/truetype
|
||||||
'';
|
'';
|
||||||
@@ -57,7 +62,8 @@
|
|||||||
url = "https://github.com/microsoft/font-tools/raw/1092cb23520967830001a0807eb21d6a44dda522/EgyptianOpenType/font/eot.ttf";
|
url = "https://github.com/microsoft/font-tools/raw/1092cb23520967830001a0807eb21d6a44dda522/EgyptianOpenType/font/eot.ttf";
|
||||||
sha256 = "1n294vhcx90270pnsw1dbk6izd61fjvbnjrh4hcf98ff3s540x0c";
|
sha256 = "1n294vhcx90270pnsw1dbk6izd61fjvbnjrh4hcf98ff3s540x0c";
|
||||||
};
|
};
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
fonts = {
|
fonts = {
|
||||||
enableDefaultPackages = true;
|
enableDefaultPackages = true;
|
||||||
fontDir.enable = true;
|
fontDir.enable = true;
|
||||||
@@ -117,10 +123,26 @@ in {
|
|||||||
vollkorn
|
vollkorn
|
||||||
zilla-slab
|
zilla-slab
|
||||||
]; # google-fonts league-of-moveable-type
|
]; # google-fonts league-of-moveable-type
|
||||||
fontconfig.defaultFonts = let emoji = ["Noto Color Emoji"]; in {
|
fontconfig.defaultFonts =
|
||||||
monospace = ["Noto Sans Mono"] ++ emoji;
|
let
|
||||||
serif = ["Noto Serif" "Noto Naskh Arabic" "Noto Serif Devanagari"];
|
emoji = [ "Noto Color Emoji" ];
|
||||||
sansSerif = ["Noto Sans Display" "Noto Naskh Arabic" "Noto Sans Hebrew" "Noto Sans Devanagari" "Noto Sans CJK JP" "Noto Sans Coptic" "Noto Sans Syriac Western"];
|
in
|
||||||
|
{
|
||||||
|
monospace = [ "Noto Sans Mono" ] ++ emoji;
|
||||||
|
serif = [
|
||||||
|
"Noto Serif"
|
||||||
|
"Noto Naskh Arabic"
|
||||||
|
"Noto Serif Devanagari"
|
||||||
|
];
|
||||||
|
sansSerif = [
|
||||||
|
"Noto Sans Display"
|
||||||
|
"Noto Naskh Arabic"
|
||||||
|
"Noto Sans Hebrew"
|
||||||
|
"Noto Sans Devanagari"
|
||||||
|
"Noto Sans CJK JP"
|
||||||
|
"Noto Sans Coptic"
|
||||||
|
"Noto Sans Syriac Western"
|
||||||
|
];
|
||||||
inherit emoji;
|
inherit emoji;
|
||||||
};
|
};
|
||||||
# xelatex fails with woff files
|
# xelatex fails with woff files
|
||||||
|
|||||||
@@ -1,16 +1,19 @@
|
|||||||
{pkgs, ...}: {
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
programs.fzf = {
|
programs.fzf = {
|
||||||
fuzzyCompletion = true;
|
fuzzyCompletion = true;
|
||||||
keybindings = true;
|
keybindings = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
home-manager.users.me = {
|
home-manager.users.me = {
|
||||||
programs.fzf = let
|
programs.fzf =
|
||||||
|
let
|
||||||
defaultCommand = "${pkgs.fd}/bin/fd --type f --strip-cwd-prefix --follow --no-ignore-vcs --exclude .git";
|
defaultCommand = "${pkgs.fd}/bin/fd --type f --strip-cwd-prefix --follow --no-ignore-vcs --exclude .git";
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
enable = true;
|
enable = true;
|
||||||
defaultCommand = defaultCommand;
|
defaultCommand = defaultCommand;
|
||||||
defaultOptions = ["--height=40%"];
|
defaultOptions = [ "--height=40%" ];
|
||||||
changeDirWidgetCommand = "${pkgs.fd}/bin/fd --type d";
|
changeDirWidgetCommand = "${pkgs.fd}/bin/fd --type d";
|
||||||
changeDirWidgetOptions = [
|
changeDirWidgetOptions = [
|
||||||
"--preview='${pkgs.tree}/bin/tree -L 1 {}'"
|
"--preview='${pkgs.tree}/bin/tree -L 1 {}'"
|
||||||
@@ -18,7 +21,7 @@
|
|||||||
"--preview-window=hidden"
|
"--preview-window=hidden"
|
||||||
];
|
];
|
||||||
fileWidgetCommand = defaultCommand;
|
fileWidgetCommand = defaultCommand;
|
||||||
fileWidgetOptions = ["--preview='head -$LINES {}'"];
|
fileWidgetOptions = [ "--preview='head -$LINES {}'" ];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +1,17 @@
|
|||||||
{
|
{
|
||||||
pkgs,
|
pkgs,
|
||||||
...
|
...
|
||||||
}: let
|
}:
|
||||||
|
let
|
||||||
ledgerDirectory = "/home/kfm/sync/src/ledger";
|
ledgerDirectory = "/home/kfm/sync/src/ledger";
|
||||||
hora = pkgs.callPackage ../packages/hora.nix { timeLedger = "${ledgerDirectory}/time.timeclock"; };
|
hora = pkgs.callPackage ../packages/hora.nix { timeLedger = "${ledgerDirectory}/time.timeclock"; };
|
||||||
in {
|
in
|
||||||
environment.systemPackages = let
|
{
|
||||||
|
environment.systemPackages =
|
||||||
|
let
|
||||||
git = "${pkgs.git}/bin/git -C ${ledgerDirectory}";
|
git = "${pkgs.git}/bin/git -C ${ledgerDirectory}";
|
||||||
in [
|
in
|
||||||
|
[
|
||||||
hora
|
hora
|
||||||
pkgs.hledger
|
pkgs.hledger
|
||||||
(pkgs.writers.writeDashBin "hledger-git" ''
|
(pkgs.writers.writeDashBin "hledger-git" ''
|
||||||
|
|||||||
@@ -22,8 +22,18 @@
|
|||||||
sort_key = "PERCENT_CPU";
|
sort_key = "PERCENT_CPU";
|
||||||
tree_view = false;
|
tree_view = false;
|
||||||
update_process_names = false;
|
update_process_names = false;
|
||||||
right_meters = ["Uptime" "Tasks" "LoadAverage" "Battery"];
|
right_meters = [
|
||||||
left_meters = ["LeftCPUs2" "RightCPUs2" "Memory" "Swap"];
|
"Uptime"
|
||||||
|
"Tasks"
|
||||||
|
"LoadAverage"
|
||||||
|
"Battery"
|
||||||
|
];
|
||||||
|
left_meters = [
|
||||||
|
"LeftCPUs2"
|
||||||
|
"RightCPUs2"
|
||||||
|
"Memory"
|
||||||
|
"Swap"
|
||||||
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -3,7 +3,8 @@
|
|||||||
pkgs,
|
pkgs,
|
||||||
lib,
|
lib,
|
||||||
...
|
...
|
||||||
}: let
|
}:
|
||||||
|
let
|
||||||
klem = pkgs.klem.override {
|
klem = pkgs.klem.override {
|
||||||
options.dmenu = "${pkgs.dmenu}/bin/dmenu -i -p klem";
|
options.dmenu = "${pkgs.dmenu}/bin/dmenu -i -p klem";
|
||||||
options.scripts = {
|
options.scripts = {
|
||||||
@@ -51,7 +52,8 @@
|
|||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
age.secrets = {
|
age.secrets = {
|
||||||
github-token-i3status-rust = {
|
github-token-i3status-rust = {
|
||||||
file = ../secrets/github-token-i3status-rust.age;
|
file = ../secrets/github-token-i3status-rust.age;
|
||||||
@@ -105,7 +107,8 @@ in {
|
|||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
home-manager.users.me = let
|
home-manager.users.me =
|
||||||
|
let
|
||||||
modifier = "Mod4";
|
modifier = "Mod4";
|
||||||
infoWorkspace = "ℹ";
|
infoWorkspace = "ℹ";
|
||||||
messageWorkspace = "✉";
|
messageWorkspace = "✉";
|
||||||
@@ -122,19 +125,27 @@ in {
|
|||||||
titlebar = false;
|
titlebar = false;
|
||||||
border = 1;
|
border = 1;
|
||||||
};
|
};
|
||||||
bars = let position = "bottom"; in [
|
bars =
|
||||||
(lib.recursiveUpdate config.home-manager.users.me.stylix.targets.i3.exportedBarConfig
|
let
|
||||||
{
|
position = "bottom";
|
||||||
|
in
|
||||||
|
[
|
||||||
|
(lib.recursiveUpdate config.home-manager.users.me.stylix.targets.i3.exportedBarConfig {
|
||||||
workspaceButtons = true;
|
workspaceButtons = true;
|
||||||
mode = "hide"; # "dock";
|
mode = "hide"; # "dock";
|
||||||
inherit position;
|
inherit position;
|
||||||
statusCommand = toString (pkgs.writers.writeDash "i3status-rust" ''
|
statusCommand = toString (
|
||||||
|
pkgs.writers.writeDash "i3status-rust" ''
|
||||||
export I3RS_GITHUB_TOKEN="$(cat ${config.age.secrets.github-token-i3status-rust.path})"
|
export I3RS_GITHUB_TOKEN="$(cat ${config.age.secrets.github-token-i3status-rust.path})"
|
||||||
export OPENWEATHERMAP_API_KEY="$(cat ${config.age.secrets.openweathermap-api-key.path})"
|
export OPENWEATHERMAP_API_KEY="$(cat ${config.age.secrets.openweathermap-api-key.path})"
|
||||||
exec ${config.home-manager.users.me.programs.i3status-rust.package}/bin/i3status-rs ${config.home-manager.users.me.home.homeDirectory}/.config/i3status-rust/config-${position}.toml
|
exec ${config.home-manager.users.me.programs.i3status-rust.package}/bin/i3status-rs ${config.home-manager.users.me.home.homeDirectory}/.config/i3status-rust/config-${position}.toml
|
||||||
'');
|
''
|
||||||
|
);
|
||||||
fonts = {
|
fonts = {
|
||||||
names = ["${config.stylix.fonts.sansSerif.name}" "FontAwesome 6 Free"];
|
names = [
|
||||||
|
"${config.stylix.fonts.sansSerif.name}"
|
||||||
|
"FontAwesome 6 Free"
|
||||||
|
];
|
||||||
size = config.stylix.fonts.sizes.desktop * 0.8;
|
size = config.stylix.fonts.sizes.desktop * 0.8;
|
||||||
};
|
};
|
||||||
})
|
})
|
||||||
@@ -145,19 +156,27 @@ in {
|
|||||||
hideEdgeBorders = "smart";
|
hideEdgeBorders = "smart";
|
||||||
commands = [
|
commands = [
|
||||||
{
|
{
|
||||||
criteria = {class = "floating";};
|
criteria = {
|
||||||
|
class = "floating";
|
||||||
|
};
|
||||||
command = "floating enable";
|
command = "floating enable";
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
criteria = {class = "fzfmenu";};
|
criteria = {
|
||||||
|
class = "fzfmenu";
|
||||||
|
};
|
||||||
command = "floating enable";
|
command = "floating enable";
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
criteria = {class = ".*";};
|
criteria = {
|
||||||
|
class = ".*";
|
||||||
|
};
|
||||||
command = "border pixel 2";
|
command = "border pixel 2";
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
criteria = {class = "mpv";};
|
criteria = {
|
||||||
|
class = "mpv";
|
||||||
|
};
|
||||||
command = lib.strings.concatStringsSep ", " [
|
command = lib.strings.concatStringsSep ", " [
|
||||||
"floating enable"
|
"floating enable"
|
||||||
"sticky enable"
|
"sticky enable"
|
||||||
@@ -168,17 +187,25 @@ in {
|
|||||||
}
|
}
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
colors = let
|
colors =
|
||||||
|
let
|
||||||
background = config.lib.stylix.colors.withHashtag.base00;
|
background = config.lib.stylix.colors.withHashtag.base00;
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
unfocused = {
|
unfocused = {
|
||||||
border = lib.mkForce background;
|
border = lib.mkForce background;
|
||||||
childBorder = lib.mkForce background;
|
childBorder = lib.mkForce background;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
keybindings =
|
keybindings =
|
||||||
lib.listToAttrs (map (x: lib.nameValuePair "${modifier}+Shift+${toString x}" "move container to workspace ${toString x}") (lib.range 1 9))
|
lib.listToAttrs (
|
||||||
// lib.listToAttrs (map (x: lib.nameValuePair "${modifier}+${toString x}" "workspace ${toString x}") (lib.range 1 9))
|
map (
|
||||||
|
x: lib.nameValuePair "${modifier}+Shift+${toString x}" "move container to workspace ${toString x}"
|
||||||
|
) (lib.range 1 9)
|
||||||
|
)
|
||||||
|
// lib.listToAttrs (
|
||||||
|
map (x: lib.nameValuePair "${modifier}+${toString x}" "workspace ${toString x}") (lib.range 1 9)
|
||||||
|
)
|
||||||
// {
|
// {
|
||||||
"${modifier}+i" = "workspace ${infoWorkspace}";
|
"${modifier}+i" = "workspace ${infoWorkspace}";
|
||||||
"${modifier}+m" = "workspace ${messageWorkspace}";
|
"${modifier}+m" = "workspace ${messageWorkspace}";
|
||||||
@@ -220,12 +247,14 @@ in {
|
|||||||
"${modifier}+t" = "exec ${lib.getExe pkgs.niveum-filemanager}";
|
"${modifier}+t" = "exec ${lib.getExe pkgs.niveum-filemanager}";
|
||||||
"${modifier}+y" = "exec ${lib.getExe pkgs.niveum-browser}";
|
"${modifier}+y" = "exec ${lib.getExe pkgs.niveum-browser}";
|
||||||
|
|
||||||
"${modifier}+d" = "exec ${pkgs.writers.writeDash "run" ''exec rofi -modi run,ssh,window -show run''}";
|
"${modifier}+d" =
|
||||||
|
"exec ${pkgs.writers.writeDash "run" ''exec rofi -modi run,ssh,window -show run''}";
|
||||||
"${modifier}+Shift+d" = "exec ${pkgs.notemenu}/bin/notemenu";
|
"${modifier}+Shift+d" = "exec ${pkgs.notemenu}/bin/notemenu";
|
||||||
"${modifier}+p" = "exec rofi-pass";
|
"${modifier}+p" = "exec rofi-pass";
|
||||||
"${modifier}+Shift+p" = "exec rofi-pass --insert";
|
"${modifier}+Shift+p" = "exec rofi-pass --insert";
|
||||||
"${modifier}+u" = "exec ${pkgs.unicodmenu}/bin/unicodmenu";
|
"${modifier}+u" = "exec ${pkgs.unicodmenu}/bin/unicodmenu";
|
||||||
"${modifier}+Shift+u" = "exec ${pkgs.writers.writeDash "last-unicode" ''${pkgs.xdotool}/bin/xdotool type --delay 1000 "$(${pkgs.gawk}/bin/awk 'END{print $1}' ~/.cache/unicodmenu)"''}";
|
"${modifier}+Shift+u" =
|
||||||
|
"exec ${pkgs.writers.writeDash "last-unicode" ''${pkgs.xdotool}/bin/xdotool type --delay 1000 "$(${pkgs.gawk}/bin/awk 'END{print $1}' ~/.cache/unicodmenu)"''}";
|
||||||
|
|
||||||
"${modifier}+F7" = "exec ${pkgs.writers.writeDash "showkeys-toggle" ''
|
"${modifier}+F7" = "exec ${pkgs.writers.writeDash "showkeys-toggle" ''
|
||||||
if ${pkgs.procps}/bin/pgrep screenkey; then
|
if ${pkgs.procps}/bin/pgrep screenkey; then
|
||||||
@@ -259,7 +288,8 @@ in {
|
|||||||
# XF86Back
|
# XF86Back
|
||||||
# XF86Launch1 (thinkvantage)
|
# XF86Launch1 (thinkvantage)
|
||||||
};
|
};
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
stylix.targets.i3.enable = true;
|
stylix.targets.i3.enable = true;
|
||||||
|
|
||||||
xsession.windowManager.i3 = {
|
xsession.windowManager.i3 = {
|
||||||
@@ -277,7 +307,15 @@ in {
|
|||||||
exec --no-startup-id ${pkgs.xss-lock}/bin/xss-lock -- xsecurelock
|
exec --no-startup-id ${pkgs.xss-lock}/bin/xss-lock -- xsecurelock
|
||||||
'';
|
'';
|
||||||
config = {
|
config = {
|
||||||
inherit modifier gaps modes bars floating window colors;
|
inherit
|
||||||
|
modifier
|
||||||
|
gaps
|
||||||
|
modes
|
||||||
|
bars
|
||||||
|
floating
|
||||||
|
window
|
||||||
|
colors
|
||||||
|
;
|
||||||
keybindings = keybindings // {
|
keybindings = keybindings // {
|
||||||
"${modifier}+F6" = "exec ${pkgs.xorg.xkill}/bin/xkill";
|
"${modifier}+F6" = "exec ${pkgs.xorg.xkill}/bin/xkill";
|
||||||
"${modifier}+F9" = "exec ${pkgs.redshift}/bin/redshift -O 4000 -b 0.85";
|
"${modifier}+F9" = "exec ${pkgs.redshift}/bin/redshift -O 4000 -b 0.85";
|
||||||
|
|||||||
@@ -2,7 +2,8 @@
|
|||||||
pkgs,
|
pkgs,
|
||||||
config,
|
config,
|
||||||
...
|
...
|
||||||
}: {
|
}:
|
||||||
|
{
|
||||||
age.secrets = {
|
age.secrets = {
|
||||||
miniflux-api-token = {
|
miniflux-api-token = {
|
||||||
file = ../secrets/miniflux-api-token.age;
|
file = ../secrets/miniflux-api-token.age;
|
||||||
@@ -18,9 +19,11 @@
|
|||||||
bars.bottom = {
|
bars.bottom = {
|
||||||
icons = "awesome6";
|
icons = "awesome6";
|
||||||
settings = {
|
settings = {
|
||||||
theme.overrides = let
|
theme.overrides =
|
||||||
|
let
|
||||||
colours = config.lib.stylix.colors.withHashtag;
|
colours = config.lib.stylix.colors.withHashtag;
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
idle_bg = colours.base00;
|
idle_bg = colours.base00;
|
||||||
idle_fg = colours.base05;
|
idle_fg = colours.base05;
|
||||||
good_bg = colours.base00;
|
good_bg = colours.base00;
|
||||||
@@ -70,7 +73,7 @@
|
|||||||
block = "memory";
|
block = "memory";
|
||||||
format = "$icon $mem_used.eng(prefix:G)";
|
format = "$icon $mem_used.eng(prefix:G)";
|
||||||
}
|
}
|
||||||
{block = "load";}
|
{ block = "load"; }
|
||||||
{
|
{
|
||||||
block = "time";
|
block = "time";
|
||||||
format = "$icon $timestamp.datetime(f:'%Y-%m-%d (%W %a) %H:%M', l:de_DE)";
|
format = "$icon $timestamp.datetime(f:'%Y-%m-%d (%W %a) %H:%M', l:de_DE)";
|
||||||
|
|||||||
@@ -3,14 +3,16 @@
|
|||||||
pkgs,
|
pkgs,
|
||||||
lib,
|
lib,
|
||||||
...
|
...
|
||||||
}: let
|
}:
|
||||||
|
let
|
||||||
davHome = "~/.local/share/dav";
|
davHome = "~/.local/share/dav";
|
||||||
kmeinCloud = {
|
kmeinCloud = {
|
||||||
davEndpoint = "https://cloud.kmein.de/remote.php/dav";
|
davEndpoint = "https://cloud.kmein.de/remote.php/dav";
|
||||||
username = "kieran";
|
username = "kieran";
|
||||||
passwordFile = config.age.secrets.nextcloud-password-kieran.path;
|
passwordFile = config.age.secrets.nextcloud-password-kieran.path;
|
||||||
};
|
};
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
age.secrets = {
|
age.secrets = {
|
||||||
nextcloud-password-kieran = {
|
nextcloud-password-kieran = {
|
||||||
file = ../secrets/nextcloud-password-kieran.age;
|
file = ../secrets/nextcloud-password-kieran.age;
|
||||||
@@ -45,8 +47,8 @@ in {
|
|||||||
|
|
||||||
systemd.user.services.vdirsyncer = {
|
systemd.user.services.vdirsyncer = {
|
||||||
enable = true;
|
enable = true;
|
||||||
wants = ["network-online.target"];
|
wants = [ "network-online.target" ];
|
||||||
wantedBy = ["default.target"];
|
wantedBy = [ "default.target" ];
|
||||||
startAt = "*:00/10";
|
startAt = "*:00/10";
|
||||||
script = ''
|
script = ''
|
||||||
${pkgs.vdirsyncer}/bin/vdirsyncer sync && ${pkgs.khal}/bin/khal printcalendars # https://lostpackets.de/khal/configure.html#syncing
|
${pkgs.vdirsyncer}/bin/vdirsyncer sync && ${pkgs.khal}/bin/khal printcalendars # https://lostpackets.de/khal/configure.html#syncing
|
||||||
|
|||||||
@@ -2,10 +2,11 @@
|
|||||||
lib,
|
lib,
|
||||||
pkgs,
|
pkgs,
|
||||||
...
|
...
|
||||||
}: {
|
}:
|
||||||
|
{
|
||||||
systemd.services.lb-subscription = {
|
systemd.services.lb-subscription = {
|
||||||
enable = true;
|
enable = true;
|
||||||
wants = ["network-online.target"];
|
wants = [ "network-online.target" ];
|
||||||
startAt = "weekly";
|
startAt = "weekly";
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
user = "kfm";
|
user = "kfm";
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
{pkgs, ...}: {
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
systemd.services.imaginary-illuminations = {
|
systemd.services.imaginary-illuminations = {
|
||||||
enable = false;
|
enable = false;
|
||||||
wants = ["network-online.target"];
|
wants = [ "network-online.target" ];
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
User = "kfm";
|
User = "kfm";
|
||||||
Group = "users";
|
Group = "users";
|
||||||
|
|||||||
@@ -2,7 +2,8 @@
|
|||||||
config,
|
config,
|
||||||
pkgs,
|
pkgs,
|
||||||
...
|
...
|
||||||
}: {
|
}:
|
||||||
|
{
|
||||||
services.nginx.virtualHosts.default = {
|
services.nginx.virtualHosts.default = {
|
||||||
locations."= /stub_status".extraConfig = "stub_status;";
|
locations."= /stub_status".extraConfig = "stub_status;";
|
||||||
};
|
};
|
||||||
@@ -41,12 +42,12 @@
|
|||||||
|
|
||||||
systemd.services.promtail = {
|
systemd.services.promtail = {
|
||||||
description = "Promtail service for Loki";
|
description = "Promtail service for Loki";
|
||||||
wantedBy = ["multi-user.target"];
|
wantedBy = [ "multi-user.target" ];
|
||||||
|
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
ExecStart = ''
|
ExecStart = ''
|
||||||
${pkgs.grafana-loki}/bin/promtail --config.file ${
|
${pkgs.grafana-loki}/bin/promtail --config.file ${
|
||||||
(pkgs.formats.yaml {}).generate "promtail.yaml" {
|
(pkgs.formats.yaml { }).generate "promtail.yaml" {
|
||||||
server = {
|
server = {
|
||||||
http_listen_port = 28183;
|
http_listen_port = 28183;
|
||||||
grpc_listen_port = 0;
|
grpc_listen_port = 0;
|
||||||
@@ -55,9 +56,7 @@
|
|||||||
clients = [
|
clients = [
|
||||||
{
|
{
|
||||||
url = "http://${
|
url = "http://${
|
||||||
if config.networking.hostName == "makanek"
|
if config.networking.hostName == "makanek" then "127.0.0.1" else "makanek.r"
|
||||||
then "127.0.0.1"
|
|
||||||
else "makanek.r"
|
|
||||||
}:3100/loki/api/v1/push";
|
}:3100/loki/api/v1/push";
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
@@ -71,7 +70,7 @@
|
|||||||
};
|
};
|
||||||
relabel_configs = [
|
relabel_configs = [
|
||||||
{
|
{
|
||||||
source_labels = ["__journal__systemd_unit"];
|
source_labels = [ "__journal__systemd_unit" ];
|
||||||
target_label = "unit";
|
target_label = "unit";
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -3,9 +3,11 @@
|
|||||||
lib,
|
lib,
|
||||||
config,
|
config,
|
||||||
...
|
...
|
||||||
}: let
|
}:
|
||||||
|
let
|
||||||
swallow = command: "${pkgs.swallow}/bin/swallow ${command}";
|
swallow = command: "${pkgs.swallow}/bin/swallow ${command}";
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
environment.shellAliases.smpv = swallow "mpv";
|
environment.shellAliases.smpv = swallow "mpv";
|
||||||
|
|
||||||
nixpkgs.overlays = [
|
nixpkgs.overlays = [
|
||||||
@@ -19,7 +21,11 @@ in {
|
|||||||
enable = true;
|
enable = true;
|
||||||
config = {
|
config = {
|
||||||
ytdl-format = "bestvideo[height<=?720][fps<=?30][vcodec!=?vp9]+bestaudio/best";
|
ytdl-format = "bestvideo[height<=?720][fps<=?30][vcodec!=?vp9]+bestaudio/best";
|
||||||
ytdl-raw-options = lib.concatStringsSep "," [''sub-lang="de,en"'' "write-sub=" "write-auto-sub="];
|
ytdl-raw-options = lib.concatStringsSep "," [
|
||||||
|
''sub-lang="de,en"''
|
||||||
|
"write-sub="
|
||||||
|
"write-auto-sub="
|
||||||
|
];
|
||||||
screenshot-template = "%F-%wH%wM%wS-%#04n";
|
screenshot-template = "%F-%wH%wM%wS-%#04n";
|
||||||
script-opts = "ytdl_hook-ytdl_path=${pkgs.yt-dlp}/bin/yt-dlp";
|
script-opts = "ytdl_hook-ytdl_path=${pkgs.yt-dlp}/bin/yt-dlp";
|
||||||
ao = "pulse"; # no pipewire for me :(
|
ao = "pulse"; # no pipewire for me :(
|
||||||
|
|||||||
@@ -3,12 +3,16 @@
|
|||||||
lib,
|
lib,
|
||||||
config,
|
config,
|
||||||
...
|
...
|
||||||
}: let
|
}:
|
||||||
vim-kmein = (pkgs.vim-kmein.override {
|
let
|
||||||
|
vim-kmein = (
|
||||||
|
pkgs.vim-kmein.override {
|
||||||
# stylixColors = config.lib.stylix.colors;
|
# stylixColors = config.lib.stylix.colors;
|
||||||
colorscheme = "base16-gruvbox-dark-medium";
|
colorscheme = "base16-gruvbox-dark-medium";
|
||||||
});
|
}
|
||||||
in {
|
);
|
||||||
|
in
|
||||||
|
{
|
||||||
environment.variables.EDITOR = lib.getExe vim-kmein;
|
environment.variables.EDITOR = lib.getExe vim-kmein;
|
||||||
environment.shellAliases.vi = "nvim";
|
environment.shellAliases.vi = "nvim";
|
||||||
environment.shellAliases.vim = "nvim";
|
environment.shellAliases.vim = "nvim";
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
{
|
{
|
||||||
pkgs,
|
pkgs,
|
||||||
...
|
...
|
||||||
}: {
|
}:
|
||||||
|
{
|
||||||
programs.nm-applet.enable = true;
|
programs.nm-applet.enable = true;
|
||||||
|
|
||||||
networking.networkmanager = {
|
networking.networkmanager = {
|
||||||
@@ -12,10 +13,10 @@
|
|||||||
];
|
];
|
||||||
wifi.macAddress = "random";
|
wifi.macAddress = "random";
|
||||||
ethernet.macAddress = "random";
|
ethernet.macAddress = "random";
|
||||||
unmanaged = ["docker*"];
|
unmanaged = [ "docker*" ];
|
||||||
};
|
};
|
||||||
|
|
||||||
users.users.me.extraGroups = ["networkmanager"];
|
users.users.me.extraGroups = [ "networkmanager" ];
|
||||||
|
|
||||||
environment.systemPackages = [
|
environment.systemPackages = [
|
||||||
pkgs.speedtest-cli
|
pkgs.speedtest-cli
|
||||||
|
|||||||
@@ -2,7 +2,8 @@
|
|||||||
pkgs,
|
pkgs,
|
||||||
config,
|
config,
|
||||||
...
|
...
|
||||||
}: {
|
}:
|
||||||
|
{
|
||||||
environment.systemPackages = [
|
environment.systemPackages = [
|
||||||
(pkgs.writers.writeDashBin "miniflux-watch-later" ''
|
(pkgs.writers.writeDashBin "miniflux-watch-later" ''
|
||||||
miniflux_api_token=$(cat ${config.age.secrets.miniflux-api-token.path})
|
miniflux_api_token=$(cat ${config.age.secrets.miniflux-api-token.path})
|
||||||
|
|||||||
@@ -2,13 +2,14 @@
|
|||||||
pkgs,
|
pkgs,
|
||||||
inputs,
|
inputs,
|
||||||
...
|
...
|
||||||
}: {
|
}:
|
||||||
|
{
|
||||||
nixpkgs = {
|
nixpkgs = {
|
||||||
config.allowUnfree = true;
|
config.allowUnfree = true;
|
||||||
};
|
};
|
||||||
nix = {
|
nix = {
|
||||||
package = pkgs.nixVersions.stable;
|
package = pkgs.nixVersions.stable;
|
||||||
extraOptions = "experimental-features = nix-command flakes";
|
extraOptions = "experimental-features = nix-command flakes";
|
||||||
nixPath = ["nixpkgs=${inputs.nixpkgs}"];
|
nixPath = [ "nixpkgs=${inputs.nixpkgs}" ];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,21 +2,23 @@
|
|||||||
pkgs,
|
pkgs,
|
||||||
lib,
|
lib,
|
||||||
...
|
...
|
||||||
}: let
|
}:
|
||||||
|
let
|
||||||
openweathermap-repo = pkgs.fetchFromGitHub {
|
openweathermap-repo = pkgs.fetchFromGitHub {
|
||||||
owner = "ip1981";
|
owner = "ip1981";
|
||||||
repo = "openweathermap";
|
repo = "openweathermap";
|
||||||
rev = "9cfef7b14ac5af7109449b54b1cb352b4c76167a";
|
rev = "9cfef7b14ac5af7109449b54b1cb352b4c76167a";
|
||||||
sha256 = "0sm43wicvw2fy7nq65s8vch6jjb5bszqr4ilnhibayamj4jcpw53";
|
sha256 = "0sm43wicvw2fy7nq65s8vch6jjb5bszqr4ilnhibayamj4jcpw53";
|
||||||
};
|
};
|
||||||
openweathermap = pkgs.haskellPackages.callCabal2nix "openweathermap" openweathermap-repo {};
|
openweathermap = pkgs.haskellPackages.callCabal2nix "openweathermap" openweathermap-repo { };
|
||||||
openweathermap-key = lib.strings.fileContents <secrets/openweathermap.key>;
|
openweathermap-key = lib.strings.fileContents <secrets/openweathermap.key>;
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
nixpkgs.config.packageOverrides = pkgs: {
|
nixpkgs.config.packageOverrides = pkgs: {
|
||||||
weather = pkgs.writers.writeDashBin "weather" ''
|
weather = pkgs.writers.writeDashBin "weather" ''
|
||||||
${openweathermap}/bin/openweathermap --api-key ${openweathermap-key} "$@"
|
${openweathermap}/bin/openweathermap --api-key ${openweathermap-key} "$@"
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
environment.systemPackages = [pkgs.weather];
|
environment.systemPackages = [ pkgs.weather ];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,13 +4,16 @@
|
|||||||
lib,
|
lib,
|
||||||
inputs,
|
inputs,
|
||||||
...
|
...
|
||||||
}: let
|
}:
|
||||||
worldradio = pkgs.callPackage ../packages/worldradio.nix {};
|
let
|
||||||
|
worldradio = pkgs.callPackage ../packages/worldradio.nix { };
|
||||||
|
|
||||||
zoteroStyle = {
|
zoteroStyle =
|
||||||
|
{
|
||||||
name,
|
name,
|
||||||
sha256,
|
sha256,
|
||||||
}: {
|
}:
|
||||||
|
{
|
||||||
name = "${name}.csl";
|
name = "${name}.csl";
|
||||||
path = pkgs.fetchurl {
|
path = pkgs.fetchurl {
|
||||||
url = "https://www.zotero.org/styles/${name}";
|
url = "https://www.zotero.org/styles/${name}";
|
||||||
@@ -32,7 +35,8 @@
|
|||||||
})
|
})
|
||||||
];
|
];
|
||||||
|
|
||||||
astrolog = pkgs.astrolog.overrideAttrs (old:
|
astrolog = pkgs.astrolog.overrideAttrs (
|
||||||
|
old:
|
||||||
old
|
old
|
||||||
// {
|
// {
|
||||||
installPhase = ''
|
installPhase = ''
|
||||||
@@ -51,8 +55,10 @@
|
|||||||
/^:I /s/80/120/ # wider text output
|
/^:I /s/80/120/ # wider text output
|
||||||
' $out/astrolog/astrolog.as
|
' $out/astrolog/astrolog.as
|
||||||
'';
|
'';
|
||||||
});
|
}
|
||||||
in {
|
);
|
||||||
|
in
|
||||||
|
{
|
||||||
home-manager.users.me.home.file = {
|
home-manager.users.me.home.file = {
|
||||||
".csl".source = cslDirectory;
|
".csl".source = cslDirectory;
|
||||||
".local/share/pandoc/csl".source = cslDirectory; # as of pandoc 2.11, it includes citeproc
|
".local/share/pandoc/csl".source = cslDirectory; # as of pandoc 2.11, it includes citeproc
|
||||||
@@ -233,7 +239,11 @@ in {
|
|||||||
go
|
go
|
||||||
texlive.combined.scheme-full
|
texlive.combined.scheme-full
|
||||||
latexrun
|
latexrun
|
||||||
(aspellWithDicts (dict: [dict.de dict.en dict.en-computers]))
|
(aspellWithDicts (dict: [
|
||||||
|
dict.de
|
||||||
|
dict.en
|
||||||
|
dict.en-computers
|
||||||
|
]))
|
||||||
# haskellPackages.pandoc-citeproc
|
# haskellPackages.pandoc-citeproc
|
||||||
text2pdf
|
text2pdf
|
||||||
lowdown
|
lowdown
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
{config, ...}: let
|
{ config, ... }:
|
||||||
|
let
|
||||||
user = config.users.users.me.name;
|
user = config.users.users.me.name;
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
security.polkit.extraConfig = ''
|
security.polkit.extraConfig = ''
|
||||||
polkit.addRule(function(action, subject) {
|
polkit.addRule(function(action, subject) {
|
||||||
if (subject.user == "${user}" && action.id == "org.freedesktop.systemd1.manage-units") {
|
if (subject.user == "${user}" && action.id == "org.freedesktop.systemd1.manage-units") {
|
||||||
|
|||||||
@@ -2,9 +2,11 @@
|
|||||||
pkgs,
|
pkgs,
|
||||||
config,
|
config,
|
||||||
...
|
...
|
||||||
}: let
|
}:
|
||||||
|
let
|
||||||
suspend = pkgs.writers.writeDash "suspend" "${pkgs.systemd}/bin/systemctl suspend";
|
suspend = pkgs.writers.writeDash "suspend" "${pkgs.systemd}/bin/systemctl suspend";
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
services.power-action = {
|
services.power-action = {
|
||||||
enable = true;
|
enable = true;
|
||||||
plans.suspend = {
|
plans.suspend = {
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
{pkgs, lib, ...}: let
|
{ pkgs, lib, ... }:
|
||||||
|
let
|
||||||
hp-driver = pkgs.hplip;
|
hp-driver = pkgs.hplip;
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
services.printing = {
|
services.printing = {
|
||||||
enable = true;
|
enable = true;
|
||||||
drivers = [hp-driver];
|
drivers = [ hp-driver ];
|
||||||
};
|
};
|
||||||
|
|
||||||
environment.systemPackages = [
|
environment.systemPackages = [
|
||||||
@@ -30,7 +32,6 @@ in {
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
HP/hp-officejet_4650_series.ppd.gz
|
HP/hp-officejet_4650_series.ppd.gz
|
||||||
drv:///hp/hpcups.drv/hp-officejet_4650_series.ppd
|
drv:///hp/hpcups.drv/hp-officejet_4650_series.ppd
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,11 @@
|
|||||||
config,
|
config,
|
||||||
pkgs,
|
pkgs,
|
||||||
...
|
...
|
||||||
}: {
|
}:
|
||||||
networking.hosts = {"42:0:ca48:f98f:63d7:31ce:922b:245d" = ["go"];};
|
{
|
||||||
|
networking.hosts = {
|
||||||
|
"42:0:ca48:f98f:63d7:31ce:922b:245d" = [ "go" ];
|
||||||
|
};
|
||||||
|
|
||||||
services.tinc.networks.retiolum = {
|
services.tinc.networks.retiolum = {
|
||||||
rsaPrivateKeyFile = config.age.secrets.retiolum-rsa.path;
|
rsaPrivateKeyFile = config.age.secrets.retiolum-rsa.path;
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
{pkgs, ...}: {
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
home-manager.users.me.programs.rofi = {
|
home-manager.users.me.programs.rofi = {
|
||||||
enable = true;
|
enable = true;
|
||||||
pass = {
|
pass = {
|
||||||
@@ -13,6 +14,6 @@
|
|||||||
help_color="#FF0000"
|
help_color="#FF0000"
|
||||||
''; # help_color set by https://github.com/mrossinek/dotfiles/commit/13fc5f24caa78c8f20547bf473266879507f13bf
|
''; # help_color set by https://github.com/mrossinek/dotfiles/commit/13fc5f24caa78c8f20547bf473266879507f13bf
|
||||||
};
|
};
|
||||||
plugins = [pkgs.rofi-calc];
|
plugins = [ pkgs.rofi-calc ];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
{pkgs, ...}: {
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
services.pipewire = {
|
services.pipewire = {
|
||||||
enable = true;
|
enable = true;
|
||||||
alsa = {
|
alsa = {
|
||||||
@@ -9,7 +10,7 @@
|
|||||||
jack.enable = true;
|
jack.enable = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
systemd.user.services.pipewire-pulse.path = [pkgs.pulseaudio];
|
systemd.user.services.pipewire-pulse.path = [ pkgs.pulseaudio ];
|
||||||
|
|
||||||
services.avahi = {
|
services.avahi = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|||||||
@@ -3,7 +3,8 @@
|
|||||||
lib,
|
lib,
|
||||||
inputs,
|
inputs,
|
||||||
...
|
...
|
||||||
}: let
|
}:
|
||||||
|
let
|
||||||
locker = x: "https://c.krebsco.de/${x}";
|
locker = x: "https://c.krebsco.de/${x}";
|
||||||
dictionaries = {
|
dictionaries = {
|
||||||
lojban = {
|
lojban = {
|
||||||
@@ -105,9 +106,11 @@
|
|||||||
sha256 = "0cx086zvb86bmz7i8vnsch4cj4fb0cp165g4hig4982zakj6f2jd";
|
sha256 = "0cx086zvb86bmz7i8vnsch4cj4fb0cp165g4hig4982zakj6f2jd";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
sanskrit = let
|
sanskrit =
|
||||||
|
let
|
||||||
repo = "https://github.com/indic-dict/stardict-sanskrit/raw/4ebd2d3db5820f7cbe3a649c3d5aa8f83d19b29f";
|
repo = "https://github.com/indic-dict/stardict-sanskrit/raw/4ebd2d3db5820f7cbe3a649c3d5aa8f83d19b29f";
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
BoehtlingkRoth = pkgs.fetchzip {
|
BoehtlingkRoth = pkgs.fetchzip {
|
||||||
url = "${repo}/sa-head/german-entries/tars/Bohtlingk-and-Roth-Grosses-Petersburger-Worterbuch__2021-10-05_14-23-18Z__19MB.tar.gz";
|
url = "${repo}/sa-head/german-entries/tars/Bohtlingk-and-Roth-Grosses-Petersburger-Worterbuch__2021-10-05_14-23-18Z__19MB.tar.gz";
|
||||||
sha256 = "13414a8rgd7hd5ffar6nl68nk3ys60wjkgb7m11hp0ahaasmf6ly";
|
sha256 = "13414a8rgd7hd5ffar6nl68nk3ys60wjkgb7m11hp0ahaasmf6ly";
|
||||||
@@ -178,9 +181,11 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
makeStardictDataDir = dicts: pkgs.linkFarm "dictionaries" (lib.mapAttrsToList (name: path: {inherit name path;}) dicts);
|
makeStardictDataDir =
|
||||||
|
dicts: pkgs.linkFarm "dictionaries" (lib.mapAttrsToList (name: path: { inherit name path; }) dicts);
|
||||||
|
|
||||||
makeStardict = name: dicts:
|
makeStardict =
|
||||||
|
name: dicts:
|
||||||
pkgs.writers.writeDashBin name ''
|
pkgs.writers.writeDashBin name ''
|
||||||
set -efu
|
set -efu
|
||||||
export SDCV_PAGER=${toString sdcvPager}
|
export SDCV_PAGER=${toString sdcvPager}
|
||||||
@@ -188,7 +193,13 @@
|
|||||||
'';
|
'';
|
||||||
|
|
||||||
sdcvPager = pkgs.writers.writeDash "sdcvPager" ''
|
sdcvPager = pkgs.writers.writeDash "sdcvPager" ''
|
||||||
export PATH=${lib.makeBinPath [pkgs.gnused pkgs.ncurses pkgs.less]}
|
export PATH=${
|
||||||
|
lib.makeBinPath [
|
||||||
|
pkgs.gnused
|
||||||
|
pkgs.ncurses
|
||||||
|
pkgs.less
|
||||||
|
]
|
||||||
|
}
|
||||||
sed "
|
sed "
|
||||||
s!<sup>1</sup>!¹!gI
|
s!<sup>1</sup>!¹!gI
|
||||||
s!<sup>2</sup>!²!gI
|
s!<sup>2</sup>!²!gI
|
||||||
@@ -291,7 +302,8 @@
|
|||||||
s!</\?p[^>]*>!!gI
|
s!</\?p[^>]*>!!gI
|
||||||
" | less -FR
|
" | less -FR
|
||||||
'';
|
'';
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
# environment.etc.stardict.source = toString (makeStardictDataDir ({
|
# environment.etc.stardict.source = toString (makeStardictDataDir ({
|
||||||
# Crum = pkgs.fetchzip {
|
# Crum = pkgs.fetchzip {
|
||||||
# url = "http://download.huzheng.org/misc/stardict-Coptic-English_all_dialects-2.4.2.tar.bz2";
|
# url = "http://download.huzheng.org/misc/stardict-Coptic-English_all_dialects-2.4.2.tar.bz2";
|
||||||
@@ -325,64 +337,63 @@ in {
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
https://github.com/latin-dict/Georges1910/releases/download/v1.0/Georges1910-stardict.zip
|
https://github.com/latin-dict/Georges1910/releases/download/v1.0/Georges1910-stardict.zip
|
||||||
https://github.com/nikita-moor/latin-dictionary/releases/download/2020-02-14/LiddellScott1940-stardict.zip
|
https://github.com/nikita-moor/latin-dictionary/releases/download/2020-02-14/LiddellScott1940-stardict.zip
|
||||||
http://download.huzheng.org/bigdict/stardict-Cambridge_Dictionary_of_American_Idioms-2.4.2.tar.bz2
|
http://download.huzheng.org/bigdict/stardict-Cambridge_Dictionary_of_American_Idioms-2.4.2.tar.bz2
|
||||||
http://download.huzheng.org/bigdict/stardict-Concise_Oxford_Thesaurus_2nd_Ed-2.4.2.tar.bz2
|
http://download.huzheng.org/bigdict/stardict-Concise_Oxford_Thesaurus_2nd_Ed-2.4.2.tar.bz2
|
||||||
http://download.huzheng.org/bigdict/stardict-Urban_Dictionary_P1-2.4.2.tar.bz2
|
http://download.huzheng.org/bigdict/stardict-Urban_Dictionary_P1-2.4.2.tar.bz2
|
||||||
http://download.huzheng.org/bigdict/stardict-Urban_Dictionary_P2-2.4.2.tar.bz2
|
http://download.huzheng.org/bigdict/stardict-Urban_Dictionary_P2-2.4.2.tar.bz2
|
||||||
|
|
||||||
Duden_Rechtschreibung = pkgs.fetchzip {
|
Duden_Rechtschreibung = pkgs.fetchzip {
|
||||||
url = "http://download.huzheng.org/babylon/german/stardict-Duden_Rechtschreibung-2.4.2.tar.bz2";
|
url = "http://download.huzheng.org/babylon/german/stardict-Duden_Rechtschreibung-2.4.2.tar.bz2";
|
||||||
sha256 = "0xiprb45s88w62rn8rlbjrsagbiliay9hszsiy20glwabf6zsfji";
|
sha256 = "0xiprb45s88w62rn8rlbjrsagbiliay9hszsiy20glwabf6zsfji";
|
||||||
};
|
};
|
||||||
Duden = pkgs.fetchzip {
|
Duden = pkgs.fetchzip {
|
||||||
url = "http://download.huzheng.org/de/stardict-duden-2.4.2.tar.bz2";
|
url = "http://download.huzheng.org/de/stardict-duden-2.4.2.tar.bz2";
|
||||||
sha256 = "049i4ynfqqxykv1nlkyks94mvn14s22qdax5gg7hx1ks5y4xw64j";
|
sha256 = "049i4ynfqqxykv1nlkyks94mvn14s22qdax5gg7hx1ks5y4xw64j";
|
||||||
};
|
};
|
||||||
FreeOnlineDictionaryOfComputing = pkgs.fetchzip {
|
FreeOnlineDictionaryOfComputing = pkgs.fetchzip {
|
||||||
url = "http://download.huzheng.org/dict.org/stardict-dictd_www.dict.org_foldoc-2.4.2.tar.bz2";
|
url = "http://download.huzheng.org/dict.org/stardict-dictd_www.dict.org_foldoc-2.4.2.tar.bz2";
|
||||||
sha256 = "1lw2i8dzxpx929cpgvv0x366dnh4drr10wzqmrhcd0kvwglqawgm";
|
sha256 = "1lw2i8dzxpx929cpgvv0x366dnh4drr10wzqmrhcd0kvwglqawgm";
|
||||||
};
|
};
|
||||||
Cappeller = pkgs.fetchzip {
|
Cappeller = pkgs.fetchzip {
|
||||||
url = "${repo}/sa-head/german-entries/tars/capeller-sanskrit-german__2021-10-05_14-23-18Z__1MB.tar.gz";
|
url = "${repo}/sa-head/german-entries/tars/capeller-sanskrit-german__2021-10-05_14-23-18Z__1MB.tar.gz";
|
||||||
sha256 = "0jwrj2aih2lrcjg0lqm8jrvq9vsas9s8j4c9ggbg2n0jyz03kci3";
|
sha256 = "0jwrj2aih2lrcjg0lqm8jrvq9vsas9s8j4c9ggbg2n0jyz03kci3";
|
||||||
stripRoot = false;
|
stripRoot = false;
|
||||||
};
|
};
|
||||||
Yates = pkgs.fetchzip {
|
Yates = pkgs.fetchzip {
|
||||||
url = "https://github.com/indic-dict/stardict-sanskrit/raw/4ebd2d3db5820f7cbe3a649c3d5aa8f83d19b29f/sa-head/en-entries/tars/yates__2021-10-05_14-23-18Z__2MB.tar.gz";
|
url = "https://github.com/indic-dict/stardict-sanskrit/raw/4ebd2d3db5820f7cbe3a649c3d5aa8f83d19b29f/sa-head/en-entries/tars/yates__2021-10-05_14-23-18Z__2MB.tar.gz";
|
||||||
sha256 = "1k7gbalysf48pwa06zfykrqhdk466g35xy64b30k4z8bybgdn8z2";
|
sha256 = "1k7gbalysf48pwa06zfykrqhdk466g35xy64b30k4z8bybgdn8z2";
|
||||||
stripRoot = false;
|
stripRoot = false;
|
||||||
};
|
};
|
||||||
Wilson = pkgs.fetchzip {
|
Wilson = pkgs.fetchzip {
|
||||||
url = "https://github.com/indic-dict/stardict-sanskrit/raw/4ebd2d3db5820f7cbe3a649c3d5aa8f83d19b29f/sa-head/en-entries/tars/wilson__2021-10-05_14-23-18Z__3MB.tar.gz";
|
url = "https://github.com/indic-dict/stardict-sanskrit/raw/4ebd2d3db5820f7cbe3a649c3d5aa8f83d19b29f/sa-head/en-entries/tars/wilson__2021-10-05_14-23-18Z__3MB.tar.gz";
|
||||||
sha256 = "0r5z1xif56zlw9r2jp3fvwmcjv4f2fhd9r17j30nah9awx2m1isg";
|
sha256 = "0r5z1xif56zlw9r2jp3fvwmcjv4f2fhd9r17j30nah9awx2m1isg";
|
||||||
stripRoot = false;
|
stripRoot = false;
|
||||||
};
|
};
|
||||||
SpokenSanskrit = pkgs.fetchzip {
|
SpokenSanskrit = pkgs.fetchzip {
|
||||||
url = "https://github.com/indic-dict/stardict-sanskrit/raw/4ebd2d3db5820f7cbe3a649c3d5aa8f83d19b29f/sa-head/en-entries/tars/spokensanskrit__2019-01-12_05-13-52Z__12MB.tar.gz";
|
url = "https://github.com/indic-dict/stardict-sanskrit/raw/4ebd2d3db5820f7cbe3a649c3d5aa8f83d19b29f/sa-head/en-entries/tars/spokensanskrit__2019-01-12_05-13-52Z__12MB.tar.gz";
|
||||||
sha256 = "0x8j657mawvdcyd1knzvf33yp15z77d661n3h6g9hcj7wn9s5xyk";
|
sha256 = "0x8j657mawvdcyd1knzvf33yp15z77d661n3h6g9hcj7wn9s5xyk";
|
||||||
stripRoot = false;
|
stripRoot = false;
|
||||||
};
|
};
|
||||||
Grassmann = pkgs.fetchzip {
|
Grassmann = pkgs.fetchzip {
|
||||||
url = "${repo}/sa-head/german-entries/tars/grassman-sanskrit-german__2021-10-05_14-23-18Z__2MB.tar.gz";
|
url = "${repo}/sa-head/german-entries/tars/grassman-sanskrit-german__2021-10-05_14-23-18Z__2MB.tar.gz";
|
||||||
sha256 = "0jalsykaxkl6wzrky72lz8g3jdz26lmjpyibbfaf7a5vvnr55k02";
|
sha256 = "0jalsykaxkl6wzrky72lz8g3jdz26lmjpyibbfaf7a5vvnr55k02";
|
||||||
stripRoot = false;
|
stripRoot = false;
|
||||||
};
|
};
|
||||||
Benfey = pkgs.fetchzip {
|
Benfey = pkgs.fetchzip {
|
||||||
url = "https://github.com/indic-dict/stardict-sanskrit/raw/4ebd2d3db5820f7cbe3a649c3d5aa8f83d19b29f/sa-head/en-entries/tars/benfey__2021-10-05_14-23-18Z__2MB.tar.gz";
|
url = "https://github.com/indic-dict/stardict-sanskrit/raw/4ebd2d3db5820f7cbe3a649c3d5aa8f83d19b29f/sa-head/en-entries/tars/benfey__2021-10-05_14-23-18Z__2MB.tar.gz";
|
||||||
sha256 = "0lj3hgphqgnihn482g9kgjwbvdrcd38vc29v1fi36srn08qdhvcb";
|
sha256 = "0lj3hgphqgnihn482g9kgjwbvdrcd38vc29v1fi36srn08qdhvcb";
|
||||||
stripRoot = false;
|
stripRoot = false;
|
||||||
};
|
};
|
||||||
ApteSa = pkgs.fetchzip {
|
ApteSa = pkgs.fetchzip {
|
||||||
url = "${repo}/sa-head/en-entries/tars/apte-sa__2021-12-18_13-20-56Z__6MB.tar.gz";
|
url = "${repo}/sa-head/en-entries/tars/apte-sa__2021-12-18_13-20-56Z__6MB.tar.gz";
|
||||||
sha256 = "0cq1dd02d1pvmjnibbs2cscifjnk2z0nqccf5yzzilxkzsrarh32";
|
sha256 = "0cq1dd02d1pvmjnibbs2cscifjnk2z0nqccf5yzzilxkzsrarh32";
|
||||||
stripRoot = false;
|
stripRoot = false;
|
||||||
};
|
};
|
||||||
MacDonell = pkgs.fetchzip {
|
MacDonell = pkgs.fetchzip {
|
||||||
url = "https://github.com/indic-dict/stardict-sanskrit/raw/4ebd2d3db5820f7cbe3a649c3d5aa8f83d19b29f/sa-head/en-entries/tars/macdonell__2021-10-05_14-23-18Z__2MB.tar.gz";
|
url = "https://github.com/indic-dict/stardict-sanskrit/raw/4ebd2d3db5820f7cbe3a649c3d5aa8f83d19b29f/sa-head/en-entries/tars/macdonell__2021-10-05_14-23-18Z__2MB.tar.gz";
|
||||||
sha256 = "1yzmj0393mxvjv4n2lnvd2c722v2bmxxiyq7pscdwni3bxip3h8s";
|
sha256 = "1yzmj0393mxvjv4n2lnvd2c722v2bmxxiyq7pscdwni3bxip3h8s";
|
||||||
stripRoot = false;
|
stripRoot = false;
|
||||||
};
|
};
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -4,15 +4,17 @@
|
|||||||
lib,
|
lib,
|
||||||
inputs,
|
inputs,
|
||||||
...
|
...
|
||||||
}: let
|
}:
|
||||||
generatedWallpaper = pkgs.runCommand "wallpaper.png" {} ''
|
let
|
||||||
|
generatedWallpaper = pkgs.runCommand "wallpaper.png" { } ''
|
||||||
${inputs.wallpaper-generator.packages.x86_64-linux.wp-gen}/bin/wallpaper-generator lines \
|
${inputs.wallpaper-generator.packages.x86_64-linux.wp-gen}/bin/wallpaper-generator lines \
|
||||||
--output $out \
|
--output $out \
|
||||||
${lib.concatMapStringsSep " "
|
${lib.concatMapStringsSep " " (
|
||||||
(n: "--base0${lib.toHexString n}=${config.lib.stylix.colors.withHashtag."base0${lib.toHexString n}"}")
|
n: "--base0${lib.toHexString n}=${config.lib.stylix.colors.withHashtag."base0${lib.toHexString n}"}"
|
||||||
(lib.range 0 15)}
|
) (lib.range 0 15)}
|
||||||
'';
|
'';
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
# https://danth.github.io/stylix/tricks.html
|
# https://danth.github.io/stylix/tricks.html
|
||||||
# stylix.image = inputs.wallpapers.outPath + "/meteora/rodrigo-soares-250630.jpg";
|
# stylix.image = inputs.wallpapers.outPath + "/meteora/rodrigo-soares-250630.jpg";
|
||||||
stylix.enable = true;
|
stylix.enable = true;
|
||||||
|
|||||||
@@ -6,5 +6,5 @@
|
|||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
users.users.me.extraGroups = ["wheel"];
|
users.users.me.extraGroups = [ "wheel" ];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,13 +2,20 @@
|
|||||||
config,
|
config,
|
||||||
pkgs,
|
pkgs,
|
||||||
...
|
...
|
||||||
}: {
|
}:
|
||||||
|
{
|
||||||
boot.extraModulePackages = with config.boot.kernelPackages; [
|
boot.extraModulePackages = with config.boot.kernelPackages; [
|
||||||
tp_smapi
|
tp_smapi
|
||||||
acpi_call
|
acpi_call
|
||||||
];
|
];
|
||||||
boot.kernelModules = ["tp_smapi" "acpi_call"];
|
boot.kernelModules = [
|
||||||
environment.systemPackages = [pkgs.tpacpi-bat pkgs.powertop];
|
"tp_smapi"
|
||||||
|
"acpi_call"
|
||||||
|
];
|
||||||
|
environment.systemPackages = [
|
||||||
|
pkgs.tpacpi-bat
|
||||||
|
pkgs.powertop
|
||||||
|
];
|
||||||
|
|
||||||
services.tlp = {
|
services.tlp = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
{pkgs, ...}: {
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
environment.systemPackages = [
|
environment.systemPackages = [
|
||||||
pkgs.tmuxp
|
pkgs.tmuxp
|
||||||
pkgs.reptyr # move programs over to a tmux session
|
pkgs.reptyr # move programs over to a tmux session
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
{pkgs, ...}: {
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
services.tor.enable = true;
|
services.tor.enable = true;
|
||||||
services.tor.client.enable = true;
|
services.tor.client.enable = true;
|
||||||
environment.systemPackages = [pkgs.tor pkgs.torsocks];
|
environment.systemPackages = [
|
||||||
|
pkgs.tor
|
||||||
|
pkgs.torsocks
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,9 +3,14 @@
|
|||||||
pkgs,
|
pkgs,
|
||||||
lib,
|
lib,
|
||||||
...
|
...
|
||||||
}: let
|
}:
|
||||||
|
let
|
||||||
username = "meinhak99";
|
username = "meinhak99";
|
||||||
fu-defaults = let mailhost = "mail.zedat.fu-berlin.de"; in {
|
fu-defaults =
|
||||||
|
let
|
||||||
|
mailhost = "mail.zedat.fu-berlin.de";
|
||||||
|
in
|
||||||
|
{
|
||||||
imap.host = mailhost;
|
imap.host = mailhost;
|
||||||
imap.port = 993;
|
imap.port = 993;
|
||||||
imap.tls.enable = true;
|
imap.tls.enable = true;
|
||||||
@@ -16,7 +21,8 @@
|
|||||||
folders.sent = "Gesendet";
|
folders.sent = "Gesendet";
|
||||||
folders.trash = "Papierkorb";
|
folders.trash = "Papierkorb";
|
||||||
};
|
};
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
home-manager.users.me = {
|
home-manager.users.me = {
|
||||||
programs.ssh = {
|
programs.ssh = {
|
||||||
matchBlocks = {
|
matchBlocks = {
|
||||||
@@ -28,9 +34,7 @@ in {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
accounts.email.accounts = {
|
accounts.email.accounts = {
|
||||||
letos =
|
letos = lib.recursiveUpdate pkgs.lib.niveum.email.defaults {
|
||||||
lib.recursiveUpdate pkgs.lib.niveum.email.defaults
|
|
||||||
{
|
|
||||||
userName = "slfletos";
|
userName = "slfletos";
|
||||||
address = "letos.sprachlit@hu-berlin.de";
|
address = "letos.sprachlit@hu-berlin.de";
|
||||||
passwordCommand = "${pkgs.coreutils}/bin/cat ${config.age.secrets.email-password-letos.path}";
|
passwordCommand = "${pkgs.coreutils}/bin/cat ${config.age.secrets.email-password-letos.path}";
|
||||||
@@ -40,19 +44,23 @@ in {
|
|||||||
smtp.port = 25;
|
smtp.port = 25;
|
||||||
smtp.tls.useStartTls = true;
|
smtp.tls.useStartTls = true;
|
||||||
};
|
};
|
||||||
fu =
|
fu = lib.recursiveUpdate pkgs.lib.niveum.email.defaults (
|
||||||
lib.recursiveUpdate pkgs.lib.niveum.email.defaults
|
lib.recursiveUpdate fu-defaults (
|
||||||
(lib.recursiveUpdate fu-defaults
|
let
|
||||||
(let userName = "meinhak99"; in {
|
userName = "meinhak99";
|
||||||
|
in
|
||||||
|
{
|
||||||
userName = userName;
|
userName = userName;
|
||||||
address = "kieran.meinhardt@fu-berlin.de";
|
address = "kieran.meinhardt@fu-berlin.de";
|
||||||
aliases = ["${userName}@fu-berlin.de"];
|
aliases = [ "${userName}@fu-berlin.de" ];
|
||||||
passwordCommand = "${pkgs.coreutils}/bin/cat ${config.age.secrets.email-password-meinhak99.path}";
|
passwordCommand = "${pkgs.coreutils}/bin/cat ${config.age.secrets.email-password-meinhak99.path}";
|
||||||
himalaya = {
|
himalaya = {
|
||||||
enable = true;
|
enable = true;
|
||||||
settings.backend = "imap";
|
settings.backend = "imap";
|
||||||
};
|
};
|
||||||
}));
|
}
|
||||||
|
)
|
||||||
|
);
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -82,7 +90,8 @@ in {
|
|||||||
system.fsPackages = [ pkgs.sshfs ];
|
system.fsPackages = [ pkgs.sshfs ];
|
||||||
|
|
||||||
# https://www.zedat.fu-berlin.de/tip4u_157.pdf
|
# https://www.zedat.fu-berlin.de/tip4u_157.pdf
|
||||||
fileSystems = let
|
fileSystems =
|
||||||
|
let
|
||||||
fu-berlin-cifs-options = [
|
fu-berlin-cifs-options = [
|
||||||
"uid=${toString config.users.users.me.uid}"
|
"uid=${toString config.users.users.me.uid}"
|
||||||
"gid=${toString config.users.groups.users.gid}"
|
"gid=${toString config.users.groups.users.gid}"
|
||||||
@@ -111,30 +120,27 @@ in {
|
|||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
in home-directory-mount "meinhak99";
|
in
|
||||||
|
home-directory-mount "meinhak99";
|
||||||
|
|
||||||
environment.systemPackages = [
|
environment.systemPackages = [
|
||||||
(pkgs.writers.writeDashBin "hu-vpn-split" ''
|
(pkgs.writers.writeDashBin "hu-vpn-split" ''
|
||||||
${pkgs.openfortivpn}/bin/openfortivpn \
|
${pkgs.openfortivpn}/bin/openfortivpn \
|
||||||
--password="$(cat "${config.age.secrets.email-password-letos.path}")" \
|
--password="$(cat "${config.age.secrets.email-password-letos.path}")" \
|
||||||
--config=${
|
--config=${pkgs.writeText "hu-berlin-split.config" ''
|
||||||
pkgs.writeText "hu-berlin-split.config" ''
|
|
||||||
host = forti-ssl.vpn.hu-berlin.de
|
host = forti-ssl.vpn.hu-berlin.de
|
||||||
port = 443
|
port = 443
|
||||||
username = slfletos@split_tunnel
|
username = slfletos@split_tunnel
|
||||||
''
|
''}
|
||||||
}
|
|
||||||
'')
|
'')
|
||||||
(pkgs.writers.writeDashBin "hu-vpn-full" ''
|
(pkgs.writers.writeDashBin "hu-vpn-full" ''
|
||||||
${pkgs.openfortivpn}/bin/openfortivpn \
|
${pkgs.openfortivpn}/bin/openfortivpn \
|
||||||
--password="$(cat "${config.age.secrets.email-password-letos.path}")" \
|
--password="$(cat "${config.age.secrets.email-password-letos.path}")" \
|
||||||
--config=${
|
--config=${pkgs.writeText "hu-berlin-full.config" ''
|
||||||
pkgs.writeText "hu-berlin-full.config" ''
|
|
||||||
host = forti-ssl.vpn.hu-berlin.de
|
host = forti-ssl.vpn.hu-berlin.de
|
||||||
port = 443
|
port = 443
|
||||||
username = slfletos@tunnel_all
|
username = slfletos@tunnel_all
|
||||||
''
|
''}
|
||||||
}
|
|
||||||
'')
|
'')
|
||||||
(pkgs.writers.writeDashBin "fu-vpn" ''
|
(pkgs.writers.writeDashBin "fu-vpn" ''
|
||||||
if ${pkgs.wirelesstools}/bin/iwgetid | ${pkgs.gnugrep}/bin/grep --invert-match eduroam
|
if ${pkgs.wirelesstools}/bin/iwgetid | ${pkgs.gnugrep}/bin/grep --invert-match eduroam
|
||||||
|
|||||||
@@ -1 +1,4 @@
|
|||||||
{pkgs, ...}: {environment.systemPackages = [pkgs.vscode];}
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
environment.systemPackages = [ pkgs.vscode ];
|
||||||
|
}
|
||||||
|
|||||||
@@ -2,14 +2,16 @@
|
|||||||
pkgs,
|
pkgs,
|
||||||
lib,
|
lib,
|
||||||
...
|
...
|
||||||
}: let
|
}:
|
||||||
|
let
|
||||||
# url = "http://wallpaper.r/realwallpaper-krebs-stars-berlin.png";
|
# url = "http://wallpaper.r/realwallpaper-krebs-stars-berlin.png";
|
||||||
url = "http://wallpaper.r/realwallpaper-krebs.png";
|
url = "http://wallpaper.r/realwallpaper-krebs.png";
|
||||||
stateDir = "~/.cache/wallpaper";
|
stateDir = "~/.cache/wallpaper";
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
systemd.user.services.wallpaper = {
|
systemd.user.services.wallpaper = {
|
||||||
wantedBy = ["graphical-session.target"];
|
wantedBy = [ "graphical-session.target" ];
|
||||||
after = ["network.target"];
|
after = [ "network.target" ];
|
||||||
script = ''
|
script = ''
|
||||||
set -euf
|
set -euf
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,9 @@
|
|||||||
config,
|
config,
|
||||||
pkgs,
|
pkgs,
|
||||||
...
|
...
|
||||||
}: {
|
}:
|
||||||
environment.systemPackages = [pkgs.watson];
|
{
|
||||||
|
environment.systemPackages = [ pkgs.watson ];
|
||||||
|
|
||||||
environment.variables.WATSON_DIR = "${config.users.users.me.home}/cloud/Seafile/Documents/watson";
|
environment.variables.WATSON_DIR = "${config.users.users.me.home}/cloud/Seafile/Documents/watson";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,23 +2,32 @@
|
|||||||
config,
|
config,
|
||||||
pkgs,
|
pkgs,
|
||||||
...
|
...
|
||||||
}: let
|
}:
|
||||||
|
let
|
||||||
promptColours.success = "cyan";
|
promptColours.success = "cyan";
|
||||||
promptColours.failure = "red";
|
promptColours.failure = "red";
|
||||||
in {
|
in
|
||||||
programs.zsh = let
|
{
|
||||||
|
programs.zsh =
|
||||||
|
let
|
||||||
zsh-completions = pkgs.fetchFromGitHub {
|
zsh-completions = pkgs.fetchFromGitHub {
|
||||||
owner = "zsh-users";
|
owner = "zsh-users";
|
||||||
repo = "zsh-completions";
|
repo = "zsh-completions";
|
||||||
rev = "cf565254e26bb7ce03f51889e9a29953b955b1fb";
|
rev = "cf565254e26bb7ce03f51889e9a29953b955b1fb";
|
||||||
sha256 = "1yf4rz99acdsiy0y1v3bm65xvs2m0sl92ysz0rnnrlbd5amn283l";
|
sha256 = "1yf4rz99acdsiy0y1v3bm65xvs2m0sl92ysz0rnnrlbd5amn283l";
|
||||||
};
|
};
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
enable = true;
|
enable = true;
|
||||||
enableCompletion = true;
|
enableCompletion = true;
|
||||||
autosuggestions.enable = true;
|
autosuggestions.enable = true;
|
||||||
syntaxHighlighting.enable = true;
|
syntaxHighlighting.enable = true;
|
||||||
syntaxHighlighting.highlighters = ["main" "brackets" "pattern" "line"];
|
syntaxHighlighting.highlighters = [
|
||||||
|
"main"
|
||||||
|
"brackets"
|
||||||
|
"pattern"
|
||||||
|
"line"
|
||||||
|
];
|
||||||
interactiveShellInit = ''
|
interactiveShellInit = ''
|
||||||
setopt INTERACTIVE_COMMENTS CORRECT
|
setopt INTERACTIVE_COMMENTS CORRECT
|
||||||
setopt MULTIOS
|
setopt MULTIOS
|
||||||
|
|||||||
@@ -452,6 +452,8 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
formatter = eachSupportedSystem (system: nixpkgs.legacyPackages.${system}.nixfmt-tree);
|
||||||
|
|
||||||
packages = eachSupportedSystem (
|
packages = eachSupportedSystem (
|
||||||
system:
|
system:
|
||||||
let
|
let
|
||||||
|
|||||||
@@ -2,26 +2,34 @@
|
|||||||
pkgs,
|
pkgs,
|
||||||
lib,
|
lib,
|
||||||
...
|
...
|
||||||
}: {
|
}:
|
||||||
|
{
|
||||||
# watcher scripts
|
# watcher scripts
|
||||||
url = address:
|
url =
|
||||||
|
address:
|
||||||
pkgs.writers.writeDash "watch-url" ''
|
pkgs.writers.writeDash "watch-url" ''
|
||||||
${pkgs.curl}/bin/curl -sSL ${lib.escapeShellArg address} \
|
${pkgs.curl}/bin/curl -sSL ${lib.escapeShellArg address} \
|
||||||
| ${pkgs.python3Packages.html2text}/bin/html2text --decode-errors=ignore
|
| ${pkgs.python3Packages.html2text}/bin/html2text --decode-errors=ignore
|
||||||
'';
|
'';
|
||||||
urlSelector = selector: address:
|
urlSelector =
|
||||||
|
selector: address:
|
||||||
pkgs.writers.writeDash "watch-url-selector" ''
|
pkgs.writers.writeDash "watch-url-selector" ''
|
||||||
${pkgs.curl}/bin/curl -sSL ${lib.escapeShellArg address} \
|
${pkgs.curl}/bin/curl -sSL ${lib.escapeShellArg address} \
|
||||||
| ${pkgs.htmlq}/bin/htmlq ${lib.escapeShellArg selector} \
|
| ${pkgs.htmlq}/bin/htmlq ${lib.escapeShellArg selector} \
|
||||||
| ${pkgs.python3Packages.html2text}/bin/html2text
|
| ${pkgs.python3Packages.html2text}/bin/html2text
|
||||||
'';
|
'';
|
||||||
urlJSON = {jqScript ? "."}: address:
|
urlJSON =
|
||||||
|
{
|
||||||
|
jqScript ? ".",
|
||||||
|
}:
|
||||||
|
address:
|
||||||
pkgs.writers.writeDash "watch-url-json" ''
|
pkgs.writers.writeDash "watch-url-json" ''
|
||||||
${pkgs.curl}/bin/curl -sSL ${lib.escapeShellArg address} | ${pkgs.jq}/bin/jq -f ${pkgs.writeText "script.jq" jqScript}
|
${pkgs.curl}/bin/curl -sSL ${lib.escapeShellArg address} | ${pkgs.jq}/bin/jq -f ${pkgs.writeText "script.jq" jqScript}
|
||||||
'';
|
'';
|
||||||
|
|
||||||
# reporter scripts
|
# reporter scripts
|
||||||
kpaste-irc = {
|
kpaste-irc =
|
||||||
|
{
|
||||||
target,
|
target,
|
||||||
retiolumLink ? false,
|
retiolumLink ? false,
|
||||||
server ? "irc.r",
|
server ? "irc.r",
|
||||||
@@ -30,11 +38,7 @@
|
|||||||
}:
|
}:
|
||||||
pkgs.writers.writeDash "kpaste-irc-reporter" ''
|
pkgs.writers.writeDash "kpaste-irc-reporter" ''
|
||||||
KPASTE_CONTENT_TYPE=text/plain ${pkgs.kpaste}/bin/kpaste \
|
KPASTE_CONTENT_TYPE=text/plain ${pkgs.kpaste}/bin/kpaste \
|
||||||
| ${pkgs.gnused}/bin/sed -n "${
|
| ${pkgs.gnused}/bin/sed -n "${if retiolumLink then "2" else "3"}s/^/${messagePrefix}/p" \
|
||||||
if retiolumLink
|
|
||||||
then "2"
|
|
||||||
else "3"
|
|
||||||
}s/^/${messagePrefix}/p" \
|
|
||||||
| ${pkgs.nur.repos.mic92.ircsink}/bin/ircsink \
|
| ${pkgs.nur.repos.mic92.ircsink}/bin/ircsink \
|
||||||
--nick ${nick} \
|
--nick ${nick} \
|
||||||
--server ${server} \
|
--server ${server} \
|
||||||
|
|||||||
@@ -84,7 +84,11 @@ in
|
|||||||
Type = "simple";
|
Type = "simple";
|
||||||
ExecStart = ''
|
ExecStart = ''
|
||||||
${lib.getExe cfg.package} \
|
${lib.getExe cfg.package} \
|
||||||
${lib.optionalString (cfg.contactInstructions != null) ("--contact " + lib.escapeShellArg cfg.contactInstructions)} \
|
${
|
||||||
|
lib.optionalString (cfg.contactInstructions != null) (
|
||||||
|
"--contact " + lib.escapeShellArg cfg.contactInstructions
|
||||||
|
)
|
||||||
|
} \
|
||||||
--host ${cfg.host} \
|
--host ${cfg.host} \
|
||||||
--index ${pkgs.writeText "index.html" cfg.homePageTemplate} \
|
--index ${pkgs.writeText "index.html" cfg.homePageTemplate} \
|
||||||
--listen ${cfg.listenAddress} \
|
--listen ${cfg.listenAddress} \
|
||||||
|
|||||||
@@ -4,18 +4,20 @@
|
|||||||
pkgs,
|
pkgs,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
with lib; let
|
with lib;
|
||||||
|
let
|
||||||
cfg = config.services.moodle-dl;
|
cfg = config.services.moodle-dl;
|
||||||
json = pkgs.formats.json {};
|
json = pkgs.formats.json { };
|
||||||
moodle-dl-json = json.generate "moodle-dl.json" cfg.settings;
|
moodle-dl-json = json.generate "moodle-dl.json" cfg.settings;
|
||||||
stateDirectoryDefault = "/var/lib/moodle-dl";
|
stateDirectoryDefault = "/var/lib/moodle-dl";
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
options = {
|
options = {
|
||||||
services.moodle-dl = {
|
services.moodle-dl = {
|
||||||
enable = mkEnableOption "moodle-dl, a Moodle downloader";
|
enable = mkEnableOption "moodle-dl, a Moodle downloader";
|
||||||
|
|
||||||
settings = mkOption {
|
settings = mkOption {
|
||||||
default = {};
|
default = { };
|
||||||
type = json.type;
|
type = json.type;
|
||||||
description = ''
|
description = ''
|
||||||
Configuration for moodle-dl. For a full example, see
|
Configuration for moodle-dl. For a full example, see
|
||||||
@@ -69,11 +71,11 @@ in {
|
|||||||
group = "moodle-dl";
|
group = "moodle-dl";
|
||||||
};
|
};
|
||||||
|
|
||||||
users.groups.moodle-dl = {};
|
users.groups.moodle-dl = { };
|
||||||
|
|
||||||
systemd.services.moodle-dl = {
|
systemd.services.moodle-dl = {
|
||||||
description = "A Moodle downloader that downloads course content";
|
description = "A Moodle downloader that downloads course content";
|
||||||
wants = ["network-online.target"];
|
wants = [ "network-online.target" ];
|
||||||
serviceConfig = mkMerge [
|
serviceConfig = mkMerge [
|
||||||
{
|
{
|
||||||
Type = "oneshot";
|
Type = "oneshot";
|
||||||
@@ -83,11 +85,11 @@ in {
|
|||||||
ExecStart = "${cfg.package}/bin/moodle-dl ${lib.optionalString cfg.notifyOnly "--without-downloading-files"}";
|
ExecStart = "${cfg.package}/bin/moodle-dl ${lib.optionalString cfg.notifyOnly "--without-downloading-files"}";
|
||||||
ExecStartPre = pkgs.writers.writeDash "moodle-dl-config" "${pkgs.jq}/bin/jq -s '.[0] * .[1]' ${toString moodle-dl-json} ${toString cfg.tokensFile} > ${cfg.directory}/config.json";
|
ExecStartPre = pkgs.writers.writeDash "moodle-dl-config" "${pkgs.jq}/bin/jq -s '.[0] * .[1]' ${toString moodle-dl-json} ${toString cfg.tokensFile} > ${cfg.directory}/config.json";
|
||||||
}
|
}
|
||||||
(mkIf (cfg.directory == stateDirectoryDefault) {StateDirectory = "moodle-dl";})
|
(mkIf (cfg.directory == stateDirectoryDefault) { StateDirectory = "moodle-dl"; })
|
||||||
];
|
];
|
||||||
inherit (cfg) startAt;
|
inherit (cfg) startAt;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
meta.maintainers = [maintainers.kmein];
|
meta.maintainers = [ maintainers.kmein ];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,11 +3,13 @@
|
|||||||
lib,
|
lib,
|
||||||
pkgs,
|
pkgs,
|
||||||
...
|
...
|
||||||
}: {
|
}:
|
||||||
|
{
|
||||||
options.services.panoptikon = {
|
options.services.panoptikon = {
|
||||||
enable = lib.mkEnableOption "Generic command output / website watcher";
|
enable = lib.mkEnableOption "Generic command output / website watcher";
|
||||||
watchers = lib.mkOption {
|
watchers = lib.mkOption {
|
||||||
type = lib.types.attrsOf (lib.types.submodule (watcher: {
|
type = lib.types.attrsOf (
|
||||||
|
lib.types.submodule (watcher: {
|
||||||
options = {
|
options = {
|
||||||
script = lib.mkOption {
|
script = lib.mkOption {
|
||||||
type = lib.types.path;
|
type = lib.types.path;
|
||||||
@@ -33,7 +35,7 @@
|
|||||||
description = ''
|
description = ''
|
||||||
This can be used to pass secrets to the systemd service without adding them to the nix store.
|
This can be used to pass secrets to the systemd service without adding them to the nix store.
|
||||||
'';
|
'';
|
||||||
default = [];
|
default = [ ];
|
||||||
};
|
};
|
||||||
reporters = lib.mkOption {
|
reporters = lib.mkOption {
|
||||||
type = lib.types.listOf lib.types.path;
|
type = lib.types.listOf lib.types.path;
|
||||||
@@ -54,12 +56,14 @@
|
|||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
config = {};
|
config = { };
|
||||||
}));
|
})
|
||||||
|
);
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
config = let
|
config =
|
||||||
|
let
|
||||||
cfg = config.services.panoptikon;
|
cfg = config.services.panoptikon;
|
||||||
in
|
in
|
||||||
lib.mkIf cfg.enable {
|
lib.mkIf cfg.enable {
|
||||||
@@ -70,16 +74,17 @@
|
|||||||
group = "panoptikon";
|
group = "panoptikon";
|
||||||
};
|
};
|
||||||
|
|
||||||
users.extraGroups.panoptikon = {};
|
users.extraGroups.panoptikon = { };
|
||||||
|
|
||||||
systemd.timers = lib.attrsets.mapAttrs' (watcherName: _:
|
systemd.timers = lib.attrsets.mapAttrs' (
|
||||||
|
watcherName: _:
|
||||||
lib.nameValuePair "panoptikon-${watcherName}" {
|
lib.nameValuePair "panoptikon-${watcherName}" {
|
||||||
timerConfig.RandomizedDelaySec = toString (60 * 60);
|
timerConfig.RandomizedDelaySec = toString (60 * 60);
|
||||||
})
|
}
|
||||||
cfg.watchers;
|
) cfg.watchers;
|
||||||
|
|
||||||
systemd.services =
|
systemd.services = lib.attrsets.mapAttrs' (
|
||||||
lib.attrsets.mapAttrs' (watcherName: watcherOptions:
|
watcherName: watcherOptions:
|
||||||
lib.nameValuePair "panoptikon-${watcherName}" {
|
lib.nameValuePair "panoptikon-${watcherName}" {
|
||||||
enable = true;
|
enable = true;
|
||||||
startAt = watcherOptions.frequency;
|
startAt = watcherOptions.frequency;
|
||||||
@@ -97,18 +102,22 @@
|
|||||||
StartLimitBurst = "5";
|
StartLimitBurst = "5";
|
||||||
};
|
};
|
||||||
environment.PANOPTIKON_WATCHER = watcherName;
|
environment.PANOPTIKON_WATCHER = watcherName;
|
||||||
wants = ["network-online.target"];
|
wants = [ "network-online.target" ];
|
||||||
script = ''
|
script = ''
|
||||||
set -fux
|
set -fux
|
||||||
${watcherOptions.script} > ${lib.escapeShellArg watcherName}
|
${watcherOptions.script} > ${lib.escapeShellArg watcherName}
|
||||||
diff_output=$(${pkgs.diffutils}/bin/diff --new-file ${lib.escapeShellArg (watcherName + ".old")} ${lib.escapeShellArg watcherName} || :)
|
diff_output=$(${pkgs.diffutils}/bin/diff --new-file ${
|
||||||
|
lib.escapeShellArg (watcherName + ".old")
|
||||||
|
} ${lib.escapeShellArg watcherName} || :)
|
||||||
if [ -n "$diff_output" ]
|
if [ -n "$diff_output" ]
|
||||||
then
|
then
|
||||||
${lib.strings.concatMapStringsSep "\n" (reporter: ''echo "$diff_output" | ${reporter} || :'') watcherOptions.reporters}
|
${lib.strings.concatMapStringsSep "\n" (
|
||||||
|
reporter: ''echo "$diff_output" | ${reporter} || :''
|
||||||
|
) watcherOptions.reporters}
|
||||||
fi
|
fi
|
||||||
mv ${lib.escapeShellArg watcherName} ${lib.escapeShellArg (watcherName + ".old")}
|
mv ${lib.escapeShellArg watcherName} ${lib.escapeShellArg (watcherName + ".old")}
|
||||||
'';
|
'';
|
||||||
})
|
}
|
||||||
cfg.watchers;
|
) cfg.watchers;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,8 @@
|
|||||||
lib,
|
lib,
|
||||||
pkgs,
|
pkgs,
|
||||||
...
|
...
|
||||||
}: let
|
}:
|
||||||
|
let
|
||||||
cfg = config.niveum.passport;
|
cfg = config.niveum.passport;
|
||||||
sortOn = a: lib.sort (as1: as2: lib.lessThan (lib.getAttr a as1) (lib.getAttr a as2));
|
sortOn = a: lib.sort (as1: as2: lib.lessThan (lib.getAttr a as1) (lib.getAttr a as2));
|
||||||
css = ''
|
css = ''
|
||||||
@@ -52,20 +53,22 @@
|
|||||||
}
|
}
|
||||||
'';
|
'';
|
||||||
in
|
in
|
||||||
with lib; {
|
with lib;
|
||||||
|
{
|
||||||
options.niveum.passport = {
|
options.niveum.passport = {
|
||||||
enable = mkEnableOption "server passport";
|
enable = mkEnableOption "server passport";
|
||||||
|
|
||||||
introductionHTML = mkOption {type = types.str;};
|
introductionHTML = mkOption { type = types.str; };
|
||||||
|
|
||||||
virtualHost = mkOption {
|
virtualHost = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
};
|
};
|
||||||
|
|
||||||
services = mkOption {
|
services = mkOption {
|
||||||
type = types.listOf (types.submodule {
|
type = types.listOf (
|
||||||
|
types.submodule {
|
||||||
options = {
|
options = {
|
||||||
title = mkOption {type = types.str;};
|
title = mkOption { type = types.str; };
|
||||||
link = mkOption {
|
link = mkOption {
|
||||||
type = types.nullOr types.str;
|
type = types.nullOr types.str;
|
||||||
default = null;
|
default = null;
|
||||||
@@ -75,8 +78,9 @@ in
|
|||||||
default = "";
|
default = "";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
});
|
}
|
||||||
default = [];
|
);
|
||||||
|
default = [ ];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -132,4 +136,4 @@ in
|
|||||||
index index.html;
|
index index.html;
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,8 @@
|
|||||||
pkgs,
|
pkgs,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
with lib; let
|
with lib;
|
||||||
|
let
|
||||||
cfg = config.services.power-action;
|
cfg = config.services.power-action;
|
||||||
|
|
||||||
out = {
|
out = {
|
||||||
@@ -27,7 +28,8 @@ with lib; let
|
|||||||
default = "*:0/1";
|
default = "*:0/1";
|
||||||
};
|
};
|
||||||
plans = mkOption {
|
plans = mkOption {
|
||||||
type = with types;
|
type =
|
||||||
|
with types;
|
||||||
attrsOf (submodule {
|
attrsOf (submodule {
|
||||||
options = {
|
options = {
|
||||||
charging = mkOption {
|
charging = mkOption {
|
||||||
@@ -71,14 +73,18 @@ with lib; let
|
|||||||
state="$(${state})"
|
state="$(${state})"
|
||||||
${concatStringsSep "\n" (mapAttrsToList writeRule cfg.plans)}
|
${concatStringsSep "\n" (mapAttrsToList writeRule cfg.plans)}
|
||||||
'';
|
'';
|
||||||
charging_check = plan:
|
charging_check =
|
||||||
if (plan.charging == null)
|
plan:
|
||||||
then ""
|
if (plan.charging == null) then
|
||||||
else if plan.charging
|
""
|
||||||
then ''&& [ "$state" = "true" ]''
|
else if plan.charging then
|
||||||
else ''&& ! [ "$state" = "true" ]'';
|
''&& [ "$state" = "true" ]''
|
||||||
|
else
|
||||||
|
''&& ! [ "$state" = "true" ]'';
|
||||||
|
|
||||||
writeRule = _: plan: "if [ $power -ge ${toString plan.lowerLimit} ] && [ $power -le ${toString plan.upperLimit} ] ${charging_check plan}; then ${plan.action}; fi";
|
writeRule =
|
||||||
|
_: plan:
|
||||||
|
"if [ $power -ge ${toString plan.lowerLimit} ] && [ $power -le ${toString plan.upperLimit} ] ${charging_check plan}; then ${plan.action}; fi";
|
||||||
|
|
||||||
powerlvl = pkgs.writers.writeDash "powerlvl" ''
|
powerlvl = pkgs.writers.writeDash "powerlvl" ''
|
||||||
cat /sys/class/power_supply/${cfg.battery}/capacity
|
cat /sys/class/power_supply/${cfg.battery}/capacity
|
||||||
@@ -91,4 +97,4 @@ with lib; let
|
|||||||
fi
|
fi
|
||||||
'';
|
'';
|
||||||
in
|
in
|
||||||
out
|
out
|
||||||
|
|||||||
@@ -4,10 +4,12 @@
|
|||||||
lib,
|
lib,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
with lib; let
|
with lib;
|
||||||
|
let
|
||||||
netname = "retiolum";
|
netname = "retiolum";
|
||||||
cfg = config.networking.retiolum;
|
cfg = config.networking.retiolum;
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
options = {
|
options = {
|
||||||
networking.retiolum.ipv4 = mkOption {
|
networking.retiolum.ipv4 = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
@@ -33,10 +35,9 @@ in {
|
|||||||
config = {
|
config = {
|
||||||
services.tinc.networks.${netname} = {
|
services.tinc.networks.${netname} = {
|
||||||
name = cfg.nodename;
|
name = cfg.nodename;
|
||||||
hosts =
|
hosts = builtins.mapAttrs (name: _: builtins.readFile "${<retiolum/hosts>}/${name}") (
|
||||||
builtins.mapAttrs
|
builtins.readDir <retiolum/hosts>
|
||||||
(name: _: builtins.readFile "${<retiolum/hosts>}/${name}")
|
);
|
||||||
(builtins.readDir <retiolum/hosts>);
|
|
||||||
rsaPrivateKeyFile = toString <system-secrets/retiolum.key>;
|
rsaPrivateKeyFile = toString <system-secrets/retiolum.key>;
|
||||||
ed25519PrivateKeyFile = toString <system-secrets/retiolum.ed25519>;
|
ed25519PrivateKeyFile = toString <system-secrets/retiolum.ed25519>;
|
||||||
extraConfig = ''
|
extraConfig = ''
|
||||||
@@ -47,11 +48,11 @@ in {
|
|||||||
|
|
||||||
networking.extraHosts = builtins.readFile (toString <retiolum/etc.hosts>);
|
networking.extraHosts = builtins.readFile (toString <retiolum/etc.hosts>);
|
||||||
|
|
||||||
environment.systemPackages = [config.services.tinc.networks.${netname}.package];
|
environment.systemPackages = [ config.services.tinc.networks.${netname}.package ];
|
||||||
|
|
||||||
networking.firewall = {
|
networking.firewall = {
|
||||||
allowedTCPPorts = [655];
|
allowedTCPPorts = [ 655 ];
|
||||||
allowedUDPPorts = [655];
|
allowedUDPPorts = [ 655 ];
|
||||||
};
|
};
|
||||||
#services.netdata.portcheck.checks.tinc.port = 655;
|
#services.netdata.portcheck.checks.tinc.port = 655;
|
||||||
|
|
||||||
|
|||||||
@@ -4,13 +4,15 @@
|
|||||||
pkgs,
|
pkgs,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
with lib; {
|
with lib;
|
||||||
|
{
|
||||||
options.niveum = {
|
options.niveum = {
|
||||||
wirelessInterface = mkOption {type = types.str;};
|
wirelessInterface = mkOption { type = types.str; };
|
||||||
|
|
||||||
batteryName = mkOption {type = types.str;};
|
batteryName = mkOption { type = types.str; };
|
||||||
|
|
||||||
promptColours = let
|
promptColours =
|
||||||
|
let
|
||||||
colours16 = types.enum [
|
colours16 = types.enum [
|
||||||
"black"
|
"black"
|
||||||
"red"
|
"red"
|
||||||
@@ -21,7 +23,8 @@ with lib; {
|
|||||||
"cyan"
|
"cyan"
|
||||||
"white"
|
"white"
|
||||||
];
|
];
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
success = mkOption {
|
success = mkOption {
|
||||||
type = colours16;
|
type = colours16;
|
||||||
default = "green";
|
default = "green";
|
||||||
|
|||||||
@@ -4,24 +4,29 @@
|
|||||||
pkgs,
|
pkgs,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
with lib; let
|
with lib;
|
||||||
|
let
|
||||||
cfg = config.niveum.bots;
|
cfg = config.niveum.bots;
|
||||||
|
|
||||||
botService = name: bot:
|
botService =
|
||||||
|
name: bot:
|
||||||
nameValuePair "bot-${name}" {
|
nameValuePair "bot-${name}" {
|
||||||
enable = bot.enable;
|
enable = bot.enable;
|
||||||
startAt = bot.time;
|
startAt = bot.time;
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
Type = "oneshot";
|
Type = "oneshot";
|
||||||
LoadCredential = lib.optionals (bot.telegram.enable) [
|
LoadCredential =
|
||||||
|
lib.optionals (bot.telegram.enable) [
|
||||||
"telegram-token:${bot.telegram.tokenFile}"
|
"telegram-token:${bot.telegram.tokenFile}"
|
||||||
] ++ lib.optionals (bot.mastodon.enable) [
|
]
|
||||||
|
++ lib.optionals (bot.mastodon.enable) [
|
||||||
"mastodon-token:${bot.mastodon.tokenFile}"
|
"mastodon-token:${bot.mastodon.tokenFile}"
|
||||||
] ++ lib.optionals (bot.matrix.enable) [
|
]
|
||||||
|
++ lib.optionals (bot.matrix.enable) [
|
||||||
"matrix-token:${bot.matrix.tokenFile}"
|
"matrix-token:${bot.matrix.tokenFile}"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
wants = ["network-online.target"];
|
wants = [ "network-online.target" ];
|
||||||
script = ''
|
script = ''
|
||||||
QUOTE=$(${bot.command})
|
QUOTE=$(${bot.command})
|
||||||
if [ -n "$QUOTE" ]; then
|
if [ -n "$QUOTE" ]; then
|
||||||
@@ -30,12 +35,14 @@ with lib; let
|
|||||||
${lib.optionalString (bot.matrix.enable) ''
|
${lib.optionalString (bot.matrix.enable) ''
|
||||||
export MATRIX_TOKEN="$(cat "$CREDENTIALS_DIRECTORY/matrix-token")"
|
export MATRIX_TOKEN="$(cat "$CREDENTIALS_DIRECTORY/matrix-token")"
|
||||||
export JSON_PAYLOAD=$(${pkgs.jq}/bin/jq -n --arg msgtype "m.text" --arg body "$QUOTE" '{msgtype: $msgtype, body: $body}')
|
export JSON_PAYLOAD=$(${pkgs.jq}/bin/jq -n --arg msgtype "m.text" --arg body "$QUOTE" '{msgtype: $msgtype, body: $body}')
|
||||||
${strings.concatStringsSep "\n" (map (chatId: ''
|
${strings.concatStringsSep "\n" (
|
||||||
|
map (chatId: ''
|
||||||
${pkgs.curl}/bin/curl -X POST "https://${bot.matrix.homeserver}/_matrix/client/r0/rooms/${chatId}/send/m.room.message" \
|
${pkgs.curl}/bin/curl -X POST "https://${bot.matrix.homeserver}/_matrix/client/r0/rooms/${chatId}/send/m.room.message" \
|
||||||
-d "$JSON_PAYLOAD" \
|
-d "$JSON_PAYLOAD" \
|
||||||
-H "Authorization: Bearer $MATRIX_TOKEN" \
|
-H "Authorization: Bearer $MATRIX_TOKEN" \
|
||||||
-H "Content-Type: application/json"
|
-H "Content-Type: application/json"
|
||||||
'') bot.matrix.chatIds)}
|
'') bot.matrix.chatIds
|
||||||
|
)}
|
||||||
''}
|
''}
|
||||||
|
|
||||||
${lib.optionalString (bot.mastodon.enable) ''
|
${lib.optionalString (bot.mastodon.enable) ''
|
||||||
@@ -49,32 +56,36 @@ with lib; let
|
|||||||
|
|
||||||
${lib.optionalString (bot.telegram.enable) ''
|
${lib.optionalString (bot.telegram.enable) ''
|
||||||
export TELEGRAM_TOKEN="$(cat "$CREDENTIALS_DIRECTORY/telegram-token")"
|
export TELEGRAM_TOKEN="$(cat "$CREDENTIALS_DIRECTORY/telegram-token")"
|
||||||
${strings.concatStringsSep "\n" (map (chatId: ''
|
${strings.concatStringsSep "\n" (
|
||||||
|
map (chatId: ''
|
||||||
${pkgs.curl}/bin/curl -X POST "https://api.telegram.org/bot''${TELEGRAM_TOKEN}/sendMessage" \
|
${pkgs.curl}/bin/curl -X POST "https://api.telegram.org/bot''${TELEGRAM_TOKEN}/sendMessage" \
|
||||||
-d chat_id="${chatId}" \
|
-d chat_id="${chatId}" \
|
||||||
-d text="$QUOTE" ${
|
-d text="$QUOTE" ${
|
||||||
lib.strings.optionalString (bot.telegram.parseMode != null)
|
lib.strings.optionalString (
|
||||||
"-d parse_mode=${bot.telegram.parseMode}"
|
bot.telegram.parseMode != null
|
||||||
|
) "-d parse_mode=${bot.telegram.parseMode}"
|
||||||
} | ${pkgs.jq}/bin/jq -e .ok
|
} | ${pkgs.jq}/bin/jq -e .ok
|
||||||
'')
|
'') bot.telegram.chatIds
|
||||||
bot.telegram.chatIds)}
|
)}
|
||||||
''}
|
''}
|
||||||
fi
|
fi
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
options.niveum.bots = mkOption {
|
options.niveum.bots = mkOption {
|
||||||
type = types.attrsOf (types.submodule {
|
type = types.attrsOf (
|
||||||
|
types.submodule {
|
||||||
options = {
|
options = {
|
||||||
enable = mkEnableOption "Mastodon and Telegram bot";
|
enable = mkEnableOption "Mastodon and Telegram bot";
|
||||||
time = mkOption {type = types.str;};
|
time = mkOption { type = types.str; };
|
||||||
command = mkOption {type = types.str;};
|
command = mkOption { type = types.str; };
|
||||||
matrix = mkOption {
|
matrix = mkOption {
|
||||||
default = {};
|
default = { };
|
||||||
type = types.submodule {
|
type = types.submodule {
|
||||||
options = {
|
options = {
|
||||||
enable = mkEnableOption "Posting to Matrix";
|
enable = mkEnableOption "Posting to Matrix";
|
||||||
tokenFile = mkOption {type = types.path;};
|
tokenFile = mkOption { type = types.path; };
|
||||||
homeserver = mkOption {
|
homeserver = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
};
|
};
|
||||||
@@ -85,7 +96,7 @@ in {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
mastodon = mkOption {
|
mastodon = mkOption {
|
||||||
default = {};
|
default = { };
|
||||||
type = types.submodule {
|
type = types.submodule {
|
||||||
options = {
|
options = {
|
||||||
enable = mkEnableOption "Posting to Mastodon";
|
enable = mkEnableOption "Posting to Mastodon";
|
||||||
@@ -93,7 +104,7 @@ in {
|
|||||||
type = types.str;
|
type = types.str;
|
||||||
default = "en";
|
default = "en";
|
||||||
};
|
};
|
||||||
tokenFile = mkOption {type = types.path;};
|
tokenFile = mkOption { type = types.path; };
|
||||||
homeserver = mkOption {
|
homeserver = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "social.krebsco.de";
|
default = "social.krebsco.de";
|
||||||
@@ -102,25 +113,33 @@ in {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
telegram = mkOption {
|
telegram = mkOption {
|
||||||
default = {};
|
default = { };
|
||||||
type = types.submodule {
|
type = types.submodule {
|
||||||
options = {
|
options = {
|
||||||
enable = mkEnableOption "Posting to Telegram";
|
enable = mkEnableOption "Posting to Telegram";
|
||||||
tokenFile = mkOption {type = types.path;};
|
tokenFile = mkOption { type = types.path; };
|
||||||
chatIds = mkOption {
|
chatIds = mkOption {
|
||||||
type = types.listOf (types.strMatching "-?[0-9]+|@[A-Za-z0-9]+");
|
type = types.listOf (types.strMatching "-?[0-9]+|@[A-Za-z0-9]+");
|
||||||
};
|
};
|
||||||
parseMode = mkOption {
|
parseMode = mkOption {
|
||||||
type = types.nullOr (types.enum ["HTML" "Markdown"]);
|
type = types.nullOr (
|
||||||
|
types.enum [
|
||||||
|
"HTML"
|
||||||
|
"Markdown"
|
||||||
|
]
|
||||||
|
);
|
||||||
default = null;
|
default = null;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
});
|
}
|
||||||
default = {};
|
);
|
||||||
|
default = { };
|
||||||
};
|
};
|
||||||
|
|
||||||
config = {systemd.services = attrsets.mapAttrs' botService cfg;};
|
config = {
|
||||||
|
systemd.services = attrsets.mapAttrs' botService cfg;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,14 +3,16 @@
|
|||||||
haskell,
|
haskell,
|
||||||
haskellPackages,
|
haskellPackages,
|
||||||
}:
|
}:
|
||||||
writers.writeHaskellBin "betacode" {
|
writers.writeHaskellBin "betacode"
|
||||||
|
{
|
||||||
libraries = [
|
libraries = [
|
||||||
(haskell.lib.unmarkBroken (haskell.lib.doJailbreak haskellPackages.betacode))
|
(haskell.lib.unmarkBroken (haskell.lib.doJailbreak haskellPackages.betacode))
|
||||||
haskellPackages.text
|
haskellPackages.text
|
||||||
];
|
];
|
||||||
} ''
|
}
|
||||||
|
''
|
||||||
import qualified Data.Text.IO as T
|
import qualified Data.Text.IO as T
|
||||||
import qualified Data.Text as T
|
import qualified Data.Text as T
|
||||||
import Text.BetaCode
|
import Text.BetaCode
|
||||||
main = T.interact (either (error . T.unpack) id . fromBeta)
|
main = T.interact (either (error . T.unpack) id . fromBeta)
|
||||||
''
|
''
|
||||||
|
|||||||
@@ -1,4 +1,10 @@
|
|||||||
{ writers, flite, netcat, gnused, ... }:
|
{
|
||||||
|
writers,
|
||||||
|
flite,
|
||||||
|
netcat,
|
||||||
|
gnused,
|
||||||
|
...
|
||||||
|
}:
|
||||||
writers.writeDashBin "brainmelter" ''
|
writers.writeDashBin "brainmelter" ''
|
||||||
SERVER="brockman.news"
|
SERVER="brockman.news"
|
||||||
PORT=6667
|
PORT=6667
|
||||||
|
|||||||
@@ -6,8 +6,15 @@
|
|||||||
writers.writeDashBin "closest" ''
|
writers.writeDashBin "closest" ''
|
||||||
${
|
${
|
||||||
writers.writeHaskellBin "closest" {
|
writers.writeHaskellBin "closest" {
|
||||||
libraries = with haskellPackages; [parallel optparse-applicative edit-distance];
|
libraries = with haskellPackages; [
|
||||||
ghcArgs = ["-O3" "-threaded"];
|
parallel
|
||||||
|
optparse-applicative
|
||||||
|
edit-distance
|
||||||
|
];
|
||||||
|
ghcArgs = [
|
||||||
|
"-O3"
|
||||||
|
"-threaded"
|
||||||
|
];
|
||||||
} (builtins.readFile ./distance.hs)
|
} (builtins.readFile ./distance.hs)
|
||||||
}/bin/closest +RTS -N4 -RTS --dictionary ${
|
}/bin/closest +RTS -N4 -RTS --dictionary ${
|
||||||
fetchurl {
|
fetchurl {
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
{pkgs}:
|
{ pkgs }:
|
||||||
pkgs.symlinkJoin {
|
pkgs.symlinkJoin {
|
||||||
name = "cyberlocker-tools";
|
name = "cyberlocker-tools";
|
||||||
paths = [
|
paths = [
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
{
|
{
|
||||||
lib,
|
lib,
|
||||||
writeShellScriptBin,
|
writeShellScriptBin,
|
||||||
}: let
|
}:
|
||||||
|
let
|
||||||
aliasFlag = name: value: "-c alias.${name}=${lib.escapeShellArg value}";
|
aliasFlag = name: value: "-c alias.${name}=${lib.escapeShellArg value}";
|
||||||
aliases = {
|
aliases = {
|
||||||
eroeffne = "init";
|
eroeffne = "init";
|
||||||
@@ -23,10 +24,10 @@
|
|||||||
zustand = "status";
|
zustand = "status";
|
||||||
};
|
};
|
||||||
in
|
in
|
||||||
writeShellScriptBin "depp" ''
|
writeShellScriptBin "depp" ''
|
||||||
if [ $# -gt 0 ]; then
|
if [ $# -gt 0 ]; then
|
||||||
git ${lib.concatStringsSep " " (lib.attrsets.mapAttrsToList aliasFlag aliases)} "$@"
|
git ${lib.concatStringsSep " " (lib.attrsets.mapAttrsToList aliasFlag aliases)} "$@"
|
||||||
else
|
else
|
||||||
printf "${lib.concatStringsSep "\n" (lib.attrsets.mapAttrsToList (n: v: n + " " + v) aliases)}\n"
|
printf "${lib.concatStringsSep "\n" (lib.attrsets.mapAttrsToList (n: v: n + " " + v) aliases)}\n"
|
||||||
fi
|
fi
|
||||||
''
|
''
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
{yarn2nix-moretea, lib}:
|
{ yarn2nix-moretea, lib }:
|
||||||
yarn2nix-moretea.mkYarnPackage {
|
yarn2nix-moretea.mkYarnPackage {
|
||||||
name = "devanagari";
|
name = "devanagari";
|
||||||
src = lib.fileset.toSource {
|
src = lib.fileset.toSource {
|
||||||
|
|||||||
@@ -4,7 +4,8 @@
|
|||||||
linkFarm,
|
linkFarm,
|
||||||
runCommandNoCC,
|
runCommandNoCC,
|
||||||
gnutar,
|
gnutar,
|
||||||
}: rec {
|
}:
|
||||||
|
rec {
|
||||||
offline_cache = linkFarm "offline" packages;
|
offline_cache = linkFarm "offline" packages;
|
||||||
packages = [
|
packages = [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -16,8 +16,8 @@ stdenv.mkDerivation {
|
|||||||
sha256 = "0f2jb8knx7lqy6wmf3rchgq2n2dj496lm8vgcs58rppzrmsk59d5";
|
sha256 = "0f2jb8knx7lqy6wmf3rchgq2n2dj496lm8vgcs58rppzrmsk59d5";
|
||||||
};
|
};
|
||||||
|
|
||||||
nativeBuildInputs = [makeWrapper];
|
nativeBuildInputs = [ makeWrapper ];
|
||||||
buildInputs = [xdo];
|
buildInputs = [ xdo ];
|
||||||
|
|
||||||
DESTDIR = "$(out)";
|
DESTDIR = "$(out)";
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,20 @@
|
|||||||
writers.writeDashBin "dmenu-randr" ''
|
writers.writeDashBin "dmenu-randr" ''
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
export PATH=${lib.makeBinPath [dmenu bc psmisc util-linux xorg.xrandr gawk libnotify arandr gnugrep coreutils]}
|
export PATH=${
|
||||||
|
lib.makeBinPath [
|
||||||
|
dmenu
|
||||||
|
bc
|
||||||
|
psmisc
|
||||||
|
util-linux
|
||||||
|
xorg.xrandr
|
||||||
|
gawk
|
||||||
|
libnotify
|
||||||
|
arandr
|
||||||
|
gnugrep
|
||||||
|
coreutils
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
# A UI for detecting and selecting all displays. Probes xrandr for connected
|
# A UI for detecting and selecting all displays. Probes xrandr for connected
|
||||||
# displays and lets user select one to use. User may also select "manual
|
# displays and lets user select one to use. User may also select "manual
|
||||||
|
|||||||
@@ -10,7 +10,15 @@
|
|||||||
}:
|
}:
|
||||||
writers.writeDashBin "emailmenu" ''
|
writers.writeDashBin "emailmenu" ''
|
||||||
history_file=$HOME/.cache/emailmenu
|
history_file=$HOME/.cache/emailmenu
|
||||||
PATH=${lib.makeBinPath [coreutils dmenu gawk libnotify xclip]}
|
PATH=${
|
||||||
|
lib.makeBinPath [
|
||||||
|
coreutils
|
||||||
|
dmenu
|
||||||
|
gawk
|
||||||
|
libnotify
|
||||||
|
xclip
|
||||||
|
]
|
||||||
|
}
|
||||||
chosen=$(${khard}/bin/khard email --parsable | awk '!seen[$0]++' | dmenu -i -p 📧 -1 -l 10 | tee --append "$history_file" | cut -f1)
|
chosen=$(${khard}/bin/khard email --parsable | awk '!seen[$0]++' | dmenu -i -p 📧 -1 -l 10 | tee --append "$history_file" | cut -f1)
|
||||||
[ "$chosen" != "" ] || exit
|
[ "$chosen" != "" ] || exit
|
||||||
echo "$chosen" | tr -d '\n' | xclip -selection clipboard
|
echo "$chosen" | tr -d '\n' | xclip -selection clipboard
|
||||||
|
|||||||
@@ -7,7 +7,14 @@
|
|||||||
fzf,
|
fzf,
|
||||||
}:
|
}:
|
||||||
writers.writeBashBin "fkill" ''
|
writers.writeBashBin "fkill" ''
|
||||||
PATH=$PATH:${lib.makeBinPath [procps gawk gnused fzf]}
|
PATH=$PATH:${
|
||||||
|
lib.makeBinPath [
|
||||||
|
procps
|
||||||
|
gawk
|
||||||
|
gnused
|
||||||
|
fzf
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
if [ "$UID" != "0" ]; then
|
if [ "$UID" != "0" ]; then
|
||||||
pid=$(ps -f -u "$UID" | sed 1d | fzf -m | awk '{print $2}')
|
pid=$(ps -f -u "$UID" | sed 1d | fzf -m | awk '{print $2}')
|
||||||
|
|||||||
@@ -10,7 +10,13 @@ writers.writeBashBin "fzfmenu" ''
|
|||||||
# https://github.com/junegunn/fzf/wiki/Examples#fzf-as-dmenu-replacement
|
# https://github.com/junegunn/fzf/wiki/Examples#fzf-as-dmenu-replacement
|
||||||
set -efu
|
set -efu
|
||||||
|
|
||||||
PATH=$PATH:${lib.makeBinPath [st fzf dash]}
|
PATH=$PATH:${
|
||||||
|
lib.makeBinPath [
|
||||||
|
st
|
||||||
|
fzf
|
||||||
|
dash
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
input=$(mktemp -p "$XDG_RUNTIME_DIR" -u --suffix .fzfmenu.input)
|
input=$(mktemp -p "$XDG_RUNTIME_DIR" -u --suffix .fzfmenu.input)
|
||||||
output=$(mktemp -p "$XDG_RUNTIME_DIR" -u --suffix .fzfmenu.output)
|
output=$(mktemp -p "$XDG_RUNTIME_DIR" -u --suffix .fzfmenu.output)
|
||||||
|
|||||||
@@ -2,8 +2,10 @@
|
|||||||
fetchzip,
|
fetchzip,
|
||||||
symlinkJoin,
|
symlinkJoin,
|
||||||
lib,
|
lib,
|
||||||
}: let
|
}:
|
||||||
gfs-font = name: sha256:
|
let
|
||||||
|
gfs-font =
|
||||||
|
name: sha256:
|
||||||
fetchzip {
|
fetchzip {
|
||||||
inherit name sha256;
|
inherit name sha256;
|
||||||
url = "http://www.greekfontsociety-gfs.gr/_assets/fonts/${name}.zip";
|
url = "http://www.greekfontsociety-gfs.gr/_assets/fonts/${name}.zip";
|
||||||
@@ -14,7 +16,7 @@
|
|||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
in
|
in
|
||||||
symlinkJoin {
|
symlinkJoin {
|
||||||
name = "gfs-fonts";
|
name = "gfs-fonts";
|
||||||
paths = lib.mapAttrsToList gfs-font {
|
paths = lib.mapAttrsToList gfs-font {
|
||||||
GFS_Artemisia = "1q39086pr2jhv118fjfv6l1li6japv4pdjnhh1scqw06mqrmydf4";
|
GFS_Artemisia = "1q39086pr2jhv118fjfv6l1li6japv4pdjnhh1scqw06mqrmydf4";
|
||||||
@@ -50,4 +52,4 @@ in
|
|||||||
# Garaldus
|
# Garaldus
|
||||||
# Ignacio
|
# Ignacio
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,10 @@
|
|||||||
{ gimp, fetchurl, runCommand, symlinkJoin, writers }:
|
{
|
||||||
|
gimp,
|
||||||
|
fetchurl,
|
||||||
|
runCommand,
|
||||||
|
symlinkJoin,
|
||||||
|
writers,
|
||||||
|
}:
|
||||||
let
|
let
|
||||||
bring-out-the-gimp = fetchurl {
|
bring-out-the-gimp = fetchurl {
|
||||||
url = "https://c.krebsco.de/bring-out-the-gimp.png";
|
url = "https://c.krebsco.de/bring-out-the-gimp.png";
|
||||||
@@ -8,13 +14,14 @@ let
|
|||||||
data-dir = symlinkJoin {
|
data-dir = symlinkJoin {
|
||||||
name = "gimp";
|
name = "gimp";
|
||||||
paths = [
|
paths = [
|
||||||
(runCommand "splash" {} ''
|
(runCommand "splash" { } ''
|
||||||
mkdir -p $out/${data-dir-prefix}/images
|
mkdir -p $out/${data-dir-prefix}/images
|
||||||
install ${bring-out-the-gimp} $out/share/gimp/2.0/images/gimp-splash.png
|
install ${bring-out-the-gimp} $out/share/gimp/2.0/images/gimp-splash.png
|
||||||
'')
|
'')
|
||||||
gimp
|
gimp
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
in writers.writeDashBin "gimp" ''
|
in
|
||||||
|
writers.writeDashBin "gimp" ''
|
||||||
exec env GIMP2_DATADIR=${data-dir}/${data-dir-prefix} ${gimp}/bin/gimp "$@"
|
exec env GIMP2_DATADIR=${data-dir}/${data-dir-prefix} ${gimp}/bin/gimp "$@"
|
||||||
''
|
''
|
||||||
|
|||||||
@@ -1,4 +1,8 @@
|
|||||||
{ buildGoModule, fetchgit, lib }:
|
{
|
||||||
|
buildGoModule,
|
||||||
|
fetchgit,
|
||||||
|
lib,
|
||||||
|
}:
|
||||||
buildGoModule {
|
buildGoModule {
|
||||||
pname = "go-webring";
|
pname = "go-webring";
|
||||||
version = "2024-12-18";
|
version = "2024-12-18";
|
||||||
|
|||||||
@@ -3,12 +3,13 @@
|
|||||||
fetchurl,
|
fetchurl,
|
||||||
xan,
|
xan,
|
||||||
util-linux,
|
util-linux,
|
||||||
}: let
|
}:
|
||||||
|
let
|
||||||
database = fetchurl {
|
database = fetchurl {
|
||||||
url = "http://c.krebsco.de/greek.csv";
|
url = "http://c.krebsco.de/greek.csv";
|
||||||
hash = "sha256-SYL10kerNI0HzExG6JXh765+CBBCHLO95B6OKErQ/sU=";
|
hash = "sha256-SYL10kerNI0HzExG6JXh765+CBBCHLO95B6OKErQ/sU=";
|
||||||
};
|
};
|
||||||
in
|
in
|
||||||
writers.writeDashBin "heuretes" ''
|
writers.writeDashBin "heuretes" ''
|
||||||
${xan}/bin/xan search -s simple "$*" ${database} | ${util-linux}/bin/column -s, -t
|
${xan}/bin/xan search -s simple "$*" ${database} | ${util-linux}/bin/column -s, -t
|
||||||
''
|
''
|
||||||
|
|||||||
@@ -1,12 +1,13 @@
|
|||||||
{ symlinkJoin
|
{
|
||||||
, hledger
|
symlinkJoin,
|
||||||
, writers
|
hledger,
|
||||||
, lib
|
writers,
|
||||||
, git
|
lib,
|
||||||
, coreutils
|
git,
|
||||||
, gnugrep
|
coreutils,
|
||||||
, timeLedger
|
gnugrep,
|
||||||
, ...
|
timeLedger,
|
||||||
|
...
|
||||||
}:
|
}:
|
||||||
let
|
let
|
||||||
date = "${coreutils}/bin/date +'%Y-%m-%d %H:%M:%S'";
|
date = "${coreutils}/bin/date +'%Y-%m-%d %H:%M:%S'";
|
||||||
|
|||||||
@@ -2,7 +2,8 @@
|
|||||||
writers,
|
writers,
|
||||||
lib,
|
lib,
|
||||||
xlockmore,
|
xlockmore,
|
||||||
}: let
|
}:
|
||||||
|
let
|
||||||
xlockModes = lib.concatStringsSep "\\n" [
|
xlockModes = lib.concatStringsSep "\\n" [
|
||||||
# "braid"
|
# "braid"
|
||||||
"galaxy"
|
"galaxy"
|
||||||
@@ -12,7 +13,7 @@
|
|||||||
"space"
|
"space"
|
||||||
];
|
];
|
||||||
in
|
in
|
||||||
writers.writeDashBin "k-lock" ''
|
writers.writeDashBin "k-lock" ''
|
||||||
MODE=$(printf "${xlockModes}" | shuf -n 1)
|
MODE=$(printf "${xlockModes}" | shuf -n 1)
|
||||||
|
|
||||||
${xlockmore}/bin/xlock \
|
${xlockmore}/bin/xlock \
|
||||||
@@ -26,4 +27,4 @@ in
|
|||||||
-validate "..." \
|
-validate "..." \
|
||||||
-invalid "Computer says no." \
|
-invalid "Computer says no." \
|
||||||
-mode "$MODE"
|
-mode "$MODE"
|
||||||
''
|
''
|
||||||
|
|||||||
@@ -10,15 +10,20 @@
|
|||||||
writers,
|
writers,
|
||||||
options ? { },
|
options ? { },
|
||||||
...
|
...
|
||||||
}: let
|
}:
|
||||||
|
let
|
||||||
eval = lib.evalModules {
|
eval = lib.evalModules {
|
||||||
modules = [
|
modules = [
|
||||||
{
|
{
|
||||||
imports = [options];
|
imports = [ options ];
|
||||||
options = {
|
options = {
|
||||||
selection = lib.mkOption {
|
selection = lib.mkOption {
|
||||||
default = "clipboard";
|
default = "clipboard";
|
||||||
type = lib.types.enum ["primary" "secondary" "clipboard"];
|
type = lib.types.enum [
|
||||||
|
"primary"
|
||||||
|
"secondary"
|
||||||
|
"clipboard"
|
||||||
|
];
|
||||||
};
|
};
|
||||||
dmenu = lib.mkOption {
|
dmenu = lib.mkOption {
|
||||||
default = "${dmenu}/bin/dmenu -i -p klem";
|
default = "${dmenu}/bin/dmenu -i -p klem";
|
||||||
@@ -41,19 +46,19 @@
|
|||||||
|
|
||||||
cfg = eval.config;
|
cfg = eval.config;
|
||||||
in
|
in
|
||||||
writers.writeDashBin "klem" ''
|
writers.writeDashBin "klem" ''
|
||||||
set -efu
|
set -efu
|
||||||
|
|
||||||
${xclip}/bin/xclip -selection ${cfg.selection} -out \
|
${xclip}/bin/xclip -selection ${cfg.selection} -out \
|
||||||
| case $(echo "${
|
| case $(echo "${lib.concatStringsSep "\n" (lib.attrNames cfg.scripts)}" | ${cfg.dmenu}) in
|
||||||
lib.concatStringsSep "\n" (lib.attrNames cfg.scripts)
|
${lib.concatStringsSep "\n" (
|
||||||
}" | ${cfg.dmenu}) in
|
lib.mapAttrsToList (option: script: ''
|
||||||
${lib.concatStringsSep "\n" (lib.mapAttrsToList (option: script: ''
|
|
||||||
'${option}') ${toString script} ;;
|
'${option}') ${toString script} ;;
|
||||||
'') cfg.scripts)}
|
'') cfg.scripts
|
||||||
|
)}
|
||||||
*) ${coreutils}/bin/cat ;;
|
*) ${coreutils}/bin/cat ;;
|
||||||
esac \
|
esac \
|
||||||
| ${xclip}/bin/xclip -selection ${cfg.selection} -in
|
| ${xclip}/bin/xclip -selection ${cfg.selection} -in
|
||||||
|
|
||||||
${libnotify}/bin/notify-send --app-name="klem" "Result copied to clipboard."
|
${libnotify}/bin/notify-send --app-name="klem" "Result copied to clipboard."
|
||||||
''
|
''
|
||||||
|
|||||||
@@ -6,7 +6,13 @@
|
|||||||
gnused,
|
gnused,
|
||||||
}:
|
}:
|
||||||
writers.writeDashBin "literature-quote" ''
|
writers.writeDashBin "literature-quote" ''
|
||||||
PATH=$PATH:${lib.makeBinPath [xan curl gnused]}
|
PATH=$PATH:${
|
||||||
|
lib.makeBinPath [
|
||||||
|
xan
|
||||||
|
curl
|
||||||
|
gnused
|
||||||
|
]
|
||||||
|
}
|
||||||
ROW=$(curl -Ls http://kmein.github.io/logotheca/quotes.csv | shuf -n1)
|
ROW=$(curl -Ls http://kmein.github.io/logotheca/quotes.csv | shuf -n1)
|
||||||
(
|
(
|
||||||
QUOTE="$(echo "$ROW" | xan select 3)"
|
QUOTE="$(echo "$ROW" | xan select 3)"
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{writers}:
|
{ writers }:
|
||||||
writers.writeHaskellBin "manual-sort" {} ''
|
writers.writeHaskellBin "manual-sort" { } ''
|
||||||
{-# LANGUAGE LambdaCase #-}
|
{-# LANGUAGE LambdaCase #-}
|
||||||
import Data.Char (toLower)
|
import Data.Char (toLower)
|
||||||
import System.Environment (getArgs)
|
import System.Environment (getArgs)
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
{
|
{
|
||||||
pkgs,
|
pkgs,
|
||||||
lib,
|
lib,
|
||||||
}: let
|
}:
|
||||||
|
let
|
||||||
m3u-to-tsv = ''
|
m3u-to-tsv = ''
|
||||||
${pkgs.gnused}/bin/sed '/#EXTM3U/d;/#EXTINF/s/.*,//g' $out | ${pkgs.coreutils}/bin/paste -d'\t' - - > $out.tmp
|
${pkgs.gnused}/bin/sed '/#EXTM3U/d;/#EXTINF/s/.*,//g' $out | ${pkgs.coreutils}/bin/paste -d'\t' - - > $out.tmp
|
||||||
mv $out.tmp $out
|
mv $out.tmp $out
|
||||||
@@ -19,6 +20,6 @@
|
|||||||
postFetch = m3u-to-tsv;
|
postFetch = m3u-to-tsv;
|
||||||
};
|
};
|
||||||
in
|
in
|
||||||
pkgs.writers.writeDashBin "mpv-tv" ''
|
pkgs.writers.writeDashBin "mpv-tv" ''
|
||||||
cat ${kodi-tv} ${live-tv} | ${pkgs.mpv}/bin/mpv --force-window=yes "$(${pkgs.dmenu}/bin/dmenu -i -l 5 | ${pkgs.coreutils}/bin/cut -f2)"
|
cat ${kodi-tv} ${live-tv} | ${pkgs.mpv}/bin/mpv --force-window=yes "$(${pkgs.dmenu}/bin/dmenu -i -l 5 | ${pkgs.coreutils}/bin/cut -f2)"
|
||||||
''
|
''
|
||||||
|
|||||||
@@ -1,4 +1,9 @@
|
|||||||
{ sox, mpv, writers, coreutils }:
|
{
|
||||||
|
sox,
|
||||||
|
mpv,
|
||||||
|
writers,
|
||||||
|
coreutils,
|
||||||
|
}:
|
||||||
# ref https://askubuntu.com/a/789472
|
# ref https://askubuntu.com/a/789472
|
||||||
writers.writeDashBin "noise-waves" ''
|
writers.writeDashBin "noise-waves" ''
|
||||||
file="/tmp/noise-$(${coreutils}/bin/date +%s | ${coreutils}/bin/md5sum | ${coreutils}/bin/cut -d' ' -f1).wav"
|
file="/tmp/noise-$(${coreutils}/bin/date +%s | ${coreutils}/bin/md5sum | ${coreutils}/bin/cut -d' ' -f1).wav"
|
||||||
|
|||||||
@@ -6,12 +6,16 @@
|
|||||||
coreutils,
|
coreutils,
|
||||||
noteDirectory ? "~/state/obsidian",
|
noteDirectory ? "~/state/obsidian",
|
||||||
currentDates ? false,
|
currentDates ? false,
|
||||||
obsidian-vim
|
obsidian-vim,
|
||||||
}:
|
}:
|
||||||
writers.writeDashBin "notemenu" ''
|
writers.writeDashBin "notemenu" ''
|
||||||
set -efu
|
set -efu
|
||||||
PATH=$PATH:${
|
PATH=$PATH:${
|
||||||
lib.makeBinPath [rofi findutils coreutils]
|
lib.makeBinPath [
|
||||||
|
rofi
|
||||||
|
findutils
|
||||||
|
coreutils
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
cd ${noteDirectory}
|
cd ${noteDirectory}
|
||||||
|
|||||||
@@ -23,9 +23,12 @@ stdenv.mkDerivation (finalAttrs: {
|
|||||||
|
|
||||||
doCheck = true;
|
doCheck = true;
|
||||||
|
|
||||||
buildInputs = [libogg];
|
buildInputs = [ libogg ];
|
||||||
|
|
||||||
nativeBuildInputs = [cmake pkg-config];
|
nativeBuildInputs = [
|
||||||
|
cmake
|
||||||
|
pkg-config
|
||||||
|
];
|
||||||
|
|
||||||
meta = with lib; {
|
meta = with lib; {
|
||||||
homepage = "https://github.com/fmang/opustags";
|
homepage = "https://github.com/fmang/opustags";
|
||||||
|
|||||||
@@ -6,8 +6,9 @@
|
|||||||
gnused,
|
gnused,
|
||||||
curl,
|
curl,
|
||||||
nur,
|
nur,
|
||||||
downloadDirectory ? "~/mobile/audio/Musik/radiomitschnitt"
|
downloadDirectory ? "~/mobile/audio/Musik/radiomitschnitt",
|
||||||
}: let
|
}:
|
||||||
|
let
|
||||||
playlistAPI = "https://radio.lassul.us";
|
playlistAPI = "https://radio.lassul.us";
|
||||||
|
|
||||||
sendIRC = writers.writeDash "send-irc" ''
|
sendIRC = writers.writeDash "send-irc" ''
|
||||||
@@ -102,7 +103,7 @@
|
|||||||
${yt-dlp}/bin/yt-dlp --add-metadata --audio-format mp3 --audio-quality 0 -xic "$@"
|
${yt-dlp}/bin/yt-dlp --add-metadata --audio-format mp3 --audio-quality 0 -xic "$@"
|
||||||
'';
|
'';
|
||||||
in
|
in
|
||||||
writers.writeDashBin "pls" ''
|
writers.writeDashBin "pls" ''
|
||||||
case "$1" in
|
case "$1" in
|
||||||
good|like|cool|nice|noice|top|yup|yass|yes|+)
|
good|like|cool|nice|noice|top|yup|yass|yes|+)
|
||||||
response=$(${curl}/bin/curl -sS -XPOST "${playlistAPI}/good")
|
response=$(${curl}/bin/curl -sS -XPOST "${playlistAPI}/good")
|
||||||
@@ -140,4 +141,4 @@ in
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
wait
|
wait
|
||||||
''
|
''
|
||||||
|
|||||||
@@ -1,11 +1,12 @@
|
|||||||
{
|
{
|
||||||
writers,
|
writers,
|
||||||
mpv,
|
mpv,
|
||||||
}: let
|
}:
|
||||||
|
let
|
||||||
arabicStories = "/home/kfm/cloud/syncthing/music/Arabic/Stories";
|
arabicStories = "/home/kfm/cloud/syncthing/music/Arabic/Stories";
|
||||||
levantineTextbook = "/home/kfm/cloud/syncthing/music/Arabic/Damaszenisch";
|
levantineTextbook = "/home/kfm/cloud/syncthing/music/Arabic/Damaszenisch";
|
||||||
in
|
in
|
||||||
writers.writeDashBin "polyglot" ''
|
writers.writeDashBin "polyglot" ''
|
||||||
languages='persian
|
languages='persian
|
||||||
arabic
|
arabic
|
||||||
coptic
|
coptic
|
||||||
@@ -104,4 +105,4 @@ in
|
|||||||
hebrew)
|
hebrew)
|
||||||
${mpv}/bin/mpv --shuffle $hebrew;;
|
${mpv}/bin/mpv --shuffle $hebrew;;
|
||||||
esac
|
esac
|
||||||
''
|
''
|
||||||
|
|||||||
@@ -15,7 +15,11 @@ buildPythonPackage (finalAttrs: {
|
|||||||
rev = "2ea25a03af15937916b6768835e056166986c567";
|
rev = "2ea25a03af15937916b6768835e056166986c567";
|
||||||
sha256 = "1pcf800hl0zkcffc47mkjq9mizsxdi0hwxlnij5bvbqdshd3w9ll";
|
sha256 = "1pcf800hl0zkcffc47mkjq9mizsxdi0hwxlnij5bvbqdshd3w9ll";
|
||||||
};
|
};
|
||||||
patches = [./regex-version.patch];
|
patches = [ ./regex-version.patch ];
|
||||||
propagatedBuildInputs = [backports_functools_lru_cache selenium regex];
|
propagatedBuildInputs = [
|
||||||
|
backports_functools_lru_cache
|
||||||
|
selenium
|
||||||
|
regex
|
||||||
|
];
|
||||||
doCheck = false;
|
doCheck = false;
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -1,6 +1,22 @@
|
|||||||
{ writers, lib, todoman, khal, util-linux, wego, pass }:
|
{
|
||||||
|
writers,
|
||||||
|
lib,
|
||||||
|
todoman,
|
||||||
|
khal,
|
||||||
|
util-linux,
|
||||||
|
wego,
|
||||||
|
pass,
|
||||||
|
}:
|
||||||
writers.writeDashBin "q" ''
|
writers.writeDashBin "q" ''
|
||||||
export PATH=$PATH:${lib.makeBinPath [todoman khal util-linux wego pass]}
|
export PATH=$PATH:${
|
||||||
|
lib.makeBinPath [
|
||||||
|
todoman
|
||||||
|
khal
|
||||||
|
util-linux
|
||||||
|
wego
|
||||||
|
pass
|
||||||
|
]
|
||||||
|
}
|
||||||
(todo list --due 240; echo) &
|
(todo list --due 240; echo) &
|
||||||
(khal list today today; echo) &
|
(khal list today today; echo) &
|
||||||
(cal -3; echo) &
|
(cal -3; echo) &
|
||||||
|
|||||||
@@ -1,7 +1,21 @@
|
|||||||
{ writers, lib, gnused, curl, jq, yq }:
|
{
|
||||||
|
writers,
|
||||||
|
lib,
|
||||||
|
gnused,
|
||||||
|
curl,
|
||||||
|
jq,
|
||||||
|
yq,
|
||||||
|
}:
|
||||||
writers.writeBashBin "radio-news" ''
|
writers.writeBashBin "radio-news" ''
|
||||||
set -efu
|
set -efu
|
||||||
PATH=$PATH:${lib.makeBinPath [gnused curl jq yq]}
|
PATH=$PATH:${
|
||||||
|
lib.makeBinPath [
|
||||||
|
gnused
|
||||||
|
curl
|
||||||
|
jq
|
||||||
|
yq
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
EVENTS=$(
|
EVENTS=$(
|
||||||
curl https://www.goodnewsnetwork.org/feed/ \
|
curl https://www.goodnewsnetwork.org/feed/ \
|
||||||
|
|||||||
@@ -1,8 +1,28 @@
|
|||||||
{ writers, lib, curl, pup, gnused, coreutils, pandoc, gawk, jq }:
|
{
|
||||||
|
writers,
|
||||||
|
lib,
|
||||||
|
curl,
|
||||||
|
pup,
|
||||||
|
gnused,
|
||||||
|
coreutils,
|
||||||
|
pandoc,
|
||||||
|
gawk,
|
||||||
|
jq,
|
||||||
|
}:
|
||||||
writers.writeDashBin "random-zeno" ''
|
writers.writeDashBin "random-zeno" ''
|
||||||
set -efu
|
set -efu
|
||||||
|
|
||||||
export PATH=${lib.makeBinPath [ curl pup gnused coreutils pandoc gawk jq ]}
|
export PATH=${
|
||||||
|
lib.makeBinPath [
|
||||||
|
curl
|
||||||
|
pup
|
||||||
|
gnused
|
||||||
|
coreutils
|
||||||
|
pandoc
|
||||||
|
gawk
|
||||||
|
jq
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
root="http://www.zeno.org"
|
root="http://www.zeno.org"
|
||||||
character_limit=350
|
character_limit=350
|
||||||
|
|||||||
@@ -3,10 +3,15 @@
|
|||||||
writers,
|
writers,
|
||||||
imagemagick,
|
imagemagick,
|
||||||
ghostscript,
|
ghostscript,
|
||||||
lib
|
lib,
|
||||||
}:
|
}:
|
||||||
writers.writeDashBin "scanned" ''
|
writers.writeDashBin "scanned" ''
|
||||||
export PATH=${lib.makeBinPath [ imagemagick ghostscript ]}:$PATH
|
export PATH=${
|
||||||
|
lib.makeBinPath [
|
||||||
|
imagemagick
|
||||||
|
ghostscript
|
||||||
|
]
|
||||||
|
}:$PATH
|
||||||
|
|
||||||
[ $# -eq 1 -a -f "$1" -a -r "$1" ] || exit 1
|
[ $# -eq 1 -a -f "$1" -a -r "$1" ] || exit 1
|
||||||
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user