mirror of
https://github.com/kmein/niveum
synced 2026-03-18 19:11:08 +01:00
format
This commit is contained in:
@@ -2,71 +2,71 @@
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
}:
|
||||
let
|
||||
darwin = lib.strings.hasSuffix "-darwin" pkgs.stdenv.hostPlatform.system;
|
||||
in {
|
||||
environment.systemPackages =
|
||||
[
|
||||
pkgs.htop
|
||||
pkgs.w3m
|
||||
pkgs.wget
|
||||
# ARCHIVE TOOLS
|
||||
pkgs.unzip
|
||||
pkgs.unrar
|
||||
pkgs.p7zip
|
||||
pkgs.sshuttle
|
||||
pkgs.zip
|
||||
# MONITORS
|
||||
pkgs.iftop # interface bandwidth monitor
|
||||
pkgs.lsof # list open files
|
||||
# SHELL
|
||||
pkgs.sqlite
|
||||
pkgs.fd # better find
|
||||
pkgs.tree
|
||||
pkgs.parallel # for parallel, since moreutils shadows task spooler
|
||||
pkgs.ripgrep # better grep
|
||||
pkgs.rlwrap
|
||||
pkgs.progress # display progress bars for pipes
|
||||
pkgs.file # determine file type
|
||||
pkgs.gdu # ncurses disk usage (ncdu is broken)
|
||||
pkgs.rmlint # remove duplicate files
|
||||
pkgs.jq # json toolkit
|
||||
pkgs.jless # less(1) for json
|
||||
pkgs.fq # toolkit for yaml, xml and binaries
|
||||
pkgs.bc # calculator
|
||||
pkgs.pari # gp -- better calculator
|
||||
pkgs.ts
|
||||
pkgs.vimv
|
||||
pkgs.vg
|
||||
pkgs.fkill
|
||||
pkgs.cyberlocker-tools
|
||||
pkgs.untilport
|
||||
pkgs.kpaste
|
||||
# HARDWARE
|
||||
pkgs.pciutils # for lspci
|
||||
]
|
||||
++ lib.optionals (!darwin) [
|
||||
pkgs.usbutils # for lsusb
|
||||
pkgs.lshw # for lshw
|
||||
pkgs.iotop # I/O load monitor
|
||||
pkgs.psmisc # for killall, pstree
|
||||
];
|
||||
in
|
||||
{
|
||||
environment.systemPackages = [
|
||||
pkgs.htop
|
||||
pkgs.w3m
|
||||
pkgs.wget
|
||||
# ARCHIVE TOOLS
|
||||
pkgs.unzip
|
||||
pkgs.unrar
|
||||
pkgs.p7zip
|
||||
pkgs.sshuttle
|
||||
pkgs.zip
|
||||
# MONITORS
|
||||
pkgs.iftop # interface bandwidth monitor
|
||||
pkgs.lsof # list open files
|
||||
# SHELL
|
||||
pkgs.sqlite
|
||||
pkgs.fd # better find
|
||||
pkgs.tree
|
||||
pkgs.parallel # for parallel, since moreutils shadows task spooler
|
||||
pkgs.ripgrep # better grep
|
||||
pkgs.rlwrap
|
||||
pkgs.progress # display progress bars for pipes
|
||||
pkgs.file # determine file type
|
||||
pkgs.gdu # ncurses disk usage (ncdu is broken)
|
||||
pkgs.rmlint # remove duplicate files
|
||||
pkgs.jq # json toolkit
|
||||
pkgs.jless # less(1) for json
|
||||
pkgs.fq # toolkit for yaml, xml and binaries
|
||||
pkgs.bc # calculator
|
||||
pkgs.pari # gp -- better calculator
|
||||
pkgs.ts
|
||||
pkgs.vimv
|
||||
pkgs.vg
|
||||
pkgs.fkill
|
||||
pkgs.cyberlocker-tools
|
||||
pkgs.untilport
|
||||
pkgs.kpaste
|
||||
# HARDWARE
|
||||
pkgs.pciutils # for lspci
|
||||
]
|
||||
++ lib.optionals (!darwin) [
|
||||
pkgs.usbutils # for lsusb
|
||||
pkgs.lshw # for lshw
|
||||
pkgs.iotop # I/O load monitor
|
||||
pkgs.psmisc # for killall, pstree
|
||||
];
|
||||
|
||||
|
||||
security.wrappers = {
|
||||
pmount = {
|
||||
setuid = true;
|
||||
owner = "root";
|
||||
group = "root";
|
||||
source = "${pkgs.pmount}/bin/pmount";
|
||||
};
|
||||
pumount = {
|
||||
setuid = true;
|
||||
owner = "root";
|
||||
group = "root";
|
||||
source = "${pkgs.pmount}/bin/pumount";
|
||||
};
|
||||
security.wrappers = {
|
||||
pmount = {
|
||||
setuid = true;
|
||||
owner = "root";
|
||||
group = "root";
|
||||
source = "${pkgs.pmount}/bin/pmount";
|
||||
};
|
||||
pumount = {
|
||||
setuid = true;
|
||||
owner = "root";
|
||||
group = "root";
|
||||
source = "${pkgs.pmount}/bin/pumount";
|
||||
};
|
||||
};
|
||||
|
||||
environment.interactiveShellInit = ''
|
||||
# Use XDG_RUNTIME_DIR for temporary files if available
|
||||
@@ -75,21 +75,22 @@ in {
|
||||
fi
|
||||
'';
|
||||
|
||||
environment.shellAliases = let
|
||||
take = pkgs.writers.writeDash "take" ''
|
||||
mkdir "$1" && cd "$1"
|
||||
'';
|
||||
cdt = pkgs.writers.writeDash "cdt" ''
|
||||
cd $(mktemp -p "$XDG_RUNTIME_DIR" -d "cdt-XXXXXX")
|
||||
pwd
|
||||
'';
|
||||
wcd = pkgs.writers.writeDash "wcd" ''
|
||||
cd "$(readlink "$(${pkgs.which}/bin/which --skip-alias "$1")" | xargs dirname)/.."
|
||||
'';
|
||||
where = pkgs.writers.writeDash "where" ''
|
||||
readlink "$(${pkgs.which}/bin/which --skip-alias "$1")" | xargs dirname
|
||||
'';
|
||||
in
|
||||
environment.shellAliases =
|
||||
let
|
||||
take = pkgs.writers.writeDash "take" ''
|
||||
mkdir "$1" && cd "$1"
|
||||
'';
|
||||
cdt = pkgs.writers.writeDash "cdt" ''
|
||||
cd $(mktemp -p "$XDG_RUNTIME_DIR" -d "cdt-XXXXXX")
|
||||
pwd
|
||||
'';
|
||||
wcd = pkgs.writers.writeDash "wcd" ''
|
||||
cd "$(readlink "$(${pkgs.which}/bin/which --skip-alias "$1")" | xargs dirname)/.."
|
||||
'';
|
||||
where = pkgs.writers.writeDash "where" ''
|
||||
readlink "$(${pkgs.which}/bin/which --skip-alias "$1")" | xargs dirname
|
||||
'';
|
||||
in
|
||||
{
|
||||
nixi = "nix repl nixpkgs";
|
||||
take = "source ${take}";
|
||||
@@ -110,16 +111,17 @@ in {
|
||||
la = "${pkgs.coreutils}/bin/ls --color=auto --time-style=long-iso --almost-all -l";
|
||||
}
|
||||
// (
|
||||
if darwin
|
||||
then {}
|
||||
else {
|
||||
"ß" = "${pkgs.util-linux}/bin/setsid";
|
||||
ip = "${pkgs.iproute2}/bin/ip -c";
|
||||
# systemd
|
||||
s = "${pkgs.systemd}/bin/systemctl";
|
||||
us = "${pkgs.systemd}/bin/systemctl --user";
|
||||
j = "${pkgs.systemd}/bin/journalctl";
|
||||
uj = "${pkgs.systemd}/bin/journalctl --user";
|
||||
}
|
||||
if darwin then
|
||||
{ }
|
||||
else
|
||||
{
|
||||
"ß" = "${pkgs.util-linux}/bin/setsid";
|
||||
ip = "${pkgs.iproute2}/bin/ip -c";
|
||||
# systemd
|
||||
s = "${pkgs.systemd}/bin/systemctl";
|
||||
us = "${pkgs.systemd}/bin/systemctl --user";
|
||||
j = "${pkgs.systemd}/bin/journalctl";
|
||||
uj = "${pkgs.systemd}/bin/journalctl --user";
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
@@ -2,8 +2,10 @@
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
in {
|
||||
}:
|
||||
let
|
||||
in
|
||||
{
|
||||
environment.variables.TERMINAL = "alacritty";
|
||||
|
||||
home-manager.users.me = {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
programs.adb.enable = true;
|
||||
|
||||
users.users.me.extraGroups = ["adbusers"];
|
||||
users.users.me.extraGroups = [ "adbusers" ];
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{pkgs, ...}: {
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
programs.bash = {
|
||||
promptInit = ''
|
||||
PS1="$(${pkgs.ncurses}/bin/tput bold)\w \$([[ \$? == 0 ]] && echo \"\[\033[1;32m\]\" || echo \"\[\033[1;31m\]\")\$$(${pkgs.ncurses}/bin/tput sgr0) "'';
|
||||
promptInit = ''PS1="$(${pkgs.ncurses}/bin/tput bold)\w \$([[ \$? == 0 ]] && echo \"\[\033[1;32m\]\" || echo \"\[\033[1;31m\]\")\$$(${pkgs.ncurses}/bin/tput sgr0) "'';
|
||||
interactiveShellInit = ''
|
||||
set -o vi
|
||||
'';
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
{pkgs, ...}: {
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
hardware.bluetooth = {
|
||||
enable = true;
|
||||
settings.general = {
|
||||
|
||||
@@ -2,16 +2,18 @@
|
||||
config,
|
||||
inputs,
|
||||
...
|
||||
}: let
|
||||
}:
|
||||
let
|
||||
autorenkalender = inputs.autorenkalender.packages.x86_64-linux.default;
|
||||
in {
|
||||
in
|
||||
{
|
||||
niveum.bots.autorenkalender = {
|
||||
enable = true;
|
||||
time = "07:00";
|
||||
telegram = {
|
||||
enable = true;
|
||||
tokenFile = config.age.secrets.telegram-token-kmein.path;
|
||||
chatIds = ["@autorenkalender"];
|
||||
chatIds = [ "@autorenkalender" ];
|
||||
parseMode = "Markdown";
|
||||
};
|
||||
command = "${autorenkalender}/bin/autorenkalender";
|
||||
|
||||
@@ -3,64 +3,69 @@
|
||||
lib,
|
||||
config,
|
||||
...
|
||||
}: {
|
||||
}:
|
||||
{
|
||||
niveum.bots.celan = {
|
||||
enable = true;
|
||||
time = "08:00";
|
||||
telegram = {
|
||||
enable = true;
|
||||
tokenFile = config.age.secrets.telegram-token-kmein.path;
|
||||
chatIds = ["@PaulCelan"];
|
||||
chatIds = [ "@PaulCelan" ];
|
||||
};
|
||||
mastodon = {
|
||||
enable = true;
|
||||
tokenFile = config.age.secrets.mastodon-token-celan.path;
|
||||
language = "de";
|
||||
};
|
||||
command = toString (pkgs.writers.writePython3 "random-celan.py" { libraries = [pkgs.python3Packages.lxml]; } ''
|
||||
from lxml import etree
|
||||
import random
|
||||
command = toString (
|
||||
pkgs.writers.writePython3 "random-celan.py" { libraries = [ pkgs.python3Packages.lxml ]; } ''
|
||||
from lxml import etree
|
||||
import random
|
||||
|
||||
|
||||
def xml_text(elements):
|
||||
return "".join("".join(t.itertext()) for t in elements).strip()
|
||||
def xml_text(elements):
|
||||
return "".join("".join(t.itertext()) for t in elements).strip()
|
||||
|
||||
|
||||
tree = etree.parse('${pkgs.fetchurl {
|
||||
url = "http://c.krebsco.de/celan.tei.xml";
|
||||
hash = "sha256-HgNmJYfhuwyfm+FcNtnnYWpJpIIU1ElHLeLiIFjF9mE=";
|
||||
}}')
|
||||
root = tree.getroot()
|
||||
tree = etree.parse('${
|
||||
pkgs.fetchurl {
|
||||
url = "http://c.krebsco.de/celan.tei.xml";
|
||||
hash = "sha256-HgNmJYfhuwyfm+FcNtnnYWpJpIIU1ElHLeLiIFjF9mE=";
|
||||
}
|
||||
}')
|
||||
root = tree.getroot()
|
||||
|
||||
tei = {"tei": "http://www.tei-c.org/ns/1.0"}
|
||||
tei = {"tei": "http://www.tei-c.org/ns/1.0"}
|
||||
|
||||
poems = root.xpath(".//tei:lg[@type='poem']", namespaces=tei)
|
||||
poems = root.xpath(".//tei:lg[@type='poem']", namespaces=tei)
|
||||
|
||||
poem = random.choice(poems)
|
||||
poem = random.choice(poems)
|
||||
|
||||
for stanza in poem.xpath("./tei:lg[@type='stanza']", namespaces=tei):
|
||||
for line in stanza.xpath('./tei:l', namespaces=tei):
|
||||
if line.text:
|
||||
print(line.text.strip())
|
||||
print()
|
||||
for stanza in poem.xpath("./tei:lg[@type='stanza']", namespaces=tei):
|
||||
for line in stanza.xpath('./tei:l', namespaces=tei):
|
||||
if line.text:
|
||||
print(line.text.strip())
|
||||
print()
|
||||
|
||||
current_element = poem
|
||||
while current_element is not None:
|
||||
if current_element.tag == "{http://www.tei-c.org/ns/1.0}text":
|
||||
text_element = current_element
|
||||
current_element = poem
|
||||
while current_element is not None:
|
||||
if current_element.tag == "{http://www.tei-c.org/ns/1.0}text":
|
||||
text_element = current_element
|
||||
|
||||
title = xml_text(text_element.xpath("./tei:front/tei:docTitle",
|
||||
namespaces=tei))
|
||||
print(f"Aus: #{title.replace(" ", "_")}", end=" ")
|
||||
title = xml_text(text_element.xpath("./tei:front/tei:docTitle",
|
||||
namespaces=tei))
|
||||
print(f"Aus: #{title.replace(" ", "_")}", end=" ")
|
||||
|
||||
if date := xml_text(text_element.xpath("./tei:front/tei:docDate",
|
||||
namespaces=tei)):
|
||||
print(f"({date})")
|
||||
break
|
||||
current_element = current_element.getparent()
|
||||
if date := xml_text(text_element.xpath("./tei:front/tei:docDate",
|
||||
namespaces=tei)):
|
||||
print(f"({date})")
|
||||
break
|
||||
current_element = current_element.getparent()
|
||||
|
||||
print("\n\n#PaulCelan #Celan #Lyrik #poetry")
|
||||
'');
|
||||
print("\n\n#PaulCelan #Celan #Lyrik #poetry")
|
||||
''
|
||||
);
|
||||
};
|
||||
|
||||
age.secrets = {
|
||||
|
||||
@@ -4,11 +4,13 @@
|
||||
lib,
|
||||
inputs,
|
||||
...
|
||||
}: let
|
||||
}:
|
||||
let
|
||||
telebots = inputs.telebots.defaultPackage.x86_64-linux;
|
||||
reverseDirectory = "/run/telegram-reverse";
|
||||
proverbDirectory = "/run/telegram-proverb";
|
||||
in {
|
||||
in
|
||||
{
|
||||
imports = [
|
||||
./logotheca.nix
|
||||
./transits.nix
|
||||
@@ -25,13 +27,21 @@ in {
|
||||
telegram-token-kmein.file = ../../secrets/telegram-token-kmein.age;
|
||||
};
|
||||
|
||||
systemd.tmpfiles.rules = map (path:
|
||||
pkgs.lib.niveum.tmpfilesConfig {
|
||||
type = "d";
|
||||
mode = "0750";
|
||||
age = "1h";
|
||||
inherit path;
|
||||
}) [reverseDirectory proverbDirectory];
|
||||
systemd.tmpfiles.rules =
|
||||
map
|
||||
(
|
||||
path:
|
||||
pkgs.lib.niveum.tmpfilesConfig {
|
||||
type = "d";
|
||||
mode = "0750";
|
||||
age = "1h";
|
||||
inherit path;
|
||||
}
|
||||
)
|
||||
[
|
||||
reverseDirectory
|
||||
proverbDirectory
|
||||
];
|
||||
|
||||
niveum.passport.services = [
|
||||
{
|
||||
@@ -59,9 +69,9 @@ in {
|
||||
};
|
||||
|
||||
systemd.services.telegram-reverse = {
|
||||
wantedBy = ["multi-user.target"];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
description = "Telegram reverse bot";
|
||||
path = [pkgs.ffmpeg];
|
||||
path = [ pkgs.ffmpeg ];
|
||||
enable = true;
|
||||
script = ''
|
||||
TELEGRAM_BOT_TOKEN="$(cat "$CREDENTIALS_DIRECTORY/token")" ${telebots}/bin/telegram-reverse
|
||||
@@ -72,7 +82,7 @@ in {
|
||||
};
|
||||
|
||||
systemd.services.telegram-streaming-link = {
|
||||
wantedBy = ["multi-user.target"];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
description = "Telegram bot converting YouTube Music <-> Spotify";
|
||||
enable = true;
|
||||
script = ''
|
||||
@@ -83,7 +93,7 @@ in {
|
||||
};
|
||||
|
||||
systemd.services.telegram-betacode = {
|
||||
wantedBy = ["multi-user.target"];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
description = "Telegram beta code bot";
|
||||
enable = true;
|
||||
script = ''
|
||||
@@ -94,7 +104,7 @@ in {
|
||||
};
|
||||
|
||||
systemd.services.telegram-proverb = {
|
||||
wantedBy = ["multi-user.target"];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
description = "Telegram proverb bot";
|
||||
enable = true;
|
||||
script = ''
|
||||
|
||||
@@ -4,9 +4,11 @@
|
||||
inputs,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
}:
|
||||
let
|
||||
hesychius = inputs.scripts.outPath + "/hesychius/hesychius.txt";
|
||||
in {
|
||||
in
|
||||
{
|
||||
niveum.bots.hesychius = {
|
||||
enable = true;
|
||||
time = "08:00";
|
||||
@@ -18,7 +20,7 @@ in {
|
||||
telegram = {
|
||||
enable = true;
|
||||
tokenFile = config.age.secrets.telegram-token-kmein.path;
|
||||
chatIds = ["@HesychiosAlexandreus"];
|
||||
chatIds = [ "@HesychiosAlexandreus" ];
|
||||
};
|
||||
command = "${pkgs.coreutils}/bin/shuf -n1 ${hesychius}";
|
||||
};
|
||||
|
||||
@@ -2,14 +2,15 @@
|
||||
pkgs,
|
||||
config,
|
||||
...
|
||||
}: {
|
||||
}:
|
||||
{
|
||||
niveum.bots.logotheca = {
|
||||
enable = true;
|
||||
time = "08/6:00";
|
||||
telegram = {
|
||||
enable = true;
|
||||
tokenFile = config.age.secrets.telegram-token-kmein.path;
|
||||
chatIds = ["-1001760262519"];
|
||||
chatIds = [ "-1001760262519" ];
|
||||
parseMode = "Markdown";
|
||||
};
|
||||
matrix = {
|
||||
|
||||
@@ -3,31 +3,36 @@
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
nachtischsatan-bot = {tokenFile}:
|
||||
pkgs.writers.writePython3 "nachtischsatan-bot" {
|
||||
libraries = [pkgs.python3Packages.python-telegram-bot];
|
||||
} ''
|
||||
from telegram.ext import Application, ContextTypes, MessageHandler, filters
|
||||
from telegram import Update
|
||||
import random
|
||||
import time
|
||||
}:
|
||||
let
|
||||
nachtischsatan-bot =
|
||||
{ tokenFile }:
|
||||
pkgs.writers.writePython3 "nachtischsatan-bot"
|
||||
{
|
||||
libraries = [ pkgs.python3Packages.python-telegram-bot ];
|
||||
}
|
||||
''
|
||||
from telegram.ext import Application, ContextTypes, MessageHandler, filters
|
||||
from telegram import Update
|
||||
import random
|
||||
import time
|
||||
|
||||
|
||||
async def flubber(update: Update, context: ContextTypes.DEFAULT_TYPE):
|
||||
time.sleep(random.randrange(4000) / 1000)
|
||||
await update.message.reply_text("*flubberflubber*")
|
||||
async def flubber(update: Update, context: ContextTypes.DEFAULT_TYPE):
|
||||
time.sleep(random.randrange(4000) / 1000)
|
||||
await update.message.reply_text("*flubberflubber*")
|
||||
|
||||
|
||||
with open('${tokenFile}', 'r') as tokenFile:
|
||||
token = tokenFile.read().strip()
|
||||
application = Application.builder().token(token).build()
|
||||
application.add_handler(MessageHandler(filters.ALL, flubber))
|
||||
application.run_polling()
|
||||
'';
|
||||
in {
|
||||
with open('${tokenFile}', 'r') as tokenFile:
|
||||
token = tokenFile.read().strip()
|
||||
application = Application.builder().token(token).build()
|
||||
application.add_handler(MessageHandler(filters.ALL, flubber))
|
||||
application.run_polling()
|
||||
'';
|
||||
in
|
||||
{
|
||||
systemd.services.telegram-nachtischsatan = {
|
||||
wantedBy = ["multi-user.target"];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
description = "*flubberflubber*";
|
||||
enable = true;
|
||||
script = toString (nachtischsatan-bot {
|
||||
|
||||
@@ -2,7 +2,8 @@
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
}:
|
||||
{
|
||||
niveum.bots.nietzsche = {
|
||||
enable = true;
|
||||
time = "08:00";
|
||||
@@ -11,15 +12,17 @@
|
||||
tokenFile = config.age.secrets.mastodon-token-nietzsche.path;
|
||||
language = "de";
|
||||
};
|
||||
command = toString (pkgs.writers.writeBash "random-nietzsche" ''
|
||||
set -efu
|
||||
random_number=$(( ($RANDOM % 10) + 1 ))
|
||||
if [ "$random_number" -eq 1 ]; then
|
||||
${pkgs.random-zeno}/bin/random-zeno "/Literatur/M/Nietzsche,+Friedrich"
|
||||
else
|
||||
${pkgs.random-zeno}/bin/random-zeno "/Philosophie/M/Nietzsche,+Friedrich"
|
||||
fi
|
||||
'');
|
||||
command = toString (
|
||||
pkgs.writers.writeBash "random-nietzsche" ''
|
||||
set -efu
|
||||
random_number=$(( ($RANDOM % 10) + 1 ))
|
||||
if [ "$random_number" -eq 1 ]; then
|
||||
${pkgs.random-zeno}/bin/random-zeno "/Literatur/M/Nietzsche,+Friedrich"
|
||||
else
|
||||
${pkgs.random-zeno}/bin/random-zeno "/Philosophie/M/Nietzsche,+Friedrich"
|
||||
fi
|
||||
''
|
||||
);
|
||||
};
|
||||
|
||||
systemd.timers.bot-nietzsche.timerConfig.RandomizedDelaySec = "10h";
|
||||
|
||||
@@ -3,7 +3,8 @@
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}: {
|
||||
}:
|
||||
{
|
||||
niveum.bots.smyth = {
|
||||
enable = true;
|
||||
time = "08:00";
|
||||
@@ -15,42 +16,44 @@
|
||||
telegram = {
|
||||
enable = true;
|
||||
tokenFile = config.age.secrets.telegram-token-kmein.path;
|
||||
chatIds = ["@HerbertWeirSmyth"];
|
||||
chatIds = [ "@HerbertWeirSmyth" ];
|
||||
};
|
||||
command = toString (pkgs.writers.writeDash "random-smyth" ''
|
||||
set -efu
|
||||
command = toString (
|
||||
pkgs.writers.writeDash "random-smyth" ''
|
||||
set -efu
|
||||
|
||||
good_curl() {
|
||||
${pkgs.curl}/bin/curl "$@" \
|
||||
--compressed \
|
||||
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
|
||||
-H 'Accept-Language: en-US,en;q=0.5' \
|
||||
-H 'DNT: 1' \
|
||||
-H 'Connection: keep-alive' \
|
||||
-H 'Upgrade-Insecure-Requests: 1' \
|
||||
-H 'Sec-Fetch-Dest: document' \
|
||||
-H 'Sec-Fetch-Mode: navigate' \
|
||||
-H 'Sec-Fetch-Site: cross-site' \
|
||||
-H 'Priority: u=0, i' \
|
||||
-H 'Pragma: no-cache' \
|
||||
-H 'Cache-Control: no-cache'
|
||||
}
|
||||
good_curl() {
|
||||
${pkgs.curl}/bin/curl "$@" \
|
||||
--compressed \
|
||||
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
|
||||
-H 'Accept-Language: en-US,en;q=0.5' \
|
||||
-H 'DNT: 1' \
|
||||
-H 'Connection: keep-alive' \
|
||||
-H 'Upgrade-Insecure-Requests: 1' \
|
||||
-H 'Sec-Fetch-Dest: document' \
|
||||
-H 'Sec-Fetch-Mode: navigate' \
|
||||
-H 'Sec-Fetch-Site: cross-site' \
|
||||
-H 'Priority: u=0, i' \
|
||||
-H 'Pragma: no-cache' \
|
||||
-H 'Cache-Control: no-cache'
|
||||
}
|
||||
|
||||
RANDOM_SECTION=$(
|
||||
good_curl -sSL http://www.perseus.tufts.edu/hopper/xmltoc?doc=Perseus%3Atext%3A1999.04.0007%3Asmythp%3D1 \
|
||||
| ${pkgs.gnugrep}/bin/grep -o 'ref="[^"]*"' \
|
||||
| ${pkgs.coreutils}/bin/shuf -n1 \
|
||||
| ${pkgs.gnused}/bin/sed 's/^ref="//;s/"$//'
|
||||
)
|
||||
RANDOM_SECTION=$(
|
||||
good_curl -sSL http://www.perseus.tufts.edu/hopper/xmltoc?doc=Perseus%3Atext%3A1999.04.0007%3Asmythp%3D1 \
|
||||
| ${pkgs.gnugrep}/bin/grep -o 'ref="[^"]*"' \
|
||||
| ${pkgs.coreutils}/bin/shuf -n1 \
|
||||
| ${pkgs.gnused}/bin/sed 's/^ref="//;s/"$//'
|
||||
)
|
||||
|
||||
url="http://www.perseus.tufts.edu/hopper/text?doc=$RANDOM_SECTION"
|
||||
good_curl -sSL "$url"\
|
||||
| ${pkgs.htmlq}/bin/htmlq '#text_main' \
|
||||
| ${pkgs.gnused}/bin/sed 's/<\/\?hr>//g' \
|
||||
| ${pkgs.pandoc}/bin/pandoc -f html -t plain --wrap=none
|
||||
url="http://www.perseus.tufts.edu/hopper/text?doc=$RANDOM_SECTION"
|
||||
good_curl -sSL "$url"\
|
||||
| ${pkgs.htmlq}/bin/htmlq '#text_main' \
|
||||
| ${pkgs.gnused}/bin/sed 's/<\/\?hr>//g' \
|
||||
| ${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";
|
||||
|
||||
@@ -2,138 +2,153 @@
|
||||
pkgs,
|
||||
config,
|
||||
...
|
||||
}: let
|
||||
}:
|
||||
let
|
||||
mastodonEndpoint = "https://social.krebsco.de";
|
||||
in {
|
||||
in
|
||||
{
|
||||
systemd.services.bot-tlg-wotd = {
|
||||
# TODO reenable
|
||||
# once https://github.com/NixOS/nixpkgs/pull/462893 is in stable NixOS
|
||||
enable = true;
|
||||
wants = ["network-online.target"];
|
||||
wants = [ "network-online.target" ];
|
||||
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 = {
|
||||
NPM_CONFIG_CACHE = "/tmp";
|
||||
CLTK_DATA = "/tmp";
|
||||
};
|
||||
script = ''
|
||||
set -efux
|
||||
set -efux
|
||||
|
||||
chat_id=@tlgwotd
|
||||
chat_id=@tlgwotd
|
||||
|
||||
export TELEGRAM_TOKEN="$(cat "$CREDENTIALS_DIRECTORY/telegram-token")"
|
||||
export MASTODON_TOKEN="$(cat "$CREDENTIALS_DIRECTORY/mastodon-token")"
|
||||
export TELEGRAM_TOKEN="$(cat "$CREDENTIALS_DIRECTORY/telegram-token")"
|
||||
export MASTODON_TOKEN="$(cat "$CREDENTIALS_DIRECTORY/mastodon-token")"
|
||||
|
||||
json_data=$(curl -sSL http://stephanus.tlg.uci.edu/Iris/Wotd | recode html..utf8)
|
||||
json_data=$(curl -sSL http://stephanus.tlg.uci.edu/Iris/Wotd | recode html..utf8)
|
||||
|
||||
word=$(echo "$json_data" | jq -r '.word')
|
||||
compact_word=$(echo "$word" | sed 's/,.*$//')
|
||||
definition=$(echo "$json_data" | jq -r '.definition | sub("<.*>"; "") | rtrimstr(" ")')
|
||||
first_occurrence=$(echo "$json_data" | jq -r '.firstOccurrence')
|
||||
total_occurrences=$(echo "$json_data" | jq -r '.totalOccurrences')
|
||||
telegram_caption="*$word* ‘$definition’
|
||||
word=$(echo "$json_data" | jq -r '.word')
|
||||
compact_word=$(echo "$word" | sed 's/,.*$//')
|
||||
definition=$(echo "$json_data" | jq -r '.definition | sub("<.*>"; "") | rtrimstr(" ")')
|
||||
first_occurrence=$(echo "$json_data" | jq -r '.firstOccurrence')
|
||||
total_occurrences=$(echo "$json_data" | jq -r '.totalOccurrences')
|
||||
telegram_caption="*$word* ‘$definition’
|
||||
|
||||
First occurrence (century): $first_occurrence
|
||||
Number of occurrences (in all Ancient Greek texts): $total_occurrences"
|
||||
mastodon_caption="$word ‘$definition’
|
||||
First occurrence (century): $first_occurrence
|
||||
Number of occurrences (in all Ancient Greek texts): $total_occurrences"
|
||||
mastodon_caption="$word ‘$definition’
|
||||
|
||||
First occurrence (century): $first_occurrence
|
||||
Number of occurrences (in all Ancient Greek texts): $total_occurrences"
|
||||
First occurrence (century): $first_occurrence
|
||||
Number of occurrences (in all Ancient Greek texts): $total_occurrences"
|
||||
|
||||
#ancientgreek #classics #wotd #wordoftheday
|
||||
#ancientgreek #classics #wotd #wordoftheday
|
||||
|
||||
transliteration=$(${pkgs.writers.writePython3 "translit.py" {
|
||||
libraries = py: [ py.cltk ];
|
||||
} ''
|
||||
import sys
|
||||
from cltk.phonology.grc.transcription import Transcriber
|
||||
transliteration=$(${
|
||||
pkgs.writers.writePython3 "translit.py"
|
||||
{
|
||||
libraries = py: [ py.cltk ];
|
||||
}
|
||||
''
|
||||
import sys
|
||||
from cltk.phonology.grc.transcription import Transcriber
|
||||
|
||||
probert = Transcriber("Attic", "Probert")
|
||||
text = " ".join(sys.argv[1:])
|
||||
ipa = probert.transcribe(text)
|
||||
probert = Transcriber("Attic", "Probert")
|
||||
text = " ".join(sys.argv[1:])
|
||||
ipa = probert.transcribe(text)
|
||||
|
||||
print(ipa)
|
||||
''} "$compact_word")
|
||||
print(ipa)
|
||||
''
|
||||
} "$compact_word")
|
||||
|
||||
|
||||
photo_path=/tmp/output.png
|
||||
photo_path=/tmp/output.png
|
||||
|
||||
hex_to_rgb() {
|
||||
hex="$1"
|
||||
r=$(printf "%d" "0x$(echo "$hex" | cut -c2-3)")
|
||||
g=$(printf "%d" "0x$(echo "$hex" | cut -c4-5)")
|
||||
b=$(printf "%d" "0x$(echo "$hex" | cut -c6-7)")
|
||||
echo "$r $g $b"
|
||||
}
|
||||
hex_to_rgb() {
|
||||
hex="$1"
|
||||
r=$(printf "%d" "0x$(echo "$hex" | cut -c2-3)")
|
||||
g=$(printf "%d" "0x$(echo "$hex" | cut -c4-5)")
|
||||
b=$(printf "%d" "0x$(echo "$hex" | cut -c6-7)")
|
||||
echo "$r $g $b"
|
||||
}
|
||||
|
||||
calculate_luminance() {
|
||||
r="$1"
|
||||
g="$2"
|
||||
b="$3"
|
||||
calculate_luminance() {
|
||||
r="$1"
|
||||
g="$2"
|
||||
b="$3"
|
||||
|
||||
r_l=$(echo "$r" | awk '{print ($1 / 255 <= 0.03928) ? $1 / 255 / 12.92 : (($1 / 255 + 0.055) / 1.055)^2.4}')
|
||||
g_l=$(echo "$g" | awk '{print ($1 / 255 <= 0.03928) ? $1 / 255 / 12.92 : (($1 / 255 + 0.055) / 1.055)^2.4}')
|
||||
b_l=$(echo "$b" | awk '{print ($1 / 255 <= 0.03928) ? $1 / 255 / 12.92 : (($1 / 255 + 0.055) / 1.055)^2.4}')
|
||||
r_l=$(echo "$r" | awk '{print ($1 / 255 <= 0.03928) ? $1 / 255 / 12.92 : (($1 / 255 + 0.055) / 1.055)^2.4}')
|
||||
g_l=$(echo "$g" | awk '{print ($1 / 255 <= 0.03928) ? $1 / 255 / 12.92 : (($1 / 255 + 0.055) / 1.055)^2.4}')
|
||||
b_l=$(echo "$b" | awk '{print ($1 / 255 <= 0.03928) ? $1 / 255 / 12.92 : (($1 / 255 + 0.055) / 1.055)^2.4}')
|
||||
|
||||
echo "$r_l $g_l $b_l" | awk '{print 0.2126*$1 + 0.7152*$2 + 0.0722*$3}'
|
||||
}
|
||||
echo "$r_l $g_l $b_l" | awk '{print 0.2126*$1 + 0.7152*$2 + 0.0722*$3}'
|
||||
}
|
||||
|
||||
|
||||
hex_color="#$(echo "$compact_word" | md5sum | cut -c 1-6)"
|
||||
if echo "$hex_color" | grep -qE '^#[0-9A-Fa-f]{6}$'; then
|
||||
set -- $(hex_to_rgb "$hex_color")
|
||||
r="$1"
|
||||
g="$2"
|
||||
b="$3"
|
||||
fi
|
||||
hex_color="#$(echo "$compact_word" | md5sum | cut -c 1-6)"
|
||||
if echo "$hex_color" | grep -qE '^#[0-9A-Fa-f]{6}$'; then
|
||||
set -- $(hex_to_rgb "$hex_color")
|
||||
r="$1"
|
||||
g="$2"
|
||||
b="$3"
|
||||
fi
|
||||
|
||||
luminance=$(calculate_luminance "$r" "$g" "$b")
|
||||
luminance=$(calculate_luminance "$r" "$g" "$b")
|
||||
|
||||
threshold="0.1"
|
||||
echo "$r $g $b"
|
||||
if [ "$(echo "$luminance" | awk -v threshold="$threshold" '{print ($1 > threshold)}')" -eq 1 ]; then
|
||||
color1="black"
|
||||
color2="#333"
|
||||
else
|
||||
color1="white"
|
||||
color2=lightgrey
|
||||
fi
|
||||
threshold="0.1"
|
||||
echo "$r $g $b"
|
||||
if [ "$(echo "$luminance" | awk -v threshold="$threshold" '{print ($1 > threshold)}')" -eq 1 ]; then
|
||||
color1="black"
|
||||
color2="#333"
|
||||
else
|
||||
color1="white"
|
||||
color2=lightgrey
|
||||
fi
|
||||
|
||||
magick -size 1400x846 \
|
||||
xc:"$hex_color" \
|
||||
-font "${pkgs.gentium}/share/fonts/truetype/GentiumBookPlus-Bold.ttf" \
|
||||
-fill "$color1" \
|
||||
-pointsize 150 -gravity west \
|
||||
-annotate +100-160 "$compact_word" \
|
||||
-font "${pkgs.gentium}/share/fonts/truetype/GentiumBookPlus-Regular.ttf" \
|
||||
-fill "$color2" \
|
||||
-pointsize 60 -gravity west \
|
||||
-annotate +100+00 "$transliteration" \
|
||||
-fill "$color1" \
|
||||
-annotate +100+120 "‘$definition’" \
|
||||
-fill "$color2" \
|
||||
-pointsize 40 -gravity southwest \
|
||||
-annotate +100+60 "attested $total_occurrences times" \
|
||||
-pointsize 40 -gravity southeast \
|
||||
-annotate +100+60 "$(date -I)" \
|
||||
"$photo_path"
|
||||
magick -size 1400x846 \
|
||||
xc:"$hex_color" \
|
||||
-font "${pkgs.gentium}/share/fonts/truetype/GentiumBookPlus-Bold.ttf" \
|
||||
-fill "$color1" \
|
||||
-pointsize 150 -gravity west \
|
||||
-annotate +100-160 "$compact_word" \
|
||||
-font "${pkgs.gentium}/share/fonts/truetype/GentiumBookPlus-Regular.ttf" \
|
||||
-fill "$color2" \
|
||||
-pointsize 60 -gravity west \
|
||||
-annotate +100+00 "$transliteration" \
|
||||
-fill "$color1" \
|
||||
-annotate +100+120 "‘$definition’" \
|
||||
-fill "$color2" \
|
||||
-pointsize 40 -gravity southwest \
|
||||
-annotate +100+60 "attested $total_occurrences times" \
|
||||
-pointsize 40 -gravity southeast \
|
||||
-annotate +100+60 "$(date -I)" \
|
||||
"$photo_path"
|
||||
|
||||
curl -X POST "https://api.telegram.org/bot$TELEGRAM_TOKEN/sendPhoto" \
|
||||
-F "chat_id=\"$chat_id\"" \
|
||||
-F "photo=@$photo_path" \
|
||||
-F parse_mode=Markdown \
|
||||
-F caption="$telegram_caption"
|
||||
curl -X POST "https://api.telegram.org/bot$TELEGRAM_TOKEN/sendPhoto" \
|
||||
-F "chat_id=\"$chat_id\"" \
|
||||
-F "photo=@$photo_path" \
|
||||
-F parse_mode=Markdown \
|
||||
-F caption="$telegram_caption"
|
||||
|
||||
mastodon_upload_response=$(curl -X POST "${mastodonEndpoint}/api/v2/media" \
|
||||
-H "Authorization: Bearer $MASTODON_TOKEN" \
|
||||
-F "file=@$photo_path" \
|
||||
-F "description=$word ‘$definition’")
|
||||
mastodon_image_id=$(echo $mastodon_upload_response | jq -r .id)
|
||||
curl -X POST "${mastodonEndpoint}/api/v1/statuses" \
|
||||
-H "Authorization: Bearer $MASTODON_TOKEN" \
|
||||
-d "status=$mastodon_caption" \
|
||||
-d "visibility=public" \
|
||||
-d "media_ids[]=$mastodon_image_id"
|
||||
mastodon_upload_response=$(curl -X POST "${mastodonEndpoint}/api/v2/media" \
|
||||
-H "Authorization: Bearer $MASTODON_TOKEN" \
|
||||
-F "file=@$photo_path" \
|
||||
-F "description=$word ‘$definition’")
|
||||
mastodon_image_id=$(echo $mastodon_upload_response | jq -r .id)
|
||||
curl -X POST "${mastodonEndpoint}/api/v1/statuses" \
|
||||
-H "Authorization: Bearer $MASTODON_TOKEN" \
|
||||
-d "status=$mastodon_caption" \
|
||||
-d "visibility=public" \
|
||||
-d "media_ids[]=$mastodon_image_id"
|
||||
'';
|
||||
serviceConfig = {
|
||||
Type = "oneshot";
|
||||
|
||||
@@ -3,7 +3,8 @@
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
}:
|
||||
let
|
||||
toSymbols = pkgs.writers.writeDash "to-symbols" ''
|
||||
${pkgs.gnused}/bin/sed '
|
||||
s/\bTri\b/△/;
|
||||
@@ -40,7 +41,8 @@
|
||||
s/^\s*//
|
||||
'
|
||||
'';
|
||||
in {
|
||||
in
|
||||
{
|
||||
niveum.bots.transits = {
|
||||
enable = true;
|
||||
time = "*:0/1";
|
||||
@@ -51,19 +53,21 @@ in {
|
||||
telegram = {
|
||||
enable = true;
|
||||
tokenFile = config.age.secrets.telegram-token-kmein.path;
|
||||
chatIds = ["-1001796440545"];
|
||||
chatIds = [ "-1001796440545" ];
|
||||
};
|
||||
command = toString (pkgs.writers.writeDash "common-transits" ''
|
||||
set -efu
|
||||
command = toString (
|
||||
pkgs.writers.writeDash "common-transits" ''
|
||||
set -efu
|
||||
|
||||
now=$(${pkgs.coreutils}/bin/date +%_H:%M | ${pkgs.gnused}/bin/sed 's/^\s*//')
|
||||
date=$(${pkgs.coreutils}/bin/date +'%m %d %Y')
|
||||
(
|
||||
cd ${pkgs.astrolog}/bin
|
||||
# ./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
|
||||
) | ${toSymbols} | ${pkgs.coreutils}/bin/sort -n | ${pkgs.gnugrep}/bin/grep "^$now" || :
|
||||
'');
|
||||
now=$(${pkgs.coreutils}/bin/date +%_H:%M | ${pkgs.gnused}/bin/sed 's/^\s*//')
|
||||
date=$(${pkgs.coreutils}/bin/date +'%m %d %Y')
|
||||
(
|
||||
cd ${pkgs.astrolog}/bin
|
||||
# ./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
|
||||
) | ${toSymbols} | ${pkgs.coreutils}/bin/sort -n | ${pkgs.gnugrep}/bin/grep "^$now" || :
|
||||
''
|
||||
);
|
||||
};
|
||||
|
||||
age.secrets = {
|
||||
|
||||
@@ -2,7 +2,8 @@
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
}:
|
||||
{
|
||||
environment.systemPackages = [
|
||||
pkgs.cro
|
||||
pkgs.tor-browser
|
||||
@@ -13,76 +14,78 @@
|
||||
home-manager.users.me = {
|
||||
programs.firefox = {
|
||||
enable = true;
|
||||
profiles = let
|
||||
defaultSettings = {
|
||||
"beacon.enabled" = false;
|
||||
"browser.bookmarks.showMobileBookmarks" = true;
|
||||
"browser.newtab.preload" = false;
|
||||
"browser.search.isUS" = false;
|
||||
"browser.search.region" = "DE";
|
||||
"browser.send_pings" = false;
|
||||
"browser.shell.checkDefaultBrowser" = false;
|
||||
"browser.startup.homepage" = "chrome://browser/content/blanktab.html";
|
||||
"browser.uidensity" = 1;
|
||||
"browser.urlbar.placeholderName" = "Search";
|
||||
"datareporting.healthreport.service.enabled" = false;
|
||||
"datareporting.healthreport.uploadEnabled" = false;
|
||||
"datareporting.policy.dataSubmissionEnabled" = false;
|
||||
"datareporting.sessions.current.clean" = true;
|
||||
"distribution.searchplugins.defaultLocale" = "de-DE";
|
||||
"general.smoothScroll" = true;
|
||||
"identity.fxaccounts.account.device.name" = config.networking.hostName;
|
||||
"network.cookie.cookieBehavior" = 1;
|
||||
"privacy.donottrackheader.enabled" = true;
|
||||
"privacy.trackingprotection.enabled" = true;
|
||||
"privacy.trackingprotection.pbmode.enabled" = true;
|
||||
"privacy.trackingprotection.socialtracking.enabled" = true;
|
||||
"services.sync.declinedEngines" = "passwords";
|
||||
"services.sync.engine.passwords" = false;
|
||||
"signon.autofillForms" = false;
|
||||
"signon.rememberSignons" = false;
|
||||
"toolkit.legacyUserProfileCustomizations.stylesheets" = true;
|
||||
"toolkit.telemetry.archive.enabled" = false;
|
||||
"toolkit.telemetry.bhrPing.enabled" = false;
|
||||
"toolkit.telemetry.cachedClientID" = "";
|
||||
"toolkit.telemetry.enabled" = false;
|
||||
"toolkit.telemetry.firstShutdownPing.enabled" = false;
|
||||
"toolkit.telemetry.hybridContent.enabled" = false;
|
||||
"toolkit.telemetry.newProfilePing.enabled" = false;
|
||||
"toolkit.telemetry.prompted" = 2;
|
||||
"toolkit.telemetry.rejected" = true;
|
||||
"toolkit.telemetry.server" = "";
|
||||
"toolkit.telemetry.shutdownPingSender.enabled" = false;
|
||||
"toolkit.telemetry.unified" = false;
|
||||
"toolkit.telemetry.unifiedIsOptIn" = false;
|
||||
"toolkit.telemetry.updatePing.enabled" = false;
|
||||
"ui.prefersReducedMotion" = 1;
|
||||
profiles =
|
||||
let
|
||||
defaultSettings = {
|
||||
"beacon.enabled" = false;
|
||||
"browser.bookmarks.showMobileBookmarks" = true;
|
||||
"browser.newtab.preload" = false;
|
||||
"browser.search.isUS" = false;
|
||||
"browser.search.region" = "DE";
|
||||
"browser.send_pings" = false;
|
||||
"browser.shell.checkDefaultBrowser" = false;
|
||||
"browser.startup.homepage" = "chrome://browser/content/blanktab.html";
|
||||
"browser.uidensity" = 1;
|
||||
"browser.urlbar.placeholderName" = "Search";
|
||||
"datareporting.healthreport.service.enabled" = false;
|
||||
"datareporting.healthreport.uploadEnabled" = false;
|
||||
"datareporting.policy.dataSubmissionEnabled" = false;
|
||||
"datareporting.sessions.current.clean" = true;
|
||||
"distribution.searchplugins.defaultLocale" = "de-DE";
|
||||
"general.smoothScroll" = true;
|
||||
"identity.fxaccounts.account.device.name" = config.networking.hostName;
|
||||
"network.cookie.cookieBehavior" = 1;
|
||||
"privacy.donottrackheader.enabled" = true;
|
||||
"privacy.trackingprotection.enabled" = true;
|
||||
"privacy.trackingprotection.pbmode.enabled" = true;
|
||||
"privacy.trackingprotection.socialtracking.enabled" = true;
|
||||
"services.sync.declinedEngines" = "passwords";
|
||||
"services.sync.engine.passwords" = false;
|
||||
"signon.autofillForms" = false;
|
||||
"signon.rememberSignons" = false;
|
||||
"toolkit.legacyUserProfileCustomizations.stylesheets" = true;
|
||||
"toolkit.telemetry.archive.enabled" = false;
|
||||
"toolkit.telemetry.bhrPing.enabled" = false;
|
||||
"toolkit.telemetry.cachedClientID" = "";
|
||||
"toolkit.telemetry.enabled" = false;
|
||||
"toolkit.telemetry.firstShutdownPing.enabled" = false;
|
||||
"toolkit.telemetry.hybridContent.enabled" = false;
|
||||
"toolkit.telemetry.newProfilePing.enabled" = false;
|
||||
"toolkit.telemetry.prompted" = 2;
|
||||
"toolkit.telemetry.rejected" = true;
|
||||
"toolkit.telemetry.server" = "";
|
||||
"toolkit.telemetry.shutdownPingSender.enabled" = false;
|
||||
"toolkit.telemetry.unified" = false;
|
||||
"toolkit.telemetry.unifiedIsOptIn" = false;
|
||||
"toolkit.telemetry.updatePing.enabled" = false;
|
||||
"ui.prefersReducedMotion" = 1;
|
||||
};
|
||||
in
|
||||
{
|
||||
default = {
|
||||
id = 0;
|
||||
isDefault = true;
|
||||
settings = defaultSettings;
|
||||
# extensions = with pkgs.nur.repos.rycee.firefox-addons; [
|
||||
# ublock-origin
|
||||
# darkreader
|
||||
# sponsorblock
|
||||
# consent-o-matic
|
||||
# i-dont-care-about-cookies
|
||||
# # auto-tab-discard TODO what is this
|
||||
# ];
|
||||
userChrome = ''
|
||||
#TabsToolbar {
|
||||
visibility: collapse !important;
|
||||
}
|
||||
'';
|
||||
};
|
||||
};
|
||||
in {
|
||||
default = {
|
||||
id = 0;
|
||||
isDefault = true;
|
||||
settings = defaultSettings;
|
||||
# extensions = with pkgs.nur.repos.rycee.firefox-addons; [
|
||||
# ublock-origin
|
||||
# darkreader
|
||||
# sponsorblock
|
||||
# consent-o-matic
|
||||
# i-dont-care-about-cookies
|
||||
# # auto-tab-discard TODO what is this
|
||||
# ];
|
||||
userChrome = ''
|
||||
#TabsToolbar {
|
||||
visibility: collapse !important;
|
||||
}
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
home-manager.users.me = {
|
||||
stylix.targets.firefox.profileNames = ["default"];
|
||||
stylix.targets.firefox.profileNames = [ "default" ];
|
||||
};
|
||||
|
||||
environment.variables.BROWSER = "firefox";
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
}:
|
||||
{
|
||||
services.clipmenu.enable = true;
|
||||
}
|
||||
|
||||
@@ -3,7 +3,8 @@
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
}:
|
||||
{
|
||||
systemd.user.services.systemd-tmpfiles-clean = {
|
||||
enable = true;
|
||||
wantedBy = [ "default.target" ];
|
||||
@@ -14,27 +15,40 @@
|
||||
};
|
||||
};
|
||||
|
||||
systemd.user.tmpfiles.users.me.rules = map pkgs.lib.niveum.tmpfilesConfig [
|
||||
{
|
||||
type = "d";
|
||||
mode = "0755";
|
||||
age = "7d";
|
||||
path = "${config.users.users.me.home}/sync/Downloads";
|
||||
}
|
||||
{
|
||||
type = "d";
|
||||
mode = "0755";
|
||||
age = "7d";
|
||||
path = "${config.users.users.me.home}/cloud/nextcloud/tmp";
|
||||
}
|
||||
] ++ map (path: pkgs.lib.niveum.tmpfilesConfig {
|
||||
type = "L+";
|
||||
user = config.users.users.me.name;
|
||||
group = config.users.users.me.group;
|
||||
mode = "0755";
|
||||
argument = "${config.users.users.me.home}/sync/${path}";
|
||||
path = "${config.users.users.me.home}/${path}";
|
||||
}) [".ssh" ".gnupg" ".pki" ".local/share/aerc"];
|
||||
systemd.user.tmpfiles.users.me.rules =
|
||||
map pkgs.lib.niveum.tmpfilesConfig [
|
||||
{
|
||||
type = "d";
|
||||
mode = "0755";
|
||||
age = "7d";
|
||||
path = "${config.users.users.me.home}/sync/Downloads";
|
||||
}
|
||||
{
|
||||
type = "d";
|
||||
mode = "0755";
|
||||
age = "7d";
|
||||
path = "${config.users.users.me.home}/cloud/nextcloud/tmp";
|
||||
}
|
||||
]
|
||||
++
|
||||
map
|
||||
(
|
||||
path:
|
||||
pkgs.lib.niveum.tmpfilesConfig {
|
||||
type = "L+";
|
||||
user = config.users.users.me.name;
|
||||
group = config.users.users.me.group;
|
||||
mode = "0755";
|
||||
argument = "${config.users.users.me.home}/sync/${path}";
|
||||
path = "${config.users.users.me.home}/${path}";
|
||||
}
|
||||
)
|
||||
[
|
||||
".ssh"
|
||||
".gnupg"
|
||||
".pki"
|
||||
".local/share/aerc"
|
||||
];
|
||||
|
||||
services.gnome.gnome-keyring.enable = true;
|
||||
security.pam.services.lightdm.enableGnomeKeyring = true;
|
||||
@@ -48,20 +62,22 @@
|
||||
|
||||
systemd.user.services.nextcloud-syncer = {
|
||||
enable = false;
|
||||
wants = ["network-online.target"];
|
||||
wantedBy = ["default.target"];
|
||||
wants = [ "network-online.target" ];
|
||||
wantedBy = [ "default.target" ];
|
||||
startAt = "*:00/10";
|
||||
script = let
|
||||
kieran = {
|
||||
user = "kieran";
|
||||
passwordFile = config.age.secrets.nextcloud-password-kieran.path;
|
||||
endpoint = "https://cloud.kmein.de";
|
||||
target = "${config.users.users.me.home}/notes";
|
||||
};
|
||||
in ''
|
||||
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}
|
||||
'';
|
||||
script =
|
||||
let
|
||||
kieran = {
|
||||
user = "kieran";
|
||||
passwordFile = config.age.secrets.nextcloud-password-kieran.path;
|
||||
endpoint = "https://cloud.kmein.de";
|
||||
target = "${config.users.users.me.home}/notes";
|
||||
};
|
||||
in
|
||||
''
|
||||
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}
|
||||
'';
|
||||
serviceConfig = {
|
||||
Type = "oneshot";
|
||||
Restart = "on-failure";
|
||||
@@ -77,13 +93,16 @@
|
||||
} | ${pkgs.fzf}/bin/fzf)"
|
||||
exec ${pkgs.zathura}/bin/zathura "$book"
|
||||
'')
|
||||
(let
|
||||
kieran = {
|
||||
user = "kieran.meinhardt@gmail.com";
|
||||
passwordFile = config.age.secrets.mega-password.path;
|
||||
};
|
||||
megatools = command: ''${pkgs.megatools}/bin/megatools ${command} --username ${lib.escapeShellArg kieran.user} --password "$(cat ${kieran.passwordFile})"'';
|
||||
in
|
||||
(
|
||||
let
|
||||
kieran = {
|
||||
user = "kieran.meinhardt@gmail.com";
|
||||
passwordFile = config.age.secrets.mega-password.path;
|
||||
};
|
||||
megatools =
|
||||
command:
|
||||
''${pkgs.megatools}/bin/megatools ${command} --username ${lib.escapeShellArg kieran.user} --password "$(cat ${kieran.passwordFile})"'';
|
||||
in
|
||||
pkgs.writers.writeDashBin "book-mega" ''
|
||||
set -efu
|
||||
selection="$(${megatools "ls"} | ${pkgs.fzf}/bin/fzf)"
|
||||
@@ -100,7 +119,8 @@
|
||||
${megatools "get"} "$selection"
|
||||
exec ${pkgs.zathura}/bin/zathura "$(basename "$selection")"
|
||||
)
|
||||
'')
|
||||
''
|
||||
)
|
||||
];
|
||||
|
||||
age.secrets.mega-password = {
|
||||
@@ -122,13 +142,22 @@
|
||||
devices = pkgs.lib.niveum.syncthingIds;
|
||||
folders = {
|
||||
"${config.users.users.me.home}/sync" = {
|
||||
devices = ["kabsa" "manakish" "fatteh"];
|
||||
devices = [
|
||||
"kabsa"
|
||||
"manakish"
|
||||
"fatteh"
|
||||
];
|
||||
label = "sync";
|
||||
versioning.type = "trashcan";
|
||||
versioning.params.cleanoutDays = 100;
|
||||
};
|
||||
"${config.users.users.me.home}/mobile" = {
|
||||
devices = ["kabsa" "manakish" "fatteh" "kibbeh"];
|
||||
devices = [
|
||||
"kabsa"
|
||||
"manakish"
|
||||
"fatteh"
|
||||
"kibbeh"
|
||||
];
|
||||
id = "mobile";
|
||||
label = "mobile";
|
||||
versioning.type = "trashcan";
|
||||
|
||||
@@ -137,10 +137,14 @@ in
|
||||
agent = {
|
||||
enable = true;
|
||||
pinentryPackage = pkgs.pinentry-qt;
|
||||
settings = let defaultCacheTtl = 2 * 60 * 60; in {
|
||||
default-cache-ttl = defaultCacheTtl;
|
||||
max-cache-ttl = 4 * defaultCacheTtl;
|
||||
};
|
||||
settings =
|
||||
let
|
||||
defaultCacheTtl = 2 * 60 * 60;
|
||||
in
|
||||
{
|
||||
default-cache-ttl = defaultCacheTtl;
|
||||
max-cache-ttl = 4 * defaultCacheTtl;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
@@ -253,16 +257,20 @@ in
|
||||
./mastodon-bot.nix
|
||||
{
|
||||
home-manager.users.me = {
|
||||
xdg.userDirs = let pictures = "${config.users.users.me.home}/cloud/nextcloud/Bilder"; in {
|
||||
enable = true;
|
||||
documents = "${config.users.users.me.home}/cloud/nextcloud/Documents";
|
||||
desktop = "/tmp";
|
||||
download = "${config.users.users.me.home}/sync/Downloads";
|
||||
music = "${config.users.users.me.home}/mobile/audio";
|
||||
publicShare = "${config.users.users.me.home}/cloud/nextcloud/tmp";
|
||||
videos = pictures;
|
||||
pictures = pictures;
|
||||
};
|
||||
xdg.userDirs =
|
||||
let
|
||||
pictures = "${config.users.users.me.home}/cloud/nextcloud/Bilder";
|
||||
in
|
||||
{
|
||||
enable = true;
|
||||
documents = "${config.users.users.me.home}/cloud/nextcloud/Documents";
|
||||
desktop = "/tmp";
|
||||
download = "${config.users.users.me.home}/sync/Downloads";
|
||||
music = "${config.users.users.me.home}/mobile/audio";
|
||||
publicShare = "${config.users.users.me.home}/cloud/nextcloud/tmp";
|
||||
videos = pictures;
|
||||
pictures = pictures;
|
||||
};
|
||||
};
|
||||
}
|
||||
];
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
{pkgs, ...}: let
|
||||
{ pkgs, ... }:
|
||||
let
|
||||
nixify = pkgs.writers.writeDashBin "nixify" ''
|
||||
set -efuC
|
||||
|
||||
@@ -16,8 +17,12 @@
|
||||
''${EDITOR:-vim} shell.nix
|
||||
fi
|
||||
'';
|
||||
in {
|
||||
environment.systemPackages = [pkgs.direnv nixify];
|
||||
in
|
||||
{
|
||||
environment.systemPackages = [
|
||||
pkgs.direnv
|
||||
nixify
|
||||
];
|
||||
|
||||
home-manager.users.me.programs.direnv = {
|
||||
enable = true;
|
||||
|
||||
@@ -2,7 +2,8 @@
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
}:
|
||||
{
|
||||
virtualisation.docker = {
|
||||
enable = true;
|
||||
# for ICE wifi, ref https://gist.github.com/sunsided/7840e89ff4e11b64a2d7503fafa0290c
|
||||
@@ -11,6 +12,9 @@
|
||||
"--fixed-cidr=172.39.1.0/25"
|
||||
];
|
||||
};
|
||||
users.users.me.extraGroups = ["docker"];
|
||||
environment.systemPackages = [pkgs.docker pkgs.docker-compose];
|
||||
users.users.me.extraGroups = [ "docker" ];
|
||||
environment.systemPackages = [
|
||||
pkgs.docker
|
||||
pkgs.docker-compose
|
||||
];
|
||||
}
|
||||
|
||||
@@ -2,9 +2,11 @@
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
}:
|
||||
let
|
||||
sgr = code: string: ''\u001b[${code}m${string}\u001b[0m'';
|
||||
in {
|
||||
in
|
||||
{
|
||||
environment.systemPackages = [
|
||||
(pkgs.writers.writeDashBin "notifications" ''
|
||||
${pkgs.dunst}/bin/dunstctl history \
|
||||
|
||||
@@ -2,7 +2,8 @@
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
}:
|
||||
{
|
||||
home-manager.users.me = {
|
||||
services.flameshot = {
|
||||
enable = true;
|
||||
|
||||
@@ -1,20 +1,25 @@
|
||||
{
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
zip-font = name: arguments: let
|
||||
directory = pkgs.fetchzip arguments;
|
||||
in
|
||||
pkgs.runCommand name {} ''
|
||||
}:
|
||||
let
|
||||
zip-font =
|
||||
name: arguments:
|
||||
let
|
||||
directory = pkgs.fetchzip arguments;
|
||||
in
|
||||
pkgs.runCommand name { } ''
|
||||
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 '*.otf' -exec install '{}' $out/share/fonts/opentype \;
|
||||
${pkgs.findutils}/bin/find ${directory} -name '*.woff' -exec install '{}' $out/share/fonts/woff \;
|
||||
'';
|
||||
simple-ttf = name: arguments: let
|
||||
file = pkgs.fetchurl arguments;
|
||||
in
|
||||
pkgs.runCommand name {} ''
|
||||
simple-ttf =
|
||||
name: arguments:
|
||||
let
|
||||
file = pkgs.fetchurl arguments;
|
||||
in
|
||||
pkgs.runCommand name { } ''
|
||||
mkdir -p $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";
|
||||
sha256 = "1n294vhcx90270pnsw1dbk6izd61fjvbnjrh4hcf98ff3s540x0c";
|
||||
};
|
||||
in {
|
||||
in
|
||||
{
|
||||
fonts = {
|
||||
enableDefaultPackages = true;
|
||||
fontDir.enable = true;
|
||||
@@ -117,12 +123,28 @@ in {
|
||||
vollkorn
|
||||
zilla-slab
|
||||
]; # google-fonts league-of-moveable-type
|
||||
fontconfig.defaultFonts = let emoji = ["Noto Color Emoji"]; 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;
|
||||
};
|
||||
fontconfig.defaultFonts =
|
||||
let
|
||||
emoji = [ "Noto Color Emoji" ];
|
||||
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;
|
||||
};
|
||||
# xelatex fails with woff files
|
||||
# ref https://tex.stackexchange.com/questions/392144/xelatex-and-fontspec-crash-trying-to-find-woff-file-for-some-fonts-but-not-other
|
||||
fontconfig.localConf = ''
|
||||
|
||||
@@ -1,24 +1,27 @@
|
||||
{pkgs, ...}: {
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
programs.fzf = {
|
||||
fuzzyCompletion = true;
|
||||
keybindings = true;
|
||||
};
|
||||
|
||||
home-manager.users.me = {
|
||||
programs.fzf = let
|
||||
defaultCommand = "${pkgs.fd}/bin/fd --type f --strip-cwd-prefix --follow --no-ignore-vcs --exclude .git";
|
||||
in {
|
||||
enable = true;
|
||||
defaultCommand = defaultCommand;
|
||||
defaultOptions = ["--height=40%"];
|
||||
changeDirWidgetCommand = "${pkgs.fd}/bin/fd --type d";
|
||||
changeDirWidgetOptions = [
|
||||
"--preview='${pkgs.tree}/bin/tree -L 1 {}'"
|
||||
"--bind=space:toggle-preview"
|
||||
"--preview-window=hidden"
|
||||
];
|
||||
fileWidgetCommand = defaultCommand;
|
||||
fileWidgetOptions = ["--preview='head -$LINES {}'"];
|
||||
};
|
||||
programs.fzf =
|
||||
let
|
||||
defaultCommand = "${pkgs.fd}/bin/fd --type f --strip-cwd-prefix --follow --no-ignore-vcs --exclude .git";
|
||||
in
|
||||
{
|
||||
enable = true;
|
||||
defaultCommand = defaultCommand;
|
||||
defaultOptions = [ "--height=40%" ];
|
||||
changeDirWidgetCommand = "${pkgs.fd}/bin/fd --type d";
|
||||
changeDirWidgetOptions = [
|
||||
"--preview='${pkgs.tree}/bin/tree -L 1 {}'"
|
||||
"--bind=space:toggle-preview"
|
||||
"--preview-window=hidden"
|
||||
];
|
||||
fileWidgetCommand = defaultCommand;
|
||||
fileWidgetOptions = [ "--preview='head -$LINES {}'" ];
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,26 +1,30 @@
|
||||
{
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
}:
|
||||
let
|
||||
ledgerDirectory = "/home/kfm/sync/src/ledger";
|
||||
hora = pkgs.callPackage ../packages/hora.nix { timeLedger = "${ledgerDirectory}/time.timeclock"; };
|
||||
in {
|
||||
environment.systemPackages = let
|
||||
git = "${pkgs.git}/bin/git -C ${ledgerDirectory}";
|
||||
in [
|
||||
hora
|
||||
pkgs.hledger
|
||||
(pkgs.writers.writeDashBin "hledger-git" ''
|
||||
if [ "$1" = entry ]; then
|
||||
${pkgs.hledger}/bin/hledger balance -V > "${ledgerDirectory}/balance.txt"
|
||||
${git} add balance.txt
|
||||
${git} commit --all --message="$(date -Im)"
|
||||
else
|
||||
${git} $*
|
||||
fi
|
||||
'')
|
||||
(pkgs.writers.writeDashBin "hledger-edit" ''
|
||||
$EDITOR ${ledgerDirectory}/current.journal
|
||||
'')
|
||||
];
|
||||
in
|
||||
{
|
||||
environment.systemPackages =
|
||||
let
|
||||
git = "${pkgs.git}/bin/git -C ${ledgerDirectory}";
|
||||
in
|
||||
[
|
||||
hora
|
||||
pkgs.hledger
|
||||
(pkgs.writers.writeDashBin "hledger-git" ''
|
||||
if [ "$1" = entry ]; then
|
||||
${pkgs.hledger}/bin/hledger balance -V > "${ledgerDirectory}/balance.txt"
|
||||
${git} add balance.txt
|
||||
${git} commit --all --message="$(date -Im)"
|
||||
else
|
||||
${git} $*
|
||||
fi
|
||||
'')
|
||||
(pkgs.writers.writeDashBin "hledger-edit" ''
|
||||
$EDITOR ${ledgerDirectory}/current.journal
|
||||
'')
|
||||
];
|
||||
}
|
||||
|
||||
@@ -22,8 +22,18 @@
|
||||
sort_key = "PERCENT_CPU";
|
||||
tree_view = false;
|
||||
update_process_names = false;
|
||||
right_meters = ["Uptime" "Tasks" "LoadAverage" "Battery"];
|
||||
left_meters = ["LeftCPUs2" "RightCPUs2" "Memory" "Swap"];
|
||||
right_meters = [
|
||||
"Uptime"
|
||||
"Tasks"
|
||||
"LoadAverage"
|
||||
"Battery"
|
||||
];
|
||||
left_meters = [
|
||||
"LeftCPUs2"
|
||||
"RightCPUs2"
|
||||
"Memory"
|
||||
"Swap"
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
358
configs/i3.nix
358
configs/i3.nix
@@ -3,7 +3,8 @@
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
}:
|
||||
let
|
||||
klem = pkgs.klem.override {
|
||||
options.dmenu = "${pkgs.dmenu}/bin/dmenu -i -p klem";
|
||||
options.scripts = {
|
||||
@@ -51,7 +52,8 @@
|
||||
'';
|
||||
};
|
||||
};
|
||||
in {
|
||||
in
|
||||
{
|
||||
age.secrets = {
|
||||
github-token-i3status-rust = {
|
||||
file = ../secrets/github-token-i3status-rust.age;
|
||||
@@ -105,179 +107,215 @@ in {
|
||||
'';
|
||||
};
|
||||
|
||||
home-manager.users.me = let
|
||||
modifier = "Mod4";
|
||||
infoWorkspace = "ℹ";
|
||||
messageWorkspace = "✉";
|
||||
modes.resize = {
|
||||
"Escape" = ''mode "default"'';
|
||||
"Return" = ''mode "default"'';
|
||||
"h" = "resize shrink width 10 px or 5 ppt";
|
||||
"j" = "resize grow height 10 px or 5 ppt";
|
||||
"k" = "resize shrink height 10 px or 5 ppt";
|
||||
"l" = "resize grow width 10 px or 5 ppt";
|
||||
};
|
||||
gaps.inner = 4;
|
||||
floating = {
|
||||
titlebar = false;
|
||||
border = 1;
|
||||
};
|
||||
bars = let position = "bottom"; in [
|
||||
(lib.recursiveUpdate config.home-manager.users.me.stylix.targets.i3.exportedBarConfig
|
||||
home-manager.users.me =
|
||||
let
|
||||
modifier = "Mod4";
|
||||
infoWorkspace = "ℹ";
|
||||
messageWorkspace = "✉";
|
||||
modes.resize = {
|
||||
"Escape" = ''mode "default"'';
|
||||
"Return" = ''mode "default"'';
|
||||
"h" = "resize shrink width 10 px or 5 ppt";
|
||||
"j" = "resize grow height 10 px or 5 ppt";
|
||||
"k" = "resize shrink height 10 px or 5 ppt";
|
||||
"l" = "resize grow width 10 px or 5 ppt";
|
||||
};
|
||||
gaps.inner = 4;
|
||||
floating = {
|
||||
titlebar = false;
|
||||
border = 1;
|
||||
};
|
||||
bars =
|
||||
let
|
||||
position = "bottom";
|
||||
in
|
||||
[
|
||||
(lib.recursiveUpdate config.home-manager.users.me.stylix.targets.i3.exportedBarConfig {
|
||||
workspaceButtons = true;
|
||||
mode = "hide"; # "dock";
|
||||
inherit position;
|
||||
statusCommand = toString (
|
||||
pkgs.writers.writeDash "i3status-rust" ''
|
||||
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})"
|
||||
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 = {
|
||||
names = [
|
||||
"${config.stylix.fonts.sansSerif.name}"
|
||||
"FontAwesome 6 Free"
|
||||
];
|
||||
size = config.stylix.fonts.sizes.desktop * 0.8;
|
||||
};
|
||||
})
|
||||
];
|
||||
window = {
|
||||
titlebar = false;
|
||||
border = 2;
|
||||
hideEdgeBorders = "smart";
|
||||
commands = [
|
||||
{
|
||||
criteria = {
|
||||
class = "floating";
|
||||
};
|
||||
command = "floating enable";
|
||||
}
|
||||
{
|
||||
criteria = {
|
||||
class = "fzfmenu";
|
||||
};
|
||||
command = "floating enable";
|
||||
}
|
||||
{
|
||||
criteria = {
|
||||
class = ".*";
|
||||
};
|
||||
command = "border pixel 2";
|
||||
}
|
||||
{
|
||||
criteria = {
|
||||
class = "mpv";
|
||||
};
|
||||
command = lib.strings.concatStringsSep ", " [
|
||||
"floating enable"
|
||||
"sticky enable"
|
||||
"fullscreen disable"
|
||||
"resize set 640 480"
|
||||
"move position mouse"
|
||||
];
|
||||
}
|
||||
];
|
||||
};
|
||||
colors =
|
||||
let
|
||||
background = config.lib.stylix.colors.withHashtag.base00;
|
||||
in
|
||||
{
|
||||
workspaceButtons = true;
|
||||
mode = "hide"; # "dock";
|
||||
inherit position;
|
||||
statusCommand = toString (pkgs.writers.writeDash "i3status-rust" ''
|
||||
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})"
|
||||
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 = {
|
||||
names = ["${config.stylix.fonts.sansSerif.name}" "FontAwesome 6 Free"];
|
||||
size = config.stylix.fonts.sizes.desktop * 0.8;
|
||||
unfocused = {
|
||||
border = lib.mkForce background;
|
||||
childBorder = lib.mkForce background;
|
||||
};
|
||||
})
|
||||
];
|
||||
window = {
|
||||
titlebar = false;
|
||||
border = 2;
|
||||
hideEdgeBorders = "smart";
|
||||
commands = [
|
||||
{
|
||||
criteria = {class = "floating";};
|
||||
command = "floating enable";
|
||||
}
|
||||
{
|
||||
criteria = {class = "fzfmenu";};
|
||||
command = "floating enable";
|
||||
}
|
||||
{
|
||||
criteria = {class = ".*";};
|
||||
command = "border pixel 2";
|
||||
}
|
||||
{
|
||||
criteria = {class = "mpv";};
|
||||
command = lib.strings.concatStringsSep ", " [
|
||||
"floating enable"
|
||||
"sticky enable"
|
||||
"fullscreen disable"
|
||||
"resize set 640 480"
|
||||
"move position mouse"
|
||||
];
|
||||
}
|
||||
];
|
||||
};
|
||||
colors = let
|
||||
background = config.lib.stylix.colors.withHashtag.base00;
|
||||
in {
|
||||
unfocused = {
|
||||
border = lib.mkForce background;
|
||||
childBorder = lib.mkForce background;
|
||||
};
|
||||
};
|
||||
keybindings =
|
||||
lib.listToAttrs (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}+m" = "workspace ${messageWorkspace}";
|
||||
};
|
||||
keybindings =
|
||||
lib.listToAttrs (
|
||||
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}+m" = "workspace ${messageWorkspace}";
|
||||
|
||||
"${modifier}+Shift+h" = "move left 25 px";
|
||||
"${modifier}+Shift+j" = "move down 25 px";
|
||||
"${modifier}+Shift+k" = "move up 25 px";
|
||||
"${modifier}+Shift+l" = "move right 25 px";
|
||||
"${modifier}+h" = "focus left";
|
||||
"${modifier}+j" = "focus down";
|
||||
"${modifier}+k" = "focus up";
|
||||
"${modifier}+l" = "focus right";
|
||||
"${modifier}+Shift+h" = "move left 25 px";
|
||||
"${modifier}+Shift+j" = "move down 25 px";
|
||||
"${modifier}+Shift+k" = "move up 25 px";
|
||||
"${modifier}+Shift+l" = "move right 25 px";
|
||||
"${modifier}+h" = "focus left";
|
||||
"${modifier}+j" = "focus down";
|
||||
"${modifier}+k" = "focus up";
|
||||
"${modifier}+l" = "focus right";
|
||||
|
||||
# "${modifier}+Shift+b" = "move container to workspace prev";
|
||||
# "${modifier}+Shift+n" = "move container to workspace next";
|
||||
# "${modifier}+b" = "workspace prev";
|
||||
# "${modifier}+n" = "workspace next";
|
||||
# "${modifier}+Shift+b" = "move container to workspace prev";
|
||||
# "${modifier}+Shift+n" = "move container to workspace next";
|
||||
# "${modifier}+b" = "workspace prev";
|
||||
# "${modifier}+n" = "workspace next";
|
||||
|
||||
"${modifier}+Shift+c" = "reload";
|
||||
"${modifier}+Shift+q" = "kill";
|
||||
"${modifier}+Shift+r" = "restart";
|
||||
"${modifier}+Shift+c" = "reload";
|
||||
"${modifier}+Shift+q" = "kill";
|
||||
"${modifier}+Shift+r" = "restart";
|
||||
|
||||
"${modifier}+z" = "sticky toggle";
|
||||
"${modifier}+Shift+z" = "floating toggle";
|
||||
"${modifier}+z" = "sticky toggle";
|
||||
"${modifier}+Shift+z" = "floating toggle";
|
||||
|
||||
"${modifier}+Shift+s" = "move scratchpad";
|
||||
"${modifier}+s" = ''[class="^(?i)(?!obsidian).*"] scratchpad show'';
|
||||
"${modifier}+o" = ''[class="obsidian"] scratchpad show'';
|
||||
"${modifier}+Shift+s" = "move scratchpad";
|
||||
"${modifier}+s" = ''[class="^(?i)(?!obsidian).*"] scratchpad show'';
|
||||
"${modifier}+o" = ''[class="obsidian"] scratchpad show'';
|
||||
|
||||
"${modifier}+c" = "split h";
|
||||
"${modifier}+e" = "layout toggle split";
|
||||
"${modifier}+f" = "fullscreen toggle";
|
||||
"${modifier}+r" = "mode resize";
|
||||
"${modifier}+v" = "split v";
|
||||
"${modifier}+w" = "layout tabbed";
|
||||
"${modifier}+q" = "exec ${config.services.clipmenu.package}/bin/clipmenu";
|
||||
"${modifier}+c" = "split h";
|
||||
"${modifier}+e" = "layout toggle split";
|
||||
"${modifier}+f" = "fullscreen toggle";
|
||||
"${modifier}+r" = "mode resize";
|
||||
"${modifier}+v" = "split v";
|
||||
"${modifier}+w" = "layout tabbed";
|
||||
"${modifier}+q" = "exec ${config.services.clipmenu.package}/bin/clipmenu";
|
||||
|
||||
"${modifier}+Return" = "exec ${lib.getExe pkgs.niveum-terminal}";
|
||||
"${modifier}+t" = "exec ${lib.getExe pkgs.niveum-filemanager}";
|
||||
"${modifier}+y" = "exec ${lib.getExe pkgs.niveum-browser}";
|
||||
"${modifier}+Return" = "exec ${lib.getExe pkgs.niveum-terminal}";
|
||||
"${modifier}+t" = "exec ${lib.getExe pkgs.niveum-filemanager}";
|
||||
"${modifier}+y" = "exec ${lib.getExe pkgs.niveum-browser}";
|
||||
|
||||
"${modifier}+d" = "exec ${pkgs.writers.writeDash "run" ''exec rofi -modi run,ssh,window -show run''}";
|
||||
"${modifier}+Shift+d" = "exec ${pkgs.notemenu}/bin/notemenu";
|
||||
"${modifier}+p" = "exec rofi-pass";
|
||||
"${modifier}+Shift+p" = "exec rofi-pass --insert";
|
||||
"${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}+d" =
|
||||
"exec ${pkgs.writers.writeDash "run" ''exec rofi -modi run,ssh,window -show run''}";
|
||||
"${modifier}+Shift+d" = "exec ${pkgs.notemenu}/bin/notemenu";
|
||||
"${modifier}+p" = "exec rofi-pass";
|
||||
"${modifier}+Shift+p" = "exec rofi-pass --insert";
|
||||
"${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}+F7" = "exec ${pkgs.writers.writeDash "showkeys-toggle" ''
|
||||
if ${pkgs.procps}/bin/pgrep screenkey; then
|
||||
exec ${pkgs.procps}/bin/pkill screenkey
|
||||
else
|
||||
exec ${pkgs.screenkey}/bin/screenkey
|
||||
fi
|
||||
''}";
|
||||
"${modifier}+F12" = "exec ${klem}/bin/klem";
|
||||
"XF86AudioLowerVolume" = "exec ${pkgs.pamixer}/bin/pamixer -d 5";
|
||||
"XF86AudioMute" = "exec ${pkgs.pamixer}/bin/pamixer -t";
|
||||
"XF86AudioRaiseVolume" = "exec ${pkgs.pamixer}/bin/pamixer -i 5";
|
||||
"XF86Calculator" = "exec ${pkgs.st}/bin/st -c floating -e ${pkgs.bc}/bin/bc";
|
||||
"XF86AudioPause" = "exec ${pkgs.playerctl}/bin/playerctl play-pause";
|
||||
"XF86AudioPlay" = "exec ${pkgs.playerctl}/bin/playerctl play-pause";
|
||||
"XF86AudioNext" = "exec ${pkgs.playerctl}/bin/playerctl next";
|
||||
"XF86AudioPrev" = "exec ${pkgs.playerctl}/bin/playerctl previous";
|
||||
"XF86AudioStop" = "exec ${pkgs.playerctl}/bin/playerctl stop";
|
||||
"${modifier}+F7" = "exec ${pkgs.writers.writeDash "showkeys-toggle" ''
|
||||
if ${pkgs.procps}/bin/pgrep screenkey; then
|
||||
exec ${pkgs.procps}/bin/pkill screenkey
|
||||
else
|
||||
exec ${pkgs.screenkey}/bin/screenkey
|
||||
fi
|
||||
''}";
|
||||
"${modifier}+F12" = "exec ${klem}/bin/klem";
|
||||
"XF86AudioLowerVolume" = "exec ${pkgs.pamixer}/bin/pamixer -d 5";
|
||||
"XF86AudioMute" = "exec ${pkgs.pamixer}/bin/pamixer -t";
|
||||
"XF86AudioRaiseVolume" = "exec ${pkgs.pamixer}/bin/pamixer -i 5";
|
||||
"XF86Calculator" = "exec ${pkgs.st}/bin/st -c floating -e ${pkgs.bc}/bin/bc";
|
||||
"XF86AudioPause" = "exec ${pkgs.playerctl}/bin/playerctl play-pause";
|
||||
"XF86AudioPlay" = "exec ${pkgs.playerctl}/bin/playerctl play-pause";
|
||||
"XF86AudioNext" = "exec ${pkgs.playerctl}/bin/playerctl next";
|
||||
"XF86AudioPrev" = "exec ${pkgs.playerctl}/bin/playerctl previous";
|
||||
"XF86AudioStop" = "exec ${pkgs.playerctl}/bin/playerctl stop";
|
||||
|
||||
# key names detected with xorg.xev:
|
||||
# XF86WakeUp (fn twice)
|
||||
# XF86Battery (fn f3)
|
||||
# XF86Sleep (fn f4) - actually suspends
|
||||
# XF86WLAN
|
||||
# XF86WebCam (fn f6)
|
||||
# XF86TouchpadToggle (fn f8)
|
||||
# XF86Suspend (fn f12) - actually suspends to disk
|
||||
# Num_Lock (fn Roll) - numlocks
|
||||
# XF86Audio{Prev,Next,Mute,Play,Stop}
|
||||
# XF86Forward
|
||||
# XF86Back
|
||||
# XF86Launch1 (thinkvantage)
|
||||
};
|
||||
in {
|
||||
stylix.targets.i3.enable = true;
|
||||
# key names detected with xorg.xev:
|
||||
# XF86WakeUp (fn twice)
|
||||
# XF86Battery (fn f3)
|
||||
# XF86Sleep (fn f4) - actually suspends
|
||||
# XF86WLAN
|
||||
# XF86WebCam (fn f6)
|
||||
# XF86TouchpadToggle (fn f8)
|
||||
# XF86Suspend (fn f12) - actually suspends to disk
|
||||
# Num_Lock (fn Roll) - numlocks
|
||||
# XF86Audio{Prev,Next,Mute,Play,Stop}
|
||||
# XF86Forward
|
||||
# XF86Back
|
||||
# XF86Launch1 (thinkvantage)
|
||||
};
|
||||
in
|
||||
{
|
||||
stylix.targets.i3.enable = true;
|
||||
|
||||
xsession.windowManager.i3 = {
|
||||
enable = true;
|
||||
extraConfig = ''
|
||||
bindsym --release ${modifier}+Shift+w exec xsecurelock
|
||||
xsession.windowManager.i3 = {
|
||||
enable = true;
|
||||
extraConfig = ''
|
||||
bindsym --release ${modifier}+Shift+w exec xsecurelock
|
||||
|
||||
exec "${pkgs.obsidian}/bin/obsidian"
|
||||
for_window [class="obsidian"] , move scratchpad
|
||||
exec "${pkgs.obsidian}/bin/obsidian"
|
||||
for_window [class="obsidian"] , move scratchpad
|
||||
|
||||
assign [class="message"] ${messageWorkspace}
|
||||
exec "${pkgs.writers.writeDash "irc" "exec ${pkgs.alacritty}/bin/alacritty --class message -e ssh weechat@makanek -t tmux attach-session -t IM"}"
|
||||
exec "${pkgs.writers.writeDash "email" "exec ${pkgs.alacritty}/bin/alacritty --class message -e aerc"}"
|
||||
assign [class="message"] ${messageWorkspace}
|
||||
exec "${pkgs.writers.writeDash "irc" "exec ${pkgs.alacritty}/bin/alacritty --class message -e ssh weechat@makanek -t tmux attach-session -t IM"}"
|
||||
exec "${pkgs.writers.writeDash "email" "exec ${pkgs.alacritty}/bin/alacritty --class message -e aerc"}"
|
||||
|
||||
exec --no-startup-id ${pkgs.xss-lock}/bin/xss-lock -- xsecurelock
|
||||
'';
|
||||
config = {
|
||||
inherit modifier gaps modes bars floating window colors;
|
||||
exec --no-startup-id ${pkgs.xss-lock}/bin/xss-lock -- xsecurelock
|
||||
'';
|
||||
config = {
|
||||
inherit
|
||||
modifier
|
||||
gaps
|
||||
modes
|
||||
bars
|
||||
floating
|
||||
window
|
||||
colors
|
||||
;
|
||||
keybindings = keybindings // {
|
||||
"${modifier}+F6" = "exec ${pkgs.xorg.xkill}/bin/xkill";
|
||||
"${modifier}+F9" = "exec ${pkgs.redshift}/bin/redshift -O 4000 -b 0.85";
|
||||
@@ -288,7 +326,7 @@ in {
|
||||
# "${modifier}+x" = "exec ${new-workspace}";
|
||||
"XF86Display" = "exec ${pkgs.dmenu-randr}/bin/dmenu-randr";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -2,7 +2,8 @@
|
||||
pkgs,
|
||||
config,
|
||||
...
|
||||
}: {
|
||||
}:
|
||||
{
|
||||
age.secrets = {
|
||||
miniflux-api-token = {
|
||||
file = ../secrets/miniflux-api-token.age;
|
||||
@@ -18,22 +19,24 @@
|
||||
bars.bottom = {
|
||||
icons = "awesome6";
|
||||
settings = {
|
||||
theme.overrides = let
|
||||
colours = config.lib.stylix.colors.withHashtag;
|
||||
in {
|
||||
idle_bg = colours.base00;
|
||||
idle_fg = colours.base05;
|
||||
good_bg = colours.base00;
|
||||
good_fg = colours.base0B;
|
||||
warning_bg = colours.base00;
|
||||
warning_fg = colours.base0A;
|
||||
critical_bg = colours.base00;
|
||||
critical_fg = colours.base09;
|
||||
info_bg = colours.base00;
|
||||
info_fg = colours.base04;
|
||||
separator_bg = colours.base00;
|
||||
separator = " ";
|
||||
};
|
||||
theme.overrides =
|
||||
let
|
||||
colours = config.lib.stylix.colors.withHashtag;
|
||||
in
|
||||
{
|
||||
idle_bg = colours.base00;
|
||||
idle_fg = colours.base05;
|
||||
good_bg = colours.base00;
|
||||
good_fg = colours.base0B;
|
||||
warning_bg = colours.base00;
|
||||
warning_fg = colours.base0A;
|
||||
critical_bg = colours.base00;
|
||||
critical_fg = colours.base09;
|
||||
info_bg = colours.base00;
|
||||
info_fg = colours.base04;
|
||||
separator_bg = colours.base00;
|
||||
separator = " ";
|
||||
};
|
||||
};
|
||||
blocks = [
|
||||
{
|
||||
@@ -70,7 +73,7 @@
|
||||
block = "memory";
|
||||
format = "$icon $mem_used.eng(prefix:G)";
|
||||
}
|
||||
{block = "load";}
|
||||
{ block = "load"; }
|
||||
{
|
||||
block = "time";
|
||||
format = "$icon $timestamp.datetime(f:'%Y-%m-%d (%W %a) %H:%M', l:de_DE)";
|
||||
|
||||
@@ -3,14 +3,16 @@
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
}:
|
||||
let
|
||||
davHome = "~/.local/share/dav";
|
||||
kmeinCloud = {
|
||||
davEndpoint = "https://cloud.kmein.de/remote.php/dav";
|
||||
username = "kieran";
|
||||
passwordFile = config.age.secrets.nextcloud-password-kieran.path;
|
||||
};
|
||||
in {
|
||||
in
|
||||
{
|
||||
age.secrets = {
|
||||
nextcloud-password-kieran = {
|
||||
file = ../secrets/nextcloud-password-kieran.age;
|
||||
@@ -45,8 +47,8 @@ in {
|
||||
|
||||
systemd.user.services.vdirsyncer = {
|
||||
enable = true;
|
||||
wants = ["network-online.target"];
|
||||
wantedBy = ["default.target"];
|
||||
wants = [ "network-online.target" ];
|
||||
wantedBy = [ "default.target" ];
|
||||
startAt = "*:00/10";
|
||||
script = ''
|
||||
${pkgs.vdirsyncer}/bin/vdirsyncer sync && ${pkgs.khal}/bin/khal printcalendars # https://lostpackets.de/khal/configure.html#syncing
|
||||
|
||||
@@ -2,10 +2,11 @@
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
}:
|
||||
{
|
||||
systemd.services.lb-subscription = {
|
||||
enable = true;
|
||||
wants = ["network-online.target"];
|
||||
wants = [ "network-online.target" ];
|
||||
startAt = "weekly";
|
||||
serviceConfig = {
|
||||
user = "kfm";
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
{pkgs, ...}: {
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
systemd.services.imaginary-illuminations = {
|
||||
enable = false;
|
||||
wants = ["network-online.target"];
|
||||
wants = [ "network-online.target" ];
|
||||
serviceConfig = {
|
||||
User = "kfm";
|
||||
Group = "users";
|
||||
|
||||
@@ -2,7 +2,8 @@
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
}:
|
||||
{
|
||||
services.nginx.virtualHosts.default = {
|
||||
locations."= /stub_status".extraConfig = "stub_status;";
|
||||
};
|
||||
@@ -41,12 +42,12 @@
|
||||
|
||||
systemd.services.promtail = {
|
||||
description = "Promtail service for Loki";
|
||||
wantedBy = ["multi-user.target"];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
|
||||
serviceConfig = {
|
||||
ExecStart = ''
|
||||
${pkgs.grafana-loki}/bin/promtail --config.file ${
|
||||
(pkgs.formats.yaml {}).generate "promtail.yaml" {
|
||||
(pkgs.formats.yaml { }).generate "promtail.yaml" {
|
||||
server = {
|
||||
http_listen_port = 28183;
|
||||
grpc_listen_port = 0;
|
||||
@@ -55,9 +56,7 @@
|
||||
clients = [
|
||||
{
|
||||
url = "http://${
|
||||
if config.networking.hostName == "makanek"
|
||||
then "127.0.0.1"
|
||||
else "makanek.r"
|
||||
if config.networking.hostName == "makanek" then "127.0.0.1" else "makanek.r"
|
||||
}:3100/loki/api/v1/push";
|
||||
}
|
||||
];
|
||||
@@ -71,7 +70,7 @@
|
||||
};
|
||||
relabel_configs = [
|
||||
{
|
||||
source_labels = ["__journal__systemd_unit"];
|
||||
source_labels = [ "__journal__systemd_unit" ];
|
||||
target_label = "unit";
|
||||
}
|
||||
];
|
||||
|
||||
@@ -3,9 +3,11 @@
|
||||
lib,
|
||||
config,
|
||||
...
|
||||
}: let
|
||||
}:
|
||||
let
|
||||
swallow = command: "${pkgs.swallow}/bin/swallow ${command}";
|
||||
in {
|
||||
in
|
||||
{
|
||||
environment.shellAliases.smpv = swallow "mpv";
|
||||
|
||||
nixpkgs.overlays = [
|
||||
@@ -19,7 +21,11 @@ in {
|
||||
enable = true;
|
||||
config = {
|
||||
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";
|
||||
script-opts = "ytdl_hook-ytdl_path=${pkgs.yt-dlp}/bin/yt-dlp";
|
||||
ao = "pulse"; # no pipewire for me :(
|
||||
|
||||
@@ -3,12 +3,16 @@
|
||||
lib,
|
||||
config,
|
||||
...
|
||||
}: let
|
||||
vim-kmein = (pkgs.vim-kmein.override {
|
||||
# stylixColors = config.lib.stylix.colors;
|
||||
colorscheme = "base16-gruvbox-dark-medium";
|
||||
});
|
||||
in {
|
||||
}:
|
||||
let
|
||||
vim-kmein = (
|
||||
pkgs.vim-kmein.override {
|
||||
# stylixColors = config.lib.stylix.colors;
|
||||
colorscheme = "base16-gruvbox-dark-medium";
|
||||
}
|
||||
);
|
||||
in
|
||||
{
|
||||
environment.variables.EDITOR = lib.getExe vim-kmein;
|
||||
environment.shellAliases.vi = "nvim";
|
||||
environment.shellAliases.vim = "nvim";
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
{
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
}:
|
||||
{
|
||||
programs.nm-applet.enable = true;
|
||||
|
||||
networking.networkmanager = {
|
||||
@@ -12,10 +13,10 @@
|
||||
];
|
||||
wifi.macAddress = "random";
|
||||
ethernet.macAddress = "random";
|
||||
unmanaged = ["docker*"];
|
||||
unmanaged = [ "docker*" ];
|
||||
};
|
||||
|
||||
users.users.me.extraGroups = ["networkmanager"];
|
||||
users.users.me.extraGroups = [ "networkmanager" ];
|
||||
|
||||
environment.systemPackages = [
|
||||
pkgs.speedtest-cli
|
||||
|
||||
@@ -2,7 +2,8 @@
|
||||
pkgs,
|
||||
config,
|
||||
...
|
||||
}: {
|
||||
}:
|
||||
{
|
||||
environment.systemPackages = [
|
||||
(pkgs.writers.writeDashBin "miniflux-watch-later" ''
|
||||
miniflux_api_token=$(cat ${config.age.secrets.miniflux-api-token.path})
|
||||
|
||||
@@ -2,13 +2,14 @@
|
||||
pkgs,
|
||||
inputs,
|
||||
...
|
||||
}: {
|
||||
}:
|
||||
{
|
||||
nixpkgs = {
|
||||
config.allowUnfree = true;
|
||||
};
|
||||
nix = {
|
||||
package = pkgs.nixVersions.stable;
|
||||
extraOptions = "experimental-features = nix-command flakes";
|
||||
nixPath = ["nixpkgs=${inputs.nixpkgs}"];
|
||||
nixPath = [ "nixpkgs=${inputs.nixpkgs}" ];
|
||||
};
|
||||
}
|
||||
|
||||
@@ -2,21 +2,23 @@
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
}:
|
||||
let
|
||||
openweathermap-repo = pkgs.fetchFromGitHub {
|
||||
owner = "ip1981";
|
||||
repo = "openweathermap";
|
||||
rev = "9cfef7b14ac5af7109449b54b1cb352b4c76167a";
|
||||
sha256 = "0sm43wicvw2fy7nq65s8vch6jjb5bszqr4ilnhibayamj4jcpw53";
|
||||
};
|
||||
openweathermap = pkgs.haskellPackages.callCabal2nix "openweathermap" openweathermap-repo {};
|
||||
openweathermap = pkgs.haskellPackages.callCabal2nix "openweathermap" openweathermap-repo { };
|
||||
openweathermap-key = lib.strings.fileContents <secrets/openweathermap.key>;
|
||||
in {
|
||||
in
|
||||
{
|
||||
nixpkgs.config.packageOverrides = pkgs: {
|
||||
weather = pkgs.writers.writeDashBin "weather" ''
|
||||
${openweathermap}/bin/openweathermap --api-key ${openweathermap-key} "$@"
|
||||
'';
|
||||
};
|
||||
|
||||
environment.systemPackages = [pkgs.weather];
|
||||
environment.systemPackages = [ pkgs.weather ];
|
||||
}
|
||||
|
||||
@@ -4,19 +4,22 @@
|
||||
lib,
|
||||
inputs,
|
||||
...
|
||||
}: let
|
||||
worldradio = pkgs.callPackage ../packages/worldradio.nix {};
|
||||
}:
|
||||
let
|
||||
worldradio = pkgs.callPackage ../packages/worldradio.nix { };
|
||||
|
||||
zoteroStyle = {
|
||||
name,
|
||||
sha256,
|
||||
}: {
|
||||
name = "${name}.csl";
|
||||
path = pkgs.fetchurl {
|
||||
url = "https://www.zotero.org/styles/${name}";
|
||||
inherit sha256;
|
||||
zoteroStyle =
|
||||
{
|
||||
name,
|
||||
sha256,
|
||||
}:
|
||||
{
|
||||
name = "${name}.csl";
|
||||
path = pkgs.fetchurl {
|
||||
url = "https://www.zotero.org/styles/${name}";
|
||||
inherit sha256;
|
||||
};
|
||||
};
|
||||
};
|
||||
cslDirectory = pkgs.linkFarm "citation-styles" [
|
||||
(zoteroStyle {
|
||||
name = "chicago-author-date-de";
|
||||
@@ -32,7 +35,8 @@
|
||||
})
|
||||
];
|
||||
|
||||
astrolog = pkgs.astrolog.overrideAttrs (old:
|
||||
astrolog = pkgs.astrolog.overrideAttrs (
|
||||
old:
|
||||
old
|
||||
// {
|
||||
installPhase = ''
|
||||
@@ -51,8 +55,10 @@
|
||||
/^:I /s/80/120/ # wider text output
|
||||
' $out/astrolog/astrolog.as
|
||||
'';
|
||||
});
|
||||
in {
|
||||
}
|
||||
);
|
||||
in
|
||||
{
|
||||
home-manager.users.me.home.file = {
|
||||
".csl".source = cslDirectory;
|
||||
".local/share/pandoc/csl".source = cslDirectory; # as of pandoc 2.11, it includes citeproc
|
||||
@@ -233,7 +239,11 @@ in {
|
||||
go
|
||||
texlive.combined.scheme-full
|
||||
latexrun
|
||||
(aspellWithDicts (dict: [dict.de dict.en dict.en-computers]))
|
||||
(aspellWithDicts (dict: [
|
||||
dict.de
|
||||
dict.en
|
||||
dict.en-computers
|
||||
]))
|
||||
# haskellPackages.pandoc-citeproc
|
||||
text2pdf
|
||||
lowdown
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
{config, ...}: let
|
||||
{ config, ... }:
|
||||
let
|
||||
user = config.users.users.me.name;
|
||||
in {
|
||||
in
|
||||
{
|
||||
security.polkit.extraConfig = ''
|
||||
polkit.addRule(function(action, subject) {
|
||||
if (subject.user == "${user}" && action.id == "org.freedesktop.systemd1.manage-units") {
|
||||
|
||||
@@ -2,9 +2,11 @@
|
||||
pkgs,
|
||||
config,
|
||||
...
|
||||
}: let
|
||||
}:
|
||||
let
|
||||
suspend = pkgs.writers.writeDash "suspend" "${pkgs.systemd}/bin/systemctl suspend";
|
||||
in {
|
||||
in
|
||||
{
|
||||
services.power-action = {
|
||||
enable = true;
|
||||
plans.suspend = {
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
{pkgs, lib, ...}: let
|
||||
{ pkgs, lib, ... }:
|
||||
let
|
||||
hp-driver = pkgs.hplip;
|
||||
in {
|
||||
in
|
||||
{
|
||||
services.printing = {
|
||||
enable = true;
|
||||
drivers = [hp-driver];
|
||||
drivers = [ hp-driver ];
|
||||
};
|
||||
|
||||
environment.systemPackages = [
|
||||
@@ -30,7 +32,6 @@ in {
|
||||
];
|
||||
}
|
||||
/*
|
||||
HP/hp-officejet_4650_series.ppd.gz
|
||||
drv:///hp/hpcups.drv/hp-officejet_4650_series.ppd
|
||||
HP/hp-officejet_4650_series.ppd.gz
|
||||
drv:///hp/hpcups.drv/hp-officejet_4650_series.ppd
|
||||
*/
|
||||
|
||||
|
||||
@@ -2,8 +2,11 @@
|
||||
config,
|
||||
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 = {
|
||||
rsaPrivateKeyFile = config.age.secrets.retiolum-rsa.path;
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
{pkgs, ...}: {
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
home-manager.users.me.programs.rofi = {
|
||||
enable = true;
|
||||
pass = {
|
||||
@@ -13,6 +14,6 @@
|
||||
help_color="#FF0000"
|
||||
''; # 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 = {
|
||||
enable = true;
|
||||
alsa = {
|
||||
@@ -9,7 +10,7 @@
|
||||
jack.enable = true;
|
||||
};
|
||||
|
||||
systemd.user.services.pipewire-pulse.path = [pkgs.pulseaudio];
|
||||
systemd.user.services.pipewire-pulse.path = [ pkgs.pulseaudio ];
|
||||
|
||||
services.avahi = {
|
||||
enable = true;
|
||||
|
||||
@@ -3,7 +3,8 @@
|
||||
lib,
|
||||
inputs,
|
||||
...
|
||||
}: let
|
||||
}:
|
||||
let
|
||||
locker = x: "https://c.krebsco.de/${x}";
|
||||
dictionaries = {
|
||||
lojban = {
|
||||
@@ -105,40 +106,42 @@
|
||||
sha256 = "0cx086zvb86bmz7i8vnsch4cj4fb0cp165g4hig4982zakj6f2jd";
|
||||
};
|
||||
};
|
||||
sanskrit = let
|
||||
repo = "https://github.com/indic-dict/stardict-sanskrit/raw/4ebd2d3db5820f7cbe3a649c3d5aa8f83d19b29f";
|
||||
in {
|
||||
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";
|
||||
sha256 = "13414a8rgd7hd5ffar6nl68nk3ys60wjkgb7m11hp0ahaasmf6ly";
|
||||
stripRoot = false;
|
||||
sanskrit =
|
||||
let
|
||||
repo = "https://github.com/indic-dict/stardict-sanskrit/raw/4ebd2d3db5820f7cbe3a649c3d5aa8f83d19b29f";
|
||||
in
|
||||
{
|
||||
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";
|
||||
sha256 = "13414a8rgd7hd5ffar6nl68nk3ys60wjkgb7m11hp0ahaasmf6ly";
|
||||
stripRoot = false;
|
||||
};
|
||||
BoehtlingkRothKurz = pkgs.fetchzip {
|
||||
url = "${repo}/sa-head/german-entries/tars/Bohtlingk-Sanskrit-Worterbuch-in-kurzerer-Fassung__2021-10-05_14-23-18Z__10MB.tar.gz";
|
||||
sha256 = "15yx31yrk40k9nn6kaysp4pprzj8dpd13dj3wafklc3izm8lr2wq";
|
||||
stripRoot = false;
|
||||
};
|
||||
MonierWilliams = pkgs.fetchzip {
|
||||
url = "https://github.com/indic-dict/stardict-sanskrit/raw/4ebd2d3db5820f7cbe3a649c3d5aa8f83d19b29f/sa-head/en-entries/tars/mw-cologne__2021-10-06_00-16-23Z__16MB.tar.gz";
|
||||
sha256 = "0p99ybxwxmmd94hf035hvm2hhnfy84av7qq79xf28bh2rbx6s9ng";
|
||||
stripRoot = false;
|
||||
};
|
||||
MonierWilliamsEnglish = pkgs.fetchzip {
|
||||
url = "${repo}/en-head/tars/mw-english-sanskrit__2021-10-05_14-23-18Z__3MB.tar.gz";
|
||||
sha256 = "09a61hhii4b1m2fkrlh4rm2xnlgwrllh84iypbc6wyj00w9jkl3x";
|
||||
stripRoot = false;
|
||||
};
|
||||
Borooah = pkgs.fetchzip {
|
||||
url = "${repo}/en-head/tars/borooah__2021-10-05_14-23-18Z__2MB.tar.gz";
|
||||
sha256 = "0qmmfbynqgv125v48383i51ky9yi69zibhh7vwk95gyar2yrprn2";
|
||||
stripRoot = false;
|
||||
};
|
||||
ApteEnglish = pkgs.fetchzip {
|
||||
url = "${repo}/en-head/tars/apte-english-sanskrit-cologne__2021-10-06_00-12-51Z__1MB.tar.gz";
|
||||
sha256 = "064ysm24ydc534ca689y5i2flnra8jkmh8zn0gsb6n8hdsb0d1lq";
|
||||
stripRoot = false;
|
||||
};
|
||||
};
|
||||
BoehtlingkRothKurz = pkgs.fetchzip {
|
||||
url = "${repo}/sa-head/german-entries/tars/Bohtlingk-Sanskrit-Worterbuch-in-kurzerer-Fassung__2021-10-05_14-23-18Z__10MB.tar.gz";
|
||||
sha256 = "15yx31yrk40k9nn6kaysp4pprzj8dpd13dj3wafklc3izm8lr2wq";
|
||||
stripRoot = false;
|
||||
};
|
||||
MonierWilliams = pkgs.fetchzip {
|
||||
url = "https://github.com/indic-dict/stardict-sanskrit/raw/4ebd2d3db5820f7cbe3a649c3d5aa8f83d19b29f/sa-head/en-entries/tars/mw-cologne__2021-10-06_00-16-23Z__16MB.tar.gz";
|
||||
sha256 = "0p99ybxwxmmd94hf035hvm2hhnfy84av7qq79xf28bh2rbx6s9ng";
|
||||
stripRoot = false;
|
||||
};
|
||||
MonierWilliamsEnglish = pkgs.fetchzip {
|
||||
url = "${repo}/en-head/tars/mw-english-sanskrit__2021-10-05_14-23-18Z__3MB.tar.gz";
|
||||
sha256 = "09a61hhii4b1m2fkrlh4rm2xnlgwrllh84iypbc6wyj00w9jkl3x";
|
||||
stripRoot = false;
|
||||
};
|
||||
Borooah = pkgs.fetchzip {
|
||||
url = "${repo}/en-head/tars/borooah__2021-10-05_14-23-18Z__2MB.tar.gz";
|
||||
sha256 = "0qmmfbynqgv125v48383i51ky9yi69zibhh7vwk95gyar2yrprn2";
|
||||
stripRoot = false;
|
||||
};
|
||||
ApteEnglish = pkgs.fetchzip {
|
||||
url = "${repo}/en-head/tars/apte-english-sanskrit-cologne__2021-10-06_00-12-51Z__1MB.tar.gz";
|
||||
sha256 = "064ysm24ydc534ca689y5i2flnra8jkmh8zn0gsb6n8hdsb0d1lq";
|
||||
stripRoot = false;
|
||||
};
|
||||
};
|
||||
oed = {
|
||||
OED1 = pkgs.fetchzip {
|
||||
url = locker "stardict-Oxford_English_Dictionary_2nd_Ed._P1-2.4.2.tar.bz2";
|
||||
@@ -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 ''
|
||||
set -efu
|
||||
export SDCV_PAGER=${toString sdcvPager}
|
||||
@@ -188,7 +193,13 @@
|
||||
'';
|
||||
|
||||
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 "
|
||||
s!<sup>1</sup>!¹!gI
|
||||
s!<sup>2</sup>!²!gI
|
||||
@@ -291,7 +302,8 @@
|
||||
s!</\?p[^>]*>!!gI
|
||||
" | less -FR
|
||||
'';
|
||||
in {
|
||||
in
|
||||
{
|
||||
# environment.etc.stardict.source = toString (makeStardictDataDir ({
|
||||
# Crum = pkgs.fetchzip {
|
||||
# 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/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-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_P2-2.4.2.tar.bz2
|
||||
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
|
||||
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-Urban_Dictionary_P1-2.4.2.tar.bz2
|
||||
http://download.huzheng.org/bigdict/stardict-Urban_Dictionary_P2-2.4.2.tar.bz2
|
||||
|
||||
Duden_Rechtschreibung = pkgs.fetchzip {
|
||||
url = "http://download.huzheng.org/babylon/german/stardict-Duden_Rechtschreibung-2.4.2.tar.bz2";
|
||||
sha256 = "0xiprb45s88w62rn8rlbjrsagbiliay9hszsiy20glwabf6zsfji";
|
||||
};
|
||||
Duden = pkgs.fetchzip {
|
||||
url = "http://download.huzheng.org/de/stardict-duden-2.4.2.tar.bz2";
|
||||
sha256 = "049i4ynfqqxykv1nlkyks94mvn14s22qdax5gg7hx1ks5y4xw64j";
|
||||
};
|
||||
FreeOnlineDictionaryOfComputing = pkgs.fetchzip {
|
||||
url = "http://download.huzheng.org/dict.org/stardict-dictd_www.dict.org_foldoc-2.4.2.tar.bz2";
|
||||
sha256 = "1lw2i8dzxpx929cpgvv0x366dnh4drr10wzqmrhcd0kvwglqawgm";
|
||||
};
|
||||
Cappeller = pkgs.fetchzip {
|
||||
url = "${repo}/sa-head/german-entries/tars/capeller-sanskrit-german__2021-10-05_14-23-18Z__1MB.tar.gz";
|
||||
sha256 = "0jwrj2aih2lrcjg0lqm8jrvq9vsas9s8j4c9ggbg2n0jyz03kci3";
|
||||
stripRoot = false;
|
||||
};
|
||||
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";
|
||||
sha256 = "1k7gbalysf48pwa06zfykrqhdk466g35xy64b30k4z8bybgdn8z2";
|
||||
stripRoot = false;
|
||||
};
|
||||
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";
|
||||
sha256 = "0r5z1xif56zlw9r2jp3fvwmcjv4f2fhd9r17j30nah9awx2m1isg";
|
||||
stripRoot = false;
|
||||
};
|
||||
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";
|
||||
sha256 = "0x8j657mawvdcyd1knzvf33yp15z77d661n3h6g9hcj7wn9s5xyk";
|
||||
stripRoot = false;
|
||||
};
|
||||
Grassmann = pkgs.fetchzip {
|
||||
url = "${repo}/sa-head/german-entries/tars/grassman-sanskrit-german__2021-10-05_14-23-18Z__2MB.tar.gz";
|
||||
sha256 = "0jalsykaxkl6wzrky72lz8g3jdz26lmjpyibbfaf7a5vvnr55k02";
|
||||
stripRoot = false;
|
||||
};
|
||||
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";
|
||||
sha256 = "0lj3hgphqgnihn482g9kgjwbvdrcd38vc29v1fi36srn08qdhvcb";
|
||||
stripRoot = false;
|
||||
};
|
||||
ApteSa = pkgs.fetchzip {
|
||||
url = "${repo}/sa-head/en-entries/tars/apte-sa__2021-12-18_13-20-56Z__6MB.tar.gz";
|
||||
sha256 = "0cq1dd02d1pvmjnibbs2cscifjnk2z0nqccf5yzzilxkzsrarh32";
|
||||
stripRoot = false;
|
||||
};
|
||||
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";
|
||||
sha256 = "1yzmj0393mxvjv4n2lnvd2c722v2bmxxiyq7pscdwni3bxip3h8s";
|
||||
stripRoot = false;
|
||||
};
|
||||
Duden_Rechtschreibung = pkgs.fetchzip {
|
||||
url = "http://download.huzheng.org/babylon/german/stardict-Duden_Rechtschreibung-2.4.2.tar.bz2";
|
||||
sha256 = "0xiprb45s88w62rn8rlbjrsagbiliay9hszsiy20glwabf6zsfji";
|
||||
};
|
||||
Duden = pkgs.fetchzip {
|
||||
url = "http://download.huzheng.org/de/stardict-duden-2.4.2.tar.bz2";
|
||||
sha256 = "049i4ynfqqxykv1nlkyks94mvn14s22qdax5gg7hx1ks5y4xw64j";
|
||||
};
|
||||
FreeOnlineDictionaryOfComputing = pkgs.fetchzip {
|
||||
url = "http://download.huzheng.org/dict.org/stardict-dictd_www.dict.org_foldoc-2.4.2.tar.bz2";
|
||||
sha256 = "1lw2i8dzxpx929cpgvv0x366dnh4drr10wzqmrhcd0kvwglqawgm";
|
||||
};
|
||||
Cappeller = pkgs.fetchzip {
|
||||
url = "${repo}/sa-head/german-entries/tars/capeller-sanskrit-german__2021-10-05_14-23-18Z__1MB.tar.gz";
|
||||
sha256 = "0jwrj2aih2lrcjg0lqm8jrvq9vsas9s8j4c9ggbg2n0jyz03kci3";
|
||||
stripRoot = false;
|
||||
};
|
||||
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";
|
||||
sha256 = "1k7gbalysf48pwa06zfykrqhdk466g35xy64b30k4z8bybgdn8z2";
|
||||
stripRoot = false;
|
||||
};
|
||||
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";
|
||||
sha256 = "0r5z1xif56zlw9r2jp3fvwmcjv4f2fhd9r17j30nah9awx2m1isg";
|
||||
stripRoot = false;
|
||||
};
|
||||
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";
|
||||
sha256 = "0x8j657mawvdcyd1knzvf33yp15z77d661n3h6g9hcj7wn9s5xyk";
|
||||
stripRoot = false;
|
||||
};
|
||||
Grassmann = pkgs.fetchzip {
|
||||
url = "${repo}/sa-head/german-entries/tars/grassman-sanskrit-german__2021-10-05_14-23-18Z__2MB.tar.gz";
|
||||
sha256 = "0jalsykaxkl6wzrky72lz8g3jdz26lmjpyibbfaf7a5vvnr55k02";
|
||||
stripRoot = false;
|
||||
};
|
||||
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";
|
||||
sha256 = "0lj3hgphqgnihn482g9kgjwbvdrcd38vc29v1fi36srn08qdhvcb";
|
||||
stripRoot = false;
|
||||
};
|
||||
ApteSa = pkgs.fetchzip {
|
||||
url = "${repo}/sa-head/en-entries/tars/apte-sa__2021-12-18_13-20-56Z__6MB.tar.gz";
|
||||
sha256 = "0cq1dd02d1pvmjnibbs2cscifjnk2z0nqccf5yzzilxkzsrarh32";
|
||||
stripRoot = false;
|
||||
};
|
||||
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";
|
||||
sha256 = "1yzmj0393mxvjv4n2lnvd2c722v2bmxxiyq7pscdwni3bxip3h8s";
|
||||
stripRoot = false;
|
||||
};
|
||||
*/
|
||||
|
||||
|
||||
@@ -4,15 +4,17 @@
|
||||
lib,
|
||||
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 \
|
||||
--output $out \
|
||||
${lib.concatMapStringsSep " "
|
||||
(n: "--base0${lib.toHexString n}=${config.lib.stylix.colors.withHashtag."base0${lib.toHexString n}"}")
|
||||
(lib.range 0 15)}
|
||||
${lib.concatMapStringsSep " " (
|
||||
n: "--base0${lib.toHexString n}=${config.lib.stylix.colors.withHashtag."base0${lib.toHexString n}"}"
|
||||
) (lib.range 0 15)}
|
||||
'';
|
||||
in {
|
||||
in
|
||||
{
|
||||
# https://danth.github.io/stylix/tricks.html
|
||||
# stylix.image = inputs.wallpapers.outPath + "/meteora/rodrigo-soares-250630.jpg";
|
||||
stylix.enable = true;
|
||||
|
||||
@@ -6,5 +6,5 @@
|
||||
'';
|
||||
};
|
||||
|
||||
users.users.me.extraGroups = ["wheel"];
|
||||
users.users.me.extraGroups = [ "wheel" ];
|
||||
}
|
||||
|
||||
@@ -2,13 +2,20 @@
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
}:
|
||||
{
|
||||
boot.extraModulePackages = with config.boot.kernelPackages; [
|
||||
tp_smapi
|
||||
acpi_call
|
||||
];
|
||||
boot.kernelModules = ["tp_smapi" "acpi_call"];
|
||||
environment.systemPackages = [pkgs.tpacpi-bat pkgs.powertop];
|
||||
boot.kernelModules = [
|
||||
"tp_smapi"
|
||||
"acpi_call"
|
||||
];
|
||||
environment.systemPackages = [
|
||||
pkgs.tpacpi-bat
|
||||
pkgs.powertop
|
||||
];
|
||||
|
||||
services.tlp = {
|
||||
enable = true;
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
{pkgs, ...}: {
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
environment.systemPackages = [
|
||||
pkgs.tmuxp
|
||||
pkgs.reptyr # move programs over to a tmux session
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
{pkgs, ...}: {
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
services.tor.enable = true;
|
||||
services.tor.client.enable = true;
|
||||
environment.systemPackages = [pkgs.tor pkgs.torsocks];
|
||||
environment.systemPackages = [
|
||||
pkgs.tor
|
||||
pkgs.torsocks
|
||||
];
|
||||
}
|
||||
|
||||
138
configs/uni.nix
138
configs/uni.nix
@@ -3,20 +3,26 @@
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
}:
|
||||
let
|
||||
username = "meinhak99";
|
||||
fu-defaults = let mailhost = "mail.zedat.fu-berlin.de"; in {
|
||||
imap.host = mailhost;
|
||||
imap.port = 993;
|
||||
imap.tls.enable = true;
|
||||
smtp.host = mailhost;
|
||||
smtp.port = 465;
|
||||
smtp.tls.enable = true;
|
||||
folders.drafts = "Entwürfe";
|
||||
folders.sent = "Gesendet";
|
||||
folders.trash = "Papierkorb";
|
||||
};
|
||||
in {
|
||||
fu-defaults =
|
||||
let
|
||||
mailhost = "mail.zedat.fu-berlin.de";
|
||||
in
|
||||
{
|
||||
imap.host = mailhost;
|
||||
imap.port = 993;
|
||||
imap.tls.enable = true;
|
||||
smtp.host = mailhost;
|
||||
smtp.port = 465;
|
||||
smtp.tls.enable = true;
|
||||
folders.drafts = "Entwürfe";
|
||||
folders.sent = "Gesendet";
|
||||
folders.trash = "Papierkorb";
|
||||
};
|
||||
in
|
||||
{
|
||||
home-manager.users.me = {
|
||||
programs.ssh = {
|
||||
matchBlocks = {
|
||||
@@ -28,31 +34,33 @@ in {
|
||||
};
|
||||
};
|
||||
accounts.email.accounts = {
|
||||
letos =
|
||||
lib.recursiveUpdate pkgs.lib.niveum.email.defaults
|
||||
{
|
||||
userName = "slfletos";
|
||||
address = "letos.sprachlit@hu-berlin.de";
|
||||
passwordCommand = "${pkgs.coreutils}/bin/cat ${config.age.secrets.email-password-letos.path}";
|
||||
imap.host = "mailbox.cms.hu-berlin.de";
|
||||
imap.port = 993;
|
||||
smtp.host = "mailhost.cms.hu-berlin.de";
|
||||
smtp.port = 25;
|
||||
smtp.tls.useStartTls = true;
|
||||
};
|
||||
fu =
|
||||
lib.recursiveUpdate pkgs.lib.niveum.email.defaults
|
||||
(lib.recursiveUpdate fu-defaults
|
||||
(let userName = "meinhak99"; in {
|
||||
letos = lib.recursiveUpdate pkgs.lib.niveum.email.defaults {
|
||||
userName = "slfletos";
|
||||
address = "letos.sprachlit@hu-berlin.de";
|
||||
passwordCommand = "${pkgs.coreutils}/bin/cat ${config.age.secrets.email-password-letos.path}";
|
||||
imap.host = "mailbox.cms.hu-berlin.de";
|
||||
imap.port = 993;
|
||||
smtp.host = "mailhost.cms.hu-berlin.de";
|
||||
smtp.port = 25;
|
||||
smtp.tls.useStartTls = true;
|
||||
};
|
||||
fu = lib.recursiveUpdate pkgs.lib.niveum.email.defaults (
|
||||
lib.recursiveUpdate fu-defaults (
|
||||
let
|
||||
userName = "meinhak99";
|
||||
in
|
||||
{
|
||||
userName = userName;
|
||||
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}";
|
||||
himalaya = {
|
||||
enable = true;
|
||||
settings.backend = "imap";
|
||||
};
|
||||
}));
|
||||
}
|
||||
)
|
||||
);
|
||||
};
|
||||
};
|
||||
|
||||
@@ -82,59 +90,57 @@ in {
|
||||
system.fsPackages = [ pkgs.sshfs ];
|
||||
|
||||
# https://www.zedat.fu-berlin.de/tip4u_157.pdf
|
||||
fileSystems = let
|
||||
fu-berlin-cifs-options = [
|
||||
"uid=${toString config.users.users.me.uid}"
|
||||
"gid=${toString config.users.groups.users.gid}"
|
||||
"rw"
|
||||
"nounix"
|
||||
"domain=fu-berlin"
|
||||
"noauto"
|
||||
"x-systemd.automount"
|
||||
"x-systemd.device-timeout=1"
|
||||
"x-systemd.idle-timeout=1min"
|
||||
];
|
||||
fileSystems =
|
||||
let
|
||||
fu-berlin-cifs-options = [
|
||||
"uid=${toString config.users.users.me.uid}"
|
||||
"gid=${toString config.users.groups.users.gid}"
|
||||
"rw"
|
||||
"nounix"
|
||||
"domain=fu-berlin"
|
||||
"noauto"
|
||||
"x-systemd.automount"
|
||||
"x-systemd.device-timeout=1"
|
||||
"x-systemd.idle-timeout=1min"
|
||||
];
|
||||
|
||||
firstCharacter = lib.strings.substring 0 1;
|
||||
firstCharacter = lib.strings.substring 0 1;
|
||||
|
||||
home-directory-mount = user: {
|
||||
"${pkgs.lib.niveum.remoteDir}/fu/${user}/home" = {
|
||||
device = "${user}@login.zedat.fu-berlin.de:/home/${firstCharacter user}/${user}";
|
||||
fsType = "sshfs";
|
||||
options = [
|
||||
"allow_other"
|
||||
"_netdev"
|
||||
"x-systemd.automount"
|
||||
"reconnect"
|
||||
"ServerAliveInterval=15"
|
||||
"IdentityFile=${config.age.secrets.fu-sftp-key.path}"
|
||||
];
|
||||
home-directory-mount = user: {
|
||||
"${pkgs.lib.niveum.remoteDir}/fu/${user}/home" = {
|
||||
device = "${user}@login.zedat.fu-berlin.de:/home/${firstCharacter user}/${user}";
|
||||
fsType = "sshfs";
|
||||
options = [
|
||||
"allow_other"
|
||||
"_netdev"
|
||||
"x-systemd.automount"
|
||||
"reconnect"
|
||||
"ServerAliveInterval=15"
|
||||
"IdentityFile=${config.age.secrets.fu-sftp-key.path}"
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
in home-directory-mount "meinhak99";
|
||||
in
|
||||
home-directory-mount "meinhak99";
|
||||
|
||||
environment.systemPackages = [
|
||||
(pkgs.writers.writeDashBin "hu-vpn-split" ''
|
||||
${pkgs.openfortivpn}/bin/openfortivpn \
|
||||
--password="$(cat "${config.age.secrets.email-password-letos.path}")" \
|
||||
--config=${
|
||||
pkgs.writeText "hu-berlin-split.config" ''
|
||||
--config=${pkgs.writeText "hu-berlin-split.config" ''
|
||||
host = forti-ssl.vpn.hu-berlin.de
|
||||
port = 443
|
||||
username = slfletos@split_tunnel
|
||||
''
|
||||
}
|
||||
''}
|
||||
'')
|
||||
(pkgs.writers.writeDashBin "hu-vpn-full" ''
|
||||
${pkgs.openfortivpn}/bin/openfortivpn \
|
||||
--password="$(cat "${config.age.secrets.email-password-letos.path}")" \
|
||||
--config=${
|
||||
pkgs.writeText "hu-berlin-full.config" ''
|
||||
--config=${pkgs.writeText "hu-berlin-full.config" ''
|
||||
host = forti-ssl.vpn.hu-berlin.de
|
||||
port = 443
|
||||
username = slfletos@tunnel_all
|
||||
''
|
||||
}
|
||||
''}
|
||||
'')
|
||||
(pkgs.writers.writeDashBin "fu-vpn" ''
|
||||
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,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
}:
|
||||
let
|
||||
# url = "http://wallpaper.r/realwallpaper-krebs-stars-berlin.png";
|
||||
url = "http://wallpaper.r/realwallpaper-krebs.png";
|
||||
stateDir = "~/.cache/wallpaper";
|
||||
in {
|
||||
in
|
||||
{
|
||||
systemd.user.services.wallpaper = {
|
||||
wantedBy = ["graphical-session.target"];
|
||||
after = ["network.target"];
|
||||
wantedBy = [ "graphical-session.target" ];
|
||||
after = [ "network.target" ];
|
||||
script = ''
|
||||
set -euf
|
||||
|
||||
|
||||
@@ -2,8 +2,9 @@
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
environment.systemPackages = [pkgs.watson];
|
||||
}:
|
||||
{
|
||||
environment.systemPackages = [ pkgs.watson ];
|
||||
|
||||
environment.variables.WATSON_DIR = "${config.users.users.me.home}/cloud/Seafile/Documents/watson";
|
||||
}
|
||||
|
||||
171
configs/zsh.nix
171
configs/zsh.nix
@@ -2,88 +2,97 @@
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
}:
|
||||
let
|
||||
promptColours.success = "cyan";
|
||||
promptColours.failure = "red";
|
||||
in {
|
||||
programs.zsh = let
|
||||
zsh-completions = pkgs.fetchFromGitHub {
|
||||
owner = "zsh-users";
|
||||
repo = "zsh-completions";
|
||||
rev = "cf565254e26bb7ce03f51889e9a29953b955b1fb";
|
||||
sha256 = "1yf4rz99acdsiy0y1v3bm65xvs2m0sl92ysz0rnnrlbd5amn283l";
|
||||
in
|
||||
{
|
||||
programs.zsh =
|
||||
let
|
||||
zsh-completions = pkgs.fetchFromGitHub {
|
||||
owner = "zsh-users";
|
||||
repo = "zsh-completions";
|
||||
rev = "cf565254e26bb7ce03f51889e9a29953b955b1fb";
|
||||
sha256 = "1yf4rz99acdsiy0y1v3bm65xvs2m0sl92ysz0rnnrlbd5amn283l";
|
||||
};
|
||||
in
|
||||
{
|
||||
enable = true;
|
||||
enableCompletion = true;
|
||||
autosuggestions.enable = true;
|
||||
syntaxHighlighting.enable = true;
|
||||
syntaxHighlighting.highlighters = [
|
||||
"main"
|
||||
"brackets"
|
||||
"pattern"
|
||||
"line"
|
||||
];
|
||||
interactiveShellInit = ''
|
||||
setopt INTERACTIVE_COMMENTS CORRECT
|
||||
setopt MULTIOS
|
||||
setopt AUTO_NAME_DIRS
|
||||
setopt AUTOCD CDABLE_VARS
|
||||
setopt HIST_IGNORE_ALL_DUPS
|
||||
setopt VI
|
||||
setopt AUTO_MENU
|
||||
setopt COMPLETE_IN_WORD
|
||||
setopt ALWAYS_TO_END
|
||||
unsetopt NOMATCH
|
||||
unsetopt MENU_COMPLETE
|
||||
|
||||
zstyle ':completion:*:*:*:*:*' menu select
|
||||
zstyle ':completion:*' matcher-list 'm:{a-zA-Z-_}={A-Za-z_-}' 'r:|=*' 'l:|=* r:|=*'
|
||||
zstyle ':completion:*' special-dirs true
|
||||
zstyle ':completion:*' list-colors \'\'
|
||||
zstyle ':completion:*:*:kill:*:processes' list-colors '=(#b) #([0-9]#) ([0-9a-z-]#)*=01;34=0=01'
|
||||
zstyle ':completion:*:*:*:*:processes' command "ps -u $USER -o pid,user,comm -w -w"
|
||||
zstyle ':completion:*:cd:*' tag-order local-directories directory-stack path-directories
|
||||
|
||||
export KEYTIMEOUT=1
|
||||
|
||||
hash -d nixos=/etc/nixos niveum=${config.users.users.me.home}/sync/src/niveum
|
||||
|
||||
autoload -U zmv run-help edit-command-line
|
||||
|
||||
fpath=(${zsh-completions}/src $fpath)
|
||||
'';
|
||||
promptInit = ''
|
||||
autoload -Uz vcs_info
|
||||
zstyle ':vcs_info:*' enable git
|
||||
zstyle ':vcs_info:*' check-for-changes true
|
||||
zstyle ':vcs_info:*' stagedstr '%F{green}+%f'
|
||||
zstyle ':vcs_info:*' unstagedstr '%F{red}~%f'
|
||||
zstyle ':vcs_info:*' use-prompt-escapes true
|
||||
zstyle ':vcs_info:*' formats "%c%u%F{cyan}%b%f"
|
||||
zstyle ':vcs_info:*' actionformats "(%a) %c%u%F{cyan}%b%f"
|
||||
|
||||
precmd () {
|
||||
vcs_info
|
||||
if [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ] || [ -n "$SSH_CONNECTION" ]; then
|
||||
RPROMPT="$(hostname)"
|
||||
else
|
||||
RPROMPT="$vcs_info_msg_0_"
|
||||
fi
|
||||
if [[ -n $IN_NIX_SHELL ]]; then
|
||||
PROMPT='%B%~%b %(?.%F{${promptColours.success}}.%F{${promptColours.failure}})λ%f '
|
||||
else
|
||||
PROMPT='%B%~%b %(?.%F{${promptColours.success}}.%F{${promptColours.failure}})%#%f '
|
||||
fi
|
||||
print -Pn "\e]2;%n@%M:%~\a" # title bar prompt
|
||||
}
|
||||
|
||||
zle-keymap-select zle-line-init () {
|
||||
case $KEYMAP in
|
||||
vicmd) print -n '\e]12;green\a';;
|
||||
viins|main) print -n '\e]12;gray\a';;
|
||||
esac
|
||||
}
|
||||
|
||||
zle -N zle-line-init
|
||||
zle -N zle-keymap-select
|
||||
zle -N edit-command-line
|
||||
bindkey -M vicmd v edit-command-line
|
||||
'';
|
||||
};
|
||||
in {
|
||||
enable = true;
|
||||
enableCompletion = true;
|
||||
autosuggestions.enable = true;
|
||||
syntaxHighlighting.enable = true;
|
||||
syntaxHighlighting.highlighters = ["main" "brackets" "pattern" "line"];
|
||||
interactiveShellInit = ''
|
||||
setopt INTERACTIVE_COMMENTS CORRECT
|
||||
setopt MULTIOS
|
||||
setopt AUTO_NAME_DIRS
|
||||
setopt AUTOCD CDABLE_VARS
|
||||
setopt HIST_IGNORE_ALL_DUPS
|
||||
setopt VI
|
||||
setopt AUTO_MENU
|
||||
setopt COMPLETE_IN_WORD
|
||||
setopt ALWAYS_TO_END
|
||||
unsetopt NOMATCH
|
||||
unsetopt MENU_COMPLETE
|
||||
|
||||
zstyle ':completion:*:*:*:*:*' menu select
|
||||
zstyle ':completion:*' matcher-list 'm:{a-zA-Z-_}={A-Za-z_-}' 'r:|=*' 'l:|=* r:|=*'
|
||||
zstyle ':completion:*' special-dirs true
|
||||
zstyle ':completion:*' list-colors \'\'
|
||||
zstyle ':completion:*:*:kill:*:processes' list-colors '=(#b) #([0-9]#) ([0-9a-z-]#)*=01;34=0=01'
|
||||
zstyle ':completion:*:*:*:*:processes' command "ps -u $USER -o pid,user,comm -w -w"
|
||||
zstyle ':completion:*:cd:*' tag-order local-directories directory-stack path-directories
|
||||
|
||||
export KEYTIMEOUT=1
|
||||
|
||||
hash -d nixos=/etc/nixos niveum=${config.users.users.me.home}/sync/src/niveum
|
||||
|
||||
autoload -U zmv run-help edit-command-line
|
||||
|
||||
fpath=(${zsh-completions}/src $fpath)
|
||||
'';
|
||||
promptInit = ''
|
||||
autoload -Uz vcs_info
|
||||
zstyle ':vcs_info:*' enable git
|
||||
zstyle ':vcs_info:*' check-for-changes true
|
||||
zstyle ':vcs_info:*' stagedstr '%F{green}+%f'
|
||||
zstyle ':vcs_info:*' unstagedstr '%F{red}~%f'
|
||||
zstyle ':vcs_info:*' use-prompt-escapes true
|
||||
zstyle ':vcs_info:*' formats "%c%u%F{cyan}%b%f"
|
||||
zstyle ':vcs_info:*' actionformats "(%a) %c%u%F{cyan}%b%f"
|
||||
|
||||
precmd () {
|
||||
vcs_info
|
||||
if [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ] || [ -n "$SSH_CONNECTION" ]; then
|
||||
RPROMPT="$(hostname)"
|
||||
else
|
||||
RPROMPT="$vcs_info_msg_0_"
|
||||
fi
|
||||
if [[ -n $IN_NIX_SHELL ]]; then
|
||||
PROMPT='%B%~%b %(?.%F{${promptColours.success}}.%F{${promptColours.failure}})λ%f '
|
||||
else
|
||||
PROMPT='%B%~%b %(?.%F{${promptColours.success}}.%F{${promptColours.failure}})%#%f '
|
||||
fi
|
||||
print -Pn "\e]2;%n@%M:%~\a" # title bar prompt
|
||||
}
|
||||
|
||||
zle-keymap-select zle-line-init () {
|
||||
case $KEYMAP in
|
||||
vicmd) print -n '\e]12;green\a';;
|
||||
viins|main) print -n '\e]12;gray\a';;
|
||||
esac
|
||||
}
|
||||
|
||||
zle -N zle-line-init
|
||||
zle -N zle-keymap-select
|
||||
zle -N edit-command-line
|
||||
bindkey -M vicmd v edit-command-line
|
||||
'';
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user