1
0
mirror of https://github.com/kmein/niveum synced 2026-03-19 11:31:09 +01:00

48 Commits

Author SHA1 Message Date
111d9aa8de vim wrappers: use exraName 2025-12-27 08:04:20 +01:00
6c7645a9c8 neovim: set editor and aliases correctly 2025-12-27 08:04:08 +01:00
1a8295a5a5 remove pkgs.niveum.lib.defaultApplications 2025-12-27 07:58:20 +01:00
95e5a58f15 secure mktemp 2025-12-27 07:53:49 +01:00
b233c18709 pls: download on like 2025-12-27 07:36:33 +01:00
8d3020ef84 vim-typewriter: fullscreen on start 2025-12-27 06:51:42 +01:00
d058da7198 vim-typewriter 2025-12-27 06:45:42 +01:00
2688d3d9ad keyboard: set and use extraLayouts 2025-12-25 18:23:27 +01:00
98efafb738 home-assistant: remove playlists 2025-12-25 14:52:18 +01:00
37ef9a1b05 fix makanek and ful build 2025-12-25 14:48:27 +01:00
dd50715f43 move keyboard files to config 2025-12-25 14:41:40 +01:00
a5d4b082ee clean up lib/ 2025-12-25 14:30:03 +01:00
c1ca5336c8 streams: move to package 2025-12-25 14:29:54 +01:00
1c788bf103 move vim config from lib 2025-12-25 14:29:54 +01:00
82b7ffd39f remove specialArgs niveum and niveumLib, add overlay 2025-12-25 14:29:54 +01:00
c490c81a32 use substituteInPlace 2025-12-25 09:38:06 +01:00
6ac4d821b8 use finalAttrs 2025-12-25 09:38:06 +01:00
7c9db88672 spotifyd: remove 2025-12-25 09:38:06 +01:00
35234846f5 name is set automatically from pname and version 2025-12-25 09:38:06 +01:00
36960bc547 set doCheck 2025-12-25 09:38:06 +01:00
bde513cc2c explicitly import nixpkgs-unstable 2025-12-25 09:38:06 +01:00
b4708cb31d filter src 2025-12-25 09:38:06 +01:00
936ae927b7 do not import nixpkgs with lookup path 2025-12-25 09:38:06 +01:00
07756a0660 remove rec 2025-12-25 09:38:06 +01:00
3bf70f8956 minimize usage of // 2025-12-25 09:38:06 +01:00
583bc83839 distrobump: remove 2025-12-25 08:14:37 +01:00
ec7f5f5bb1 networkmanager-declarative: remove 2025-12-25 08:13:48 +01:00
746a78ff8f remove @ pattern 2025-12-25 08:13:02 +01:00
8fd51be217 prometheus: monitor iching 2025-12-22 14:01:15 +01:00
6ac0c0bae4 prometheus: drop hu and fu monitoring 2025-12-22 14:01:06 +01:00
2eb69eb1fe update secrets 2025-12-22 13:59:11 +01:00
0b7308e602 dashboard: remove 2025-12-22 11:50:22 +01:00
f329f25992 picom: remove 2025-12-22 11:31:21 +01:00
11647db257 xsecurelock: replace slock, run before suspend 2025-12-22 11:31:21 +01:00
9f65360713 getty: add greeting 2025-12-22 11:27:56 +01:00
7c2e5533db remove fritzbox residue 2025-12-22 11:27:38 +01:00
32fa3e75ea mp3player-write 2025-12-22 08:51:07 +01:00
435aa4a365 secrets: update 2025-12-22 08:50:53 +01:00
8d955bf640 fatteh: configure systemd-boot 2025-12-22 08:50:44 +01:00
a44d15a166 nethack 2025-12-22 08:50:14 +01:00
b33e1d3569 zaatar: 25.11 2025-12-22 08:49:57 +01:00
cba0f92a7a zaatar: remove NAS 2025-12-22 08:49:35 +01:00
1f163d65cd atuin: remove 2025-12-22 08:40:28 +01:00
e816145b13 redshift: enable 2025-12-22 08:35:11 +01:00
4cb62b382b Merge remote-tracking branch 'origin/nethack' 2025-12-20 11:46:20 +01:00
ad2c922ab4 iching: init 2025-12-20 11:45:58 +01:00
a0f7867a25 tarot: generalize 2025-12-20 11:31:12 +01:00
dd75268d60 update secrets 2025-12-20 11:27:04 +01:00
118 changed files with 2572 additions and 4400 deletions

114
.bin/mp3player-write Executable file
View File

@@ -0,0 +1,114 @@
#!/usr/bin/env bash
# Usage:
# ./mp3_transfer.sh -s 1.3 /mnt/mp3player file1.m4a file2.m4a ...
set -e
# Default speed
SPEED=1.0
# Parse options
while getopts ":s:" opt; do
case $opt in
s)
SPEED=$OPTARG
;;
\?)
echo "Invalid option: -$OPTARG" >&2
exit 1
;;
:)
echo "Option -$OPTARG requires a value." >&2
exit 1
;;
esac
done
# Shift past the options
shift $((OPTIND -1))
# Check arguments
if [ "$#" -lt 2 ]; then
echo "Usage: $0 [-s speed] MOUNT_POINT FILE1 [FILE2 ...]"
exit 1
fi
MOUNT_POINT=$1
shift
FILES=("$@")
# Check mount point exists
if [ ! -d "$MOUNT_POINT" ]; then
echo "Error: Mount point '$MOUNT_POINT' does not exist."
exit 1
fi
# Estimate required space
TOTAL_SIZE=0
for f in "${FILES[@]}"; do
if [ ! -f "$f" ]; then
echo "Warning: File '$f' does not exist, skipping."
continue
fi
# Get file size in bytes
FILE_SIZE=$(stat --printf="%s" "$f")
# Estimate mp3 output size: roughly 1/2 of original m4a (adjust if needed)
TOTAL_SIZE=$((TOTAL_SIZE + FILE_SIZE / 2))
done
# Get available space in bytes
AVAILABLE=$(df --output=avail "$MOUNT_POINT" | tail -n 1)
AVAILABLE=$((AVAILABLE * 1024)) # df reports in KB
if [ "$TOTAL_SIZE" -gt "$AVAILABLE" ]; then
echo "Error: Not enough space on device. Required: $TOTAL_SIZE bytes, Available: $AVAILABLE bytes"
exit 1
fi
echo "Enough space available. Starting conversion..."
sanitize_filename() {
local name="$1"
# Remove path, keep only base name
name=$(basename "$name" .m4a)
# Replace spaces and special chars with underscore
name=$(echo "$name" | tr ' ' '_' | tr -cd '[:alnum:]_-')
# Truncate to max 50 chars
echo "${name:0:50}"
}
# Convert and copy files
for f in "${FILES[@]}"; do
if [ ! -f "$f" ]; then
continue
fi
# Determine the next prefix
existing_prefixes=$(ls "$MOUNT_POINT" | grep -E '^[0-9].*\.mp3$' | sed -E 's/^([0-9]).*/\1/' | sort -n | uniq)
for i in {0..9}; do
if ! echo "$existing_prefixes" | grep -q "^$i$"; then
PREFIX=$i
break
fi
done
echo "Using prefix: $PREFIX"
BASENAME=$(sanitize_filename "$f")
OUT_PATTERN="$MOUNT_POINT/${PREFIX}%02d_${BASENAME}.mp3"
echo "Converting '$f' to '$OUT_PATTERN' at speed $SPEED..."
ffmpeg -i "$f" \
-filter:a "atempo=$SPEED" -ar 44100 -ac 2 -c:a libmp3lame -b:a 128k \
-f segment -segment_time 300 \
"$OUT_PATTERN"
# Update prefix for next file
# Count how many segments were created
SEG_COUNT=$(ls "$MOUNT_POINT" | grep -E "^${PREFIX}[0-9]{2}_" | wc -l)
PREFIX=$((PREFIX + SEG_COUNT))
done
echo "All files processed successfully."

View File

@@ -12,3 +12,6 @@
> das ist ja pure poesie —[riotbib](https://github.com/riotbib/) > das ist ja pure poesie —[riotbib](https://github.com/riotbib/)
> Deine Configs sind wunderschön <3 —[flxai](https://github.com/flxai/) > Deine Configs sind wunderschön <3 —[flxai](https://github.com/flxai/)
## To do
- [ ] get rid of `nixinate`

View File

@@ -1,6 +1,5 @@
{ {
pkgs, pkgs,
niveumPackages,
lib, lib,
... ...
}: let }: let
@@ -37,12 +36,12 @@ in {
pkgs.bc # calculator pkgs.bc # calculator
pkgs.pari # gp -- better calculator pkgs.pari # gp -- better calculator
pkgs.ts pkgs.ts
niveumPackages.vimv pkgs.vimv
niveumPackages.vg pkgs.vg
niveumPackages.fkill pkgs.fkill
niveumPackages.cyberlocker-tools pkgs.cyberlocker-tools
niveumPackages.untilport pkgs.untilport
niveumPackages.kpaste pkgs.kpaste
# HARDWARE # HARDWARE
pkgs.pciutils # for lspci pkgs.pciutils # for lspci
] ]
@@ -69,12 +68,19 @@ in {
}; };
}; };
environment.interactiveShellInit = ''
# Use XDG_RUNTIME_DIR for temporary files if available
if [ -d "$XDG_RUNTIME_DIR" ]; then
export TMPDIR="$XDG_RUNTIME_DIR"
fi
'';
environment.shellAliases = let environment.shellAliases = let
take = pkgs.writers.writeDash "take" '' take = pkgs.writers.writeDash "take" ''
mkdir "$1" && cd "$1" mkdir "$1" && cd "$1"
''; '';
cdt = pkgs.writers.writeDash "cdt" '' cdt = pkgs.writers.writeDash "cdt" ''
cd "$(mktemp -d)" cd $(mktemp -p "$XDG_RUNTIME_DIR" -d "cdt-XXXXXX")
pwd pwd
''; '';
wcd = pkgs.writers.writeDash "wcd" '' wcd = pkgs.writers.writeDash "wcd" ''
@@ -85,7 +91,7 @@ in {
''; '';
in in
{ {
nixi = "nix repl '<nixpkgs>'"; nixi = "nix repl nixpkgs";
take = "source ${take}"; take = "source ${take}";
wcd = "source ${wcd}"; wcd = "source ${wcd}";
where = "source ${where}"; where = "source ${where}";

View File

@@ -2,11 +2,9 @@
pkgs, pkgs,
config, config,
lib, lib,
niveumPackages,
... ...
}: let }:
inherit (import ../lib/email.nix) defaults thunderbirdProfile; {
in {
age.secrets = { age.secrets = {
email-password-ical-ephemeris = { email-password-ical-ephemeris = {
file = ../secrets/email-password-ical-ephemeris.age; file = ../secrets/email-password-ical-ephemeris.age;
@@ -43,14 +41,15 @@ in {
extraConfig = { extraConfig = {
database.path = config.home-manager.users.me.accounts.email.maildirBasePath; database.path = config.home-manager.users.me.accounts.email.maildirBasePath;
new.tags = ""; new.tags = "";
user.name = defaults.realName; user.name = pkgs.lib.niveum.email.defaults.realName;
user.primary_email = config.home-manager.users.me.accounts.email.accounts.posteo.address; user.primary_email = config.home-manager.users.me.accounts.email.accounts.posteo.address;
}; };
}; };
programs.mbsync = { programs.mbsync = {
enable = true; enable = true;
extraConfig = lib.concatStringsSep "\n\n" (lib.mapAttrsToList (name: account: '' extraConfig = lib.concatStringsSep "\n\n" (
lib.mapAttrsToList (name: account: ''
IMAPAccount ${name} IMAPAccount ${name}
CertificateFile /etc/ssl/certs/ca-certificates.crt CertificateFile /etc/ssl/certs/ca-certificates.crt
Host ${account.imap.host} Host ${account.imap.host}
@@ -74,30 +73,35 @@ in {
Patterns * Patterns *
Remove None Remove None
SyncState * SyncState *
'') '') config.home-manager.users.me.accounts.email.accounts
config.home-manager.users.me.accounts.email.accounts); );
}; };
accounts.email.accounts = { accounts.email.accounts = {
cock = cock =
lib.recursiveUpdate defaults let
rec { mailhost = "mail.cock.li";
address = "2210@cock.li"; address = "2210@cock.li";
in
lib.recursiveUpdate pkgs.lib.niveum.email.defaults {
address = address;
userName = address; userName = address;
passwordCommand = "${pkgs.coreutils}/bin/cat ${config.age.secrets.email-password-cock.path}"; passwordCommand = "${pkgs.coreutils}/bin/cat ${config.age.secrets.email-password-cock.path}";
realName = "2210"; realName = "2210";
imap.host = "mail.cock.li"; imap.host = mailhost;
imap.port = 993; imap.port = 993;
smtp.host = imap.host; smtp.host = mailhost;
smtp.port = 25; smtp.port = 25;
smtp.tls.useStartTls = true; smtp.tls.useStartTls = true;
}; };
ical-ephemeris = ical-ephemeris =
lib.recursiveUpdate defaults let
rec { address = "ical.ephemeris@web.de";
userName = "ical.ephemeris@web.de"; in
lib.recursiveUpdate pkgs.lib.niveum.email.defaults {
userName = address;
realName = "Kieran from iCal Ephemeris"; realName = "Kieran from iCal Ephemeris";
address = userName; address = address;
passwordCommand = "${pkgs.coreutils}/bin/cat ${config.age.secrets.email-password-ical-ephemeris.path}"; passwordCommand = "${pkgs.coreutils}/bin/cat ${config.age.secrets.email-password-ical-ephemeris.path}";
imap.host = "imap.web.de"; imap.host = "imap.web.de";
imap.port = 993; imap.port = 993;
@@ -106,15 +110,18 @@ in {
smtp.tls.useStartTls = true; smtp.tls.useStartTls = true;
}; };
posteo = posteo =
lib.recursiveUpdate defaults let
rec { mailhost = "posteo.de";
address = "kieran.meinhardt@posteo.net"; address = "kieran.meinhardt@posteo.net";
aliases = ["kmein@posteo.de"]; in
lib.recursiveUpdate pkgs.lib.niveum.email.defaults {
address = address;
aliases = [ "kmein@posteo.de" ];
userName = address; userName = address;
imap.host = "posteo.de"; imap.host = mailhost;
imap.port = 993; imap.port = 993;
imap.tls.enable = true; imap.tls.enable = true;
smtp.host = imap.host; smtp.host = mailhost;
smtp.port = 465; smtp.port = 465;
smtp.tls.enable = true; smtp.tls.enable = true;
primary = true; primary = true;
@@ -133,7 +140,7 @@ in {
enable = true; enable = true;
settings = { settings = {
}; };
profiles.${thunderbirdProfile} = { profiles.${pkgs.lib.niveum.email.thunderbirdProfile} = {
isDefault = true; isDefault = true;
settings = { settings = {
"mail.default_send_format" = 1; "mail.default_send_format" = 1;
@@ -141,10 +148,8 @@ in {
"msgcompose.text_color" = config.lib.stylix.colors.withHashtag.base00; "msgcompose.text_color" = config.lib.stylix.colors.withHashtag.base00;
"msgcompose.background_color" = config.lib.stylix.colors.withHashtag.base05; "msgcompose.background_color" = config.lib.stylix.colors.withHashtag.base05;
}; };
userChrome = '' userChrome = '''';
''; userContent = '''';
userContent = ''
'';
withExternalGnupg = false; withExternalGnupg = false;
}; };
}; };
@@ -206,7 +211,7 @@ in {
"*" = ":filter -x Flagged<Enter>"; "*" = ":filter -x Flagged<Enter>";
}; };
view = { view = {
tr = ":pipe ${niveumPackages.trans}/bin/trans -show-original n -b -no-autocorrect<Enter>"; # https://man.sr.ht/~rjarry/aerc/integrations/translator.md tr = ":pipe ${pkgs.trans}/bin/trans -show-original n -b -no-autocorrect<Enter>"; # https://man.sr.ht/~rjarry/aerc/integrations/translator.md
"/" = ":toggle-key-passthrough <Enter> /"; "/" = ":toggle-key-passthrough <Enter> /";
q = ":close<Enter>"; q = ":close<Enter>";
O = ":open<Enter>"; O = ":open<Enter>";
@@ -279,7 +284,9 @@ in {
ui.spinner = ". , ."; ui.spinner = ". , .";
general.unsafe-accounts-conf = true; general.unsafe-accounts-conf = true;
general.pgp-provider = "gpg"; general.pgp-provider = "gpg";
viewer = {pager = "${pkgs.less}/bin/less -R";}; viewer = {
pager = "${pkgs.less}/bin/less -R";
};
compose = { compose = {
# address-book-cmd = "khard email --remove-first-line --parsable '%s'"; # address-book-cmd = "khard email --remove-first-line --parsable '%s'";
no-attachment-warning = "(attach|attached|attachments?|anbei|Anhang|angehängt|beigefügt)"; no-attachment-warning = "(attach|attached|attachments?|anbei|Anhang|angehängt|beigefügt)";
@@ -296,24 +303,26 @@ in {
"message/rfc822" = "${pkgs.aerc}/libexec/aerc/filters/colorize"; "message/rfc822" = "${pkgs.aerc}/libexec/aerc/filters/colorize";
"application/x-sh" = "${pkgs.bat}/bin/bat -fP -l sh"; "application/x-sh" = "${pkgs.bat}/bin/bat -fP -l sh";
}; };
openers = let openers =
as-pdf = pkgs.writers.writeDash "as-pdf" '' let
d=$(mktemp -d) as-pdf = pkgs.writers.writeDash "as-pdf" ''
trap clean EXIT d=$(mktemp -p "$XDG_RUNTIME_DIR" -d)
clean() { trap clean EXIT
rm -rf "$d" clean() {
} rm -rf "$d"
${pkgs.libreoffice}/bin/libreoffice --headless --convert-to pdf "$1" --outdir "$d" }
${pkgs.zathura}/bin/zathura "$d"/*.pdf ${pkgs.libreoffice}/bin/libreoffice --headless --convert-to pdf "$1" --outdir "$d"
''; ${pkgs.zathura}/bin/zathura "$d"/*.pdf
in { '';
"image/*" = "${pkgs.nsxiv}/bin/nsxiv"; in
"application/pdf" = "${pkgs.zathura}/bin/zathura"; {
"application/vnd.openxmlformats-officedocument.wordprocessingml.document" = toString as-pdf; "image/*" = "${pkgs.nsxiv}/bin/nsxiv";
"application/vnd.oasis.opendocument.text" = toString as-pdf; "application/pdf" = "${pkgs.zathura}/bin/zathura";
"video/*" = "${pkgs.mpv}/bin/mpv"; "application/vnd.openxmlformats-officedocument.wordprocessingml.document" = toString as-pdf;
"audio/*" = "${pkgs.mpv}/bin/mpv"; "application/vnd.oasis.opendocument.text" = toString as-pdf;
}; "video/*" = "${pkgs.mpv}/bin/mpv";
"audio/*" = "${pkgs.mpv}/bin/mpv";
};
}; };
templates = { templates = {

View File

@@ -1,13 +1,13 @@
{ {
pkgs, pkgs,
config, config,
lib,
... ...
}: let }:
inherit (import ../lib) restic; {
in {
services.restic.backups.niveum = { services.restic.backups.niveum = {
initialize = true; initialize = true;
inherit (restic) repository; repository = pkgs.lib.niveum.restic.repository;
timerConfig = { timerConfig = {
OnCalendar = "8:00"; OnCalendar = "8:00";
RandomizedDelaySec = "1h"; RandomizedDelaySec = "1h";
@@ -38,15 +38,15 @@ in {
environment.systemPackages = [ environment.systemPackages = [
(pkgs.writers.writeDashBin "restic-niveum" '' (pkgs.writers.writeDashBin "restic-niveum" ''
${pkgs.restic}/bin/restic -r ${restic.repository} -p ${config.age.secrets.restic.path} "$@" ${pkgs.restic}/bin/restic -r ${pkgs.lib.niveum.restic.repository} -p ${config.age.secrets.restic.path} "$@"
'') '')
(pkgs.writers.writeDashBin "restic-mount" '' (pkgs.writers.writeDashBin "restic-mount" ''
mountdir=$(mktemp -d) mountdir=$(mktemp -p "$XDG_RUNTIME_DIR" -d "restic-mount-XXXXXXX")
trap clean EXIT trap clean EXIT
clean() { clean() {
rm -r "$mountdir" rm -r "$mountdir"
} }
${pkgs.restic}/bin/restic -r ${restic.repository} -p ${config.age.secrets.restic.path} mount "$mountdir" ${pkgs.restic}/bin/restic -r ${pkgs.lib.niveum.restic.repository} -p ${config.age.secrets.restic.path} mount "$mountdir"
'') '')
]; ];
} }

View File

@@ -8,7 +8,6 @@
telebots = inputs.telebots.defaultPackage.x86_64-linux; telebots = inputs.telebots.defaultPackage.x86_64-linux;
reverseDirectory = "/run/telegram-reverse"; reverseDirectory = "/run/telegram-reverse";
proverbDirectory = "/run/telegram-proverb"; proverbDirectory = "/run/telegram-proverb";
inherit (import ../../lib) tmpfilesConfig;
in { in {
imports = [ imports = [
./logotheca.nix ./logotheca.nix
@@ -27,7 +26,7 @@ in {
}; };
systemd.tmpfiles.rules = map (path: systemd.tmpfiles.rules = map (path:
tmpfilesConfig { pkgs.lib.niveum.tmpfilesConfig {
type = "d"; type = "d";
mode = "0750"; mode = "0750";
age = "1h"; age = "1h";

View File

@@ -1,8 +1,6 @@
{ {
pkgs, pkgs,
config, config,
lib,
niveumPackages,
... ...
}: { }: {
niveum.bots.logotheca = { niveum.bots.logotheca = {
@@ -22,7 +20,7 @@
"!zlwCuPiCNMSxDviFzA:4d2.org" "!zlwCuPiCNMSxDviFzA:4d2.org"
]; ];
}; };
command = "${niveumPackages.literature-quote}/bin/literature-quote"; command = "${pkgs.literature-quote}/bin/literature-quote";
}; };
age.secrets = { age.secrets = {

View File

@@ -1,7 +1,6 @@
{ {
config, config,
pkgs, pkgs,
niveumPackages,
... ...
}: { }: {
niveum.bots.nietzsche = { niveum.bots.nietzsche = {
@@ -16,9 +15,9 @@
set -efu set -efu
random_number=$(( ($RANDOM % 10) + 1 )) random_number=$(( ($RANDOM % 10) + 1 ))
if [ "$random_number" -eq 1 ]; then if [ "$random_number" -eq 1 ]; then
${niveumPackages.random-zeno}/bin/random-zeno "/Literatur/M/Nietzsche,+Friedrich" ${pkgs.random-zeno}/bin/random-zeno "/Literatur/M/Nietzsche,+Friedrich"
else else
${niveumPackages.random-zeno}/bin/random-zeno "/Philosophie/M/Nietzsche,+Friedrich" ${pkgs.random-zeno}/bin/random-zeno "/Philosophie/M/Nietzsche,+Friedrich"
fi fi
''); '');
}; };

View File

@@ -1,9 +1,6 @@
{ {
pkgs, pkgs,
lib,
config, config,
niveumPackages,
unstablePackages,
... ...
}: let }: let
mastodonEndpoint = "https://social.krebsco.de"; mastodonEndpoint = "https://social.krebsco.de";

View File

@@ -1,11 +1,10 @@
{ {
config, config,
pkgs, pkgs,
niveumPackages,
... ...
}: { }: {
environment.systemPackages = [ environment.systemPackages = [
niveumPackages.cro pkgs.cro
pkgs.tor-browser pkgs.tor-browser
pkgs.firefox pkgs.firefox
pkgs.brave pkgs.brave

View File

@@ -1,8 +1,9 @@
{pkgs, ...}: {pkgs, ...}:
# https://paste.sr.ht/~erictapen/11716989e489b600f237041b6d657fdf0ee17b34 # https://paste.sr.ht/~erictapen/11716989e489b600f237041b6d657fdf0ee17b34
let let
certificate = pkgs.stdenv.mkDerivation rec { name = "dst-root-ca-x3.pem";
name = "dst-root-ca-x3.pem"; certificate = pkgs.stdenv.mkDerivation {
inherit name;
src = builtins.toFile "${name}.sed" '' src = builtins.toFile "${name}.sed" ''
1,/DST Root CA X3/d 1,/DST Root CA X3/d
1,/-----END CERTIFICATE-----/p 1,/-----END CERTIFICATE-----/p

View File

@@ -3,9 +3,7 @@
lib, lib,
pkgs, pkgs,
... ...
}: let }: {
inherit (import ../lib) tmpfilesConfig;
in {
systemd.user.services.systemd-tmpfiles-clean = { systemd.user.services.systemd-tmpfiles-clean = {
enable = true; enable = true;
wantedBy = [ "default.target" ]; wantedBy = [ "default.target" ];
@@ -16,7 +14,7 @@ in {
}; };
}; };
systemd.user.tmpfiles.users.me.rules = map tmpfilesConfig [ systemd.user.tmpfiles.users.me.rules = map pkgs.lib.niveum.tmpfilesConfig [
{ {
type = "d"; type = "d";
mode = "0755"; mode = "0755";
@@ -29,7 +27,7 @@ in {
age = "7d"; age = "7d";
path = "${config.users.users.me.home}/cloud/nextcloud/tmp"; path = "${config.users.users.me.home}/cloud/nextcloud/tmp";
} }
] ++ map (path: tmpfilesConfig { ] ++ map (path: pkgs.lib.niveum.tmpfilesConfig {
type = "L+"; type = "L+";
user = config.users.users.me.name; user = config.users.users.me.name;
group = config.users.users.me.group; group = config.users.users.me.group;
@@ -91,7 +89,7 @@ in {
selection="$(${megatools "ls"} | ${pkgs.fzf}/bin/fzf)" selection="$(${megatools "ls"} | ${pkgs.fzf}/bin/fzf)"
test -n "$selection" || exit 1 test -n "$selection" || exit 1
tmpdir="$(mktemp -d)" tmpdir="$(mktemp -p "$XDG_RUNTIME_DIR" -d)"
trap clean EXIT trap clean EXIT
clean() { clean() {
rm -rf "$tmpdir" rm -rf "$tmpdir"
@@ -121,7 +119,7 @@ in {
cert = config.age.secrets.syncthing-cert.path; cert = config.age.secrets.syncthing-cert.path;
key = config.age.secrets.syncthing-key.path; key = config.age.secrets.syncthing-key.path;
settings = { settings = {
inherit ((import ../lib).syncthing) devices; devices = pkgs.lib.niveum.syncthingIds;
folders = { folders = {
"${config.users.users.me.home}/sync" = { "${config.users.users.me.home}/sync" = {
devices = ["kabsa" "manakish" "fatteh"]; devices = ["kabsa" "manakish" "fatteh"];

View File

@@ -2,14 +2,11 @@
pkgs, pkgs,
lib, lib,
config, config,
niveumPackages,
inputs, inputs,
... ...
}: }:
let let
inherit (lib.strings) makeBinPath; inherit (lib.strings) makeBinPath;
inherit (import ../lib) localAddresses kieran remoteDir;
defaultApplications = (import ../lib).defaultApplications { inherit pkgs; };
in in
{ {
imports = [ imports = [
@@ -68,7 +65,7 @@ in
users.users.me = { users.users.me = {
name = "kfm"; name = "kfm";
description = kieran.name; description = pkgs.lib.niveum.kieran.name;
hashedPasswordFile = config.age.secrets.kfm-password.path; hashedPasswordFile = config.age.secrets.kfm-password.path;
isNormalUser = true; isNormalUser = true;
uid = 1000; uid = 1000;
@@ -90,7 +87,7 @@ in
environment.interactiveShellInit = "export PATH=$PATH"; environment.interactiveShellInit = "export PATH=$PATH";
environment.shellAliases = environment.shellAliases =
let let
swallow = command: "${niveumPackages.swallow}/bin/swallow ${command}"; swallow = command: "${pkgs.swallow}/bin/swallow ${command}";
in in
{ {
o = "${pkgs.xdg-utils}/bin/xdg-open"; o = "${pkgs.xdg-utils}/bin/xdg-open";
@@ -140,9 +137,9 @@ in
agent = { agent = {
enable = true; enable = true;
pinentryPackage = pkgs.pinentry-qt; pinentryPackage = pkgs.pinentry-qt;
settings = rec { settings = let defaultCacheTtl = 2 * 60 * 60; in {
default-cache-ttl = 2 * 60 * 60; default-cache-ttl = defaultCacheTtl;
max-cache-ttl = 4 * default-cache-ttl; max-cache-ttl = 4 * defaultCacheTtl;
}; };
}; };
}; };
@@ -161,7 +158,7 @@ in
} }
{ {
services.getty = { services.getty = {
greetingLine = lib.mkForce ""; greetingLine = lib.mkForce "As-salamu alaykum wa rahmatullahi wa barakatuh!";
helpLine = lib.mkForce ""; helpLine = lib.mkForce "";
}; };
} }
@@ -169,7 +166,7 @@ in
networking.hosts = lib.mapAttrs' (name: address: { networking.hosts = lib.mapAttrs' (name: address: {
name = address; name = address;
value = [ "${name}.local" ]; value = [ "${name}.local" ];
}) localAddresses; }) pkgs.lib.niveum.localAddresses;
} }
{ {
home-manager.users.me.home.stateVersion = "22.05"; home-manager.users.me.home.stateVersion = "22.05";
@@ -190,7 +187,7 @@ in
dconf.enable = true; dconf.enable = true;
dconf.settings = { dconf.settings = {
# Change the default terminal for Nemo # Change the default terminal for Nemo
"org/cinnamon/desktop/applications/terminal".exec = defaultApplications.terminal; "org/cinnamon/desktop/applications/terminal".exec = lib.getExe pkgs.niveum-terminal;
}; };
}; };
} }
@@ -218,10 +215,9 @@ in
./uni.nix ./uni.nix
./i3.nix ./i3.nix
./i3status-rust.nix ./i3status-rust.nix
./keyboard.nix ./keyboard
./mycelium.nix ./mycelium.nix
./kdeconnect.nix ./kdeconnect.nix
{ home-manager.users.me.home.file.".XCompose".source = ../lib/keyboards/XCompose; }
{ services.upower.enable = true; } { services.upower.enable = true; }
./lb.nix ./lb.nix
./mpv.nix ./mpv.nix
@@ -232,7 +228,6 @@ in
./flameshot.nix ./flameshot.nix
./packages.nix ./packages.nix
./virtualization.nix ./virtualization.nix
./picom.nix
./stardict.nix ./stardict.nix
./polkit.nix ./polkit.nix
./printing.nix ./printing.nix
@@ -257,36 +252,17 @@ in
} }
./tor.nix ./tor.nix
./mastodon-bot.nix ./mastodon-bot.nix
{
fileSystems."${remoteDir}/fritz" = {
device = "//192.168.178.1/FRITZ.NAS/Backup";
fsType = "cifs";
options = [
"username=ftpuser"
"password=ftppassword"
"noauto"
"nounix"
"rw"
# "noserverino" # ref https://askubuntu.com/a/1265165
"uid=${toString config.users.users.me.uid}"
"gid=${toString config.users.groups.users.gid}"
"x-systemd.automount"
"x-systemd.device-timeout=1"
"x-systemd.idle-timeout=1min"
];
};
}
{ {
home-manager.users.me = { home-manager.users.me = {
xdg.userDirs = rec { xdg.userDirs = let pictures = "${config.users.users.me.home}/cloud/nextcloud/Bilder"; in {
enable = true; enable = true;
documents = "${config.users.users.me.home}/cloud/nextcloud/Documents"; documents = "${config.users.users.me.home}/cloud/nextcloud/Documents";
desktop = "/tmp"; desktop = "/tmp";
download = "${config.users.users.me.home}/sync/Downloads"; download = "${config.users.users.me.home}/sync/Downloads";
music = "${config.users.users.me.home}/mobile/audio"; music = "${config.users.users.me.home}/mobile/audio";
pictures = "${config.users.users.me.home}/cloud/nextcloud/Bilder";
publicShare = "${config.users.users.me.home}/cloud/nextcloud/tmp"; publicShare = "${config.users.users.me.home}/cloud/nextcloud/tmp";
videos = pictures; videos = pictures;
pictures = pictures;
}; };
}; };
} }

View File

@@ -1,15 +0,0 @@
{
lib,
config,
pkgs,
...
}: {
imports = [
(import <stockholm/makefu/3modules/bump-distrowatch.nix> {
inherit lib config;
pkgs = pkgs // {writeDash = pkgs.writers.writeDash;};
})
];
makefu.distrobump.enable = false;
}

View File

@@ -1,9 +1,8 @@
{ {
config, lib,
pkgs, pkgs,
... ...
}: let }: let
inherit (import ../lib) defaultApplications theme;
sgr = code: string: ''\u001b[${code}m${string}\u001b[0m''; sgr = code: string: ''\u001b[${code}m${string}\u001b[0m'';
in { in {
environment.systemPackages = [ environment.systemPackages = [
@@ -18,7 +17,7 @@ in {
home-manager.users.me.services.dunst = { home-manager.users.me.services.dunst = {
enable = true; enable = true;
iconTheme = (theme pkgs).icon; iconTheme = pkgs.lib.niveum.theme.icon;
settings = { settings = {
global = { global = {
transparency = 10; transparency = 10;
@@ -44,7 +43,7 @@ in {
sticky_history = true; sticky_history = true;
history_length = 20; history_length = 20;
dmenu = "${pkgs.rofi}/bin/rofi -display-run dunst -show run"; dmenu = "${pkgs.rofi}/bin/rofi -display-run dunst -show run";
browser = (defaultApplications pkgs).browser; browser = lib.getExe pkgs.niveum-browser;
verbosity = "mesg"; verbosity = "mesg";
corner_radius = 0; corner_radius = 0;
mouse_left_click = "do_action"; mouse_left_click = "do_action";

View File

@@ -1,6 +1,5 @@
{ {
pkgs, pkgs,
niveumPackages,
... ...
}: let }: let
zip-font = name: arguments: let zip-font = name: arguments: let
@@ -93,7 +92,6 @@ in {
font-awesome font-awesome
galatia-sil galatia-sil
gentium gentium
# niveumPackages.gfs-fonts
gyre-fonts gyre-fonts
ibm-plex ibm-plex
jetbrains-mono jetbrains-mono
@@ -114,16 +112,16 @@ in {
source-sans-pro source-sans-pro
source-serif-pro source-serif-pro
theano theano
niveumPackages.tocharian-font tocharian-font
vista-fonts vista-fonts
vollkorn vollkorn
zilla-slab zilla-slab
]; # google-fonts league-of-moveable-type ]; # google-fonts league-of-moveable-type
fontconfig.defaultFonts = rec { fontconfig.defaultFonts = let emoji = ["Noto Color Emoji"]; in {
monospace = ["Noto Sans Mono"] ++ emoji; monospace = ["Noto Sans Mono"] ++ emoji;
serif = ["Noto Serif" "Noto Naskh Arabic" "Noto Serif Devanagari"]; 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"]; sansSerif = ["Noto Sans Display" "Noto Naskh Arabic" "Noto Sans Hebrew" "Noto Sans Devanagari" "Noto Sans CJK JP" "Noto Sans Coptic" "Noto Sans Syriac Western"];
emoji = ["Noto Color Emoji"]; inherit emoji;
}; };
# xelatex fails with woff files # 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 # ref https://tex.stackexchange.com/questions/392144/xelatex-and-fontspec-crash-trying-to-find-woff-file-for-some-fonts-but-not-other

View File

@@ -1,55 +0,0 @@
{
config,
lib,
pkgs,
...
}: let
inherit (import ../lib/email.nix) defaults;
sshIdentity = name: "${config.users.users.me.home}/.ssh/${name}";
in {
age.secrets = {
email-password-fysi = {
file = ../secrets/email-password-fysi.age;
owner = config.users.users.me.name;
group = config.users.users.me.group;
mode = "400";
};
};
home-manager.users.me = {
accounts.email.accounts = {
fysi =
lib.recursiveUpdate defaults
rec {
address = "kieran@fysi.tech";
userName = address;
passwordCommand = "${pkgs.coreutils}/bin/cat ${config.age.secrets.email-password-fysi.path}";
flavor = "fastmail.com";
};
};
programs.ssh.matchBlocks = rec {
"nextcloud.fysi.dev" = {
hostname = "116.203.82.203";
user = "root";
};
"lingua.miaengiadina.ch" = {
hostname = "135.181.85.233";
user = "root";
};
"cms-dev.woc2023.app".identityFile = sshIdentity "fysiweb";
"cms-master.woc2023.app".identityFile = sshIdentity "fysiweb";
"fysi-dev1" = {
hostname = "94.130.229.139";
user = "root";
identityFile = sshIdentity "fysiweb";
};
${fysi-dev1.hostname} = fysi-dev1;
"fysi-shared0" = {
hostname = "49.12.205.235";
user = "root";
identityFile = sshIdentity "fysiweb";
};
};
};
}

View File

@@ -5,9 +5,11 @@
}; };
home-manager.users.me = { home-manager.users.me = {
programs.fzf = rec { programs.fzf = let
enable = true;
defaultCommand = "${pkgs.fd}/bin/fd --type f --strip-cwd-prefix --follow --no-ignore-vcs --exclude .git"; defaultCommand = "${pkgs.fd}/bin/fd --type f --strip-cwd-prefix --follow --no-ignore-vcs --exclude .git";
in {
enable = true;
defaultCommand = defaultCommand;
defaultOptions = ["--height=40%"]; defaultOptions = ["--height=40%"];
changeDirWidgetCommand = "${pkgs.fd}/bin/fd --type d"; changeDirWidgetCommand = "${pkgs.fd}/bin/fd --type d";
changeDirWidgetOptions = [ changeDirWidgetOptions = [

View File

@@ -4,6 +4,12 @@
pkgs.zeroad pkgs.zeroad
pkgs.mari0 pkgs.mari0
pkgs.luanti # fka minetest pkgs.luanti # fka minetest
# pkgs.openarena
# pkgs.teeworlds
pkgs.nethack
# pkgs.freeciv
# pkgs.lincity-ng
# pkgs.superTuxKart
]; ];
networking.firewall = { networking.firewall = {
# for 0ad multiplayer # for 0ad multiplayer

View File

@@ -1,10 +1,9 @@
{ {
pkgs, pkgs,
inputs, lib,
... ...
}: let }:
inherit (import ../lib) kieran ignorePaths; {
in {
environment.systemPackages = [ environment.systemPackages = [
pkgs.mr pkgs.mr
pkgs.gitFull pkgs.gitFull
@@ -41,9 +40,9 @@ in {
logs = "log --pretty=oneline"; logs = "log --pretty=oneline";
graph = "log --graph --abbrev-commit --decorate --date=relative --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)' --all"; graph = "log --graph --abbrev-commit --decorate --date=relative --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)' --all";
}; };
ignores = ignorePaths; ignores = pkgs.lib.niveum.ignorePaths;
settings.user.name = kieran.name; settings.user.name = pkgs.lib.niveum.kieran.name;
settings.user.email = kieran.email; settings.user.email = pkgs.lib.niveum.kieran.email;
settings.pull.ff = "only"; settings.pull.ff = "only";
settings.rebase.autoStash = true; settings.rebase.autoStash = true;
settings.merge.autoStash = true; settings.merge.autoStash = true;

View File

@@ -2,18 +2,11 @@
config, config,
pkgs, pkgs,
lib, lib,
niveumPackages,
... ...
}: let }: let
dashboard = pkgs.writers.writeDashBin "dashboard" '' klem = pkgs.klem.override {
${pkgs.alacritty}/bin/alacritty --option font.size=4 --class dashboard --command ${pkgs.writers.writeDash "dashboard-inner" '' options.dmenu = "${pkgs.dmenu}/bin/dmenu -i -p klem";
exec ${pkgs.procps}/bin/watch -c -n 10 ${niveumPackages.q}/bin/q options.scripts = {
''}
'';
inherit (import ../lib) defaultApplications;
klem = niveumPackages.klem.override {
config.dmenu = "${pkgs.dmenu}/bin/dmenu -i -p klem";
config.scripts = {
"p.r paste" = pkgs.writers.writeDash "p.r" '' "p.r paste" = pkgs.writers.writeDash "p.r" ''
${pkgs.curl}/bin/curl -fSs http://p.r --data-binary @- \ ${pkgs.curl}/bin/curl -fSs http://p.r --data-binary @- \
| ${pkgs.coreutils}/bin/tail --lines=1 \ | ${pkgs.coreutils}/bin/tail --lines=1 \
@@ -42,10 +35,10 @@
${pkgs.coreutils}/bin/tr '[A-Za-z]' '[N-ZA-Mn-za-m]' ${pkgs.coreutils}/bin/tr '[A-Za-z]' '[N-ZA-Mn-za-m]'
''; '';
"ipa" = pkgs.writers.writeDash "ipa" '' "ipa" = pkgs.writers.writeDash "ipa" ''
${niveumPackages.ipa}/bin/ipa ${pkgs.ipa}/bin/ipa
''; '';
"betacode" = pkgs.writers.writeDash "betacode" '' "betacode" = pkgs.writers.writeDash "betacode" ''
${niveumPackages.betacode}/bin/betacode ${pkgs.betacode}/bin/betacode
''; '';
"curl" = pkgs.writers.writeDash "curl" '' "curl" = pkgs.writers.writeDash "curl" ''
${pkgs.curl}/bin/curl -fSs "$(${pkgs.coreutils}/bin/cat)" ${pkgs.curl}/bin/curl -fSs "$(${pkgs.coreutils}/bin/cat)"
@@ -56,12 +49,6 @@
emojai = pkgs.writers.writeDash "emojai" '' emojai = pkgs.writers.writeDash "emojai" ''
${pkgs.curl}/bin/curl https://www.emojai.app/api/generate -X POST -H 'Content-Type: application/json' --data-raw "$(${pkgs.jq}/bin/jq -sR '{emoji:.}')" | ${pkgs.jq}/bin/jq -r .result ${pkgs.curl}/bin/curl https://www.emojai.app/api/generate -X POST -H 'Content-Type: application/json' --data-raw "$(${pkgs.jq}/bin/jq -sR '{emoji:.}')" | ${pkgs.jq}/bin/jq -r .result
''; '';
"gpt-3.5" = pkgs.writers.writeDash "gpt" ''
${niveumPackages.gpt35}/bin/gpt
'';
gpt-4 = pkgs.writers.writeDash "gpt" ''
${niveumPackages.gpt4}/bin/gpt
'';
}; };
}; };
in { in {
@@ -86,9 +73,14 @@ in {
}; };
}; };
programs.slock.enable = true; environment.systemPackages = [
pkgs.xsecurelock
environment.systemPackages = [dashboard]; ];
environment.sessionVariables = {
XSECURELOCK_NO_COMPOSITE = "1";
XSECURELOCK_BACKGROUND_COLOR = "navy";
XSECURELOCK_PASSWORD_PROMPT = "time_hex";
};
services.displayManager.defaultSession = "none+i3"; services.displayManager.defaultSession = "none+i3";
services.xserver = { services.xserver = {
@@ -113,7 +105,6 @@ in {
''; '';
}; };
home-manager.users.me = let home-manager.users.me = let
modifier = "Mod4"; modifier = "Mod4";
infoWorkspace = ""; infoWorkspace = "";
@@ -131,12 +122,12 @@ in {
titlebar = false; titlebar = false;
border = 1; border = 1;
}; };
bars = [ bars = let position = "bottom"; in [
(config.home-manager.users.me.stylix.targets.i3.exportedBarConfig (lib.recursiveUpdate config.home-manager.users.me.stylix.targets.i3.exportedBarConfig
// rec { {
workspaceButtons = true; workspaceButtons = true;
mode = "hide"; # "dock"; mode = "hide"; # "dock";
position = "bottom"; inherit position;
statusCommand = toString (pkgs.writers.writeDash "i3status-rust" '' statusCommand = toString (pkgs.writers.writeDash "i3status-rust" ''
export I3RS_GITHUB_TOKEN="$(cat ${config.age.secrets.github-token-i3status-rust.path})" export I3RS_GITHUB_TOKEN="$(cat ${config.age.secrets.github-token-i3status-rust.path})"
export OPENWEATHERMAP_API_KEY="$(cat ${config.age.secrets.openweathermap-api-key.path})" export OPENWEATHERMAP_API_KEY="$(cat ${config.age.secrets.openweathermap-api-key.path})"
@@ -225,15 +216,15 @@ in {
"${modifier}+w" = "layout tabbed"; "${modifier}+w" = "layout tabbed";
"${modifier}+q" = "exec ${config.services.clipmenu.package}/bin/clipmenu"; "${modifier}+q" = "exec ${config.services.clipmenu.package}/bin/clipmenu";
"${modifier}+Return" = "exec ${(defaultApplications pkgs).terminal}"; "${modifier}+Return" = "exec ${lib.getExe pkgs.niveum-terminal}";
"${modifier}+t" = "exec ${(defaultApplications pkgs).fileManager}"; "${modifier}+t" = "exec ${lib.getExe pkgs.niveum-filemanager}";
"${modifier}+y" = "exec ${(defaultApplications pkgs).browser}"; "${modifier}+y" = "exec ${lib.getExe pkgs.niveum-browser}";
"${modifier}+d" = "exec ${pkgs.writers.writeDash "run" ''exec rofi -modi run,ssh,window -show run''}"; "${modifier}+d" = "exec ${pkgs.writers.writeDash "run" ''exec rofi -modi run,ssh,window -show run''}";
"${modifier}+Shift+d" = "exec ${niveumPackages.notemenu}/bin/notemenu"; "${modifier}+Shift+d" = "exec ${pkgs.notemenu}/bin/notemenu";
"${modifier}+p" = "exec rofi-pass"; "${modifier}+p" = "exec rofi-pass";
"${modifier}+Shift+p" = "exec rofi-pass --insert"; "${modifier}+Shift+p" = "exec rofi-pass --insert";
"${modifier}+u" = "exec ${niveumPackages.unicodmenu}/bin/unicodmenu"; "${modifier}+u" = "exec ${pkgs.unicodmenu}/bin/unicodmenu";
"${modifier}+Shift+u" = "exec ${pkgs.writers.writeDash "last-unicode" ''${pkgs.xdotool}/bin/xdotool type --delay 1000 "$(${pkgs.gawk}/bin/awk 'END{print $1}' ~/.cache/unicodmenu)"''}"; "${modifier}+Shift+u" = "exec ${pkgs.writers.writeDash "last-unicode" ''${pkgs.xdotool}/bin/xdotool type --delay 1000 "$(${pkgs.gawk}/bin/awk 'END{print $1}' ~/.cache/unicodmenu)"''}";
"${modifier}+F7" = "exec ${pkgs.writers.writeDash "showkeys-toggle" '' "${modifier}+F7" = "exec ${pkgs.writers.writeDash "showkeys-toggle" ''
@@ -253,7 +244,6 @@ in {
"XF86AudioNext" = "exec ${pkgs.playerctl}/bin/playerctl next"; "XF86AudioNext" = "exec ${pkgs.playerctl}/bin/playerctl next";
"XF86AudioPrev" = "exec ${pkgs.playerctl}/bin/playerctl previous"; "XF86AudioPrev" = "exec ${pkgs.playerctl}/bin/playerctl previous";
"XF86AudioStop" = "exec ${pkgs.playerctl}/bin/playerctl stop"; "XF86AudioStop" = "exec ${pkgs.playerctl}/bin/playerctl stop";
"XF86ScreenSaver" = "exec ${niveumPackages.k-lock}/bin/k-lock";
# key names detected with xorg.xev: # key names detected with xorg.xev:
# XF86WakeUp (fn twice) # XF86WakeUp (fn twice)
@@ -275,7 +265,7 @@ in {
xsession.windowManager.i3 = { xsession.windowManager.i3 = {
enable = true; enable = true;
extraConfig = '' extraConfig = ''
bindsym --release ${modifier}+Shift+w exec /run/wrappers/bin/slock bindsym --release ${modifier}+Shift+w exec xsecurelock
exec "${pkgs.obsidian}/bin/obsidian" exec "${pkgs.obsidian}/bin/obsidian"
for_window [class="obsidian"] , move scratchpad for_window [class="obsidian"] , move scratchpad
@@ -284,13 +274,11 @@ in {
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 "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 "${pkgs.writers.writeDash "email" "exec ${pkgs.alacritty}/bin/alacritty --class message -e aerc"}"
assign [class="dashboard"] ${infoWorkspace} exec --no-startup-id ${pkgs.xss-lock}/bin/xss-lock -- xsecurelock
exec ${dashboard}/bin/dashboard
''; '';
config = { config = {
inherit modifier gaps modes bars floating window colors; inherit modifier gaps modes bars floating window colors;
keybindings = keybindings // { keybindings = keybindings // {
"${modifier}+ß" = "exec ${niveumPackages.menu-calc}/bin/=";
"${modifier}+F6" = "exec ${pkgs.xorg.xkill}/bin/xkill"; "${modifier}+F6" = "exec ${pkgs.xorg.xkill}/bin/xkill";
"${modifier}+F9" = "exec ${pkgs.redshift}/bin/redshift -O 4000 -b 0.85"; "${modifier}+F9" = "exec ${pkgs.redshift}/bin/redshift -O 4000 -b 0.85";
"${modifier}+F10" = "exec ${pkgs.redshift}/bin/redshift -x"; "${modifier}+F10" = "exec ${pkgs.redshift}/bin/redshift -x";
@@ -298,7 +286,7 @@ in {
"Print" = "exec flameshot gui"; "Print" = "exec flameshot gui";
# "${modifier}+Shift+x" = "exec ${move-to-new-workspace}"; # "${modifier}+Shift+x" = "exec ${move-to-new-workspace}";
# "${modifier}+x" = "exec ${new-workspace}"; # "${modifier}+x" = "exec ${new-workspace}";
"XF86Display" = "exec ${niveumPackages.dmenu-randr}/bin/dmenu-randr"; "XF86Display" = "exec ${pkgs.dmenu-randr}/bin/dmenu-randr";
}; };
}; };
}; };

View File

@@ -1,4 +1,5 @@
{ {
config,
pkgs, pkgs,
lib, lib,
... ...
@@ -27,10 +28,10 @@ let
arabic = { arabic = {
code = "ara"; code = "ara";
variant = "buckwalter"; variant = "buckwalter";
}; # ../lib/keyboards/arabic; };
coptic = ../lib/keyboards/coptic; coptic = ./coptic;
avestan = ../lib/keyboards/avestan; avestan = ./avestan;
gothic = ../lib/keyboards/gothic; gothic = ./gothic;
farsi = { farsi = {
code = "ir"; code = "ir";
variant = "qwerty"; variant = "qwerty";
@@ -63,40 +64,42 @@ in
# man 7 xkeyboard-config # man 7 xkeyboard-config
services.xserver = { services.xserver = {
exportConfiguration = true; # link /usr/share/X11 properly exportConfiguration = lib.mkForce true; # link /usr/share/X11 properly
xkb.layout = defaultLanguage.code; xkb.layout = defaultLanguage.code;
# T3: https://upload.wikimedia.org/wikipedia/commons/a/a9/German-Keyboard-Layout-T3-Version1-large.png # T3: https://upload.wikimedia.org/wikipedia/commons/a/a9/German-Keyboard-Layout-T3-Version1-large.png
# buckwalter: http://www.qamus.org/transliteration.htm # buckwalter: http://www.qamus.org/transliteration.htm
xkb.variant = defaultLanguage.variant; xkb.variant = defaultLanguage.variant;
xkb.options = commaSep xkbOptions; xkb.options = commaSep xkbOptions;
xkb.dir = pkgs.symlinkJoin { xkb.extraLayouts = {
name = "x-keyboard-directory"; coptic = {
paths = [ languages = [ "cop" ];
"${pkgs.xkeyboard_config}/etc/X11/xkb" description = "Coptic is the latest stage of the Egyptian language and was used by Egyptian Christians. The Coptic script is based on the Greek alphabet with some letters borrowed from Demotic Egyptian.";
(pkgs.linkFarm "custom-x-keyboards" ( symbolsFile = ./coptic;
lib.mapAttrsToList (name: value: { };
name = "symbols/${name}"; avestan = {
path = value; languages = [ "ave" ];
}) (lib.filterAttrs (_: value: !(value ? "code")) languages) description = "Avestan is an ancient Iranian language known primarily from its use in the sacred texts of Zoroastrianism, the Avesta. It is an Indo-Iranian language that was spoken in ancient Persia.";
++ [ symbolsFile = ./avestan;
{ };
name = "symbols/ir"; gothic = {
path = ../lib/keyboards/farsi; languages = [ "got" ];
} description = "Gothic is an extinct East Germanic language that was spoken by the Goths. It is known primarily from the Codex Argenteus, a 6th-century manuscript containing a translation of the Bible into Gothic.";
] symbolsFile = ./gothic;
)) };
]; farsi = {
languages = [ "fas" ];
description = "Farsi, also known as Persian, is an Indo-Iranian language spoken primarily in Iran, Afghanistan (where it is known as Dari), and Tajikistan (where it is called Tajik). It has a rich literary tradition and is written in a modified Arabic script.";
symbolsFile = ./farsi;
};
}; };
}; };
environment.etc."x11-locale".source = toString pkgs.xorg.libX11 + "share/X11/locale"; environment.etc."x11-locale".source = toString pkgs.xorg.libX11 + "share/X11/locale";
home-manager.users.me = { home-manager.users.me = {
home.file = home.file = {
lib.mapAttrs' (name: path: lib.nameValuePair ".xkb/symbols/${name}" { source = path; }) ".XCompose".source = ./XCompose;
(lib.filterAttrs (_: value: !(value ? "code")) languages) // { };
".xkb/symbols/ir".source = ../lib/keyboards/farsi;
};
}; };
console.keyMap = "de"; console.keyMap = "de";
@@ -118,7 +121,7 @@ in
swaymsg -s $SWAYSOCK 'input * xkb_options "${lib.concatStringsSep "," xkbOptions}"' swaymsg -s $SWAYSOCK 'input * xkb_options "${lib.concatStringsSep "," xkbOptions}"'
fi fi
'' ''
) languages; ) (languages // config.services.xserver.xkb.extraLayouts);
# improve held key rate # improve held key rate
services.xserver.displayManager.sessionCommands = "${pkgs.xorg.xset}/bin/xset r rate 300 50"; services.xserver.displayManager.sessionCommands = "${pkgs.xorg.xset}/bin/xset r rate 300 50";

View File

@@ -10,11 +10,6 @@
username = "kieran"; username = "kieran";
passwordFile = config.age.secrets.nextcloud-password-kieran.path; passwordFile = config.age.secrets.nextcloud-password-kieran.path;
}; };
fysiCloud = {
davEndpoint = "https://nextcloud.fysi.dev/remote.php/dav";
username = "kmein";
passwordFile = config.age.secrets.nextcloud-password-fysi.path;
};
in { in {
age.secrets = { age.secrets = {
nextcloud-password-kieran = { nextcloud-password-kieran = {

View File

@@ -2,10 +2,9 @@
pkgs, pkgs,
lib, lib,
config, config,
niveumPackages,
... ...
}: let }: let
swallow = command: "${niveumPackages.swallow}/bin/swallow ${command}"; swallow = command: "${pkgs.swallow}/bin/swallow ${command}";
in { in {
environment.shellAliases.smpv = swallow "mpv"; environment.shellAliases.smpv = swallow "mpv";

View File

@@ -1,7 +1,4 @@
{ lib, ... }: { lib, pkgs, ... }:
let
myceliumAddresses = import ../lib/mycelium-network.nix;
in
{ {
services.mycelium = { services.mycelium = {
enable = true; enable = true;
@@ -11,5 +8,5 @@ in
networking.hosts = lib.mapAttrs' (name: address: { networking.hosts = lib.mapAttrs' (name: address: {
name = address; name = address;
value = [ "${name}.m" ]; value = [ "${name}.m" ];
}) myceliumAddresses; }) pkgs.lib.niveum.myceliumAddresses;
} }

View File

@@ -1,12 +1,15 @@
{ {
pkgs, pkgs,
niveumPackages, lib,
config, config,
... ...
}: { }: let
environment.variables.EDITOR = pkgs.lib.mkForce "nvim"; vim-kmein = (pkgs.vim-kmein.override {
environment.shellAliases.vi = "nvim"; # stylixColors = config.lib.stylix.colors;
environment.shellAliases.vim = "nvim"; colorscheme = "base16-gruvbox-dark-medium";
});
in {
environment.variables.EDITOR = lib.getExe vim-kmein;
environment.shellAliases.view = "nvim -R"; environment.shellAliases.view = "nvim -R";
home-manager.users.me = { home-manager.users.me = {
@@ -35,11 +38,8 @@
}; };
environment.systemPackages = [ environment.systemPackages = [
(pkgs.writers.writeDashBin "vim" ''neovim "$@"'') pkgs.vim-typewriter
(niveumPackages.vim.override { vim-kmein
# stylixColors = config.lib.stylix.colors;
colorscheme = "base16-gruvbox-dark-medium";
})
# language servers # language servers
pkgs.pyright pkgs.pyright

View File

@@ -3,13 +3,10 @@
pkgs, pkgs,
lib, lib,
inputs, inputs,
niveumPackages,
... ...
}: let }: let
worldradio = pkgs.callPackage ../packages/worldradio.nix {}; worldradio = pkgs.callPackage ../packages/worldradio.nix {};
externalNetwork = import ../lib/external-network.nix;
zoteroStyle = { zoteroStyle = {
name, name,
sha256, sha256,
@@ -109,7 +106,7 @@ in {
calibre calibre
electrum electrum
inkscape inkscape
niveumPackages.gimp gimp
gthumb gthumb
astrolog astrolog
obsidian obsidian
@@ -120,7 +117,7 @@ in {
zoom-us # video conferencing zoom-us # video conferencing
(pkgs.writers.writeDashBin "im" '' (pkgs.writers.writeDashBin "im" ''
weechat_password=$(${pkgs.pass}/bin/pass weechat) weechat_password=$(${pkgs.pass}/bin/pass weechat)
exec ${weechat}/bin/weechat -t -r '/mouse enable; /remote add makanek http://${externalNetwork.makanek}:8002 -password='"$weechat_password"'; /remote connect makanek' exec ${weechat}/bin/weechat -t -r '/mouse enable; /remote add makanek http://${pkgs.lib.niveum.systems.makanek.externalIp}:8002 -password='"$weechat_password"'; /remote connect makanek'
'') '')
alejandra # nix formatter alejandra # nix formatter
pdfgrep # search in pdf pdfgrep # search in pdf
@@ -130,60 +127,59 @@ in {
kdePackages.okular # the word is nucular kdePackages.okular # the word is nucular
xournalpp # for annotating pdfs xournalpp # for annotating pdfs
pdfpc # presenter console for pdf slides pdfpc # presenter console for pdf slides
niveumPackages.hc # print files as qr codes hc # print files as qr codes
yt-dlp yt-dlp
espeak espeak
rink # unit converter rink # unit converter
niveumPackages.auc auc
niveumPackages.noise-waves noise-waves
niveumPackages.stag stag
niveumPackages.cheat-sh cheat-sh
niveumPackages.polyglot polyglot
niveumPackages.qrpaste qrpaste
niveumPackages.ttspaste ttspaste
niveumPackages.new-mac # get a new mac address new-mac # get a new mac address
niveumPackages.scanned scanned
niveumPackages.default-gateway default-gateway
niveumPackages.kirciuoklis kirciuoklis
niveumPackages.image-convert-favicon image-convert-favicon
niveumPackages.heuretes heuretes
niveumPackages.ipa # XSAMPA to IPA converter ipa # XSAMPA to IPA converter
niveumPackages.pls pls
niveumPackages.mpv-tv mpv-tv
niveumPackages.mpv-iptv mpv-iptv
niveumPackages.devanagari devanagari
niveumPackages.betacode # ancient greek betacode to unicode converter betacode # ancient greek betacode to unicode converter
pkgs.jq-lsp jq-lsp
niveumPackages.swallow # window swallowing swallow # window swallowing
niveumPackages.literature-quote literature-quote
niveumPackages.booksplit booksplit
niveumPackages.dmenu-randr dmenu-randr
niveumPackages.manual-sort manual-sort
niveumPackages.wttr wttr
niveumPackages.unicodmenu unicodmenu
niveumPackages.emailmenu emailmenu
niveumPackages.closest closest
niveumPackages.trans trans
(niveumPackages.mpv-radio.override { (mpv-radio.override {
di-fm-key-file = config.age.secrets.di-fm-key.path; di-fm-key-file = config.age.secrets.di-fm-key.path;
}) })
(niveumPackages.mpv-radio.override { (mpv-radio.override {
di-fm-key-file = config.age.secrets.di-fm-key.path; di-fm-key-file = config.age.secrets.di-fm-key.path;
executableName = "cro-radio"; executableName = "cro-radio";
mpvCommand = "${niveumPackages.cro}/bin/cro"; mpvCommand = "${cro}/bin/cro";
}) })
(niveumPackages.mpv-tuner.override { (mpv-tuner.override {
di-fm-key-file = config.age.secrets.di-fm-key.path; di-fm-key-file = config.age.secrets.di-fm-key.path;
}) })
# kmein.slide # kmein.slide
termdown termdown
niveumPackages.image-convert-tolino image-convert-tolino
niveumPackages.rfc rfc
niveumPackages.tag tag
niveumPackages.timer timer
niveumPackages.menu-calc
nix-prefetch-git nix-prefetch-git
niveumPackages.nix-git nix-git
nixfmt-rfc-style nixfmt-rfc-style
par par
qrencode qrencode
@@ -239,7 +235,7 @@ in {
latexrun latexrun
(aspellWithDicts (dict: [dict.de dict.en dict.en-computers])) (aspellWithDicts (dict: [dict.de dict.en dict.en-computers]))
# haskellPackages.pandoc-citeproc # haskellPackages.pandoc-citeproc
niveumPackages.text2pdf text2pdf
lowdown lowdown
glow # markdown to term glow # markdown to term
libreoffice libreoffice
@@ -247,7 +243,7 @@ in {
dia dia
pandoc pandoc
librsvg # pandoc depends on this to include SVG in documents librsvg # pandoc depends on this to include SVG in documents
# niveumPackages.man-pandoc # man-pandoc
typst typst
# proselint # proselint
asciidoctor asciidoctor

View File

@@ -1,25 +0,0 @@
{
services.picom = {
enable = true;
# activeOpacity = 1;
fade = true;
fadeDelta = 1;
# inactiveOpacity = 0.9;
# shadow = true;
# menuOpacity = 0.9;
# shadowOpacity = 0.3;
fadeExclude = [
"class_g = 'slock'" # don't want a transparent lock screen!
"name *?= 'slock'"
"focused = 1"
];
opacityRules = [
# opacity-rule overrides both inactive and active opacity
# video in browser tabs
# substring /regex match of title bar text
"99:name *?= 'Youtube'"
"99:WM_CLASS@:s *= 'mpv$'"
];
};
}

View File

@@ -1,5 +1,4 @@
{pkgs, ...}: let {pkgs, lib, ...}: let
inherit (import ../lib) localAddresses;
hp-driver = pkgs.hplip; hp-driver = pkgs.hplip;
in { in {
services.printing = { services.printing = {
@@ -18,7 +17,7 @@ in {
{ {
name = "OfficeJet"; name = "OfficeJet";
location = "Zimmer"; location = "Zimmer";
deviceUri = "https://${localAddresses.officejet}"; deviceUri = "https://${pkgs.lib.niveum.localAddresses.officejet}";
model = "drv:///hp/hpcups.drv/hp-officejet_4650_series.ppd"; model = "drv:///hp/hpcups.drv/hp-officejet_4650_series.ppd";
ppdOptions = { ppdOptions = {
Duplex = "DuplexNoTumble"; # DuplexNoTumble DuplexTumble None Duplex = "DuplexNoTumble"; # DuplexNoTumble DuplexTumble None

View File

@@ -1 +1 @@
{services.redshift.enable = false;} { services.redshift.enable = true; }

View File

@@ -1,8 +1,6 @@
{pkgs, ...}: let { pkgs, lib, ... }:
inherit (import ../lib) sshPort kieran; {
externalNetwork = import ../lib/external-network.nix; users.users.me.openssh.authorizedKeys.keys = pkgs.lib.niveum.kieran.sshKeys;
in {
users.users.me.openssh.authorizedKeys.keys = kieran.sshKeys;
programs.ssh.startAgent = true; programs.ssh.startAgent = true;
services.gnome.gcr-ssh-agent.enable = false; services.gnome.gcr-ssh-agent.enable = false;
@@ -12,33 +10,8 @@ in {
eval $(${pkgs.gnome3.gnome-keyring}/bin/gnome-keyring-daemon --daemonize --components=ssh,secrets) eval $(${pkgs.gnome3.gnome-keyring}/bin/gnome-keyring-daemon --daemonize --components=ssh,secrets)
export SSH_AUTH_SOCK export SSH_AUTH_SOCK
''; '';
# services.gpg-agent = rec {
# enable = false;
# enableSshSupport = true;
# defaultCacheTtlSsh = 2 * 60 * 60;
# maxCacheTtlSsh = 4 * defaultCacheTtlSsh;
# sshKeys = [
# "568047C91DE03A23883E340F15A9C24D313E847C"
# "BB3EE102DB8CD45540A78A6B18B511B67061F6B4" # kfm@manakish ed25519
# "3F8986755818B5762A096BE212777EAAC441DD9D" # fysiweb rsa
# "0E4ABD229432486CC432639BB0986B2CDE365105" # agenix ed25519
# "A1E8D32CBFCDBD2DE798E2298D795CCFD785AE06" # kfm@kabsa ed25519
# ];
# };
}; };
# environment.extraInit = ''
# if [[ -z "$SSH_AUTH_SOCK" ]]; then
# export SSH_AUTH_SOCK="$(${pkgs.gnupg}/bin/gpgconf --list-dirs agent-ssh-socket)"
# fi
# '';
# environment.interactiveShellInit = ''
# GPG_TTY="$(tty)"
# export GPG_TTY
# ${pkgs.gnupg}/bin/gpg-connect-agent updatestartuptty /bye > /dev/null
# '';
home-manager.users.me.programs.ssh = { home-manager.users.me.programs.ssh = {
enable = true; enable = true;
enableDefaultConfig = false; enableDefaultConfig = false;
@@ -50,42 +23,42 @@ in {
zaatar = { zaatar = {
hostname = "zaatar.r"; hostname = "zaatar.r";
user = "root"; user = "root";
port = sshPort; port = pkgs.lib.niveum.sshPort;
}; };
makanek = { makanek = {
hostname = externalNetwork.makanek; hostname = pkgs.lib.niveum.externalNetwork.makanek;
user = "root"; user = "root";
port = sshPort; port = pkgs.lib.niveum.sshPort;
}; };
ful = { ful = {
hostname = externalNetwork.ful; hostname = pkgs.lib.niveum.externalNetwork.ful;
user = "root"; user = "root";
port = sshPort; port = pkgs.lib.niveum.sshPort;
}; };
tahina = { tahina = {
hostname = "tahina.r"; hostname = "tahina.r";
user = "root"; user = "root";
port = sshPort; port = pkgs.lib.niveum.sshPort;
}; };
tabula = { tabula = {
hostname = "tabula.r"; hostname = "tabula.r";
user = "root"; user = "root";
port = sshPort; port = pkgs.lib.niveum.sshPort;
}; };
manakish = { manakish = {
hostname = "manakish.r"; hostname = "manakish.r";
user = "kfm"; user = "kfm";
port = sshPort; port = pkgs.lib.niveum.sshPort;
}; };
kabsa = { kabsa = {
hostname = "kabsa.r"; hostname = "kabsa.r";
user = "kfm"; user = "kfm";
port = sshPort; port = pkgs.lib.niveum.sshPort;
}; };
fatteh = { fatteh = {
hostname = "fatteh.r"; hostname = "fatteh.r";
user = "kfm"; user = "kfm";
port = sshPort; port = pkgs.lib.niveum.sshPort;
}; };
}; };
}; };

View File

@@ -1,23 +1,21 @@
{ {
config, config,
lib,
pkgs, pkgs,
... ...
}: let }:
inherit (import ../lib) sshPort kieran; {
in {
users.motd = "Welcome to ${config.networking.hostName}!"; users.motd = "Welcome to ${config.networking.hostName}!";
services.openssh = { services.openssh = {
enable = true; enable = true;
ports = [sshPort]; ports = [ pkgs.lib.niveum.sshPort ];
settings = { settings = {
PasswordAuthentication = false; PasswordAuthentication = false;
X11Forwarding = true; X11Forwarding = true;
}; };
}; };
users.users.root.openssh.authorizedKeys.keys = kieran.sshKeys ++ [ users.users.root.openssh.authorizedKeys.keys = pkgs.lib.niveum.kieran.sshKeys ++ [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPoiRIn1dBUtpApcUyGbZKN+m5KBSgKIDQjdnQ8vU0xU kfm@kibbeh" # travel laptop "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPoiRIn1dBUtpApcUyGbZKN+m5KBSgKIDQjdnQ8vU0xU kfm@kibbeh" # travel laptop
]; ];
} }

View File

@@ -5,13 +5,11 @@
... ...
}: let }: let
username = "meinhak99"; username = "meinhak99";
inherit (import ../lib/email.nix) defaults pronouns; fu-defaults = let mailhost = "mail.zedat.fu-berlin.de"; in {
inherit (import ../lib) remoteDir; imap.host = mailhost;
fu-defaults = rec {
imap.host = "mail.zedat.fu-berlin.de";
imap.port = 993; imap.port = 993;
imap.tls.enable = true; imap.tls.enable = true;
smtp.host = imap.host; smtp.host = mailhost;
smtp.port = 465; smtp.port = 465;
smtp.tls.enable = true; smtp.tls.enable = true;
folders.drafts = "Entwürfe"; folders.drafts = "Entwürfe";
@@ -31,7 +29,7 @@ in {
}; };
accounts.email.accounts = { accounts.email.accounts = {
letos = letos =
lib.recursiveUpdate defaults lib.recursiveUpdate pkgs.lib.niveum.email.defaults
{ {
userName = "slfletos"; userName = "slfletos";
address = "letos.sprachlit@hu-berlin.de"; address = "letos.sprachlit@hu-berlin.de";
@@ -43,10 +41,10 @@ in {
smtp.tls.useStartTls = true; smtp.tls.useStartTls = true;
}; };
fu = fu =
lib.recursiveUpdate defaults lib.recursiveUpdate pkgs.lib.niveum.email.defaults
(lib.recursiveUpdate fu-defaults (lib.recursiveUpdate fu-defaults
rec { (let userName = "meinhak99"; in {
userName = "meinhak99"; userName = userName;
address = "kieran.meinhardt@fu-berlin.de"; address = "kieran.meinhardt@fu-berlin.de";
aliases = ["${userName}@fu-berlin.de"]; aliases = ["${userName}@fu-berlin.de"];
passwordCommand = "${pkgs.coreutils}/bin/cat ${config.age.secrets.email-password-meinhak99.path}"; passwordCommand = "${pkgs.coreutils}/bin/cat ${config.age.secrets.email-password-meinhak99.path}";
@@ -54,7 +52,7 @@ in {
enable = true; enable = true;
settings.backend = "imap"; settings.backend = "imap";
}; };
}); }));
}; };
}; };
@@ -100,7 +98,7 @@ in {
firstCharacter = lib.strings.substring 0 1; firstCharacter = lib.strings.substring 0 1;
home-directory-mount = user: { home-directory-mount = user: {
"${remoteDir}/fu/${user}/home" = { "${pkgs.lib.niveum.remoteDir}/fu/${user}/home" = {
device = "${user}@login.zedat.fu-berlin.de:/home/${firstCharacter user}/${user}"; device = "${user}@login.zedat.fu-berlin.de:/home/${firstCharacter user}/${user}";
fsType = "sshfs"; fsType = "sshfs";
options = [ options = [

View File

@@ -6,15 +6,6 @@
promptColours.success = "cyan"; promptColours.success = "cyan";
promptColours.failure = "red"; promptColours.failure = "red";
in { in {
environment.systemPackages = [pkgs.atuin];
environment.variables.ATUIN_CONFIG_DIR = toString (pkgs.writeTextDir "/config.toml" ''
auto_sync = true
update_check = false
sync_address = "http://zaatar.r:8888"
sync_frequency = 0
style = "compact"
'');
programs.zsh = let programs.zsh = let
zsh-completions = pkgs.fetchFromGitHub { zsh-completions = pkgs.fetchFromGitHub {
owner = "zsh-users"; owner = "zsh-users";
@@ -67,13 +58,6 @@ in {
zstyle ':vcs_info:*' formats "%c%u%F{cyan}%b%f" zstyle ':vcs_info:*' formats "%c%u%F{cyan}%b%f"
zstyle ':vcs_info:*' actionformats "(%a) %c%u%F{cyan}%b%f" zstyle ':vcs_info:*' actionformats "(%a) %c%u%F{cyan}%b%f"
# atuin distributed shell history
export ATUIN_NOBIND="true" # disable all keybdinings of atuin
eval "$(atuin init zsh)"
bindkey '^r' _atuin_search_widget # bind ctrl+r to atuin
# use zsh only session history
fc -p
precmd () { precmd () {
vcs_info vcs_info
if [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ] || [ -n "$SSH_CONNECTION" ]; then if [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ] || [ -n "$SSH_CONNECTION" ]; then

39
flake.lock generated
View File

@@ -456,24 +456,7 @@
}, },
"flake-utils_3": { "flake-utils_3": {
"inputs": { "inputs": {
"systems": "systems_3" "systems": "systems_4"
},
"locked": {
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
},
"original": {
"id": "flake-utils",
"type": "indirect"
}
},
"flake-utils_4": {
"inputs": {
"systems": "systems_5"
}, },
"locked": { "locked": {
"lastModified": 1731533236, "lastModified": 1731533236,
@@ -1393,7 +1376,6 @@
"agenix": "agenix", "agenix": "agenix",
"autorenkalender": "autorenkalender", "autorenkalender": "autorenkalender",
"coptic-dictionary": "coptic-dictionary", "coptic-dictionary": "coptic-dictionary",
"flake-utils": "flake-utils_3",
"home-manager": "home-manager_2", "home-manager": "home-manager_2",
"menstruation-backend": "menstruation-backend_2", "menstruation-backend": "menstruation-backend_2",
"menstruation-telegram": "menstruation-telegram_2", "menstruation-telegram": "menstruation-telegram_2",
@@ -1611,7 +1593,7 @@
"nixpkgs" "nixpkgs"
], ],
"nur": "nur_3", "nur": "nur_3",
"systems": "systems_4", "systems": "systems_3",
"tinted-foot": "tinted-foot", "tinted-foot": "tinted-foot",
"tinted-kitty": "tinted-kitty", "tinted-kitty": "tinted-kitty",
"tinted-schemes": "tinted-schemes", "tinted-schemes": "tinted-schemes",
@@ -1693,21 +1675,6 @@
"type": "github" "type": "github"
} }
}, },
"systems_5": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"telebots": { "telebots": {
"inputs": { "inputs": {
"flake-utils": "flake-utils_2", "flake-utils": "flake-utils_2",
@@ -1959,7 +1926,7 @@
}, },
"wallpaper-generator_2": { "wallpaper-generator_2": {
"inputs": { "inputs": {
"flake-utils": "flake-utils_4", "flake-utils": "flake-utils_3",
"nixpkgs": "nixpkgs_13" "nixpkgs": "nixpkgs_13"
}, },
"locked": { "locked": {

658
flake.nix
View File

@@ -44,7 +44,7 @@
}; };
outputs = outputs =
inputs@{ {
self, self,
nixpkgs, nixpkgs,
nixpkgs-unstable, nixpkgs-unstable,
@@ -53,9 +53,19 @@
agenix, agenix,
retiolum, retiolum,
nixinate, nixinate,
flake-utils, coptic-dictionary,
menstruation-backend,
menstruation-telegram,
scripts,
tinc-graph,
recht,
autorenkalender,
wallpaper-generator,
telebots,
stockholm,
nix-index-database, nix-index-database,
stylix, stylix,
voidrice,
... ...
}: }:
let let
@@ -69,61 +79,63 @@
pkgs = nixpkgs.legacyPackages.x86_64-linux; pkgs = nixpkgs.legacyPackages.x86_64-linux;
lib = nixpkgs.lib; lib = nixpkgs.lib;
in in
nixinate.nixinate.x86_64-linux self lib.mergeAttrsList [
// { (nixinate.nixinate.x86_64-linux self)
mock-secrets = { {
type = "app"; mock-secrets = {
program = toString (
pkgs.writers.writeDash "mock-secrets" ''
${pkgs.findutils}/bin/find secrets -not -path '*/.*' -type f | ${pkgs.coreutils}/bin/sort > secrets.txt
''
);
};
}
# the following error prevents remote building of ful: https://github.com/NixOS/nixpkgs/issues/177873
// builtins.listToAttrs (
map (
hostname:
let
targets = {
ful = "root@ful";
zaatar = "root@zaatar";
makanek = "root@makanek";
manakish = "root@manakish";
tahina = "root@tahina";
tabula = "root@tabula";
kabsa = "root@kabsa";
fatteh = "root@fatteh";
kibbeh = "root@kibbeh";
};
in
lib.attrsets.nameValuePair "deploy-${hostname}" {
type = "app"; type = "app";
program = toString ( program = toString (
pkgs.writers.writeDash "deploy-${hostname}" '' pkgs.writers.writeDash "mock-secrets" ''
exec ${pkgs.nixos-rebuild}/bin/nixos-rebuild switch \ ${pkgs.findutils}/bin/find secrets -not -path '*/.*' -type f | ${pkgs.coreutils}/bin/sort > secrets.txt
--max-jobs 2 \ ''
--log-format internal-json \ );
--flake .#${hostname} \ };
--target-host ${targets.${hostname}} 2>&1 \ }
# the following error prevents remote building of ful: https://github.com/NixOS/nixpkgs/issues/177873
(builtins.listToAttrs (
map (
hostname:
let
targets = {
ful = "root@ful";
zaatar = "root@zaatar";
makanek = "root@makanek";
manakish = "root@manakish";
tahina = "root@tahina";
tabula = "root@tabula";
kabsa = "root@kabsa";
fatteh = "root@fatteh";
kibbeh = "root@kibbeh";
};
in
lib.attrsets.nameValuePair "deploy-${hostname}" {
type = "app";
program = toString (
pkgs.writers.writeDash "deploy-${hostname}" ''
exec ${pkgs.nixos-rebuild}/bin/nixos-rebuild switch \
--max-jobs 2 \
--log-format internal-json \
--flake .#${hostname} \
--target-host ${targets.${hostname}} 2>&1 \
| ${pkgs.nix-output-monitor}/bin/nom --json
''
);
}
) (builtins.attrNames self.nixosConfigurations)
))
{
deploy-ful = {
type = "app";
program = toString (
pkgs.writers.writeDash "deploy-ful" ''
exec ${pkgs.nix}/bin/nix run .#nixinate.ful \
--log-format internal-json 2>&1 \
| ${pkgs.nix-output-monitor}/bin/nom --json | ${pkgs.nix-output-monitor}/bin/nom --json
'' ''
); );
} };
) (builtins.attrNames self.nixosConfigurations) }
) ];
// {
deploy-ful = {
type = "app";
program = toString (
pkgs.writers.writeDash "deploy-ful" ''
exec ${pkgs.nix}/bin/nix run .#nixinate.ful \
--log-format internal-json 2>&1 \
| ${pkgs.nix-output-monitor}/bin/nom --json
''
);
};
};
}; };
# TODO overlay for packages # TODO overlay for packages
@@ -131,7 +143,6 @@
nixosModules = { nixosModules = {
moodle-dl = import modules/moodle-dl.nix; moodle-dl = import modules/moodle-dl.nix;
networkmanager-declarative = import modules/networkmanager-declarative.nix;
passport = import modules/passport.nix; passport = import modules/passport.nix;
panoptikon = import modules/panoptikon.nix; panoptikon = import modules/panoptikon.nix;
power-action = import modules/power-action.nix; power-action = import modules/power-action.nix;
@@ -141,262 +152,321 @@
}; };
lib = { lib = {
panoptikon = import lib/panoptikon.nix;
}; };
nixosConfigurations = let overlays.default = final: prev: {
niveumSpecialArgs = system: { niveum-terminal = prev.alacritty;
unstablePackages = import nixpkgs-unstable { niveum-browser = prev.firefox;
inherit system; niveum-filemanager = prev.pcmanfm;
config.allowUnfreePredicate = pkg:
builtins.elem (nixpkgs-unstable.lib.getName pkg) [
"obsidian"
"zoom"
];
};
niveumPackages = inputs.self.packages.${system}; # wrapped from upstream
niveumLib = inputs.self.lib; wrapScript =
inherit inputs; {
packages ? [ ],
name,
script,
}:
prev.writers.writeDashBin name ''PATH=$PATH:${
nixpkgs.lib.makeBinPath (
packages
++ [
final.findutils
final.coreutils
final.gnused
final.gnugrep
]
)
} ${script} "$@"'';
tag = final.wrapScript {
script = voidrice.outPath + "/.local/bin/tag";
name = "tag";
packages = [ final.ffmpeg ];
}; };
in { booksplit = final.wrapScript {
ful = nixpkgs.lib.nixosSystem rec { script = voidrice.outPath + "/.local/bin/booksplit";
system = "aarch64-linux"; name = "booksplit";
specialArgs = niveumSpecialArgs system; packages = [
modules = [ final.ffmpeg
systems/ful/configuration.nix final.glibc.bin
agenix.nixosModules.default
inputs.self.nixosModules.passport
inputs.self.nixosModules.panoptikon
inputs.self.nixosModules.go-webring
inputs.stockholm.nixosModules.reaktor2
retiolum.nixosModules.retiolum
nur.modules.nixos.default
{ nixpkgs.overlays = [ inputs.stockholm.overlays.default ]; }
{
_module.args.nixinate = {
host = "ful";
sshUser = "root";
buildOn = "remote";
substituteOnTarget = true;
hermetic = false;
};
}
]; ];
}; };
zaatar = nixpkgs.lib.nixosSystem rec { auc = prev.callPackage packages/auc.nix { };
system = "x86_64-linux"; cheat-sh = prev.callPackage packages/cheat-sh.nix { };
specialArgs = niveumSpecialArgs system; brassica = prev.callPackage packages/brassica.nix { }; # TODO upstream
modules = [ text2pdf = prev.callPackage packages/text2pdf.nix { }; # TODO upstream
systems/zaatar/configuration.nix wttr = prev.callPackage packages/wttr.nix { }; # TODO upstream
agenix.nixosModules.default jsesh = prev.callPackage packages/jsesh.nix { }; # TODO upstream
retiolum.nixosModules.retiolum opustags = prev.callPackage packages/opustags.nix { }; # TODO upstream
trans = prev.callPackage packages/trans.nix { }; # TODO upstream
go-webring = prev.callPackage packages/go-webring.nix { }; # TODO upstream
stag = prev.callPackage packages/stag.nix { }; # TODO upstream
mpv = prev.mpv.override {
scripts = [
final.mpvScripts.visualizer
final.mpvScripts.mpris
]; ];
}; };
kibbeh = nixpkgs.lib.nixosSystem rec { cro = prev.callPackage packages/cro.nix { };
system = "x86_64-linux"; dmenu = prev.writers.writeDashBin "dmenu" ''exec ${final.rofi}/bin/rofi -dmenu "$@"'';
specialArgs = niveumSpecialArgs system; weechatScripts = prev.weechatScripts // {
modules = [ hotlist2extern = prev.callPackage packages/weechatScripts/hotlist2extern.nix { }; # TODO upstream
systems/kibbeh/configuration.nix
agenix.nixosModules.default
retiolum.nixosModules.retiolum
home-manager.nixosModules.home-manager
];
}; };
makanek = nixpkgs.lib.nixosSystem rec { vimPlugins = prev.vimPlugins // {
system = "x86_64-linux"; cheat-sh = prev.callPackage packages/vimPlugins/cheat-sh.nix { };
# for using inputs in other config files icalendar-vim = prev.callPackage packages/vimPlugins/icalendar-vim.nix { }; # TODO upstream
specialArgs = niveumSpecialArgs system; jq-vim = prev.callPackage packages/vimPlugins/jq-vim.nix { }; # TODO upstream
modules = [ typst-vim = prev.callPackage packages/vimPlugins/typst-vim.nix { }; # TODO upstream
systems/makanek/configuration.nix mdwa-nvim = prev.callPackage packages/vimPlugins/mdwa-nvim.nix { }; # TODO upstream
inputs.self.nixosModules.telegram-bot vim-ernest = prev.callPackage packages/vimPlugins/vim-ernest.nix { }; # TODO upstream
inputs.self.nixosModules.passport vim-256noir = prev.callPackage packages/vimPlugins/vim-256noir.nix { }; # TODO upstream
agenix.nixosModules.default vim-colors-paramount =
retiolum.nixosModules.retiolum prev.callPackage packages/vimPlugins/vim-colors-paramount.nix { }; # TODO upstream
nur.modules.nixos.default vim-fetch = prev.callPackage packages/vimPlugins/vim-fetch.nix { }; # TODO upstream
]; vim-fsharp = prev.callPackage packages/vimPlugins/vim-fsharp.nix { }; # TODO upstream
vim-mail = prev.callPackage packages/vimPlugins/vim-mail.nix { }; # TODO upstream
vim-reason-plus = prev.callPackage packages/vimPlugins/vim-reason-plus.nix { }; # TODO upstream
}; };
tahina = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux";
specialArgs = niveumSpecialArgs system;
modules = [
systems/tahina/configuration.nix
agenix.nixosModules.default
retiolum.nixosModules.retiolum
];
};
tabula = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux";
specialArgs = niveumSpecialArgs system;
modules = [
systems/tabula/configuration.nix
agenix.nixosModules.default
retiolum.nixosModules.retiolum
];
};
manakish = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux";
specialArgs = niveumSpecialArgs system;
modules = [
systems/manakish/configuration.nix
agenix.nixosModules.default
retiolum.nixosModules.retiolum
home-manager.nixosModules.home-manager
nix-index-database.nixosModules.default
nur.modules.nixos.default
stylix.nixosModules.stylix
];
};
kabsa = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux";
specialArgs = niveumSpecialArgs system;
modules = [
systems/kabsa/configuration.nix
agenix.nixosModules.default
retiolum.nixosModules.retiolum
home-manager.nixosModules.home-manager
nur.modules.nixos.default
nix-index-database.nixosModules.default
stylix.nixosModules.stylix
];
};
fatteh = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux";
specialArgs = niveumSpecialArgs system;
modules = [
systems/fatteh/configuration.nix
agenix.nixosModules.default
retiolum.nixosModules.retiolum
home-manager.nixosModules.home-manager
nur.modules.nixos.default
nix-index-database.nixosModules.default
stylix.nixosModules.stylix
];
};
};
packages = eachSupportedSystem (system: let
pkgs = import nixpkgs {
inherit system;
config.allowUnfree = true;
overlays = [
nur.overlays.default
(self: super: {
mpv = super.mpv.override {scripts = [super.mpvScripts.visualizer super.mpvScripts.mpris];};
dmenu = super.writers.writeDashBin "dmenu" ''exec ${pkgs.rofi}/bin/rofi -dmenu "$@"'';
})
];
};
wrapScript = {
packages ? [],
name,
script,
}:
pkgs.writers.writeDashBin name ''PATH=$PATH:${nixpkgs.lib.makeBinPath (packages ++ [pkgs.findutils pkgs.coreutils pkgs.gnused pkgs.gnugrep])} ${script} "$@"'';
in {
# linguistics and ancient world
auc = pkgs.callPackage packages/auc.nix {};
betacode = pkgs.callPackage packages/betacode.nix {};
brassica = pkgs.callPackage packages/brassica.nix {}; # TODO upstream
devanagari = pkgs.callPackage packages/devanagari {};
stardict-tools = pkgs.callPackage packages/stardict-tools.nix {};
heuretes = pkgs.callPackage packages/heuretes.nix {};
ipa = pkgs.writers.writePython3Bin "ipa" {flakeIgnore = ["E501"];} (builtins.readFile packages/ipa.py);
jsesh = pkgs.callPackage packages/jsesh.nix {}; # TODO upstream
kirciuoklis = pkgs.callPackage packages/kirciuoklis.nix {};
polyglot = pkgs.callPackage packages/polyglot.nix {};
tocharian-font = pkgs.callPackage packages/tocharian-font.nix {};
gfs-fonts = pkgs.callPackage packages/gfs-fonts.nix {};
closest = pkgs.callPackage packages/closest {};
# lit
random-zeno = pkgs.callPackage packages/random-zeno.nix {};
literature-quote = pkgs.callPackage packages/literature-quote.nix {};
# krebs # krebs
brainmelter = pkgs.callPackage packages/brainmelter.nix {}; brainmelter = prev.callPackage packages/brainmelter.nix { };
cyberlocker-tools = pkgs.callPackage packages/cyberlocker-tools.nix {}; cyberlocker-tools = prev.callPackage packages/cyberlocker-tools.nix { };
hc = pkgs.callPackage packages/hc.nix {}; hc = prev.callPackage packages/hc.nix { };
kpaste = pkgs.callPackage packages/kpaste.nix {}; pls = prev.callPackage packages/pls.nix { };
pls = pkgs.callPackage packages/pls.nix {}; radio-news = prev.callPackage packages/radio-news { };
untilport = pkgs.callPackage packages/untilport.nix {}; untilport = prev.callPackage packages/untilport.nix { };
radio-news = pkgs.callPackage packages/radio-news.nix {}; weechat-declarative = prev.callPackage packages/weechat-declarative.nix {};
# window manager # my packages
swallow = pkgs.callPackage packages/swallow.nix {}; betacode = prev.callPackage packages/betacode.nix { };
devour = pkgs.callPackage packages/devour.nix {}; closest = prev.callPackage packages/closest { };
default-gateway = prev.callPackage packages/default-gateway.nix { };
depp = prev.callPackage packages/depp.nix { };
devanagari = prev.callPackage packages/devanagari { };
radioStreams = prev.callPackage packages/streams {};
devour = prev.callPackage packages/devour.nix { };
dmenu-randr = prev.callPackage packages/dmenu-randr.nix { };
emailmenu = prev.callPackage packages/emailmenu.nix { };
fkill = prev.callPackage packages/fkill.nix { };
fzfmenu = prev.callPackage packages/fzfmenu.nix { };
gfs-fonts = prev.callPackage packages/gfs-fonts.nix { };
heuretes = prev.callPackage packages/heuretes.nix { };
image-convert-favicon = prev.callPackage packages/image-convert-favicon.nix { };
image-convert-tolino = prev.callPackage packages/image-convert-tolino.nix { };
ipa = prev.writers.writePython3Bin "ipa" { flakeIgnore = [ "E501" ]; } packages/ipa.py;
kirciuoklis = prev.callPackage packages/kirciuoklis.nix { };
kpaste = prev.callPackage packages/kpaste.nix { };
literature-quote = prev.callPackage packages/literature-quote.nix { };
man-pdf = prev.callPackage packages/man-pdf.nix { };
mansplain = prev.callPackage packages/mansplain.nix { };
manual-sort = prev.callPackage packages/manual-sort.nix { };
mpv-iptv = prev.callPackage packages/mpv-iptv.nix { };
mpv-radio = prev.callPackage packages/mpv-radio.nix { di-fm-key-file = "/dev/null"; };
mpv-tuner = prev.callPackage packages/mpv-tuner.nix { di-fm-key-file = "/dev/null"; };
mpv-tv = prev.callPackage packages/mpv-tv.nix { };
new-mac = prev.callPackage packages/new-mac.nix { };
nix-git = prev.callPackage packages/nix-git.nix { };
noise-waves = prev.callPackage packages/noise-waves.nix { };
notemenu = prev.callPackage packages/notemenu.nix { };
obsidian-vim = prev.callPackage packages/obsidian-vim.nix { };
vim-typewriter = prev.callPackage packages/vim-typewriter.nix { };
polyglot = prev.callPackage packages/polyglot.nix { };
q = prev.callPackage packages/q.nix { };
qrpaste = prev.callPackage packages/qrpaste.nix { };
random-zeno = prev.callPackage packages/random-zeno.nix { };
scanned = prev.callPackage packages/scanned.nix { };
stardict-tools = prev.callPackage packages/stardict-tools.nix { };
swallow = prev.callPackage packages/swallow.nix { };
tocharian-font = prev.callPackage packages/tocharian-font.nix { };
ttspaste = prev.callPackage packages/ttspaste.nix { };
unicodmenu = prev.callPackage packages/unicodmenu.nix { };
vg = prev.callPackage packages/vg.nix { };
vim-kmein = prev.callPackage packages/vim-kmein {};
vimv = prev.callPackage packages/vimv.nix { };
klem = prev.callPackage packages/klem.nix { };
cheat-sh = pkgs.callPackage packages/cheat-sh.nix {}; lib = lib // {
vimPlugins-cheat-sh-vim = pkgs.callPackage packages/vimPlugins/cheat-sh.nix {}; # TODO upstream niveum = import lib/default.nix {
cro = pkgs.callPackage packages/cro.nix {}; inherit lib;
default-gateway = pkgs.callPackage packages/default-gateway.nix {}; pkgs = final;
depp = pkgs.callPackage packages/depp.nix {}; };
dashboard = pkgs.callPackage packages/dashboard {}; panoptikon = import lib/panoptikon.nix {
fkill = pkgs.callPackage packages/fkill.nix {}; inherit lib;
fzfmenu = pkgs.callPackage packages/fzfmenu.nix {}; pkgs = final;
gpt35 = pkgs.callPackage packages/gpt.nix {model = "gpt-3.5-turbo";}; };
gpt4 = pkgs.callPackage packages/gpt.nix {model = "gpt-4";};
image-convert-favicon = pkgs.callPackage packages/image-convert-favicon.nix {};
image-convert-tolino = pkgs.callPackage packages/image-convert-tolino.nix {};
k-lock = pkgs.callPackage packages/k-lock.nix {};
klem = pkgs.callPackage packages/klem.nix {};
man-pandoc = pkgs.callPackage packages/man/pandoc.nix {}; # TODO upstream
man-pdf = pkgs.callPackage packages/man-pdf.nix {};
mansplain = pkgs.callPackage packages/mansplain.nix {};
manual-sort = pkgs.callPackage packages/manual-sort.nix {};
menu-calc = pkgs.callPackage packages/menu-calc.nix {};
noise-waves = pkgs.callPackage packages/noise-waves.nix {};
mpv-radio = pkgs.callPackage packages/mpv-radio.nix {di-fm-key-file = "/dev/null";};
mpv-tuner = pkgs.callPackage packages/mpv-tuner.nix {di-fm-key-file = "/dev/null";};
mpv-tv = pkgs.callPackage packages/mpv-tv.nix {};
mpv-iptv = pkgs.callPackage packages/mpv-iptv.nix {};
new-mac = pkgs.callPackage packages/new-mac.nix {};
nix-git = pkgs.callPackage packages/nix-git.nix {};
notemenu = pkgs.callPackage packages/notemenu.nix {niveumPackages = self.packages.${system};};
opustags = pkgs.callPackage packages/opustags.nix {}; # TODO upstream
q = pkgs.callPackage packages/q.nix {};
qrpaste = pkgs.callPackage packages/qrpaste.nix {};
go-webring = pkgs.callPackage packages/go-webring.nix {}; # TODO upstream
rfc = pkgs.callPackage packages/rfc.nix {};
gimp = pkgs.callPackage packages/gimp.nix {};
scanned = pkgs.callPackage packages/scanned.nix {};
text2pdf = pkgs.callPackage packages/text2pdf.nix {}; # TODO upstream
timer = pkgs.callPackage packages/timer.nix {};
trans = pkgs.callPackage packages/trans.nix {}; # TODO upstream
ttspaste = pkgs.callPackage packages/ttspaste.nix {};
unicodmenu = pkgs.callPackage packages/unicodmenu.nix {};
emailmenu = pkgs.callPackage packages/emailmenu.nix {};
stag = pkgs.callPackage packages/stag.nix {}; # TODO upstream
vg = pkgs.callPackage packages/vg.nix {};
vim = pkgs.callPackage packages/vim.nix {niveumPackages = self.packages.${system};};
obsidian-vim = pkgs.callPackage packages/obsidian-vim.nix {};
vimPlugins-icalendar-vim = pkgs.callPackage packages/vimPlugins/icalendar-vim.nix {}; # TODO upstream
vimPlugins-jq-vim = pkgs.callPackage packages/vimPlugins/jq-vim.nix {}; # TODO upstream
vimPlugins-typst-vim = pkgs.callPackage packages/vimPlugins/typst-vim.nix {}; # TODO upstream
vimPlugins-mdwa-nvim = pkgs.callPackage packages/vimPlugins/mdwa-nvim.nix {}; # TODO upstream
vimPlugins-vim-ernest = pkgs.callPackage packages/vimPlugins/vim-ernest.nix {}; # TODO upstream
vimPlugins-vim-256noir = pkgs.callPackage packages/vimPlugins/vim-256noir.nix {}; # TODO upstream
vimPlugins-vim-colors-paramount = pkgs.callPackage packages/vimPlugins/vim-colors-paramount.nix {}; # TODO upstream
vimPlugins-vim-fetch = pkgs.callPackage packages/vimPlugins/vim-fetch.nix {}; # TODO upstream
vimPlugins-vim-fsharp = pkgs.callPackage packages/vimPlugins/vim-fsharp.nix {}; # TODO upstream
vimPlugins-vim-mail = pkgs.callPackage packages/vimPlugins/vim-mail.nix {}; # TODO upstream
vimPlugins-vim-reason-plus = pkgs.callPackage packages/vimPlugins/vim-reason-plus.nix {}; # TODO upstream
vimv = pkgs.callPackage packages/vimv.nix {};
weechat-declarative = pkgs.callPackage packages/weechat-declarative.nix {}; # TODO upstream
weechatScripts-hotlist2extern = pkgs.callPackage packages/weechatScripts/hotlist2extern.nix {}; # TODO upstream
dmenu-randr = pkgs.callPackage packages/dmenu-randr.nix {};
wttr = pkgs.callPackage packages/wttr.nix {}; # TODO upstream
booksplit = wrapScript {
script = inputs.voidrice.outPath + "/.local/bin/booksplit";
name = "booksplit";
packages = [pkgs.ffmpeg pkgs.glibc.bin];
}; };
tag = wrapScript { };
script = inputs.voidrice.outPath + "/.local/bin/tag";
name = "tag"; nixosConfigurations =
packages = [pkgs.ffmpeg]; let
niveumSpecialArgs = system: {
unstablePackages = import nixpkgs-unstable {
inherit system;
overlays = [];
config.allowUnfreePredicate =
pkg:
builtins.elem (nixpkgs-unstable.lib.getName pkg) [
"obsidian"
"zoom"
];
};
inputs = {
inherit
tinc-graph
self
telebots
menstruation-telegram
menstruation-backend
scripts
coptic-dictionary
agenix
recht
autorenkalender
nixpkgs
wallpaper-generator
;
};
};
in
{
ful = nixpkgs.lib.nixosSystem rec {
system = "aarch64-linux";
specialArgs = niveumSpecialArgs system;
modules = [
{ nixpkgs.overlays = [ self.overlays.default ]; }
systems/ful/configuration.nix
agenix.nixosModules.default
self.nixosModules.passport
self.nixosModules.panoptikon
self.nixosModules.go-webring
stockholm.nixosModules.reaktor2
retiolum.nixosModules.retiolum
nur.modules.nixos.default
{ nixpkgs.overlays = [ stockholm.overlays.default ]; }
{
_module.args.nixinate = {
host = "ful";
sshUser = "root";
buildOn = "remote";
substituteOnTarget = true;
hermetic = false;
};
}
];
};
zaatar = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux";
specialArgs = niveumSpecialArgs system;
modules = [
{ nixpkgs.overlays = [ self.overlays.default ]; }
systems/zaatar/configuration.nix
agenix.nixosModules.default
retiolum.nixosModules.retiolum
];
};
kibbeh = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux";
specialArgs = niveumSpecialArgs system;
modules = [
{ nixpkgs.overlays = [ self.overlays.default ]; }
systems/kibbeh/configuration.nix
agenix.nixosModules.default
retiolum.nixosModules.retiolum
home-manager.nixosModules.home-manager
];
};
makanek = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux";
# for using inputs in other config files
specialArgs = niveumSpecialArgs system;
modules = [
{ nixpkgs.overlays = [ self.overlays.default ]; }
systems/makanek/configuration.nix
self.nixosModules.telegram-bot
self.nixosModules.passport
agenix.nixosModules.default
retiolum.nixosModules.retiolum
nur.modules.nixos.default
];
};
tahina = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux";
specialArgs = niveumSpecialArgs system;
modules = [
{ nixpkgs.overlays = [ self.overlays.default ]; }
systems/tahina/configuration.nix
agenix.nixosModules.default
retiolum.nixosModules.retiolum
];
};
tabula = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux";
specialArgs = niveumSpecialArgs system;
modules = [
{ nixpkgs.overlays = [ self.overlays.default ]; }
systems/tabula/configuration.nix
agenix.nixosModules.default
retiolum.nixosModules.retiolum
];
};
manakish = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux";
specialArgs = niveumSpecialArgs system;
modules = [
{ nixpkgs.overlays = [ self.overlays.default ]; }
systems/manakish/configuration.nix
agenix.nixosModules.default
retiolum.nixosModules.retiolum
home-manager.nixosModules.home-manager
nix-index-database.nixosModules.default
nur.modules.nixos.default
stylix.nixosModules.stylix
];
};
kabsa = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux";
specialArgs = niveumSpecialArgs system;
modules = [
{ nixpkgs.overlays = [ self.overlays.default ]; }
systems/kabsa/configuration.nix
agenix.nixosModules.default
retiolum.nixosModules.retiolum
home-manager.nixosModules.home-manager
nur.modules.nixos.default
nix-index-database.nixosModules.default
stylix.nixosModules.stylix
];
};
fatteh = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux";
specialArgs = niveumSpecialArgs system;
modules = [
{ nixpkgs.overlays = [ self.overlays.default ]; }
systems/fatteh/configuration.nix
agenix.nixosModules.default
retiolum.nixosModules.retiolum
home-manager.nixosModules.home-manager
nur.modules.nixos.default
nix-index-database.nixosModules.default
stylix.nixosModules.stylix
];
};
}; };
});
packages = eachSupportedSystem (
system:
let
pkgs = import nixpkgs {
inherit system;
config.allowUnfree = true;
overlays = [
nur.overlays.default
self.overlays.default
];
};
in
{
inherit (pkgs) auc swallow cheat-sh hc kpaste noise-waves trans stag qrpaste new-mac scanned default-gateway kirciuoklis tocharian-font image-convert-favicon image-convert-tolino heuretes mpv-tv mpv-iptv devanagari literature-quote booksplit manual-sort wttr emailmenu closest mpv-radio mpv-tuner cro nix-git text2pdf betacode brassica ipa polyglot jsesh gfs-fonts vim-kmein vimv brainmelter cyberlocker-tools pls untilport radio-news vg ttspaste depp fkill fzfmenu unicodmenu dmenu-randr notemenu man-pdf mansplain opustags q timer rfc gimp obsidian-vim devour go-webring random-zeno stardict-tools weechat-declarative klem radioStreams vim-typewriter ;
}
);
}; };
} }

View File

@@ -1,5 +0,0 @@
pkgs: rec {
terminal = "alacritty";
browser = "${pkgs.firefox}/bin/firefox";
fileManager = "${pkgs.pcmanfm}/bin/pcmanfm";
}

View File

@@ -1,28 +1,40 @@
{ lib, pkgs }:
let
systems = import ./systems.nix;
in
{ {
tmpfilesConfig = { tmpfilesConfig =
type, {
path, type,
mode ? "-", path,
user ? "-", mode ? "-",
group ? "-", user ? "-",
age ? "-", group ? "-",
argument ? "-", age ? "-",
}: "${type} '${path}' ${mode} ${user} ${group} ${age} ${argument}"; argument ? "-",
}:
"${type} '${path}' ${mode} ${user} ${group} ${age} ${argument}";
restic = rec { restic =
port = 3571; let
host = "zaatar.r"; host = "zaatar.r";
repository = "rest:http://${host}:${toString port}/"; port = 3571;
}; in
{
inherit host port;
repository = "rest:http://${host}:${toString port}/";
};
remoteDir = "/home/kfm/remote"; remoteDir = "/home/kfm/remote";
firewall = lib: { firewall = {
accept = { accept =
source, {
protocol, source,
dport, protocol,
}: "nixos-fw -s ${lib.escapeShellArg source} -p ${lib.escapeShellArg protocol} --dport ${lib.escapeShellArg (toString dport)} -j nixos-fw-accept"; dport,
}:
"nixos-fw -s ${lib.escapeShellArg source} -p ${lib.escapeShellArg protocol} --dport ${lib.escapeShellArg (toString dport)} -j nixos-fw-accept";
addRules = lib.concatMapStringsSep "\n" (rule: "iptables -A ${rule}"); addRules = lib.concatMapStringsSep "\n" (rule: "iptables -A ${rule}");
removeRules = lib.concatMapStringsSep "\n" (rule: "iptables -D ${rule} || true"); removeRules = lib.concatMapStringsSep "\n" (rule: "iptables -D ${rule} || true");
}; };
@@ -42,7 +54,7 @@
sshPort = 22022; sshPort = 22022;
theme = pkgs: { theme = {
gtk = { gtk = {
name = "Adwaita-dark"; name = "Adwaita-dark";
package = pkgs.gnome-themes-extra; package = pkgs.gnome-themes-extra;
@@ -57,30 +69,61 @@
}; };
}; };
defaultApplications = import ./default-applications.nix; retiolumAddresses = lib.mapAttrs (_: v: { inherit (v.retiolum) ipv4 ipv6; }) (
lib.filterAttrs (_: v: v ? "retiolum") systems
);
externalNetwork = lib.mapAttrs (_: v: v.externalIp) (
lib.filterAttrs (_: v: v ? "externalIp") systems
);
localAddresses = lib.mapAttrs (_: v: v.internalIp) (
lib.filterAttrs (_: v: v ? "internalIp") systems
);
myceliumAddresses = lib.mapAttrs (_: v: v.mycelium.ipv6) (
lib.filterAttrs (_: v: v ? "mycelium") systems
);
syncthingIds = lib.mapAttrs (_: v: { id = v.syncthingId; }) (
lib.filterAttrs (_: v: v ? "syncthingId") systems
);
retiolumAddresses = import ./retiolum-network.nix; email =
let
thunderbirdProfile = "donnervogel";
in
{
inherit thunderbirdProfile;
defaults = {
thunderbird = {
enable = true;
profiles = [ thunderbirdProfile ];
};
aerc.enable = true;
realName = "Kierán Meinhardt";
folders.inbox = "INBOX";
};
};
localAddresses = import ./local-network.nix; systems = systems;
email-sshKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINKz33wHtPuIfgXEb0+hybxFGV9ZuPsDTLUZo/+hlcdA";
kieran = { kieran = {
github = "kmein"; github = "kmein";
email = "kmein@posteo.de"; email = "kmein@posteo.de";
name = "Kierán Meinhardt"; name = "Kierán Meinhardt";
sshKeys = [ pronouns = builtins.concatStringsSep "/" [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDyTnGhFq0Q+vghNhrqNrAyY+CsN7nNz8bPfiwIwNpjk" # kabsa "er"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOiQEc8rTr7C7xVLYV7tQ99BDDBLrJsy5hslxtCEatkB" # manakish "he"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIByreBjBEMJKjgpKLd5XZHIUUwIhNafVqN6OUOQpJa3y" # fatteh "is"
"οτος"
"هو"
"̄ϥ"
"он"
"han"
""
];
sshKeys = [
systems.fatteh.sshKey
systems.manakish.sshKey
systems.kabsa.sshKey
]; ];
};
syncthing.devices = {
kabsa.id = "R6DEBD7-G5RYDKN-VFA3HPO-WX4DNVI-373F7OQ-AW5MZTT-3L4BDVW-Y6ROEAF";
kibbeh.id = "HLQSG3D-WSKLA6S-MEYQ3EU-GDBGABE-PY53RQ6-SWQAP2I-Z5MVBVX-MYPJXAM";
manakish.id = "AJVBWR2-VFFAGZF-7ZF5JAX-T63GMOG-NZ446WK-MC5E6WK-6X6Q2HE-QQA2JQ3";
fatteh.id = "GSOGYT3-2GBHZXT-MNCTDIY-3BJIR4V-OHVOOMJ-ICVLKXR-U4C7RFB-HJOK3AC";
}; };
ignorePaths = [ ignorePaths = [

View File

@@ -1,23 +0,0 @@
rec {
thunderbirdProfile = "donnervogel";
pronouns = builtins.concatStringsSep "/" [
"er"
"he"
"is"
"οτος"
"هو"
"̄ϥ"
"он"
"han"
""
];
defaults = {
thunderbird = {
enable = true;
profiles = [thunderbirdProfile];
};
aerc.enable = true;
realName = "Kierán Meinhardt";
folders.inbox = "INBOX";
};
}

View File

@@ -1,4 +0,0 @@
{
ful = "130.61.217.114";
makanek = "88.99.83.173";
}

View File

@@ -1,182 +0,0 @@
{
pkgs,
path,
}: ''
<config>
<paths>
<path recursive="1">${path}</path>
</paths>
<sounddirs/>
<dictionaryOrder name="" id="0">
<mutedDictionaries/>
</dictionaryOrder>
<inactiveDictionaries name="" id="0">
<mutedDictionaries/>
</inactiveDictionaries>
<groups nextId="1"/>
<hunspell dictionariesPath=""/>
<transliteration>
<enableRussianTransliteration>0</enableRussianTransliteration>
<enableGermanTransliteration>0</enableGermanTransliteration>
<enableGreekTransliteration>0</enableGreekTransliteration>
<enableBelarusianTransliteration>0</enableBelarusianTransliteration>
<chinese>
<enable>0</enable>
<enableSCToTWConversion>1</enableSCToTWConversion>
<enableSCToHKConversion>1</enableSCToHKConversion>
<enableTCToSCConversion>1</enableTCToSCConversion>
</chinese>
<romaji>
<enable>0</enable>
<enableHepburn>1</enableHepburn>
<enableNihonShiki>0</enableNihonShiki>
<enableKunreiShiki>0</enableKunreiShiki>
<enableHiragana>1</enableHiragana>
<enableKatakana>1</enableKatakana>
</romaji>
</transliteration>
<forvo>
<enable>0</enable>
<apiKey></apiKey>
<languageCodes></languageCodes>
</forvo>
<mediawikis>
<mediawiki enabled="0" name="English Wikipedia" icon="" id="ae6f89aac7151829681b85f035d54e48" url="https://en.wikipedia.org/w"/>
<mediawiki enabled="0" name="English Wiktionary" icon="" id="affcf9678e7bfe701c9b071f97eccba3" url="https://en.wiktionary.org/w"/>
<mediawiki enabled="0" name="German Wikipedia" icon="" id="a8a66331a1242ca2aeb0b4aed361c41d" url="https://de.wikipedia.org/w"/>
<mediawiki enabled="0" name="German Wiktionary" icon="" id="21c64bca5ec10ba17ff19f3066bc962a" url="https://de.wiktionary.org/w"/>
</mediawikis>
<websites>
<website enabled="0" name="Google En-En (Oxford)" icon="" id="b88cb2898e634c6638df618528284c2d" url="https://www.google.com/search?q=define:%GDWORD%&amp;hl=en" inside_iframe="1"/>
<website enabled="0" name="Urban Dictionary" icon="" id="f376365a0de651fd7505e7e5e683aa45" url="https://www.urbandictionary.com/define.php?term=%GDWORD%" inside_iframe="1"/>
<website enabled="0" name="Multitran (En)" icon="" id="324ca0306187df7511b26d3847f4b07c" url="https://multitran.ru/c/m.exe?CL=1&amp;l1=1&amp;s=%GD1251%" inside_iframe="1"/>
<website enabled="0" name="Lingvo (En-Ru)" icon="" id="924db471b105299c82892067c0f10787" url="http://lingvopro.abbyyonline.com/en/Search/en-ru/%GDWORD%" inside_iframe="1"/>
<website enabled="0" name="Michaelis (Pt-En)" icon="" id="087a6d65615fb047f4c80eef0a9465db" url="http://michaelis.uol.com.br/moderno/ingles/index.php?lingua=portugues-ingles&amp;palavra=%GDISO1%" inside_iframe="1"/>
</websites>
<dictservers/>
<programs>
<program enabled="0" name="Espeak" icon="" id="2cf8b3a60f27e1ac812de0b57c148340" commandLine="${pkgs.espeak}/bin/espeak %GDWORD%" type="0"/>
<program enabled="0" name="Manpages" icon="" id="4f898f7582596cea518c6b0bfdceb8b3" commandLine="${pkgs.man_db}/bin/man -a --html=/bin/cat %GDWORD%" type="2"/>
</programs>
<voiceEngines/>
<mutedDictionaries/>
<popupMutedDictionaries>
<mutedDictionary>ae6f89aac7151829681b85f035d54e48</mutedDictionary>
</popupMutedDictionaries>
<preferences>
<interfaceLanguage></interfaceLanguage>
<helpLanguage></helpLanguage>
<displayStyle>modern</displayStyle>
<newTabsOpenAfterCurrentOne>0</newTabsOpenAfterCurrentOne>
<newTabsOpenInBackground>1</newTabsOpenInBackground>
<hideSingleTab>0</hideSingleTab>
<mruTabOrder>0</mruTabOrder>
<hideMenubar>0</hideMenubar>
<enableTrayIcon>1</enableTrayIcon>
<startToTray>1</startToTray>
<closeToTray>1</closeToTray>
<autoStart>0</autoStart>
<doubleClickTranslates>1</doubleClickTranslates>
<selectWordBySingleClick>0</selectWordBySingleClick>
<escKeyHidesMainWindow>0</escKeyHidesMainWindow>
<zoomFactor>1</zoomFactor>
<helpZoomFactor>1</helpZoomFactor>
<wordsZoomLevel>0</wordsZoomLevel>
<enableMainWindowHotkey>1</enableMainWindowHotkey>
<mainWindowHotkey>Ctrl+F11, Ctrl+F11</mainWindowHotkey>
<enableClipboardHotkey>1</enableClipboardHotkey>
<clipboardHotkey>Ctrl+C, Ctrl+C</clipboardHotkey>
<enableScanPopup>1</enableScanPopup>
<startWithScanPopupOn>0</startWithScanPopupOn>
<enableScanPopupModifiers>0</enableScanPopupModifiers>
<scanPopupModifiers>0</scanPopupModifiers>
<scanPopupAltMode>0</scanPopupAltMode>
<scanPopupAltModeSecs>3</scanPopupAltModeSecs>
<ignoreOwnClipboardChanges>0</ignoreOwnClipboardChanges>
<scanToMainWindow>0</scanToMainWindow>
<ignoreDiacritics>0</ignoreDiacritics>
<showScanFlag>0</showScanFlag>
<scanPopupUseUIAutomation>1</scanPopupUseUIAutomation>
<scanPopupUseIAccessibleEx>1</scanPopupUseIAccessibleEx>
<scanPopupUseGDMessage>1</scanPopupUseGDMessage>
<scanPopupUnpinnedWindowFlags>0</scanPopupUnpinnedWindowFlags>
<scanPopupUnpinnedBypassWMHint>0</scanPopupUnpinnedBypassWMHint>
<pronounceOnLoadMain>0</pronounceOnLoadMain>
<pronounceOnLoadPopup>0</pronounceOnLoadPopup>
<useInternalPlayer>1</useInternalPlayer>
<internalPlayerBackend>FFmpeg+libao</internalPlayerBackend>
<audioPlaybackProgram>mplayer</audioPlaybackProgram>
<alwaysOnTop>1</alwaysOnTop>
<searchInDock>1</searchInDock>
<historyStoreInterval>0</historyStoreInterval>
<favoritesStoreInterval>0</favoritesStoreInterval>
<confirmFavoritesDeletion>1</confirmFavoritesDeletion>
<proxyserver enabled="0" useSystemProxy="0">
<type>0</type>
<host></host>
<port>3128</port>
<user></user>
<password></password>
<systemProxyUser></systemProxyUser>
<systemProxyPassword></systemProxyPassword>
</proxyserver>
<disallowContentFromOtherSites>0</disallowContentFromOtherSites>
<enableWebPlugins>0</enableWebPlugins>
<hideGoldenDictHeader>0</hideGoldenDictHeader>
<maxNetworkCacheSize>50</maxNetworkCacheSize>
<clearNetworkCacheOnExit>1</clearNetworkCacheOnExit>
<maxStringsInHistory>500</maxStringsInHistory>
<storeHistory>1</storeHistory>
<alwaysExpandOptionalParts>0</alwaysExpandOptionalParts>
<addonStyle></addonStyle>
<collapseBigArticles>0</collapseBigArticles>
<articleSizeLimit>2000</articleSizeLimit>
<limitInputPhraseLength>0</limitInputPhraseLength>
<inputPhraseLengthLimit>1000</inputPhraseLengthLimit>
<maxDictionaryRefsInContextMenu>20</maxDictionaryRefsInContextMenu>
<trackClipboardChanges>0</trackClipboardChanges>
<synonymSearchEnabled>1</synonymSearchEnabled>
<fullTextSearch>
<searchMode>0</searchMode>
<matchCase>0</matchCase>
<maxArticlesPerDictionary>100</maxArticlesPerDictionary>
<maxDistanceBetweenWords>2</maxDistanceBetweenWords>
<useMaxArticlesPerDictionary>0</useMaxArticlesPerDictionary>
<useMaxDistanceBetweenWords>1</useMaxDistanceBetweenWords>
<dialogGeometry></dialogGeometry>
<disabledTypes></disabledTypes>
<enabled>1</enabled>
<ignoreWordsOrder>0</ignoreWordsOrder>
<ignoreDiacritics>0</ignoreDiacritics>
<maxDictionarySize>0</maxDictionarySize>
</fullTextSearch>
</preferences>
<lastMainGroupId>0</lastMainGroupId>
<lastPopupGroupId>0</lastPopupGroupId>
<popupWindowState>AAAA/wAAAAH9AAAAAAAAAg0AAAGTAAAABAAAAAQAAAAIAAAACPwAAAABAAAAAQAAAAEAAAAaAGQAaQBjAHQAaQBvAG4AYQByAHkAQgBhAHIDAAAAAP////8AAAAAAAAAAA==</popupWindowState>
<popupWindowGeometry>AdnQywADAAAAAAC6AAABEgAAAuYAAAKkAAAAugAAARIAAALmAAACpAAAAAAAAAAABVYAAAC6AAABEgAAAuYAAAKk</popupWindowGeometry>
<pinPopupWindow>0</pinPopupWindow>
<popupWindowAlwaysOnTop>0</popupWindowAlwaysOnTop>
<mainWindowState>AAAA/wAAAAH9AAAAAgAAAAAAAADMAAAC0PwCAAAAAfsAAAAUAHMAZQBhAHIAYwBoAFAAYQBuAGUBAAAAFAAAAtAAAAB9AP///wAAAAEAAADMAAAC0PwCAAAAA/sAAAASAGQAaQBjAHQAcwBQAGEAbgBlAQAAABQAAAFvAAAAYQD////7AAAAGgBmAGEAdgBvAHIAaQB0AGUAcwBQAGEAbgBlAAAAABQAAALQAAAAYQD////7AAAAFgBoAGkAcwB0AG8AcgB5AFAAYQBuAGUBAAABhAAAAWAAAABhAP///wAAA7QAAALQAAAABAAAAAQAAAAIAAAACPwAAAABAAAAAgAAAAIAAAAUAG4AYQB2AFQAbwBvAGwAYgBhAHIAAAAAAP////8AAAAAAAAAAAAAABoAZABpAGMAdABpAG8AbgBhAHIAeQBCAGEAcgAAAAAA/////wAAAAAAAAAA</mainWindowState>
<mainWindowGeometry>AdnQywADAAAAAAAEAAAAGAAABVEAAAL7AAAABAAAABgAAAVRAAAC+wAAAAAAAAAABVYAAAAEAAAAGAAABVEAAAL7</mainWindowGeometry>
<helpWindowGeometry>AdnQywADAAAAAAF3AAAAgwAAA9AAAAJGAAABeAAAAIQAAAPPAAACRQAAAAAAAAAABVYAAAF4AAAAhAAAA88AAAJF</helpWindowGeometry>
<helpSplitterState>AAAA/wAAAAEAAAACAAABBAAABAAB/////wEAAAABAA==</helpSplitterState>
<dictInfoGeometry>AdnQywADAAAAAAF1AAAAmgAAA84AAAIrAAABdgAAAJsAAAPNAAACKgAAAAAAAAAABVYAAAF2AAAAmwAAA80AAAIq</dictInfoGeometry>
<inspectorGeometry></inspectorGeometry>
<timeForNewReleaseCheck></timeForNewReleaseCheck>
<skippedRelease></skippedRelease>
<showingDictBarNames>1</showingDictBarNames>
<usingSmallIconsInToolbars>1</usingSmallIconsInToolbars>
<editDictionaryCommandLine></editDictionaryCommandLine>
<maxPictureWidth>0</maxPictureWidth>
<maxHeadwordSize>256</maxHeadwordSize>
<maxHeadwordsToExpand>0</maxHeadwordsToExpand>
<headwordsDialog>
<searchMode>0</searchMode>
<matchCase>0</matchCase>
<autoApply>0</autoApply>
<headwordsExportPath></headwordsExportPath>
<headwordsDialogGeometry></headwordsDialogGeometry>
</headwordsDialog>
</config>
''

View File

@@ -1,2 +0,0 @@
# https://github.com/hercules-ci/gitignore.nix/pull/58/files
path: ~/. + path

File diff suppressed because it is too large Load Diff

View File

@@ -1,23 +0,0 @@
// Arabic keyboard using Buckwalter transliteration
// http://www.qamus.org/transliteration.htm
// Martin Vidner
// stolen from https://gitlab.freedesktop.org/xkeyboard-config/xkeyboard-config/-/blob/2505a3ec2605ea7303bc6de68acf96578f0fd424/symbols/ara#L179
// TODO 06CC ARABIC LETTER FARSI YEH
default partial alphanumeric_keys
xkb_symbols "buckwalter" {
include "ara(buckwalter)"
name[Group1] = "Arabic (Buckwalter + Persian)";
key <AE09> {[ 0x1000669, parenleft ] };
key <AE10> {[ 0x1000660, parenright ] };
key <AD10> {[ Arabic_tehmarbuta, 0x100067E ] }; // پ
key <AD11> {[ 0x100200C, 0x1000671 ] }; // alif wasla, ZWNJ
key <AD12> {[ 0x10006C0, Arabic_hamzaonyeh ] }; // ۀ
key <AC05> {[ Arabic_ghain, 0x10006AF ] }; // گ
key <AC07> {[ Arabic_jeem, 0x1000686 ] }; // چ
key <AB03> {[ 0x10006A9, 0x1000698 ] }; // ک ژ
key <AB04> {[ Arabic_theh, 0x10006A4 ] }; // ڤ
key <AB09> {[ period, Arabic_hamzaonalef ] };
};

View File

@@ -1,4 +0,0 @@
{
officejet = "192.168.0.251";
router = "192.168.0.1";
}

View File

@@ -1,8 +0,0 @@
{
zaatar = "5c5:49e0:7793:f017:59e1:1715:9e0e:3fc8";
fatteh = "463:a0d4:daa3:aa8d:a9b1:744a:46a5:7a80";
ful = "5bf:d60e:bebf:5163:f495:8787:880c:6d41";
kabsa = "432:e30:d5d8:9311:e34b:6587:96ee:3fcb";
makanek = "43f:ad4f:fa67:d9f7:8a56:713c:7418:164b";
manakish = "512:d3bd:3cd9:fcc8:ae34:81fa:385f:8c21";
}

View File

@@ -1,7 +1,6 @@
{ {
pkgs, pkgs,
lib, lib,
niveumPackages,
... ...
}: { }: {
# watcher scripts # watcher scripts
@@ -30,7 +29,7 @@
nick ? ''"$PANOPTIKON_WATCHER"-watcher'', nick ? ''"$PANOPTIKON_WATCHER"-watcher'',
}: }:
pkgs.writers.writeDash "kpaste-irc-reporter" '' pkgs.writers.writeDash "kpaste-irc-reporter" ''
KPASTE_CONTENT_TYPE=text/plain ${niveumPackages.kpaste}/bin/kpaste \ KPASTE_CONTENT_TYPE=text/plain ${pkgs.kpaste}/bin/kpaste \
| ${pkgs.gnused}/bin/sed -n "${ | ${pkgs.gnused}/bin/sed -n "${
if retiolumLink if retiolumLink
then "2" then "2"

View File

@@ -1,39 +0,0 @@
{
kabsa = {
ipv4 = "10.243.2.4";
ipv6 = "42:0:3c46:861f:a118:8e9a:82c9:3d";
};
ful = {
ipv4 = "10.243.2.107";
ipv6 = "42:0:3c46:2c8b:a564:1213:9fb4:1bc4";
};
zaatar = {
ipv4 = "10.243.2.34";
ipv6 = "42:0:3c46:156e:10b6:3bd6:6e82:b2cd";
};
makanek = {
ipv4 = "10.243.2.84";
ipv6 = "42:0:3c46:f7a9:1f0a:1b2b:822a:6050";
};
fatteh = {
ipv6 = "42:0:3c46:aa73:82b0:14d7:7bf8:bf2";
ipv4 = "10.243.2.77";
};
manakish = {
ipv4 = "10.243.2.85";
ipv6 = "42:0:3c46:ac99:ae36:cb8:c551:ba27";
};
tabula = {
ipv4 = "10.243.2.78";
ipv6 = "";
};
tahina = {
ipv4 = "10.243.2.74";
ipv6 = "42:0:3c46:2923:1c90:872:edd6:306";
};
}

73
lib/systems.nix Normal file
View File

@@ -0,0 +1,73 @@
{
kabsa = {
sshKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDyTnGhFq0Q+vghNhrqNrAyY+CsN7nNz8bPfiwIwNpjk";
syncthingId = "R6DEBD7-G5RYDKN-VFA3HPO-WX4DNVI-373F7OQ-AW5MZTT-3L4BDVW-Y6ROEAF";
retiolum = {
ipv4 = "10.243.2.4";
ipv6 = "42:0:3c46:861f:a118:8e9a:82c9:3d";
};
mycelium.ipv6 = "432:e30:d5d8:9311:e34b:6587:96ee:3fcb";
};
manakish = {
sshKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOiQEc8rTr7C7xVLYV7tQ99BDDBLrJsy5hslxtCEatkB";
syncthingId = "AJVBWR2-VFFAGZF-7ZF5JAX-T63GMOG-NZ446WK-MC5E6WK-6X6Q2HE-QQA2JQ3";
retiolum = {
ipv4 = "10.243.2.85";
ipv6 = "42:0:3c46:ac99:ae36:cb8:c551:ba27";
};
mycelium.ipv6 = "512:d3bd:3cd9:fcc8:ae34:81fa:385f:8c21";
};
fatteh = {
sshKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIByreBjBEMJKjgpKLd5XZHIUUwIhNafVqN6OUOQpJa3y";
syncthingId = "GSOGYT3-2GBHZXT-MNCTDIY-3BJIR4V-OHVOOMJ-ICVLKXR-U4C7RFB-HJOK3AC";
retiolum = {
ipv6 = "42:0:3c46:aa73:82b0:14d7:7bf8:bf2";
ipv4 = "10.243.2.77";
};
mycelium.ipv6 = "463:a0d4:daa3:aa8d:a9b1:744a:46a5:7a80";
};
kibbeh = {
syncthingId = "HLQSG3D-WSKLA6S-MEYQ3EU-GDBGABE-PY53RQ6-SWQAP2I-Z5MVBVX-MYPJXAM";
};
ful = {
externalIp = "130.61.217.114";
retiolum = {
ipv4 = "10.243.2.107";
ipv6 = "42:0:3c46:2c8b:a564:1213:9fb4:1bc4";
};
mycelium.ipv6 = "5bf:d60e:bebf:5163:f495:8787:880c:6d41";
};
zaatar = {
retiolum = {
ipv4 = "10.243.2.34";
ipv6 = "42:0:3c46:156e:10b6:3bd6:6e82:b2cd";
};
mycelium.ipv6 = "5c5:49e0:7793:f017:59e1:1715:9e0e:3fc8";
};
makanek = {
externalIp = "88.99.83.173";
retiolum = {
ipv4 = "10.243.2.84";
ipv6 = "42:0:3c46:f7a9:1f0a:1b2b:822a:6050";
};
mycelium.ipv6 = "43f:ad4f:fa67:d9f7:8a56:713c:7418:164b";
};
officejet = {
internalIp = "192.168.0.251";
};
router = {
internalIp = "192.168.0.1";
};
tabula = {
retiolum = {
ipv4 = "10.243.2.78";
ipv6 = "";
};
};
tahina = {
retiolum = {
ipv4 = "10.243.2.74";
ipv6 = "42:0:3c46:2923:1c90:872:edd6:306";
};
};
}

View File

@@ -1,69 +0,0 @@
# https://github.com/jmackie/nixos-networkmanager-profiles/
{
lib,
config,
...
}:
with lib; let
nm = config.networking.networkmanager;
mkProfile = profileAttrs:
if !(isAttrs profileAttrs)
then throw "error 1"
else {
enable = true;
mode = "0400"; # readonly (user)
text =
(foldlAttrs (accum: {
name,
value,
}: ''
${accum}
[${name}] ${mkProfileEntry value}'')
"# Generated by nixos-networkmanager-profiles"
profileAttrs)
+ "\n";
};
mkProfileEntry = entryAttrs:
if !(isAttrs entryAttrs)
then throw "error 2"
else
foldlAttrs (accum: {
name,
value,
}: ''
${accum}
${name}=${toString value}'') ""
entryAttrs;
foldlAttrs = op: nul: attrs:
foldl (accum: {
fst,
snd,
}:
op accum (nameValuePair fst snd))
nul
(lists.zipLists (attrNames attrs) (attrValues attrs));
attrLength = attrs: length (attrValues attrs);
in {
options.networking.networkmanager.profiles = mkOption {
type = types.attrs;
default = {};
};
config = mkIf (attrLength nm.profiles > 0) {
environment.etc = foldlAttrs (accum: {
name,
value,
}:
accum
// {
"NetworkManager/system-connections/${name}.nmconnection" =
mkProfile value;
}) {}
nm.profiles;
};
}

View File

@@ -56,7 +56,7 @@ with lib; let
imp = { imp = {
systemd.services.power-action = { systemd.services.power-action = {
serviceConfig = rec { serviceConfig = {
ExecStart = startScript; ExecStart = startScript;
User = cfg.user; User = cfg.user;
}; };

View File

@@ -3,33 +3,33 @@
fetchFromGitHub, fetchFromGitHub,
lib, lib,
pandoc, pandoc,
}: let }:
owner = "kamalist"; stdenv.mkDerivation (finalAttrs: {
in pname = "auc";
stdenv.mkDerivation rec { version = "2019-04-02";
pname = "auc";
version = "2019-04-02";
src = fetchFromGitHub { src = fetchFromGitHub {
inherit owner; owner = "kamalist";
repo = "AUC"; repo = "AUC";
rev = "66d1cd57472442b4bf3c1ed12ca5cadd57d076b3"; rev = "66d1cd57472442b4bf3c1ed12ca5cadd57d076b3";
sha256 = "0gb4asmlfr19h42f3c5wg9c9i3014if3ymrqan6w9klgzgfyh2la"; sha256 = "0gb4asmlfr19h42f3c5wg9c9i3014if3ymrqan6w9klgzgfyh2la";
}; };
installPhase = '' installPhase = ''
mkdir -p $out/{bin,man/man1} mkdir -p $out/{bin,man/man1}
install auc $out/bin install auc $out/bin
${pandoc}/bin/pandoc -V title=${lib.escapeShellArg pname} -V section=1 $src/README.md -s -t man -o $out/man/man1/auc.1 ${pandoc}/bin/pandoc -V title=${lib.escapeShellArg finalAttrs.pname} -V section=1 $src/README.md -s -t man -o $out/man/man1/auc.1
'';
doCheck = true;
meta = with lib; {
description = "Command-line Roman calendar";
longDescription = ''
AUC (Ab Urbe condita) is a command-line Roman calendar tool. Currently it shows the specified date in the format of the Ancient Romans.
''; '';
license = licenses.mit;
meta = with lib; { maintainers = [ maintainers.kmein ];
description = "Command-line Roman calendar"; platforms = platforms.all;
longDescription = '' };
AUC (Ab Urbe condita) is a command-line Roman calendar tool. Currently it shows the specified date in the format of the Ancient Romans. })
'';
license = licenses.mit;
maintainers = [maintainers.kmein];
platforms = platforms.all;
};
}

View File

@@ -4,7 +4,7 @@ chromium.override {
"--disable-sync" "--disable-sync"
"--no-default-browser-check" "--no-default-browser-check"
"--no-first-run" "--no-first-run"
"--user-data-dir=$(${coreutils}/bin/mktemp -d)" "--user-data-dir=$(${coreutils}/bin/mktemp -p $XDG_RUNTIME_DIR -d chromium-XXXXXX)"
"--incognito" "--incognito"
]; ];
} }

View File

@@ -1,247 +0,0 @@
{
writers,
formats,
acpi,
wtf,
himalaya,
lib,
jq,
gh,
curl,
khal,
todoman,
gnused,
coreutils,
astrolog,
weatherCityIds ? [2950159],
}: let
rowCount = 10;
columnCount = 6;
yaml = formats.yaml {};
command = args:
{
enabled = true;
type = "cmdrunner";
}
// args;
configuration.wtf = rec {
grid = {
columns = lib.replicate columnCount 32;
rows = lib.replicate rowCount 5;
};
mods.vdir_khal = command {
title = "Calendar";
cmd = "${khal}/bin/khal";
args = ["--color" "list" "--exclude-calendar" "calendarium-tridentinum"];
refreshInterval = "1m";
position = {
top = 4;
left = 0;
height = 4;
width = 2;
};
};
mods.vdir_todo = command {
enabled = true;
title = "Agenda";
cmd = writers.writeDash "vdir_todo" "${todoman}/bin/todo --color=always -h | ${coreutils}/bin/tac";
refreshInterval = "1m";
position = {
top = 4;
left = 2;
height = 4;
width = 2;
};
};
mods.weather = {
enabled = true;
cityids = weatherCityIds;
position = {
top = 8;
left = 2;
height = 2;
width = 2;
};
refreshInterval = "15m";
language = "DE";
tempUnit = "C";
useEmoji = true;
compact = true;
};
mods.top = command {
title = "uptime";
cmd = writers.writeDash "top" "top -b -n 1 -E g | ${gnused}/bin/sed -n '1,5p'";
refreshInterval = "30s";
position = {
top = 4;
left = 4;
height = 2;
width = 2;
};
enabled = true;
};
mods.resourceusage = {
enabled = true;
cpuCombined = false;
position = {
top = 6;
left = 4;
height = 2;
width = 2;
};
refreshInterval = "1s";
showCPU = true;
showMem = true;
showSwp = false;
};
mods.ipapi = {
enabled = false;
position = {
top = 0;
left = 1;
height = 2;
width = 2;
};
refreshInterval = "150s";
};
mods.battery-status = command {
enabled = true;
cmd = writers.writeDash "battery-status" ''
${acpi}/bin/acpi --battery --details | sed 's/^Battery //'
'';
refreshInterval = "1m";
position = {
top = 8;
left = 4;
height = 2;
width = 2;
};
};
mods.disk-usage = command {
enabled = false;
cmd = "df";
args = ["-h"];
refreshInterval = "1m";
position = {
top = 8;
left = 4;
height = 2;
width = 2;
};
};
mods.email = command {
title = "Email";
cmd = writers.writeDash "email" ''
${himalaya}/bin/himalaya accounts --output json \
| ${jq}/bin/jq -r 'map(.name) | join("\n")' \
| while read -r account
do
${himalaya}/bin/himalaya list --account "$account" -o json \
| ${jq}/bin/jq -r '
map(select(.flags == [])
| "\u001b[33m\(.from.addr)\u001b[0m \(.subject)") | join("\n")
'
done
'';
refreshInterval = "5m";
position = {
top = 0;
left = 0;
height = 4;
width = 2;
};
};
mods.gh-status = command {
enabled = true;
title = "GitHub";
cmd = writers.writeDash "gh-status" ''
${gh}/bin/gh api notifications \
| ${jq}/bin/jq -r 'map("\u001b[35m\(.repository.full_name)\u001b[0m \(.subject.title)") | join("\n")'
'';
refreshInterval = "5m";
position = {
top = 0;
left = 2;
height = 2;
width = 2;
};
};
mods.gh-issues = command {
enabled = true;
title = "GitHub";
cmd = writers.writeDash "gh-issues" ''
${gh}/bin/gh api issues \
| ${jq}/bin/jq -r 'map(select(.repository.owner.login == "kmein") | "\u001b[35m\(.repository.name)\u001b[0m \(.title)") | join("\n")'
'';
refreshInterval = "5m";
position = {
top = 2;
left = 2;
height = 2;
width = 2;
};
};
mods.calendar = command {
title = "Calendar";
cmd = "cal";
args = ["-3" "-m" "-w"];
pty = true;
refreshInterval = "5m";
position = {
top = 8;
left = 0;
height = 2;
width = 2;
};
};
mods.astro-aspects = command {
title = "Aspects";
enabled = false;
cmd = writers.writeDash "astro-aspects" "${astrolog}/bin/astrolog -n -zN Berlin -d";
refreshInterval = "1h";
position = {
top = 7;
left = 3;
height = 1;
width = 2;
};
};
mods.feed = command {
enabled = true;
title = "Feed";
cmd = writers.writeDash "feed" ''
${curl}/bin/curl -u "$WTF_MINIFLUX_API_KEY" --basic -s 'https://feed.kmein.de/v1/entries?status=unread&direction=desc' \
| ${jq}/bin/jq -r '
.total as $total | (
.entries
| map(select(.feed | .hide_globally| not) | "\(.feed.category.title) \u001b[32m\(.author)\u001b[0m \(.title)")
| join("\n")
)'
'';
# position = { top = 0; left = 5; height = 5; width = 1; };
position = {
top = 0;
left = 4;
height = 4;
width = 2;
};
refreshInterval = "15m";
};
mods.astro-positions = command {
enabled = false;
title = "Positions";
cmd = writers.writeDash "astro-positions" "${astrolog}/bin/astrolog -q $(date +'%m %d %Y %H:%M') -zN Berlin | ${gnused}/bin/sed -n '4,16p' | ${coreutils}/bin/cut -c 1-33";
refreshInterval = "1h";
position = {
top = 5;
left = 5;
height = 3;
width = 1;
};
};
};
in
writers.writeDashBin "dashboard" ''
exec ${wtf}/bin/wtfutil --config=${yaml.generate "config.yml" configuration}
''

View File

@@ -1,7 +1,13 @@
{yarn2nix-moretea}: {yarn2nix-moretea, lib}:
yarn2nix-moretea.mkYarnPackage { yarn2nix-moretea.mkYarnPackage {
name = "devanagari"; name = "devanagari";
src = ./.; src = lib.fileset.toSource {
root = ./.;
fileset = lib.fileset.unions [
./devanagari.js
./package.json
];
};
packageJson = ./package.json; packageJson = ./package.json;
yarnLock = ./yarn.lock; yarnLock = ./yarn.lock;
} }

View File

@@ -12,8 +12,8 @@ writers.writeBashBin "fzfmenu" ''
PATH=$PATH:${lib.makeBinPath [st fzf dash]} PATH=$PATH:${lib.makeBinPath [st fzf dash]}
input=$(mktemp -u --suffix .fzfmenu.input) input=$(mktemp -p "$XDG_RUNTIME_DIR" -u --suffix .fzfmenu.input)
output=$(mktemp -u --suffix .fzfmenu.output) output=$(mktemp -p "$XDG_RUNTIME_DIR" -u --suffix .fzfmenu.output)
mkfifo "$input" mkfifo "$input"
mkfifo "$output" mkfifo "$output"
chmod 600 "$input" "$output" chmod 600 "$input" "$output"

View File

@@ -12,16 +12,17 @@
util-linux, util-linux,
zbar, zbar,
}: }:
stdenv.mkDerivation rec { stdenv.mkDerivation (finalAttrs: {
name = "hc-${meta.version}"; name = "hc-${finalAttrs.version}";
version = "1.0.0";
src = fetchgit { src = fetchgit {
url = "https://cgit.krebsco.de/hc"; url = "https://cgit.krebsco.de/hc";
rev = "refs/tags/v${meta.version}"; rev = "refs/tags/v${finalAttrs.version}";
sha256 = "09349gja22p0j3xs082kp0fnaaada14bafszn4r3q7rg1id2slfb"; sha256 = "09349gja22p0j3xs082kp0fnaaada14bafszn4r3q7rg1id2slfb";
}; };
nativeBuildInputs = [makeWrapper]; nativeBuildInputs = [ makeWrapper ];
buildPhase = null; buildPhase = null;
@@ -31,19 +32,21 @@ stdenv.mkDerivation rec {
cp $src/bin/hc $out/bin/hc cp $src/bin/hc $out/bin/hc
wrapProgram $out/bin/hc \ wrapProgram $out/bin/hc \
--prefix PATH : ${lib.makeBinPath [ --prefix PATH : ${
coreutils lib.makeBinPath [
findutils coreutils
gawk findutils
gnugrep gawk
qrencode gnugrep
texlive.combined.scheme-full qrencode
util-linux texlive.combined.scheme-full
zbar util-linux
]} zbar
]
}
''; '';
meta = { meta = {
version = "1.0.0"; version = finalAttrs.version;
}; };
} })

View File

@@ -1,7 +1,13 @@
{pkgs ? import <nixpkgs> {}}: {
pkgs.writers.writeDashBin "jsesh" '' writers,
${pkgs.jre}/bin/java -jar ${pkgs.fetchzip { jre,
url = "https://github.com/rosmord/jsesh/releases/download/release-7.5.5/JSesh-7.5.5.zip"; fetchzip,
sha256 = "1z7ln51cil9pypz855x9a8p9ip2aflvknh566wcaah1kmz3fp57r"; }:
}}/lib/jseshAppli-7.5.5.jar writers.writeDashBin "jsesh" ''
${jre}/bin/java -jar ${
fetchzip {
url = "https://github.com/rosmord/jsesh/releases/download/release-7.5.5/JSesh-7.5.5.zip";
sha256 = "1z7ln51cil9pypz855x9a8p9ip2aflvknh566wcaah1kmz3fp57r";
}
}/lib/jseshAppli-7.5.5.jar
'' ''

View File

@@ -1,32 +1,36 @@
# klem < klemm < klemmbrett ~ clipboard # klem < klemm < klemmbrett ~ clipboard
{ {
pkgs,
lib, lib,
dmenu,
curl,
gnused,
coreutils,
xclip,
libnotify,
writers,
options ? { },
... ...
} @ args: let }: let
cfg = eval.config;
eval = lib.evalModules { eval = lib.evalModules {
modules = [ modules = [
{ {
_file = toString ./klem.nix; imports = [options];
imports = [(args.config or {})];
options = { options = {
selection = lib.mkOption { selection = lib.mkOption {
default = "clipboard"; default = "clipboard";
type = lib.types.enum ["primary" "secondary" "clipboard"]; type = lib.types.enum ["primary" "secondary" "clipboard"];
}; };
dmenu = lib.mkOption { dmenu = lib.mkOption {
default = "${pkgs.dmenu}/bin/dmenu -i -p klem"; default = "${dmenu}/bin/dmenu -i -p klem";
type = lib.types.path; type = lib.types.path;
}; };
scripts = lib.mkOption { scripts = lib.mkOption {
default = { default = {
pastebin = "${pkgs.curl}/bin/curl -fSs -F 'f:1=<-' ix.io"; pastebin = "${curl}/bin/curl -fSs -F 'f:1=<-' ix.io";
shorten = '' shorten = ''
${pkgs.curl}/bin/curl -fSs -F "shorten=$(${pkgs.coreutils}/bin/cat)" https://0x0.st ${curl}/bin/curl -fSs -F "shorten=$(${coreutils}/bin/cat)" https://0x0.st
''; '';
"replace p.r" = "${pkgs.gnused}/bin/sed 's/\\<r\\>/krebsco.de/'"; "replace p.r" = "${gnused}/bin/sed 's/\\<r\\>/krebsco.de/'";
}; };
type = lib.types.attrs; type = lib.types.attrs;
}; };
@@ -35,21 +39,21 @@
]; ];
}; };
scriptCase = option: script: '' cfg = eval.config;
'${option}') ${toString script} ;;
'';
in in
pkgs.writers.writeDashBin "klem" '' writers.writeDashBin "klem" ''
set -efu set -efu
${pkgs.xclip}/bin/xclip -selection ${cfg.selection} -out \ ${xclip}/bin/xclip -selection ${cfg.selection} -out \
| case $(echo "${ | case $(echo "${
lib.concatStringsSep "\n" (lib.attrNames cfg.scripts) lib.concatStringsSep "\n" (lib.attrNames cfg.scripts)
}" | ${cfg.dmenu}) in }" | ${cfg.dmenu}) in
${lib.concatStringsSep "\n" (lib.mapAttrsToList scriptCase cfg.scripts)} ${lib.concatStringsSep "\n" (lib.mapAttrsToList (option: script: ''
*) ${pkgs.coreutils}/bin/cat ;; '${option}') ${toString script} ;;
'') cfg.scripts)}
*) ${coreutils}/bin/cat ;;
esac \ esac \
| ${pkgs.xclip}/bin/xclip -selection ${cfg.selection} -in | ${xclip}/bin/xclip -selection ${cfg.selection} -in
${pkgs.libnotify}/bin/notify-send --app-name="klem" "Result copied to clipboard." ${libnotify}/bin/notify-send --app-name="klem" "Result copied to clipboard."
'' ''

View File

@@ -1,19 +0,0 @@
{
stdenv,
pandoc,
lib,
fetchgit,
}:
stdenv.mkDerivation {
name = "pandoc-doc";
version = pandoc.version;
src = fetchgit {
url = "https://github.com/jgm/pandoc";
rev = pandoc.version;
hash = "sha256-4VDfRUr6TyF4oZsCve9t6FlEN0AqzYdlYXRny+SAcsY=";
};
buildPhase = ''
mkdir -p $out/man/man1
${pandoc}/bin/pandoc -V section=1 --standalone --write=man $src/MANUAL.txt -o $out/man/man1/pandoc.1
'';
}

View File

@@ -1,21 +0,0 @@
{
writers,
gnused,
pari,
dmenu,
xclip,
}:
writers.writeDashBin "=" ''
# https://github.com/onespaceman/menu-calc
answer=$(echo "$@" | ${pari}/bin/gp -q | ${gnused}/bin/sed '/\./ s/\.\{0,1\}0\{1,\}$//')
action=$(printf "copy\nclear" | ${dmenu}/bin/dmenu -p "= $answer")
case $action in
"clear") $0 ;;
"copy") printf %s "$answer" | ${xclip}/bin/xclip -selection clipboard;;
"") ;;
*) $0 "$answer $action" ;;
esac
''

View File

@@ -1,35 +1,28 @@
{ {
writeText,
lib,
writers, writers,
mpv, mpv,
dmenu, dmenu,
coreutils, coreutils,
gnused, gnused,
di-fm-key-file, di-fm-key-file,
radioStreams,
executableName ? "mpv-radio", executableName ? "mpv-radio",
mpvCommand ? "${mpv}/bin/mpv --force-window=yes" mpvCommand ? "${mpv}/bin/mpv --force-window=yes",
}: let }:
streams = import ../lib/streams.nix { let
streams = radioStreams.override {
di-fm-key = "%DI_FM_KEY%"; di-fm-key = "%DI_FM_KEY%";
}; };
streams-tsv = writeText "streams.tsv" (lib.concatMapStringsSep "\n" ({
desc ? "",
stream,
station,
...
}: "${station}\t${desc}\t${stream}")
streams);
in in
writers.writeDashBin executableName '' writers.writeDashBin executableName ''
set -x set -x
if [ -z ''${DI_FM_KEY} ]; then if [ -z ''${DI_FM_KEY} ]; then
DI_FM_KEY=$(cat "${di-fm-key-file}") DI_FM_KEY=$(cat "${di-fm-key-file}")
fi fi
exec ${mpvCommand} "$( exec ${mpvCommand} "$(
${dmenu}/bin/dmenu -i -l 5 < ${streams-tsv} \ ${dmenu}/bin/dmenu -i -l 5 < ${streams.tsv} \
| ${coreutils}/bin/cut -f3 \ | ${coreutils}/bin/cut -f3 \
| ${gnused}/bin/sed s/%DI_FM_KEY%/"$DI_FM_KEY"/ | ${gnused}/bin/sed s/%DI_FM_KEY%/"$DI_FM_KEY"/
)" )"
'' ''

View File

@@ -5,18 +5,19 @@
mpv, mpv,
gnused, gnused,
di-fm-key-file, di-fm-key-file,
radioStreams,
findutils, findutils,
}: let }:
streams = import ../lib/streams.nix { let
streams = radioStreams.override {
di-fm-key = "%DI_FM_KEY%"; di-fm-key = "%DI_FM_KEY%";
}; };
streams-list = writeText "streams.txt" (lib.concatMapStringsSep "\n" (station: station.stream) streams);
in in
writers.writeDashBin "mpv-tuner" '' writers.writeDashBin "mpv-tuner" ''
if [ -z ''${DI_FM_KEY} ]; then if [ -z ''${DI_FM_KEY} ]; then
DI_FM_KEY=$(cat "${di-fm-key-file}") DI_FM_KEY=$(cat "${di-fm-key-file}")
fi fi
shuf ${streams-list} \ shuf ${streams.playlist} \
| ${gnused}/bin/sed s/%DI_FM_KEY%/"$DI_FM_KEY"/ \ | ${gnused}/bin/sed s/%DI_FM_KEY%/"$DI_FM_KEY"/ \
| ${findutils}/bin/xargs ${mpv}/bin/mpv | ${findutils}/bin/xargs ${mpv}/bin/mpv
'' ''

View File

@@ -6,7 +6,7 @@
coreutils, coreutils,
noteDirectory ? "~/state/obsidian", noteDirectory ? "~/state/obsidian",
currentDates ? false, currentDates ? false,
niveumPackages, obsidian-vim
}: }:
writers.writeDashBin "notemenu" '' writers.writeDashBin "notemenu" ''
set -efu set -efu
@@ -24,6 +24,6 @@ writers.writeDashBin "notemenu" ''
} | rofi -dmenu -i -p 'notes') } | rofi -dmenu -i -p 'notes')
if test "$note_file" if test "$note_file"
then then
alacritty --working-directory ${noteDirectory} -e ${niveumPackages.obsidian-vim}/bin/nvim "$note_file" alacritty --working-directory ${noteDirectory} -e ${obsidian-vim}/bin/nvim "$note_file"
fi fi
'' ''

View File

@@ -5,9 +5,10 @@
... ...
}: }:
neovim.override { neovim.override {
extraName = "-obsidian";
configure = { configure = {
customRC = '' customRC = ''
source ${../lib/vim/shared.vim} source ${./vim-kmein/shared.vim}
cd ${obsidiantVaultDirectory} cd ${obsidiantVaultDirectory}

View File

@@ -6,14 +6,14 @@
libogg, libogg,
fetchFromGitHub, fetchFromGitHub,
}: }:
stdenv.mkDerivation rec { stdenv.mkDerivation (finalAttrs: {
name = "opustags"; name = "opustags";
version = "1.3.0"; version = "1.3.0";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "fmang"; owner = "fmang";
repo = "opustags"; repo = "opustags";
rev = version; rev = finalAttrs.version;
sha256 = "09z0cdg20algaj2yyhfz3hxh1biwjjvzx1pc2vdc64n8lkswqsc1"; sha256 = "09z0cdg20algaj2yyhfz3hxh1biwjjvzx1pc2vdc64n8lkswqsc1";
}; };
@@ -21,6 +21,8 @@ stdenv.mkDerivation rec {
"-DCMAKE_INSTALL_PREFIX=$out" "-DCMAKE_INSTALL_PREFIX=$out"
]; ];
doCheck = true;
buildInputs = [libogg]; buildInputs = [libogg];
nativeBuildInputs = [cmake pkg-config]; nativeBuildInputs = [cmake pkg-config];
@@ -30,4 +32,4 @@ stdenv.mkDerivation rec {
description = "Ogg Opus tags editor"; description = "Ogg Opus tags editor";
platforms = platforms.all; platforms = platforms.all;
}; };
} })

View File

@@ -6,6 +6,7 @@
gnused, gnused,
curl, curl,
nur, nur,
downloadDirectory ? "~/mobile/audio/Musik/radiomitschnitt"
}: let }: let
playlistAPI = "https://radio.lassul.us"; playlistAPI = "https://radio.lassul.us";
@@ -104,8 +105,19 @@ in
writers.writeDashBin "pls" '' writers.writeDashBin "pls" ''
case "$1" in case "$1" in
good|like|cool|nice|noice|top|yup|yass|yes|+) good|like|cool|nice|noice|top|yup|yass|yes|+)
${curl}/bin/curl -sS -XPOST "${playlistAPI}/good" response=$(${curl}/bin/curl -sS -XPOST "${playlistAPI}/good")
echo ${lib.escapeShellArg (lib.concatStringsSep "\n" messages.good)} | shuf -n1 | ${sendIRC} echo ${lib.escapeShellArg (lib.concatStringsSep "\n" messages.good)} | shuf -n1 | ${sendIRC}
# Download the song if a download URL is provided in the string (youtu.be)
downloadUrl=$(echo "$response" | grep -oE 'https?://(www\.)?(youtube\.com|youtu\.be)/[^\s]+')
if [ -n "$downloadUrl" ]; then
echo "Downloading song from URL: $downloadUrl"
mkdir -p ${lib.escapeShellArg downloadDirectory}
cd ${lib.escapeShellArg downloadDirectory}
${download} "$downloadUrl"
else
echo "No download URL found in the response: $response"
fi
;; ;;
skip|next|bad|sucks|no|nope|flop|-) skip|next|bad|sucks|no|nope|flop|-)
${curl}/bin/curl -sS -XPOST "${playlistAPI}/skip" ${curl}/bin/curl -sS -XPOST "${playlistAPI}/skip"

View File

@@ -6,11 +6,11 @@
regex, regex,
... ...
}: }:
buildPythonPackage rec { buildPythonPackage (finalAttrs: {
pname = "indic_transliteration"; pname = "indic_transliteration";
version = "unstable-2020-12-15"; version = "unstable-2020-12-15";
src = fetchFromGitHub { src = fetchFromGitHub {
repo = pname; repo = finalAttrs.pname;
owner = "sanskrit-coders"; owner = "sanskrit-coders";
rev = "2ea25a03af15937916b6768835e056166986c567"; rev = "2ea25a03af15937916b6768835e056166986c567";
sha256 = "1pcf800hl0zkcffc47mkjq9mizsxdi0hwxlnij5bvbqdshd3w9ll"; sha256 = "1pcf800hl0zkcffc47mkjq9mizsxdi0hwxlnij5bvbqdshd3w9ll";
@@ -18,4 +18,4 @@ buildPythonPackage rec {
patches = [./regex-version.patch]; patches = [./regex-version.patch];
propagatedBuildInputs = [backports_functools_lru_cache selenium regex]; propagatedBuildInputs = [backports_functools_lru_cache selenium regex];
doCheck = false; doCheck = false;
} })

View File

@@ -6,7 +6,7 @@
nsxiv, nsxiv,
}: }:
writers.writeDashBin "qrpaste" '' writers.writeDashBin "qrpaste" ''
file="$(${mktemp}/bin/mktemp --tmpdir)" file="$(${mktemp}/bin/mktemp -p "$XDG_RUNTIME_DIR" qrpaste-XXXXXX.png)"
trap clean EXIT trap clean EXIT
clean() { clean() {
rm "$file" rm "$file"

View File

@@ -6,14 +6,14 @@
taglib, taglib,
zlib, zlib,
}: }:
stdenv.mkDerivation rec { stdenv.mkDerivation (finalAttrs: {
pname = "stag"; pname = "stag";
version = "1.0"; version = "1.0";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "smabie"; owner = "smabie";
repo = "stag"; repo = "stag";
rev = "v${version}"; rev = "v${finalAttrs.version}";
hash = "sha256-IWb6ZbPlFfEvZogPh8nMqXatrg206BTV2DYg7BMm7R4="; hash = "sha256-IWb6ZbPlFfEvZogPh8nMqXatrg206BTV2DYg7BMm7R4=";
}; };
@@ -27,6 +27,8 @@ stdenv.mkDerivation rec {
make all make all
''; '';
doCheck = true;
installPhase = '' installPhase = ''
mkdir -p $out/bin mkdir -p $out/bin
cp stag $out/bin/ cp stag $out/bin/
@@ -40,6 +42,5 @@ stdenv.mkDerivation rec {
license = lib.licenses.publicDomain; license = lib.licenses.publicDomain;
maintainers = [ lib.maintainers.kmein ]; maintainers = [ lib.maintainers.kmein ];
platforms = lib.platforms.unix; platforms = lib.platforms.unix;
source = src;
}; };
} })

View File

@@ -27,8 +27,9 @@ stdenv.mkDerivation {
env.NIX_CFLAGS_COMPILE = toString [ env.NIX_CFLAGS_COMPILE = toString [
"-Wno-error=format-security" "-Wno-error=format-security"
]; ];
patchPhase = '' postPatch = ''
${gnused}/bin/sed -i s/noinst_PROGRAMS/bin_PROGRAMS/ tools/src/Makefile.am substituteInPlace tools/src/Makefile.am \
--replace-fail noinst_PROGRAMS bin_PROGRAMS
''; '';
installFlags = ["INSTALL_PREFIX=$(out)"]; installFlags = ["INSTALL_PREFIX=$(out)"];
autoreconfPhase = '' autoreconfPhase = ''
@@ -39,6 +40,7 @@ stdenv.mkDerivation {
mkdir $out mkdir $out
make install make install
''; '';
doCheck = true;
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "huzheng001"; owner = "huzheng001";
repo = "stardict-3"; repo = "stardict-3";

File diff suppressed because it is too large Load Diff

View File

@@ -2,15 +2,14 @@
stdenv, stdenv,
fetchurl, fetchurl,
}: }:
stdenv.mkDerivation rec { stdenv.mkDerivation {
name = "${pname}-${version}";
pname = "text2pdf"; pname = "text2pdf";
version = "1.1"; version = "1.1";
src = fetchurl { src = fetchurl {
url = "http://www.eprg.org/pdfcorner/text2pdf/text2pdf.c"; url = "http://www.eprg.org/pdfcorner/text2pdf/text2pdf.c";
sha256 = "002nyky12vf1paj7az6j6ra7lljwkhqzz238v7fyp7sfgxw0f7d1"; sha256 = "002nyky12vf1paj7az6j6ra7lljwkhqzz238v7fyp7sfgxw0f7d1";
}; };
phases = ["buildPhase"]; phases = [ "buildPhase" ];
buildPhase = '' buildPhase = ''
mkdir -p $out/bin mkdir -p $out/bin
gcc -o $out/bin/text2pdf $src gcc -o $out/bin/text2pdf $src

View File

@@ -3,7 +3,6 @@
vimPlugins, vimPlugins,
fetchFromGitHub, fetchFromGitHub,
vimUtils, vimUtils,
niveumPackages,
writeText, writeText,
stylixColors ? null, stylixColors ? null,
colorscheme ? null, colorscheme ? null,
@@ -11,11 +10,13 @@
... ...
}: (neovim.override { }: (neovim.override {
configure = { configure = {
vimAlias = true;
viAlias = true;
customRC = '' customRC = ''
source ${../lib/vim/shared.vim} source ${./shared.vim}
source ${../lib/vim/init.vim} source ${./init.vim}
let g:snippet_directory = '${vimPlugins.friendly-snippets}' let g:snippet_directory = '${vimPlugins.friendly-snippets}'
luafile ${../lib/vim/init.lua} luafile ${./init.lua}
'' + lib.optionalString (stylixColors != null) (with stylixColors.withHashtag; '' '' + lib.optionalString (stylixColors != null) (with stylixColors.withHashtag; ''
luafile ${writeText "colors.lua" '' luafile ${writeText "colors.lua" ''
require('base16-colorscheme').setup({ require('base16-colorscheme').setup({
@@ -42,32 +43,26 @@
copilot-vim copilot-vim
goyo
limelight-vim
niveumPackages.vimPlugins-mdwa-nvim
niveumPackages.vimPlugins-vim-ernest
fzf-vim fzf-vim
fzfWrapper fzfWrapper
supertab supertab
undotree undotree
tabular tabular
# vimwiki # vimwiki
niveumPackages.vimPlugins-vim-colors-paramount vimPlugins.vim-colors-paramount
nvim-lspconfig nvim-lspconfig
vim-commentary vim-commentary
vim-css-color vim-css-color
vim-eunuch vim-eunuch
niveumPackages.vimPlugins-vim-fetch vimPlugins.vim-fetch
vim-fugitive vim-fugitive
vim-gitgutter vim-gitgutter
vim-repeat vim-repeat
vim-sensible vim-sensible
vim-surround vim-surround
(vimUtils.buildVimPlugin rec { (let version = "1.1.0"; pname = "vim-dim"; in vimUtils.buildVimPlugin {
pname = "vim-dim"; pname = "vim-dim";
version = "1.1.0"; version = version;
name = "${pname}-${version}";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "jeffkreeftmeijer"; owner = "jeffkreeftmeijer";
repo = pname; repo = pname;
@@ -83,8 +78,8 @@
emmet-vim emmet-vim
vim-elixir vim-elixir
haskell-vim haskell-vim
niveumPackages.vimPlugins-icalendar-vim vimPlugins.icalendar-vim
niveumPackages.vimPlugins-jq-vim vimPlugins.jq-vim
rust-vim rust-vim
typescript-vim typescript-vim
vim-javascript vim-javascript
@@ -93,8 +88,8 @@
vimtex vimtex
vim-pandoc vim-pandoc
vim-pandoc-syntax vim-pandoc-syntax
niveumPackages.vimPlugins-vim-256noir vimPlugins.vim-256noir
niveumPackages.vimPlugins-typst-vim vimPlugins.typst-vim
]; ];
}; };
}; };

View File

@@ -0,0 +1,59 @@
{
neovim,
vimPlugins,
writers,
wmctrl,
...
}:
let
vim-typewriter = neovim.override {
extraName = "-typewriter";
configure = {
customRC = ''
source ${./vim-kmein/shared.vim}
function! s:goyo_enter()
let b:quitting = 0
let b:quitting_bang = 0
autocmd QuitPre <buffer> let b:quitting = 1
cabbrev <buffer> q! let b:quitting_bang = 1 <bar> q!
Limelight
endfunction
function! s:goyo_leave()
Limelight!
" Quit Vim if this is the only remaining buffer
if b:quitting && len(filter(range(1, bufnr('$')), 'buflisted(v:val)')) == 1
if b:quitting_bang
qa!
else
qa
endif
endif
endfunction
let g:limelight_conceal_ctermfg = 'gray'
let g:limelight_conceal_guifg = 'DarkGray'
let g:limelight_default_coefficient = 0.5
let g:limelight_paragraph_span = 0
autocmd! User GoyoEnter call <SID>goyo_enter()
autocmd! User GoyoLeave call <SID>goyo_leave()
autocmd VimEnter * Goyo
'';
packages.nvim.start = [
vimPlugins.goyo
vimPlugins.limelight-vim
vimPlugins.mdwa-nvim
vimPlugins.vim-ernest
];
};
};
in
writers.writeDashBin "vim-typewriter" ''
# tell the window manager to fullscreen the nvim window
${wmctrl}/bin/wmctrl -r :ACTIVE: -b add,fullscreen
${vim-typewriter}/bin/nvim "$@
''

View File

@@ -9,8 +9,8 @@
config = args.config or {}; config = args.config or {};
lib = lib =
args.lib args.lib //
// rec { (let
attrPaths = let attrPaths = let
recurse = path: value: recurse = path: value:
if builtins.isAttrs value if builtins.isAttrs value
@@ -18,9 +18,6 @@
else [(lib.nameValuePair path value)]; else [(lib.nameValuePair path value)];
in in
attrs: lib.flatten (recurse [] attrs); attrs: lib.flatten (recurse [] attrs);
attrPathsSep = sep: attrs: lib.listToAttrs (map (x: x // {name = lib.concatStringsSep sep x.name;}) (attrPaths attrs));
toWeechatValue = x: toWeechatValue = x:
{ {
bool = builtins.toJSON x; bool = builtins.toJSON x;
@@ -29,11 +26,15 @@
int = toString x; int = toString x;
} }
.${builtins.typeOf x}; .${builtins.typeOf x};
in {
inherit attrPaths toWeechatValue;
attrPathsSep = sep: attrs: lib.listToAttrs (map (x: x // {name = lib.concatStringsSep sep x.name;}) (attrPaths attrs));
setCommand = name: value: "/set ${name} \"${toWeechatValue value}\""; setCommand = name: value: "/set ${name} \"${toWeechatValue value}\"";
filterAddreplace = name: filter: "/filter addreplace ${name} ${filter.buffer} ${toWeechatValue filter.tags} ${filter.regex}"; filterAddreplace = name: filter: "/filter addreplace ${name} ${filter.buffer} ${toWeechatValue filter.tags} ${filter.regex}";
}; });
cfg = eval.config; cfg = eval.config;

Submodule secrets updated: 3f3a8d1334...83d9103f20

View File

@@ -2,9 +2,7 @@
config, config,
pkgs, pkgs,
... ...
}: let }: {
inherit (import ../../lib) retiolumAddresses;
in {
imports = [ imports = [
./hardware-configuration.nix ./hardware-configuration.nix
../../configs/networkmanager.nix ../../configs/networkmanager.nix
@@ -42,7 +40,7 @@ in {
}; };
networking.hostName = "fatteh"; networking.hostName = "fatteh";
networking.retiolum = retiolumAddresses.fatteh; networking.retiolum = pkgs.lib.niveum.retiolumAddresses.fatteh;
system.stateVersion = "23.11"; system.stateVersion = "23.11";
} }

View File

@@ -16,8 +16,17 @@
boot.initrd.kernelModules = []; boot.initrd.kernelModules = [];
boot.kernelModules = ["kvm-intel"]; boot.kernelModules = ["kvm-intel"];
boot.extraModulePackages = []; boot.extraModulePackages = [];
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true; boot = {
loader = {
efi.canTouchEfiVariables = true;
systemd-boot = {
enable = true;
configurationLimit = 5;
consoleMode = "max";
};
};
};
boot.initrd.luks.devices."luks-aa6beb1b-3e54-4a0e-ac9c-e0c007d73cd5".device = "/dev/disk/by-uuid/aa6beb1b-3e54-4a0e-ac9c-e0c007d73cd5"; boot.initrd.luks.devices."luks-aa6beb1b-3e54-4a0e-ac9c-e0c007d73cd5".device = "/dev/disk/by-uuid/aa6beb1b-3e54-4a0e-ac9c-e0c007d73cd5";

View File

@@ -3,9 +3,7 @@
pkgs, pkgs,
lib, lib,
... ...
}: let }: {
inherit (import ../../lib) kieran retiolumAddresses restic;
in {
imports = [ imports = [
./hardware-configuration.nix ./hardware-configuration.nix
./matomo.nix ./matomo.nix
@@ -60,7 +58,7 @@ in {
services.restic.backups.niveum = { services.restic.backups.niveum = {
initialize = true; initialize = true;
inherit (restic) repository; repository = pkgs.lib.niveum.restic.repository;
timerConfig = { timerConfig = {
OnCalendar = "daily"; OnCalendar = "daily";
RandomizedDelaySec = "1h"; RandomizedDelaySec = "1h";
@@ -75,7 +73,7 @@ in {
firewall.allowedTCPPorts = [80 443]; firewall.allowedTCPPorts = [80 443];
hostName = "ful"; hostName = "ful";
interfaces.enp0s3.useDHCP = true; interfaces.enp0s3.useDHCP = true;
retiolum = retiolumAddresses.ful; retiolum = pkgs.lib.niveum.retiolumAddresses.ful;
useDHCP = false; useDHCP = false;
}; };
@@ -92,7 +90,7 @@ in {
security.acme = { security.acme = {
acceptTerms = true; acceptTerms = true;
defaults.email = kieran.email; defaults.email = pkgs.lib.niveum.kieran.email;
}; };
users.users.root.hashedPasswordFile = config.age.secrets.root.path; users.users.root.hashedPasswordFile = config.age.secrets.root.path;

View File

@@ -1,4 +1,4 @@
{ config, niveumPackages ,... }: { config, pkgs, ... }:
let let
port = 2857; port = 2857;
in in
@@ -7,7 +7,7 @@ in
enable = true; enable = true;
host = "dichtungsring.kmein.de"; host = "dichtungsring.kmein.de";
listenAddress = "127.0.0.1:${toString port}"; listenAddress = "127.0.0.1:${toString port}";
package = niveumPackages.go-webring; package = pkgs.go-webring;
members = [ members = [
{ username = "meteora"; site = "meteora.xn--kiern-0qa.de"; } { username = "meteora"; site = "meteora.xn--kiern-0qa.de"; }
{ username = "huldra"; site = "huldras-halbtraum.com"; } { username = "huldra"; site = "huldras-halbtraum.com"; }

View File

@@ -1,6 +1,4 @@
{pkgs, ...}: let {pkgs, lib, ...}: {
inherit (import ../../lib) kieran;
in {
services.nginx = { services.nginx = {
enable = true; enable = true;
recommendedGzipSettings = true; recommendedGzipSettings = true;
@@ -12,7 +10,7 @@ in {
security.acme = { security.acme = {
acceptTerms = true; acceptTerms = true;
defaults.email = kieran.email; defaults.email = pkgs.lib.niveum.kieran.email;
}; };
services.matomo = { services.matomo = {

View File

@@ -2,13 +2,9 @@
config, config,
pkgs, pkgs,
lib, lib,
niveumLib,
niveumPackages,
... ...
}: let }: let
panoptikon = niveumLib.panoptikon {inherit pkgs lib niveumPackages config;}; irc-xxx = pkgs.lib.panoptikon.kpaste-irc {
irc-xxx = panoptikon.kpaste-irc {
target = lib.escapeShellArg "#xxx"; target = lib.escapeShellArg "#xxx";
retiolumLink = true; retiolumLink = true;
}; };
@@ -41,7 +37,7 @@
| ${pkgs.jq}/bin/jq -e .ok | ${pkgs.jq}/bin/jq -e .ok
''; '';
irc-kmein = panoptikon.kpaste-irc { irc-kmein = pkgs.lib.panoptikon.kpaste-irc {
messagePrefix = "$PANOPTIKON_WATCHER: "; messagePrefix = "$PANOPTIKON_WATCHER: ";
target = "kmein"; target = "kmein";
nick = "panoptikon-kmein"; nick = "panoptikon-kmein";
@@ -60,7 +56,7 @@ in {
enable = true; enable = true;
watchers = { watchers = {
"github-meta" = { "github-meta" = {
script = panoptikon.urlJSON { script = pkgs.lib.panoptikon.urlJSON {
jqScript = '' jqScript = ''
{ {
ssh_key_fingerprints: .ssh_key_fingerprints, ssh_key_fingerprints: .ssh_key_fingerprints,
@@ -71,79 +67,79 @@ in {
reporters = [irc-xxx]; reporters = [irc-xxx];
}; };
lammla = { lammla = {
script = panoptikon.url "http://lammla.info/index.php?reihe=30"; script = pkgs.lib.panoptikon.url "http://lammla.info/index.php?reihe=30";
reporters = [matrix-kmein]; reporters = [matrix-kmein];
}; };
kratylos = { kratylos = {
script = panoptikon.url "https://kratylos.reichert-online.org/current_issue/KRATYLOS"; script = pkgs.lib.panoptikon.url "https://kratylos.reichert-online.org/current_issue/KRATYLOS";
reporters = [matrix-kmein]; reporters = [matrix-kmein];
}; };
kobudo-tesshinkan = { kobudo-tesshinkan = {
script = panoptikon.url "https://kobudo-tesshinkan.eu/index.php/de/termine-berichte/lehrgaenge/"; script = pkgs.lib.panoptikon.url "https://kobudo-tesshinkan.eu/index.php/de/termine-berichte/lehrgaenge/";
reporters = [telegram-kmein matrix-kmein]; reporters = [telegram-kmein matrix-kmein];
}; };
zeno-free = { zeno-free = {
script = panoptikon.urlSelector ".zenoCOMain" "http://www.zeno.org/Lesesaal/M/E-Books"; script = pkgs.lib.panoptikon.urlSelector ".zenoCOMain" "http://www.zeno.org/Lesesaal/M/E-Books";
reporters = [matrix-kmein]; reporters = [matrix-kmein];
}; };
carolinawelslau = { carolinawelslau = {
script = panoptikon.urlSelector "#main" "https://carolinawelslau.de/"; script = pkgs.lib.panoptikon.urlSelector "#main" "https://carolinawelslau.de/";
reporters = [matrix-kmein]; reporters = [matrix-kmein];
}; };
humboldt-preis = { humboldt-preis = {
script = panoptikon.urlSelector "#content-core" "https://www.hu-berlin.de/de/ueberblick/menschen/ehrungen/humboldtpreis"; script = pkgs.lib.panoptikon.urlSelector "#content-core" "https://www.hu-berlin.de/de/ueberblick/menschen/ehrungen/humboldtpreis";
reporters = [matrix-kmein]; reporters = [matrix-kmein];
}; };
lisalittmann = { lisalittmann = {
script = panoptikon.urlSelector "#site-content" "https://lisalittmann.de/"; script = pkgs.lib.panoptikon.urlSelector "#site-content" "https://lisalittmann.de/";
reporters = [matrix-kmein]; reporters = [matrix-kmein];
}; };
lisalittmann-archive = { lisalittmann-archive = {
script = panoptikon.urlSelector "#site-content" "https://lisalittmann.de/archive/"; script = pkgs.lib.panoptikon.urlSelector "#site-content" "https://lisalittmann.de/archive/";
reporters = [matrix-kmein]; reporters = [matrix-kmein];
}; };
lisalittmann-projects = { lisalittmann-projects = {
script = panoptikon.urlSelector "#site-content" "https://lisalittmann.de/projects/"; script = pkgs.lib.panoptikon.urlSelector "#site-content" "https://lisalittmann.de/projects/";
reporters = [matrix-kmein]; reporters = [matrix-kmein];
}; };
tatort = { tatort = {
script = panoptikon.urlSelector ".linklist" "https://www.daserste.de/unterhaltung/krimi/tatort/sendung/index.html"; script = pkgs.lib.panoptikon.urlSelector ".linklist" "https://www.daserste.de/unterhaltung/krimi/tatort/sendung/index.html";
reporters = [matrix-kmein]; reporters = [matrix-kmein];
}; };
warpgrid-idiomarium = { warpgrid-idiomarium = {
script = panoptikon.urlSelector "#site-content" "https://warpgrid.de/idiomarium/"; script = pkgs.lib.panoptikon.urlSelector "#site-content" "https://warpgrid.de/idiomarium/";
reporters = [matrix-kmein]; reporters = [matrix-kmein];
}; };
warpgrid-futurism = { warpgrid-futurism = {
script = panoptikon.urlSelector "#site-content" "https://warpgrid.de/futurism/"; script = pkgs.lib.panoptikon.urlSelector "#site-content" "https://warpgrid.de/futurism/";
reporters = [matrix-kmein]; reporters = [matrix-kmein];
}; };
warpgrid-imagiary = { warpgrid-imagiary = {
script = panoptikon.urlSelector "#site-content" "https://warpgrid.de/imagiary/"; script = pkgs.lib.panoptikon.urlSelector "#site-content" "https://warpgrid.de/imagiary/";
reporters = [matrix-kmein]; reporters = [matrix-kmein];
}; };
warpgrid-alchemy = { warpgrid-alchemy = {
script = panoptikon.urlSelector "#site-content" "https://warpgrid.de/alchemy/"; script = pkgs.lib.panoptikon.urlSelector "#site-content" "https://warpgrid.de/alchemy/";
reporters = [matrix-kmein]; reporters = [matrix-kmein];
}; };
indogermanische-forschungen = { indogermanische-forschungen = {
script = panoptikon.urlSelector "#latestIssue" "https://www.degruyter.com/journal/key/INDO/html"; script = pkgs.lib.panoptikon.urlSelector "#latestIssue" "https://www.degruyter.com/journal/key/INDO/html";
reporters = [matrix-kmein]; reporters = [matrix-kmein];
}; };
ig-neuigkeiten = { ig-neuigkeiten = {
script = panoptikon.urlSelector "[itemprop=articleBody]" "https://www.indogermanistik.org/aktuelles/neuigkeiten.html"; script = pkgs.lib.panoptikon.urlSelector "[itemprop=articleBody]" "https://www.indogermanistik.org/aktuelles/neuigkeiten.html";
reporters = [matrix-kmein]; reporters = [matrix-kmein];
}; };
ig-tagungen = { ig-tagungen = {
script = panoptikon.urlSelector "[itemprop=articleBody]" "https://www.indogermanistik.org/tagungen/tagungen-der-ig.html"; script = pkgs.lib.panoptikon.urlSelector "[itemprop=articleBody]" "https://www.indogermanistik.org/tagungen/tagungen-der-ig.html";
reporters = [matrix-kmein]; reporters = [matrix-kmein];
}; };
fu-distant = { fu-distant = {
script = panoptikon.urlSelector "#current_events" "https://www.geschkult.fu-berlin.de/en/e/ma-distant/Termine/index.html"; script = pkgs.lib.panoptikon.urlSelector "#current_events" "https://www.geschkult.fu-berlin.de/en/e/ma-distant/Termine/index.html";
reporters = [matrix-kmein]; reporters = [matrix-kmein];
}; };
fu-aegyptologie = { fu-aegyptologie = {
script = panoptikon.urlSelector "#current_events" "https://www.geschkult.fu-berlin.de/e/aegyptologie/termine/index.html"; script = pkgs.lib.panoptikon.urlSelector "#current_events" "https://www.geschkult.fu-berlin.de/e/aegyptologie/termine/index.html";
reporters = [matrix-kmein]; reporters = [matrix-kmein];
}; };
}; };

View File

@@ -1,11 +1,9 @@
{ {
lib,
pkgs, pkgs,
config, config,
niveumPackages, lib,
... ...
}: let }: let
inherit (import ../../lib) tmpfilesConfig;
liquidsoapDirectory = "/var/cache/liquidsoap"; liquidsoapDirectory = "/var/cache/liquidsoap";
icecastPassword = "hackme"; icecastPassword = "hackme";
refresh-qasaid = pkgs.writers.writeDashBin "refresh-qasaid" '' refresh-qasaid = pkgs.writers.writeDashBin "refresh-qasaid" ''
@@ -23,7 +21,7 @@
poem: .[0].["#text"], poem: .[0].["#text"],
author: .[1].["#text"] author: .[1].["#text"]
}) })
' | ${niveumPackages.cyberlocker-tools}/bin/cput qasaid.json ' | ${pkgs.cyberlocker-tools}/bin/cput qasaid.json
''; '';
qasida-poem = pkgs.writers.writeDash "qasida.sh" '' qasida-poem = pkgs.writers.writeDash "qasida.sh" ''
set -efu set -efu
@@ -136,7 +134,7 @@ in {
environment.systemPackages = [refresh-qasaid]; environment.systemPackages = [refresh-qasaid];
systemd.tmpfiles.rules = [ systemd.tmpfiles.rules = [
(tmpfilesConfig { (pkgs.lib.niveum.tmpfilesConfig {
type = "d"; type = "d";
path = liquidsoapDirectory; path = liquidsoapDirectory;
mode = "0750"; mode = "0750";

View File

@@ -3,9 +3,7 @@
pkgs, pkgs,
lib, lib,
... ...
}: let }: {
inherit (import ../../lib) retiolumAddresses;
in {
imports = [ imports = [
../kibbeh/hardware-configuration.nix ../kibbeh/hardware-configuration.nix
../../configs/tlp.nix ../../configs/tlp.nix
@@ -50,7 +48,7 @@ in {
networking = { networking = {
hostName = "kabsa"; hostName = "kabsa";
wireless.interfaces = ["wlp3s0"]; wireless.interfaces = ["wlp3s0"];
retiolum = retiolumAddresses.kabsa; retiolum = pkgs.lib.niveum.retiolumAddresses.kabsa;
}; };
system.stateVersion = "23.11"; system.stateVersion = "23.11";

View File

@@ -1,7 +1,6 @@
{ {
config, config,
pkgs, pkgs,
niveumPackages,
... ...
}: }:
@@ -10,7 +9,7 @@
./hardware-configuration.nix ./hardware-configuration.nix
../../configs/spacetime.nix ../../configs/spacetime.nix
../../configs/admin-essentials.nix ../../configs/admin-essentials.nix
../../configs/keyboard.nix ../../configs/keyboard
../../configs/sound.nix ../../configs/sound.nix
../../configs/printing.nix ../../configs/printing.nix
../../configs/nix.nix ../../configs/nix.nix
@@ -76,9 +75,9 @@
libreoffice libreoffice
xournalpp xournalpp
jellyfin-media-player jellyfin-media-player
niveumPackages.mpv-tv mpv-tv
telegram-desktop telegram-desktop
(niveumPackages.mpv-radio.override { di-fm-key-file = config.age.secrets.di-fm-key.path; }) (mpv-radio.override { di-fm-key-file = config.age.secrets.di-fm-key.path; })
spotify spotify
]; ];
}; };
@@ -88,7 +87,7 @@
git git
vim vim
tmux tmux
(niveumPackages.vim.override { colorscheme = "base16-gruvbox-dark-medium"; }) (vim-kmein.override { colorscheme = "base16-gruvbox-dark-medium"; })
]; ];
system.stateVersion = "23.11"; system.stateVersion = "23.11";

View File

@@ -3,9 +3,7 @@
config, config,
pkgs, pkgs,
... ...
}: let }: {
inherit (import ../../lib) kieran retiolumAddresses restic;
in {
imports = [ imports = [
./gitea.nix ./gitea.nix
./hardware-configuration.nix ./hardware-configuration.nix
@@ -20,7 +18,7 @@ in {
./scrabble.nix ./scrabble.nix
# ./onlyoffice.nix # ./onlyoffice.nix
./retiolum-map.nix ./retiolum-map.nix
./tarot.nix ./oracle
./tt-rss.nix ./tt-rss.nix
./weechat.nix ./weechat.nix
../../configs/monitoring.nix ../../configs/monitoring.nix
@@ -36,7 +34,7 @@ in {
services.restic.backups.niveum = { services.restic.backups.niveum = {
initialize = true; initialize = true;
inherit (restic) repository; repository = pkgs.lib.niveum.restic.repository;
timerConfig = { timerConfig = {
OnCalendar = "daily"; OnCalendar = "daily";
RandomizedDelaySec = "1h"; RandomizedDelaySec = "1h";
@@ -82,7 +80,7 @@ in {
firewall.allowedTCPPorts = [80 443]; firewall.allowedTCPPorts = [80 443];
hostName = "makanek"; hostName = "makanek";
interfaces.ens3.useDHCP = true; interfaces.ens3.useDHCP = true;
retiolum = retiolumAddresses.makanek; retiolum = pkgs.lib.niveum.retiolumAddresses.makanek;
useDHCP = false; useDHCP = false;
}; };
@@ -115,7 +113,7 @@ in {
security.acme = { security.acme = {
acceptTerms = true; acceptTerms = true;
defaults.email = kieran.email; defaults.email = pkgs.lib.niveum.kieran.email;
}; };
services.nginx.virtualHosts."www.kmein.de" = { services.nginx.virtualHosts."www.kmein.de" = {

View File

@@ -1,6 +1,5 @@
{ config, ... }: { config, pkgs, ... }:
let let
inherit (import ../../lib) sshPort;
domain = "code.kmein.de"; domain = "code.kmein.de";
in { in {
services.anubis = { services.anubis = {
@@ -27,7 +26,7 @@ in {
settings = { settings = {
server.ROOT_URL = "https://${domain}"; server.ROOT_URL = "https://${domain}";
server.DOMAIN = domain; server.DOMAIN = domain;
server.SSH_PORT = sshPort; server.SSH_PORT = pkgs.lib.niveum.sshPort;
service.DISABLE_REGISTRATION = true; service.DISABLE_REGISTRATION = true;
}; };
}; };

View File

@@ -1,12 +1,12 @@
{ {
config, config,
pkgs, pkgs,
lib,
... ...
}: let }: let
backupLocation = "/var/lib/codimd-backup"; backupLocation = "/var/lib/codimd-backup";
stateLocation = "/var/lib/codimd/state.sqlite"; stateLocation = "/var/lib/codimd/state.sqlite";
domain = "pad.kmein.de"; domain = "pad.kmein.de";
inherit (import ../../lib) tmpfilesConfig;
in { in {
services.nginx.virtualHosts.${domain} = { services.nginx.virtualHosts.${domain} = {
enableACME = true; enableACME = true;
@@ -56,7 +56,7 @@ in {
]; ];
systemd.tmpfiles.rules = [ systemd.tmpfiles.rules = [
(tmpfilesConfig { (pkgs.lib.niveum.tmpfilesConfig {
user = "codimd"; user = "codimd";
group = "codimd"; group = "codimd";
mode = "0755"; mode = "0755";

Some files were not shown because too many files have changed in this diff Show More