1
0
mirror of https://github.com/kmein/niveum synced 2026-03-25 22:01:08 +01:00

1 Commits

Author SHA1 Message Date
2d25c1fc7b wip: add specus VPN 2023-04-14 08:43:23 +02:00
108 changed files with 2231 additions and 3105 deletions

View File

@@ -9,29 +9,6 @@ jobs:
matrix: matrix:
system: [makanek,manakish,kabsa,zaatar,ful] system: [makanek,manakish,kabsa,zaatar,ful]
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v2
- name: Install QEMU (ARM) - uses: cachix/install-nix-action@v16
run: sudo apt-get install -y qemu-user-static - run: nix run .?submodules=1#apps.nixinate.${{matrix.system}}-dry-run
if: ${{ matrix.system == 'ful' }}
- name: Install Nix (ARM)
uses: cachix/install-nix-action@v16
if: ${{ matrix.system == 'ful' }}
with:
extra_nix_config: |
system = aarch64-linux
- name: Install Nix (x86_64)
uses: cachix/install-nix-action@v16
if: ${{ matrix.system != 'ful' }}
- name: nixos-rebuild dry-build
run: |
# remove secrets: ref https://stackoverflow.com/questions/1260748/how-do-i-remove-a-submodule/36593218
git submodule deinit -f secrets
rm -rf .git/modules/secrets
git rm -f secrets
# recreate secrets
mkdir secrets
cat secrets.txt | while read -r path; do touch $path; done
git add secrets
nix run nixpkgs#nixos-rebuild -- dry-build --flake $GITHUB_WORKSPACE#${{matrix.system}}

View File

@@ -4,7 +4,18 @@
lib, lib,
... ...
}: let }: let
inherit (import ../lib/email.nix) defaults thunderbirdProfile; defaults = {
aerc.enable = true;
realName = "Kierán Meinhardt";
folders.inbox = "INBOX";
};
hu-defaults = {
imap.host = "mailbox.cms.hu-berlin.de";
imap.port = 993;
smtp.host = "mailhost.cms.hu-berlin.de";
smtp.port = 25;
smtp.tls.useStartTls = true;
};
in { in {
age.secrets = { age.secrets = {
email-password-cock = { email-password-cock = {
@@ -13,12 +24,42 @@ in {
group = config.users.users.me.group; group = config.users.users.me.group;
mode = "400"; mode = "400";
}; };
email-password-fysi = {
file = ../secrets/email-password-fysi.age;
owner = config.users.users.me.name;
group = config.users.users.me.group;
mode = "400";
};
email-password-posteo = { email-password-posteo = {
file = ../secrets/email-password-posteo.age; file = ../secrets/email-password-posteo.age;
owner = config.users.users.me.name; owner = config.users.users.me.name;
group = config.users.users.me.group; group = config.users.users.me.group;
mode = "400"; mode = "400";
}; };
email-password-meinhark = {
file = ../secrets/email-password-meinhark.age;
owner = config.users.users.me.name;
group = config.users.users.me.group;
mode = "400";
};
email-password-meinhaki = {
file = ../secrets/email-password-meinhaki.age;
owner = config.users.users.me.name;
group = config.users.users.me.group;
mode = "400";
};
email-password-dslalewa = {
file = ../secrets/email-password-dslalewa.age;
owner = config.users.users.me.name;
group = config.users.users.me.group;
mode = "400";
};
email-password-fsklassp = {
file = ../secrets/email-password-fsklassp.age;
owner = config.users.users.me.name;
group = config.users.users.me.group;
mode = "400";
};
}; };
home-manager.users.me = { home-manager.users.me = {
@@ -69,7 +110,90 @@ in {
config.home-manager.users.me.accounts.email.accounts); config.home-manager.users.me.accounts.email.accounts);
}; };
accounts.email.accounts = { accounts.email.accounts = rec {
hu-student =
lib.recursiveUpdate defaults
(lib.recursiveUpdate hu-defaults
rec {
userName = "meinhark";
address = "kieran.felix.meinhardt@hu-berlin.de";
aliases = ["${userName}@hu-berlin.de"];
passwordCommand = "${pkgs.coreutils}/bin/cat ${config.age.secrets.email-password-meinhark.path}";
});
hu-student-cs =
lib.recursiveUpdate defaults
(lib.recursiveUpdate hu-defaults
rec {
userName = "meinhark";
address = "kieran.felix.meinhardt@informatik.hu-berlin.de";
aliases = ["${userName}@informatik.hu-berlin.de"];
imap.host = "mailbox.informatik.hu-berlin.de";
smtp.host = "mailhost.informatik.hu-berlin.de";
passwordCommand = "${pkgs.coreutils}/bin/cat ${config.age.secrets.email-password-meinhark.path}";
});
hu-employee =
lib.recursiveUpdate defaults
(lib.recursiveUpdate hu-defaults
rec {
userName = "meinhaki";
address = "kieran.meinhardt@hu-berlin.de";
aliases = ["${userName}@hu-berlin.de"];
passwordCommand = "${pkgs.coreutils}/bin/cat ${config.age.secrets.email-password-meinhaki.path}";
aerc.extraAccounts.signature-file = toString (pkgs.writeText "signature" signature.text);
signature = {
showSignature = "append";
text = ''
${defaults.realName}
Studentische Hilfskraft / Administrator ALEW
Humboldt-Universität zu Berlin
Telefon: +49 (0)30 2093 9634
Raum 3.212, Dorotheenstraße 24, 10117 Berlin-Mitte
https://alew.hu-berlin.de
'';
};
});
hu-admin =
lib.recursiveUpdate defaults
(lib.recursiveUpdate hu-defaults
rec {
userName = "dslalewa";
address = "admin.alew.vglsprwi@hu-berlin.de";
aliases = ["${userName}@hu-berlin.de"];
passwordCommand = "${pkgs.coreutils}/bin/cat ${config.age.secrets.email-password-dslalewa.path}";
inherit (hu-employee) signature;
aerc.extraAccounts.signature-file = toString (pkgs.writeText "signature" signature.text);
});
hu-fsi =
lib.recursiveUpdate defaults
(lib.recursiveUpdate hu-defaults
rec {
userName = "fsklassp";
passwordCommand = "${pkgs.coreutils}/bin/cat ${config.age.secrets.email-password-fsklassp.path}";
address = "${userName}@hu-berlin.de";
realName = "FSI Klassische Philologie";
aerc.extraAccounts.signature-file = toString (pkgs.writeText "signature" signature.text);
signature = {
showSignature = "append";
text = ''
Fachschafts-Initiative
Humboldt-Universität zu Berlin
Sprach- und literaturwissenschaftliche Fakultät
Institut für klassische Philologie
Unter den Linden 6
10099 Berlin
'';
};
});
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";
};
cock = cock =
lib.recursiveUpdate defaults lib.recursiveUpdate defaults
rec { rec {
@@ -96,26 +220,6 @@ in {
# programs.himalaya.enable = true; # programs.himalaya.enable = true;
programs.thunderbird = {
enable = true;
settings = {
};
profiles.${thunderbirdProfile} = {
isDefault = true;
settings = {
"mail.default_send_format" = 1;
"msgcompose.default_colors" = false;
"msgcompose.text_color" = config.lib.stylix.colors.withHashtag.base00;
"msgcompose.background_color" = config.lib.stylix.colors.withHashtag.base05;
};
userChrome = ''
'';
userContent = ''
'';
withExternalGnupg = false;
};
};
programs.aerc = { programs.aerc = {
enable = true; enable = true;
@@ -247,8 +351,8 @@ in {
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)";
}; };
filters = { filters = {
"text/plain" = "${pkgs.gawk}/bin/awk -f ${pkgs.aerc}/share/aerc/filters/colorize"; "text/plain" = "${pkgs.gawk}/bin/awk -f ${pkgs.aerc}/share/aerc/filters/colorize";
@@ -257,7 +361,7 @@ in {
# "text/html" = # "text/html" =
# "${pkgs.aerc}/share/aerc/filters/html | ${pkgs.aerc}/share/aerc/filters/colorize"; # "${pkgs.aerc}/share/aerc/filters/html | ${pkgs.aerc}/share/aerc/filters/colorize";
# "text/*" = # "text/*" =
# ''${pkgs.bat}/bin/bat -fP --theme=ansi --file-name="$AERC_FILENAME "''; # ''${pkgs.bat}/bin/bat -fP --file-name="$AERC_FILENAME "'';
"message/delivery-status" = "${pkgs.gawk}/bin/awk -f ${pkgs.aerc}/share/aerc/filters/colorize"; "message/delivery-status" = "${pkgs.gawk}/bin/awk -f ${pkgs.aerc}/share/aerc/filters/colorize";
"message/rfc822" = "${pkgs.gawk}/bin/awk -f ${pkgs.aerc}/share/aerc/filters/colorize"; "message/rfc822" = "${pkgs.gawk}/bin/awk -f ${pkgs.aerc}/share/aerc/filters/colorize";
"application/x-sh" = "${pkgs.bat}/bin/bat -fP -l sh"; "application/x-sh" = "${pkgs.bat}/bin/bat -fP -l sh";

View File

@@ -6,6 +6,7 @@
}: let }: let
alacritty-cfg = theme: alacritty-cfg = theme:
(pkgs.formats.yaml {}).generate "alacritty.yml" { (pkgs.formats.yaml {}).generate "alacritty.yml" {
window.opacity = 0.99;
bell = { bell = {
animation = "EaseOut"; animation = "EaseOut";
duration = 100; duration = 100;
@@ -56,28 +57,12 @@
in { in {
environment.variables.TERMINAL = "alacritty"; environment.variables.TERMINAL = "alacritty";
home-manager.users.me = { environment.systemPackages = [
programs.alacritty = { alacritty-pkg
enable = true; ];
settings = {
key_bindings = [ environment.etc = {
{ "themes/dark/alacritty.yml".source = alacritty-cfg (import ../lib/colours/owickstrom-dark.nix);
key = "Plus"; "themes/light/alacritty.yml".source = alacritty-cfg (import ../lib/colours/owickstrom-light.nix);
mods = "Control";
action = "IncreaseFontSize";
}
{
key = "Minus";
mods = "Control";
action = "DecreaseFontSize";
}
{
key = "Key0";
mods = "Control";
action = "ResetFontSize";
}
];
};
};
}; };
} }

View File

@@ -1,5 +0,0 @@
{
programs.adb.enable = true;
users.users.me.extraGroups = ["adbusers"];
}

View File

@@ -16,12 +16,10 @@ in {
extraBackupArgs = [ extraBackupArgs = [
"--exclude=/home/kfm/projects/nixpkgs/.git" "--exclude=/home/kfm/projects/nixpkgs/.git"
"--exclude=node_modules" "--exclude=node_modules"
"--exclude=.parcel-cache"
]; ];
paths = [ paths = [
"/home/kfm/work" "/home/kfm/work"
"/home/kfm/projects" "/home/kfm/projects"
"/home/kfm/Zotero"
"/home/kfm/notes" "/home/kfm/notes"
"/home/kfm/Maildir" "/home/kfm/Maildir"
"/home/kfm/cloud" "/home/kfm/cloud"

View File

@@ -1,7 +1,7 @@
{pkgs, ...}: { {
programs.bash = { programs.bash = {
promptInit = '' promptInit = ''
PS1="$(${pkgs.ncurses}/bin/tput bold)\w \$([[ \$? == 0 ]] && echo \"\[\033[1;32m\]\" || echo \"\[\033[1;31m\]\")\$$(${pkgs.ncurses}/bin/tput sgr0) "''; PS1="$(tput bold)\w \$([[ \$? == 0 ]] && echo \"\[\033[1;32m\]\" || echo \"\[\033[1;31m\]\")\$$(tput sgr0) "'';
interactiveShellInit = '' interactiveShellInit = ''
set -o vi set -o vi
''; '';

View File

@@ -12,15 +12,23 @@ in {
user = config.users.users.me.name; user = config.users.users.me.name;
group = "users"; group = "users";
mode = "0755"; mode = "0755";
argument = "${config.users.users.me.home}/cloud/nextcloud/Uni"; argument = "${config.users.users.me.home}/cloud/Seafile/Uni";
path = "${config.users.users.me.home}/uni"; path = "${config.users.users.me.home}/uni";
} }
{
type = "L+";
user = config.users.users.me.name;
group = "users";
mode = "0755";
argument = "${config.users.users.me.home}/cloud/syncthing/common/mahlzeit";
path = "${config.users.users.me.home}/mahlzeit";
}
]; ];
home-manager.users.me = { home-manager.users.me = {
services.gnome-keyring.enable = true; services.gnome-keyring.enable = false;
services.nextcloud-client = { services.nextcloud-client = {
enable = true; enable = false;
startInBackground = true; startInBackground = true;
}; };
systemd.user.services.nextcloud-client = { systemd.user.services.nextcloud-client = {
@@ -32,7 +40,7 @@ in {
}; };
systemd.user.services.nextcloud-syncer = { systemd.user.services.nextcloud-syncer = {
enable = false; enable = true;
wants = ["network-online.target"]; wants = ["network-online.target"];
wantedBy = ["default.target"]; wantedBy = ["default.target"];
startAt = "*:00/10"; startAt = "*:00/10";
@@ -40,7 +48,7 @@ in {
kieran = { kieran = {
user = "kieran"; user = "kieran";
passwordFile = config.age.secrets.nextcloud-password-kieran.path; passwordFile = config.age.secrets.nextcloud-password-kieran.path;
endpoint = "https://cloud.kmein.de"; endpoint = "https://cloud.xn--kiern-0qa.de";
target = "${config.users.users.me.home}/notes"; target = "${config.users.users.me.home}/notes";
}; };
in '' in ''
@@ -58,7 +66,7 @@ in {
set -efu set -efu
book="$({ book="$({
${pkgs.findutils}/bin/find ${config.users.users.me.home}/cloud/syncthing/library -type f ${pkgs.findutils}/bin/find ${config.users.users.me.home}/cloud/syncthing/library -type f
${pkgs.findutils}/bin/find ${config.users.users.me.home}/cloud/nextcloud/Books -type f ${pkgs.findutils}/bin/find ${config.users.users.me.home}/cloud/Seafile/Books -type f
} | ${pkgs.fzf}/bin/fzf)" } | ${pkgs.fzf}/bin/fzf)"
exec ${pkgs.zathura}/bin/zathura "$book" exec ${pkgs.zathura}/bin/zathura "$book"
'') '')
@@ -95,6 +103,16 @@ in {
mode = "400"; mode = "400";
}; };
fileSystems."/media/moodle" = {
device = "zaatar.r:/moodle";
fsType = "nfs";
options = [
"x-systemd.idle-timeout=600"
"noauto"
"x-systemd.automount"
];
};
services.syncthing = rec { services.syncthing = rec {
enable = true; enable = true;
user = "kfm"; user = "kfm";
@@ -107,14 +125,9 @@ in {
folders = let folders = let
cloud-dir = "${config.users.users.me.home}/cloud"; cloud-dir = "${config.users.users.me.home}/cloud";
in { in {
"${cloud-dir}/syncthing/zotero/storage".devices = ["kabsa" "manakish"];
"${cloud-dir}/syncthing/common".devices = ["kabsa" "manakish"]; "${cloud-dir}/syncthing/common".devices = ["kabsa" "manakish"];
"${cloud-dir}/syncthing/library".devices = ["kabsa" "manakish" "heym"]; "${cloud-dir}/syncthing/library".devices = ["kabsa" "manakish" "heym"];
"${cloud-dir}/syncthing/mundoiu".devices = ["kabsa" "manakish" "heym"]; "${cloud-dir}/syncthing/mundoiu".devices = ["kabsa" "manakish" "heym"];
"${cloud-dir}/syncthing/obsidian" = {
devices = ["kabsa" "manakish" "heym"];
id = "3r1hu-3barr";
};
"${cloud-dir}/syncthing/music" = { "${cloud-dir}/syncthing/music" = {
devices = ["kabsa" "manakish" "heym" "zaatar"]; devices = ["kabsa" "manakish" "heym" "zaatar"];
id = "music"; id = "music";

View File

@@ -12,6 +12,7 @@
in { in {
imports = [ imports = [
inputs.self.nixosModules.system-dependent inputs.self.nixosModules.system-dependent
inputs.self.nixosModules.traadfri
inputs.self.nixosModules.power-action inputs.self.nixosModules.power-action
{ {
boot.supportedFilesystems = ["ntfs"]; boot.supportedFilesystems = ["ntfs"];
@@ -30,7 +31,7 @@ in {
}; };
} }
{ {
boot.tmp.cleanOnBoot = true; boot.cleanTmpDir = true;
boot.loader.timeout = 1; boot.loader.timeout = 1;
} }
{ {
@@ -55,24 +56,12 @@ in {
enable = true; enable = true;
options = { options = {
selection-clipboard = "clipboard"; selection-clipboard = "clipboard";
recolor-keephue = true;
# first-page-column = "1:1"; # makes side-by-side mode start on the left side # first-page-column = "1:1"; # makes side-by-side mode start on the left side
}; };
}; };
}; };
} }
{
environment.systemPackages = [
pkgs.capitaine-cursors
];
home-manager.users.me = {
home.pointerCursor = {
name = "capitaine-cursors-white";
package = pkgs.capitaine-cursors;
size = 12;
};
};
}
{ {
users.mutableUsers = false; users.mutableUsers = false;
@@ -81,15 +70,11 @@ in {
users.users.me = { users.users.me = {
name = "kfm"; name = "kfm";
description = kieran.name; description = kieran.name;
passwordFile = config.age.secrets.kfm-password.path; hashedPassword = "$6$w9hXyGFl/.IZBXk$5OiWzS1G.5hImhh1YQmZiCXYNAJhi3X6Y3uSLupJNYYXPLMsQpx2fwF4Xr2uYzGMV8Foqh8TgUavx1APD9rcb/";
isNormalUser = true; isNormalUser = true;
uid = 1000; uid = 1000;
}; };
age.secrets = {
kfm-password.file = ../secrets/kfm-password.age;
};
home-manager.users.me.xdg.enable = true; home-manager.users.me.xdg.enable = true;
} }
{ {
@@ -111,7 +96,7 @@ in {
swallow = command: "${niveumPackages.swallow}/bin/swallow ${command}"; swallow = command: "${niveumPackages.swallow}/bin/swallow ${command}";
in { in {
"ß" = "${pkgs.util-linux}/bin/setsid"; "ß" = "${pkgs.util-linux}/bin/setsid";
cat = "${pkgs.bat}/bin/bat --theme=ansi --style=plain"; cat = "${pkgs.bat}/bin/bat --style=plain";
chromium-incognito = "chromium --user-data-dir=$(mktemp -d /tmp/chr.XXXXXX) --no-first-run --incognito"; chromium-incognito = "chromium --user-data-dir=$(mktemp -d /tmp/chr.XXXXXX) --no-first-run --incognito";
cp = "cp --interactive"; cp = "cp --interactive";
ip = "${pkgs.iproute2}/bin/ip -c"; ip = "${pkgs.iproute2}/bin/ip -c";
@@ -236,11 +221,10 @@ in {
}; };
}; };
} }
./android.nix
./stylix.nix
./alacritty.nix ./alacritty.nix
./backup.nix ./backup.nix
./bash.nix ./bash.nix
./beets.nix
./bluetooth.nix ./bluetooth.nix
./aerc.nix ./aerc.nix
./ccc.nix ./ccc.nix
@@ -258,10 +242,7 @@ in {
./hledger.nix ./hledger.nix
./htop.nix ./htop.nix
./hu-berlin.nix ./hu-berlin.nix
./fu-berlin.nix
./fysi.nix
./i3.nix ./i3.nix
./i3status-rust.nix
./keyboard.nix ./keyboard.nix
./lb.nix ./lb.nix
./mpv.nix ./mpv.nix
@@ -276,21 +257,25 @@ in {
./polkit.nix ./polkit.nix
./power-action.nix ./power-action.nix
./printing.nix ./printing.nix
# ./openweathermap.nix
./wallpaper.nix
./redshift.nix ./redshift.nix
./retiolum.nix ./retiolum.nix
./rofi.nix ./rofi.nix
./spacetime.nix ./spacetime.nix
./seafile.nix
./ssh.nix ./ssh.nix
./sshd.nix ./sshd.nix
./sound.nix ./sound.nix
./sudo.nix ./sudo.nix
./themes.nix
./tmux.nix ./tmux.nix
./traadfri.nix
./unclutter.nix ./unclutter.nix
./vscode.nix ./vscode.nix
./watson.nix ./watson.nix
./zsh.nix ./zsh.nix
./tor.nix ./tor.nix
./stw-berlin.nix
./mastodon-bot.nix ./mastodon-bot.nix
]; ];
} }

View File

@@ -3,7 +3,7 @@
pkgs, pkgs,
... ...
}: let }: let
inherit (import ../lib) defaultApplications theme; inherit (import ../lib) defaultApplications colours theme;
in { in {
home-manager.users.me.services.dunst = { home-manager.users.me.services.dunst = {
enable = true; enable = true;
@@ -11,13 +11,16 @@ in {
settings = { settings = {
global = { global = {
transparency = 10; transparency = 10;
font = "Monospace 8";
geometry = "200x5-30+20"; geometry = "200x5-30+20";
frame_color = colours.foreground;
follow = "mouse"; follow = "mouse";
indicate_hidden = true; indicate_hidden = true;
notification_height = 0; notification_height = 0;
separator_height = 2; separator_height = 2;
padding = 8; padding = 8;
horizontal_padding = 8; horizontal_padding = 8;
separator_color = "auto";
sort = true; sort = true;
markup = "full"; markup = "full";
format = "%a\\n<b>%s</b>\\n%b"; format = "%a\\n<b>%s</b>\\n%b";
@@ -40,13 +43,22 @@ in {
mouse_right_click = "close_current"; mouse_right_click = "close_current";
mouse_middle_click = "close_all"; mouse_middle_click = "close_all";
}; };
urgency_low = { urgency_low = rec {
frame_color = background;
background = colours.foreground;
foreground = colours.background;
timeout = 5; timeout = 5;
}; };
urgency_normal = { urgency_normal = rec {
frame_color = background;
background = colours.foreground;
foreground = colours.background;
timeout = 10; timeout = 10;
}; };
urgency_critical = { urgency_critical = rec {
frame_color = background;
background = colours.red.dark;
foreground = colours.background;
timeout = 0; timeout = 0;
}; };
}; };

View File

@@ -31,7 +31,7 @@
}; };
newGardiner = zip-font "NewGardiner" { newGardiner = zip-font "NewGardiner" {
url = "https://mjn.host.cs.st-andrews.ac.uk/egyptian/fonts/NewGardiner.zip"; url = "https://mjn.host.cs.st-andrews.ac.uk/egyptian/fonts/NewGardiner.zip";
hash = "sha256-i7ZBN28no/884fYMA7ZJ47WpkwZXzY//TK0bDz21pE0="; sha256 = "1jd0qa6shh9pqqyig2w43m9l9rv1i50l73jzkhb6g6mqxbhb1mip";
stripRoot = false; stripRoot = false;
}; };
junicode2 = zip-font "JunicodeTwo" { junicode2 = zip-font "JunicodeTwo" {
@@ -68,7 +68,6 @@ in {
corefonts corefonts
crimson crimson
eb-garamond eb-garamond
ipaexfont
jsesh jsesh
egyptianHiero egyptianHiero
egyptianText egyptianText
@@ -109,7 +108,7 @@ in {
fontconfig.defaultFonts = rec { fontconfig.defaultFonts = rec {
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 Devanagari" "Noto Sans CJK JP" "Noto Sans Coptic"]; sansSerif = ["Noto Sans Display" "Noto Kufi Arabic" "Noto Sans Devanagari" "Noto Sans CJK JP"];
emoji = ["Noto Color Emoji"]; emoji = ["Noto Color Emoji"];
}; };
# xelatex fails with woff files # xelatex fails with woff files

View File

@@ -1,124 +0,0 @@
{
config,
pkgs,
lib,
...
}: let
username = "meinhak99";
inherit (import ../lib/email.nix) defaults pronouns;
fu-defaults = rec {
imap.host = "mail.zedat.fu-berlin.de";
smtp.host = imap.host;
folders.drafts = "Entwürfe";
folders.sent = "Gesendet";
folders.trash = "Papierkorb";
};
in {
home-manager.users.me = {
programs.ssh = {
matchBlocks = {
fu-berlin = {
user = username;
hostname = "login.zedat.fu-berlin.de";
setEnv.TERM = "xterm";
};
};
};
accounts.email.accounts = {
fu-student =
lib.recursiveUpdate defaults
(lib.recursiveUpdate fu-defaults
rec {
userName = "meinhak99";
address = "kieran.meinhardt@fu-berlin.de";
aliases = ["${userName}@fu-berlin.de"];
passwordCommand = "${pkgs.coreutils}/bin/cat ${config.age.secrets.email-password-meinhak99.path}";
aerc.extraAccounts.signature-file = toString (pkgs.writeText "signature" signature.text);
signature = {
showSignature = "append";
text = ''
${defaults.realName}
${pronouns}
---
Studentische Hilfskraft / ZODIAC
Freie Universität Berlin
Telefon: +49 30 838 58118
Arnimallee 10, Raum K011, 14195 Berlin
'';
};
});
};
};
systemd.user.services.fu-blackboard-calendar = {
enable = true;
# startAt = "*:00/10";
after = ["vdirsyncer.service"];
wantedBy = ["default.target"];
script = ''
${pkgs.curl}/bin/curl $(cat ${config.age.secrets.blackboard-calendar-ics.path}) | ${pkgs.khal}/bin/khal import -
'';
serviceConfig = {
Type = "oneshot";
Restart = "on-failure";
};
};
age.secrets = {
email-password-meinhak99 = {
file = ../secrets/email-password-meinhak99.age;
owner = config.users.users.me.name;
group = config.users.users.me.group;
mode = "400";
};
blackboard-calendar-ics = {
file = ../secrets/blackboard-calendar-ics.age;
owner = config.users.users.me.name;
group = config.users.users.me.group;
mode = "400";
};
};
# https://www.zedat.fu-berlin.de/tip4u_157.pdf
fileSystems = let
fu-berlin-cifs-options = [
"uid=${toString config.users.users.me.uid}"
"gid=${toString config.users.groups.users.gid}"
"rw"
"nounix"
"domain=fu-berlin"
"noauto"
"x-systemd.automount"
"x-systemd.device-timeout=1"
"x-systemd.idle-timeout=1min"
];
in {
"/media/fu-berlin/zodiac" = {
device = "//trove.storage.fu-berlin.de/GESCHKULT";
fsType = "cifs";
options =
fu-berlin-cifs-options
++ [
"credentials=${config.age.secrets.cifs-credentials-zodiac.path}"
];
};
};
age.secrets = {
cifs-credentials-zodiac.file = ../secrets/cifs-credentials-zodiac.age;
};
systemd.services.fu-vpn = {
enable = true;
wants = ["network-online.target"];
serviceConfig.LoadCredential = "password:${config.age.secrets.email-password-meinhak99.path}";
script = ''
if ${pkgs.wirelesstools}/bin/iwgetid | ${pkgs.gnugrep}/bin/grep --invert-match eduroam
then
cat "$CREDENTIALS_DIRECTORY/password" | ${pkgs.openconnect}/bin/openconnect vpn.fu-berlin.de --user ${username} --passwd-on-stdin
fi
'';
};
}

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

@@ -1,22 +1,37 @@
{pkgs, ...}: { {
programs.fzf = { pkgs,
fuzzyCompletion = true; lib,
keybindings = true; ...
}; }: {
environment = {
home-manager.users.me = { systemPackages = [pkgs.fzf];
programs.fzf = rec { variables = rec {
enable = true; FZF_DEFAULT_COMMAND = "${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"; FZF_DEFAULT_OPTS =
defaultOptions = ["--height=40%"]; lib.escapeShellArgs ["--height=40%"];
changeDirWidgetCommand = "${pkgs.fd}/bin/fd --type d"; FZF_ALT_C_COMMAND = "${pkgs.fd}/bin/fd --type d";
changeDirWidgetOptions = [ FZF_ALT_C_OPTS = lib.escapeShellArgs [
"--preview='${pkgs.tree}/bin/tree -L 1 {}'" "--preview='${pkgs.tree}/bin/tree -L 1 \"{}\"'"
"--bind=space:toggle-preview" "--bind=space:toggle-preview"
"--preview-window=hidden" "--preview-window=hidden"
]; ];
fileWidgetCommand = defaultCommand; FZF_CTRL_T_COMMAND = FZF_DEFAULT_COMMAND;
fileWidgetOptions = ["--preview='head -$LINES {}'"]; FZF_CTRL_T_OPTS =
lib.escapeShellArgs ["--preview='head -$LINES {}'"];
}; };
}; };
programs.zsh.interactiveShellInit = ''
if [[ $options[zle] = on ]]; then
. ${pkgs.fzf}/share/fzf/completion.zsh
. ${pkgs.fzf}/share/fzf/key-bindings.zsh
fi
'';
programs.bash.interactiveShellInit = ''
if [[ :$SHELLOPTS: =~ :(vi|emacs): ]]; then
. ${pkgs.fzf}/share/fzf/completion.bash
. ${pkgs.fzf}/share/fzf/key-bindings.bash
fi
'';
} }

View File

@@ -51,7 +51,6 @@ in {
pull.ff = "only"; pull.ff = "only";
rebase.autoStash = true; rebase.autoStash = true;
merge.autoStash = true; merge.autoStash = true;
push.autoSetupRemote = true;
# # ref https://github.com/dandavison/delta # # ref https://github.com/dandavison/delta
# core.pager = "${pkgs.delta}/bin/delta"; # core.pager = "${pkgs.delta}/bin/delta";

View File

@@ -2,28 +2,23 @@
config, config,
pkgs, pkgs,
... ...
}: let }: {
ledgerDirectory = "$HOME/projects/ledger";
timeLedger = "${ledgerDirectory}/time.timeclock";
hora = pkgs.writers.writeDashBin "hora" ''
${pkgs.hledger}/bin/hledger -f "${timeLedger}" "$@"
'';
in {
environment.systemPackages = let environment.systemPackages = let
ledgerDirectory = "$HOME/projects/ledger";
timeLedger = "${ledgerDirectory}/time.timeclock";
git = "${pkgs.git}/bin/git -C ${ledgerDirectory}"; git = "${pkgs.git}/bin/git -C ${ledgerDirectory}";
in [ in [
pkgs.hledger pkgs.hledger
(pkgs.writers.writeDashBin "hora-edit" '' (pkgs.writers.writeDashBin "hora-edit" ''
$EDITOR + "${timeLedger}" && ${pkgs.git}/bin/git -C "$(${pkgs.coreutils}/bin/dirname ${timeLedger})" commit --all --message "$(${pkgs.coreutils}/bin/date -Im)" $EDITOR + "${timeLedger}" && ${pkgs.git}/bin/git -C "$(${pkgs.coreutils}/bin/dirname ${timeLedger})" commit --all --message "$(${pkgs.coreutils}/bin/date -Im)"
'') '')
hora (pkgs.writers.writeDashBin "hora" ''
(pkgs.writers.writeDashBin "hora-year" '' ${pkgs.hledger}/bin/hledger -f "${timeLedger}" "$@"
${hora}/bin/hora bal --tree --monthly --begin $(date +%Y) --depth 1
'') '')
(pkgs.writers.writeDashBin "hora-filli" '' (pkgs.writers.writeDashBin "hora-filli" ''
${pkgs.hledger}/bin/hledger -f "${timeLedger}" register fillidefilla -O csv \ ${pkgs.hledger}/bin/hledger -f "${timeLedger}" register fillidefilla -O csv \
-b "$(date -d "$(date +%Y-%m)-01 last month" +%Y-%m-%d)" \ -b "$(date -d "$(date +%Y-%m)-20 last month" +%Y-%m-%d)" \
-e "$(date -d "$(date +%Y-%m)-01" +%Y-%m-%d)" \ -e "$(date -d "$(date +%Y-%m)-20" +%Y-%m-%d)" \
| sed 's/(fillidefilla:\(.*\))/\1/g' \ | sed 's/(fillidefilla:\(.*\))/\1/g' \
| xsv select date,amount,total,account,description | xsv select date,amount,total,account,description
'') '')

View File

@@ -20,7 +20,7 @@
show_thread_names = false; show_thread_names = false;
sort_descending = true; sort_descending = true;
sort_key = "PERCENT_CPU"; sort_key = "PERCENT_CPU";
tree_view = false; tree_view = true;
update_process_names = false; update_process_names = false;
right_meters = ["Uptime" "Tasks" "LoadAverage" "Battery"]; right_meters = ["Uptime" "Tasks" "LoadAverage" "Battery"];
left_meters = ["LeftCPUs2" "RightCPUs2" "Memory" "Swap"]; left_meters = ["LeftCPUs2" "RightCPUs2" "Memory" "Swap"];

View File

@@ -4,13 +4,11 @@
lib, lib,
... ...
}: let }: let
inherit (import ../lib/email.nix) defaults pronouns; inherit (lib.strings) fileContents;
hu-defaults = { inherit (import ../lib) sshPort;
imap.host = "mailbox.cms.hu-berlin.de"; eduroam = {
imap.port = 993; identity = fileContents <secrets/eduroam/identity>;
smtp.host = "mailhost.cms.hu-berlin.de"; password = fileContents <secrets/eduroam/password>;
smtp.port = 25;
smtp.tls.useStartTls = true;
}; };
hu-berlin-cifs-options = [ hu-berlin-cifs-options = [
"uid=${toString config.users.users.me.uid}" "uid=${toString config.users.users.me.uid}"
@@ -19,6 +17,7 @@
"workgroup=german" "workgroup=german"
"credentials=${config.age.secrets.cifs-credentials-hu-berlin.path}" "credentials=${config.age.secrets.cifs-credentials-hu-berlin.path}"
"noauto" "noauto"
# "x-systemd.requires=hu-vpn.service"
"x-systemd.automount" "x-systemd.automount"
"x-systemd.device-timeout=1" "x-systemd.device-timeout=1"
"x-systemd.idle-timeout=1min" "x-systemd.idle-timeout=1min"
@@ -36,99 +35,15 @@ in {
options = hu-berlin-cifs-options; options = hu-berlin-cifs-options;
}; };
age.secrets = { age.secrets.cifs-credentials-hu-berlin.file = ../secrets/cifs-credentials-hu-berlin.age;
cifs-credentials-hu-berlin.file = ../secrets/cifs-credentials-hu-berlin.age;
email-password-meinhark = {
file = ../secrets/email-password-meinhark.age;
owner = config.users.users.me.name;
group = config.users.users.me.group;
mode = "400";
};
email-password-meinhaki = {
file = ../secrets/email-password-meinhaki.age;
owner = config.users.users.me.name;
group = config.users.users.me.group;
mode = "400";
};
email-password-dslalewa = {
file = ../secrets/email-password-dslalewa.age;
owner = config.users.users.me.name;
group = config.users.users.me.group;
mode = "400";
};
};
home-manager.users.me = { home-manager.users.me.programs.ssh = {
programs.ssh = { matchBlocks = {
matchBlocks = { "alew.hu-berlin.de" = {
"gruenau6.informatik.hu-berlin.de" = { user = "centos";
hostname = "gruenau6.informatik.hu-berlin.de"; hostname = "141.20.187.219";
user = "meinhark";
setEnv.TERM = "xterm";
};
"alew.hu-berlin.de" = {
user = "centos";
hostname = "141.20.187.219";
};
}; };
}; };
accounts.email.accounts = rec {
hu-student =
lib.recursiveUpdate defaults
(lib.recursiveUpdate hu-defaults
rec {
userName = "meinhark";
address = "kieran.felix.meinhardt@hu-berlin.de";
aliases = ["${userName}@hu-berlin.de"];
passwordCommand = "${pkgs.coreutils}/bin/cat ${config.age.secrets.email-password-meinhark.path}";
});
hu-student-cs =
lib.recursiveUpdate defaults
(lib.recursiveUpdate hu-defaults
rec {
userName = "meinhark";
address = "kieran.felix.meinhardt@informatik.hu-berlin.de";
aliases = ["${userName}@informatik.hu-berlin.de"];
imap.host = "mailbox.informatik.hu-berlin.de";
smtp.host = "mailhost.informatik.hu-berlin.de";
passwordCommand = "${pkgs.coreutils}/bin/cat ${config.age.secrets.email-password-meinhark.path}";
});
hu-employee =
lib.recursiveUpdate defaults
(lib.recursiveUpdate hu-defaults
rec {
userName = "meinhaki";
address = "kieran.meinhardt@hu-berlin.de";
aliases = ["${userName}@hu-berlin.de"];
passwordCommand = "${pkgs.coreutils}/bin/cat ${config.age.secrets.email-password-meinhaki.path}";
aerc.extraAccounts.signature-file = toString (pkgs.writeText "signature" signature.text);
signature = {
showSignature = "append";
text = ''
${defaults.realName}
${pronouns}
Studentische Hilfskraft / Administrator ALEW
Humboldt-Universität zu Berlin
Telefon: +49 (0)30 2093 9634
Raum 3.212, Dorotheenstraße 24, 10117 Berlin-Mitte
https://alew.hu-berlin.de
'';
};
});
hu-admin =
lib.recursiveUpdate defaults
(lib.recursiveUpdate hu-defaults
rec {
userName = "dslalewa";
address = "admin.alew.vglsprwi@hu-berlin.de";
aliases = ["${userName}@hu-berlin.de"];
passwordCommand = "${pkgs.coreutils}/bin/cat ${config.age.secrets.email-password-dslalewa.path}";
inherit (hu-employee) signature;
aerc.extraAccounts.signature-file = toString (pkgs.writeText "signature" signature.text);
});
};
}; };
environment.systemPackages = [ environment.systemPackages = [
@@ -148,23 +63,24 @@ in {
) )
]; ];
# ref https://github.com/NixOS/nixpkgs/issues/231038#issuecomment-1591888919
environment.etc."ppp/options".text = "ipcp-accept-remote";
systemd.services.hu-vpn = { systemd.services.hu-vpn = {
enable = true; enable = true;
wants = ["network-online.target"]; wants = ["network-online.target"];
serviceConfig.LoadCredential = "password:${config.age.secrets.email-password-meinhaki.path}"; serviceConfig.LoadCredential = "password:${config.age.secrets.email-password-meinhark.path}";
script = '' script = ''
${pkgs.openfortivpn}/bin/openfortivpn \ if ${pkgs.wirelesstools}/bin/iwgetid | ${pkgs.gnugrep}/bin/grep --invert-match eduroam
--password="$(cat "$CREDENTIALS_DIRECTORY/password")" \ then
--config=${ ${pkgs.openfortivpn}/bin/openfortivpn \
--password="$(cat "$CREDENTIALS_DIRECTORY/password")" \
--config=${
pkgs.writeText "hu-berlin.config" '' pkgs.writeText "hu-berlin.config" ''
host = forti-ssl.vpn.hu-berlin.de host = forti-ssl.vpn.hu-berlin.de
port = 443 port = 443
username = meinhaki username = meinhark
trusted-cert = 9e5dea8e077970d245900839f437ef7fb9551559501c7defd70af70ea568573d
'' ''
} }
fi
''; '';
}; };
} }

View File

@@ -5,7 +5,7 @@
niveumPackages, niveumPackages,
... ...
}: let }: let
inherit (import ../lib) defaultApplications; inherit (import ../lib) defaultApplications colours;
klem = niveumPackages.klem.override { klem = niveumPackages.klem.override {
config.dmenu = "${pkgs.dmenu}/bin/dmenu -i -p klem"; config.dmenu = "${pkgs.dmenu}/bin/dmenu -i -p klem";
config.scripts = { config.scripts = {
@@ -50,9 +50,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 = pkgs.writers.writeDash "gpt" ''
${niveumPackages.gpt}/bin/gpt
'';
}; };
}; };
@@ -84,7 +81,6 @@ in {
displayManager.defaultSession = "none+i3"; displayManager.defaultSession = "none+i3";
windowManager.i3 = { windowManager.i3 = {
enable = true; enable = true;
package = pkgs.i3-gaps;
}; };
}; };
@@ -111,10 +107,14 @@ in {
bindsym --release ${modifier}+Shift+w exec /run/wrappers/bin/slock bindsym --release ${modifier}+Shift+w exec /run/wrappers/bin/slock
''; '';
config = rec { config = rec {
fonts = {
names = ["Sans"];
size = 10.0;
};
inherit modifier; inherit modifier;
window = { window = {
titlebar = false; titlebar = false;
border = 2; border = 1;
hideEdgeBorders = "smart"; hideEdgeBorders = "smart";
commands = [ commands = [
{ {
@@ -141,36 +141,78 @@ in {
} }
]; ];
}; };
gaps.inner = 4;
floating = { floating = {
titlebar = false; titlebar = false;
border = 1; border = 1;
}; };
bars = [
(config.home-manager.users.me.lib.stylix.i3.bar
// rec {
workspaceButtons = false;
mode = "dock"; # "hide";
position = "bottom";
statusCommand = toString (pkgs.writers.writeDash "i3status-rust" ''
export I3RS_GITHUB_TOKEN="$(cat ${config.age.secrets.github-token-i3status-rust.path})"
export OPENWEATHERMAP_API_KEY="$(cat ${config.age.secrets.openweathermap-api-key.path})"
${config.home-manager.users.me.programs.i3status-rust.package}/bin/i3status-rs ${config.home-manager.users.me.home.homeDirectory}/.config/i3status-rust/config-${position}.toml
'');
fonts = {
names = ["${config.stylix.fonts.sansSerif.name}" "FontAwesome 6 Free"];
size = config.stylix.fonts.sizes.desktop * 0.8;
};
})
];
colors = let colors = let
background = config.lib.stylix.colors.withHashtag.base00; scheme = {
in { background = colours.background;
unfocused = { text = colours.foreground;
border = lib.mkForce background;
childBorder = lib.mkForce background;
}; };
in rec {
focused =
scheme
// {
border = colours.blue.bright;
indicator = colours.blue.bright;
childBorder = colours.blue.bright;
};
unfocused =
scheme
// {
border = colours.background;
indicator = colours.background;
childBorder = colours.background;
};
focusedInactive = unfocused;
urgent =
scheme
// {
border = colours.red.bright;
indicator = colours.red.bright;
childBorder = colours.red.bright;
};
placeholder =
scheme
// {
border = colours.green.bright;
indicator = colours.green.bright;
childBorder = colours.green.bright;
};
}; };
bars = [
{
workspaceButtons = false;
fonts = {
names = ["Monospace" "Font Awesome 6 Free"];
size = 8.0;
};
mode = "dock"; # "hide";
position = "bottom";
colors = rec {
background = colours.background;
separator = background;
statusline = colours.foreground;
bindingMode = {
background = colours.red.bright;
border = colours.background;
text = colours.foreground;
};
};
statusCommand = toString (pkgs.writers.writeDash "i3status-rust" ''
export I3RS_GITHUB_TOKEN="$(cat ${config.age.secrets.github-token-i3status-rust.path})"
export OPENWEATHERMAP_API_KEY="$(cat ${config.age.secrets.openweathermap-api-key.path})"
${pkgs.i3status-rust}/bin/i3status-rs ${
(pkgs.formats.toml {}).generate "i3status-rust.toml" (import ../lib/i3status-rust.nix {
inherit (config.niveum) batteryName wirelessInterface;
inherit (config.home-manager.users.me.accounts.email) accounts;
inherit colours;
inherit pkgs;
})
}'');
}
];
modes.resize = { modes.resize = {
"Escape" = ''mode "default"''; "Escape" = ''mode "default"'';
"Return" = ''mode "default"''; "Return" = ''mode "default"'';
@@ -212,15 +254,38 @@ in {
"${modifier}+r" = "mode resize"; "${modifier}+r" = "mode resize";
"${modifier}+v" = "split v"; "${modifier}+v" = "split v";
"${modifier}+w" = "layout tabbed"; "${modifier}+w" = "layout tabbed";
"${modifier}+q" = "exec ${config.services.clipmenu.package}/bin/clipmenu"; "${modifier}+q" = "exec ${pkgs.writers.writeDash "newsboat-sync" ''
notify-send --app-name="newsboat" "Updating ..."
newsboat -x reload
notify-send --app-name="newsboat" "Finished updating."
''}";
# "${modifier}+Shift+y" = "exec ${pkgs.qutebrowser}/bin/qutebrowser";
"${modifier}+Return" = "exec ${(defaultApplications pkgs).terminal}"; "${modifier}+Return" = "exec ${(defaultApplications pkgs).terminal}";
"${modifier}+t" = "exec ${(defaultApplications pkgs).fileManager}"; "${modifier}+t" = "exec ${(defaultApplications pkgs).fileManager}";
"${modifier}+y" = "exec ${(defaultApplications pkgs).browser}"; "${modifier}+y" = "exec ${(defaultApplications pkgs).browser}";
"${modifier}+0" = "exec ${niveumPackages.menu-calc}/bin/="; "${modifier}+0" = "exec ${niveumPackages.menu-calc}/bin/=";
"${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.writers.writeDash "notemenu" ''
set -efu
PATH=$PATH:${
lib.makeBinPath [pkgs.rofi pkgs.findutils pkgs.coreutils]
}
cd ~/notes
note_file=$({
echo diary/$(date -I).md
echo diary/$(date -I -d yesterday).md
find . ! -name '.*' -type f -printf "%T@ %p\n" | sort --reverse --numeric-sort | cut --delimiter=" " --fields=2-
} | rofi -dmenu -i -p 'notes')
if test "$note_file"
then
alacritty --working-directory ~/notes -e "$EDITOR" "$note_file"
fi
''
}";
"${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 ${niveumPackages.unicodmenu}/bin/unicodmenu";
@@ -243,7 +308,7 @@ in {
"XF86AudioMute" = "exec ${pkgs.pamixer}/bin/pamixer -t"; "XF86AudioMute" = "exec ${pkgs.pamixer}/bin/pamixer -t";
"XF86AudioRaiseVolume" = "exec ${pkgs.pamixer}/bin/pamixer -i 5"; "XF86AudioRaiseVolume" = "exec ${pkgs.pamixer}/bin/pamixer -i 5";
"XF86Calculator" = "exec ${pkgs.st}/bin/st -c floating -e ${pkgs.bc}/bin/bc"; "XF86Calculator" = "exec ${pkgs.st}/bin/st -c floating -e ${pkgs.bc}/bin/bc";
"XF86AudioPause" = "exec ${pkgs.playerctl}/bin/playerctl play-pause"; "XF86AudioPause" = "exec ${pkgs.playerctl}/bin/playerctl pause";
"XF86AudioPlay" = "exec ${pkgs.playerctl}/bin/playerctl play-pause"; "XF86AudioPlay" = "exec ${pkgs.playerctl}/bin/playerctl play-pause";
"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";

View File

@@ -1,207 +0,0 @@
{
pkgs,
config,
...
}: {
age.secrets = {
miniflux-api-token = {
file = ../secrets/miniflux-api-token.age;
owner = config.users.users.me.name;
group = config.users.users.me.group;
mode = "400";
};
};
home-manager.users.me = {
programs.i3status-rust = {
enable = true;
bars.bottom = {
icons = "awesome6";
settings = {
theme.overrides = let
colours = config.lib.stylix.colors.withHashtag;
in {
idle_bg = colours.base00;
idle_fg = colours.base05;
good_bg = colours.base00;
good_fg = colours.base0B;
warning_bg = colours.base00;
warning_fg = colours.base0A;
critical_bg = colours.base00;
critical_fg = colours.base09;
info_bg = colours.base00;
info_fg = colours.base04;
separator_bg = colours.base00;
separator = " ";
};
};
blocks = [
{
block = "music";
format = "{$icon $combo $play |}";
separator = " ";
}
{
block = "weather";
autolocate = true;
format = "$icon $location: $temp";
service = {
name = "openweathermap";
city_id = "2950159";
units = "metric";
};
}
{
block = "custom";
interval = 60 * 5;
command = let
spacetime = import ../configs/spacetime.nix;
in
pkgs.writers.writePython3 "sun.py" {
libraries = [pkgs.python3Packages.astral];
flakeIgnore = ["E121" "E501"];
}
''
import astral
import astral.moon
import astral.sun
current_phase = astral.moon.phase()
city = astral.LocationInfo("Berlin", "Germany", "${spacetime.time.timeZone}", ${toString spacetime.location.latitude}, ${toString spacetime.location.longitude})
sun = astral.sun.sun(city.observer, date=astral.today(), tzinfo=city.timezone)
print("{} {} {}{}".format(sun["sunrise"].strftime("%R"), sun["sunset"].strftime("%R"), "" if current_phase < 14 else "", round(current_phase, 1)))
'';
}
{
block = "custom";
interval = 5 * 60;
hide_when_empty = true;
json = true;
icons_overrides.update = "";
command = let
minifluxEndpoint = "https://feed.kmein.de";
in
pkgs.writers.writeDash "miniflux" ''
MINIFLUX_TOKEN=$(cat ${config.age.secrets.miniflux-api-token.path})
${pkgs.curl}/bin/curl --insecure --header "X-Auth-Token: $MINIFLUX_TOKEN" ${minifluxEndpoint}/v1/feeds/counters \
| ${pkgs.jq}/bin/jq '{
text: ((.unreads | values | add) // 0) | tostring,
icon: "update"
}'
'';
}
{
block = "github";
info = ["total"];
warning = ["mention" "review_requested" "team_mention" "manual" "invitation" "assign" "subscribed"];
}
{
block = "custom";
interval = 10;
command = pkgs.writers.writeDash "todo" ''
${pkgs.todoman}/bin/todo --porcelain | ${pkgs.jq}/bin/jq -r '
map(select(.due != null))
| (map(select(.due < now)) | length) as $overdue
| (map(select(.due >= now and .due < now + (60 * 60 * 24))) | length) as $dueToday
| {
icon: "tasks",
text: (($overdue + $dueToday) as $sum | if $sum > 0 then $sum | tostring else "" end),
state: (
if $overdue > 0 then
"Critical"
elif $dueToday > 0 then
"Warning"
else
"Idle"
end
)
}
'
'';
json = true;
hide_when_empty = true;
}
{
block = "custom";
interval = 60;
command = pkgs.writers.writeDash "weechat" ''
ssh -o ConnectTimeout=1 makanek cat /var/lib/weechat/hotlist.txt | sed 's/,/\n/g' | wc -l | jq '{
text: (if . > 0 then . | tostring else "" end),
state: (if . > 0 then "Info" else "Idle" end),
icon: "bell"
}'
'';
json = true;
hide_when_empty = true;
}
{
block = "net";
format = " $icon HU";
missing_format = "";
device = "ppp0";
}
{
block = "net";
format = " $icon FU";
missing_format = "";
device = "tun0";
}
{
block = "net";
device = config.niveum.wirelessInterface;
format = "$icon $ssid $signal_strength";
}
{
block = "battery";
device = config.niveum.batteryName;
}
{
block = "sound";
}
{
block = "disk_space";
format = "$icon $available";
}
{
block = "memory";
format = "$icon $mem_used.eng(prefix:G)";
}
{block = "load";}
{
block = "custom";
interval = 10;
json = true;
command = pkgs.writers.writeDash "time" ''
${pkgs.jq}/bin/jq -n \
--arg now "$(${pkgs.coreutils}/bin/date +'%Y-%m-%d (%W %a) %H:%M')" \
--argjson nextEvent "$(
${pkgs.khal}/bin/khal list --format "{start}" --day-format "" $(${pkgs.coreutils}/bin/date +'%Y-%m-%d %H:%M') 2>/dev/null \
| ${pkgs.gnugrep}/bin/grep -E '[0-9]{2}:[0-9]{2}' \
| ${pkgs.coreutils}/bin/head -1 \
| ${pkgs.coreutils}/bin/date --date="$(cat)" +%s
)" \
'{
text: $now,
icon: "time",
state: (
($nextEvent - now) as $deltaT
| if $deltaT < (5 * 60) then
"Critical"
elif $deltaT < (15 * 60) then
"Warning"
elif $deltaT < (60 * 60) then
"Info"
else
"Idle"
end
)
}'
'';
}
];
};
};
};
}

View File

@@ -12,7 +12,6 @@
ara = "buckwalter"; ara = "buckwalter";
cop = ""; cop = "";
ave = ""; ave = "";
got = "";
"in" = "san-kagapa"; "in" = "san-kagapa";
il = "phonetic"; il = "phonetic";
}; };
@@ -38,13 +37,6 @@ in {
sha256 = "1l0h6aq536hyinrh0i0ia355y229bjrlibii0sya5bmqh46vycia"; sha256 = "1l0h6aq536hyinrh0i0ia355y229bjrlibii0sya5bmqh46vycia";
}; };
} }
{
name = "symbols/got";
path = pkgs.fetchurl {
url = "https://c.krebsco.de/got";
sha256 = "1i0jxghxi3rldlijw6gm2xawrv7f0pmm7a5cqbzzgjrg7ldk46gd";
};
}
{ {
name = "symbols/ave"; name = "symbols/ave";
path = pkgs.fetchurl { path = pkgs.fetchurl {

View File

@@ -6,7 +6,7 @@
}: let }: let
davHome = "~/.local/share/dav"; davHome = "~/.local/share/dav";
kmeinCloud = { kmeinCloud = {
davEndpoint = "https://cloud.kmein.de/remote.php/dav"; davEndpoint = "https://cloud.xn--kiern-0qa.de/remote.php/dav";
username = "kieran"; username = "kieran";
passwordFile = config.age.secrets.nextcloud-password-kieran.path; passwordFile = config.age.secrets.nextcloud-password-kieran.path;
}; };
@@ -54,7 +54,8 @@ in {
wantedBy = ["default.target"]; wantedBy = ["default.target"];
startAt = "*:00/10"; startAt = "*:00/10";
script = '' script = ''
${pkgs.vdirsyncer}/bin/vdirsyncer sync && ${pkgs.khal}/bin/khal printcalendars # https://lostpackets.de/khal/configure.html#syncing ${pkgs.vdirsyncer}/bin/vdirsyncer sync
${pkgs.khal}/bin/khal printcalendars # https://lostpackets.de/khal/configure.html#syncing
''; '';
serviceConfig = { serviceConfig = {
Type = "oneshot"; Type = "oneshot";
@@ -111,10 +112,6 @@ in {
path = ${davHome}/calendar/personal path = ${davHome}/calendar/personal
color = "light cyan" color = "light cyan"
[[krebs]]
path = ${davHome}/calendar/krebs
color = "light red"
[[uni]] [[uni]]
path = ${davHome}/calendar/uni-1 path = ${davHome}/calendar/uni-1
color = "yellow" color = "yellow"
@@ -165,12 +162,6 @@ in {
collections = ["personal", "alew", "uni-1"] collections = ["personal", "alew", "uni-1"]
conflict_resolution = "b wins" conflict_resolution = "b wins"
[pair krebs]
a = "kalender_local"
b = "krebs_cloud"
collections = ["3edef929-d509-7944-2440-000a54f2d054"]
conflict_resolution = "b wins"
[pair fysi] [pair fysi]
a = "kalender_local" a = "kalender_local"
b = "fysi_cloud" b = "fysi_cloud"
@@ -199,12 +190,6 @@ in {
username = "${kmeinCloud.username}" username = "${kmeinCloud.username}"
password.fetch = ["command", "cat", "${kmeinCloud.passwordFile}"] password.fetch = ["command", "cat", "${kmeinCloud.passwordFile}"]
[storage krebs_cloud]
type = "caldav"
url = "http://calendar.r/krebs/"
username = "krebs"
password = "krebs"
[storage fysi_cloud] [storage fysi_cloud]
type = "caldav" type = "caldav"
url = "${fysiCloud.davEndpoint}/calendars/${fysiCloud.username}/" url = "${fysiCloud.davEndpoint}/calendars/${fysiCloud.username}/"

View File

@@ -9,7 +9,7 @@
startAt = "weekly"; startAt = "weekly";
serviceConfig = { serviceConfig = {
user = "kfm"; user = "kfm";
WorkingDirectory = "/home/kfm/cloud/nextcloud/Books/Germanistik/LB"; WorkingDirectory = "/home/kfm/cloud/Seafile/Books/Germanistik/LB";
}; };
script = '' script = ''
first_year=2019 first_year=2019

View File

@@ -8,33 +8,66 @@
environment.shellAliases.vim = "nvim"; environment.shellAliases.vim = "nvim";
environment.shellAliases.view = "nvim -R"; environment.shellAliases.view = "nvim -R";
home-manager.users.me = {
editorconfig = {
enable = true;
settings = {
"*" = {
charset = "utf-8";
end_of_line = "lf";
trim_trailing_whitespace = true;
insert_final_newline = true;
indent_style = "space";
indent_size = 2;
};
"*.py" = {
indent_size = 4;
};
Makefile = {
indent_style = "tab";
};
"*.md" = {
trim_trailing_whitespace = false;
};
};
};
};
environment.systemPackages = [ environment.systemPackages = [
(pkgs.writers.writeDashBin "vim" ''neovim "$@"'') (pkgs.writers.writeDashBin "vim" ''neovim "$@"'')
niveumPackages.vim (pkgs.neovim.override {
configure = {
customRC = ''
source ${../lib/vim/init.vim}
luafile ${../lib/vim/init.lua}
'';
packages.nvim = with pkgs.vimPlugins; {
start = [
ale
fzf-vim
fzfWrapper
supertab
undotree
tabular
# vimwiki
niveumPackages.vimPlugins-vim-colors-paramount
nvim-lspconfig
vim-commentary
vim-css-color
vim-eunuch
niveumPackages.vimPlugins-vim-fetch
vim-fugitive
vim-gitgutter
vim-repeat
vim-sensible
vim-surround
(pkgs.vimUtils.buildVimPlugin rec {
pname = "vim-dim";
version = "1.1.0";
name = "${pname}-${version}";
src = pkgs.fetchFromGitHub {
owner = "jeffkreeftmeijer";
repo = pname;
rev = version;
sha256 = "sha256-lyTZUgqUEEJRrzGo1FD8/t8KBioPrtB3MmGvPeEVI/g=";
};
})
];
opt = [
csv
elm-vim
emmet-vim
haskell-vim
niveumPackages.vimPlugins-icalendar-vim
niveumPackages.vimPlugins-jq-vim
rust-vim
typescript-vim
vim-javascript
vim-ledger
vim-nix
vimtex
vim-pandoc
vim-pandoc-syntax
niveumPackages.vimPlugins-vim-256noir
];
};
};
})
]; ];
} }

View File

@@ -1,14 +1,9 @@
{ {pkgs, ...}: {
pkgs,
inputs,
...
}: {
nixpkgs = { nixpkgs = {
config.allowUnfree = true; config.allowUnfree = true;
}; };
nix = { nix = {
package = pkgs.nixFlakes; package = pkgs.nixFlakes;
extraOptions = "experimental-features = nix-command flakes"; extraOptions = "experimental-features = nix-command flakes";
nixPath = ["nixpkgs=${inputs.nixpkgs}"];
}; };
} }

View File

@@ -4,7 +4,6 @@
lib, lib,
inputs, inputs,
niveumPackages, niveumPackages,
unstablePackages,
... ...
}: let }: let
worldradio = pkgs.callPackage ../packages/worldradio.nix {}; worldradio = pkgs.callPackage ../packages/worldradio.nix {};
@@ -96,7 +95,6 @@ in {
genpass # generate passwords genpass # generate passwords
gdu # ncurses disk usage (ncdu is broken) gdu # ncurses disk usage (ncdu is broken)
rmlint # remove duplicate files rmlint # remove duplicate files
gcc
python3Packages.jsonschema # json validation python3Packages.jsonschema # json validation
jq # json toolkit jq # json toolkit
pup # html toolkit pup # html toolkit
@@ -125,7 +123,6 @@ in {
electrum electrum
inkscape inkscape
astrolog astrolog
unstablePackages.obsidian
anki-bin # flashcards anki-bin # flashcards
jbofihe # lojbanic software jbofihe # lojbanic software
zoom-us # video conferencing zoom-us # video conferencing
@@ -157,13 +154,10 @@ in {
niveumPackages.ipa # XSAMPA to IPA converter niveumPackages.ipa # XSAMPA to IPA converter
niveumPackages.pls niveumPackages.pls
niveumPackages.mpv-tv niveumPackages.mpv-tv
niveumPackages.mpv-iptv
jellyfin-media-player
niveumPackages.devanagari niveumPackages.devanagari
niveumPackages.betacode # ancient greek betacode to unicode converter niveumPackages.betacode # ancient greek betacode to unicode converter
niveumPackages.meteo niveumPackages.meteo
niveumPackages.mahlzeit niveumPackages.mahlzeit
niveumPackages.jq-lsp
niveumPackages.vimv niveumPackages.vimv
niveumPackages.swallow # window swallowing niveumPackages.swallow # window swallowing
niveumPackages.literature-quote niveumPackages.literature-quote
@@ -178,15 +172,11 @@ in {
niveumPackages.fkill niveumPackages.fkill
niveumPackages.wttr niveumPackages.wttr
niveumPackages.unicodmenu niveumPackages.unicodmenu
niveumPackages.emailmenu
niveumPackages.closest niveumPackages.closest
niveumPackages.trans niveumPackages.trans
(niveumPackages.mpv-radio.override { (niveumPackages.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-tuner.override {
di-fm-key-file = config.age.secrets.di-fm-key.path;
})
# kmein.slide # kmein.slide
termdown termdown
niveumPackages.image-convert-tolino niveumPackages.image-convert-tolino
@@ -231,12 +221,6 @@ in {
niveumPackages.kpaste niveumPackages.kpaste
config.nur.repos.mic92.ircsink config.nur.repos.mic92.ircsink
(haskellPackages.ghcWithHoogle (hs: [
hs.text
hs.lens
hs.bytestring
]))
(python3.withPackages (py: [ (python3.withPackages (py: [
py.black py.black
# py.python-language-server # py.python-language-server
@@ -255,26 +239,16 @@ in {
texlab texlab
nil nil
rust-analyzer rust-analyzer
elmPackages.elm-language-server
nodePackages.typescript-language-server
lua-language-server
nodePackages.vscode-langservers-extracted
dhall-lsp-server
dhall-nix
dhall-bash
dhall-json
dhall
html-tidy html-tidy
nodePackages.csslint nodePackages.csslint
nodePackages.jsonlint nodePackages.jsonlint
nodePackages.prettier nodePackages.prettier
nodePackages.typescript nodePackages.typescript
nodePackages.eslint
nodePackages.yarn nodePackages.yarn
deno # better node.js deno # better node.js
nodejs nodejs
nodePackages.javascript-typescript-langserver
texlive.combined.scheme-full texlive.combined.scheme-full
latexrun latexrun
(aspellWithDicts (dict: [dict.de dict.en dict.en-computers])) (aspellWithDicts (dict: [dict.de dict.en dict.en-computers]))
@@ -285,9 +259,8 @@ in {
libreoffice libreoffice
# gnumeric # gnumeric
dia dia
unstablePackages.pandoc pandoc
niveumPackages.man-pandoc niveumPackages.man-pandoc
typst
# proselint # proselint
asciidoctor asciidoctor
wordnet wordnet
@@ -300,11 +273,6 @@ in {
(pkgs.writers.writeDashBin "hass-cli" '' (pkgs.writers.writeDashBin "hass-cli" ''
HASS_SERVER=http://zaatar.r:8123 HASS_TOKEN="$(cat ${config.age.secrets.home-assistant-token.path})" exec ${pkgs.home-assistant-cli}/bin/hass-cli "$@" HASS_SERVER=http://zaatar.r:8123 HASS_TOKEN="$(cat ${config.age.secrets.home-assistant-token.path})" exec ${pkgs.home-assistant-cli}/bin/hass-cli "$@"
'') '')
# xml
saxonb_9_1
libxml2
zotero
]; ];
age.secrets.home-assistant-token = { age.secrets.home-assistant-token = {

View File

@@ -1,13 +1,13 @@
{ {
services.picom = { services.picom = {
enable = true; enable = true;
# activeOpacity = 1; activeOpacity = 1;
fade = true; fade = true;
fadeDelta = 1; fadeDelta = 1;
# inactiveOpacity = 0.9; inactiveOpacity = 0.9;
# shadow = true; shadow = true;
# menuOpacity = 0.9; menuOpacity = 0.9;
# shadowOpacity = 0.3; shadowOpacity = 0.3;
fadeExclude = [ fadeExclude = [
"class_g = 'slock'" # don't want a transparent lock screen! "class_g = 'slock'" # don't want a transparent lock screen!
"name *?= 'slock'" "name *?= 'slock'"

View File

@@ -1,6 +1,14 @@
{pkgs, ...}: { {
config,
pkgs,
...
}: let
inherit (import <niveum/lib>) colours;
in {
home-manager.users.me.programs.rofi = { home-manager.users.me.programs.rofi = {
enable = true; enable = true;
font = "Monospace 10";
theme = "${pkgs.rofi}/share/rofi/themes/Arc.rasi";
pass = { pass = {
enable = true; enable = true;
extraConfig = '' extraConfig = ''

View File

@@ -1,11 +1,11 @@
{pkgs, ...}: { {pkgs, ...}: {
sound.enable = true; sound.enable = true;
# realtime audio # realtime audio for pulseaudio
security.rtkit.enable = true; security.rtkit.enable = true;
services.pipewire = { services.pipewire = {
enable = true; enable = false;
systemWide = false; systemWide = false;
alsa = { alsa = {
enable = true; enable = true;
@@ -16,7 +16,7 @@
}; };
hardware.pulseaudio = { hardware.pulseaudio = {
enable = false; enable = true;
package = pkgs.pulseaudioFull; package = pkgs.pulseaudioFull;
# copy server:/run/pulse/.config/pulse/cookie to client:~/.config/pulse/cookie to authenticate a client machine # copy server:/run/pulse/.config/pulse/cookie to client:~/.config/pulse/cookie to authenticate a client machine
zeroconf.discovery.enable = true; zeroconf.discovery.enable = true;

View File

@@ -1,6 +1,12 @@
{pkgs, ...}: let {
pkgs,
config,
lib,
...
}: let
inherit (import ../lib) sshPort kieran; inherit (import ../lib) sshPort kieran;
externalNetwork = import ../lib/external-network.nix; externalNetwork = import ../lib/external-network.nix;
sshIdentity = name: "${config.users.users.me.home}/.ssh/${name}";
in { in {
users.users.me.openssh.authorizedKeys.keys = kieran.sshKeys pkgs; users.users.me.openssh.authorizedKeys.keys = kieran.sshKeys pkgs;
@@ -34,7 +40,7 @@ in {
home-manager.users.me.programs.ssh = { home-manager.users.me.programs.ssh = {
enable = true; enable = true;
matchBlocks = { matchBlocks = rec {
"github.com" = { "github.com" = {
hostname = "ssh.github.com"; hostname = "ssh.github.com";
port = 443; port = 443;
@@ -74,6 +80,27 @@ in {
user = "kfm"; user = "kfm";
port = sshPort; port = sshPort;
}; };
"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

@@ -11,10 +11,8 @@ in {
services.openssh = { services.openssh = {
enable = true; enable = true;
ports = [sshPort]; ports = [sshPort];
settings = { passwordAuthentication = false;
PasswordAuthentication = false; forwardX11 = true;
X11Forwarding = true;
};
}; };
users.users.root.openssh.authorizedKeys.keys = kieran.sshKeys pkgs; users.users.root.openssh.authorizedKeys.keys = kieran.sshKeys pkgs;

View File

@@ -2,7 +2,6 @@
config, config,
pkgs, pkgs,
lib, lib,
inputs,
... ...
}: let }: let
dictionaries = { dictionaries = {
@@ -149,7 +148,6 @@
sha256 = "1pk234pbq4pk55d8sjk0pp9j5sajm82f8804kf2xm2x5p387q1rg"; sha256 = "1pk234pbq4pk55d8sjk0pp9j5sajm82f8804kf2xm2x5p387q1rg";
}; };
}; };
coptic.dictionary = inputs.coptic-dictionary.packages.x86_64-linux.coptic-stardict;
russian = { russian = {
LingvoGermanRussian = pkgs.fetchzip { LingvoGermanRussian = pkgs.fetchzip {
url = "http://download.huzheng.org/lingvo/stardict-GR-LingvoUniversal-2.4.2.tar.bz2"; url = "http://download.huzheng.org/lingvo/stardict-GR-LingvoUniversal-2.4.2.tar.bz2";
@@ -163,11 +161,11 @@
turkish = { turkish = {
BabylonTurkishEnglish = pkgs.fetchzip { BabylonTurkishEnglish = pkgs.fetchzip {
url = "http://download.huzheng.org/babylon/bidirectional/stardict-babylon-Babylon_Turkish_English-2.4.2.tar.bz2"; url = "http://download.huzheng.org/babylon/bidirectional/stardict-babylon-Babylon_Turkish_English-2.4.2.tar.bz2";
sha256 = "1zpzgk3w0536gww31bj58cmn3imnkndyjwbcr7bay8ibq2kzv44z"; sha256 = "17rv46r95nkikg7aszqmfrbgdhz9ny52w423m8n01g3p93shdb4i";
}; };
BabylonEnglishTurkish = pkgs.fetchzip { BabylonEnglishTurkish = pkgs.fetchzip {
url = "http://download.huzheng.org/babylon/bidirectional/stardict-babylon-Babylon_English_Turkish-2.4.2.tar.bz2"; url = "http://download.huzheng.org/babylon/bidirectional/stardict-babylon-Babylon_English_Turkish-2.4.2.tar.bz2";
sha256 = "0myx31xzb7nrn5m657h0bwdgm5xp93ccwp6lcpbxgjxdjm3q0hc5"; sha256 = "063dl02s8ii8snsxgma8wi49xwr6afk6ysq0v986fygx5511353f";
}; };
}; };
}; };
@@ -315,7 +313,6 @@ in {
(makeStardict "sd-russian" dictionaries.russian) (makeStardict "sd-russian" dictionaries.russian)
(makeStardict "sd" dictionaries.englishGerman) (makeStardict "sd" dictionaries.englishGerman)
(makeStardict "jbo" dictionaries.lojban) (makeStardict "jbo" dictionaries.lojban)
(makeStardict "cop" dictionaries.coptic)
(makeStardict "sd-turkish" dictionaries.turkish) (makeStardict "sd-turkish" dictionaries.turkish)
]; ];
} }

View File

@@ -1,51 +0,0 @@
{
pkgs,
config,
...
}: {
age.secrets.stw-berlin-card-code.file = ../secrets/stw-berlin-card-code.age;
systemd.services.stw-berlin = {
enable = true;
wants = ["network-online.target"];
startAt = "weekly";
serviceConfig = {
user = "kfm";
WorkingDirectory = "/home/kfm/cloud/nextcloud/Uni/Meta/Mensa";
LoadCredential = [
"password:${config.age.secrets.stw-berlin-card-code.path}"
];
};
script = ''
KARTEN_ID=8071859
PASSWORT=$(cat "$CREDENTIALS_DIRECTORY"/password)
endpoint=https://ks.stw.berlin:4433/TL1/TLM/KASVC
authorization_header='Authorization: Basic S0FTVkM6ekt2NXlFMUxaVW12VzI5SQ=='
get_auth_token() {
${pkgs.curl}/bin/curl -sSL "$endpoint/LOGIN?karteNr=$KARTEN_ID&format=JSON&datenformat=JSON" \
-X POST \
-H "$authorization_header" \
--data-raw '{"BenutzerID":"'$KARTEN_ID'","Passwort":"'$PASSWORT'"}' \
| ${pkgs.jq}/bin/jq -r '.[0].authToken|@uri'
}
get_transactions() {
${pkgs.curl}/bin/curl -sSL "$endpoint/TRANS?format=JSON&authToken=$(get_auth_token)&karteNr=$KARTEN_ID&datumVon=12.02.2018&datumBis=$(date -d tomorrow +%d.%m.%Y)" \
-H "$authorization_header" \
| ${pkgs.jq}/bin/jq
}
get_items() {
${pkgs.curl}/bin/curl -sSL "$endpoint/TRANSPOS?format=JSON&authToken=$(get_auth_token)&karteNr=$KARTEN_ID&datumVon=12.02.2018&datumBis=$(date -d tomorrow +%d.%m.%Y)" \
-H "$authorization_header" \
| ${pkgs.jq}/bin/jq
}
get_transactions > transactions-$(date -I).json
get_items > items-$(date -I).json
'';
};
}

View File

@@ -1,71 +0,0 @@
{
pkgs,
config,
lib,
inputs,
...
}: let
generatedWallpaper = pkgs.runCommand "wallpaper.png" {} ''
${inputs.wallpaper-generator.packages.x86_64-linux.wp-gen}/bin/wallpaper-generator lines \
--output $out \
${lib.concatMapStringsSep " "
(n: "--base0${lib.toHexString n}=${config.lib.stylix.colors.withHashtag."base0${lib.toHexString n}"}")
(lib.range 0 15)}
'';
in {
# https://danth.github.io/stylix/tricks.html
# stylix.image = inputs.wallpapers.outPath + "/meteora/rodrigo-soares-250630.jpg";
stylix.image = generatedWallpaper;
environment.etc."stylix/wallpaper.png".source = generatedWallpaper;
# stylix.polarity = "either";
stylix.base16Scheme = "${pkgs.base16-schemes}/share/themes/${
{
"0" = "synth-midnight-dark";
"1" = "apprentice"; # https://romainl.github.io/Apprentice/
"2" = "one-light";
"3" = "onedark";
"4" = "material"; # https://github.com/ntpeters/base16-materialtheme-scheme
"5" = "material-palenight";
"6" = "material-lighter";
"7" = "tomorrow"; # https://github.com/chriskempson/tomorrow-theme
"8" = "tomorrow-night";
"9" = "gruvbox-light-medium"; # https://github.com/dawikur/base16-gruvbox-scheme
"a" = "gruvbox-dark-medium";
"b" = "selenized-light"; # https://github.com/jan-warchol/selenized
"c" = "selenized-dark";
"d" = "papercolor-light";
"e" = "papercolor-dark";
"f" = "dracula"; # https://draculatheme.com/
}
.${builtins.head (lib.stringToCharacters inputs.nixpkgs.rev)}
}.yaml";
stylix.fonts = {
serif = {
package = pkgs.noto-fonts;
name = "Noto Serif";
};
sansSerif = {
package = pkgs.noto-fonts;
name = "Noto Sans";
};
monospace = {
package = pkgs.noto-fonts;
name = "Noto Sans Mono";
};
emoji = {
package = pkgs.noto-fonts-emoji;
name = "Noto Color Emoji";
};
sizes = {
terminal = 6;
applications = 10;
};
};
}

View File

@@ -8,22 +8,23 @@
pkgs.writers.writePython3 "nachtischsatan-bot" { pkgs.writers.writePython3 "nachtischsatan-bot" {
libraries = [pkgs.python3Packages.python-telegram-bot]; libraries = [pkgs.python3Packages.python-telegram-bot];
} '' } ''
from telegram.ext import Application, ContextTypes, MessageHandler, filters from telegram.ext import Updater, MessageHandler
from telegram import Update from telegram.ext.filters import Filters
import random import random
import time import time
async def flubber(update: Update, context: ContextTypes.DEFAULT_TYPE): def flubber(update, context):
time.sleep(random.randrange(4000) / 1000) time.sleep(random.randrange(4000) / 1000)
await update.message.reply_text("*flubberflubber*") update.message.reply_text("*flubberflubber*")
with open('${tokenFile}', 'r') as tokenFile: with open('${tokenFile}', 'r') as tokenFile:
token = tokenFile.read().strip() updater = Updater(tokenFile.read().strip())
application = Application.builder().token(token).build()
application.add_handler(MessageHandler(filters.ALL, flubber)) updater.dispatcher.add_handler(MessageHandler(Filters.all, flubber))
application.run_polling() updater.start_polling()
updater.idle()
''; '';
in { in {
systemd.services.telegram-nachtischsatan = { systemd.services.telegram-nachtischsatan = {

82
configs/themes.nix Normal file
View File

@@ -0,0 +1,82 @@
{
config,
lib,
pkgs,
...
}: let
switch-theme = pkgs.writers.writeDashBin "switch-theme" ''
set -efux
if [ "$1" = toggle ]; then
if [ "$(${pkgs.coreutils}/bin/cat /var/theme/current_theme)" = dark ]; then
${placeholder "out"}/bin/switch-theme light
else
${placeholder "out"}/bin/switch-theme dark
fi
elif test -e "/etc/themes/$1"; then
mkdir -p /var/theme/config
${pkgs.rsync}/bin/rsync --chown=${config.users.users.me.name}:users -a --delete "/etc/themes/$1/" /var/theme/config/
echo "$1" > /var/theme/current_theme
${pkgs.coreutils}/bin/chown ${config.users.users.me.name}:users /var/theme/current_theme
${pkgs.xorg.xrdb}/bin/xrdb -merge /var/theme/config/xresources
${pkgs.procps}/bin/pkill -HUP xsettingsd
else
echo "theme $1 not found"
fi
'';
in {
systemd.services.xsettingsd = {
wantedBy = ["multi-user.target"];
after = ["display-manager.service"];
environment.DISPLAY = ":0";
serviceConfig = {
ExecStart = "${pkgs.xsettingsd}/bin/xsettingsd -c /var/theme/config/xsettings.conf";
User = config.users.users.me.name;
Restart = "always";
RestartSec = "15s";
};
};
systemd.tmpfiles.rules = [
"d /var/theme/ 755 ${config.users.users.me.name} users"
];
environment.systemPackages = [
switch-theme
pkgs.capitaine-cursors
];
home-manager.users.me = {
home.pointerCursor = {
name = "capitaine-cursors-white";
package = pkgs.capitaine-cursors;
size = 16;
};
};
environment.etc = {
"themes/light/xsettings.conf".text = ''
Net/ThemeName "Adwaita"
'';
"themes/light/xresources".text = ''
*background: #ffffff
*foreground: #000000
'';
"themes/dark/xsettings.conf".text = ''
Net/ThemeName "Adwaita-dark"
'';
"themes/dark/xresources".text = ''
*background: #000000
*foreground: #ffffff
'';
};
system.activationScripts.theme.text = ''
export DISPLAY=:0
if test -e /var/theme/current_theme; then
${switch-theme}/bin/switch-theme "$(cat /var/theme/current_theme)" ||
${switch-theme}/bin/switch-theme dark
else
${switch-theme}/bin/switch-theme dark
fi
'';
}

33
configs/theming.nix Normal file
View File

@@ -0,0 +1,33 @@
{
lib,
config,
pkgs,
...
}: let
theme = (import <niveum/lib>).theme pkgs;
in {
environment.systemPackages = [theme.gtk.package theme.icon.package theme.cursor.package];
services.xserver.displayManager.lightdm.greeters.gtk = {
theme = {inherit (theme.gtk) name package;};
iconTheme = {inherit (theme.icon) name package;};
};
home-manager.users.me = {
gtk = {
enable = true;
iconTheme = theme.icon;
theme = theme.gtk;
};
qt = {
enable = true;
platformTheme = "gtk";
};
home.pointerCursor =
theme.cursor
// {
size = 16;
x11.enable = true;
};
};
}

43
configs/traadfri.nix Normal file
View File

@@ -0,0 +1,43 @@
{
config,
pkgs,
lib,
...
}: let
inherit (import ../lib) localAddresses;
living-room-id = 131090;
in {
environment.systemPackages = [
(pkgs.writers.writeDashBin "traadfri-party" ''
while true; do
for color in $(traadfri colours | shuf); do
echo "$color"
traadfri group "''${2:-${toString living-room-id}}" --on --colour="$color"
sleep "''${1:-2}"
done
done
'')
];
age.secrets.traadfri-key = {
file = ../secrets/traadfri-key.age;
owner = config.users.users.me.name;
group = config.users.users.me.group;
mode = "400";
};
niveum.traadfri = {
enable = true;
user = "kmein";
host = localAddresses.tradfri;
keyFile = config.age.secrets.traadfri-key.path;
rooms = {
corridor = 131080;
kitchen = 131081;
bedroom = 131082;
living-room = living-room-id;
bedside = 131087;
chain = 131089;
};
};
}

View File

@@ -3,7 +3,7 @@
lib, lib,
... ...
}: let }: let
url = "http://wallpaper.r/realwallpaper-krebs-stars-berlin.png"; url = "http://prism.r/realwallpaper-krebs-stars-berlin.png";
stateDir = "~/.cache/wallpaper"; stateDir = "~/.cache/wallpaper";
in { in {
systemd.user.services.wallpaper = { systemd.user.services.wallpaper = {

1371
flake.lock generated

File diff suppressed because it is too large Load Diff

149
flake.nix
View File

@@ -3,99 +3,44 @@
inputs = { inputs = {
agenix.url = "github:ryantm/agenix"; agenix.url = "github:ryantm/agenix";
coptic-dictionary.url = "github:kmein/coptic-dictionary";
flake-utils.url = "github:numtide/flake-utils"; flake-utils.url = "github:numtide/flake-utils";
home-manager.url = "github:nix-community/home-manager/release-23.05"; home-manager.url = "github:nix-community/home-manager/release-22.11";
menstruation-backend.url = "github:kmein/menstruation.rs"; menstruation-backend.url = "github:kmein/menstruation.rs";
menstruation-telegram.url = "github:kmein/menstruation-telegram"; menstruation-telegram.url = "github:kmein/menstruation-telegram";
nix-on-droid.url = "github:t184256/nix-on-droid/release-23.05";
nixinate.url = "github:matthewcroughan/nixinate"; nixinate.url = "github:matthewcroughan/nixinate";
nixpkgs-old.url = "github:NixOS/nixpkgs/50fc86b75d2744e1ab3837ef74b53f103a9b55a0"; nixpkgs.url = "github:NixOS/nixpkgs/nixos-22.11";
nixpkgs-unstable.url = "github:NixOS/nixpkgs/master";
nixpkgs.url = "github:NixOS/nixpkgs/nixos-23.05";
nur.url = "github:nix-community/NUR"; nur.url = "github:nix-community/NUR";
recht.url = "github:kmein/recht"; recht.url = "github:kmein/recht";
retiolum.url = "git+https://git.thalheim.io/Mic92/retiolum";
rust-overlay.url = "github:oxalica/rust-overlay";
scripts.url = "github:kmein/scripts"; scripts.url = "github:kmein/scripts";
stylix.url = "github:danth/stylix/release-23.05"; retiolum.url = "git+https://git.thalheim.io/Mic92/retiolum";
telebots.url = "github:kmein/telebots"; telebots.url = "github:kmein/telebots";
tinc-graph.url = "github:kmein/tinc-graph"; tinc-graph.url = "github:kmein/tinc-graph";
traadfri.url = "github:kmein/traadfri";
voidrice.url = "github:Lukesmithxyz/voidrice"; voidrice.url = "github:Lukesmithxyz/voidrice";
wallpaper-generator.url = "github:pinpox/wallpaper-generator/v1.1";
wallpapers.url = "github:kmein/wallpapers";
agenix.inputs.home-manager.follows = "home-manager";
agenix.inputs.nixpkgs.follows = "nixpkgs"; agenix.inputs.nixpkgs.follows = "nixpkgs";
coptic-dictionary.inputs.nixpkgs.follows = "nixpkgs";
home-manager.inputs.nixpkgs.follows = "nixpkgs"; home-manager.inputs.nixpkgs.follows = "nixpkgs";
menstruation-backend.inputs.flake-utils.follows = "flake-utils"; menstruation-backend.inputs.flake-utils.follows = "flake-utils";
menstruation-backend.inputs.nixpkgs.follows = "nixpkgs"; menstruation-backend.inputs.nixpkgs.follows = "nixpkgs";
menstruation-backend.inputs.rust-overlay.follows = "rust-overlay";
menstruation-telegram.inputs.flake-utils.follows = "flake-utils";
menstruation-telegram.inputs.menstruation-backend.follows = "menstruation-backend";
menstruation-telegram.inputs.nixpkgs.follows = "nixpkgs-old";
nix-on-droid.inputs.home-manager.follows = "home-manager";
nix-on-droid.inputs.nixpkgs.follows = "nixpkgs";
nixinate.inputs.nixpkgs.follows = "nixpkgs"; nixinate.inputs.nixpkgs.follows = "nixpkgs";
recht.inputs.flake-utils.follows = "flake-utils";
recht.inputs.nixpkgs.follows = "nixpkgs";
rust-overlay.inputs.flake-utils.follows = "flake-utils";
rust-overlay.inputs.nixpkgs.follows = "nixpkgs";
scripts.inputs.flake-utils.follows = "flake-utils";
scripts.inputs.nixpkgs.follows = "nixpkgs";
scripts.inputs.rust-overlay.follows = "rust-overlay";
stylix.inputs.home-manager.follows = "home-manager";
stylix.inputs.nixpkgs.follows = "nixpkgs";
tinc-graph.inputs.flake-utils.follows = "flake-utils"; tinc-graph.inputs.flake-utils.follows = "flake-utils";
tinc-graph.inputs.nixpkgs.follows = "nixpkgs"; tinc-graph.inputs.nixpkgs.follows = "nixpkgs";
tinc-graph.inputs.rust-overlay.follows = "rust-overlay";
voidrice.flake = false; voidrice.flake = false;
wallpaper-generator.inputs.flake-utils.follows = "flake-utils";
wallpapers.flake = false;
}; };
outputs = inputs @ { outputs = inputs @ {
self, self,
nixpkgs, nixpkgs,
nixpkgs-unstable,
nur, nur,
home-manager, home-manager,
nixinate, nixinate,
agenix, agenix,
retiolum, retiolum,
flake-utils, flake-utils,
nix-on-droid,
stylix,
... ...
}: }:
{ {
apps = apps = nixinate.nixinate.x86_64-linux self;
nixinate.nixinate.x86_64-linux self
// {
x86_64-linux = let
pkgs = nixpkgs.legacyPackages.x86_64-linux;
in {
mock-secrets = {
type = "app";
program = toString (pkgs.writers.writeDash "mock-secrets" ''
${pkgs.findutils}/bin/find secrets -not -path '*/.*' -type f | ${pkgs.coreutils}/bin/sort > secrets.txt
'');
};
deploy = {
type = "app";
program = toString (pkgs.writers.writeDash "deploy" ''
if [ $# -eq 0 ]
then
systems='${toString (builtins.attrNames self.nixosConfigurations)}'
else
systems=$*
fi
${pkgs.parallel}/bin/parallel --line-buffer --tagstring '{}' 'nix run .\?submodules=1\#apps.nixinate.{}' ::: $systems
'');
};
};
};
nixosModules = { nixosModules = {
htgen = import modules/htgen.nix; htgen = import modules/htgen.nix;
@@ -104,48 +49,24 @@
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;
specus = import modules/specus.nix;
system-dependent = import modules/system-dependent.nix; system-dependent = import modules/system-dependent.nix;
telegram-bot = import modules/telegram-bot.nix; telegram-bot = import modules/telegram-bot.nix;
traadfri = import modules/traadfri.nix;
}; };
lib = { lib = {
panoptikon = import lib/panoptikon.nix; panoptikon = import lib/panoptikon.nix;
}; };
nixOnDroidConfigurations = { nixosConfigurations = {
moto = nix-on-droid.lib.nixOnDroidConfiguration { ful = nixpkgs.lib.nixosSystem rec {
modules = [systems/moto/configuration.nix]; system = "aarch64-linux";
pkgs = import nixpkgs { specialArgs = {
system = "aarch64-linux"; niveumPackages = inputs.self.packages.${system};
overlays = [nix-on-droid.overlays.default];
};
extraSpecialArgs = {
niveumPackages = inputs.self.packages.aarch64-linux;
niveumLib = inputs.self.lib; niveumLib = inputs.self.lib;
inherit inputs; inherit inputs;
}; };
home-manager-path = home-manager.outPath;
};
};
nixosConfigurations = let
niveumSpecialArgs = system: {
unstablePackages = import nixpkgs-unstable {
inherit system;
config.allowUnfreePredicate = pkg:
builtins.elem (nixpkgs-unstable.lib.getName pkg) [
"obsidian"
];
};
niveumPackages = inputs.self.packages.${system};
niveumLib = inputs.self.lib;
inherit inputs;
};
in {
ful = nixpkgs.lib.nixosSystem rec {
system = "aarch64-linux";
specialArgs = niveumSpecialArgs system;
modules = [ modules = [
{ {
_module.args.nixinate = { _module.args.nixinate = {
@@ -159,6 +80,7 @@
systems/ful/configuration.nix systems/ful/configuration.nix
agenix.nixosModules.default agenix.nixosModules.default
inputs.self.nixosModules.passport inputs.self.nixosModules.passport
inputs.self.nixosModules.specus
inputs.self.nixosModules.panoptikon inputs.self.nixosModules.panoptikon
retiolum.nixosModules.retiolum retiolum.nixosModules.retiolum
nur.nixosModules.nur nur.nixosModules.nur
@@ -166,7 +88,10 @@
}; };
zaatar = nixpkgs.lib.nixosSystem rec { zaatar = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux"; system = "x86_64-linux";
specialArgs = niveumSpecialArgs system; specialArgs = {
niveumPackages = inputs.self.packages.${system};
inherit inputs;
};
modules = [ modules = [
{ {
_module.args.nixinate = { _module.args.nixinate = {
@@ -186,13 +111,16 @@
makanek = nixpkgs.lib.nixosSystem rec { makanek = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux"; system = "x86_64-linux";
# for using inputs in other config files # for using inputs in other config files
specialArgs = niveumSpecialArgs system; specialArgs = {
niveumPackages = inputs.self.packages.${system};
inherit inputs;
};
modules = [ modules = [
{ {
_module.args.nixinate = { _module.args.nixinate = {
host = "makanek"; host = "makanek";
sshUser = "root"; sshUser = "root";
buildOn = "local"; buildOn = "remote";
substituteOnTarget = true; substituteOnTarget = true;
hermetic = false; hermetic = false;
}; };
@@ -201,6 +129,7 @@
inputs.self.nixosModules.telegram-bot inputs.self.nixosModules.telegram-bot
inputs.self.nixosModules.htgen inputs.self.nixosModules.htgen
inputs.self.nixosModules.passport inputs.self.nixosModules.passport
inputs.self.nixosModules.specus
agenix.nixosModules.default agenix.nixosModules.default
retiolum.nixosModules.retiolum retiolum.nixosModules.retiolum
nur.nixosModules.nur nur.nixosModules.nur
@@ -224,13 +153,16 @@
}; };
manakish = nixpkgs.lib.nixosSystem rec { manakish = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux"; system = "x86_64-linux";
specialArgs = niveumSpecialArgs system; specialArgs = {
niveumPackages = inputs.self.packages.${system};
inherit inputs;
};
modules = [ modules = [
{ {
_module.args.nixinate = { _module.args.nixinate = {
host = "manakish"; host = "manakish";
sshUser = "root"; sshUser = "root";
buildOn = "local"; buildOn = "remote";
substituteOnTarget = true; substituteOnTarget = true;
hermetic = false; hermetic = false;
}; };
@@ -240,12 +172,14 @@
retiolum.nixosModules.retiolum retiolum.nixosModules.retiolum
home-manager.nixosModules.home-manager home-manager.nixosModules.home-manager
nur.nixosModules.nur nur.nixosModules.nur
stylix.nixosModules.stylix
]; ];
}; };
kabsa = nixpkgs.lib.nixosSystem rec { kabsa = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux"; system = "x86_64-linux";
specialArgs = niveumSpecialArgs system; specialArgs = {
niveumPackages = inputs.self.packages.${system};
inherit inputs;
};
modules = [ modules = [
{ {
_module.args.nixinate = { _module.args.nixinate = {
@@ -259,9 +193,9 @@
systems/kabsa/configuration.nix systems/kabsa/configuration.nix
agenix.nixosModules.default agenix.nixosModules.default
retiolum.nixosModules.retiolum retiolum.nixosModules.retiolum
inputs.self.nixosModules.specus
home-manager.nixosModules.home-manager home-manager.nixosModules.home-manager
nur.nixosModules.nur nur.nixosModules.nur
stylix.nixosModules.stylix
]; ];
}; };
}; };
@@ -272,14 +206,11 @@
overlays = [ overlays = [
nur.overlay nur.overlay
(self: super: { (self: super: {
mpv = super.mpv.override {scripts = [inputs.self.packages.${system}.mpv-visualizer super.mpvScripts.mpris];}; mpv = super.mpv.override {scripts = [inputs.self.packages.${system}.mpv-visualizer];};
dmenu = super.writers.writeDashBin "dmenu" ''exec ${pkgs.rofi}/bin/rofi -dmenu "$@"''; dmenu = super.writers.writeDashBin "dmenu" ''exec ${pkgs.rofi}/bin/rofi -dmenu "$@"'';
}) })
]; ];
}; };
unstablePackages = import nixpkgs-unstable {
inherit system;
};
wrapScript = { wrapScript = {
packages ? [], packages ? [],
name, name,
@@ -307,10 +238,7 @@
genius = pkgs.callPackage packages/genius.nix {}; genius = pkgs.callPackage packages/genius.nix {};
gfs-fonts = pkgs.callPackage packages/gfs-fonts.nix {}; gfs-fonts = pkgs.callPackage packages/gfs-fonts.nix {};
git-preview = pkgs.callPackage packages/git-preview.nix {}; git-preview = pkgs.callPackage packages/git-preview.nix {};
gpt = pkgs.callPackage packages/gpt.nix {};
hc = pkgs.callPackage packages/hc.nix {}; hc = pkgs.callPackage packages/hc.nix {};
jq-lsp = pkgs.callPackage packages/jq-lsp.nix {};
stardict-tools = pkgs.callPackage packages/stardict-tools.nix {};
heuretes = pkgs.callPackage packages/heuretes.nix {}; heuretes = pkgs.callPackage packages/heuretes.nix {};
htgen = pkgs.callPackage packages/htgen.nix {}; htgen = pkgs.callPackage packages/htgen.nix {};
image-convert-favicon = pkgs.callPackage packages/image-convert-favicon.nix {}; image-convert-favicon = pkgs.callPackage packages/image-convert-favicon.nix {};
@@ -333,14 +261,11 @@
menu-calc = pkgs.callPackage packages/menu-calc.nix {}; menu-calc = pkgs.callPackage packages/menu-calc.nix {};
meteo = pkgs.callPackage packages/meteo.nix {}; meteo = pkgs.callPackage packages/meteo.nix {};
mpv-radio = pkgs.callPackage packages/mpv-radio.nix {di-fm-key-file = "/dev/null";}; 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-tv = pkgs.callPackage packages/mpv-tv.nix {};
mpv-iptv = pkgs.callPackage packages/mpv-iptv.nix {}; mpv-visualizer = pkgs.callPackage packages/mpv-visualizer.nix {};
mpv-visualizer = unstablePackages.mpvScripts.visualizer;
new-mac = pkgs.callPackage packages/new-mac.nix {}; new-mac = pkgs.callPackage packages/new-mac.nix {};
nix-git = pkgs.callPackage packages/nix-git.nix {}; nix-git = pkgs.callPackage packages/nix-git.nix {};
nix-index-update = pkgs.callPackage packages/nix-index-update.nix {inherit system;}; nix-index-update = pkgs.callPackage packages/nix-index-update.nix {inherit system;};
notemenu = pkgs.callPackage packages/notemenu.nix {niveumPackages = self.packages.${system};};
opustags = pkgs.callPackage packages/opustags.nix {}; opustags = pkgs.callPackage packages/opustags.nix {};
pls = pkgs.callPackage packages/pls.nix {}; pls = pkgs.callPackage packages/pls.nix {};
qrpaste = pkgs.callPackage packages/qrpaste.nix {}; qrpaste = pkgs.callPackage packages/qrpaste.nix {};
@@ -353,15 +278,11 @@
trans = pkgs.callPackage packages/trans.nix {}; trans = pkgs.callPackage packages/trans.nix {};
ttspaste = pkgs.callPackage packages/ttspaste.nix {}; ttspaste = pkgs.callPackage packages/ttspaste.nix {};
unicodmenu = pkgs.callPackage packages/unicodmenu.nix {}; unicodmenu = pkgs.callPackage packages/unicodmenu.nix {};
emailmenu = pkgs.callPackage packages/emailmenu.nix {};
untilport = pkgs.callPackage packages/untilport.nix {}; untilport = pkgs.callPackage packages/untilport.nix {};
vg = pkgs.callPackage packages/vg.nix {}; 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-cheat-sh-vim = pkgs.callPackage packages/vimPlugins/cheat-sh.nix {}; vimPlugins-cheat-sh-vim = pkgs.callPackage packages/vimPlugins/cheat-sh.nix {};
vimPlugins-icalendar-vim = pkgs.callPackage packages/vimPlugins/icalendar-vim.nix {}; vimPlugins-icalendar-vim = pkgs.callPackage packages/vimPlugins/icalendar-vim.nix {};
vimPlugins-jq-vim = pkgs.callPackage packages/vimPlugins/jq-vim.nix {}; vimPlugins-jq-vim = pkgs.callPackage packages/vimPlugins/jq-vim.nix {};
vimPlugins-typst-vim = pkgs.callPackage packages/vimPlugins/typst-vim.nix {};
vimPlugins-vim-256noir = pkgs.callPackage packages/vimPlugins/vim-256noir.nix {}; vimPlugins-vim-256noir = pkgs.callPackage packages/vimPlugins/vim-256noir.nix {};
vimPlugins-vim-colors-paramount = pkgs.callPackage packages/vimPlugins/vim-colors-paramount.nix {}; vimPlugins-vim-colors-paramount = pkgs.callPackage packages/vimPlugins/vim-colors-paramount.nix {};
vimPlugins-vim-fetch = pkgs.callPackage packages/vimPlugins/vim-fetch.nix {}; vimPlugins-vim-fetch = pkgs.callPackage packages/vimPlugins/vim-fetch.nix {};

37
lib/colours/antares.nix Normal file
View File

@@ -0,0 +1,37 @@
rec {
black = {
bright = "#151515";
dark = "#000000";
};
red = {
bright = "#de575c";
dark = "#de575c";
};
yellow = {
bright = "#ebe971";
dark = "#ebe971";
};
green = {
bright = "#00b853";
dark = "#00b853";
};
blue = {
bright = "#90d0f0";
dark = "#7fc6f0";
};
magenta = {
bright = "#cf9ffa";
dark = "#cf9ffa";
};
cyan = {
bright = "#4ae5e8";
dark = "#4ae5e8";
};
white = {
bright = "#ffffff";
dark = "#bbbbbb";
};
background = black.dark;
foreground = white.dark;
cursor = green.bright;
}

View File

@@ -0,0 +1,37 @@
{
black = {
bright = "#444444";
dark = "#1c1c1c";
};
red = {
bright = "#ff8700";
dark = "#af5f5f";
};
green = {
bright = "#87af87";
dark = "#5f875f";
};
yellow = {
bright = "#ffffaf";
dark = "#87875f";
};
blue = {
bright = "#8fafd7";
dark = "#5f87af";
};
magenta = {
bright = "#8787af";
dark = "#5f5f87";
};
cyan = {
bright = "#5fafaf";
dark = "#5f8787";
};
white = {
bright = "#999999";
dark = "#6c6c6c";
};
background = "#262626";
foreground = "#bcbcbc";
cursor = "#bcbcbc";
}

37
lib/colours/ayu-dark.nix Normal file
View File

@@ -0,0 +1,37 @@
{
black = {
dark = "#000000";
bright = "#323232";
};
red = {
dark = "#ff3333";
bright = "#ff6565";
};
green = {
dark = "#b8cc52";
bright = "#e9fe83";
};
yellow = {
dark = "#e6c446";
bright = "#fff778";
};
blue = {
dark = "#36a3d9";
bright = "#68d4ff";
};
magenta = {
dark = "#f07078";
bright = "#ffa3aa";
};
cyan = {
dark = "#95e5cb";
bright = "#c7fffc";
};
white = {
dark = "#ffffff";
bright = "#ffffff";
};
background = "#0e1419";
foreground = "#e5e1cf";
cursor = "#f19618";
}

37
lib/colours/ayu-light.nix Normal file
View File

@@ -0,0 +1,37 @@
{
black = {
dark = "#000000";
bright = "#323232";
};
red = {
dark = "#ff3333";
bright = "#ff6565";
};
green = {
dark = "#86b200";
bright = "#b8e532";
};
yellow = {
dark = "#f19618";
bright = "#ffc849";
};
blue = {
dark = "#41a6d9";
bright = "#73d7ff";
};
magenta = {
dark = "#f07078";
bright = "#ffa3aa";
};
cyan = {
dark = "#4cbe99";
bright = "#7ff0cb";
};
white = {
dark = "#ffffff";
bright = "#ffffff";
};
background = "#fafafa";
foreground = "#5b6673";
cursor = "#ff6900";
}

37
lib/colours/connermcd.nix Normal file
View File

@@ -0,0 +1,37 @@
rec {
black = {
bright = "#454545";
dark = "#222222";
};
red = {
bright = "#FA8072";
dark = "#B22222";
};
green = {
bright = "#779A3E";
dark = "#556B2F";
};
yellow = {
bright = "#DAA520";
dark = "#B8860B";
};
blue = {
bright = "#6495ED";
dark = "#4682B4";
};
magenta = {
bright = "#DA70D6";
dark = "#9932CC";
};
cyan = {
bright = "#B0E0E6";
dark = "#87CEEB";
};
white = {
bright = "#FFFFFF";
dark = "#C0C0C0";
};
background = "#000000";
foreground = "#AAAAAA";
cursor = green.bright;
}

37
lib/colours/ibm-3270.nix Normal file
View File

@@ -0,0 +1,37 @@
rec {
black = {
bright = "#888888";
dark = "#222222";
};
red = {
bright = "#ef8383";
dark = "#f01818";
};
yellow = {
bright = "#efe28b";
dark = "#f8d824";
};
green = {
bright = "#23d830";
dark = "#7ed684";
};
blue = {
bright = "#b3bfef";
dark = "#7890f0";
};
magenta = {
bright = "#efb3e3";
dark = "#f078d8";
};
cyan = {
bright = "#9ce2e2";
dark = "#54e4e4";
};
white = {
bright = "#ffffff";
dark = "#a5a5a5";
};
background = "#000000";
foreground = "#bbbbbb";
cursor = green.bright;
}

37
lib/colours/mac-os.nix Normal file
View File

@@ -0,0 +1,37 @@
rec {
black = {
bright = "#818383";
dark = "#000000";
};
red = {
bright = "#fc391f";
dark = "#c23621";
};
yellow = {
bright = "#eaec23";
dark = "#adad27";
};
green = {
bright = "#31e722";
dark = "#25bc24";
};
blue = {
bright = "#5833ff";
dark = "#492ee1";
};
magenta = {
bright = "#f935f8";
dark = "#d338d3";
};
cyan = {
bright = "#14f0f0";
dark = "#33bbc8";
};
white = {
bright = "#e9ebeb";
dark = "#cbcccd";
};
background = black.dark;
foreground = white.dark;
cursor = green.bright;
}

View File

@@ -0,0 +1,37 @@
rec {
black = {
bright = "#282c34";
dark = "#282c34";
};
red = {
bright = "#e06c75";
dark = "#e06c75";
};
green = {
bright = "#98c379";
dark = "#98c379";
};
yellow = {
bright = "#e5c07b";
dark = "#e5c07b";
};
blue = {
bright = "#61afef";
dark = "#61afef";
};
magenta = {
bright = "#c678dd";
dark = "#c678dd";
};
cyan = {
bright = "#56b6c2";
dark = "#56b6c2";
};
white = {
bright = "#dcdfe4";
dark = "#dcdfe4";
};
background = black.dark;
foreground = white.bright;
cursor = "#a3b3cc";
}

View File

@@ -0,0 +1,37 @@
rec {
black = {
bright = "#4b4b4b";
dark = "#242424";
};
red = {
bright = "#fc1c18";
dark = "#d71c15";
};
green = {
bright = "#6bc219";
dark = "#5aa513";
};
yellow = {
bright = "#fec80e";
dark = "#fdb40c";
};
blue = {
bright = "#0955ff";
dark = "#063b8c";
};
magenta = {
bright = "#fb0050";
dark = "#e40038";
};
cyan = {
bright = "#3ea8fc";
dark = "#2595e1";
};
white = {
bright = "#8c00ec";
dark = "#efefef";
};
background = white.dark;
foreground = "#181818";
cursor = "#bbbbbb";
}

View File

@@ -0,0 +1,37 @@
rec {
black = {
dark = "#1c1c1c";
bright = "#585858";
};
red = {
dark = "#af005f";
bright = "#5faf5f";
};
green = {
bright = "#afd700";
dark = "#5faf00";
};
yellow = {
bright = "#af87d7";
dark = "#d7af5f";
};
blue = {
dark = "#5fafd7";
bright = "#ffaf00";
};
magenta = {
bright = "#ff5faf";
dark = "#808080";
};
cyan = {
dark = "#d7875f";
bright = "#00afaf";
};
white = {
dark = "#d0d0d0";
bright = "#5f8787";
};
background = black.dark;
foreground = white.dark;
cursor = blue.bright;
}

View File

@@ -0,0 +1,37 @@
rec {
black = {
dark = "#eeeeee";
bright = "#bcbcbc";
};
red = {
dark = "#af0000";
bright = "#d70000";
};
green = {
dark = "#008700";
bright = "#d70087";
};
yellow = {
dark = "#5f8700";
bright = "#8700af";
};
blue = {
dark = "#0087af";
bright = "#d75f00";
};
magenta = {
bright = "#878787";
dark = "#d75f00";
};
cyan = {
dark = "#005f87";
bright = "#005faf";
};
white = {
dark = "#444444";
bright = "#005f87";
};
background = black.dark;
foreground = white.dark;
cursor = blue.bright;
}

View File

@@ -0,0 +1,37 @@
rec {
black = {
dark = "#073642";
bright = "#002b36";
};
red = {
dark = "#dc322f";
bright = "#cb4b16";
};
yellow = {
dark = "#b58900";
bright = "#657b83";
};
green = {
dark = "#859900";
bright = "#586e75";
};
blue = {
dark = "#268bd2";
bright = "#839496";
};
magenta = {
dark = "#d33682";
bright = "#6c71c4";
};
cyan = {
dark = "#2aa198";
bright = "#93a1a1";
};
white = {
dark = "#eee8d5";
bright = "#fdf6e3";
};
background = black.bright;
foreground = blue.bright;
cursor = cyan.bright;
}

View File

@@ -0,0 +1,37 @@
rec {
black = {
dark = "#073642";
bright = "#002b36";
};
red = {
dark = "#dc322f";
bright = "#cb4b16";
};
yellow = {
dark = "#b58900";
bright = "#657b83";
};
green = {
dark = "#859900";
bright = "#586e75";
};
blue = {
dark = "#268bd2";
bright = "#839496";
};
magenta = {
dark = "#d33682";
bright = "#6c71c4";
};
cyan = {
dark = "#2aa198";
bright = "#93a1a1";
};
white = {
dark = "#eee8d5";
bright = "#fdf6e3";
};
background = white.bright;
foreground = yellow.bright;
cursor = green.bright;
}

View File

@@ -1,4 +1,4 @@
{ rec {
tmpfilesConfig = { tmpfilesConfig = {
type, type,
path, path,
@@ -40,6 +40,8 @@
sshPort = 22022; sshPort = 22022;
colours = import ./colours/owickstrom-dark.nix;
theme = pkgs: { theme = pkgs: {
gtk = { gtk = {
name = "Adwaita-dark"; name = "Adwaita-dark";

View File

@@ -1,23 +1,14 @@
rec { {lib, ...}: {
thunderbirdProfile = "donnervogel"; cock = rec {
pronouns = builtins.concatStringsSep "/" [ user = "2210@cock.li";
"er" address = user;
"he" imap = "mail.cock.li";
"is" smtp = imap;
"οτος" smtpSettings = smtp: "smtp://${smtp}:587";
"هو" folders = {
"̄ϥ" drafts = "Drafts";
"он" sent = "Sent";
"han" trash = "Trash";
""
];
defaults = {
thunderbird = {
enable = true;
profiles = [thunderbirdProfile];
}; };
aerc.enable = true;
realName = "Kierán Meinhardt";
folders.inbox = "INBOX";
}; };
} }

224
lib/i3status-rust.nix Normal file
View File

@@ -0,0 +1,224 @@
{
pkgs,
wirelessInterface,
colours,
batteryName,
accounts,
}: let
inherit (pkgs) lib;
setsid = script:
pkgs.writers.writeDash "setsid-command" ''
${pkgs.util-linux}/bin/setsid ${script}
'';
in {
theme = {
name = "plain";
overrides = {
critical_fg = colours.red.bright;
good_fg = colours.green.bright;
idle_fg = colours.foreground;
info_fg = colours.cyan.bright;
warning_fg = colours.yellow.bright;
warning_bg = colours.background;
critical_bg = colours.background;
good_bg = colours.background;
idle_bg = colours.background;
info_bg = colours.background;
separator = "";
separator_bg = "auto";
separator_fg = colours.black.bright;
};
};
icons.name = "awesome6";
icons.overrides.rss = "";
icons.overrides.vpn = "";
icons.overrides.irc = "";
block = [
{
block = "weather";
autolocate = true;
format = "{location}: {temp}C";
service = {
name = "openweathermap";
city_id = "2950159";
units = "metric";
};
}
{
block = "custom";
interval = 60 * 5;
command = let
spacetime = import ../configs/spacetime.nix;
in
pkgs.writers.writePython3 "sun.py" {
libraries = [pkgs.python3Packages.astral];
flakeIgnore = ["E121" "E501"];
}
''
import astral
import astral.moon
import astral.sun
current_phase = astral.moon.phase()
city = astral.LocationInfo("Berlin", "Germany", "${spacetime.time.timeZone}", ${toString spacetime.location.latitude}, ${toString spacetime.location.longitude})
sun = astral.sun.sun(city.observer, date=astral.today(), tzinfo=city.timezone)
print("{} {} {}{}".format(sun["sunrise"].strftime("%R"), sun["sunset"].strftime("%R"), "" if current_phase < 14 else "", round(current_phase, 1)))
'';
}
{
block = "github";
info = ["total"];
warning = ["mention" "review_requested" "team_mention" "manual" "invitation" "assign" "subscribed"];
}
{
block = "custom";
interval = 10;
command = "newsboat-unread-count";
json = true;
}
{
block = "custom";
interval = 10;
command = pkgs.writers.writeDash "todo" ''
${pkgs.todoman}/bin/todo --porcelain | ${pkgs.jq}/bin/jq -r '
map(select(.due != null))
| (map(select(.due < now)) | length) as $overdue
| (map(select(.due >= now and .due < now + (60 * 60 * 24))) | length) as $dueToday
| {
icon: "tasks",
text: (($overdue + $dueToday) as $sum | if $sum > 0 then $sum | tostring else "" end),
state: (
if $overdue > 0 then
"Critical"
elif $dueToday > 0 then
"Warning"
else
"Idle"
end
)
}
'
'';
json = true;
hide_when_empty = true;
}
{
block = "custom";
interval = 60 * 5;
command = let
query-account = name: account: "${pkgs.writers.writeDash "query-imap-${name}" ''
password=$(${toString account.passwordCommand})
${pkgs.coreutils}/bin/timeout 1 ${pkgs.curl}/bin/curl -sSL -u ${lib.escapeShellArg account.userName}:"$password" imaps://${account.imap.host} -X 'STATUS INBOX (UNSEEN)' \
| ${pkgs.gnugrep}/bin/grep -Eo '[0-9]+' \
| sed 's/^/{"${name}":/;s/$/}/'
''} &";
in
pkgs.writers.writeDash "unread-mail" ''
{
${lib.concatStringsSep "\n" (lib.mapAttrsToList query-account accounts)}
wait
} | jq -s 'if length == 0 then {text: "", icon: "mail", state: "Idle"} else
add
| (values | add) as $sum
| {
text: (if $sum > 0 then $sum | tostring else "" end),
icon: "mail",
state: (
if .["hu-student"] > 0 or .["hu-employee"] > 0 or .posteo > 0 then
"Warning"
elif $sum > 0 then
"Info"
else
"Idle"
end
)
} end'
'';
json = true;
hide_when_empty = true;
}
{
block = "custom";
interval = 60;
command = pkgs.writers.writeDash "weechat" ''
ssh -o ConnectTimeout=1 makanek cat /var/lib/weechat/hotlist.txt | sed 's/,/\n/g' | wc -l | jq '{
text: (if . > 0 then . | tostring else "" end),
state: (if . > 0 then "Info" else "Idle" end),
icon: "irc"
}'
'';
json = true;
hide_when_empty = true;
}
{
block = "custom";
interval = 5;
command = pkgs.writers.writeDash "hu-berlin-vpn" ''
PATH=${lib.makeBinPath [pkgs.systemd]}
(systemctl is-active --quiet openvpn-hu-berlin.service && echo '{"state": "Good", "text": "OpenVPN", "icon": "vpn"}') \
|| (systemctl is-active --quiet hu-vpn.service && echo '{"state": "Good", "text": "PPP+SSL", "icon": "vpn"}') \
|| echo '{"state": "Idle", "icon": "vpn", "text": ""}'
'';
json = true;
hide_when_empty = true;
}
{
block = "net";
device = wirelessInterface;
format = "{ssid} {signal_strength}";
}
{
block = "battery";
device = batteryName;
}
{
block = "sound";
on_click = "pavucontrol";
}
{
block = "disk_space";
format = "{icon} {available}";
}
{
block = "memory";
display_type = "memory";
format_mem = "{mem_used;G}";
clickable = false;
}
{block = "load";}
{
block = "custom";
interval = 1;
json = true;
command = pkgs.writers.writeDash "time" ''
${pkgs.jq}/bin/jq -n \
--arg now "$(${pkgs.coreutils}/bin/date +'%Y-%m-%d (%W %a) %H:%M')" \
--argjson nextEvent "$(
${pkgs.khal}/bin/khal list --format "{start}" --day-format "" $(${pkgs.coreutils}/bin/date +'%Y-%m-%d %H:%M') 2>/dev/null \
| ${pkgs.gnugrep}/bin/grep -E '[0-9]{2}:[0-9]{2}' \
| ${pkgs.coreutils}/bin/head -1 \
| ${pkgs.coreutils}/bin/date --date="$(cat)" +%s
)" \
'{
text: $now,
icon: "time",
state: (
($nextEvent - now) as $deltaT
| if $deltaT < (5 * 60) then
"Critical"
elif $deltaT < (15 * 60) then
"Warning"
elif $deltaT < (60 * 60) then
"Info"
else
"Idle"
end
)
}'
'';
}
];
}

View File

@@ -5,6 +5,7 @@
android = "192.168.178.35"; android = "192.168.178.35";
manakish = "192.168.178.29"; manakish = "192.168.178.29";
tradfri = "192.168.178.28";
officejet = "192.168.178.27"; officejet = "192.168.178.27";
fritzbox = "192.168.178.1"; fritzbox = "192.168.178.1";
} }

View File

@@ -31,7 +31,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 \ ${niveumPackages.kpaste}/bin/kpaste \
| ${pkgs.gnused}/bin/sed -n "${ | ${pkgs.gnused}/bin/sed -n "${
if retiolumLink if retiolumLink
then "2" then "2"

View File

@@ -34,7 +34,6 @@ let
radiorecord = "radiorecord"; radiorecord = "radiorecord";
rap = "rap"; rap = "rap";
rock = "rock"; rock = "rock";
rekt = "rekt";
russian = "russia"; russian = "russia";
schlager = "schlager"; schlager = "schlager";
soma = "soma"; soma = "soma";
@@ -55,26 +54,6 @@ let
di-fm-name = name: "${name} | DI.FM"; di-fm-name = name: "${name} | DI.FM";
di-fm = name: "http://prem3.di.fm/${name}_hi?${di-fm-key}"; di-fm = name: "http://prem3.di.fm/${name}_hi?${di-fm-key}";
classicalradio-name = name: "${name} | ClassicalRadio";
classicalradio = name: "http://prem2.classicalradio.com:80/${name}?${di-fm-key}";
classicalradio-channels = ["20thcentury" "21stcentury" "adagios" "bach" "ballets" "baroqueperiod" "beethoven" "brahms" "celloworks" "chamberworks" "chopin" "choralworks" "classicalguitarworks" "classicalperiod" "classicalpianotrios" "classicalrelaxation" "concertos" "contemporaryperiod" "debussy" "easyclassical" "fluteworks" "gregorianchant" "grieg" "handel" "harpsichordworks" "haydn" "liszt" "medievalperiod" "mozart" "nocturnes" "operahighlights" "operas" "orchestralworks" "organworks" "overtures" "pianoworks" "relaxingflute" "relaxingpiano" "renaissanceperiod" "romanticperiod" "sacredworks" "schubert" "shostakovich" "soloinstruments" "solopiano" "sonatas" "songsnlieders" "stringworks" "symphonies" "tchaikovsky" "telemann" "trumpetworks" "violinworks" "vivaldi" "waltzespolkasnmarches" "windworks"];
rockradio-name = name: "${name} | RockRadio";
rockradio = name: "http://prem2.rockradio.com:80/${name}?${di-fm-key}";
rockradio-channels = ["00srock" "60srock" "70srock" "80srock" "90srock" "alternative80s" "alternative90s" "alternativerock" "blackmetal" "bluesrock" "classicfolkrock" "classichardrock" "classicmetal" "classicrock" "deathmetal" "grunge" "hairbands" "hardrock" "heavymetal" "indierock" "industrial" "melodicdeathmetal" "metal" "metalcore" "modernfolkrock" "modernrock" "numetal" "poprock" "powermetal" "progressiverock" "punkrock" "rockballads" "screamoemo" "softrock" "symphonicmetal" "thrashmetal" "yachtrock"];
jazzradio-name = name: "${name} | JazzRadio";
jazzradio = name: "http://prem2.jazzradio.com:80/${name}?${di-fm-key}";
jazzradio-channels = ["afrojazz" "bassjazz" "bebop" "blues" "bluesrock" "bossanova" "classicjazz" "cocktailjazz" "coffeejazz" "cooljazz" "currentjazz" "davekoz" "fusionlounge" "guitarjazz" "gypsyjazz" "hardbop" "jazzballads" "jazzhop" "latenightjazz" "latinjazz" "lovesmoothjazz" "mellowjazz" "mellowpianojazz" "mellowsmoothjazz" "modernbigband" "pariscafe" "pianojazz" "pianotrios" "saxophonejazz" "sinatrastyle" "smoothbossanova" "smoothjazz" "smoothjazz247" "smoothlounge" "smoothuptempo" "smoothvocals" "straightahead" "swingnbigband" "timelessclassics" "trumpetjazz" "vibraphonejazz" "vocaljazz" "vocallegends"];
zenradio-name = name: "${name} | ZenRadio";
zenradio = name: "http://prem4.zenradio.com:80/zr${name}?${di-fm-key}";
zenradio-channels = ["acousticvocalchillout" "ambient" "atmosphericdreams" "babysleep" "chillout" "chilloutdreams" "deepconcentration" "deepfocus" "downtempolounge" "eastasianmeditation" "lovenrelaxation" "meditation" "nativeamericanflute" "nature" "newage" "oceansounds" "peacefulhealing" "perfectsunsets" "pregnancyrelaxation" "reiki" "relaxation" "relaxingclassical" "relaxingflute" "relaxingguitar" "relaxingpiano" "relaxingspanmassage" "shamanicmusic" "sleeprelaxation" "soundsofrain" "spacedreams" "stressrelief" "studymusic" "tibetanmusic" "tibetansingingbowls" "tranquilitynhealing" "vocalchillout" "vocalnewage" "yoga" "zen"];
radiotunes-name = name: "${name} | RadioTunes";
radiotunes = name: "http://prem1.radiotunes.com:80/${name}_hi?${di-fm-key}";
radiotunes-channels = ["00scountry" "00sdance" "00srnb" "00srock" "60srock" "70srock" "80saltnnewwave" "80sdance" "80srock" "90scountry" "90sdance" "90srnb" "90srock" "altrock" "ambient" "americansongbook" "baroque" "bebop" "bluesrock" "bossanova" "cafedeparis" "chillntropicalhouse" "chillout" "christian" "classical" "classicalperiod" "classicalpianotrios" "classicmotown" "classicrap" "classicrock" "clubbollywood" "coffeejazz" "country" "cubanlounge" "dancehits" "datempolounge" "davekoz" "discoparty" "downtempolounge" "dreamscapes" "easylistening" "edmfest" "epicmusic" "eurodance" "guitar" "hardrock" "hit00s" "hit60s" "hit70s" "hit90s" "indiedance" "indierock" "jazzclassics" "jpop" "latinpophits" "lounge" "lovemusic" "meditation" "mellowjazz" "mellowsmoothjazz" "metal" "modernblues" "modernrock" "mozart" "nature" "newage" "oldies" "oldschoolfunknsoul" "pianojazz" "poprock" "reggaeton" "relaxation" "relaxingambientpiano" "romantic" "romantica" "romanticalatina" "rootsreggae" "salsa" "sleeprelaxation" "slowjams" "smoothbeats" "smoothbossanova" "smoothjazz" "smoothjazz247" "smoothlounge" "softrock" "solopiano" "soundtracks" "the80s" "tophits" "uptemposmoothjazz" "urbanjamz" "urbanpophits" "vocalchillout" "vocallounge" "vocalnewage" "vocalsmoothjazz" "world"];
soma-fm-name = name: "${name} | soma.fm"; soma-fm-name = name: "${name} | soma.fm";
soma-fm = name: "http://ice1.somafm.com/${name}-128-aac"; soma-fm = name: "http://ice1.somafm.com/${name}-128-aac";
@@ -90,9 +69,6 @@ let
rte-name = name: "RTÉ ${name}"; rte-name = name: "RTÉ ${name}";
rte = name: "https://www.rte.ie/manifests/${name}.m3u8"; rte = name: "https://www.rte.ie/manifests/${name}.m3u8";
rekt-name = name: "Rekt ${name}";
rekt = name: "https://stream.rekt.network/${name}.m4a";
royal-name = name: "${name} | RoyalRadio"; royal-name = name: "${name} | RoyalRadio";
royal = name: "http://193.33.170.218:8000/${name}"; royal = name: "http://193.33.170.218:8000/${name}";
@@ -148,11 +124,6 @@ in
logo = "https://de.wikipedia.org/wiki/Wikipedia:Enzyklop%C3%A4die/Logo_von_Wikipedia#/media/Datei:Wikipedia-logo-v2.svg"; logo = "https://de.wikipedia.org/wiki/Wikipedia:Enzyklop%C3%A4die/Logo_von_Wikipedia#/media/Datei:Wikipedia-logo-v2.svg";
tags = [tags.text]; tags = [tags.text];
} }
{
stream = "http://stream.freiesradio.org:8000/live.mp3";
station = "Freies Radio Kassel";
description = "Gesellschaft zur drahtlosen Belehrung und Erbauung";
}
{ {
stream = "http://162.244.80.20:6948"; stream = "http://162.244.80.20:6948";
station = "Cool Jazz Florida"; station = "Cool Jazz Florida";
@@ -1421,8 +1392,9 @@ in
tags = [tags.arabic]; tags = [tags.arabic];
} }
{ {
stream = "https://arabica.streamabc.net/76-radioorient-mp3-256-1050481"; stream = "http://5.9.16.111:8210/arabic_live";
station = "Radio Orient"; station = "Radio Arabica";
logo = "https://radioarabica.de/wp-content/uploads/2020/09/LOGO_klein-1.png";
tags = [tags.berlin tags.arabic]; tags = [tags.berlin tags.arabic];
} }
{ {
@@ -1965,51 +1937,12 @@ in
station = "The Quran Radio"; station = "The Quran Radio";
tags = [tags.arabic tags.text tags.holy]; tags = [tags.arabic tags.text tags.holy];
} }
{
stream = "http://www.radioeins.de/livemp3";
station = "radioeins | RBB";
tags = [tags.top40 tags.pop];
}
] ]
++ map (name: { ++ map (name: {
stream = "https://${name}.stream.publicradio.org/${name}.aac"; stream = "https://${name}.stream.publicradio.org/${name}.aac";
station = "${name} | Your Classical"; station = "${name} | Your Classical";
tags = [tags.classical]; tags = [tags.classical];
}) ["ycradio" "guitar" "cms" "relax" "lullabies" "choral" "favorites" "chambermusic" "concertband" "holiday"] }) ["ycradio" "guitar" "cms" "relax" "lullabies" "choral" "favorites" "chambermusic" "concertband" "holiday"]
++ map (name: {
stream = "https://stream.rekt.network/${name}.m4a";
station = "${name} | Rekt Network";
tags = [tags.rekt];
}) ["rekt" "rektory" "nightride" "chillsynth" "datawave" "spacesynth" "darksynth" "horrorsynth" "ebsm"]
++ map (name: {
stream = radiotunes name;
station = radiotunes-name name;
})
radiotunes-channels
++ map (name: {
stream = rockradio name;
station = rockradio-name name;
tags = [tags.rock];
})
rockradio-channels
++ map (name: {
stream = jazzradio name;
station = jazzradio-name name;
tags = [tags.jazz];
})
jazzradio-channels
++ map (name: {
stream = zenradio name;
station = zenradio-name name;
tags = [tags.chill];
})
zenradio-channels
++ map (name: {
stream = classicalradio name;
station = classicalradio-name name;
tags = [tags.classical];
})
classicalradio-channels
/* /*
(caster-fm "TODO" "noasrv" 10182) # https://github.com/cccruzr/albumsyoumusthear/blob/7e00baf575e4d357cd275d54d1aeb717321141a8/HLS/IBERO_90_1.m3u (caster-fm "TODO" "noasrv" 10182) # https://github.com/cccruzr/albumsyoumusthear/blob/7e00baf575e4d357cd275d54d1aeb717321141a8/HLS/IBERO_90_1.m3u
(caster-fm "TODO" "shaincast" 20866) # https://github.com/cccruzr/albumsyoumusthear/blob/7e00baf575e4d357cd275d54d1aeb717321141a8/HLS/IBERO_90_1.m3u (caster-fm "TODO" "shaincast" 20866) # https://github.com/cccruzr/albumsyoumusthear/blob/7e00baf575e4d357cd275d54d1aeb717321141a8/HLS/IBERO_90_1.m3u
@@ -2036,8 +1969,5 @@ http://n0b.radiojar.com/1pu7hhf8kfhvv
Chillout from kassel Chillout from kassel
https://server4.streamserver24.com:2199/tunein/ejanowsk.pls https://server4.streamserver24.com:2199/tunein/ejanowsk.pls
Jazz
http://37.251.146.169:7800/stream
*/ */

View File

@@ -1,79 +1,29 @@
local cmp = require("cmp")
local luasnip = require("luasnip")
if vim.g.snippet_directory then
require("luasnip.loaders.from_vscode").lazy_load({
paths = { vim.g.snippet_directory }
})
end
luasnip.config.set_config({
history = true,
updateevents = "TextChanged,TextChangedI",
enable_autosnippets = true
})
cmp.setup({
snippet = {
expand = function(args)
luasnip.lsp_expand(args.body)
end,
},
mapping = {
-- https://github.com/hrsh7th/nvim-cmp/wiki/Example-mappings#super-tab-like-mapping
['<Tab>'] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_next_item()
elseif luasnip.expand_or_jumpable() then
luasnip.expand_or_jump()
else
fallback()
end
end, {"i", "s"}),
["<S-Tab>"] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_prev_item()
elseif luasnip.jumpable(-1) then
luasnip.jump(-1)
else
fallback()
end
end, { "i", "s" }),
},
sources = cmp.config.sources({
{ name = 'nvim_lsp' },
{ name = 'luasnip' },
})
})
local capabilities = require('cmp_nvim_lsp').default_capabilities(vim.lsp.protocol.make_client_capabilities())
local opts = { noremap=true, silent=true } local opts = { noremap=true, silent=true }
vim.keymap.set('n', '<space>e', vim.diagnostic.open_float, opts) vim.keymap.set('n', '<space>e', vim.diagnostic.open_float, opts)
vim.keymap.set('n', '<space>dn', vim.diagnostic.goto_prev, opts) vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, opts)
vim.keymap.set('n', '<space>dp', vim.diagnostic.goto_next, opts) vim.keymap.set('n', ']d', vim.diagnostic.goto_next, opts)
vim.keymap.set('n', '<space>q', vim.diagnostic.setloclist, opts) vim.keymap.set('n', '<space>q', vim.diagnostic.setloclist, opts)
-- Use an on_attach function to only map the following keys -- Use an on_attach function to only map the following keys
-- after the language server attaches to the current buffer -- after the language server attaches to the current buffer
local on_attach = function(client, bufnr) local on_attach = function(client, bufnr)
-- Enable completion triggered by <c-x><c-o> -- Enable completion triggered by <c-x><c-o>
-- vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc') vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc')
-- Mappings. -- Mappings.
-- See `:help vim.lsp.*` for documentation on any of the below functions -- See `:help vim.lsp.*` for documentation on any of the below functions
local bufopts = { noremap=true, silent=true, buffer=bufnr } local bufopts = { noremap=true, silent=true, buffer=bufnr }
vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, bufopts) vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, bufopts)
vim.keymap.set('n', 'gd', vim.lsp.buf.definition, bufopts) vim.keymap.set('n', 'gd', vim.lsp.buf.definition, bufopts)
vim.keymap.set('n', 'gt', vim.lsp.buf.type_definition, bufopts)
vim.keymap.set('n', 'K', vim.lsp.buf.hover, bufopts) vim.keymap.set('n', 'K', vim.lsp.buf.hover, bufopts)
vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, bufopts) vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, bufopts)
vim.keymap.set('n', '<C-k>', vim.lsp.buf.signature_help, bufopts) vim.keymap.set('n', '<C-k>', vim.lsp.buf.signature_help, bufopts)
vim.keymap.set('n', '<space>f', vim.lsp.buf.format, bufopts)
vim.keymap.set('n', '<space>wa', vim.lsp.buf.add_workspace_folder, bufopts) vim.keymap.set('n', '<space>wa', vim.lsp.buf.add_workspace_folder, bufopts)
vim.keymap.set('n', '<space>wr', vim.lsp.buf.remove_workspace_folder, bufopts) vim.keymap.set('n', '<space>wr', vim.lsp.buf.remove_workspace_folder, bufopts)
vim.keymap.set('n', '<space>wl', function() vim.keymap.set('n', '<space>wl', function()
print(vim.inspect(vim.lsp.buf.list_workspace_folders())) print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
end, bufopts) end, bufopts)
vim.keymap.set('n', '<space>D', vim.lsp.buf.type_definition, bufopts)
vim.keymap.set('n', '<space>rn', vim.lsp.buf.rename, bufopts) vim.keymap.set('n', '<space>rn', vim.lsp.buf.rename, bufopts)
vim.keymap.set('n', '<space>ca', vim.lsp.buf.code_action, bufopts) vim.keymap.set('n', '<space>ca', vim.lsp.buf.code_action, bufopts)
vim.keymap.set('n', 'gr', vim.lsp.buf.references, bufopts) vim.keymap.set('n', 'gr', vim.lsp.buf.references, bufopts)
@@ -85,39 +35,20 @@ local lsp_flags = {
debounce_text_changes = 150, debounce_text_changes = 150,
} }
local language_servers = { language_servers = {
clangd = {},
pyright = {}, -- pyright pyright = {}, -- pyright
tsserver = {}, -- typescript-language-server -- tsserver = {}, -- typescript-language-server
cssls = {}, -- elmls = {}, -- elm-language-server
elmls = {}, -- elm-language-server
-- denols = {}, -- deno built in -- denols = {}, -- deno built in
bashls = {}, -- bash-language-server -- bashls = {}, -- bash-language-server
lua_ls = {
Lua = {
runtime = {
version = 'LuaJIT',
},
diagnostics = {
globals = {'vim'},
},
workspace = {
library = vim.api.nvim_get_runtime_file("", true)
},
telemetry = {
enable = false,
}
},
},
hls = {}, -- haskell-language-server hls = {}, -- haskell-language-server
html = {}, -- vscode-langservers-extracted -- html = {}, -- vscode-langservers-extracted
jsonls = {}, -- vscode-langservers-extracted -- jsonls = {}, -- vscode-langservers-extracted
nil_ls = {}, -- github:oxalica/nil nil_ls = {}, -- github:oxalica/nil
dhall_lsp_server = {}, -- dhall-lsp-server
-- rnix = {}, -- rnix-lsp -- rnix = {}, -- rnix-lsp
jqls = {}, -- jq-lsp -- jqls = {}, -- jq-lsp
rust_analyzer = { ["rust-analyzer"] = {} }, rust_analyzer = { ["rust-analyzer"] = {} },
eslint = {}, -- eslint?
-- volar? vls? -- volar? vls?
texlab = { texlab = {
texlab = { texlab = {
@@ -151,6 +82,5 @@ for server, settings in pairs(language_servers) do
on_attach = on_attach, on_attach = on_attach,
flags = lsp_flags, flags = lsp_flags,
settings = settings, settings = settings,
capabilities = capabilities
} }
end end

View File

@@ -3,12 +3,26 @@ vnoremap a= :Tabularize /=<CR>
vnoremap a; :Tabularize /::<CR> vnoremap a; :Tabularize /::<CR>
vnoremap a- :Tabularize /-><CR> vnoremap a- :Tabularize /-><CR>
nnoremap <C-p> :FZF<CR>
nnoremap <C-l> :Rg<CR>
let g:fzf_layout = { 'down': '~15%' }
colorscheme dim colorscheme dim
" transparent background
hi Normal guibg=NONE ctermbg=NONE
let mapleader = ","
let maplocalleader="\\"
" noremap <Leader>h :<C-u>split<CR> " noremap <Leader>h :<C-u>split<CR>
" noremap <Leader>v :<C-u>vsplit<CR> " noremap <Leader>v :<C-u>vsplit<CR>
noremap <Leader>gs :Git<CR> noremap <Leader>gs :Git<CR>
noremap <Leader>gc :Git commit<CR> noremap <Leader>gc :Git commit<CR>
noremap <leader>n :bn<CR>
noremap <leader>p :bp<CR>
noremap <leader>c :bd<CR>
noremap <leader>b :Buffers<CR>
noremap <leader>t :Tags<CR>
" reindent whole file " reindent whole file
noremap <leader>i mzgg=G`z noremap <leader>i mzgg=G`z
@@ -16,11 +30,18 @@ noremap <leader>i mzgg=G`z
" replace all " replace all
nnoremap S :%s//g<Left><Left> nnoremap S :%s//g<Left><Left>
nnoremap <Leader>a <Plug>(ale_hover)
nnoremap <Leader>d <Plug>(ale_go_to_definition_in_tab)
nnoremap <Leader>rf <Plug>(ale_find_references)
" Hit `%` on `if` to jump to `else`. " Hit `%` on `if` to jump to `else`.
runtime macros/matchit.vim runtime macros/matchit.vim
filetype plugin indent on
set autoindent
set notitle set notitle
set nospell set nospell
set smartcase ignorecase " you need these two
set backspace=indent,eol,start set backspace=indent,eol,start
set hidden set hidden
set ruler set ruler
@@ -30,13 +51,21 @@ set number
set path+=** set path+=**
set splitbelow splitright set splitbelow splitright
set wildmenu wildmode=longest,list,full set wildmenu wildmode=longest,list,full
set shortmess+=ac set shortmess+=aI
set nowritebackup noswapfile
set mouse=a
set showmatch set showmatch
set encoding=utf8 ffs=unix,dos,mac
set smartindent set smartindent
set hlsearch set wrap
set nohlsearch
set clipboard=unnamedplus
set nopaste
set list listchars=tab:⇥\ ,extends:,precedes:,nbsp:␣,trailshowbreak=¬
set foldlevelstart=30 set foldlevelstart=30
nnoremap <C-H> <CMD>set nohlsearch<CR> iabbrev ddate <C-R>=strftime("%F")<CR>
iabbrev dtime <C-R>=strftime("%F %T")<CR>
let g:netrw_banner=0 let g:netrw_banner=0
let g:netrw_browse_split=4 let g:netrw_browse_split=4
@@ -97,11 +126,9 @@ augroup filetypes
autocmd bufnewfile,bufread *.rust packadd rust-vim autocmd bufnewfile,bufread *.rust packadd rust-vim
autocmd bufnewfile,bufread *.csv packadd csv.vim | set filetype=csv autocmd bufnewfile,bufread *.csv packadd csv.vim | set filetype=csv
autocmd bufnewfile,bufread *.tex packadd vimtex | set filetype=tex autocmd bufnewfile,bufread *.tex packadd vimtex | set filetype=tex
autocmd bufnewfile,bufread *.typ packadd typst.vim | set filetype=typst
autocmd bufnewfile,bufread *.ics packadd icalendar.vim | set filetype=icalendar autocmd bufnewfile,bufread *.ics packadd icalendar.vim | set filetype=icalendar
autocmd bufnewfile,bufread *.ts packadd typescript-vim | set filetype=typescript autocmd bufnewfile,bufread *.ts packadd typescript-vim | set filetype=typescript
autocmd bufnewfile,bufread *.dhall packadd dhall-vim | set filetype=dhall autocmd bufnewfile,bufread *.jq packadd jq.vim
autocmd bufnewfile,bufread *.jq packadd jq.vim | set filetype=jq
autocmd bufnewfile,bufread *.journal packadd vim-ledger | set filetype=ledger shiftwidth=4 autocmd bufnewfile,bufread *.journal packadd vim-ledger | set filetype=ledger shiftwidth=4
autocmd bufnewfile,bufread urls,config set filetype=conf autocmd bufnewfile,bufread urls,config set filetype=conf
autocmd bufnewfile,bufread *.elm packadd elm-vim | set filetype=elm shiftwidth=4 autocmd bufnewfile,bufread *.elm packadd elm-vim | set filetype=elm shiftwidth=4
@@ -121,9 +148,47 @@ autocmd bufreadpost *
\ endif \ endif
autocmd bufreadpre * setlocal foldmethod=indent autocmd bufreadpre * setlocal foldmethod=indent
set completeopt=menu,menuone,noselect set completeopt=noinsert,menuone,noselect
set complete+=kspell set complete+=kspell
let g:SuperTabDefaultCompletionType = 'context'
let g:haskell_enable_quantification = 1
let g:haskell_enable_recursivedo = 1
let g:haskell_enable_arrowsyntax = 1
let g:haskell_enable_pattern_synonyms = 1
let g:pandoc#syntax#conceal#use = 0 let g:pandoc#syntax#conceal#use = 0
let g:pandoc#modules#disabled = [] let g:pandoc#modules#disabled = []
let g:pandoc#spell#default_langs = ['en', 'de'] let g:pandoc#spell#default_langs = ['en', 'de']
let g:ale_linters = {
\ 'css': ['csslint'],
\ 'haskell': ['ghc', 'cabal-ghc', 'hlint', 'ormolu'],
\ 'html': ['tidy', 'proselint'],
\ 'latex': ['lacheck', 'chktex', 'proselint'],
\ 'pandoc': ['proselint'],
\ 'ruby': ['rubocop'],
\ 'json': ['jsonlint'],
\ 'rust': ['cargo'],
\ 'python': ['pyls'],
\}
let g:ale_fixers = {
\ '*': ['remove_trailing_lines', 'trim_whitespace'],
\ 'javascript': ['prettier'],
\ 'typescript': ['prettier'],
\ 'css': ['prettier'],
\ 'html': ['prettier'],
\ 'json': ['jq'],
\ 'python': ['black'],
\ 'rust': ['rustfmt']
\}
let g:ale_set_quickfix = 1
let g:ale_fix_on_save = 1
autocmd bufnewfile,bufread elm.json let g:ale_fix_on_save = 0
let g:ale_completion_enabled = 1
let g:vimwiki_list = [{'path': '~/notes/',
\ 'syntax': 'markdown', 'ext': '.md'}]

View File

@@ -1,30 +0,0 @@
nnoremap <C-p> :FZF<CR>
nnoremap <C-l> :Rg<CR>
let g:fzf_layout = { 'down': '~15%' }
" transparent background
hi Normal guibg=NONE ctermbg=NONE
let mapleader = ","
let maplocalleader="\\"
noremap <leader>n :bn<CR>
noremap <leader>p :bp<CR>
noremap <leader>c :bd<CR>
noremap <leader>b :Buffers<CR>
noremap <leader>t :Tags<CR>
set nocompatible
syntax on
filetype plugin indent on
set autoindent
set smartcase ignorecase " you need these two
set nowritebackup noswapfile
set mouse=a
set encoding=utf8 ffs=unix,dos,mac
set wrap
set list listchars=tab:⇥\ ,extends:,precedes:,nbsp:␣,trailshowbreak=¬
set clipboard=unnamedplus
set nopaste
iabbrev ddate <C-R>=strftime("%F")<CR>
iabbrev dtime <C-R>=strftime("%F %T")<CR>

View File

@@ -113,17 +113,16 @@
set -efu set -efu
${watcherOptions.script} > ${watcherName} ${watcherOptions.script} > ${watcherName}
${pkgs.git}/bin/git add ${watcherName}
${pkgs.git}/bin/git commit --message "${watcherName} / $(${pkgs.coreutils}/bin/date -Is)" || :
if [ -n "$(${pkgs.git}/bin/git diff -- ${watcherName})" ]; then if [ -n "$(${pkgs.git}/bin/git diff HEAD^ -- ${watcherName})" ]; then
${lib.strings.concatMapStringsSep "\n" (reporter: '' ${lib.strings.concatMapStringsSep "\n" (reporter: ''
${pkgs.git}/bin/git diff HEAD^ -- ${watcherName} | ${reporter} ${pkgs.git}/bin/git diff HEAD^ -- ${watcherName} | ${reporter}
'') '')
watcherOptions.reporters} watcherOptions.reporters}
: :
fi fi
${pkgs.git}/bin/git add ${watcherName}
${pkgs.git}/bin/git commit --message "${watcherName} / $(${pkgs.coreutils}/bin/date -Is)" || :
''; '';
}) })
cfg.watchers; cfg.watchers;

96
modules/specus.nix Normal file
View File

@@ -0,0 +1,96 @@
{
config,
lib,
pkgs,
...
}: let
specusMachines = {
servers = {
makanek = {
ipv4 = "10.100.0.1";
publicKey = "KhcScd4fBpdhQzK8Vc+1mEHQMQBpbKBUPB4oZ7skeSk=";
};
ful = {
ipv4 = "10.100.0.2";
publicKey = "0Y7+zoXkWJGVOWWnMjvYjtwP+WpggAlmkRbgMw0z8Dk=";
};
};
clients = {
kabsa = {
ipv4 = "10.100.0.101";
publicKey = "nRkzoRi9crKHF7263U37lt4GGL7/8637NBSKjifI9hY=";
};
};
};
in {
options.services.specus = {
server = {
enable = lib.mkEnableOption "Specus private VPN (server)";
};
client = {
enable = lib.mkEnableOption "Specus private VPN (client)";
};
privateKeyFile = lib.mkOption {
type = lib.types.path;
description = "Private key file of the server/client machine";
};
};
config = let
cfg = config.services.specus;
specusPort = 22;
in
{
assertions = [
{
assertion =
!(cfg.server.enable && cfg.client.enable);
message = "specus: systems cannot be client and server at the same time";
}
];
}
// lib.mkIf cfg.server.enable {
networking.nat = {
enable = true;
externalInterface = "eth0"; # TODO
internalInterfaces = ["specus"];
};
networking.firewall.allowedUDPPorts = [specusPort];
networking.wireguard.interfaces.specus = {
ips = ["${specusMachines.servers.${config.networking.hostName}.ipv4}/24"];
# For this to work you have to set the dnsserver IP of your router (or dnsserver of choice) in your clients
postSetup = ''
${pkgs.iptables}/bin/iptables -t nat -A POSTROUTING -s 10.100.0.0/24 -o eth0 -j MASQUERADE
'';
postShutdown = ''
${pkgs.iptables}/bin/iptables -t nat -D POSTROUTING -s 10.100.0.0/24 -o eth0 -j MASQUERADE
'';
listenPort = specusPort;
privateKeyFile = cfg.privateKeyFile;
peers =
lib.mapAttrsToList (clientName: clientConfig: {
publicKey = clientConfig.publicKey;
allowedIPs = ["${clientConfig.ipv4}/32"];
})
specusMachines.clients;
};
}
// lib.mkIf cfg.client.enable {
networking.firewall.allowedUDPPorts = [specusPort];
networking.wireguard.interfaces = lib.attrsets.mapAttrs' (serverName: serverConfig:
lib.nameValuePair "specus-${serverName}" {
ips = ["${specusMachines.clients.${config.networking.hostName}.ipv4}/24"];
listenPort = specusPort;
privateKeyFile = cfg.privateKeyFile;
peers = [
{
allowedIPs = ["0.0.0.0/0"];
endpoint = "${(import ../lib/external-network.nix).${serverName}}:${toString specusPort}";
persistentKeepalive = 25;
publicKey = serverConfig.publicKey;
}
];
})
specusMachines.servers;
};
}

47
modules/traadfri.nix Normal file
View File

@@ -0,0 +1,47 @@
{
pkgs,
lib,
config,
inputs,
...
}:
with lib; let
cfg = config.niveum.traadfri;
in {
options.niveum.traadfri = {
enable = mkEnableOption "Trådfri CLI";
user = mkOption {type = types.str;};
host = mkOption {type = types.str;};
keyFile = mkOption {type = types.path;};
rooms = mkOption {
type = types.attrsOf types.int;
default = {};
};
bulbs = mkOption {
type = types.attrsOf types.int;
default = {};
};
};
config = mkIf cfg.enable {
environment.systemPackages =
[
(pkgs.writers.writeDashBin "traadfri" ''
export TRAADFRI_USER="${cfg.user}"
export TRAADFRI_KEY="$(cat ${lib.escapeShellArg cfg.keyFile})"
export TRAADFRI_HUB="${cfg.host}"
${inputs.traadfri.defaultPackage.x86_64-linux}/bin/traadfri $@
'')
]
++ lib.mapAttrsToList (name: value:
pkgs.writers.writeDashBin "traadfri-${name}" ''
exec traadfri --target Room ${toString value} "$@"
'')
cfg.rooms
++ lib.mapAttrsToList (name: value:
pkgs.writers.writeDashBin "traadfri-${name}" ''
exec traadfri --target Bulb ${toString value} "$@"
'')
cfg.bulbs;
};
}

View File

@@ -1,18 +0,0 @@
{
writers,
lib,
coreutils,
dmenu,
gawk,
libnotify,
xclip,
khard,
}:
writers.writeDashBin "emailmenu" ''
history_file=$HOME/.cache/emailmenu
PATH=${lib.makeBinPath [coreutils dmenu gawk libnotify xclip]}
chosen=$(${khard}/bin/khard email --parsable | awk '!seen[$0]++' | dmenu -i -p 📧 -1 -l 10 | tee --append "$history_file" | cut -f1)
[ "$chosen" != "" ] || exit
echo "$chosen" | tr -d '\n' | xclip -selection clipboard
notify-send --app-name="$(basename "$0")" "'$chosen' copied to clipboard." &
''

View File

@@ -1,15 +0,0 @@
{
curl,
writers,
jq,
apiKeyCommand ? "pass api-keys/openai.com",
model ? "gpt-3.5-turbo",
}:
writers.writeDashBin "gpt" ''
json=$(jq --slurp --raw-input '{model:"${model}", messages: [{role: "user", content: .}]}')
${curl}/bin/curl -sSL https://api.openai.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $(${apiKeyCommand})" \
-d "$json" \
| ${jq}/bin/jq -r '.choices[] | .message.content'
''

23
packages/itl.nix Normal file
View File

@@ -0,0 +1,23 @@
{ stdenv, fetchFromGitHub, cmake, lib }:
stdenv.mkDerivation rec {
pname = "itl";
version = "0.8.0";
src = fetchFromGitHub {
owner = "arabeyes-org";
repo = "ITL";
rev = "v${version}";
sha256 = "sha256-GTicTbZmFbPhzInFob3cfvtTxOpUZuqsQz1w9CoWu9w=";
};
nativeBuildInputs = [cmake];
cmakeFlags = [
"-DCMAKE_INSTALL_PREFIX=${placeholder "out"}"
"-DCMAKE_INSTALL_LIBDIR=lib"
];
meta = {
homepage = "https://www.arabeyes.org/ITL";
description = "Islamic Tools and Libraries";
license = lib.licenses.lgpl2;
platforms = lib.platforms.all;
maintainer = [lib.maintainers.kmein];
};
}

21
packages/itools.nix Normal file
View File

@@ -0,0 +1,21 @@
{ stdenv, fetchFromGitHub, itl, lib, autoreconfHook }:
stdenv.mkDerivation rec {
pname = "itools";
version = "1.0";
src = fetchFromGitHub {
owner = "arabeyes-org";
repo = "itools";
rev = version;
sha256 = "sha256-g9bsjupC4Sb5ywAgUNbjYLbHZ/i994lbNSnX2JyaP3g=";
};
preAutoreconf = "autoupdate";
nativeBuildInputs = [autoreconfHook];
buildInputs = [itl];
meta = {
homepage = "https://www.arabeyes.org/ITL";
description = "The itools package is a set of user friendly applications utilizing Arabeyes' ITL library. ";
license = lib.licenses.gpl2;
platforms = lib.platforms.all;
maintainer = [lib.maintainers.kmein];
};
}

View File

@@ -1,16 +0,0 @@
{
buildGoModule,
fetchFromGitHub,
lib,
}:
buildGoModule {
name = "jq-lsp";
version = "unstable-2023-09-08";
src = fetchFromGitHub {
owner = "wader";
repo = "jq-lsp";
rev = "85edf1adbe5e6c91b37c67b6a4bf85eda1e49f2f";
hash = "sha256-ItLKRSbGZ8UqFEHCoh96KwhSpuKZ3l+2ZXnBkHEZL0M=";
};
vendorHash = "sha256-ppQ81uERHBgOr/bm/CoDSWcK+IqHwvcL6RFi0DgoLuw=";
}

View File

@@ -49,6 +49,7 @@ in
${lib.concatStringsSep "\n" (lib.mapAttrsToList scriptCase cfg.scripts)} ${lib.concatStringsSep "\n" (lib.mapAttrsToList scriptCase cfg.scripts)}
*) ${pkgs.coreutils}/bin/cat ;; *) ${pkgs.coreutils}/bin/cat ;;
esac \ esac \
| tr -d '\r\n' \
| ${pkgs.xclip}/bin/xclip -selection ${cfg.selection} -in | ${pkgs.xclip}/bin/xclip -selection ${cfg.selection} -in
${pkgs.libnotify}/bin/notify-send --app-name="klem" "Result copied to clipboard." ${pkgs.libnotify}/bin/notify-send --app-name="klem" "Result copied to clipboard."

View File

@@ -4,7 +4,6 @@
writers, writers,
}: }:
writers.writeDashBin "kpaste" '' writers.writeDashBin "kpaste" ''
${curl}/bin/curl -sS http://p.r --data-binary @"''${1:--}" \ ${curl}/bin/curl -sS http://p.r --data-binary @"''${1:--}" |
-H "Content-Type-Override: ''${KPASTE_CONTENT_TYPE-}" |
${gnused}/bin/sed '$ {p;s|http://p.r|https://p.krebsco.de|}' ${gnused}/bin/sed '$ {p;s|http://p.r|https://p.krebsco.de|}'
'' ''

View File

@@ -1,16 +0,0 @@
{
mpv,
writers,
}:
writers.writeDashBin "iptv" ''
set -efu
${mpv}/bin/mpv \
--audio-display=no --audio-channels=stereo \
--audio-samplerate=48000 --audio-format=s16 \
--ao-pcm-file=/run/snapserver/snapfifo --ao=pcm \
--audio-delay=-1 \
--playlist=https://iptv-org.github.io/iptv/index.nsfw.m3u \
--idle=yes \
--input-ipc-server=/tmp/mpv.ipc \
"$@"
''

View File

@@ -20,9 +20,7 @@
streams); streams);
in in
writers.writeDashBin "mpv-radio" '' writers.writeDashBin "mpv-radio" ''
if [ -z ''${DI_FM_KEY} ]; then export DI_FM_KEY=$(cat "${di-fm-key-file}")
DI_FM_KEY=$(cat "${di-fm-key-file}")
fi
exec ${mpv}/bin/mpv --force-window=yes "$( exec ${mpv}/bin/mpv --force-window=yes "$(
${dmenu}/bin/dmenu -i -l 5 < ${streams-tsv} \ ${dmenu}/bin/dmenu -i -l 5 < ${streams-tsv} \
| ${coreutils}/bin/cut -f3 \ | ${coreutils}/bin/cut -f3 \

View File

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

View File

@@ -0,0 +1,36 @@
{
lib,
stdenvNoCC,
fetchFromGitHub,
curl,
xclip,
}:
stdenvNoCC.mkDerivation rec {
pname = "visualizer";
version = "unstable-2021-07-10";
src = fetchFromGitHub {
owner = "mfcc64";
repo = "mpv-scripts";
rev = "a0cd87eeb974a4602c5d8086b4051b5ab72f42e1";
sha256 = "1xgd1nd117lpj3ppynhgaa5sbkfm7l8n6c9a2fy8p07is2dkndrq";
};
dontBuild = true;
installPhase = ''
runHook preInstall
mkdir -p $out/share/mpv/scripts
cp visualizer.lua $out/share/mpv/scripts
runHook postInstall
'';
passthru.scriptName = "visualizer.lua";
meta = with lib; {
description = "various audio visualization";
homepage = "https://github.com/mfcc64/mpv-scripts";
platforms = platforms.all;
maintainers = with maintainers; [kmein];
};
}

View File

@@ -1,29 +0,0 @@
{
writers,
lib,
rofi,
findutils,
coreutils,
noteDirectory ? "~/cloud/syncthing/obsidian",
currentDates ? false,
niveumPackages,
}:
writers.writeDashBin "notemenu" ''
set -efu
PATH=$PATH:${
lib.makeBinPath [rofi findutils coreutils]
}
cd ${noteDirectory}
note_file=$({
${lib.optionalString currentDates ''
echo $(date -I).md
echo $(date -I -d yesterday).md
''}
find . -not -path '*/.*' -type f -printf "%T@ %p\n" | sort --reverse --numeric-sort | cut --delimiter=" " --fields=2-
} | rofi -dmenu -i -p 'notes')
if test "$note_file"
then
alacritty --working-directory ${noteDirectory} -e ${niveumPackages.obsidian-vim}/bin/nvim "$note_file"
fi
''

View File

@@ -1,37 +0,0 @@
{
neovim,
vimPlugins,
obsidiantVaultDirectory ? "~/cloud/syncthing/obsidian/",
...
}:
neovim.override {
configure = {
customRC = ''
source ${../lib/vim/shared.vim}
cd ${obsidiantVaultDirectory}
let g:vimwiki_auto_chdir = 1
let g:vimwiki_listsyms = ' X'
let g:vimwiki_commentstring = '<!--%s-->'
let g:vimwiki_list = [{
\ 'path': '${obsidiantVaultDirectory}',
\ 'syntax': 'markdown',
\ 'ext': '.md',
\ 'diary_rel_path' '.',
\}]
let NERDTreeSortOrder = ['[[-timestamp]]']
" Start NERDTree and put the cursor back in the other window.
autocmd VimEnter * NERDTree ${obsidiantVaultDirectory} | wincmd p
'';
packages.nvim.start = [
vimPlugins.vimwiki
vimPlugins.nerdtree
vimPlugins.fzf-vim
vimPlugins.fzfWrapper
];
};
}

View File

@@ -1,48 +0,0 @@
{
stdenv,
autoreconfHook,
pkg-config,
which,
libtool,
glib,
zlib,
gtk3,
libmysqlclient,
pcre,
libxml2,
gnused,
fetchFromGitHub,
}:
stdenv.mkDerivation {
name = "stardict-tools";
nativeBuildInputs = [
autoreconfHook
pkg-config
which
libtool
];
buildInputs = [glib zlib gtk3 libmysqlclient pcre libxml2];
buildPhase = "make";
configureFlags = ["--disable-dict"];
env.NIX_CFLAGS_COMPILE = toString [
"-Wno-error=format-security"
];
patchPhase = ''
${gnused}/bin/sed -i s/noinst_PROGRAMS/bin_PROGRAMS/ tools/src/Makefile.am
'';
installFlags = ["INSTALL_PREFIX=$(out)"];
autoreconfPhase = ''
patchShebangs ./autogen.sh
./autogen.sh
'';
installPhase = ''
mkdir $out
make install
'';
src = fetchFromGitHub {
owner = "huzheng001";
repo = "stardict-3";
rev = "96b96d89eab5f0ad9246c2569a807d6d7982aa84";
hash = "sha256-zmqp2maKv2JZ5fwMVE7gIOg0BKdEKZ4UvTLC0suuBRw=";
};
}

View File

@@ -11,20 +11,7 @@
xclip, xclip,
xdotool, xdotool,
gawk, gawk,
fetchFromGitHub,
}: let }: let
emoji-flags = builtins.fromJSON (builtins.readFile "${fetchFromGitHub {
owner = "matiassingers";
repo = "emoji-flags";
rev = "93ae74505d09bb55a3eb3a511f1dfc0dd60a5347";
sha256 = "10j73sx6jb250v37bz2p7w8big0v8da3r6kpqz9xcl667gl8svwx";
}}/data.json");
emoji-flags-file = writeText "emoji-flags.txt" (lib.strings.concatMapStringsSep "\n" ({
emoji,
title,
...
}: "${emoji} ${title}")
emoji-flags);
unicode-file = runCommand "unicode.txt" {} '' unicode-file = runCommand "unicode.txt" {} ''
${ ${
writers.writePython3 "generate.py" {flakeIgnore = ["E501" "E722"];} '' writers.writePython3 "generate.py" {flakeIgnore = ["E501" "E722"];} ''
@@ -93,7 +80,7 @@ in
all_characters() { all_characters() {
tac "$history_file" tac "$history_file"
cat ${kaomoji-file} ${unicode-file} ${emoji-flags-file} cat ${kaomoji-file} ${unicode-file}
} }
chosen=$(all_characters | awk '!seen[$0]++' | dmenu -p unicode -i -l 10 | tee --append "$history_file" | sed "s/ .*//") chosen=$(all_characters | awk '!seen[$0]++' | dmenu -p unicode -i -l 10 | tee --append "$history_file" | sed "s/ .*//")

View File

@@ -1,77 +0,0 @@
{
neovim,
vimPlugins,
fetchFromGitHub,
vimUtils,
niveumPackages,
...
}: (neovim.override {
configure = {
customRC = ''
source ${../lib/vim/shared.vim}
source ${../lib/vim/init.vim}
let g:snippet_directory = '${vimPlugins.friendly-snippets}'
luafile ${../lib/vim/init.lua}
'';
packages.nvim = with vimPlugins; {
start = [
nvim-cmp
cmp-buffer
cmp-path
cmp-nvim-lsp
cmp-cmdline
luasnip
editorconfig-vim
fzf-vim
fzfWrapper
supertab
undotree
tabular
# vimwiki
niveumPackages.vimPlugins-vim-colors-paramount
nvim-lspconfig
vim-commentary
vim-css-color
vim-eunuch
niveumPackages.vimPlugins-vim-fetch
vim-fugitive
vim-gitgutter
vim-repeat
vim-sensible
vim-surround
(vimUtils.buildVimPlugin rec {
pname = "vim-dim";
version = "1.1.0";
name = "${pname}-${version}";
src = fetchFromGitHub {
owner = "jeffkreeftmeijer";
repo = pname;
rev = version;
sha256 = "sha256-lyTZUgqUEEJRrzGo1FD8/t8KBioPrtB3MmGvPeEVI/g=";
};
})
];
opt = [
csv
dhall-vim
elm-vim
emmet-vim
haskell-vim
niveumPackages.vimPlugins-icalendar-vim
niveumPackages.vimPlugins-jq-vim
rust-vim
typescript-vim
vim-javascript
vim-ledger
vim-nix
vimtex
vim-pandoc
vim-pandoc-syntax
niveumPackages.vimPlugins-vim-256noir
niveumPackages.vimPlugins-typst-vim
];
};
};
})

View File

@@ -1,14 +0,0 @@
{
vimUtils,
fetchFromGitHub,
}:
vimUtils.buildVimPluginFrom2Nix {
pname = "typst.vim";
version = "2882f21";
src = fetchFromGitHub {
owner = "kaarmu";
repo = "typst.vim";
rev = "2882f211f1498c790bb857f8a912c8e86526a362";
sha256 = "0xr8k17ggqfdksf3kybimfl5djjz3h19k4479la06i5lnwvlhkh2";
};
}

Submodule secrets updated: dcf6ac066d...99320671a5

View File

@@ -1,68 +0,0 @@
secrets/alertmanager-token-reporters.age
secrets/blackboard-calendar-ics.age
secrets/cifs-credentials-hu-berlin.age
secrets/cifs-credentials-zodiac.age
secrets/di-fm-key.age
secrets/email-password-cock.age
secrets/email-password-dslalewa.age
secrets/email-password-fsklassp.age
secrets/email-password-fysi.age
secrets/email-password-meinhak99.age
secrets/email-password-meinhaki.age
secrets/email-password-meinhark.age
secrets/email-password-posteo.age
secrets/ful-retiolum-privateKey-ed25519.age
secrets/ful-retiolum-privateKey-rsa.age
secrets/ful-root.age
secrets/ful-specus-privateKey.age
secrets/github-token-i3status-rust.age
secrets/grafana-password-admin.age
secrets/hetzner-storagebox-credentials.age
secrets/home-assistant-token.age
secrets/kabsa-retiolum-privateKey-ed25519.age
secrets/kabsa-retiolum-privateKey-rsa.age
secrets/kabsa-specus-privateKey.age
secrets/kabsa-syncthing-cert.age
secrets/kabsa-syncthing-key.age
secrets/kfm-password.age
secrets/ledger-basicAuth.age
secrets/makanek-retiolum-privateKey-ed25519.age
secrets/makanek-retiolum-privateKey-rsa.age
secrets/makanek-specus-privateKey.age
secrets/manakish-retiolum-privateKey-ed25519.age
secrets/manakish-retiolum-privateKey-rsa.age
secrets/manakish-syncthing-cert.age
secrets/manakish-syncthing-key.age
secrets/maxmind-license-key.age
secrets/mega-password.age
secrets/miniflux-api-token.age
secrets/miniflux-credentials.age
secrets/nextcloud-password-admin.age
secrets/nextcloud-password-database.age
secrets/nextcloud-password-fysi.age
secrets/nextcloud-password-kieran.age
secrets/onlyoffice-jwt-key.age
secrets/openweathermap-api-key.age
secrets/restic.age
secrets/secrets.nix
secrets/spotify-password.age
secrets/spotify-username.age
secrets/stw-berlin-card-code.age
secrets/tabula-retiolum-privateKey-ed25519.age
secrets/tabula-retiolum-privateKey-rsa.age
secrets/tahina-retiolum-privateKey-ed25519.age
secrets/tahina-retiolum-privateKey-rsa.age
secrets/telegram-token-betacode.age
secrets/telegram-token-kmein.age
secrets/telegram-token-menstruation.age
secrets/telegram-token-nachtischsatan.age
secrets/telegram-token-proverb.age
secrets/telegram-token-reverse.age
secrets/weechat-sec.conf.age
secrets/zaatar-moodle-dl-basicAuth.age
secrets/zaatar-moodle-dl-tokens.json.age
secrets/zaatar-retiolum-privateKey-ed25519.age
secrets/zaatar-retiolum-privateKey-rsa.age
secrets/zaatar-syncthing-cert.age
secrets/zaatar-syncthing-key.age
secrets/zaatar-ympd-basicAuth.age

View File

@@ -11,7 +11,6 @@ in {
./matomo.nix ./matomo.nix
./radio.nix ./radio.nix
./panoptikon.nix ./panoptikon.nix
./ledger.nix
../../configs/monitoring.nix ../../configs/monitoring.nix
../../configs/tor.nix ../../configs/tor.nix
../../configs/save-space.nix ../../configs/save-space.nix
@@ -50,6 +49,12 @@ in {
}; };
root.file = ../../secrets/ful-root.age; root.file = ../../secrets/ful-root.age;
restic.file = ../../secrets/restic.age; restic.file = ../../secrets/restic.age;
specus.file = ../../secrets/ful-specus-privateKey.age;
};
services.specus = {
privateKeyFile = config.age.secrets.specus.path;
server.enable = true;
}; };
services.restic.backups.niveum = { services.restic.backups.niveum = {
@@ -94,5 +99,5 @@ in {
environment.systemPackages = [pkgs.vim pkgs.git pkgs.tmux pkgs.python3]; environment.systemPackages = [pkgs.vim pkgs.git pkgs.tmux pkgs.python3];
# since 22.05 timeout fails? # since 22.05 timeout fails?
# systemd.services.systemd-networkd-wait-online.enable = false; systemd.services.systemd-networkd-wait-online.enable = false;
} }

View File

@@ -1,54 +0,0 @@
{
config,
pkgs,
...
}: {
services.hledger-web = {
enable = true;
capabilities = {
add = true;
view = true;
manage = false;
};
serveApi = false; # serve only the JSON API
baseUrl = "https://ledger.kmein.de";
journalFiles = [
"privat.journal"
];
};
systemd.services.hledger-backup = {
enable = true;
startAt = "hourly";
wants = ["network-online.target"];
wantedBy = ["multi-user.target"];
script = ''
${pkgs.git}/bin/git config user.name "hledger-web"
${pkgs.git}/bin/git config user.email "hledger-web@${config.networking.hostName}"
${pkgs.git}/bin/git commit -am $(date -Ih)
${pkgs.git}/bin/git pull --rebase
${pkgs.git}/bin/git push
'';
serviceConfig = {
User = "hledger";
Group = "hledger";
WorkingDirectory = config.services.hledger-web.stateDir;
};
};
age.secrets = {
ledger-basicAuth = {
file = ../../secrets/ledger-basicAuth.age;
owner = "nginx";
group = "nginx";
mode = "400";
};
};
services.nginx.virtualHosts."ledger.kmein.de" = {
enableACME = true;
basicAuthFile = config.age.secrets.ledger-basicAuth.path;
forceSSL = true;
locations."/".proxyPass = "http://127.0.0.1:${toString config.services.hledger-web.port}";
};
}

View File

@@ -24,14 +24,7 @@ in {
enable = true; enable = true;
watchers = { watchers = {
"github-meta" = { "github-meta" = {
script = panoptikon.urlJSON { script = panoptikon.urlJSON {} "https://api.github.com/meta";
jqScript = ''
{
ssh_key_fingerprints: .ssh_key_fingerprints,
ssh_keys: .ssh_keys
}
'';
} "https://api.github.com/meta";
reporters = [irc-xxx]; reporters = [irc-xxx];
}; };
lammla = { lammla = {
@@ -94,6 +87,22 @@ in {
script = panoptikon.urlSelector "[itemprop=articleBody]" "https://www.indogermanistik.org/tagungen/tagungen-der-ig.html"; script = panoptikon.urlSelector "[itemprop=articleBody]" "https://www.indogermanistik.org/tagungen/tagungen-der-ig.html";
reporters = [irc-kmein]; reporters = [irc-kmein];
}; };
fxght-or-flxght = {
script = panoptikon.urlJSON {
jqScript = ''
.answers | map(
select(.type == "answer")
| {
question: .tell,
answer: .answer,
date: .createdAt,
media: .media | map(.url)
}
)
'';
} "https://api.tellonym.me/profiles/name/fxght.or.flxght?limit=20";
reporters = [irc-kmein];
};
}; };
}; };
} }

View File

@@ -126,8 +126,6 @@ in {
systemd.services.radio.environment.TMPDIR = liquidsoapDirectory; systemd.services.radio.environment.TMPDIR = liquidsoapDirectory;
environment.systemPackages = [refresh-qasaid];
systemd.tmpfiles.rules = [ systemd.tmpfiles.rules = [
(tmpfilesConfig { (tmpfilesConfig {
type = "d"; type = "d";

View File

@@ -40,10 +40,16 @@ in {
restic.file = ../../secrets/restic.age; restic.file = ../../secrets/restic.age;
syncthing-cert.file = ../../secrets/kabsa-syncthing-cert.age; syncthing-cert.file = ../../secrets/kabsa-syncthing-cert.age;
syncthing-key.file = ../../secrets/kabsa-syncthing-key.age; syncthing-key.file = ../../secrets/kabsa-syncthing-key.age;
specus.file = ../../secrets/kabsa-specus-privateKey.age;
}; };
environment.systemPackages = [pkgs.minecraft pkgs.zeroad]; environment.systemPackages = [pkgs.minecraft pkgs.zeroad];
services.specus = {
privateKeyFile = config.age.secrets.specus.path;
client.enable = false;
};
networking = { networking = {
hostName = "kabsa"; hostName = "kabsa";
wireless.interfaces = ["wlp3s0"]; wireless.interfaces = ["wlp3s0"];

View File

@@ -16,7 +16,6 @@ in {
./names.nix ./names.nix
./nextcloud.nix ./nextcloud.nix
./radio-news.nix ./radio-news.nix
./onlyoffice.nix
./retiolum-map.nix ./retiolum-map.nix
./tarot.nix ./tarot.nix
./tt-rss.nix ./tt-rss.nix
@@ -45,7 +44,6 @@ in {
config.services.grafana.dataDir config.services.grafana.dataDir
config.services.gitea.stateDir config.services.gitea.stateDir
config.services.weechat.root config.services.weechat.root
config.services.nginx.virtualHosts."www.kmein.de".root
"/var/lib/weechat" "/var/lib/weechat"
"/var/lib/codimd" "/var/lib/codimd"
]; ];
@@ -97,6 +95,12 @@ in {
group = "tinc.retiolum"; group = "tinc.retiolum";
}; };
restic.file = ../../secrets/restic.age; restic.file = ../../secrets/restic.age;
specus.file = ../../secrets/makanek-specus-privateKey.age;
};
services.specus = {
privateKeyFile = config.age.secrets.specus.path;
server.enable = true;
}; };
system.stateVersion = "20.03"; system.stateVersion = "20.03";
@@ -115,12 +119,6 @@ in {
defaults.email = kieran.email; defaults.email = kieran.email;
}; };
services.nginx.virtualHosts."www.kmein.de" = {
addSSL = true;
enableACME = true;
root = "/var/www/kmein.de";
};
environment.systemPackages = [ environment.systemPackages = [
pkgs.vim pkgs.vim
pkgs.git pkgs.git

View File

@@ -4,9 +4,9 @@ let
in { in {
services.gitea = { services.gitea = {
enable = true; enable = true;
rootUrl = domain;
appName = "code.kmein.de"; appName = "code.kmein.de";
settings = { settings = {
server.ROOT_URL = domain;
server.SSH_PORT = sshPort; server.SSH_PORT = sshPort;
service.DISABLE_REGISTRATION = true; service.DISABLE_REGISTRATION = true;
}; };

View File

@@ -16,6 +16,7 @@
extraModulePackages = []; extraModulePackages = [];
loader.grub = { loader.grub = {
enable = true; enable = true;
version = 2;
devices = ["/dev/sda"]; devices = ["/dev/sda"];
configurationLimit = 3; configurationLimit = 3;
}; };

View File

@@ -7,14 +7,17 @@
startAt = "7:00"; startAt = "7:00";
script = '' script = ''
greeting=$(echo "moin greeting=$(echo "moin
oi
noim
MOIN MOIN
moin: gib" | shuf -n1) OI
moi" | shuf -n1)
echo "$greeting" | ${config.nur.repos.mic92.ircsink}/bin/ircsink \ echo "$greeting" | ${config.nur.repos.mic92.ircsink}/bin/ircsink \
--nick "$greeting""bot" \ --nick "$greeting""bot" \
--server irc.hackint.org \ --server irc.hackint.org \
--port 6697 \ --port 6697 \
--secure \ --secure \
--target '#hsmr' >/dev/null 2>&1 --target '#hsmr-moin' >/dev/null 2>&1
''; '';
serviceConfig.DynamicUser = true; serviceConfig.DynamicUser = true;
}; };

View File

@@ -16,6 +16,17 @@ in {
http_port = 9444; http_port = 9444;
http_addr = "127.0.0.1"; http_addr = "127.0.0.1";
}; };
smtp = let
inherit (import ../../../lib/email.nix {inherit lib;}) cock;
address = builtins.split "@" cock.user;
in {
enabled = true;
from_address = cock.address;
password = "$__file{${config.age.secrets.email-password-cock.path}}";
user = cock.user;
host = cock.smtpSettings cock.smtp;
startTLS_policy = "MandatoryStartTLS";
};
dashboards.default_home_dashboard_path = toString ./grafana-dashboards/niveum.json; dashboards.default_home_dashboard_path = toString ./grafana-dashboards/niveum.json;
security = { security = {
admin_user = "admin"; admin_user = "admin";
@@ -212,7 +223,8 @@ in {
email_configs = let email_configs = let
inherit (import ../../../lib) kieran; inherit (import ../../../lib) kieran;
inherit (import ../../../lib/email.nix {inherit lib;}) cock; inherit (import ../../../lib/email.nix {inherit lib;}) cock;
cockConfig = { in [
{
send_resolved = true; send_resolved = true;
to = kieran.email; to = kieran.email;
from = cock.user; from = cock.user;
@@ -220,8 +232,7 @@ in {
auth_username = cock.user; auth_username = cock.user;
auth_identity = cock.user; auth_identity = cock.user;
auth_password = "$EMAIL_PASSWORD"; auth_password = "$EMAIL_PASSWORD";
}; }
in [
]; ];
} }
]; ];
@@ -247,12 +258,6 @@ in {
group = "prometheus"; group = "prometheus";
mode = "440"; mode = "440";
}; };
home-assistant-token = {
file = ../../../secrets/home-assistant-token.age;
owner = "prometheus";
group = "prometheus";
mode = "440";
};
}; };
services.prometheus.alertmanagers = [ services.prometheus.alertmanagers = [
@@ -263,9 +268,6 @@ in {
} }
]; ];
# otherwise bearer_token_file will fail
services.prometheus.checkConfig = "syntax-only";
services.prometheus.scrapeConfigs = [ services.prometheus.scrapeConfigs = [
{ {
job_name = "makanek"; job_name = "makanek";
@@ -304,7 +306,7 @@ in {
"code.kmein.de" "code.kmein.de"
"radio.kmein.de" "radio.kmein.de"
"tarot.kmein.de" "tarot.kmein.de"
"cloud.kmein.de" "cloud.xn--kiern-0qa.de"
"grafana.kmein.r" "grafana.kmein.r"
# "names.kmein.r" # "names.kmein.r"
"rrm.r" "rrm.r"
@@ -324,14 +326,6 @@ in {
} }
]; ];
} }
{
job_name = "home_assistant";
scrape_interval = "60s";
metrics_path = "/api/prometheus";
scheme = "http";
static_configs = [{targets = ["zaatar.r:8123"];}];
bearer_token_file = config.age.secrets.home-assistant-token.path;
}
{ {
job_name = "ful"; job_name = "ful";
static_configs = [ static_configs = [

View File

@@ -4,34 +4,9 @@
lib, lib,
... ...
}: let }: let
storageBoxMountPoint = "/mnt/storagebox"; inherit (import ../../lib) localAddresses;
in { in {
# https://docs.hetzner.com/de/robot/storage-box/access/access-samba-cifs/
fileSystems.${storageBoxMountPoint} = {
device = "//u359050.your-storagebox.de/backup";
fsType = "cifs";
options = [
"iocharset=utf8"
"rw"
"credentials=${config.age.secrets.hetzner-storagebox-credentials.path}"
"uid=nextcloud"
"gid=nextcloud"
"file_mode=0660"
"dir_mode=0770"
"seal"
"mfsymlinks" # nextcloud-setup wants to create symlinks on cifs
];
};
systemd.services.nextcloud-setup = {
wants = ["mnt-storagebox.mount" "postgresql.service"];
after = ["mnt-storagebox.mount" "postgresql.service"];
};
age.secrets = { age.secrets = {
hetzner-storagebox-credentials = {
file = ../../secrets/hetzner-storagebox-credentials.age;
};
nextcloud-password-database = { nextcloud-password-database = {
file = ../../secrets/nextcloud-password-database.age; file = ../../secrets/nextcloud-password-database.age;
owner = "nextcloud"; owner = "nextcloud";
@@ -48,7 +23,7 @@ in {
services.nextcloud = { services.nextcloud = {
enable = true; enable = true;
package = pkgs.nextcloud26; package = pkgs.nextcloud25;
https = true; https = true;
enableBrokenCiphersForSSE = false; enableBrokenCiphersForSSE = false;
@@ -58,9 +33,7 @@ in {
startAt = "05:00:00"; startAt = "05:00:00";
}; };
hostName = "cloud.kmein.de"; hostName = "cloud.xn--kiern-0qa.de";
datadir = "${storageBoxMountPoint}/nextcloud";
phpOptions."opcache.interned_strings_buffer" = "32"; # buffer size in MB phpOptions."opcache.interned_strings_buffer" = "32"; # buffer size in MB
@@ -80,8 +53,22 @@ in {
logLevel = 2; logLevel = 2;
extraOptions = { extraOptions = let
inherit (import ../../lib/email.nix {inherit lib;}) cock;
address = builtins.split "@" cock.user;
in {
defaultapp = "files"; defaultapp = "files";
mail_smtpmode = "smtp";
mail_sendmailmode = "smtp";
mail_smtphost = cock.smtp;
mail_smtpport = "587";
mail_from_address = builtins.elemAt address 0;
mail_domain = builtins.elemAt address 2;
mail_smtpsecure = "tls";
mail_smtpauthtype = "LOGIN";
mail_smtpauth = 1;
mail_smtpname = cock.user;
# mail_smtppassword = cock.password; # TODO how to do this?
}; };
}; };
@@ -109,8 +96,14 @@ in {
]; ];
}; };
services.nginx.virtualHosts."cloud.kmein.de" = { services.nginx.virtualHosts."cloud.xn--kiern-0qa.de" = {
enableACME = true; enableACME = true;
forceSSL = true; forceSSL = true;
}; };
# Ensure that postgres is running before running the setup
systemd.services."nextcloud-setup" = {
requires = ["postgresql.service"];
after = ["postgresql.service"];
};
} }

View File

@@ -1,29 +0,0 @@
{
pkgs,
config,
...
}: {
services.onlyoffice = {
enable = true;
port = 8111;
hostname = "onlyoffice.kmein.de";
jwtSecretFile = config.age.secrets.onlyoffice-key.path;
};
age.secrets.onlyoffice-key = {
file = ../../secrets/onlyoffice-jwt-key.age;
owner = "onlyoffice";
};
# otherwise this leads to nginx
# open() "/var/lib/onlyoffice/documentserver/App_Data/cache/files/data/conv_check_1138411943_docx/output.docx" failed (13: Permission denied)
# and mysterious 403 errors
system.activationScripts.onlyoffice-readable.text = ''
chmod a+x /var/lib/onlyoffice/documentserver/
'';
services.nginx.virtualHosts.${config.services.onlyoffice.hostname} = {
enableACME = true;
forceSSL = true;
};
}

View File

@@ -20,7 +20,7 @@ in {
script = '' script = ''
${tinc-graph}/bin/tinc-graph --geoip-file ${geo-ip-database-path} --network ${network} \ ${tinc-graph}/bin/tinc-graph --geoip-file ${geo-ip-database-path} --network ${network} \
| ${pkgs.coreutils}/bin/tee network.json \ | ${pkgs.coreutils}/bin/tee network.json \
| ${tinc-graph}/bin/tinc-midpoint > midpoint.json | ${tinc-graph}/bin/tinc-statistics > statistics.json
cp ${tinc-graph}/static/map.html map.html cp ${tinc-graph}/static/map.html map.html
cp ${tinc-graph}/static/map.html index.html cp ${tinc-graph}/static/map.html index.html

View File

@@ -154,7 +154,7 @@ in {
}; };
bots = { bots = {
buffer = "irc.retiolum.*"; buffer = "irc.retiolum.*";
tags = ["nick_gitlab" "nick_prometheus"]; tags = ["nick_gitlab"];
regex = "*"; regex = "*";
}; };
people = { people = {

View File

@@ -17,6 +17,7 @@
extraModulePackages = []; extraModulePackages = [];
loader.grub = { loader.grub = {
enable = true; enable = true;
version = 2;
efiSupport = true; efiSupport = true;
efiInstallAsRemovable = true; efiInstallAsRemovable = true;
device = "/dev/sda"; device = "/dev/sda";

View File

@@ -1,13 +1,52 @@
{pkgs, ...}: { {pkgs, ...}: let
services.xserver.displayManager.sessionCommands = let pulseaudioCard = "alsa_card.pci-0000_00_1b.0";
intern = "LVDS-1"; fingerprint = {
extern = "HDMI-1"; HDMI-1 = "00ffffffffffff004c2d320d48435030181a0103803c22782a5295a556549d250e5054bb8c00b30081c0810081809500a9c001010101023a801871382d40582c450056502100001e000000fd0032481e5111000a202020202020000000fc00433237463339300a2020202020000000ff00485451483630323132390a202001e402031af14690041f131203230907078301000066030c00100080011d00bc52d01e20b828554056502100001e8c0ad090204031200c4055005650210000188c0ad08a20e02d10103e9600565021000018000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061";
pulseaudioCard = "alsa_card.pci-0000_00_1b.0"; LVDS-1 = "00ffffffffffff0006af6c100000000000140104901c10780220e5925554922825505400000001010101010101010101010101010101121b56585000193030203600159c100000180000000f0000000000000000000000000020000000fe0041554f0a202020202020202020000000fe004231323558573031205630200a00ec";
# pulseaudioProfile = "output:hdmi-stereo-extra2+input:analog-stereo"; };
pulseaudioProfile = "alsa_output.pci-0000_00_1b.0.analog-stereo"; in {
in home-manager.users.me = {
toString (pkgs.writers.writeDash "hdmi-on" '' programs.autorandr = {
${pkgs.xorg.xrandr}/bin/xrandr --output ${intern} --primary --auto --output ${extern} --above ${intern} --auto enable = true;
${pkgs.pulseaudio}/bin/pactl set-card-profile ${pulseaudioCard} ${pulseaudioProfile} hooks.postswitch.wallpaper = "systemctl --user restart wallpaper";
''); profiles = {
single = {
hooks.postswitch = "${pkgs.pulseaudio}/bin/pactl set-card-profile ${pulseaudioCard} alsa_output.pci-0000_00_1b.0.analog-stereo";
fingerprint = {inherit (fingerprint) LVDS-1;};
config = {
HDMI-1.enable = false;
LVDS-1 = {
enable = true;
crtc = 0;
mode = "1366x768";
position = "277x1080";
primary = true;
rate = "60.10";
};
};
};
desk = {
hooks.postswitch = "${pkgs.pulseaudio}/bin/pactl set-card-profile ${pulseaudioCard} output:hdmi-stereo+input:analog-stereo";
fingerprint = {inherit (fingerprint) HDMI-1 LVDS-1;};
config = {
HDMI-1 = {
enable = true;
crtc = 1;
mode = "1920x1080";
position = "0x0";
primary = true;
rate = "60.00";
};
LVDS-1 = {
enable = true;
crtc = 0;
mode = "1366x768";
position = "277x1080";
rate = "60.10";
};
};
};
};
};
};
} }

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