1
0
mirror of https://github.com/kmein/niveum synced 2026-03-21 20:31:07 +01:00

1 Commits

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

View File

@@ -7,31 +7,8 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
strategy: strategy:
matrix: matrix:
system: [makanek,manakish,kabsa,zaatar,ful,fatteh] 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

@@ -7,6 +7,4 @@
> 2. Transf., _snow-white, snowy_ (mostly poet.): a similitudine sic: Corpore niveum candorem, aspectu igneum ardorem assequebatur, Auct. Her. 4, 33, 44: lacerti, Verg. A. 8, 387: lac, id. E. 2, 20: hanc si capite niveae agnae exorari judicas, Sen. Q. N. 2, 36: Briseis niveo colore, Hor. C. 2, 4, 3: vestis, Ov. M. 10, 432: candidior nivei folio, Galatea, ligustri, id. ib. 13, 789: dens, id. H. 18, 18: quā notam duxit niveus videri, Hor. C. 4, 2, 59: panis, Juv. 5, 70: flumen, _clear, pellucid_, Sen. Hippol. 504: undae, Mart. 7, 32, 11: tribuni, _clothed in white togas_, Calp. Ecl. 7, 29; so, Quirites, Juv. 10, 45. > 2. Transf., _snow-white, snowy_ (mostly poet.): a similitudine sic: Corpore niveum candorem, aspectu igneum ardorem assequebatur, Auct. Her. 4, 33, 44: lacerti, Verg. A. 8, 387: lac, id. E. 2, 20: hanc si capite niveae agnae exorari judicas, Sen. Q. N. 2, 36: Briseis niveo colore, Hor. C. 2, 4, 3: vestis, Ov. M. 10, 432: candidior nivei folio, Galatea, ligustri, id. ib. 13, 789: dens, id. H. 18, 18: quā notam duxit niveus videri, Hor. C. 4, 2, 59: panis, Juv. 5, 70: flumen, _clear, pellucid_, Sen. Hippol. 504: undae, Mart. 7, 32, 11: tribuni, _clothed in white togas_, Calp. Ecl. 7, 29; so, Quirites, Juv. 10, 45.
## Pressestimmen ## Pressestimmen
> das ist ja pure poesie —[riotbib](https://github.com/riotbib/) > das ist ja pure poesie —[xkey](https://github.com/riotbib)
> Deine Configs sind wunderschön <3 —[flxai](https://github.com/flxai/)

View File

@@ -1,102 +0,0 @@
{
pkgs,
niveumPackages,
lib,
...
}: let
darwin = lib.strings.hasSuffix "-darwin" pkgs.system;
in {
environment.systemPackages =
[
pkgs.htop
pkgs.w3m
pkgs.wget
# ARCHIVE TOOLS
pkgs.unzip
pkgs.unrar
pkgs.p7zip
pkgs.zip
# MONITORS
pkgs.iftop # interface bandwidth monitor
pkgs.lsof # list open files
# SHELL
pkgs.sqlite
pkgs.fd # better find
pkgs.tree
pkgs.parallel # for parallel, since moreutils shadows task spooler
pkgs.ripgrep # better grep
pkgs.rlwrap
pkgs.progress # display progress bars for pipes
pkgs.file # determine file type
pkgs.gdu # ncurses disk usage (ncdu is broken)
pkgs.rmlint # remove duplicate files
pkgs.jq # json toolkit
pkgs.jless # less(1) for json
pkgs.fq # toolkit for yaml, xml and binaries
pkgs.bc # calculator
pkgs.pari # gp -- better calculator
pkgs.ts
niveumPackages.vimv
niveumPackages.vg
niveumPackages.fkill
niveumPackages.cyberlocker-tools
niveumPackages.untilport
niveumPackages.kpaste
# HARDWARE
pkgs.pciutils # for lspci
]
++ lib.optionals (!darwin) [
pkgs.usbutils # for lsusb
pkgs.lshw # for lshw
pkgs.iotop # I/O load monitor
pkgs.psmisc # for killall, pstree
];
environment.shellAliases = let
take = pkgs.writers.writeDash "take" ''
mkdir "$1" && cd "$1"
'';
cdt = pkgs.writers.writeDash "cdt" ''
cd "$(mktemp -d)"
pwd
'';
wcd = pkgs.writers.writeDash "wcd" ''
cd "$(readlink "$(${pkgs.which}/bin/which --skip-alias "$1")" | xargs dirname)/.."
'';
where = pkgs.writers.writeDash "where" ''
readlink "$(${pkgs.which}/bin/which --skip-alias "$1")" | xargs dirname
'';
in
{
nixi = "nix repl '<nixpkgs>'";
take = "source ${take}";
wcd = "source ${wcd}";
where = "source ${where}";
# temporary files and directories
cdt = "source ${cdt}";
vit = "$EDITOR $(mktemp)";
# file safety
mv = "${pkgs.coreutils}/bin/mv --interactive";
rm = "${pkgs.coreutils}/bin/rm --interactive";
cp = "${pkgs.coreutils}/bin/cp --interactive";
# colours
cat = "${pkgs.bat}/bin/bat --theme=ansi --style=plain";
l = "${pkgs.coreutils}/bin/ls --color=auto --time-style=long-iso --almost-all";
ls = "${pkgs.coreutils}/bin/ls --color=auto --time-style=long-iso";
ll = "${pkgs.coreutils}/bin/ls --color=auto --time-style=long-iso -l";
la = "${pkgs.coreutils}/bin/ls --color=auto --time-style=long-iso --almost-all -l";
}
// (
if darwin
then {}
else {
"ß" = "${pkgs.util-linux}/bin/setsid";
ip = "${pkgs.iproute2}/bin/ip -c";
# systemd
s = "${pkgs.systemd}/bin/systemctl";
us = "${pkgs.systemd}/bin/systemctl --user";
j = "${pkgs.systemd}/bin/journalctl";
uj = "${pkgs.systemd}/bin/journalctl --user";
}
);
}

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,17 +24,45 @@ 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 = {
accounts.email.maildirBasePath = "${config.users.users.me.home}/state/Maildir";
services.mbsync = { services.mbsync = {
enable = true; enable = true;
frequency = "daily"; frequency = "daily";
@@ -71,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 {
@@ -89,42 +211,14 @@ in {
aliases = ["kmein@posteo.de"]; aliases = ["kmein@posteo.de"];
userName = address; userName = address;
imap.host = "posteo.de"; imap.host = "posteo.de";
imap.port = 993;
imap.tls.enable = true;
smtp.host = imap.host; smtp.host = imap.host;
smtp.port = 465;
smtp.tls.enable = true;
primary = true; primary = true;
passwordCommand = "${pkgs.coreutils}/bin/cat ${config.age.secrets.email-password-posteo.path}"; passwordCommand = "${pkgs.coreutils}/bin/cat ${config.age.secrets.email-password-posteo.path}";
himalaya = { # himalaya = { enable = true; backend = "imap"; sender = "smtp"; };
enable = true;
backend = "imap";
sender = "smtp";
};
}; };
}; };
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;
@@ -257,19 +351,19 @@ 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.aerc}/libexec/aerc/filters/colorize"; "text/plain" = "${pkgs.gawk}/bin/awk -f ${pkgs.aerc}/share/aerc/filters/colorize";
"text/calendar" = "${pkgs.aerc}/libexec/aerc/filters/calendar"; "text/calendar" = "${pkgs.gawk}/bin/awk -f ${pkgs.aerc}/share/aerc/filters/calendar";
"text/html" = "${pkgs.aerc}/libexec/aerc/filters/html"; # Requires w3m, dante "text/html" = "${pkgs.aerc}/share/aerc/filters/html"; # Requires w3m, dante
# "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.aerc}/libexec/aerc/filters/colorize"; "message/delivery-status" = "${pkgs.gawk}/bin/awk -f ${pkgs.aerc}/share/aerc/filters/colorize";
"message/rfc822" = "${pkgs.aerc}/libexec/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";
}; };
openers = let openers = let

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

@@ -14,17 +14,19 @@ in {
}; };
passwordFile = config.age.secrets.restic.path; passwordFile = config.age.secrets.restic.path;
extraBackupArgs = [ extraBackupArgs = [
"--exclude=/home/kfm/sync/src/nixpkgs/.git" "--exclude=/home/kfm/projects/nixpkgs/.git"
"--exclude=node_modules" "--exclude=node_modules"
"--exclude=.parcel-cache"
]; ];
paths = [ paths = [
"/home/kfm/sync" "/home/kfm/work"
"/home/kfm/state" "/home/kfm/projects"
"/home/kfm/notes"
"/home/kfm/Maildir"
"/home/kfm/cloud" "/home/kfm/cloud"
"/home/kfm/mobile"
"/home/kfm/.gnupg" "/home/kfm/.gnupg"
"/home/kfm/.ssh" "/home/kfm/.ssh"
"/mnt/sd-card/music"
"/mnt/sd-card/Books"
]; ];
}; };

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
''; '';

14
configs/beets.nix Normal file
View File

@@ -0,0 +1,14 @@
{
lib,
pkgs,
...
}: {
environment.systemPackages = [pkgs.beets];
home-manager.users.me.xdg.configFile = {
"beets/config.yaml".source = (pkgs.formats.yaml {}).generate "config.yaml" {
directory = "~/cloud/syncthing/music";
library = "~/cloud/syncthing/common/music.db";
plugins = toString ["fetchart" "lastgenre"];
};
};
}

View File

@@ -1,9 +1,12 @@
{pkgs, ...}: { {
pkgs,
lib,
...
}: {
hardware.bluetooth = { hardware.bluetooth = {
enable = true; enable = true;
settings.general = { settings.General.Enable =
enable = "Source,Sink,Media,Socket"; lib.concatStringsSep "," ["Source" "Sink" "Media" "Socket"];
};
}; };
services.blueman.enable = true; services.blueman.enable = true;

View File

@@ -2,24 +2,27 @@
pkgs, pkgs,
config, config,
... ...
}: let }: {
inherit (import ../lib) tmpfilesConfig; programs.chromium = {
in { enable = true;
environment.systemPackages = [ extensions = [
(pkgs.writers.writeDashBin "cro" '' # "ihlenndgcmojhcghmfjfneahoeklbjjh" # cVim
${pkgs.chromium}/bin/chromium \ # "fpnmgdkabkmnadcjpehmlllkndpkmiak" # Wayback Machine
--disable-sync \ "cjpalhdlnbpafiamejdnhcphjbkeiagm" # uBlock Origin
--no-default-browser-check \ "pjjgklgkfeoeiebjogplpnibpfnffkng" # undistracted
--no-first-run \ "nhdogjmejiglipccpnnnanhbledajbpd" # vuejs devtools
--user-data-dir="$(mktemp -d)" \ "eimadpbcbfnmbkopoojfekhnkhdbieeh" # dark reader
--incognito \ ];
"$@" };
'')
];
home-manager.users.me = { home-manager.users.me = {
programs.firefox = { programs.firefox = {
enable = true; enable = true;
package = pkgs.firefox.override {
cfg = {
enableTridactylNative = true;
};
};
profiles = let profiles = let
defaultSettings = { defaultSettings = {
"beacon.enabled" = false; "beacon.enabled" = false;
@@ -88,5 +91,7 @@ in {
}; };
}; };
environment.variables.BROWSER = "firefox"; environment.systemPackages = [pkgs.brave];
environment.variables.BROWSER = "brave";
} }

View File

@@ -6,27 +6,41 @@
}: let }: let
inherit (import ../lib) tmpfilesConfig; inherit (import ../lib) tmpfilesConfig;
in { in {
systemd.user.tmpfiles.users.me.rules = map tmpfilesConfig [ systemd.tmpfiles.rules = map tmpfilesConfig [
{ {
type = "d"; type = "L+";
user = config.users.users.me.name;
group = "users";
mode = "0755"; mode = "0755";
age = "7d"; argument = "${config.users.users.me.home}/cloud/Seafile/Uni";
path = "${config.users.users.me.home}/sync/Downloads"; 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";
} }
]; ];
services.gnome.gnome-keyring.enable = true;
security.pam.services.lightdm.enableGnomeKeyring = true;
home-manager.users.me = { home-manager.users.me = {
services.gnome-keyring.enable = false;
services.nextcloud-client = { services.nextcloud-client = {
enable = true; enable = false;
startInBackground = true; startInBackground = true;
}; };
systemd.user.services.nextcloud-client = {
Unit = {
Wants = ["gnome-keyring.service"];
After = ["gnome-keyring.service"];
};
};
}; };
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";
@@ -34,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 ''
@@ -52,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"
'') '')
@@ -89,7 +103,17 @@ in {
mode = "400"; mode = "400";
}; };
services.syncthing = { fileSystems."/media/moodle" = {
device = "zaatar.r:/moodle";
fsType = "nfs";
options = [
"x-systemd.idle-timeout=600"
"noauto"
"x-systemd.automount"
];
};
services.syncthing = rec {
enable = true; enable = true;
user = "kfm"; user = "kfm";
openDefaultPorts = true; openDefaultPorts = true;
@@ -97,22 +121,16 @@ in {
dataDir = "/home/kfm/.config/syncthing"; dataDir = "/home/kfm/.config/syncthing";
cert = config.age.secrets.syncthing-cert.path; cert = config.age.secrets.syncthing-cert.path;
key = config.age.secrets.syncthing-key.path; key = config.age.secrets.syncthing-key.path;
settings = { inherit ((import ../lib).syncthing) devices;
inherit ((import ../lib).syncthing) devices; folders = let
folders = { cloud-dir = "${config.users.users.me.home}/cloud";
"${config.users.users.me.home}/sync" = { in {
devices = ["kabsa" "manakish" "fatteh"]; "${cloud-dir}/syncthing/common".devices = ["kabsa" "manakish"];
label = "sync"; "${cloud-dir}/syncthing/library".devices = ["kabsa" "manakish" "heym"];
versioning.type = "trashcan"; "${cloud-dir}/syncthing/mundoiu".devices = ["kabsa" "manakish" "heym"];
versioning.params.cleanoutDays = 100; "${cloud-dir}/syncthing/music" = {
}; devices = ["kabsa" "manakish" "heym" "zaatar"];
"${config.users.users.me.home}/mobile" = { id = "music";
devices = ["kabsa" "manakish" "fatteh" "kibbeh"];
id = "mobile";
label = "mobile";
versioning.type = "trashcan";
versioning.params.cleanoutDays = 100;
};
}; };
}; };
}; };

View File

@@ -7,11 +7,12 @@
... ...
}: let }: let
inherit (lib.strings) makeBinPath; inherit (lib.strings) makeBinPath;
inherit (import ../lib) localAddresses kieran remoteDir; inherit (import ../lib) localAddresses kieran;
defaultApplications = (import ../lib).defaultApplications {inherit pkgs;}; defaultApplications = (import ../lib).defaultApplications {inherit pkgs;};
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"];
@@ -25,14 +26,12 @@ in {
}; };
permittedInsecurePackages = [ permittedInsecurePackages = [
"qtwebkit-5.212.0-alpha4" "qtwebkit-5.212.0-alpha4"
"zotero-6.0.26"
"electron-25.9.0"
]; ];
}; };
}; };
} }
{ {
boot.tmp.cleanOnBoot = true; boot.cleanTmpDir = true;
boot.loader.timeout = 1; boot.loader.timeout = 1;
} }
{ {
@@ -57,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;
@@ -83,31 +70,58 @@ in {
users.users.me = { users.users.me = {
name = "kfm"; name = "kfm";
description = kieran.name; description = kieran.name;
hashedPasswordFile = config.age.secrets.kfm-password.path; hashedPassword = "$6$w9hXyGFl/.IZBXk$5OiWzS1G.5hImhh1YQmZiCXYNAJhi3X6Y3uSLupJNYYXPLMsQpx2fwF4Xr2uYzGMV8Foqh8TgUavx1APD9rcb/";
isNormalUser = true; isNormalUser = true;
uid = 1000; uid = 1000;
extraGroups = ["pipewire" "audio"];
};
age.secrets = {
kfm-password.file = ../secrets/kfm-password.age;
}; };
home-manager.users.me.xdg.enable = true; home-manager.users.me.xdg.enable = true;
} }
{ {
environment.interactiveShellInit = "export PATH=$PATH"; environment.interactiveShellInit = "export PATH=$PATH:$HOME/projects/niveum";
environment.shellAliases = let environment.shellAliases = let
wcd = pkgs.writers.writeDash "wcd" ''
cd "$(readlink "$(${pkgs.which}/bin/which --skip-alias "$1")" | xargs dirname)/.."
'';
where = pkgs.writers.writeDash "where" ''
readlink "$(${pkgs.which}/bin/which --skip-alias "$1")" | xargs dirname
'';
take = pkgs.writers.writeDash "take" ''
mkdir "$1" && cd "$1"
'';
cdt = pkgs.writers.writeDash "cdt" ''
cd "$(mktemp -d)"
pwd
'';
swallow = command: "${niveumPackages.swallow}/bin/swallow ${command}"; swallow = command: "${niveumPackages.swallow}/bin/swallow ${command}";
in { in {
o = "${pkgs.xdg-utils}/bin/xdg-open"; "ß" = "${pkgs.util-linux}/bin/setsid";
cat = "${pkgs.bat}/bin/bat --style=plain";
chromium-incognito = "chromium --user-data-dir=$(mktemp -d /tmp/chr.XXXXXX) --no-first-run --incognito";
cp = "cp --interactive";
ip = "${pkgs.iproute2}/bin/ip -c";
l = "ls --color=auto --time-style=long-iso --almost-all";
ls = "ls --color=auto --time-style=long-iso";
ll = "ls --color=auto --time-style=long-iso -l";
la = "ls --color=auto --time-style=long-iso --almost-all -l";
mv = "mv --interactive";
nixi = "nix repl '<nixpkgs>'";
ns = "nix-shell --run zsh"; ns = "nix-shell --run zsh";
o = "${pkgs.xdg-utils}/bin/xdg-open";
pbcopy = "${pkgs.xclip}/bin/xclip -selection clipboard -in"; pbcopy = "${pkgs.xclip}/bin/xclip -selection clipboard -in";
pbpaste = "${pkgs.xclip}/bin/xclip -selection clipboard -out"; pbpaste = "${pkgs.xclip}/bin/xclip -selection clipboard -out";
rm = "rm --interactive";
s = "${pkgs.systemd}/bin/systemctl";
take = "source ${take}";
cdt = "source ${cdt}";
vit = "$EDITOR $(mktemp)";
tmux = "${pkgs.tmux}/bin/tmux -2"; tmux = "${pkgs.tmux}/bin/tmux -2";
sxiv = swallow "${pkgs.nsxiv}/bin/nsxiv"; sxiv = swallow "${pkgs.nsxiv}/bin/nsxiv";
zathura = swallow "${pkgs.zathura}/bin/zathura"; zathura = swallow "${pkgs.zathura}/bin/zathura";
us = "${pkgs.systemd}/bin/systemctl --user";
wcd = "source ${wcd}";
im = "${pkgs.openssh}/bin/ssh weechat@makanek -t tmux attach-session -t IM"; im = "${pkgs.openssh}/bin/ssh weechat@makanek -t tmux attach-session -t IM";
where = "source ${where}";
yt = "${pkgs.yt-dlp}/bin/yt-dlp --add-metadata -ic"; # Download video link yt = "${pkgs.yt-dlp}/bin/yt-dlp --add-metadata -ic"; # Download video link
yta = "${pkgs.yt-dlp}/bin/yt-dlp --add-metadata -xic"; # Download with audio yta = "${pkgs.yt-dlp}/bin/yt-dlp --add-metadata -xic"; # Download with audio
}; };
@@ -207,17 +221,15 @@ in {
}; };
}; };
} }
./android.nix
./admin-essentials.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
./khal.nix ./khal.nix
./browser.nix ./chromium.nix
./clipboard.nix ./clipboard.nix
./cloud.nix ./cloud.nix
./direnv.nix ./direnv.nix
@@ -230,12 +242,8 @@ 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
{home-manager.users.me.home.file.".XCompose".source = ../lib/keyboards/XCompose;}
./lb.nix ./lb.nix
./mpv.nix ./mpv.nix
./mime.nix ./mime.nix
@@ -247,42 +255,27 @@ in {
./picom.nix ./picom.nix
./stardict.nix ./stardict.nix
./polkit.nix ./polkit.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
./wallpaper.nix
./zsh.nix ./zsh.nix
./tor.nix ./tor.nix
./stw-berlin.nix
./mastodon-bot.nix ./mastodon-bot.nix
{
fileSystems."${remoteDir}/fritz" = {
device = "//192.168.178.1/FRITZ.NAS/Backup";
fsType = "cifs";
options = [
"username=ftpuser"
"password=ftppassword"
"noauto"
"nounix"
"rw"
# "noserverino" # ref https://askubuntu.com/a/1265165
"uid=${toString config.users.users.me.uid}"
"gid=${toString config.users.groups.users.gid}"
"x-systemd.automount"
"x-systemd.device-timeout=1"
"x-systemd.idle-timeout=1min"
];
};
}
]; ];
} }

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-nP0y4ILt+0mlkDRdCNSeO2Gequ8wyix/qQdmujTNw3Y="; sha256 = "1jd0qa6shh9pqqyig2w43m9l9rv1i50l73jzkhb6g6mqxbhb1mip";
stripRoot = false; stripRoot = false;
}; };
junicode2 = zip-font "JunicodeTwo" { junicode2 = zip-font "JunicodeTwo" {
@@ -50,15 +50,11 @@
url = "http://c.krebsco.de/EgyptianText-v1.0-beta.ttf"; url = "http://c.krebsco.de/EgyptianText-v1.0-beta.ttf";
sha256 = "0cfjbk7xxnxhlp6v922psm5j1xzrv6wfk226ji2wz2yfrnkbcbsv"; sha256 = "0cfjbk7xxnxhlp6v922psm5j1xzrv6wfk226ji2wz2yfrnkbcbsv";
}; };
koineGreek = simple-ttf "KoineGreek.ttf" {
url = "https://github.com/Center-for-New-Testament-Restoration/font/raw/af83eed50105344edaa5e5eddaf87696e271468c/KoineGreek.ttf";
hash = "sha256-YtC+nj7+Jl8k00rqAAqySYc8iTAOL7PixXc+LfSmnS0=";
};
in { in {
fonts = { fonts = {
enableDefaultPackages = true; enableDefaultFonts = true;
fontDir.enable = true; fontDir.enable = true;
packages = with pkgs; [ fonts = with pkgs; [
alegreya alegreya
alegreya-sans alegreya-sans
amiri amiri
@@ -72,7 +68,6 @@ in {
corefonts corefonts
crimson crimson
eb-garamond eb-garamond
ipaexfont
jsesh jsesh
egyptianHiero egyptianHiero
egyptianText egyptianText
@@ -80,13 +75,12 @@ in {
etBook etBook
newGardiner newGardiner
junicode2 junicode2
koineGreek
ezra-sil ezra-sil
fira fira
font-awesome font-awesome
galatia-sil galatia-sil
gentium gentium
# niveumPackages.gfs-fonts niveumPackages.gfs-fonts
gyre-fonts gyre-fonts
ibm-plex ibm-plex
jetbrains-mono jetbrains-mono
@@ -114,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 Hebrew" "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,142 +0,0 @@
{
config,
pkgs,
lib,
...
}: let
username = "meinhak99";
inherit (import ../lib/email.nix) defaults pronouns;
inherit (import ../lib) remoteDir;
fu-defaults = rec {
imap.host = "mail.zedat.fu-berlin.de";
imap.port = 993;
imap.tls.enable = true;
smtp.host = imap.host;
smtp.port = 465;
smtp.tls.enable = true;
folders.drafts = "Entwürfe";
folders.sent = "Gesendet";
folders.trash = "Papierkorb";
};
in {
home-manager.users.me = {
programs.ssh = {
matchBlocks = {
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 106, 14195 Berlin
'';
};
himalaya = {
enable = true;
backend = "imap";
sender = "smtp";
};
});
};
};
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";
};
fu-sftp-key = {
file = ../secrets/fu-sftp-key.age;
owner = "root";
group = "root";
mode = "400";
};
};
# if it fails with "connection reset by peer" run `sudo sshfs ... ... -o ...` manually
# it needs to say 'yes' to the server's fingerprint
system.fsPackages = [ pkgs.sshfs ];
# https://www.zedat.fu-berlin.de/tip4u_157.pdf
fileSystems = let
fu-berlin-cifs-options = [
"uid=${toString config.users.users.me.uid}"
"gid=${toString config.users.groups.users.gid}"
"rw"
"nounix"
"domain=fu-berlin"
"noauto"
"x-systemd.automount"
"x-systemd.device-timeout=1"
"x-systemd.idle-timeout=1min"
];
firstCharacter = lib.strings.substring 0 1;
home-directory-mount = user: {
"${remoteDir}/fu/${user}/home" = {
device = "${user}@login.zedat.fu-berlin.de:/home/${firstCharacter user}/${user}";
fsType = "sshfs";
options = [
"allow_other"
"_netdev"
"x-systemd.automount"
"reconnect"
"ServerAliveInterval=15"
"IdentityFile=${config.age.secrets.fu-sftp-key.path}"
];
};
};
in {
"${remoteDir}/fu/zodiac" = {
device = "//trove.storage.fu-berlin.de/GESCHKULT";
fsType = "cifs";
options =
fu-berlin-cifs-options
++ [
"credentials=${config.age.secrets.cifs-credentials-zodiac.path}"
];
};
} // home-directory-mount "meinhak99"
// home-directory-mount "xm7234fu";
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

@@ -1,5 +1,7 @@
{ {
pkgs, pkgs,
config,
lib,
inputs, inputs,
... ...
}: let }: let
@@ -7,17 +9,17 @@
in { in {
environment.systemPackages = [ environment.systemPackages = [
pkgs.mr pkgs.mr
pkgs.gitFull pkgs.git
pkgs.git-crypt pkgs.git-crypt
pkgs.gitflow pkgs.gitAndTools.gitflow
pkgs.gh pkgs.gitAndTools.gh
pkgs.git-extras pkgs.gitAndTools.git-extras
# pkgs.git-trim pkgs.gitAndTools.git-trim
pkgs.git-absorb pkgs.gitAndTools.git-absorb
pkgs.gitstats pkgs.gitstats
pkgs.patch pkgs.patch
pkgs.patchutils pkgs.patchutils
inputs.self.packages.${pkgs.system}.git-preview inputs.self.packages.x86_64-linux.git-preview
]; ];
environment.shellAliases = { environment.shellAliases = {
@@ -28,7 +30,7 @@ in {
home-manager.users.me = { home-manager.users.me = {
programs.git = { programs.git = {
enable = true; enable = true;
package = pkgs.gitFull; package = pkgs.gitAndTools.gitFull;
userName = kieran.name; userName = kieran.name;
userEmail = kieran.email; userEmail = kieran.email;
aliases = { aliases = {
@@ -49,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

@@ -1,5 +0,0 @@
{
services.xserver.enable = true;
services.xserver.displayManager.lightdm.enable = true;
services.xserver.desktopManager.gnome.enable = true;
}

View File

@@ -1,15 +1,28 @@
{ {
config,
pkgs, pkgs,
... ...
}: let }: {
ledgerDirectory = "/home/kfm/sync/src/ledger";
hora = pkgs.callPackage ../packages/hora.nix { timeLedger = "${ledgerDirectory}/time.timeclock"; };
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 [
hora
pkgs.hledger pkgs.hledger
(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)"
'')
(pkgs.writers.writeDashBin "hora" ''
${pkgs.hledger}/bin/hledger -f "${timeLedger}" "$@"
'')
(pkgs.writers.writeDashBin "hora-filli" ''
${pkgs.hledger}/bin/hledger -f "${timeLedger}" register fillidefilla -O csv \
-b "$(date -d "$(date +%Y-%m)-20 last month" +%Y-%m-%d)" \
-e "$(date -d "$(date +%Y-%m)-20" +%Y-%m-%d)" \
| sed 's/(fillidefilla:\(.*\))/\1/g' \
| xsv select date,amount,total,account,description
'')
(pkgs.writers.writeDashBin "hledger-git" '' (pkgs.writers.writeDashBin "hledger-git" ''
if [ "$1" = entry ]; then if [ "$1" = entry ]; then
${pkgs.hledger}/bin/hledger balance -V > "${ledgerDirectory}/balance.txt" ${pkgs.hledger}/bin/hledger balance -V > "${ledgerDirectory}/balance.txt"

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,14 +4,11 @@
lib, lib,
... ...
}: let }: let
inherit (import ../lib/email.nix) defaults pronouns; inherit (lib.strings) fileContents;
inherit (import ../lib) remoteDir; inherit (import ../lib) sshPort;
hu-defaults = { eduroam = {
imap.host = "mailbox.cms.hu-berlin.de"; identity = fileContents <secrets/eduroam/identity>;
imap.port = 993; password = fileContents <secrets/eduroam/password>;
smtp.host = "mailhost.cms.hu-berlin.de";
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}"
@@ -20,95 +17,33 @@
"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"
]; ];
in { in {
fileSystems."${remoteDir}/hu/germpro2" = { fileSystems."/media/hu-berlin/germpro2" = {
device = "//hugerm31c.user.hu-berlin.de/germpro2/ling"; device = "//hugerm31c.user.hu-berlin.de/germpro2/ling";
fsType = "cifs"; fsType = "cifs";
options = hu-berlin-cifs-options; options = hu-berlin-cifs-options;
}; };
fileSystems."${remoteDir}/hu/meinhaki/home" = { fileSystems."/media/hu-berlin/germhome" = {
device = "//hugerm31c.user.hu-berlin.de/germhome/ling/meinhaki"; device = "//hugerm31c.user.hu-berlin.de/germhome/ling/meinhaki";
fsType = "cifs"; fsType = "cifs";
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-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" = {
"alew.hu-berlin.de" = { user = "centos";
user = "centos"; hostname = "141.20.187.219";
hostname = "141.20.187.219";
};
}; };
}; };
accounts.email.accounts = rec {
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);
himalaya = {
enable = true;
backend = "imap";
sender = "smtp";
};
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";
himalaya = {
enable = true;
backend = "imap";
sender = "smtp";
};
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 = [
@@ -128,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,14 +5,7 @@
niveumPackages, niveumPackages,
... ...
}: let }: let
dashboard = pkgs.writers.writeDashBin "dashboard" '' inherit (import ../lib) defaultApplications colours;
${pkgs.alacritty}/bin/alacritty --class wtf --command ${pkgs.writers.writeDash "dashboard-inner" ''
export WTF_OWM_API_KEY="$(cat ${config.age.secrets.openweathermap-api-key.path})"
export WTF_MINIFLUX_API_KEY="$(cat ${config.age.secrets.miniflux-api-token.path})"
exec ${niveumPackages.dashboard}/bin/dashboard
''}
'';
inherit (import ../lib) defaultApplications;
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 = {
@@ -57,14 +50,15 @@
emojai = pkgs.writers.writeDash "emojai" '' emojai = pkgs.writers.writeDash "emojai" ''
${pkgs.curl}/bin/curl https://www.emojai.app/api/generate -X POST -H 'Content-Type: application/json' --data-raw "$(${pkgs.jq}/bin/jq -sR '{emoji:.}')" | ${pkgs.jq}/bin/jq -r .result ${pkgs.curl}/bin/curl https://www.emojai.app/api/generate -X POST -H 'Content-Type: application/json' --data-raw "$(${pkgs.jq}/bin/jq -sR '{emoji:.}')" | ${pkgs.jq}/bin/jq -r .result
''; '';
"gpt-3.5" = pkgs.writers.writeDash "gpt" ''
${niveumPackages.gpt35}/bin/gpt
'';
gpt-4 = pkgs.writers.writeDash "gpt" ''
${niveumPackages.gpt4}/bin/gpt
'';
}; };
}; };
new-workspace = pkgs.writers.writeDash "new-workspace" ''
i3-msg workspace $(($(i3-msg -t get_workspaces | tr , '\n' | grep '"num":' | cut -d : -f 2 | sort -rn | head -1) + 1))
'';
move-to-new-workspace = pkgs.writers.writeDash "new-workspace" ''
i3-msg move container to workspace $(($(i3-msg -t get_workspaces | tr , '\n' | grep '"num":' | cut -d : -f 2 | sort -rn | head -1) + 1))
'';
in { in {
age.secrets = { age.secrets = {
github-token-i3status-rust = { github-token-i3status-rust = {
@@ -79,23 +73,14 @@ in {
group = config.users.users.me.group; group = config.users.users.me.group;
mode = "400"; mode = "400";
}; };
miniflux-api-token = {
file = ../secrets/miniflux-api-token.age;
owner = config.users.users.me.name;
group = config.users.users.me.group;
mode = "400";
};
}; };
programs.slock.enable = true; programs.slock.enable = true;
environment.systemPackages = [dashboard];
services.xserver = { services.xserver = {
displayManager.defaultSession = "none+i3"; displayManager.defaultSession = "none+i3";
windowManager.i3 = { windowManager.i3 = {
enable = true; enable = true;
package = pkgs.i3-gaps;
}; };
}; };
@@ -114,84 +99,129 @@ in {
''; '';
}; };
home-manager.users.me = let home-manager.users.me.xsession.windowManager.i3 = let
modifier = "Mod4"; modifier = "Mod4";
infoWorkspace = ""; in {
messageWorkspace = ""; enable = true;
modes.resize = { extraConfig = ''
"Escape" = ''mode "default"''; bindsym --release ${modifier}+Shift+w exec /run/wrappers/bin/slock
"Return" = ''mode "default"''; '';
"h" = "resize shrink width 10 px or 5 ppt"; config = rec {
"j" = "resize grow height 10 px or 5 ppt"; fonts = {
"k" = "resize shrink height 10 px or 5 ppt"; names = ["Sans"];
"l" = "resize grow width 10 px or 5 ppt"; size = 10.0;
}; };
gaps.inner = 4; inherit modifier;
floating = { window = {
titlebar = false; titlebar = false;
border = 1; border = 1;
}; hideEdgeBorders = "smart";
bars = [ commands = [
(config.home-manager.users.me.lib.stylix.i3.bar {
// rec { criteria = {class = "floating";};
workspaceButtons = true; command = "floating enable";
mode = "hide"; # "dock"; }
{
criteria = {class = "fzfmenu";};
command = "floating enable";
}
{
criteria = {class = ".*";};
command = "border pixel 2";
}
{
criteria = {class = "mpv";};
command = lib.strings.concatStringsSep ", " [
"floating enable"
"sticky enable"
"fullscreen disable"
"resize set 640 480"
"move position mouse"
];
}
];
};
floating = {
titlebar = false;
border = 1;
};
colors = let
scheme = {
background = colours.background;
text = colours.foreground;
};
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"; 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" '' statusCommand = toString (pkgs.writers.writeDash "i3status-rust" ''
export I3RS_GITHUB_TOKEN="$(cat ${config.age.secrets.github-token-i3status-rust.path})" export I3RS_GITHUB_TOKEN="$(cat ${config.age.secrets.github-token-i3status-rust.path})"
export OPENWEATHERMAP_API_KEY="$(cat ${config.age.secrets.openweathermap-api-key.path})" export OPENWEATHERMAP_API_KEY="$(cat ${config.age.secrets.openweathermap-api-key.path})"
exec ${config.home-manager.users.me.programs.i3status-rust.package}/bin/i3status-rs ${config.home-manager.users.me.home.homeDirectory}/.config/i3status-rust/config-${position}.toml ${pkgs.i3status-rust}/bin/i3status-rs ${
''); (pkgs.formats.toml {}).generate "i3status-rust.toml" (import ../lib/i3status-rust.nix {
fonts = { inherit (config.niveum) batteryName wirelessInterface;
names = ["${config.stylix.fonts.sansSerif.name}" "FontAwesome 6 Free"]; inherit (config.home-manager.users.me.accounts.email) accounts;
size = config.stylix.fonts.sizes.desktop * 0.8; inherit colours;
}; inherit pkgs;
}) })
]; }'');
window = {
titlebar = false;
border = 2;
hideEdgeBorders = "smart";
commands = [
{
criteria = {class = "floating";};
command = "floating enable";
}
{
criteria = {class = "fzfmenu";};
command = "floating enable";
}
{
criteria = {class = ".*";};
command = "border pixel 2";
}
{
criteria = {class = "mpv";};
command = lib.strings.concatStringsSep ", " [
"floating enable"
"sticky enable"
"fullscreen disable"
"resize set 640 480"
"move position mouse"
];
} }
]; ];
}; modes.resize = {
colors = let "Escape" = ''mode "default"'';
background = config.lib.stylix.colors.withHashtag.base00; "Return" = ''mode "default"'';
in { "h" = "resize shrink width 10 px or 5 ppt";
unfocused = { "j" = "resize grow height 10 px or 5 ppt";
border = lib.mkForce background; "k" = "resize shrink height 10 px or 5 ppt";
childBorder = lib.mkForce background; "l" = "resize grow width 10 px or 5 ppt";
}; };
}; keybindings = {
keybindings =
lib.listToAttrs (map (x: lib.nameValuePair "${modifier}+Shift+${toString x}" "move container to workspace ${toString x}") (lib.range 1 9))
// lib.listToAttrs (map (x: lib.nameValuePair "${modifier}+${toString x}" "workspace ${toString x}") (lib.range 1 9))
// {
"${modifier}+i" = "workspace ${infoWorkspace}";
"${modifier}+m" = "workspace ${messageWorkspace}";
"${modifier}+Shift+h" = "move left 25 px"; "${modifier}+Shift+h" = "move left 25 px";
"${modifier}+Shift+j" = "move down 25 px"; "${modifier}+Shift+j" = "move down 25 px";
"${modifier}+Shift+k" = "move up 25 px"; "${modifier}+Shift+k" = "move up 25 px";
@@ -201,10 +231,12 @@ in {
"${modifier}+k" = "focus up"; "${modifier}+k" = "focus up";
"${modifier}+l" = "focus right"; "${modifier}+l" = "focus right";
# "${modifier}+Shift+b" = "move container to workspace prev"; "${modifier}+Shift+b" = "move window to workspace prev";
# "${modifier}+Shift+n" = "move container to workspace next"; "${modifier}+Shift+n" = "move window to workspace next";
# "${modifier}+b" = "workspace prev"; "${modifier}+Shift+x" = "exec ${move-to-new-workspace}";
# "${modifier}+n" = "workspace next"; "${modifier}+b" = "workspace prev";
"${modifier}+n" = "workspace next";
"${modifier}+x" = "exec ${new-workspace}";
"${modifier}+Shift+c" = "reload"; "${modifier}+Shift+c" = "reload";
"${modifier}+Shift+q" = "kill"; "${modifier}+Shift+q" = "kill";
@@ -213,9 +245,8 @@ in {
"${modifier}+z" = "sticky toggle"; "${modifier}+z" = "sticky toggle";
"${modifier}+Shift+z" = "floating toggle"; "${modifier}+Shift+z" = "floating toggle";
"${modifier}+s" = "scratchpad show";
"${modifier}+Shift+s" = "move scratchpad"; "${modifier}+Shift+s" = "move scratchpad";
"${modifier}+s" = ''[class="^(?i)(?!obsidian).*"] scratchpad show'';
"${modifier}+o" = ''[class="obsidian"] scratchpad show'';
"${modifier}+c" = "split h"; "${modifier}+c" = "split h";
"${modifier}+e" = "layout toggle split"; "${modifier}+e" = "layout toggle split";
@@ -223,18 +254,43 @@ 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}+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";
"${modifier}+F6" = "exec ${pkgs.xorg.xkill}/bin/xkill";
"${modifier}+F7" = "exec ${pkgs.writers.writeDash "showkeys-toggle" '' "${modifier}+F7" = "exec ${pkgs.writers.writeDash "showkeys-toggle" ''
if ${pkgs.procps}/bin/pgrep screenkey; then if ${pkgs.procps}/bin/pgrep screenkey; then
exec ${pkgs.procps}/bin/pkill screenkey exec ${pkgs.procps}/bin/pkill screenkey
@@ -242,18 +298,25 @@ in {
exec ${pkgs.screenkey}/bin/screenkey exec ${pkgs.screenkey}/bin/screenkey
fi fi
''}"; ''}";
"${modifier}+F8" = "exec switch-theme toggle";
"${modifier}+F9" = "exec ${pkgs.redshift}/bin/redshift -O 4000 -b 0.85";
"${modifier}+F10" = "exec ${pkgs.redshift}/bin/redshift -x";
"${modifier}+F11" = "exec ${pkgs.xcalib}/bin/xcalib -invert -alter";
"${modifier}+F12" = "exec ${klem}/bin/klem"; "${modifier}+F12" = "exec ${klem}/bin/klem";
"Print" = "exec flameshot gui";
"XF86AudioLowerVolume" = "exec ${pkgs.pamixer}/bin/pamixer -d 5"; "XF86AudioLowerVolume" = "exec ${pkgs.pamixer}/bin/pamixer -d 5";
"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";
"XF86AudioStop" = "exec ${pkgs.playerctl}/bin/playerctl stop"; "XF86AudioStop" = "exec ${pkgs.playerctl}/bin/playerctl stop";
"XF86ScreenSaver" = "exec ${niveumPackages.k-lock}/bin/k-lock"; "XF86ScreenSaver" = "exec ${niveumPackages.k-lock}/bin/k-lock";
"XF86Display" = "exec ${niveumPackages.dmenu-randr}/bin/dmenu-randr";
# key names detected with xorg.xev: # key names detected with xorg.xev:
# XF86WakeUp (fn twice) # XF86WakeUp (fn twice)
# XF86Battery (fn f3) # XF86Battery (fn f3)
@@ -268,74 +331,6 @@ in {
# XF86Back # XF86Back
# XF86Launch1 (thinkvantage) # XF86Launch1 (thinkvantage)
}; };
in {
wayland.windowManager.sway = {
enable = true;
config = {
menu = "rofi -modi run,ssh,window -show run";
inherit modifier modes gaps bars floating window colors keybindings;
input = {
"*" = {
xkb_layout = "de";
xkb_variant = "T3";
};
};
terminal = (defaultApplications pkgs).terminal;
up = "k";
down = "j";
left = "h";
right = "l";
seat = {
"*" = {
hide_cursor = "when-typing enable";
};
};
startup = [
{command = "echo hello";}
];
};
};
xsession.windowManager.i3 = {
enable = true;
extraConfig = ''
bindsym --release ${modifier}+Shift+w exec /run/wrappers/bin/slock
exec "${pkgs.obsidian}/bin/obsidian"
for_window [class="obsidian"] , move scratchpad
assign [class="message"] ${messageWorkspace}
exec "${pkgs.writers.writeDash "irc" "exec ${pkgs.alacritty}/bin/alacritty --class message -e ssh weechat@makanek -t tmux attach-session -t IM"}"
exec "${pkgs.writers.writeDash "email" "exec ${pkgs.alacritty}/bin/alacritty --class message -e aerc"}"
assign [class="wtf"] ${infoWorkspace}
exec ${dashboard}/bin/dashboard
'';
config = lib.mkMerge [
{
inherit modifier gaps modes bars floating window colors keybindings;
}
{
keybindings = let
new-workspace = pkgs.writers.writeDash "new-workspace" ''
i3-msg workspace $(($(i3-msg -t get_workspaces | tr , '\n' | grep '"num":' | cut -d : -f 2 | sort -rn | head -1) + 1))
'';
move-to-new-workspace = pkgs.writers.writeDash "new-workspace" ''
i3-msg move container to workspace $(($(i3-msg -t get_workspaces | tr , '\n' | grep '"num":' | cut -d : -f 2 | sort -rn | head -1) + 1))
'';
in {
"${modifier}+ß" = "exec ${niveumPackages.menu-calc}/bin/=";
"${modifier}+F6" = "exec ${pkgs.xorg.xkill}/bin/xkill";
"${modifier}+F9" = "exec ${pkgs.redshift}/bin/redshift -O 4000 -b 0.85";
"${modifier}+F10" = "exec ${pkgs.redshift}/bin/redshift -x";
"${modifier}+F11" = "exec ${pkgs.xcalib}/bin/xcalib -invert -alter";
"Print" = "exec flameshot gui";
# "${modifier}+Shift+x" = "exec ${move-to-new-workspace}";
# "${modifier}+x" = "exec ${new-workspace}";
"XF86Display" = "exec ${niveumPackages.dmenu-randr}/bin/dmenu-randr";
};
}
];
}; };
}; };
} }

View File

@@ -1,80 +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 = "net";
format = " $icon HU";
missing_format = "";
device = "ppp0";
}
{
block = "net";
format = " $icon FU";
missing_format = "";
device = "tun0";
}
{
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 = "time";
format = "$icon $timestamp.datetime(f:'%Y-%m-%d (%W %a) %H:%M', l:de_DE)";
}
];
};
};
};
}

View File

@@ -9,10 +9,9 @@
de = "T3"; de = "T3";
gr = "polytonic"; gr = "polytonic";
ru = "phonetic"; ru = "phonetic";
arabic = ""; ara = "buckwalter";
coptic = ""; cop = "";
avestan = ""; ave = "";
gothic = "";
"in" = "san-kagapa"; "in" = "san-kagapa";
il = "phonetic"; il = "phonetic";
}; };
@@ -20,7 +19,6 @@
in { in {
# man 7 xkeyboard-config # man 7 xkeyboard-config
services.xserver = { services.xserver = {
exportConfiguration = true; # link /usr/share/X11 properly
layout = "de"; layout = "de";
# T3: https://upload.wikimedia.org/wikipedia/commons/a/a9/German-Keyboard-Layout-T3-Version1-large.png # T3: https://upload.wikimedia.org/wikipedia/commons/a/a9/German-Keyboard-Layout-T3-Version1-large.png
# buckwalter: http://www.qamus.org/transliteration.htm # buckwalter: http://www.qamus.org/transliteration.htm
@@ -33,28 +31,24 @@ in {
"${pkgs.xkeyboard_config}/etc/X11/xkb" "${pkgs.xkeyboard_config}/etc/X11/xkb"
(pkgs.linkFarm "custom-x-keyboards" [ (pkgs.linkFarm "custom-x-keyboards" [
{ {
name = "symbols/arabic"; name = "symbols/cop";
path = ../lib/keyboards/arabic; path = pkgs.fetchurl {
url = "http://www.moheb.de/download/cop";
sha256 = "1l0h6aq536hyinrh0i0ia355y229bjrlibii0sya5bmqh46vycia";
};
} }
{ {
name = "symbols/coptic"; name = "symbols/ave";
path = ../lib/keyboards/coptic; path = pkgs.fetchurl {
} url = "https://blog.simos.info/wp-content/uploads/2010/06/avestan.txt";
{ sha256 = "192zmmm3gxyhim39dsax7r87gsay2w5v2xkhwmvsfipjb60hwp5g";
name = "symbols/gothic"; };
path = ../lib/keyboards/gothic;
}
{
name = "symbols/avestan";
path = ../lib/keyboards/avestan;
} }
]) ])
]; ];
}; };
}; };
environment.etc."x11-locale".source = toString pkgs.xorg.libX11 + "share/X11/locale";
console.keyMap = "de"; console.keyMap = "de";
environment.systemPackages = environment.systemPackages =

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";
@@ -103,9 +104,30 @@ in {
"khal/config".text = '' "khal/config".text = ''
[calendars] [calendars]
[[kalender_local]] [[alew]]
path = ${davHome}/calendar/* path = ${davHome}/calendar/alew
type = discover color = "light gray"
[[personal]]
path = ${davHome}/calendar/personal
color = "light cyan"
[[uni]]
path = ${davHome}/calendar/uni-1
color = "yellow"
[[fysi]]
path = ${davHome}/calendar/fysi-1
color = "light magenta"
[[fysi_team]]
path = ${davHome}/calendar/personal_shared_by_fdf
color = "light red"
[[birthdays]]
path = ${davHome}/contacts/contacts
type = birthdays
color = "light green"
[default] [default]
highlight_event_days = True highlight_event_days = True
@@ -137,7 +159,13 @@ in {
[pair kalender] [pair kalender]
a = "kalender_local" a = "kalender_local"
b = "kalender_cloud" b = "kalender_cloud"
collections = ["from b"] collections = ["personal", "alew", "uni-1"]
conflict_resolution = "b wins"
[pair fysi]
a = "kalender_local"
b = "fysi_cloud"
collections = ["fysi-1", "personal_shared_by_fdf"]
conflict_resolution = "b wins" conflict_resolution = "b wins"
[storage kontakte_local] [storage kontakte_local]
@@ -161,6 +189,12 @@ in {
url = "${kmeinCloud.davEndpoint}/calendars/${kmeinCloud.username}/" url = "${kmeinCloud.davEndpoint}/calendars/${kmeinCloud.username}/"
username = "${kmeinCloud.username}" username = "${kmeinCloud.username}"
password.fetch = ["command", "cat", "${kmeinCloud.passwordFile}"] password.fetch = ["command", "cat", "${kmeinCloud.passwordFile}"]
[storage fysi_cloud]
type = "caldav"
url = "${fysiCloud.davEndpoint}/calendars/${fysiCloud.username}/"
username = "${fysiCloud.username}"
password.fetch = ["command", "cat", "${fysiCloud.passwordFile}"]
''; '';
}; };
}; };

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

@@ -2,13 +2,6 @@
home-manager.users.me = { home-manager.users.me = {
xdg.mimeApps = { xdg.mimeApps = {
enable = true; enable = true;
associations = {
added = {
"x-scheme-handler/tg" = "org.telegram.desktop.desktop";
};
removed = {
};
};
defaultApplications = { defaultApplications = {
"application/epub+zip" = "org.pwmt.zathura.desktop"; "application/epub+zip" = "org.pwmt.zathura.desktop";
"application/pdf" = "org.pwmt.zathura.desktop"; "application/pdf" = "org.pwmt.zathura.desktop";
@@ -26,7 +19,7 @@
"x-scheme-handler/mailto" = "firefox.desktop"; "x-scheme-handler/mailto" = "firefox.desktop";
"x-scheme-handler/unknown" = "firefox.desktop"; "x-scheme-handler/unknown" = "firefox.desktop";
"x-scheme-handler/webcal" = "firefox.desktop"; "x-scheme-handler/webcal" = "firefox.desktop";
"x-scheme-handler/tg" = "org.telegram.desktop.desktop"; "inode/directory" = "pcmanfm.desktop";
}; };
}; };
}; };

View File

@@ -36,7 +36,7 @@ in {
"Alt+j" = "add video-pan-y -0.05"; "Alt+j" = "add video-pan-y -0.05";
}; };
scripts = [ scripts = [
pkgs.mpvScripts.quality-menu pkgs.mpvScripts.youtube-quality
niveumPackages.mpv-visualizer niveumPackages.mpv-visualizer
]; ];
}; };

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 {};
@@ -30,7 +29,7 @@
}) })
(zoteroStyle { (zoteroStyle {
name = "apa"; name = "apa";
sha256 = "sha256-sUf0Ov5c9aTUoLsYSRbQl3Qs9ELkb5/Tky35kH7pKuE="; sha256 = "sha256-yq4fW6hQknycLjaj5fPbXLrQlGBp5myXiOSHBU90jEc=";
}) })
]; ];
@@ -65,31 +64,55 @@ in {
aria2 aria2
firefox firefox
tdesktop tdesktop
gomuks w3m
wget
whois whois
dnsutils dnsutils
# FILE MANAGERS # FILE MANAGERS
lf lf
pcmanfm cinnamon.nemo
# MEDIA # MEDIA
ffmpeg ffmpeg
imagemagick imagemagick
exiftool exiftool
nsxiv nsxiv
graphviz # ARCHIVE TOOLS
unzip
unrar
p7zip
zip
# MONITORS
htop
iotop # I/O load monitor
iftop # interface bandwidth monitor
lsof # list open files
psmisc # for killall, pstree
# SHELL # SHELL
bat # better cat bat # better cat
fd # better find
file # determine file type
dos2unix dos2unix
genpass # generate passwords genpass # generate passwords
gcc gdu # ncurses disk usage (ncdu is broken)
rmlint # remove duplicate files
python3Packages.jsonschema # json validation python3Packages.jsonschema # json validation
jq # json toolkit
pup # html toolkit pup # html toolkit
htmlq htmlq
xsv # csv toolkit xsv # csv toolkit
fq # toolkit for yaml, xml and binaries
man-pages man-pages
man-pages-posix man-pages-posix
tree
exfat # to mount windows drives exfat # to mount windows drives
parallel # for parallel, since moreutils shadows task spooler
ripgrep # better grep
rlwrap
progress # display progress bars for pipes
# HARDWARE TOOLS # HARDWARE TOOLS
usbutils # for lsusb
pciutils # for lspci
lshw # for lshw
arandr # xrandr for noobs arandr # xrandr for noobs
libnotify # for notify-send libnotify # for notify-send
xclip # clipboard CLI xclip # clipboard CLI
@@ -99,10 +122,7 @@ in {
calibre calibre
electrum electrum
inkscape inkscape
krita
gthumb
astrolog astrolog
obsidian
anki-bin # flashcards anki-bin # flashcards
jbofihe # lojbanic software jbofihe # lojbanic software
zoom-us # video conferencing zoom-us # video conferencing
@@ -117,10 +137,12 @@ in {
niveumPackages.hc # print files as qr codes niveumPackages.hc # print files as qr codes
yt-dlp yt-dlp
espeak espeak
bc # calculator
pari # gp -- better calculator
rink # unit converter rink # unit converter
niveumPackages.auc niveumPackages.auc
niveumPackages.cheat-sh niveumPackages.cheat-sh
niveumPackages.polyglot niveumPackages.infschmv
niveumPackages.qrpaste niveumPackages.qrpaste
niveumPackages.ttspaste niveumPackages.ttspaste
niveumPackages.new-mac # get a new mac address niveumPackages.new-mac # get a new mac address
@@ -132,31 +154,29 @@ 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.swallow # window swallowing niveumPackages.swallow # window swallowing
niveumPackages.literature-quote niveumPackages.literature-quote
jless # less(1) for json
niveumPackages.booksplit niveumPackages.booksplit
niveumPackages.dmenu-randr niveumPackages.dmenu-randr
niveumPackages.dmenu-bluetooth niveumPackages.dmenu-bluetooth
niveumPackages.manual-sort niveumPackages.manual-sort
niveumPackages.dns-sledgehammer niveumPackages.dns-sledgehammer
ts
niveumPackages.vg
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
@@ -170,7 +190,7 @@ in {
par par
qrencode qrencode
# inputs.menstruation-backend.defaultPackage.x86_64-linux inputs.menstruation-backend.defaultPackage.x86_64-linux
inputs.agenix.packages.x86_64-linux.default inputs.agenix.packages.x86_64-linux.default
inputs.recht.defaultPackage.x86_64-linux inputs.recht.defaultPackage.x86_64-linux
@@ -196,14 +216,11 @@ in {
#krebs #krebs
niveumPackages.dic niveumPackages.dic
niveumPackages.cyberlocker-tools
niveumPackages.untilport
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
@@ -222,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]))
@@ -253,8 +260,7 @@ in {
# gnumeric # gnumeric
dia dia
pandoc pandoc
# niveumPackages.man-pandoc niveumPackages.man-pandoc
typst
# proselint # proselint
asciidoctor asciidoctor
wordnet wordnet
@@ -267,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,8 +1,12 @@
{pkgs, ...}: { {pkgs, ...}: {
sound.enable = true; sound.enable = true;
# realtime audio for pulseaudio
security.rtkit.enable = true;
services.pipewire = { services.pipewire = {
enable = true; enable = false;
systemWide = false;
alsa = { alsa = {
enable = true; enable = true;
support32Bit = true; support32Bit = true;
@@ -11,21 +15,25 @@
jack.enable = true; jack.enable = true;
}; };
systemd.user.services.pipewire-pulse.path = [pkgs.pulseaudio]; hardware.pulseaudio = {
services.avahi = {
enable = true; enable = true;
publish.enable = true; package = pkgs.pulseaudioFull;
publish.userServices = true; # copy server:/run/pulse/.config/pulse/cookie to client:~/.config/pulse/cookie to authenticate a client machine
zeroconf.discovery.enable = true;
extraConfig = ''
load-module ${
toString [
"module-tunnel-sink-new"
"server=zaatar.r"
"sink_name=zaatar"
"channels=2"
"rate=44100"
]
}
'';
}; };
environment.etc."pipewire/pipewire-pulse.conf.d/50-network-party.conf".text = '' users.users.me.extraGroups = ["pipewire" "audio"];
context.exec = [
{ path = "pactl" args = "load-module module-native-protocol-tcp" }
{ path = "pactl" args = "load-module module-zeroconf-discover" }
{ path = "pactl" args = "load-module module-zeroconf-publish" }
]
'';
environment.systemPackages = [ environment.systemPackages = [
pkgs.pavucontrol pkgs.pavucontrol

View File

@@ -1,47 +1,46 @@
{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; users.users.me.openssh.authorizedKeys.keys = kieran.sshKeys pkgs;
programs.ssh.startAgent = true;
home-manager.users.me = { home-manager.users.me = {
# https://discourse.nixos.org/t/gnome-keyring-and-ssh-agent-without-gnome/11663 services.gpg-agent = rec {
xsession.profileExtra = '' enable = true;
eval $(${pkgs.gnome3.gnome-keyring}/bin/gnome-keyring-daemon --daemonize --components=ssh,secrets) enableSshSupport = true;
export SSH_AUTH_SOCK defaultCacheTtlSsh = 2 * 60 * 60;
''; maxCacheTtlSsh = 4 * defaultCacheTtlSsh;
# services.gpg-agent = rec { sshKeys = [
# enable = false; "568047C91DE03A23883E340F15A9C24D313E847C"
# enableSshSupport = true; "BB3EE102DB8CD45540A78A6B18B511B67061F6B4" # kfm@manakish ed25519
# defaultCacheTtlSsh = 2 * 60 * 60; "3F8986755818B5762A096BE212777EAAC441DD9D" # fysiweb rsa
# maxCacheTtlSsh = 4 * defaultCacheTtlSsh; "0E4ABD229432486CC432639BB0986B2CDE365105" # agenix ed25519
# sshKeys = [ "A1E8D32CBFCDBD2DE798E2298D795CCFD785AE06" # kfm@kabsa ed25519
# "568047C91DE03A23883E340F15A9C24D313E847C" ];
# "BB3EE102DB8CD45540A78A6B18B511B67061F6B4" # kfm@manakish ed25519 };
# "3F8986755818B5762A096BE212777EAAC441DD9D" # fysiweb rsa
# "0E4ABD229432486CC432639BB0986B2CDE365105" # agenix ed25519
# "A1E8D32CBFCDBD2DE798E2298D795CCFD785AE06" # kfm@kabsa ed25519
# ];
# };
}; };
# environment.extraInit = '' environment.extraInit = ''
# if [[ -z "$SSH_AUTH_SOCK" ]]; then if [[ -z "$SSH_AUTH_SOCK" ]]; then
# export SSH_AUTH_SOCK="$(${pkgs.gnupg}/bin/gpgconf --list-dirs agent-ssh-socket)" export SSH_AUTH_SOCK="$(${pkgs.gnupg}/bin/gpgconf --list-dirs agent-ssh-socket)"
# fi fi
# ''; '';
# environment.interactiveShellInit = '' environment.interactiveShellInit = ''
# GPG_TTY="$(tty)" GPG_TTY="$(tty)"
# export GPG_TTY export GPG_TTY
# ${pkgs.gnupg}/bin/gpg-connect-agent updatestartuptty /bye > /dev/null ${pkgs.gnupg}/bin/gpg-connect-agent updatestartuptty /bye > /dev/null
# ''; '';
home-manager.users.me.programs.ssh = { home-manager.users.me.programs.ssh = {
enable = true; enable = true;
matchBlocks = { matchBlocks = rec {
"github.com" = { "github.com" = {
hostname = "ssh.github.com"; hostname = "ssh.github.com";
port = 443; port = 443;
@@ -81,10 +80,26 @@ in {
user = "kfm"; user = "kfm";
port = sshPort; port = sshPort;
}; };
fatteh = { "nextcloud.fysi.dev" = {
hostname = "fatteh.r"; hostname = "116.203.82.203";
user = "kfm"; user = "root";
port = sshPort; };
"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,11 +11,9 @@ 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; users.users.root.openssh.authorizedKeys.keys = kieran.sshKeys pkgs;
} }

View File

@@ -1,10 +1,9 @@
{ {
config,
pkgs, pkgs,
lib, lib,
inputs,
... ...
}: let }: let
locker = x: "https://c.krebsco.de/${x}";
dictionaries = { dictionaries = {
lojban = { lojban = {
jbo-deu = pkgs.fetchzip { jbo-deu = pkgs.fetchzip {
@@ -30,7 +29,7 @@
sha256 = "1kmbdjqinrcxkc6jdyyrq5rl2wzhnrychyynnh91yhrjwjxlh44k"; sha256 = "1kmbdjqinrcxkc6jdyyrq5rl2wzhnrychyynnh91yhrjwjxlh44k";
}; };
Woodhouse = pkgs.fetchzip { Woodhouse = pkgs.fetchzip {
url = locker "Woodhouse.zip"; url = "https://c.krebsco.de/Woodhouse.zip";
sha256 = "1dvnc2679yb048q2f3hr2h34acvhan0n3iir6h9ajlrdzz48mlkq"; sha256 = "1dvnc2679yb048q2f3hr2h34acvhan0n3iir6h9ajlrdzz48mlkq";
stripRoot = false; stripRoot = false;
}; };
@@ -69,39 +68,39 @@
sha256 = "1bjja3n3layfd08xa1r0a6375dxh5zi6hlv7chkhgnx800cx7hxn"; sha256 = "1bjja3n3layfd08xa1r0a6375dxh5zi6hlv7chkhgnx800cx7hxn";
}; };
Roget = pkgs.fetchzip { Roget = pkgs.fetchzip {
url = locker "stardict-Roget_s_II_The_New_Thesaurus_3th_Ed-2.4.2.tar.bz2"; url = "http://download.huzheng.org/bigdict/stardict-Roget_s_II_The_New_Thesaurus_3th_Ed-2.4.2.tar.bz2";
hash = "sha256-f2GcNf3+dqZ/sKBpywjdHHC7Rp6FJseY93edRJK3/us="; sha256 = "1szyny9497bpyyccf9l5kr3bnw0wvl4cnsd0n1zscxpyzlsrqqbz";
}; };
JargonFile = pkgs.fetchzip { JargonFile = pkgs.fetchzip {
url = locker "stardict-dictd-jargon-2.4.2.tar.bz2"; url = "http://download.huzheng.org/dict.org/stardict-dictd-jargon-2.4.2.tar.bz2";
hash = "sha256-RFEcz8XzNO+Yk5s8dKSzvF+aOvq2bKysA7VenLKC1yQ="; sha256 = "096phar9qpmm0fnaqv5nz8x9lpxwnfj78g4vjfcfyd7kqp7iqla4";
}; };
Oxford-Collocations = pkgs.fetchzip { Oxford-Collocations = pkgs.fetchzip {
url = locker "stardict-Oxford_Collocations_Dictionary_2nd_Ed-2.4.2.tar.bz2"; url = "http://download.huzheng.org/bigdict/stardict-Oxford_Collocations_Dictionary_2nd_Ed-2.4.2.tar.bz2";
sha256 = "1zkfs0zxkcn21z2lhcabrs77v4ma9hpv7qm119hpyi1d8ajcw07q"; sha256 = "1zkfs0zxkcn21z2lhcabrs77v4ma9hpv7qm119hpyi1d8ajcw07q";
}; };
Langenscheidt-Deu-En = pkgs.fetchzip { Langenscheidt-Deu-En = pkgs.fetchzip {
url = locker "stardict-Handw_rterbuch_Deutsch_Englisc-2.4.2.tar.bz2"; url = "http://download.huzheng.org/babylon/german/stardict-Handw_rterbuch_Deutsch_Englisc-2.4.2.tar.bz2";
sha256 = "12q9i5azq7ylyrpb6jqbaf1rxalc3kzcwjvbinvb0yabdxb80y30"; sha256 = "12q9i5azq7ylyrpb6jqbaf1rxalc3kzcwjvbinvb0yabdxb80y30";
}; };
Langenscheidt-En-Deu = pkgs.fetchzip { Langenscheidt-En-Deu = pkgs.fetchzip {
url = locker "stardict-Handw_rterbuch_Englisch_Deutsc-2.4.2.tar.bz2"; url = "http://download.huzheng.org/babylon/german/stardict-Handw_rterbuch_Englisch_Deutsc-2.4.2.tar.bz2";
sha256 = "087b05h155j5ldshfgx91pz81h6ijq2zaqjirg7ma8ig3l96zb59"; sha256 = "087b05h155j5ldshfgx91pz81h6ijq2zaqjirg7ma8ig3l96zb59";
}; };
Duden_Das_Fremdworterbuch = pkgs.fetchzip { Duden_Das_Fremdworterbuch = pkgs.fetchzip {
url = locker "stardict-Duden_Das_Fremdworterbuch-2.4.2.tar.bz2"; url = "http://download.huzheng.org/babylon/german/stardict-Duden_Das_Fremdworterbuch-2.4.2.tar.bz2";
sha256 = "1zrcay54ccl031s6dvjwsah5slhanmjab87d81rxlcy8fx0xd8wq"; sha256 = "1zrcay54ccl031s6dvjwsah5slhanmjab87d81rxlcy8fx0xd8wq";
}; };
Duden_De_De = pkgs.fetchzip { Duden_De_De = pkgs.fetchzip {
url = locker "stardict-Duden_De_De-2.4.2.tar.bz2"; url = "http://download.huzheng.org/babylon/german/stardict-Duden_De_De-2.4.2.tar.bz2";
sha256 = "1fhay04w5aaj83axfmla2ql34nb60gb05dgv0k94ig7p8x4yxxlf"; sha256 = "1fhay04w5aaj83axfmla2ql34nb60gb05dgv0k94ig7p8x4yxxlf";
}; };
ConciseOED = pkgs.fetchzip { ConciseOED = pkgs.fetchzip {
url = locker "stardict-Concise_Oxford_English_Dictionary-2.4.2.tar.bz2"; url = "http://download.huzheng.org/bigdict/stardict-Concise_Oxford_English_Dictionary-2.4.2.tar.bz2";
sha256 = "19kpcxbhqzpmhi94mp48nalgmsh6s7rsx1gb4kwkhirp2pbjcyl7"; sha256 = "19kpcxbhqzpmhi94mp48nalgmsh6s7rsx1gb4kwkhirp2pbjcyl7";
}; };
Duden_Synonym = pkgs.fetchzip { Duden_Synonym = pkgs.fetchzip {
url = locker "stardict-Duden_Synonym-2.4.2.tar.bz2"; url = "http://download.huzheng.org/babylon/german/stardict-Duden_Synonym-2.4.2.tar.bz2";
sha256 = "0cx086zvb86bmz7i8vnsch4cj4fb0cp165g4hig4982zakj6f2jd"; sha256 = "0cx086zvb86bmz7i8vnsch4cj4fb0cp165g4hig4982zakj6f2jd";
}; };
}; };
@@ -141,39 +140,32 @@
}; };
oed = { oed = {
OED1 = pkgs.fetchzip { OED1 = pkgs.fetchzip {
url = locker "stardict-Oxford_English_Dictionary_2nd_Ed._P1-2.4.2.tar.bz2"; url = "http://download.huzheng.org/bigdict/stardict-Oxford_English_Dictionary_2nd_Ed._P1-2.4.2.tar.bz2";
sha256 = "0i5vv1rv44yfwyf9bfbdrb9brzhhpvz2jnh39fv8hh107nkv2vcf"; sha256 = "0i5vv1rv44yfwyf9bfbdrb9brzhhpvz2jnh39fv8hh107nkv2vcf";
}; };
OED2 = pkgs.fetchzip { OED2 = pkgs.fetchzip {
url = locker "stardict-Oxford_English_Dictionary_2nd_Ed._P2-2.4.2.tar.bz2"; url = "http://download.huzheng.org/bigdict/stardict-Oxford_English_Dictionary_2nd_Ed._P2-2.4.2.tar.bz2";
sha256 = "1pk234pbq4pk55d8sjk0pp9j5sajm82f8804kf2xm2x5p387q1rg"; sha256 = "1pk234pbq4pk55d8sjk0pp9j5sajm82f8804kf2xm2x5p387q1rg";
}; };
}; };
coptic = {
dictionary = inputs.coptic-dictionary.packages.x86_64-linux.coptic-stardict;
Crum = pkgs.fetchzip {
url = locker "stardict-Coptic-English_all_dialects-2.4.2.tar.bz2";
sha256 = "1fi281mb9yzv40wjsdapi8fzpa7x2yscz582lv2qnss9g8zzzzr9";
};
};
russian = { russian = {
LingvoGermanRussian = pkgs.fetchzip { LingvoGermanRussian = pkgs.fetchzip {
url = locker "stardict-GR-LingvoUniversal-2.4.2.tar.bz2"; url = "http://download.huzheng.org/lingvo/stardict-GR-LingvoUniversal-2.4.2.tar.bz2";
sha256 = "0p353gs2z4vj70hqsdhffjaaw3a4zlmcs46flipmf35lm5wmaj0g"; sha256 = "0p353gs2z4vj70hqsdhffjaaw3a4zlmcs46flipmf35lm5wmaj0g";
}; };
LingvoRussianGerman = pkgs.fetchzip { LingvoRussianGerman = pkgs.fetchzip {
url = locker "stardict-RG-LingvoUniversal-2.4.2.tar.bz2"; url = "http://download.huzheng.org/lingvo/stardict-RG-LingvoUniversal-2.4.2.tar.bz2";
sha256 = "03f9wdmkgpjifpms7dyh10ma29wf3ka1j3zlp1av0cybhdldk2a8"; sha256 = "03f9wdmkgpjifpms7dyh10ma29wf3ka1j3zlp1av0cybhdldk2a8";
}; };
}; };
turkish = { turkish = {
BabylonTurkishEnglish = pkgs.fetchzip { BabylonTurkishEnglish = pkgs.fetchzip {
url = locker "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 = locker "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";
}; };
}; };
}; };
@@ -292,35 +284,35 @@
" | less -FR " | less -FR
''; '';
in { in {
# environment.etc.stardict.source = toString (makeStardictDataDir ({ environment.etc.stardict.source = toString (makeStardictDataDir ({
# Crum = pkgs.fetchzip { Crum = pkgs.fetchzip {
# url = "http://download.huzheng.org/misc/stardict-Coptic-English_all_dialects-2.4.2.tar.bz2"; url = "http://download.huzheng.org/misc/stardict-Coptic-English_all_dialects-2.4.2.tar.bz2";
# sha256 = "1fi281mb9yzv40wjsdapi8fzpa7x2yscz582lv2qnss9g8zzzzr9"; sha256 = "1fi281mb9yzv40wjsdapi8fzpa7x2yscz582lv2qnss9g8zzzzr9";
# }; };
# SmithBiographyMythology = pkgs.fetchzip { SmithBiographyMythology = pkgs.fetchzip {
# url = "https://github.com/latin-dict/Smith1873/releases/download/v1.0/Smith1873-stardict.zip"; url = "https://github.com/latin-dict/Smith1873/releases/download/v1.0/Smith1873-stardict.zip";
# sha256 = "01h5fxacp2m60xir8kzslkfy772vs3vmz07zhdwfhcwdaxif2af2"; sha256 = "01h5fxacp2m60xir8kzslkfy772vs3vmz07zhdwfhcwdaxif2af2";
# }; };
# SmithAntiquities = pkgs.fetchzip { SmithAntiquities = pkgs.fetchzip {
# url = "https://github.com/latin-dict/Smith1890/releases/download/v1.0/Smith1890-stardict.zip"; url = "https://github.com/latin-dict/Smith1890/releases/download/v1.0/Smith1890-stardict.zip";
# sha256 = "0vpsv62p2lrzmgys4d1swpnc6lqhdi7rxwkj2ngy3lz5dk3fysyb"; sha256 = "0vpsv62p2lrzmgys4d1swpnc6lqhdi7rxwkj2ngy3lz5dk3fysyb";
# }; };
# } }
# // dictionaries.classics // dictionaries.classics
# // dictionaries.sanskrit // dictionaries.sanskrit
# // dictionaries.oed // dictionaries.oed
# // dictionaries.russian // dictionaries.russian
# // dictionaries.englishGerman // dictionaries.englishGerman
# // dictionaries.turkish)); // dictionaries.turkish));
environment.systemPackages = [ environment.systemPackages = [
# pkgs.goldendict
(makeStardict "lsj" dictionaries.classics) (makeStardict "lsj" dictionaries.classics)
(makeStardict "sa" dictionaries.sanskrit) (makeStardict "sa" dictionaries.sanskrit)
(makeStardict "oed" dictionaries.oed) (makeStardict "oed" dictionaries.oed)
(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,52 +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 = config.users.users.me.name;
Group = config.users.users.me.group;
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,69 +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/${
# onedark
# synth-midnight-dark
# apprentice # https://romainl.github.io/Apprentice/
# one-light
# onedark
# material # https://github.com/ntpeters/base16-materialtheme-scheme
# material-palenight
# material-lighter
# tomorrow # https://github.com/chriskempson/tomorrow-theme
# tomorrow-night
# gruvbox-light-medium # https://github.com/dawikur/base16-gruvbox-scheme
# gruvbox-dark-medium
# selenized-light # https://github.com/jan-warchol/selenized
# selenized-dark
# papercolor-light
# papercolor-dark
# dracula # https://draculatheme.com/
# }.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

@@ -51,7 +51,6 @@ in {
telegram-token-reverse.file = ../../secrets/telegram-token-reverse.age; telegram-token-reverse.file = ../../secrets/telegram-token-reverse.age;
telegram-token-betacode.file = ../../secrets/telegram-token-betacode.age; telegram-token-betacode.file = ../../secrets/telegram-token-betacode.age;
telegram-token-proverb.file = ../../secrets/telegram-token-proverb.age; telegram-token-proverb.file = ../../secrets/telegram-token-proverb.age;
telegram-token-streaming-link.file = ../../secrets/telegram-token-streaming-link.age;
}; };
systemd.services.telegram-reverse = { systemd.services.telegram-reverse = {
@@ -67,17 +66,6 @@ in {
serviceConfig.LoadCredential = "token:${config.age.secrets.telegram-token-reverse.path}"; serviceConfig.LoadCredential = "token:${config.age.secrets.telegram-token-reverse.path}";
}; };
systemd.services.telegram-streaming-link = {
wantedBy = ["multi-user.target"];
description = "Telegram bot converting YouTube Music <-> Spotify";
enable = true;
script = ''
TELEGRAM_BOT_TOKEN="$(cat "$CREDENTIALS_DIRECTORY/token")" ${telebots}/bin/telegram-streaming-link
'';
serviceConfig.Restart = "always";
serviceConfig.LoadCredential = "token:${config.age.secrets.telegram-token-streaming-link.path}";
};
systemd.services.telegram-betacode = { systemd.services.telegram-betacode = {
wantedBy = ["multi-user.target"]; wantedBy = ["multi-user.target"];
description = "Telegram beta code bot"; description = "Telegram beta code bot";

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

View File

@@ -52,9 +52,9 @@
export KEYTIMEOUT=1 export KEYTIMEOUT=1
hash -d nixos=/etc/nixos niveum=${config.users.users.me.home}/sync/src/niveum hash -d nixos=/etc/nixos niveum=${config.users.users.me.home}/projects/niveum
autoload -U zmv run-help edit-command-line autoload -U zmv run-help
fpath=(${zsh-completions}/src $fpath) fpath=(${zsh-completions}/src $fpath)
''; '';
@@ -99,8 +99,6 @@
zle -N zle-line-init zle -N zle-line-init
zle -N zle-keymap-select zle -N zle-keymap-select
zle -N edit-command-line
bindkey -M vicmd v edit-command-line
''; '';
}; };
} }

1472
flake.lock generated

File diff suppressed because it is too large Load Diff

264
flake.nix
View File

@@ -3,123 +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.11"; 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.11";
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"; nixinate.inputs.nixpkgs.follows = "nixpkgs";
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";
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,
agenix, agenix,
retiolum, retiolum,
nixinate,
flake-utils, flake-utils,
nix-on-droid,
stylix,
... ...
}: }:
{ {
apps = { apps = nixinate.nixinate.x86_64-linux self;
x86_64-darwin = let
pkgs = nixpkgs.legacyPackages.x86_64-darwin;
in {
deploy-maakaron = {
type = "app";
program = toString (pkgs.writers.writeDash "deploy-maakaron" ''
exec $(nix build .#homeConfigurations.maakaron.activationPackage --no-link --print-out-paths)/activate
'');
};
};
x86_64-linux = let
pkgs = nixpkgs.legacyPackages.x86_64-linux;
lib = nixpkgs.lib;
in
nixinate.nixinate.x86_64-linux self
// {
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
'');
};
}
# the following error prevents remote building of ful: https://github.com/NixOS/nixpkgs/issues/177873
// builtins.listToAttrs (map (hostname: let
externalNetwork = import ./lib/external-network.nix;
targets = {
ful = "root@ful";
zaatar = "root@zaatar";
makanek = "root@makanek";
manakish = "root@manakish";
kabsa = "root@kabsa";
fatteh = "root@fatteh";
};
in
lib.attrsets.nameValuePair "deploy-${hostname}" {
type = "app";
program = toString (pkgs.writers.writeDash "deploy-${hostname}" ''
exec ${pkgs.nixos-rebuild}/bin/nixos-rebuild switch --max-jobs 2 --log-format internal-json --flake .?submodules=1#${hostname} --build-host ${targets.${hostname}} --target-host ${targets.${hostname}} 2>&1 | ${pkgs.nix-output-monitor}/bin/nom --json
'');
}) (builtins.attrNames self.nixosConfigurations))
// {
deploy-ful = {
type = "app";
program = toString (pkgs.writers.writeDash "deploy-ful" ''
exec ${pkgs.nix}/bin/nix run .?submodules=1#nixinate.ful --log-format internal-json 2>&1 | ${pkgs.nix-output-monitor}/bin/nom --json
'');
};
};
};
nixosModules = { nixosModules = {
htgen = import modules/htgen.nix; htgen = import modules/htgen.nix;
@@ -128,70 +49,25 @@
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;
};
};
homeConfigurations = {
maakaron = let
system = "x86_64-darwin";
pkgs = nixpkgs.legacyPackages.${system};
in
home-manager.lib.homeManagerConfiguration {
inherit pkgs;
modules = [./systems/maakaron/home.nix];
extraSpecialArgs = {
inherit inputs;
niveumPackages = inputs.self.packages.${system};
};
};
};
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 = [
systems/ful/configuration.nix
agenix.nixosModules.default
inputs.self.nixosModules.passport
inputs.self.nixosModules.panoptikon
retiolum.nixosModules.retiolum
nur.nixosModules.nur
{ {
_module.args.nixinate = { _module.args.nixinate = {
host = "ful"; host = "ful";
@@ -201,12 +77,31 @@
hermetic = false; hermetic = false;
}; };
} }
systems/ful/configuration.nix
agenix.nixosModules.default
inputs.self.nixosModules.passport
inputs.self.nixosModules.specus
inputs.self.nixosModules.panoptikon
retiolum.nixosModules.retiolum
nur.nixosModules.nur
]; ];
}; };
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 = {
host = "zaatar";
sshUser = "root";
buildOn = "remote";
substituteOnTarget = true;
hermetic = false;
};
}
systems/zaatar/configuration.nix systems/zaatar/configuration.nix
inputs.self.nixosModules.moodle-dl inputs.self.nixosModules.moodle-dl
agenix.nixosModules.default agenix.nixosModules.default
@@ -216,12 +111,25 @@
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 = {
host = "makanek";
sshUser = "root";
buildOn = "remote";
substituteOnTarget = true;
hermetic = false;
};
}
systems/makanek/configuration.nix systems/makanek/configuration.nix
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
@@ -245,56 +153,64 @@
}; };
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 = {
host = "manakish";
sshUser = "root";
buildOn = "remote";
substituteOnTarget = true;
hermetic = false;
};
}
systems/manakish/configuration.nix systems/manakish/configuration.nix
agenix.nixosModules.default agenix.nixosModules.default
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 = {
host = "kabsa";
sshUser = "root";
buildOn = "remote";
substituteOnTarget = true;
hermetic = false;
};
}
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
];
};
fatteh = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux";
specialArgs = niveumSpecialArgs system;
modules = [
systems/fatteh/configuration.nix
agenix.nixosModules.default
retiolum.nixosModules.retiolum
home-manager.nixosModules.home-manager
nur.nixosModules.nur
stylix.nixosModules.stylix
]; ];
}; };
}; };
} }
// flake-utils.lib.eachSystem [flake-utils.lib.system.x86_64-linux flake-utils.lib.system.x86_64-darwin flake-utils.lib.system.aarch64-linux] (system: let // flake-utils.lib.eachSystem [flake-utils.lib.system.x86_64-linux flake-utils.lib.system.aarch64-linux] (system: let
pkgs = import nixpkgs { pkgs = import nixpkgs {
inherit system; inherit system;
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,
@@ -305,13 +221,11 @@
packages = rec { packages = rec {
auc = pkgs.callPackage packages/auc.nix {}; auc = pkgs.callPackage packages/auc.nix {};
betacode = pkgs.callPackage packages/betacode.nix {}; betacode = pkgs.callPackage packages/betacode.nix {};
brassica = pkgs.callPackage packages/brassica.nix {};
cheat-sh = pkgs.callPackage packages/cheat-sh.nix {}; cheat-sh = pkgs.callPackage packages/cheat-sh.nix {};
closest = pkgs.callPackage packages/closest {}; closest = pkgs.callPackage packages/closest {};
cyberlocker-tools = pkgs.callPackage packages/cyberlocker-tools.nix {}; cyberlocker-tools = pkgs.callPackage packages/cyberlocker-tools.nix {};
default-gateway = pkgs.callPackage packages/default-gateway.nix {}; default-gateway = pkgs.callPackage packages/default-gateway.nix {};
depp = pkgs.callPackage packages/depp.nix {}; depp = pkgs.callPackage packages/depp.nix {};
dashboard = pkgs.callPackage packages/dashboard {};
devanagari = pkgs.callPackage packages/devanagari {}; devanagari = pkgs.callPackage packages/devanagari {};
devour = pkgs.callPackage packages/devour.nix {}; devour = pkgs.callPackage packages/devour.nix {};
dic = pkgs.callPackage packages/dic.nix {}; dic = pkgs.callPackage packages/dic.nix {};
@@ -324,11 +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 {};
gpt35 = pkgs.callPackage packages/gpt.nix {model = "gpt-3.5-turbo";};
gpt4 = pkgs.callPackage packages/gpt.nix {model = "gpt-4";};
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 {};
@@ -351,17 +261,13 @@
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 {};
polyglot = pkgs.callPackage packages/polyglot.nix {};
qrpaste = pkgs.callPackage packages/qrpaste.nix {}; qrpaste = pkgs.callPackage packages/qrpaste.nix {};
rfc = pkgs.callPackage packages/rfc.nix {}; rfc = pkgs.callPackage packages/rfc.nix {};
scanned = pkgs.callPackage packages/scanned.nix {}; scanned = pkgs.callPackage packages/scanned.nix {};
@@ -372,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 {};
@@ -400,7 +302,11 @@
name = "booksplit"; name = "booksplit";
packages = [pkgs.ffmpeg pkgs.glibc.bin]; packages = [pkgs.ffmpeg pkgs.glibc.bin];
}; };
dmenu-randr = pkgs.callPackage packages/dmenu-randr.nix {}; dmenu-randr = wrapScript {
script = inputs.voidrice.outPath + "/.local/bin/displayselect";
name = "dmenu-randr";
packages = [pkgs.dmenu pkgs.bc pkgs.psmisc pkgs.util-linux pkgs.xorg.xrandr pkgs.gawk pkgs.libnotify pkgs.arandr (pkgs.writers.writeDashBin "setbg" "")];
};
tag = wrapScript { tag = wrapScript {
script = inputs.voidrice.outPath + "/.local/bin/tag"; script = inputs.voidrice.outPath + "/.local/bin/tag";
name = "tag"; name = "tag";

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,5 +1,5 @@
pkgs: rec { pkgs: rec {
terminal = "alacritty"; terminal = "alacritty";
browser = "${pkgs.firefox}/bin/firefox"; browser = "${pkgs.firefox}/bin/firefox";
fileManager = "${pkgs.pcmanfm}/bin/pcmanfm"; fileManager = "${pkgs.cinnamon.nemo}/bin/nemo";
} }

View File

@@ -1,4 +1,4 @@
{ rec {
tmpfilesConfig = { tmpfilesConfig = {
type, type,
path, path,
@@ -15,8 +15,6 @@
repository = "rest:http://${host}:${toString port}/"; repository = "rest:http://${host}:${toString port}/";
}; };
remoteDir = "/home/kfm/remote";
firewall = lib: { firewall = lib: {
accept = { accept = {
source, source,
@@ -42,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";
@@ -69,18 +69,20 @@
github = "kmein"; github = "kmein";
email = "kmein@posteo.de"; email = "kmein@posteo.de";
name = "Kierán Meinhardt"; name = "Kierán Meinhardt";
sshKeys = [ sshKeys = pkgs:
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDyTnGhFq0Q+vghNhrqNrAyY+CsN7nNz8bPfiwIwNpjk" # kabsa pkgs.lib.strings.splitString "\n" (pkgs.lib.strings.fileContents (pkgs.fetchurl {
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOiQEc8rTr7C7xVLYV7tQ99BDDBLrJsy5hslxtCEatkB" # manakish url = "https://github.com/kmein.keys";
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIByreBjBEMJKjgpKLd5XZHIUUwIhNafVqN6OUOQpJa3y" # fatteh hash = "sha256-TvvPwplrH9cw7NE4GKqbE5ga+oBHM+TkjxYQ3b1fpLI=";
]; }));
}; };
syncthing.devices = { syncthing.devices = {
kabsa.id = "R6DEBD7-G5RYDKN-VFA3HPO-WX4DNVI-373F7OQ-AW5MZTT-3L4BDVW-Y6ROEAF"; kabsa.id = "R6DEBD7-G5RYDKN-VFA3HPO-WX4DNVI-373F7OQ-AW5MZTT-3L4BDVW-Y6ROEAF";
kibbeh.id = "HLQSG3D-WSKLA6S-MEYQ3EU-GDBGABE-PY53RQ6-SWQAP2I-Z5MVBVX-MYPJXAM"; heym.id = "HLQSG3D-WSKLA6S-MEYQ3EU-GDBGABE-PY53RQ6-SWQAP2I-Z5MVBVX-MYPJXAM";
manakish.id = "AJVBWR2-VFFAGZF-7ZF5JAX-T63GMOG-NZ446WK-MC5E6WK-6X6Q2HE-QQA2JQ3"; manakish.id = "AJVBWR2-VFFAGZF-7ZF5JAX-T63GMOG-NZ446WK-MC5E6WK-6X6Q2HE-QQA2JQ3";
fatteh.id = "GSOGYT3-2GBHZXT-MNCTDIY-3BJIR4V-OHVOOMJ-ICVLKXR-U4C7RFB-HJOK3AC"; toum.id = "CBJQXFF-FMFGWFU-2J6FMPR-SRDTSGX-7NHOYOH-CQCABKF-KQJMRJC-SDE24Q4";
zaatar.id = "CGHO6LK-ZJBAXBD-UWI7AH3-BXYARE6-EUIM7PE-O2FUCOM-VCCRNCM-IG34WQ7";
tahina.id = "UKJ2CBO-EQPKQL4-3QLRUSG-SSYR6AB-CCCUTKU-CLPYR7N-RUI5A6Y-JTL5NA4";
}; };
ignorePaths = [ ignorePaths = [

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

@@ -1,31 +0,0 @@
# Import default rules from the system Compose file
include "%L"
# Custom definitions
<Multi_key> <U0634> <U0634> : "ژ" U0698 # ز + ز = ژ
<Multi_key> <U063A> <U063A> : "گ" U06AF # غ + غ = گ
<Multi_key> <U0641> <U0641> : "ڤ" U06A4 # ف + ف = ڤ
<Multi_key> <U062C> <U062C> : "چ" U0686 # ج + ج = چ
<Multi_key> <U0628> <U0628> : "پ" U067E # ب + ب = پ
<Multi_key> <U0643> <U0643> : "ک" U06A9 # ك + ك = ک
<Multi_key> <U064A> <U064A> : "ی" U06CC # ي + ي = ی
<Multi_key> <U0647> <U064A> : "ۀ" U06C0 # ه + ي = ۀ
<Multi_key> <E> <E> : "ɛ" U025B
<Multi_key> <O> <O> : "ɔ" U0254
<Multi_key> <s> <h> : "ʃ" U0283
<Multi_key> <z> <h> : "ʒ" U0292
<Multi_key> <e> <i> : "ɪ" U026A
<Multi_key> <e> <u> : "ʊ" U028A
<Multi_key> <colon> <colon> : "ː" U02D0
<Multi_key> <question> <period> : "ʔ" U0294
<Multi_key> <period> <question> : "ʕ" U0295
<Multi_key> <apostrophe> <period> : "ˈ" U02C8
<Multi_key> <period> <apostrophe> : "ˌ" U02CC
<dead_belowring> <nobreakspace> : "̥" U0325 # COMBINING RING BELOW
<dead_belowbreve> <nobreakspace> : "̮" U032E # COMBINING BREVE BELOW
<dead_invertedbreve> <nobreakspace> : "̑" U0311 # COMBINING INVERTED BREVE
<dead_belowmacron> <nobreakspace> : "̱" U0331 # COMBINING MACRON BELOW
<dead_belowcircumflex> <nobreakspace> : "̯" U032F # COMBINING INVERTED BREVE BELOW
<dead_circumflex> <Multi_key> <underscore> <e> : "ᵊ" U1D4A
# TODO zwnj

View File

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

View File

@@ -1,60 +0,0 @@
/////////////////////////////////////////////////////////////////////////////////
//
// Generated keyboard layout file with the Keyboard Layout Editor.
// For more about the software, see http://code.google.com/p/keyboardlayouteditor
//
// Version 0.2, changed AD09.
partial default alphanumeric_keys
xkb_symbols "avestan"
{
name[Group1] = "Iran - Avestan";
key <AB01> { [ U10B30, U10B32 ] }; // 𐬰 𐬲
key <AB02> { [ U10B11, U10B12 ] }; // 𐬑 𐬒
key <AB03> { [ U10B17, UE102 ] }; // 𐬗 
key <AB04> { [ U10B2C, U10B13 ] }; // 𐬬 𐬓
key <AB05> { [ U10B20, U10B21 ] }; // 𐬠𐬡
key <AB06> { [ U10B25, U10B27 ] }; // 𐬥 𐬧
key <AB07> { [ U10B28, U10B29 ] }; // 𐬨 𐬩
key <AB08> { [ U10B3C, U10B39 ] }; // 𐬼 𐬹
key <AB09> { [ U10B3E, U10B3D ] }; // 𐬾 𐬽
key <AB10> { [ U10B3F, periodcentered ] }; // 𐬿 ·
key <AC01> { [ U10B00, U10B01 ] }; // 𐬀 𐬁
key <AC02> { [ U10B2F, U10B31 ] }; // 𐬯 𐬱
key <AC03> { [ U10B1B, U10B1C ] }; // 𐬛 𐬜
key <AC04> { [ U10B1F, U10B16 ] }; // 𐬟 𐬖
key <AC05> { [ U10B14, U10B15 ] }; // 𐬔 𐬕
key <AC06> { [ U10B35, UE100 ] }; // 𐬵 
key <AC07> { [ U10B18, U10B24 ] }; // 𐬘 𐬤
key <AC08> { [ U10B10, UE101 ] }; // 𐬐 
key <AC09> { [ U10B2E, UE103 ] }; // 𐬮 
key <AC10> { [ U10B3B, U10B3A ] }; // 𐬻 𐬺
key <AC11> { [ U10B1D ] }; // 𐬝
key <AD01> { [ U10B22, U10B23 ] }; // 𐬢 𐬣
key <AD02> { [ U10B33, U10B34 ] }; // 𐬳 𐬴
key <AD03> { [ U10B08, U10B09 ] }; // 𐬈 𐬉
key <AD04> { [ U10B2D, U10B26 ] }; // 𐬭 𐬦
key <AD05> { [ U10B19, U10B1A ] }; // 𐬙 𐬚
key <AD06> { [ U10B2B, U10B2A ] }; // 𐬫 𐬪
key <AD07> { [ U10B0E, U10B0F ] }; // 𐬎 𐬏
key <AD08> { [ U10B0C, U10B0D ] }; // 𐬌 𐬍
key <AD09> { [ U10B0A, U10B0B ] }; // 𐬊 𐬋
key <AD10> { [ U10B1E ] }; // 𐬞
key <AD11> { [ U10B06, U10B07 ] }; // 𐬆 𐬇
key <AD12> { [ U10B02, U10B03 ] }; // 𐬂 𐬃
key <AE01> { [ U10B78 ] }; // 𐭸
key <AE02> { [ U10B79 ] }; // 𐭹
key <AE03> { [ U10B7A ] }; // 𐭺
key <AE04> { [ U10B7B ] }; // 𐭻
key <AE05> { [ U10B7C ] }; // 𐭼
key <AE06> { [ U10B7D ] }; // 𐭽
key <AE07> { [ U10B7E ] }; // 𐭾
key <AE08> { [ U10B7F ] }; // 𐭿
key <BKSL> { [ U10B04, U10B05 ] }; // 𐬄 𐬅
key <LSGT> { [ U10B04, U10B05 ] }; // 𐬄 𐬅
};

View File

@@ -1,79 +0,0 @@
// Coptic keyboard symbols for XKB and PC keyboard
// based on the mapping of logos
// (C) 2006 Moheb Mekhaiel <mohebm@gmx.de>
//
// Permission is granted to anyone to use, distribute and modify
// this file in any way, provided that the above copyright notice
// is left intact and the author of the modification summarizes
// the changes in this header.
//
// This file is distributed without any expressed or implied warranty.
partial default alphanumeric_keys
xkb_symbols "basic" {
name[Group1]= "Coptic";
key <TLDE> { [ U0308, U0311, U0361, U2CE5 ] };
key <AE01> { type[Group1] = "FOUR_LEVEL",
[ 1, U0304, VoidSymbol, U2CE6 ] };
key <AE02> { [ 2, U0306, U2CFD, U2CE7 ] };
key <AE03> { [ 3, U0374, U2056, U2CE8 ] };
key <AE04> { [ 4, U0375, U2058, U2CE9 ] };
key <AE05> { [ 5, U0307, U2059, U2CEA ] };
key <AE06> { [ 6, U0323, U2C8B, U2C8A ] };
key <AE07> { [ 7, U2CE4 ] };
key <AE08> { [ 8, U002A, U2026 ] };
key <AE09> { [ 9, parenleft, U201C, plusminus ] };
key <AE10> { [ 0, parenright, U201D, degree ] };
key <AE11> { [ U00B7, underscore, U2013, U2014 ] };
key <AE12> { [ U2E17, U0305, U033F ] };
key <BKSL> { [ U0300, U007C, backslash, U007C ] };
key <AD01> { [ U2C91, U2C90 ] };
key <AD02> { [ U2CB1, U2CB0 ] };
key <AD03> { [ U2C89, U2C88 ] };
key <AD04> { [ U2CA3, U2CA2 ] };
key <AD05> { [ U2CA7, U2CA6, U03EF, U03EE ] };
key <AD06> { [ U2CAF, U2CAE ] };
key <AD07> { [ U2CA9, U2CA8 ] };
key <AD08> { [ U2C93, U2C92 ] };
key <AD09> { [ U2C9F, U2C9E ] };
key <AD10> { [ U2CA1, U2CA0 ] };
key <AD11> { [ bracketleft,braceleft, U2018 ] };
key <AD12> { [ bracketright,braceright,U2019 ] };
key <AC01> { [ U2C81, U2C80 ] };
key <AC02> { [ U2CA5, U2CA4, U03E3, U03E2 ] };
key <AC03> { [ U2C87, U2C86, U03EF, U03EE ] };
key <AC04> { [ U2CAB, U2CAA, U03E5, U03E4 ] };
key <AC05> { [ U2C85, U2C84, U03EB, U03EA ] };
key <AC06> { [ U2C8F, U2C8E, U03E9, U03E8 ] };
key <AC07> { [ U03EB, U03EA, U03EB, U03EA ] };
key <AC08> { [ U2C95, U2C94, U03E7, U03E6 ] };
key <AC09> { [ U2C97, U2C96 ] };
key <AC10> { [ semicolon, colon, U2053, dead_doubleacute ] };
key <AC11> { [ apostrophe, U2CFF, U0022 ] };
key <AB01> { [ U2C8D, U2C8C ] };
key <AB02> { [ U2C9D, U2C9C ] };
key <AB03> { [ U2CAD, U2CAC, U03ED, U03EC ] };
key <AB04> { [ U03E3, U03E2, U03E3, U03E2 ] };
key <AB05> { [ U2C83, U2C82 ] };
key <AB06> { [ U2C9B, U2C9A ] };
key <AB07> { [ U2C99, U2C98 ] };
key <AB08> { [ comma, less, U00AB, U2039 ] };
key <AB09> { [ period, greater, U00BB, U203A ] };
key <AB10> { [ U0301, U2CFE, slash, question ] };
key <RALT> { type[Group1]="TWO_LEVEL",
[ ISO_Level3_Shift, Multi_key ] };
modifier_map Mod5 { <RALT> };
//include "level3(ralt_switch_multikey)"
// End alphanumeric section
};

View File

@@ -1,69 +0,0 @@
/////////////////////////////////////////////////////////////////////////////////
//
// Generated keyboard layout file with the Keyboard Layout Editor.
// For more about the software, see http://code.google.com/p/keyboardlayouteditor
//
// Version 0.2, changed AD09.
partial default alphanumeric_keys
xkb_symbols "Gothic"
{
name[Group1] = "Gothic";
key <AB01> { [ U10336, U10336 ] }; // Z: 𐌶
key <AB02> { [ U10347, U10347 ] }; // X: 𐍇
key <AB03> { [ U10343, U10343 ] }; // C: 𐍃
key <AB04> { [ U10338, U10338 ] }; // V: 𐌸
key <AB05> { [ U10331, U10331 ] }; // B: 𐌱
key <AB06> { [ U1033D, U10341 ] }; // n: 𐌽 N: 𐍁
key <AB07> { [ U1033C, U1033C ] }; // M: 𐌼
key <AB08> { [ U10B3C, U10B39 ] };
key <AB09> { [ U10349, U10349 ] };
key <AB10> { [ U10B3F, periodcentered ] };
key <AC01> { [ U10330, U10330 ] }; // A: 𐌰
key <AC02> { [ U10343, U10343 ] }; // S: 𐍃
key <AC03> { [ U10333, U10338 ] }; // d: 𐌳 D: 𐌸
key <AC04> { [ U10346, U10346 ] }; // F: 𐍆
key <AC05> { [ U10332, U10332 ] }; // G: 𐌲
key <AC06> { [ U10337, U10337 ] }; // H: 𐌷
key <AC07> { [ U1033E, U1033E ] }; // J: 𐌾
key <AC08> { [ U1033A, U1033A ] }; // K: 𐌺
key <AC09> { [ U1033B, U1033B ] }; // L: 𐌻
key <AC10> { [ semicolon, colon ] };
key <AC11> { [ apostrophe, quotedbl ] };
key <AD01> { [ U10335, U10335 ] }; // Q: 𐌵
key <AD02> { [ U10345, U10345 ] }; // W: 𐍅
key <AD03> { [ U10334, U10334 ] }; // E: 𐌴
key <AD04> { [ U10342, U10342 ] }; // R: 𐍂
key <AD05> { [ U10344, U10338 ] }; // t: 𐍄 T: 𐌸
key <AD06> { [ U10348, U1034A ] }; // y: 𐍈 Y: 𐍊
key <AD07> { [ U1033F, U1033F ] }; // U: 𐌿
key <AD08> { [ U10339, U10339 ] }; // I: 𐌹
key <AD09> { [ U10349, U10349 ] }; // O: 𐍉
key <AD10> { [ U10340, U10340 ] }; // P: 𐍀
key <AD11> { [ bracketleft, braceleft ] };
key <AD12> { [ bracketright, braceright ] };
key <TLDE> { [ grave, asciitilde ] };
key <AE01> { [ 1, exclam ] };
key <AE02> { [ 2, at ] };
key <AE03> { [ 3, numbersign ] };
key <AE04> { [ 4, dollar ] };
key <AE05> { [ 5, percent ] };
key <AE06> { [ 6, asciicircum ] };
key <AE07> { [ 7, ampersand ] };
key <AE08> { [ 8, asterisk ] };
key <AE09> { [ 9, parenleft ] };
key <AE10> { [ 0, parenright ] };
key <AE11> { [ minus, underscore ] };
key <AE12> { [ equal, plus ] };
key <AB08> { [ comma, less ] };
key <AB09> { [ period, greater ] };
key <AB10> { [ slash, question ] };
key <BKSL> { [ U10B04, U10B05 ] };
key <LSGT> { [ U10B04, U10B05 ] };
};

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

@@ -19,11 +19,6 @@
ipv6 = "42:0:3c46:f7a9:1f0a:1b2b:822a:6050"; ipv6 = "42:0:3c46:f7a9:1f0a:1b2b:822a:6050";
}; };
fatteh = {
ipv6 = "42:0:3c46:aa73:82b0:14d7:7bf8:bf2";
ipv4 = "10.243.2.77";
};
manakish = { manakish = {
ipv4 = "10.243.2.85"; ipv4 = "10.243.2.85";
ipv6 = "42:0:3c46:ac99:ae36:cb8:c551:ba27"; ipv6 = "42:0:3c46:ac99:ae36:cb8:c551:ba27";

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];
} }
{ {
@@ -1911,14 +1883,9 @@ in
stream = "https://divyavani.radioca.st/stream"; stream = "https://divyavani.radioca.st/stream";
} }
{ {
station = "Sanskrit Bharati"; station = "XXX sanskrit radio";
tags = [tags.text tags.indian]; tags = [tags.text tags.indian];
stream = "https://stream-23.zeno.fm/m08mkwsyw8quv"; stream = "https://stream-23.zeno.fm/m08mkwsyw8quv?zs=0w7MJFPdRfavhR_zPt0M2g";
}
{
stream = "http://epsilon.shoutca.st:8070/stream";
tags = [tags.text tags.indian tags.holy];
station = "Divyavani Sanskrit Radio";
} }
{ {
station = "Radio Mariam Arabic"; station = "Radio Mariam Arabic";
@@ -1970,60 +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];
}
{
stream = "https://liveradio.swr.de/sw282p3/swr4lu/";
station = "SWR3 Ludwigshafen";
tags = [tags.top40 tags.pop];
}
{
stream = "http://mp3.ffh.de/radioffh/hqlivestream.mp3";
station = "Hitradio FFH";
}
] ]
++ 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
@@ -2050,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
@@ -109,7 +136,6 @@ augroup filetypes
autocmd filetype haskell packadd haskell-vim | set keywordprg=hoogle\ -i autocmd filetype haskell packadd haskell-vim | set keywordprg=hoogle\ -i
autocmd filetype javascript packadd vim-javascript autocmd filetype javascript packadd vim-javascript
autocmd filetype make setlocal noexpandtab autocmd filetype make setlocal noexpandtab
autocmd filetype tsv setlocal noexpandtab
autocmd filetype html packadd emmet-vim autocmd filetype html packadd emmet-vim
autocmd filetype gitcommit setlocal spell spelllang=en autocmd filetype gitcommit setlocal spell spelllang=en
autocmd filetype mail setlocal spell spelllang=de textwidth=0 autocmd filetype mail setlocal spell spelllang=de textwidth=0
@@ -122,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

@@ -28,13 +28,6 @@
example = "*:0/3"; example = "*:0/3";
default = "daily"; default = "daily";
}; };
loadCredential = lib.mkOption {
type = lib.types.listOf lib.types.string;
description = ''
This can be used to pass secrets to the systemd service without adding them to the nix store.
'';
default = [];
};
reporters = lib.mkOption { reporters = lib.mkOption {
type = lib.types.listOf lib.types.path; type = lib.types.listOf lib.types.path;
description = '' description = ''
@@ -89,8 +82,6 @@
Group = "panoptikon"; Group = "panoptikon";
WorkingDirectory = "/var/lib/panoptikon"; WorkingDirectory = "/var/lib/panoptikon";
Restart = "on-failure"; Restart = "on-failure";
StartLimitBurst = 5;
RestartSec = 30;
}; };
script = '' script = ''
${pkgs.git}/bin/git init --quiet ${pkgs.git}/bin/git init --quiet
@@ -111,7 +102,6 @@
WorkingDirectory = "/var/lib/panoptikon"; WorkingDirectory = "/var/lib/panoptikon";
RestartSec = "60"; RestartSec = "60";
Restart = "on-failure"; Restart = "on-failure";
LoadCredential = watcherOptions.loadCredential;
}; };
unitConfig = { unitConfig = {
StartLimitIntervalSec = "300"; StartLimitIntervalSec = "300";
@@ -123,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,5 +0,0 @@
{
haskell,
haskellPackages,
}:
haskell.lib.dontCheck (haskell.lib.unmarkBroken (haskell.lib.doJailbreak haskellPackages.brassica))

View File

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

View File

@@ -1,102 +0,0 @@
{
lib,
writers,
dmenu,
bc,
psmisc,
util-linux,
xorg,
gawk,
libnotify,
arandr,
gnugrep,
coreutils,
}:
writers.writeDashBin "dmenu-randr" ''
#!/bin/sh
export PATH=${lib.makeBinPath [dmenu bc psmisc util-linux xorg.xrandr gawk libnotify arandr gnugrep coreutils]}
# A UI for detecting and selecting all displays. Probes xrandr for connected
# displays and lets user select one to use. User may also select "manual
# selection" which opens arandr.
twoscreen() { # If multi-monitor is selected and there are two screens.
mirror=$(printf "no\\nyes" | dmenu -i -p "Mirror displays?")
# Mirror displays using native resolution of external display and a scaled
# version for the internal display
if [ "$mirror" = "yes" ]; then
external=$(echo "$screens" | dmenu -i -p "Optimize resolution for:")
internal=$(echo "$screens" | grep -v "$external")
res_external=$(xrandr --query | sed -n "/^$external/,/\+/p" | \
tail -n 1 | awk '{print $1}')
res_internal=$(xrandr --query | sed -n "/^$internal/,/\+/p" | \
tail -n 1 | awk '{print $1}')
res_ext_x=$(echo "$res_external" | sed 's/x.*//')
res_ext_y=$(echo "$res_external" | sed 's/.*x//')
res_int_x=$(echo "$res_internal" | sed 's/x.*//')
res_int_y=$(echo "$res_internal" | sed 's/.*x//')
scale_x=$(echo "$res_ext_x / $res_int_x" | bc -l)
scale_y=$(echo "$res_ext_y / $res_int_y" | bc -l)
xrandr --output "$external" --auto --scale 1.0x1.0 \
--output "$internal" --auto --same-as "$external" \
--scale "$scale_x"x"$scale_y"
else
primary=$(echo "$screens" | dmenu -i -p "Select primary display:")
secondary=$(echo "$screens" | grep -v "$primary")
direction=$(printf "left-of\\nright-of\\nabove\\nbelow" | dmenu -i -p "What side of $primary should $secondary be on?")
xrandr --output "$primary" --auto --scale 1.0x1.0 --output "$secondary" --"$direction" "$primary" --auto --scale 1.0x1.0
fi
}
morescreen() { # If multi-monitor is selected and there are more than two screens.
primary=$(echo "$screens" | dmenu -i -p "Select primary display:")
secondary=$(echo "$screens" | grep -v "$primary" | dmenu -i -p "Select secondary display:")
direction=$(printf "left\\nright" | dmenu -i -p "What side of $primary should $secondary be on?")
tertiary=$(echo "$screens" | grep -v "$primary" | grep -v "$secondary" | dmenu -i -p "Select third display:")
xrandr --output "$primary" --auto --output "$secondary" --"$direction"-of "$primary" --auto --output "$tertiary" --"$(printf "left\\nright" | grep -v "$direction")"-of "$primary" --auto
}
multimon() { # Multi-monitor handler.
case "$(echo "$screens" | wc -l)" in
2) twoscreen ;;
*) morescreen ;;
esac ;}
onescreen() { # If only one output available or chosen.
xrandr --output "$1" --auto --scale 1.0x1.0 $(echo "$allposs" | grep -v "\b$1" | awk '{print "--output", $1, "--off"}' | paste -sd ' ' -)
}
postrun() { # Stuff to run to clean up.
{ killall dunst ; setsid -f dunst ;} >/dev/null 2>&1 # Restart dunst to ensure proper location on screen
}
# Get all possible displays
allposs=$(xrandr -q | grep "connected")
# Get all connected screens.
screens=$(echo "$allposs" | awk '/ connected/ {print $1}')
# If there's only one screen
[ "$(echo "$screens" | wc -l)" -lt 2 ] &&
{ onescreen "$screens"; postrun; notify-send "💻 Only one screen detected." "Using it in its optimal settings..."; exit ;}
# Get user choice including multi-monitor and manual selection:
# reenable if you sometimes want single display
chosen=$(printf "%s\\nmulti-monitor\\nmanual selection" "$screens" | dmenu -i -p "Select display arangement:") &&
case "$chosen" in
"manual selection") arandr ; exit ;;
"multi-monitor") multimon ;;
*) onescreen "$chosen" ;;
esac
postrun
''

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'
''

View File

@@ -1,80 +0,0 @@
{ symlinkJoin
, hledger
, writers
, lib
, git
, coreutils
, gnugrep
, timeLedger
, ...
}:
let
date = "${coreutils}/bin/date +'%Y-%m-%d %H:%M:%S'";
hora = writers.writeDashBin "hora" "${hledger}/bin/hledger -f ${lib.escapeShellArg timeLedger} \"$@\"";
hora-edit = writers.writeDashBin "hora-edit" "$EDITOR ${lib.escapeShellArg timeLedger}";
hora-status = writers.writeDashBin "hora-status" "${coreutils}/bin/tac ${lib.escapeShellArg timeLedger} | ${gnugrep}/bin/grep -m 1 .";
hora-start = writers.writeDashBin "hora-start" ''
last_nonempty_line=$(${hora-status}/bin/hora-status)
(echo $last_nonempty_line | ${gnugrep}/bin/grep -q "^o") || {
echo "Last activity must be closed: $last_nonempty_line" >/dev/stderr
exit 1
}
account=$1
(${hora}/bin/hora accounts | ${gnugrep}/bin/grep -q "^$account\$") || {
echo "The account '$account' is not known. Please add manually."
exit 1
}
message=$2
date=$(${date})
echo "i $date $account $message\n" >> "${timeLedger}"
echo "Started $account at $date" >/dev/stderr
'';
hora-stop = writers.writeDashBin "hora-stop" ''
last_nonempty_line=$(${hora-status}/bin/hora-status)
(echo $last_nonempty_line | ${gnugrep}/bin/grep "^i") || {
echo "Last activity cannot be closed: $last_nonempty_line" >/dev/stderr
exit 1
}
last_activity=$(echo "$last_nonempty_line" | ${coreutils}/bin/cut -d' ' -f 4)
date=$(${date})
echo "o $date\n" >> ${timeLedger}
echo "Stopped $last_activity at $date" >/dev/stderr
'';
hora-year = writers.writeDashBin "hora-year" ''
${hora}/bin/hora balance --tree --monthly --begin $(${coreutils}/bin/date +%Y) --depth 1
'';
hora-git = writers.writeDashBin "hora-git" ''
directory=$(${coreutils}/bin/dirname ${lib.escapeShellArg timeLedger})
if [ $# -gt 0 ]
then
${git}/bin/git -C "$directory" --all --message=$(${date})
else
${git}/bin/git -C "$directory" "$@"
fi
'';
hora-weekly = writers.writeDashBin "hora-weekly" ''
${hora}/bin/hora register -p weekly --depth 1 --empty
'';
in
symlinkJoin {
name = "hora";
paths = [
hora
hora-edit
hora-start
hora-status
hora-stop
hora-year
hora-git
hora-weekly
];
}

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

@@ -10,7 +10,7 @@ stdenv.mkDerivation {
src = fetchgit { src = fetchgit {
url = "https://github.com/jgm/pandoc"; url = "https://github.com/jgm/pandoc";
rev = pandoc.version; rev = pandoc.version;
hash = "sha256-4VDfRUr6TyF4oZsCve9t6FlEN0AqzYdlYXRny+SAcsY="; sha256 = "sha256-8mkHbHoXrkgcXZ/rYlVh2fhL12WjcTt97a1W+oYVYOs=";
}; };
buildPhase = '' buildPhase = ''
mkdir -p $out/man/man1 mkdir -p $out/man/man1

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

@@ -4,7 +4,7 @@
}: let }: let
streams-tsv = pkgs.fetchurl { streams-tsv = pkgs.fetchurl {
url = "https://raw.githubusercontent.com/jnk22/kodinerds-iptv/master/iptv/kodi/kodi_tv.m3u"; url = "https://raw.githubusercontent.com/jnk22/kodinerds-iptv/master/iptv/kodi/kodi_tv.m3u";
sha256 = "sha256-EZEshHWUejLTy6qsBhELfaYdDpQ/uqPsZa1JA0mb7h0="; sha256 = "sha256-gbHV37Yo+D3TYfDXZyb9IX8aRsguZ3qG2SYlY8NsTL0=";
postFetch = '' postFetch = ''
${pkgs.gnused}/bin/sed '/#EXTM3U/d;/#EXTINF/s/.*,//g' $out | ${pkgs.coreutils}/bin/paste -d'\t' - - > $out.tmp ${pkgs.gnused}/bin/sed '/#EXTM3U/d;/#EXTINF/s/.*,//g' $out | ${pkgs.coreutils}/bin/paste -d'\t' - - > $out.tmp
mv $out.tmp $out mv $out.tmp $out

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];
};
}

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