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

42 Commits

Author SHA1 Message Date
2e96539faa feat(tahina): init as guest laptop 2022-03-29 00:21:20 +02:00
e08eb0e970 feat(tahina): init 2022-03-28 20:47:55 +02:00
012d78cc0e feat(ssh): add tahina 2022-03-28 20:47:55 +02:00
github-actions[bot]
62f52922b8 flake.lock: Update
Flake lock file updates:

• Updated input 'flake-utils':
    'github:numtide/flake-utils/3cecb5b042f7f209c56ffd8371b2711a290ec797' (2022-02-07)
  → 'github:numtide/flake-utils/0f8662f1319ad6abf89b3380dd2722369fc51ade' (2022-03-26)
• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/2c66a7a6e036971c4847cca424125f55b9eb0b0b' (2022-03-17)
  → 'github:NixOS/nixpkgs/d2caa9377539e3b5ff1272ac3aa2d15f3081069f' (2022-03-22)
• Updated input 'nixpkgs-unstable':
    'github:NixOS/nixpkgs/b8f8b90b90ac713eb7f5cc7eb2100141ee29751d' (2022-03-20)
  → 'github:NixOS/nixpkgs/6de161729c81dc98e844793cc9c8fda29d5ef62a' (2022-03-26)
• Updated input 'scripts':
    'github:kmein/scripts/d34a8161ba11135a45d3141dc9af482db945d63c' (2021-12-13)
  → 'github:kmein/scripts/d1d525b92a34e55b1ad886807c284106e58716b2' (2022-03-26)
• Updated input 'stockholm':
    'git+https://cgit.lassul.us/stockholm?ref=master&rev=b1068cadc4458d91889b7ede847829af33d2b145' (2022-03-15)
  → 'git+https://cgit.lassul.us/stockholm?ref=master&rev=ae9c0b12710b5361d0d45510eb401eebfc1b3fb0' (2022-03-25)
2022-03-27 00:46:44 +00:00
28d359c73b fix(kabsa): dont fail if sdcard not present 2022-03-25 17:06:09 +01:00
8830147359 feat: git-absorb 2022-03-23 19:07:20 +01:00
e9adccacd9 feat: cdt, vit 2022-03-23 19:07:20 +01:00
github-actions[bot]
588ec3d180 flake.lock: Update
Flake lock file updates:

• Updated input 'home-manager':
    'github:nix-community/home-manager/2860d7e3bb350f18f7477858f3513f9798896831' (2022-02-04)
  → 'github:nix-community/home-manager/a8d00f5c038cf7ec54e7dac9c57b171c1217f008' (2022-03-13)
• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/bacbfd713b4781a4a82c1f390f8fe21ae3b8b95b' (2022-03-10)
  → 'github:NixOS/nixpkgs/2c66a7a6e036971c4847cca424125f55b9eb0b0b' (2022-03-17)
• Updated input 'nixpkgs-unstable':
    'github:NixOS/nixpkgs/b783c48432cdfc35224a39bd95666daa62fef126' (2022-03-13)
  → 'github:NixOS/nixpkgs/b8f8b90b90ac713eb7f5cc7eb2100141ee29751d' (2022-03-20)
• Updated input 'retiolum':
    'github:krebs/retiolum/5858b524a77cff53f1fbe21e0af3189e52a9654d' (2022-03-13)
  → 'github:krebs/retiolum/de6d7dc9bd671e65f2ee3004b6807625e7553e84' (2022-03-16)
• Updated input 'stockholm':
    'git+https://cgit.lassul.us/stockholm?ref=master&rev=2dc05dbafbd5490be6a9754a55679a6576efbad1' (2022-03-11)
  → 'git+https://cgit.lassul.us/stockholm?ref=master&rev=b1068cadc4458d91889b7ede847829af33d2b145' (2022-03-15)
2022-03-20 08:11:31 +01:00
6ea8500818 feat(chromium): update extensions 2022-03-16 20:13:15 +01:00
bf6c82a11d feat(ssh): add oracle 2022-03-16 20:12:50 +01:00
9c68ff20bc feat(home-assistant): run on home.kmein.r 2022-03-13 17:25:06 +01:00
2565bfbc27 feat(streams): explore more 2022-03-13 11:17:28 +01:00
a4d002e293 chore: format 2022-03-13 10:31:19 +01:00
730070bc9d feat: rofi-hass 2022-03-13 10:30:42 +01:00
6f1f1887b9 feat(pass): install import and genphrase extensions, kill bitwarden 2022-03-13 10:29:50 +01:00
github-actions[bot]
68f8bb06f4 flake.lock: Update
Flake lock file updates:

• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/47cd6702934434dd02bc53a67dbce3e5493e33a2' (2022-03-04)
  → 'github:NixOS/nixpkgs/bacbfd713b4781a4a82c1f390f8fe21ae3b8b95b' (2022-03-10)
• Updated input 'nixpkgs-unstable':
    'github:NixOS/nixpkgs/a173e92ee458878651356b9bcfb1e2b5145f76af' (2022-03-05)
  → 'github:NixOS/nixpkgs/b783c48432cdfc35224a39bd95666daa62fef126' (2022-03-13)
• Updated input 'retiolum':
    'github:krebs/retiolum/259d60325310b728f79c68dc1148f597e097d1b2' (2022-02-28)
  → 'github:krebs/retiolum/e488402be7f60a478c95a4bad6d6e2c67f2b55f9' (2022-03-10)
• Updated input 'stockholm':
    'git+https://cgit.lassul.us/stockholm?ref=master&rev=87a44dd1573cbdc8f0fc3553b0896b470bcfa44d' (2022-03-03)
  → 'git+https://cgit.lassul.us/stockholm?ref=master&rev=2dc05dbafbd5490be6a9754a55679a6576efbad1' (2022-03-11)
2022-03-13 00:38:35 +00:00
7afe712c27 feat: electrum 2022-03-12 13:03:54 +01:00
1946a30b2f feat(home-assistant): install cli 2022-03-12 13:03:54 +01:00
c1f013fc2f feat(weechat): update channels 2022-03-11 10:22:57 +01:00
3be0766a7a feat(mpv): add visualizer 2022-03-11 00:04:53 +01:00
5216f693a1 feat(restic): backup home-assistant state 2022-03-10 23:11:36 +01:00
ab3de7a042 feat(home-assistant): run in podman on zaatar 2022-03-10 22:59:43 +01:00
de6d91297b feat(vim): respect https://github.com/romainl/idiomatic-vimrc 2022-03-10 22:29:57 +01:00
6342fb9047 feat(tmux): improve config 2022-03-10 22:15:52 +01:00
d37e90cb97 chore: format with alejandra 2022-03-10 21:52:20 +01:00
github-actions[bot]
13727abfd6 flake.lock: Update
Flake lock file updates:

• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/4275a321beab5a71872fb7a5fe5da511bb2bec73' (2022-02-23)
  → 'github:NixOS/nixpkgs/47cd6702934434dd02bc53a67dbce3e5493e33a2' (2022-03-04)
• Updated input 'nixpkgs-unstable':
    'github:NixOS/nixpkgs/6f21ff94fc44af21973c6fdae6e03323382b7909' (2022-02-26)
  → 'github:NixOS/nixpkgs/a173e92ee458878651356b9bcfb1e2b5145f76af' (2022-03-05)
• Updated input 'retiolum':
    'github:krebs/retiolum/5e69ac7782c7d384a4b6cad4619dd83aa952426f' (2022-02-22)
  → 'github:krebs/retiolum/259d60325310b728f79c68dc1148f597e097d1b2' (2022-02-28)
• Updated input 'stockholm':
    'git+https://cgit.lassul.us/stockholm?ref=master&rev=a67ded588b45c09ca58a3b4007a8d32e42323613' (2022-02-26)
  → 'git+https://cgit.lassul.us/stockholm?ref=master&rev=87a44dd1573cbdc8f0fc3553b0896b470bcfa44d' (2022-03-03)
2022-03-06 00:39:35 +00:00
a23f0c80a2 feat(urlwatch): lisalittmann.de 2022-03-05 13:46:09 +01:00
b0b19c3989 feat(networkmanager): enable applet 2022-03-05 13:46:09 +01:00
ef223a9717 feat(weechat): hackint works now 2022-03-05 13:46:09 +01:00
ecfc2ca06c fix(weechat): no sasl 2022-03-05 13:46:09 +01:00
cd7e688a46 feat(weechat): #flipdot-berlin 2022-03-05 13:46:09 +01:00
github-actions[bot]
f7b9008ed0 flake.lock: Update
Flake lock file updates:

• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/40ef692a55b188b1f5ae3967f3fc7808838c3f1d' (2022-02-20)
  → 'github:NixOS/nixpkgs/4275a321beab5a71872fb7a5fe5da511bb2bec73' (2022-02-23)
• Updated input 'nixpkgs-unstable':
    'github:NixOS/nixpkgs/856fbb7e322fd9c7e951d42a792957b84f0b0bb6' (2022-02-23)
  → 'github:NixOS/nixpkgs/6f21ff94fc44af21973c6fdae6e03323382b7909' (2022-02-26)
• Updated input 'stockholm':
    'git+https://cgit.lassul.us/stockholm?ref=master&rev=442319c8949c85b32071fc4e694938b480637770' (2022-02-19)
  → 'git+https://cgit.lassul.us/stockholm?ref=master&rev=a67ded588b45c09ca58a3b4007a8d32e42323613' (2022-02-26)
2022-02-27 00:40:13 +00:00
81706489b5 feat: bye bye horoscopy 2022-02-25 07:08:50 +01:00
817f57ad09 fix: dont pin matterbridge 2022-02-23 19:25:04 +01:00
eafb1ce0c3 chore: update nixpkgs 2022-02-23 19:24:09 +01:00
0c72a89760 feat(streams): use lassulus radio as described in irc topic 2022-02-22 21:52:41 +01:00
a7db357e54 feat(radio-news): most recent commits show 2022-02-22 21:52:17 +01:00
1ad6c63a2f feat(makanek): redaktion.r 2022-02-22 20:41:55 +01:00
502ab93585 fix(restic): runuser correctly 2022-02-21 20:09:35 +01:00
github-actions[bot]
fe6bda3cf2 flake.lock: Update
Flake lock file updates:

• Updated input 'flake-utils':
    'github:numtide/flake-utils/74f7e4319258e287b0f9cb95426c9853b282730b' (2021-11-28)
  → 'github:numtide/flake-utils/846b2ae0fc4cc943637d3d1def4454213e203cba' (2022-01-20)
• Updated input 'home-manager':
    'github:nix-community/home-manager/697cc8c68ed6a606296efbbe9614c32537078756' (2021-12-18)
  → 'github:nix-community/home-manager/2860d7e3bb350f18f7477858f3513f9798896831' (2022-02-04)
• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/5d3420c1285073d5061a5d88a533b347d1222750' (2022-01-10)
  → 'github:NixOS/nixpkgs/d49a447c18eac3c1639b99550df08b43948b28e0' (2022-02-06)
• Updated input 'nixpkgs-unstable':
    'github:NixOS/nixpkgs/bd20b7f07fd337b2e85420edd642382a2cc0196d' (2022-01-11)
  → 'github:NixOS/nixpkgs/91e0ecf1f103170237df3628c2c46cfe75212867' (2022-02-06)
• Updated input 'retiolum':
    'github:krebs/retiolum/23e04565a0360d31605a6c6cdc1becb5b9f76f32' (2022-01-28)
  → 'github:krebs/retiolum/ccf6324d29277b8c033a2275850eb7b09227f403' (2022-02-02)
• Updated input 'stockholm':
    'git+https://cgit.lassul.us/stockholm?ref=master&rev=f67bd5783d6ed2be836c7714ea38cbb3f7ac7257' (2022-01-09)
  → 'git+https://cgit.lassul.us/stockholm?ref=master&rev=332d4f5e1719df2b27f835c4fd0718317867043c' (2022-02-03)
2022-02-20 07:03:04 +01:00
c64e681ada feat(weechat): update channels 2022-02-19 12:10:04 +01:00
af813cc876 feat(urlwatch): more urls 2022-02-19 12:09:31 +01:00
167 changed files with 4907 additions and 3524 deletions

104
ci.nix
View File

@@ -1,27 +1,36 @@
{ inputs, system, name }: {
let inputs,
system,
name,
}: let
inherit (inputs) nixpkgs; inherit (inputs) nixpkgs;
pkgs = nixpkgs.legacyPackages.${system}; pkgs = nixpkgs.legacyPackages.${system};
ensureFiles = paths: pkgs.runCommand "directory" {} '' ensureFiles = paths:
set -efu pkgs.runCommand "directory" {} ''
mkdir $out set -efu
cd $out mkdir $out
${nixpkgs.lib.concatMapStringsSep "\n" (path: '' cd $out
mkdir -p "$(dirname ${nixpkgs.lib.escapeShellArg path})" ${
echo foo > ${nixpkgs.lib.escapeShellArg path} nixpkgs.lib.concatMapStringsSep "\n" (path: ''
'') paths} mkdir -p "$(dirname ${nixpkgs.lib.escapeShellArg path})"
''; echo foo > ${nixpkgs.lib.escapeShellArg path}
'')
paths
}
'';
nixPath = nixpkgs.lib.concatStringsSep ":" ([ nixPath = nixpkgs.lib.concatStringsSep ":" ([
"niveum=${toString ./.}" "niveum=${toString ./.}"
"nixos-config=${toString ./.}/systems/${name}/configuration.nix" "nixos-config=${toString ./.}/systems/${name}/configuration.nix"
"system-secrets=${systemSecrets}" "system-secrets=${systemSecrets}"
"secrets=${sharedSecrets}" "secrets=${sharedSecrets}"
] ++ nixpkgs.lib.mapAttrsToList (name: value: "${name}=${value}") inputs); ]
++ nixpkgs.lib.mapAttrsToList (name: value: "${name}=${value}") inputs);
# cd ~/.password-store/shared && find * -type f | sed 's/.gpg$//' # cd ~/.password-store/shared && find * -type f | sed 's/.gpg$//'
sharedSecrets = ensureFiles [ sharedSecrets = ensureFiles [
"di.fm/key" "di.fm/key"
"eduroam/identity" "eduroam/identity"
"eduroam/password" "eduroam/password"
"hass/token"
"mail/cock" "mail/cock"
"mail/fastmail" "mail/fastmail"
"mail/gmail/amroplay" "mail/gmail/amroplay"
@@ -37,31 +46,38 @@ let
"spotify/username" "spotify/username"
"spotify/password" "spotify/password"
]; ];
systemSecrets = let basic = [ "retiolum.ed25519" "retiolum.key" "syncthing/cert.pem" "syncthing/key.pem"]; in { systemSecrets = let
zaatar = ensureFiles ([ "moodle.token" "telegram/moodle-dl.token" "mpd-web.key" ] ++ basic); basic = ["retiolum.ed25519" "retiolum.key" "syncthing/cert.pem" "syncthing/key.pem"];
kabsa = ensureFiles basic; in
manakish = ensureFiles basic; {
makanek = ensureFiles ([ zaatar = ensureFiles (["moodle.token" "telegram/moodle-dl.token" "mpd-web.key"] ++ basic);
"irc/retiolum" kabsa = ensureFiles basic;
"irc/hackint" manakish = ensureFiles basic;
"irc/libera" tahina = ensureFiles basic;
"irc/oftc" makanek = ensureFiles ([
"matrix/nibbana" "irc/retiolum"
"maxmind/license.key" "irc/hackint"
"moodle-dl/faye.token" "irc/libera"
"nextcloud/admin" "irc/oftc"
"nextcloud/database" "matrix/nibbana"
"telegram/nachtischsatan.token" "maxmind/license.key"
"telegram/reverse.token" "moodle-dl/faye.token"
"telegram/odyssey.token" "nextcloud/admin"
"telegram/betacode.token" "nextcloud/database"
"telegram/moodle-dl.token" "telegram/nachtischsatan.token"
"telegram/proverb.token" "telegram/reverse.token"
"telegram/menstruation.token" "telegram/odyssey.token"
"telegram/cool_village.token" "telegram/betacode.token"
"telegram/kmein.token" "telegram/moodle-dl.token"
"telegram/prometheus.token" "telegram/proverb.token"
"weechat/relay" "telegram/menstruation.token"
] ++ basic); "telegram/cool_village.token"
}.${name}; "telegram/kmein.token"
in toString (pkgs.writers.writeDash "build" "NIX_PATH=${nixPath} nix-build '<nixpkgs/nixos>' -A system --dry-run") "telegram/prometheus.token"
"weechat/relay"
]
++ basic);
}
.${name};
in
toString (pkgs.writers.writeDash "build" "NIX_PATH=${nixPath} nix-build '<nixpkgs/nixos>' -A system --dry-run")

View File

@@ -1,21 +1,24 @@
{ pkgs, lib, config, ... }:
{ {
pkgs,
lib,
config,
...
}: {
environment.variables.TERMINAL = "alacritty"; environment.variables.TERMINAL = "alacritty";
environment.systemPackages = [ environment.systemPackages = [
pkgs.alacritty pkgs.alacritty
]; ];
home-manager.users.me.xdg.configFile = home-manager.users.me.xdg.configFile = let
let
inherit (import <niveum/lib>) colours; inherit (import <niveum/lib>) colours;
colourNames = [ "black" "red" "green" "yellow" "blue" "magenta" "cyan" "white" ]; colourNames = ["black" "red" "green" "yellow" "blue" "magenta" "cyan" "white"];
colourPairs = lib.getAttrs colourNames colours; colourPairs = lib.getAttrs colourNames colours;
in { in {
"alacritty/alacritty.yml".source = (pkgs.formats.yaml {}).generate "alacritty.yml" { "alacritty/alacritty.yml".source = (pkgs.formats.yaml {}).generate "alacritty.yml" {
background_opacity = 0.9; background_opacity = 0.9;
colors = { colors = {
primary = { inherit (colours) background foreground; }; primary = {inherit (colours) background foreground;};
normal = lib.mapAttrs (_: colour: colour.dark) colourPairs; normal = lib.mapAttrs (_: colour: colour.dark) colourPairs;
bright = lib.mapAttrs (_: colour: colour.bright) colourPairs; bright = lib.mapAttrs (_: colour: colour.bright) colourPairs;
}; };

View File

@@ -1,12 +1,17 @@
{ pkgs, config, ... }:
let
inherit (import <niveum/lib>) restic;
in
{ {
pkgs,
config,
...
}: let
inherit (import <niveum/lib>) restic;
in {
services.restic.backups.niveum = { services.restic.backups.niveum = {
initialize = true; initialize = true;
inherit (restic) repository; inherit (restic) repository;
timerConfig = { OnCalendar = "8:00"; RandomizedDelaySec = "1h"; }; timerConfig = {
OnCalendar = "8:00";
RandomizedDelaySec = "1h";
};
passwordFile = toString <secrets/restic/password>; passwordFile = toString <secrets/restic/password>;
extraBackupArgs = [ extraBackupArgs = [
"--exclude=/home/kfm/projects/nixpkgs/.git" "--exclude=/home/kfm/projects/nixpkgs/.git"

View File

@@ -1,11 +1,14 @@
{ config, pkgs, ... }:
{ {
config,
pkgs,
...
}: {
boot.extraModulePackages = with config.boot.kernelPackages; [ boot.extraModulePackages = with config.boot.kernelPackages; [
tp_smapi tp_smapi
acpi_call acpi_call
]; ];
boot.kernelModules = [ "tp_smapi" "acpi_call" ]; boot.kernelModules = ["tp_smapi" "acpi_call"];
environment.systemPackages = [ pkgs.tpacpi-bat ]; environment.systemPackages = [pkgs.tpacpi-bat];
services.tlp = { services.tlp = {
enable = true; enable = true;

View File

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

View File

@@ -1,11 +1,15 @@
{ pkgs, lib, ... }: { {
pkgs,
lib,
...
}: {
hardware.bluetooth = { hardware.bluetooth = {
enable = true; enable = true;
settings.General.Enable = settings.General.Enable =
lib.concatStringsSep "," [ "Source" "Sink" "Media" "Socket" ]; lib.concatStringsSep "," ["Source" "Sink" "Media" "Socket"];
}; };
environment.systemPackages = [ pkgs.blueman ]; environment.systemPackages = [pkgs.blueman];
home-manager.users.me = { services.blueman-applet.enable = false; }; home-manager.users.me = {services.blueman-applet.enable = false;};
} }

View File

@@ -1,4 +1,4 @@
{ pkgs, ... }: {pkgs, ...}:
# https://paste.sr.ht/~erictapen/11716989e489b600f237041b6d657fdf0ee17b34 # https://paste.sr.ht/~erictapen/11716989e489b600f237041b6d657fdf0ee17b34
let let
certificate = pkgs.stdenv.mkDerivation rec { certificate = pkgs.stdenv.mkDerivation rec {
@@ -7,7 +7,7 @@ let
1,/DST Root CA X3/d 1,/DST Root CA X3/d
1,/-----END CERTIFICATE-----/p 1,/-----END CERTIFICATE-----/p
''; '';
nativeBuildInputs = with pkgs; [ cacert gnused ]; nativeBuildInputs = with pkgs; [cacert gnused];
phases = "installPhase"; phases = "installPhase";
installPhase = '' installPhase = ''
${pkgs.gnused}/bin/sed -n -f $src ${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt > $out ${pkgs.gnused}/bin/sed -n -f $src ${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt > $out

View File

@@ -1,16 +1,16 @@
{ pkgs, ... }: { {pkgs, ...}: {
programs.chromium = { programs.chromium = {
enable = true; enable = true;
extensions = [ extensions = [
"nngceckbapebfimnlniiiahkandclblb" # BitWarden
# "ihlenndgcmojhcghmfjfneahoeklbjjh" # cVim # "ihlenndgcmojhcghmfjfneahoeklbjjh" # cVim
# "fpnmgdkabkmnadcjpehmlllkndpkmiak" # Wayback Machine # "fpnmgdkabkmnadcjpehmlllkndpkmiak" # Wayback Machine
"cjpalhdlnbpafiamejdnhcphjbkeiagm" # uBlock Origin "cjpalhdlnbpafiamejdnhcphjbkeiagm" # uBlock Origin
"khncfooichmfjbepaaaebmommgaepoid" # Remove YouTube Recommended Videos "pjjgklgkfeoeiebjogplpnibpfnffkng" # undistracted
"nhdogjmejiglipccpnnnanhbledajbpd" # vuejs devtools
]; ];
}; };
environment.systemPackages = [ pkgs.brave ]; environment.systemPackages = [pkgs.brave];
environment.variables.BROWSER = "brave"; environment.variables.BROWSER = "brave";
} }

View File

@@ -1,4 +1,9 @@
{ config, lib, pkgs, ... }: { {
config,
lib,
pkgs,
...
}: {
imports = [ imports = [
<niveum/modules/dropbox.nix> <niveum/modules/dropbox.nix>
]; ];
@@ -50,16 +55,16 @@
cert = toString <system-secrets/syncthing/cert.pem>; cert = toString <system-secrets/syncthing/cert.pem>;
key = toString <system-secrets/syncthing/key.pem>; key = toString <system-secrets/syncthing/key.pem>;
inherit ((import <niveum/lib>).syncthing) devices; inherit ((import <niveum/lib>).syncthing) devices;
folders = folders = let
let cloud-dir = "${config.users.users.me.home}/cloud"; cloud-dir = "${config.users.users.me.home}/cloud";
in { in {
"${cloud-dir}/syncthing/common".devices = [ "kabsa" "manakish" ]; "${cloud-dir}/syncthing/common".devices = ["kabsa" "manakish"];
"${cloud-dir}/syncthing/library".devices = [ "kabsa" "manakish" "heym" ]; "${cloud-dir}/syncthing/library".devices = ["kabsa" "manakish" "heym"];
"${cloud-dir}/syncthing/mundoiu".devices = [ "kabsa" "manakish" "heym" ]; "${cloud-dir}/syncthing/mundoiu".devices = ["kabsa" "manakish" "heym"];
"${cloud-dir}/syncthing/music" = { "${cloud-dir}/syncthing/music" = {
devices = [ "kabsa" "manakish" "heym" "zaatar" ]; devices = ["kabsa" "manakish" "heym" "zaatar"];
id = "music"; id = "music";
};
}; };
};
}; };
} }

View File

@@ -1,5 +1,8 @@
{ config, pkgs, ... }: {
let config,
pkgs,
...
}: let
copyqConfig = pkgs.writers.writeDash "copyq-config" '' copyqConfig = pkgs.writers.writeDash "copyq-config" ''
${pkgs.copyq}/bin/copyq config check_clipboard true ${pkgs.copyq}/bin/copyq config check_clipboard true
${pkgs.copyq}/bin/copyq config check_selection false ${pkgs.copyq}/bin/copyq config check_selection false
@@ -18,10 +21,10 @@ let
${pkgs.copyq}/bin/copyq config text_wrap true ${pkgs.copyq}/bin/copyq config text_wrap true
''; '';
in { in {
environment.systemPackages = [ pkgs.copyq ]; environment.systemPackages = [pkgs.copyq];
systemd.user.services.copyq = { systemd.user.services.copyq = {
wantedBy = [ "graphical-session.target" ]; wantedBy = ["graphical-session.target"];
environment = { environment = {
DISPLAY = ":${toString config.services.xserver.display}"; DISPLAY = ":${toString config.services.xserver.display}";
}; };

View File

@@ -1,5 +1,10 @@
{ pkgs, lib, config, options, ... }: {
let pkgs,
lib,
config,
options,
...
}: let
inherit (lib.strings) makeBinPath; inherit (lib.strings) makeBinPath;
inherit (import <niveum/lib>) localAddresses kieran; inherit (import <niveum/lib>) localAddresses kieran;
in { in {
@@ -7,7 +12,7 @@ in {
<home-manager/nixos> <home-manager/nixos>
<niveum/modules/system-dependent.nix> <niveum/modules/system-dependent.nix>
{ {
boot.supportedFilesystems = [ "ntfs" ]; boot.supportedFilesystems = ["ntfs"];
} }
{ {
nix.nixPath = [ nix.nixPath = [
@@ -23,13 +28,16 @@ in {
dmenu = pkgs.writers.writeDashBin "dmenu" ''exec ${pkgs.rofi}/bin/rofi -dmenu "$@"''; dmenu = pkgs.writers.writeDashBin "dmenu" ''exec ${pkgs.rofi}/bin/rofi -dmenu "$@"'';
gfs-fonts = pkgs.callPackage <niveum/packages/gfs-fonts.nix> {}; gfs-fonts = pkgs.callPackage <niveum/packages/gfs-fonts.nix> {};
tocharian-font = pkgs.callPackage <niveum/packages/tocharian-font.nix> {}; tocharian-font = pkgs.callPackage <niveum/packages/tocharian-font.nix> {};
iolanguage = pkgs.callPackage <niveum/packages/iolanguage.nix> { }; iolanguage = pkgs.callPackage <niveum/packages/iolanguage.nix> {};
ix = pkgs.callPackage <niveum/packages/ix.nix> { }; ix = pkgs.callPackage <niveum/packages/ix.nix> {};
}; };
}; };
overlays = [ overlays = [
(self: super: { (self: super: {
scripts = import <niveum/packages/scripts> { pkgs = super; lib = super.lib; }; scripts = import <niveum/packages/scripts> {
pkgs = super;
lib = super.lib;
};
}) })
]; ];
}; };
@@ -57,8 +65,7 @@ in {
users.users.me = { users.users.me = {
name = "kfm"; name = "kfm";
description = kieran.name; description = kieran.name;
hashedPassword = hashedPassword = "$6$w9hXyGFl/.IZBXk$5OiWzS1G.5hImhh1YQmZiCXYNAJhi3X6Y3uSLupJNYYXPLMsQpx2fwF4Xr2uYzGMV8Foqh8TgUavx1APD9rcb/";
"$6$w9hXyGFl/.IZBXk$5OiWzS1G.5hImhh1YQmZiCXYNAJhi3X6Y3uSLupJNYYXPLMsQpx2fwF4Xr2uYzGMV8Foqh8TgUavx1APD9rcb/";
isNormalUser = true; isNormalUser = true;
uid = 1000; uid = 1000;
}; };
@@ -72,27 +79,28 @@ in {
hardware.pulseaudio = { hardware.pulseaudio = {
enable = true; enable = true;
package = pkgs.pulseaudioFull; package = pkgs.pulseaudioFull;
extraModules = [ pkgs.pulseaudio-modules-bt ]; extraModules = [pkgs.pulseaudio-modules-bt];
# copy server:/run/pulse/.config/pulse/cookie to client:~/.config/pulse/cookie to authenticate a client machine # copy server:/run/pulse/.config/pulse/cookie to client:~/.config/pulse/cookie to authenticate a client machine
zeroconf.discovery.enable = true; zeroconf.discovery.enable = true;
extraConfig = '' extraConfig = ''
load-module ${toString [ load-module ${
"module-tunnel-sink-new" toString [
"server=zaatar.r" "module-tunnel-sink-new"
"sink_name=zaatar" "server=zaatar.r"
"channels=2" "sink_name=zaatar"
"rate=44100" "channels=2"
]} "rate=44100"
]
}
''; '';
}; };
users.users.me.extraGroups = [ "audio" ]; users.users.me.extraGroups = ["audio"];
environment.systemPackages = [ pkgs.pavucontrol pkgs.ncpamixer pkgs.pamixer pkgs.pulsemixer ]; environment.systemPackages = [pkgs.pavucontrol pkgs.ncpamixer pkgs.pamixer pkgs.pulsemixer];
} }
{ {
environment.interactiveShellInit = environment.interactiveShellInit = "export PATH=$PATH:$HOME/projects/niveum";
"export PATH=$PATH:$HOME/projects/niveum";
environment.shellAliases = let environment.shellAliases = let
wcd = pkgs.writers.writeDash "wcd" '' wcd = pkgs.writers.writeDash "wcd" ''
cd "$(readlink "$(${pkgs.which}/bin/which --skip-alias "$1")" | xargs dirname)/.." cd "$(readlink "$(${pkgs.which}/bin/which --skip-alias "$1")" | xargs dirname)/.."
@@ -103,15 +111,18 @@ in {
take = pkgs.writers.writeDash "take" '' take = pkgs.writers.writeDash "take" ''
mkdir "$1" && cd "$1" mkdir "$1" && cd "$1"
''; '';
cdt = pkgs.writers.writeDash "cdt" ''
cd "$(mktemp -d)"
pwd
'';
swallow = command: "${pkgs.scripts.swallow}/bin/swallow ${command}"; swallow = command: "${pkgs.scripts.swallow}/bin/swallow ${command}";
in { in {
"ß" = "${pkgs.utillinux}/bin/setsid"; "ß" = "${pkgs.utillinux}/bin/setsid";
cat = "${pkgs.bat}/bin/bat --style=plain"; cat = "${pkgs.bat}/bin/bat --style=plain";
chromium-incognito = chromium-incognito = "chromium --user-data-dir=$(mktemp -d /tmp/chr.XXXXXX) --no-first-run --incognito";
"chromium --user-data-dir=$(mktemp -d /tmp/chr.XXXXXX) --no-first-run --incognito";
cp = "cp --interactive"; cp = "cp --interactive";
ip = "${pkgs.iproute}/bin/ip -c"; ip = "${pkgs.iproute}/bin/ip -c";
l = "ls --color=auto --time-style=long-iso --almost-all"; l = "ls --color=auto --time-style=long-iso --almost-all";
ls = "ls --color=auto --time-style=long-iso"; ls = "ls --color=auto --time-style=long-iso";
ll = "ls --color=auto --time-style=long-iso -l"; ll = "ls --color=auto --time-style=long-iso -l";
la = "ls --color=auto --time-style=long-iso --almost-all -l"; la = "ls --color=auto --time-style=long-iso --almost-all -l";
@@ -124,6 +135,8 @@ in {
rm = "rm --interactive"; rm = "rm --interactive";
s = "${pkgs.systemd}/bin/systemctl"; s = "${pkgs.systemd}/bin/systemctl";
take = "source ${take}"; take = "source ${take}";
cdt = "source ${cdt}";
vit = "$EDITOR $(mktemp)";
tmux = "${pkgs.tmux}/bin/tmux -2"; tmux = "${pkgs.tmux}/bin/tmux -2";
sxiv = swallow "${pkgs.sxiv}/bin/sxiv"; sxiv = swallow "${pkgs.sxiv}/bin/sxiv";
zathura = swallow "${pkgs.zathura}/bin/zathura"; zathura = swallow "${pkgs.zathura}/bin/zathura";
@@ -131,13 +144,11 @@ in {
wcd = "source ${wcd}"; 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}"; where = "source ${where}";
yt = yt = "${pkgs.youtube-dl}/bin/youtube-dl --add-metadata -ic"; # Download video link
"${pkgs.youtube-dl}/bin/youtube-dl --add-metadata -ic"; # Download video link yta = "${pkgs.youtube-dl}/bin/youtube-dl --add-metadata -xic"; # Download with audio
yta =
"${pkgs.youtube-dl}/bin/youtube-dl --add-metadata -xic"; # Download with audio
}; };
} }
{ i18n.defaultLocale = "en_DK.UTF-8"; } {i18n.defaultLocale = "en_DK.UTF-8";}
{ {
services.xserver = { services.xserver = {
enable = true; enable = true;
@@ -150,7 +161,7 @@ in {
enable = true; enable = true;
greeters.gtk = { greeters.gtk = {
enable = true; enable = true;
indicators = [ "~spacer" "~host" "~spacer" "~session" "~power" ]; indicators = ["~spacer" "~host" "~spacer" "~session" "~power"];
}; };
}; };
}; };
@@ -170,13 +181,13 @@ in {
}; };
}; };
} }
{ programs.command-not-found.enable = true; } {programs.command-not-found.enable = true;}
{ {
programs.gnupg.agent.enable = true; programs.gnupg.agent.enable = true;
environment.systemPackages = [ environment.systemPackages = [
pkgs.gnupg pkgs.gnupg
(pkgs.pass.withExtensions (e: [e.pass-otp])) (pkgs.pass.withExtensions (e: [e.pass-otp e.pass-import e.pass-genphrase]))
]; ];
} }
{ {
@@ -189,10 +200,12 @@ in {
}; };
} }
{ {
networking.hosts = lib.mapAttrs' (name: address: { networking.hosts =
name = address; lib.mapAttrs' (name: address: {
value = [ "${name}.local" ]; name = address;
}) localAddresses; value = ["${name}.local"];
})
localAddresses;
} }
./alacritty.nix ./alacritty.nix
./backup.nix ./backup.nix

View File

@@ -1,5 +1,4 @@
{ pkgs, ... }: {pkgs, ...}: let
let
nixify = pkgs.writers.writeDashBin "nixify" '' nixify = pkgs.writers.writeDashBin "nixify" ''
set -efuC set -efuC
@@ -18,18 +17,18 @@ let
fi fi
''; '';
in { in {
environment.systemPackages = [ pkgs.direnv nixify ]; environment.systemPackages = [pkgs.direnv nixify];
home-manager.users.me.programs.direnv = { home-manager.users.me.programs.direnv = {
enable = true; enable = true;
stdlib = builtins.readFile ("${ stdlib = builtins.readFile "${
pkgs.fetchFromGitHub { pkgs.fetchFromGitHub {
owner = "Mic92"; owner = "Mic92";
repo = "dotfiles"; repo = "dotfiles";
rev = "a0a9b7e358fa70a85cd468f8ca1fbb02ae0a91df"; rev = "a0a9b7e358fa70a85cd468f8ca1fbb02ae0a91df";
sha256 = "1y9h5s1lf59sczsm0ksq2x1yhl98ba9lwk5yil3q53rg7n4574pg"; sha256 = "1y9h5s1lf59sczsm0ksq2x1yhl98ba9lwk5yil3q53rg7n4574pg";
} }
}/home/.direnvrc"); }/home/.direnvrc";
}; };
programs.zsh.interactiveShellInit = '' programs.zsh.interactiveShellInit = ''

View File

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

View File

@@ -1,4 +1,8 @@
{ lib, pkgs, ... }: { {
lib,
pkgs,
...
}: {
virtualisation.docker = { virtualisation.docker = {
enable = true; enable = true;
# for ICE wifi, ref https://gist.github.com/sunsided/7840e89ff4e11b64a2d7503fafa0290c # for ICE wifi, ref https://gist.github.com/sunsided/7840e89ff4e11b64a2d7503fafa0290c
@@ -7,6 +11,6 @@
"--fixed-cidr=172.39.1.0/25" "--fixed-cidr=172.39.1.0/25"
]; ];
}; };
users.users.me.extraGroups = [ "docker" ]; users.users.me.extraGroups = ["docker"];
environment.systemPackages = [ pkgs.docker pkgs.docker_compose ]; environment.systemPackages = [pkgs.docker pkgs.docker_compose];
} }

View File

@@ -1,5 +1,8 @@
{ config, pkgs, ... }: {
let config,
pkgs,
...
}: let
inherit (import <niveum/lib>) defaultApplications colours theme; inherit (import <niveum/lib>) defaultApplications colours theme;
in { in {
home-manager.users.me.services.dunst = { home-manager.users.me.services.dunst = {

View File

@@ -1,5 +1,8 @@
{ lib, pkgs, ... }: {
let lib,
pkgs,
...
}: let
inherit (import <niveum/lib>) defaultApplications; inherit (import <niveum/lib>) defaultApplications;
flameshot-once = flameshot-once =
pkgs.callPackage <stockholm/krebs/5pkgs/simple/flameshot-once> {}; pkgs.callPackage <stockholm/krebs/5pkgs/simple/flameshot-once> {};

View File

@@ -1,5 +1,8 @@
{ config, pkgs, ... }: {
let config,
pkgs,
...
}: let
flixLocation = "/media/flix"; flixLocation = "/media/flix";
cacheLocation = "/var/cache/flix"; cacheLocation = "/var/cache/flix";
indexFilename = "index"; indexFilename = "index";
@@ -35,7 +38,7 @@ in {
systemd.services.flix-index = { systemd.services.flix-index = {
description = "Flix indexing service"; description = "Flix indexing service";
wants = [ "network-online.target" ]; wants = ["network-online.target"];
script = "cp ${flixLocation}/download/index ./${indexFilename}"; script = "cp ${flixLocation}/download/index ./${indexFilename}";
startAt = "hourly"; startAt = "hourly";
serviceConfig = { serviceConfig = {
@@ -74,5 +77,4 @@ in {
| ${pkgs.findutils}/bin/xargs -I '{}' ${pkgs.utillinux}/bin/setsid ${pkgs.xdg_utils}/bin/xdg-open '{}' | ${pkgs.findutils}/bin/xargs -I '{}' ${pkgs.utillinux}/bin/setsid ${pkgs.xdg_utils}/bin/xdg-open '{}'
'') '')
]; ];
} }

View File

@@ -1,4 +1,4 @@
{ pkgs, ... }: { {pkgs, ...}: {
nixpkgs.config.joypixels.acceptLicense = true; nixpkgs.config.joypixels.acceptLicense = true;
fonts = { fonts = {
@@ -33,10 +33,10 @@
tocharian-font tocharian-font
]; ];
fontconfig.defaultFonts = { fontconfig.defaultFonts = {
monospace = [ "JetBrains Mono" "JoyPixels" ]; monospace = ["JetBrains Mono" "JoyPixels"];
serif = [ "Roboto Slab" ]; serif = ["Roboto Slab"];
sansSerif = [ "Roboto" "Noto Sans" ]; sansSerif = ["Roboto" "Noto Sans"];
emoji = [ "JoyPixels" ]; emoji = ["JoyPixels"];
}; };
}; };
} }

View File

@@ -1,9 +1,13 @@
{ pkgs, lib, ... }: { {
pkgs,
lib,
...
}: {
environment = { environment = {
systemPackages = [ pkgs.fzf ]; systemPackages = [pkgs.fzf];
variables = { variables = {
FZF_DEFAULT_OPTS = FZF_DEFAULT_OPTS =
lib.escapeShellArgs [ "--height=40%" "--layout=reverse" ]; lib.escapeShellArgs ["--height=40%" "--layout=reverse"];
FZF_ALT_C_COMMAND = "${pkgs.fd}/bin/fd --type d"; FZF_ALT_C_COMMAND = "${pkgs.fd}/bin/fd --type d";
FZF_ALT_C_OPTS = lib.escapeShellArgs [ FZF_ALT_C_OPTS = lib.escapeShellArgs [
"--preview='${pkgs.tree}/bin/tree -L 1 \"{}\"'" "--preview='${pkgs.tree}/bin/tree -L 1 \"{}\"'"
@@ -12,7 +16,7 @@
]; ];
FZF_CTRL_T_COMMAND = "${pkgs.fd}/bin/fd --type f"; FZF_CTRL_T_COMMAND = "${pkgs.fd}/bin/fd --type f";
FZF_CTRL_T_OPTS = FZF_CTRL_T_OPTS =
lib.escapeShellArgs [ "--preview='${pkgs.bat}/bin/bat \"{}\"'" ]; lib.escapeShellArgs ["--preview='${pkgs.bat}/bin/bat \"{}\"'"];
}; };
}; };

View File

@@ -1,8 +1,11 @@
{ pkgs, config, lib, ... }:
let
inherit (import <niveum/lib>) kieran ignorePaths;
in
{ {
pkgs,
config,
lib,
...
}: let
inherit (import <niveum/lib>) kieran ignorePaths;
in {
environment.systemPackages = [ environment.systemPackages = [
pkgs.mr pkgs.mr
pkgs.git pkgs.git
@@ -10,6 +13,7 @@ in
pkgs.gitAndTools.gh pkgs.gitAndTools.gh
pkgs.gitAndTools.git-extras pkgs.gitAndTools.git-extras
pkgs.gitAndTools.git-trim pkgs.gitAndTools.git-trim
pkgs.gitAndTools.git-absorb
pkgs.gitstats pkgs.gitstats
pkgs.patch pkgs.patch
pkgs.patchutils pkgs.patchutils
@@ -38,8 +42,7 @@ in
diffs = "diff --staged"; diffs = "diff --staged";
last = "log -1 HEAD"; last = "log -1 HEAD";
logs = "log --pretty=oneline"; logs = "log --pretty=oneline";
graph = graph = "log --graph --abbrev-commit --decorate --date=relative --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)' --all";
"log --graph --abbrev-commit --decorate --date=relative --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)' --all";
}; };
ignores = ignorePaths; ignores = ignorePaths;
extraConfig = { extraConfig = {

View File

@@ -1,5 +1,9 @@
{ config, pkgs, ... }: { {
imports = [ <niveum/modules/hledger.nix> ]; config,
pkgs,
...
}: {
imports = [<niveum/modules/hledger.nix>];
niveum.hledger = { niveum.hledger = {
enable = true; enable = true;

View File

@@ -22,8 +22,8 @@
sort_key = "PERCENT_CPU"; sort_key = "PERCENT_CPU";
tree_view = true; 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

@@ -1,5 +1,9 @@
{ config, pkgs, lib, ... }: {
let config,
pkgs,
lib,
...
}: let
inherit (lib.strings) fileContents; inherit (lib.strings) fileContents;
inherit (import <niveum/lib>) sshPort; inherit (import <niveum/lib>) sshPort;
eduroam = { eduroam = {
@@ -32,7 +36,6 @@ in {
options = hu-berlin-cifs-options; options = hu-berlin-cifs-options;
}; };
home-manager.users.me.programs.ssh = { home-manager.users.me.programs.ssh = {
matchBlocks = { matchBlocks = {
"alew.hu-berlin.de" = { "alew.hu-berlin.de" = {
@@ -46,10 +49,11 @@ in {
(pkgs.writers.writeDashBin "hu-ip" '' (pkgs.writers.writeDashBin "hu-ip" ''
${pkgs.w3m}/bin/w3m -dump meineip.hu-berlin.de | head --lines=-4 | tail --lines=+3 ${pkgs.w3m}/bin/w3m -dump meineip.hu-berlin.de | head --lines=-4 | tail --lines=+3
'') '')
(pkgs.writers.writePython3Bin "hu-eduroam-install" (
pkgs.writers.writePython3Bin "hu-eduroam-install"
{ {
libraries = with pkgs.python3Packages; [ distro pyopenssl dbus-python ]; libraries = with pkgs.python3Packages; [distro pyopenssl dbus-python];
flakeIgnore = [ "E501" "E123" "W504" "E722" "F821" "E226" "E126" "E265" "W291" ]; flakeIgnore = ["E501" "E123" "W504" "E722" "F821" "E226" "E126" "E265" "W291"];
} }
(builtins.readFile (builtins.fetchurl { (builtins.readFile (builtins.fetchurl {
url = "https://www.cms.hu-berlin.de/de/dl/netze/wlan/config/eduroam/linux-installer/eduroam-linux-hub.py"; url = "https://www.cms.hu-berlin.de/de/dl/netze/wlan/config/eduroam/linux-installer/eduroam-linux-hub.py";
@@ -60,20 +64,22 @@ in {
systemd.services.hu-vpn = { systemd.services.hu-vpn = {
enable = true; enable = true;
wants = [ "network-online.target" ]; wants = ["network-online.target"];
conflicts = [ "openvpn-hu-berlin.service" ]; conflicts = ["openvpn-hu-berlin.service"];
script = '' script = ''
${pkgs.openfortivpn}/bin/openfortivpn -c ${pkgs.writeText "hu-berlin.config" '' ${pkgs.openfortivpn}/bin/openfortivpn -c ${
host = forti-ssl.vpn.hu-berlin.de pkgs.writeText "hu-berlin.config" ''
port = 443 host = forti-ssl.vpn.hu-berlin.de
trusted-cert = 42193a913d276d9eb86217612956e1e6464d6f07bed5393a4787c87adc4bd359 port = 443
username = ${eduroam.identity}@split_tunnel trusted-cert = 42193a913d276d9eb86217612956e1e6464d6f07bed5393a4787c87adc4bd359
password = ${eduroam.password} username = ${eduroam.identity}@split_tunnel
''} password = ${eduroam.password}
''
}
''; '';
}; };
systemd.services.openvpn-hu-berlin.conflicts = [ "hu-vpn.service" ]; systemd.services.openvpn-hu-berlin.conflicts = ["hu-vpn.service"];
services.openvpn.servers.hu-berlin = { services.openvpn.servers.hu-berlin = {
autoStart = false; autoStart = false;
@@ -82,8 +88,7 @@ in {
password = eduroam.password; password = eduroam.password;
}; };
config = fileContents (pkgs.fetchurl { config = fileContents (pkgs.fetchurl {
url = url = "https://www.cms.hu-berlin.de/de/dl/netze/vpn/openvpn/hu-berlin.ovpn";
"https://www.cms.hu-berlin.de/de/dl/netze/vpn/openvpn/hu-berlin.ovpn";
sha256 = "15b55aibik5460svjq2gwxrcyh6ay4k8savd6cd5lncgndmd8p8h"; sha256 = "15b55aibik5460svjq2gwxrcyh6ay4k8savd6cd5lncgndmd8p8h";
}); });
}; };

View File

@@ -1,5 +1,9 @@
{ config, pkgs, lib, ... }: {
let config,
pkgs,
lib,
...
}: let
inherit (import <niveum/lib>) defaultApplications colours; inherit (import <niveum/lib>) defaultApplications colours;
klem = import <niveum/packages/scripts/klem.nix> { klem = import <niveum/packages/scripts/klem.nix> {
inherit pkgs lib; inherit pkgs lib;
@@ -45,7 +49,6 @@ let
move-to-new-workspace = pkgs.writers.writeDash "new-workspace" '' 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)) 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 {
services.xserver = { services.xserver = {
displayManager.defaultSession = "none+i3"; displayManager.defaultSession = "none+i3";
@@ -73,7 +76,10 @@ in {
home-manager.users.me.xsession.windowManager.i3 = { home-manager.users.me.xsession.windowManager.i3 = {
enable = true; enable = true;
config = rec { config = rec {
fonts = {names = ["Sans"]; size = 10.0;}; fonts = {
names = ["Sans"];
size = 10.0;
};
modifier = "Mod4"; modifier = "Mod4";
window = { window = {
titlebar = false; titlebar = false;
@@ -81,15 +87,15 @@ in {
hideEdgeBorders = "smart"; hideEdgeBorders = "smart";
commands = [ commands = [
{ {
criteria = { class = "floating"; }; criteria = {class = "floating";};
command = "floating enable"; command = "floating enable";
} }
{ {
criteria = { class = "fzfmenu"; }; criteria = {class = "fzfmenu";};
command = "floating enable"; command = "floating enable";
} }
{ {
criteria = { class = "mpv"; }; criteria = {class = "mpv";};
command = lib.strings.concatStringsSep ", " [ command = lib.strings.concatStringsSep ", " [
"floating enable" "floating enable"
"sticky enable" "sticky enable"
@@ -111,51 +117,64 @@ in {
text = colours.foreground; text = colours.foreground;
}; };
in rec { in rec {
focused = scheme // { focused =
border = colours.cyan.bright; scheme
indicator = colours.cyan.bright; // {
childBorder = colours.cyan.bright; border = colours.cyan.bright;
}; indicator = colours.cyan.bright;
unfocused = scheme // { childBorder = colours.cyan.bright;
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 = ["Sans"]; size = 8.0;};
mode = "hide"; # "dock"
position = "bottom";
colors = rec {
background = colours.background;
separator = background;
statusline = colours.foreground;
bindingMode = {
background = colours.red.bright;
border = colours.background;
text = colours.foreground;
}; };
}; unfocused =
statusCommand = "${pkgs.i3status-rust}/bin/i3status-rs ${ 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 = ["Sans"];
size = 8.0;
};
mode = "hide"; # "dock"
position = "bottom";
colors = rec {
background = colours.background;
separator = background;
statusline = colours.foreground;
bindingMode = {
background = colours.red.bright;
border = colours.background;
text = colours.foreground;
};
};
statusCommand = "${pkgs.i3status-rust}/bin/i3status-rs ${
(pkgs.formats.toml {}).generate "i3status-rust.toml" (import <niveum/lib/i3status-rust.nix> { (pkgs.formats.toml {}).generate "i3status-rust.toml" (import <niveum/lib/i3status-rust.nix> {
inherit (config.niveum) batteryName wirelessInterface; inherit (config.niveum) batteryName wirelessInterface;
inherit colours; inherit colours;
inherit pkgs; inherit pkgs;
}) })
}"; }";
}]; }
];
modes.resize = { modes.resize = {
"Escape" = ''mode "default"''; "Escape" = ''mode "default"'';
"Return" = ''mode "default"''; "Return" = ''mode "default"'';
@@ -207,24 +226,24 @@ in {
"${modifier}+Shift+w" = "exec ${pkgs.scripts.k-lock}/bin/k-lock"; "${modifier}+Shift+w" = "exec ${pkgs.scripts.k-lock}/bin/k-lock";
"${modifier}+d" = "exec ${pkgs.writers.writeDash "run" ''exec ${pkgs.rofi}/bin/rofi -modi run,window,ssh,filebrowser -show run''}"; "${modifier}+d" = "exec ${pkgs.writers.writeDash "run" ''exec ${pkgs.rofi}/bin/rofi -modi run,window,ssh,filebrowser -show run''}";
"${modifier}+Shift+d" = "exec ${ "${modifier}+Shift+d" = "exec ${
pkgs.writers.writeDash "notemenu" '' pkgs.writers.writeDash "notemenu" ''
set -efu set -efu
PATH=$PATH:${ PATH=$PATH:${
lib.makeBinPath [ pkgs.rofi pkgs.findutils pkgs.coreutils ] lib.makeBinPath [pkgs.rofi pkgs.findutils pkgs.coreutils]
} }
cd ~/notes cd ~/notes
note_file=$({ note_file=$({
echo diary/$(date -I).md echo diary/$(date -I).md
echo diary/$(date -I -d yesterday).md echo diary/$(date -I -d yesterday).md
find . -type f -printf "%T@ %p\n" | sort --reverse --numeric-sort | cut --delimiter=" " --fields=2 find . -type f -printf "%T@ %p\n" | sort --reverse --numeric-sort | cut --delimiter=" " --fields=2
} | rofi -dmenu -i -p 'notes') } | rofi -dmenu -i -p 'notes')
if test "$note_file" if test "$note_file"
then then
i3-sensible-terminal -e "$EDITOR" "$note_file" i3-sensible-terminal -e "$EDITOR" "$note_file"
fi fi
'' ''
}"; }";
"${modifier}+p" = "exec --no-startup-id ${pkgs.pass}/bin/passmenu -l 5"; "${modifier}+p" = "exec --no-startup-id ${pkgs.pass}/bin/passmenu -l 5";
"${modifier}+u" = "exec ${pkgs.scripts.unicodmenu}/bin/unicodmenu"; "${modifier}+u" = "exec ${pkgs.scripts.unicodmenu}/bin/unicodmenu";

View File

@@ -1,13 +1,17 @@
{ {
networking.firewall = { networking.firewall = {
allowedTCPPortRanges = [{ allowedTCPPortRanges = [
from = 1714; {
to = 1764; from = 1714;
}]; to = 1764;
allowedUDPPortRanges = [{ }
from = 1714; ];
to = 1764; allowedUDPPortRanges = [
}]; {
from = 1714;
to = 1764;
}
];
}; };
home-manager.users.me = { home-manager.users.me = {

View File

@@ -1,17 +1,20 @@
{ pkgs, lib, ... }: {
let commaSep = builtins.concatStringsSep ","; pkgs,
lib,
...
}: let
commaSep = builtins.concatStringsSep ",";
in { in {
services.xserver = { services.xserver = {
layout = commaSep [ "de" "gr" ]; layout = commaSep ["de" "gr"];
xkbVariant = commaSep [ "T3" "polytonic" ]; xkbVariant = commaSep ["T3" "polytonic"];
xkbOptions = xkbOptions =
commaSep [ "compose:caps" "terminate:ctrl_alt_bksp" "grp:ctrls_toggle" ]; commaSep ["compose:caps" "terminate:ctrl_alt_bksp" "grp:ctrls_toggle"];
libinput.enable = true; libinput.enable = true;
}; };
console.keyMap = "de"; console.keyMap = "de";
# improve held key rate # improve held key rate
services.xserver.displayManager.sessionCommands = services.xserver.displayManager.sessionCommands = "${pkgs.xorg.xset}/bin/xset r rate 300 50";
"${pkgs.xorg.xset}/bin/xset r rate 300 50";
} }

View File

@@ -1,5 +1,9 @@
{ config, pkgs, lib, ... }: {
let config,
pkgs,
lib,
...
}: let
davHome = "~/.local/share/dav"; davHome = "~/.local/share/dav";
kmeinCloud = { kmeinCloud = {
davEndpoint = "https://cloud.xn--kiern-0qa.de/remote.php/dav"; davEndpoint = "https://cloud.xn--kiern-0qa.de/remote.php/dav";
@@ -11,14 +15,13 @@ let
username = "kmein"; username = "kmein";
password = lib.fileContents <secrets/nextcloud-fysi/password>; password = lib.fileContents <secrets/nextcloud-fysi/password>;
}; };
in in {
{ environment.systemPackages = [pkgs.khal pkgs.vdirsyncer pkgs.khard pkgs.todoman];
environment.systemPackages = [ pkgs.khal pkgs.vdirsyncer pkgs.khard pkgs.todoman ];
systemd.user.services.vdirsyncer = { systemd.user.services.vdirsyncer = {
enable = true; enable = true;
wants = [ "network-online.target" ]; wants = ["network-online.target"];
wantedBy = [ "default.target" ]; wantedBy = ["default.target"];
startAt = "*:00/10"; startAt = "*:00/10";
script = '' script = ''
${pkgs.vdirsyncer}/bin/vdirsyncer sync ${pkgs.vdirsyncer}/bin/vdirsyncer sync

View File

@@ -1,8 +1,11 @@
{ lib, pkgs, ... }:
{ {
lib,
pkgs,
...
}: {
systemd.services.lb-subscription = { systemd.services.lb-subscription = {
enable = true; enable = true;
wants = [ "network-online.target" ]; wants = ["network-online.target"];
startAt = "weekly"; startAt = "weekly";
serviceConfig = { serviceConfig = {
user = "kfm"; user = "kfm";

View File

@@ -21,7 +21,6 @@
"x-scheme-handler/webcal" = "brave-browser.desktop"; "x-scheme-handler/webcal" = "brave-browser.desktop";
"inode/directory" = "pcmanfm.desktop"; "inode/directory" = "pcmanfm.desktop";
}; };
}; };
}; };
} }

View File

@@ -1,5 +1,8 @@
{ config, pkgs, ... }:
{ {
config,
pkgs,
...
}: {
services.nginx.virtualHosts.default = { services.nginx.virtualHosts.default = {
locations."= /stub_status".extraConfig = "stub_status;"; locations."= /stub_status".extraConfig = "stub_status;";
}; };
@@ -35,40 +38,48 @@
}; };
}; };
networking.firewall.allowedTCPPorts = [ config.services.prometheus.exporters.node.port ]; networking.firewall.allowedTCPPorts = [config.services.prometheus.exporters.node.port];
systemd.services.promtail = { systemd.services.promtail = {
description = "Promtail service for Loki"; description = "Promtail service for Loki";
wantedBy = [ "multi-user.target" ]; wantedBy = ["multi-user.target"];
serviceConfig = { serviceConfig = {
ExecStart = '' ExecStart = ''
${pkgs.grafana-loki}/bin/promtail --config.file ${(pkgs.formats.yaml {}).generate "promtail.yaml" { ${pkgs.grafana-loki}/bin/promtail --config.file ${
server = { (pkgs.formats.yaml {}).generate "promtail.yaml" {
http_listen_port = 28183; server = {
grpc_listen_port = 0; http_listen_port = 28183;
}; grpc_listen_port = 0;
positions.filename = "/tmp/positions.yaml"; };
clients = [ positions.filename = "/tmp/positions.yaml";
{ url = "http://${if config.networking.hostName == "makanek" then "127.0.0.1" else "makanek.r"}:3100/loki/api/v1/push"; } clients = [
]; {
scrape_configs = [ url = "http://${
{ if config.networking.hostName == "makanek"
job_name = "journal"; then "127.0.0.1"
journal = { else "makanek.r"
max_age = "12h"; }:3100/loki/api/v1/push";
labels.job = "systemd-journal"; }
labels.host = config.networking.hostName; ];
}; scrape_configs = [
relabel_configs = [ {
{ job_name = "journal";
source_labels = [ "__journal__systemd_unit" ]; journal = {
target_label = "unit"; max_age = "12h";
} labels.job = "systemd-journal";
]; labels.host = config.networking.hostName;
} };
]; relabel_configs = [
}} {
source_labels = ["__journal__systemd_unit"];
target_label = "unit";
}
];
}
];
}
}
''; '';
}; };
}; };

View File

@@ -1,13 +1,24 @@
{ pkgs, lib, ... }: let {
pkgs,
lib,
config,
...
}: let
swallow = command: "${pkgs.scripts.swallow}/bin/swallow ${command}"; swallow = command: "${pkgs.scripts.swallow}/bin/swallow ${command}";
in { in {
environment.shellAliases.smpv = swallow "mpv"; environment.shellAliases.smpv = swallow "mpv";
nixpkgs.overlays = [
(self: super: {
mpv = config.home-manager.users.me.programs.mpv.finalPackage;
})
];
home-manager.users.me = { home-manager.users.me = {
programs.mpv = { programs.mpv = {
enable = true; enable = true;
config = { config = {
ytdl-raw-options = lib.concatStringsSep "," [ ''sub-lang="de,en"'' "write-sub=" "write-auto-sub=" ]; ytdl-raw-options = lib.concatStringsSep "," [''sub-lang="de,en"'' "write-sub=" "write-auto-sub="];
screenshot-template = "%F-%wH%wM%wS-%#04n"; screenshot-template = "%F-%wH%wM%wS-%#04n";
}; };
bindings = { bindings = {
@@ -22,6 +33,7 @@ in {
}; };
scripts = [ scripts = [
pkgs.mpvScripts.youtube-quality pkgs.mpvScripts.youtube-quality
(pkgs.callPackage <niveum/packages/mpv-visualizer.nix> {})
]; ];
}; };
}; };

View File

@@ -1,5 +1,8 @@
{ pkgs, lib, ... }: {
let pkgs,
lib,
...
}: let
mainMailbox = "posteo"; mainMailbox = "posteo";
accounts.uni = { accounts.uni = {
@@ -113,22 +116,23 @@ let
trash = "[Gmail]/Papierkorb"; trash = "[Gmail]/Papierkorb";
}; };
}; };
in in {
{ environment.systemPackages = [pkgs.neomutt];
environment.systemPackages = [ pkgs.neomutt ];
environment.shellAliases.mua = "${pkgs.neomutt}/bin/neomutt -f ${mainMailbox}"; environment.shellAliases.mua = "${pkgs.neomutt}/bin/neomutt -f ${mainMailbox}";
home-manager.users.me.xdg.configFile."neomutt/neomuttrc".text = '' home-manager.users.me.xdg.configFile."neomutt/neomuttrc".text = ''
set mailcap_path = ${pkgs.writeText "mailcap" '' set mailcap_path = ${
text/plain; $EDITOR %s ; pkgs.writeText "mailcap" ''
text/html; ${pkgs.lynx}/bin/lynx -assume_charset=%{charset} -display_charset=utf-8 -dump %s; nametemplate=%s.html; copiousoutput; text/plain; $EDITOR %s ;
image/*; ${pkgs.sxiv}/bin/sxiv %s ; text/html; ${pkgs.lynx}/bin/lynx -assume_charset=%{charset} -display_charset=utf-8 -dump %s; nametemplate=%s.html; copiousoutput;
video/*; ${pkgs.utillinux}/bin/setsid ${pkgs.mpv}/bin/mpv --quiet %s &; copiousoutput image/*; ${pkgs.sxiv}/bin/sxiv %s ;
audio/*; ${pkgs.mpv}/bin/mpv %s ; video/*; ${pkgs.utillinux}/bin/setsid ${pkgs.mpv}/bin/mpv --quiet %s &; copiousoutput
application/pdf; ${pkgs.zathura}/bin/zathura %s ; audio/*; ${pkgs.mpv}/bin/mpv %s ;
application/pgp-encrypted; ${pkgs.gnupg}/bin/gpg -d '%s'; copiousoutput; application/pdf; ${pkgs.zathura}/bin/zathura %s ;
application/pgp-keys; ${pkgs.gnupg}/bin/gpg --import '%s'; copiousoutput; application/pgp-encrypted; ${pkgs.gnupg}/bin/gpg -d '%s'; copiousoutput;
''}:$mailcap_path application/pgp-keys; ${pkgs.gnupg}/bin/gpg --import '%s'; copiousoutput;
''
}:$mailcap_path
set sidebar_visible set sidebar_visible
set sidebar_format = "%D%?F? [%F]?%* %?N?%N/?%S" set sidebar_format = "%D%?F? [%F]?%* %?N?%N/?%S"
@@ -180,69 +184,78 @@ in
set header_cache="~/.cache/mutt" message_cachedir="~/.cache/mutt" set header_cache="~/.cache/mutt" message_cachedir="~/.cache/mutt"
source ${pkgs.writeText "accounts.neomuttrc" '' source ${
set realname = "Kierán Meinhardt" pkgs.writeText "accounts.neomuttrc" ''
account-hook . 'unset imap_user imap_pass smtp_user smtp_pass' set realname = "Kierán Meinhardt"
# set accordingly: postponed trash record account-hook . 'unset imap_user imap_pass smtp_user smtp_pass'
${lib.concatStringsSep "\n\n" (lib.mapAttrsToList (name: account: let imapRoot = "imaps://${account.user}@${account.imap}"; in '' # set accordingly: postponed trash record
account-hook ${account.user}@${account.imap} 'set imap_user="${account.user}" imap_pass="${account.password}"' ${
account-hook ${account.user}@${account.smtp} 'set smtp_user="${account.user}" smtp_pass="${account.password}"' lib.concatStringsSep "\n\n" (lib.mapAttrsToList (name: account: let
folder-hook ${account.user}@${account.imap} 'set smtp_url="${account.smtpSettings "${account.user}@${account.smtp}"}" from="${account.address}" record="${imapRoot}/${account.folders.sent}" postponed="${imapRoot}/${account.folders.drafts}" trash="${imapRoot}/${account.folders.trash}"' imapRoot = "imaps://${account.user}@${account.imap}";
named-mailboxes "${name}" "${imapRoot}" "${name}" "${imapRoot}/${account.folders.sent}" in ''
'') accounts)} account-hook ${account.user}@${account.imap} 'set imap_user="${account.user}" imap_pass="${account.password}"'
''} account-hook ${account.user}@${account.smtp} 'set smtp_user="${account.user}" smtp_pass="${account.password}"'
folder-hook ${account.user}@${account.imap} 'set smtp_url="${account.smtpSettings "${account.user}@${account.smtp}"}" from="${account.address}" record="${imapRoot}/${account.folders.sent}" postponed="${imapRoot}/${account.folders.drafts}" trash="${imapRoot}/${account.folders.trash}"'
named-mailboxes "${name}" "${imapRoot}" "${name}" "${imapRoot}/${account.folders.sent}"
'')
accounts)
}
''
}
set spoolfile="${mainMailbox}" set spoolfile="${mainMailbox}"
source ${pkgs.writeText "colors.neomuttrc" '' source ${
# Default index colors: pkgs.writeText "colors.neomuttrc" ''
color index_number blue default # Default index colors:
color index red default '.*' color index_number blue default
color index_flags lightcyan default '.*' color index red default '.*'
color index_author yellow default '.*' color index_flags lightcyan default '.*'
color index_subject lightblack default '.*' color index_author yellow default '.*'
color index_subject lightblack default '.*'
# New mail is boldened: # New mail is boldened:
color index_author lightyellow black "~N" color index_author lightyellow black "~N"
color index_subject lightwhite black "~N" color index_subject lightwhite black "~N"
# Flagged mail is highlighted: # Flagged mail is highlighted:
color index_flags lightmagenta default '~F' color index_flags lightmagenta default '~F'
# Other colors and aesthetic settings: # Other colors and aesthetic settings:
mono bold bold mono bold bold
mono underline underline mono underline underline
mono error bold mono error bold
mono indicator reverse mono indicator reverse
# color sidebar_flagged red black # color sidebar_flagged red black
mono sidebar_new bold mono sidebar_new bold
color error red default color error red default
color message cyan default color message cyan default
color search brightmagenta default color search brightmagenta default
color hdrdefault lightblack default color hdrdefault lightblack default
color quoted green default color quoted green default
color quoted1 blue default color quoted1 blue default
color quoted2 cyan default color quoted2 cyan default
color quoted3 yellow default color quoted3 yellow default
color quoted4 red default color quoted4 red default
color quoted5 brightred default color quoted5 brightred default
color signature lightblack default color signature lightblack default
color tree color235 default color tree color235 default
# Regex highlighting: # Regex highlighting:
color header red default "^(Date)" color header red default "^(Date)"
color header yellow default "^(From)" color header yellow default "^(From)"
color header white default "^(B?CC)" color header white default "^(B?CC)"
color header brightwhite default "^(Subject)" color header brightwhite default "^(Subject)"
color body cyan default "[\-\.+_a-zA-Z0-9]+@[\-\.a-zA-Z0-9]+" # Email addresses color body cyan default "[\-\.+_a-zA-Z0-9]+@[\-\.a-zA-Z0-9]+" # Email addresses
color body brightblue default "(https?|ftp)://[\-\.,/%~_:?&=\#a-zA-Z0-9]+" # URL color body brightblue default "(https?|ftp)://[\-\.,/%~_:?&=\#a-zA-Z0-9]+" # URL
color body yellow default "^(\t| )*(-|\\*) \.*" # List items as yellow color body yellow default "^(\t| )*(-|\\*) \.*" # List items as yellow
color body red default "(BAD signature)|^gpg: BAD signature from.*" color body red default "(BAD signature)|^gpg: BAD signature from.*"
color body brightgreen default "(Good signature)|^gpg: Good signature .*" color body brightgreen default "(Good signature)|^gpg: Good signature .*"
color body brightyellow default "^gpg: " color body brightyellow default "^gpg: "
mono body bold "^gpg: Good signature" mono body bold "^gpg: Good signature"
mono body bold "^gpg: BAD signature from.*" mono body bold "^gpg: BAD signature from.*"
color body red default "([a-z][a-z0-9+-]*://(((([a-z0-9_.!~*'();:&=+$,-]|%[0-9a-f][0-9a-f])*@)?((([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?|[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+)(:[0-9]+)?)|([a-z0-9_.!~*'()$,;:@&=+-]|%[0-9a-f][0-9a-f])+)(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?(#([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?|(www|ftp)\\.(([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?(:[0-9]+)?(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?(#([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?)[^].,:;!)? \t\r\n<>\"]" color body red default "([a-z][a-z0-9+-]*://(((([a-z0-9_.!~*'();:&=+$,-]|%[0-9a-f][0-9a-f])*@)?((([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?|[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+)(:[0-9]+)?)|([a-z0-9_.!~*'()$,;:@&=+-]|%[0-9a-f][0-9a-f])+)(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?(#([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?|(www|ftp)\\.(([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?(:[0-9]+)?(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?(#([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?)[^].,:;!)? \t\r\n<>\"]"
''} ''
}
''; '';
} }

View File

@@ -1,21 +1,23 @@
{ pkgs, ... }: { {pkgs, ...}: {
environment.variables.EDITOR = pkgs.lib.mkForce "nvim"; environment.variables.EDITOR = pkgs.lib.mkForce "nvim";
environment.shellAliases.vi = "nvim"; environment.shellAliases.vi = "nvim";
environment.shellAliases.vim = "nvim"; environment.shellAliases.vim = "nvim";
environment.shellAliases.view = "nvim -R"; environment.shellAliases.view = "nvim -R";
nixpkgs.config.packageOverrides = pkgs: { nixpkgs.config.packageOverrides = pkgs: {
vimPlugins = pkgs.vimPlugins // { vimPlugins =
cheat-sh-vim = pkgs.callPackage <niveum/packages/vimPlugins/cheat-sh.nix> { }; pkgs.vimPlugins
vim-fetch = pkgs.callPackage <niveum/packages/vimPlugins/vim-fetch.nix> { }; // {
vim-colors-paramount = pkgs.callPackage <niveum/packages/vimPlugins/vim-colors-paramount.nix> { }; cheat-sh-vim = pkgs.callPackage <niveum/packages/vimPlugins/cheat-sh.nix> {};
vim-256noir = pkgs.callPackage <niveum/packages/vimPlugins/vim-256noir.nix> { }; vim-fetch = pkgs.callPackage <niveum/packages/vimPlugins/vim-fetch.nix> {};
icalendar-vim = pkgs.callPackage <niveum/packages/vimPlugins/icalendar-vim.nix> { }; vim-colors-paramount = pkgs.callPackage <niveum/packages/vimPlugins/vim-colors-paramount.nix> {};
jq-vim = pkgs.callPackage <niveum/packages/vimPlugins/jq-vim.nix> { }; vim-256noir = pkgs.callPackage <niveum/packages/vimPlugins/vim-256noir.nix> {};
vim-fsharp = pkgs.callPackage <niveum/packages/vimPlugins/vim-fsharp.nix> { }; icalendar-vim = pkgs.callPackage <niveum/packages/vimPlugins/icalendar-vim.nix> {};
vim-reason-plus = pkgs.callPackage <niveum/packages/vimPlugins/vim-reason-plus.nix> { }; jq-vim = pkgs.callPackage <niveum/packages/vimPlugins/jq-vim.nix> {};
vim-mail = pkgs.callPackage <niveum/packages/vimPlugins/vim-mail.nix> { }; vim-fsharp = pkgs.callPackage <niveum/packages/vimPlugins/vim-fsharp.nix> {};
}; vim-reason-plus = pkgs.callPackage <niveum/packages/vimPlugins/vim-reason-plus.nix> {};
vim-mail = pkgs.callPackage <niveum/packages/vimPlugins/vim-mail.nix> {};
};
}; };
environment.systemPackages = [ environment.systemPackages = [

View File

@@ -1,20 +1,25 @@
{ lib, pkgs, ... }: {
let lib,
profile = name: custom: lib.recursiveUpdate { pkgs,
connection.id = name; ...
connection.type = "wifi"; }: let
connection.interface-name = "wlp3s0"; profile = name: custom:
connection.permissions = ""; lib.recursiveUpdate {
wifi.mac-address-blacklist = ""; connection.id = name;
wifi.ssid = name; connection.type = "wifi";
wifi.mode = "infrastructure"; connection.interface-name = "wlp3s0";
ipv4.dns-search = ""; connection.permissions = "";
ipv4.method = "auto"; wifi.mac-address-blacklist = "";
ipv6.addr-gen-mode = "stable-privacy"; wifi.ssid = name;
ipv6.dns-search = ""; wifi.mode = "infrastructure";
ipv6.method = "auto"; ipv4.dns-search = "";
proxy = {}; ipv4.method = "auto";
} custom; ipv6.addr-gen-mode = "stable-privacy";
ipv6.dns-search = "";
ipv6.method = "auto";
proxy = {};
}
custom;
eduroamProfile = { eduroamProfile = {
connection.uuid = "eae9fee6-a7d2-4120-a609-440b457d6fcf"; connection.uuid = "eae9fee6-a7d2-4120-a609-440b457d6fcf";
wifi-security = { wifi-security = {
@@ -36,15 +41,20 @@ let
phase2-auth = "pap"; phase2-auth = "pap";
}; };
}; };
in in {
{ imports = [<niveum/modules/networkmanager-declarative.nix>];
imports = [ <niveum/modules/networkmanager-declarative.nix> ];
programs.nm-applet.enable = true;
networking.networkmanager = { networking.networkmanager = {
enable = true; enable = true;
packages = [
pkgs.networkmanager-openvpn
pkgs.networkmanager-fortisslvpn
];
wifi.macAddress = "random"; wifi.macAddress = "random";
ethernet.macAddress = "random"; ethernet.macAddress = "random";
unmanaged = [ "docker*" ]; unmanaged = ["docker*"];
profiles = lib.mapAttrs profile { profiles = lib.mapAttrs profile {
Aether = { Aether = {
connection.uuid = "7138bb0f-1aeb-4905-890e-a6628427aa21"; connection.uuid = "7138bb0f-1aeb-4905-890e-a6628427aa21";
@@ -80,7 +90,12 @@ in
}; };
}; };
users.users.me.extraGroups = [ "networkmanager" ]; users.users.me.extraGroups = ["networkmanager"];
environment.systemPackages = [ pkgs.speedtest-cli ]; environment.systemPackages = [
pkgs.speedtest-cli
pkgs.networkmanager-openvpn
pkgs.networkmanagerapplet
pkgs.networkmanager-fortisslvpn
];
} }

View File

@@ -1,11 +1,13 @@
{ pkgs, config, ... }: {
let pkgs,
config,
...
}: let
ytdl-format = "'bestvideo[height<=?720][fps<=?30][vcodec!=?vp9]+bestaudio/best'"; ytdl-format = "'bestvideo[height<=?720][fps<=?30][vcodec!=?vp9]+bestaudio/best'";
youtube-download = "${pkgs.ts}/bin/ts ${pkgs.youtube-dl}/bin/youtube-dl -f ${ytdl-format} --add-metadata"; youtube-download = "${pkgs.ts}/bin/ts ${pkgs.youtube-dl}/bin/youtube-dl -f ${ytdl-format} --add-metadata";
newsboat-home = newsboat-home = "${config.users.users.me.home}/cloud/Seafile/Documents/newsboat";
"${config.users.users.me.home}/cloud/Seafile/Documents/newsboat";
linkhandler-bin = "${pkgs.scripts.linkhandler}/bin/linkhandler"; linkhandler-bin = "${pkgs.scripts.linkhandler}/bin/linkhandler";
newsboat-config = pkgs.writeText "config" '' newsboat-config = pkgs.writeText "config" ''

View File

@@ -1,5 +1,4 @@
{ pkgs, ... }: {pkgs, ...}: {
{
nixpkgs = { nixpkgs = {
config.allowUnfree = true; config.allowUnfree = true;
overlays = [ overlays = [

View File

@@ -1,5 +1,8 @@
{ pkgs, lib, ... }: {
let pkgs,
lib,
...
}: let
openweathermap-repo = pkgs.fetchFromGitHub { openweathermap-repo = pkgs.fetchFromGitHub {
owner = "ip1981"; owner = "ip1981";
repo = "openweathermap"; repo = "openweathermap";
@@ -15,5 +18,5 @@ in {
''; '';
}; };
environment.systemPackages = [ pkgs.weather ]; environment.systemPackages = [pkgs.weather];
} }

View File

@@ -1,13 +1,19 @@
{ pkgs, lib, ... }: {
let pkgs,
lib,
...
}: let
hc = pkgs.callPackage <stockholm/tv/5pkgs/simple/hc.nix> {}; hc = pkgs.callPackage <stockholm/tv/5pkgs/simple/hc.nix> {};
worldradio = pkgs.callPackage <niveum/packages/worldradio.nix> {}; worldradio = pkgs.callPackage <niveum/packages/worldradio.nix> {};
menstruation = pkgs.callPackage <menstruation-backend> {}; menstruation = pkgs.callPackage <menstruation-backend> {};
pandoc-doc = pkgs.callPackage <niveum/packages/man/pandoc.nix> {}; pandoc-doc = pkgs.callPackage <niveum/packages/man/pandoc.nix> {};
nixpkgs-unstable = import <nixpkgs-unstable> { config.allowUnfree = true; }; nixpkgs-unstable = import <nixpkgs-unstable> {config.allowUnfree = true;};
zoteroStyle = { name, sha256 }: { zoteroStyle = {
name,
sha256,
}: {
name = "${name}.csl"; name = "${name}.csl";
path = pkgs.fetchurl { path = pkgs.fetchurl {
url = "https://www.zotero.org/styles/${name}"; url = "https://www.zotero.org/styles/${name}";
@@ -17,40 +23,40 @@ let
cslDirectory = pkgs.linkFarm "citation-styles" [ cslDirectory = pkgs.linkFarm "citation-styles" [
(zoteroStyle { (zoteroStyle {
name = "chicago-author-date-de"; name = "chicago-author-date-de";
sha256 = "0fz0xn46rkciblr34a7x2v60j0lbq9l3fmzi43iphph27m0czn6s"; sha256 = "sha256-ddMYk4A9DJQhx9ldkmF7PhwKuc7wUSr26uHHGAze9Ps=";
}) })
(zoteroStyle { (zoteroStyle {
name = "din-1505-2"; name = "din-1505-2";
sha256 = "1pvy1b7qm13mnph7z365rrz1j082bl2y8ih73rhzd0zd6dz1jyjq"; sha256 = "sha256-bXZbB850fek8J6wMVFL32ndI7F4wiKKr1qUC71ezreE=";
}) })
(zoteroStyle { (zoteroStyle {
name = "apa"; name = "apa";
sha256 = "1878vxp0y0h05yzaghnd51n981623mxskw3lsdyzmffqhihvv111"; sha256 = "sha256-yq4fW6hQknycLjaj5fPbXLrQlGBp5myXiOSHBU90jEc=";
}) })
]; ];
astrolog = nixpkgs-unstable.astrolog.overrideAttrs (old:
astrolog = nixpkgs-unstable.astrolog.overrideAttrs (old: old // { old
installPhase = '' // {
${old.installPhase} installPhase = ''
# set sensible defaults ${old.installPhase}
sed -i ' # set sensible defaults
/^-z /s/8:00W/1:00E/ # timezone sed -i '
/^-zl /s/122W19:59 47N36:35/13E22:42 52N27:42/ # default location /^-z /s/8:00W/1:00E/ # timezone
/^-zj /s/"Current moment now"/Now/ # default name /^-zl /s/122W19:59 47N36:35/13E22:42 52N27:42/ # default location
/^-zj /s/"Seattle, WA, USA"/Berlin/ # default location /^-zj /s/"Current moment now"/Now/ # default name
/^_k/s/_k/=k/ # use color /^-zj /s/"Seattle, WA, USA"/Berlin/ # default location
/^_Yd/s/_Yd/=Yd/ # sensible date format /^_k/s/_k/=k/ # use color
/^_Yt/s/_Yt/=Yt/ # sensible time format /^_Yd/s/_Yd/=Yd/ # sensible date format
/^_Yv/s/_Yv/=Yv/ # sensible length format /^_Yt/s/_Yt/=Yt/ # sensible time format
/^:Xbw/s/:Xbw/:Xbn/ # set X11 bitmap format /^_Yv/s/_Yv/=Yv/ # sensible length format
/^:I /s/80/120/ # wider text output /^:Xbw/s/:Xbw/:Xbn/ # set X11 bitmap format
' $out/astrolog/astrolog.as /^:I /s/80/120/ # wider text output
''; ' $out/astrolog/astrolog.as
}); '';
});
recht = pkgs.callPackage <recht> {}; recht = pkgs.callPackage <recht> {};
in { in {
home-manager.users.me.home.file = { home-manager.users.me.home.file = {
".csl".source = cslDirectory; ".csl".source = cslDirectory;
@@ -115,11 +121,13 @@ in {
xorg.xkill # kill by clicking xorg.xkill # kill by clicking
audacity audacity
calibre calibre
electrum
inkscape inkscape
astrolog astrolog
anki # flashcards anki # flashcards
jbofihe # lojbanic software jbofihe # lojbanic software
nixpkgs-unstable.zoom-us # video conferencing nixpkgs-unstable.zoom-us # video conferencing
nixpkgs-unstable.alejandra # nix formatter
pdfgrep # search in pdf pdfgrep # search in pdf
pdftk # pdf toolkit pdftk # pdf toolkit
mupdf mupdf
@@ -235,7 +243,7 @@ in {
nodePackages.javascript-typescript-langserver 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]))
# haskellPackages.pandoc-citeproc # haskellPackages.pandoc-citeproc
scripts.text2pdf scripts.text2pdf
lowdown lowdown
@@ -253,12 +261,15 @@ in {
binutils # for strip, ld, ... binutils # for strip, ld, ...
# nightly.rust # nightly.rust
shellcheck shellcheck
];
(pkgs.writers.writeDashBin "hass-cli" ''
HASS_SERVER=http://zaatar.r:8123 HASS_TOKEN=${lib.strings.fileContents <secrets/hass/token>} exec ${pkgs.home-assistant-cli}/bin/hass-cli "$@"
'')
scripts.rofi-hass
];
home-manager.users.me.xdg.configFile."pycodestyle".text = '' home-manager.users.me.xdg.configFile."pycodestyle".text = ''
[pycodestyle] [pycodestyle]
max-line-length = 110 max-line-length = 110
''; '';
} }

View File

@@ -1,8 +1,6 @@
{ config, ... }: {config, ...}: let
let
user = config.users.users.me.name; user = config.users.users.me.name;
in in {
{
security.polkit.extraConfig = '' security.polkit.extraConfig = ''
polkit.addRule(function(action, subject) { polkit.addRule(function(action, subject) {
if (subject.user == "${user}" && action.id == "org.freedesktop.systemd1.manage-units") { if (subject.user == "${user}" && action.id == "org.freedesktop.systemd1.manage-units") {

View File

@@ -1,9 +1,11 @@
{ pkgs, config, ... }:
let
suspend = pkgs.writers.writeDash "suspend" "${pkgs.systemd}/bin/systemctl suspend";
in
{ {
imports = [ <stockholm/krebs/3modules/power-action.nix> ]; pkgs,
config,
...
}: let
suspend = pkgs.writers.writeDash "suspend" "${pkgs.systemd}/bin/systemctl suspend";
in {
imports = [<stockholm/krebs/3modules/power-action.nix>];
krebs.power-action = { krebs.power-action = {
enable = true; enable = true;

View File

@@ -1,33 +1,35 @@
{ pkgs, ... }: {pkgs, ...}: let
let
inherit (import <niveum/lib>) localAddresses; inherit (import <niveum/lib>) localAddresses;
hp-driver = pkgs.hplipWithPlugin; hp-driver = pkgs.hplipWithPlugin;
in { in {
services.printing = { services.printing = {
enable = true; enable = true;
drivers = [ hp-driver ]; drivers = [hp-driver];
}; };
hardware.sane = { hardware.sane = {
enable = true; enable = true;
extraBackends = [ hp-driver ]; extraBackends = [hp-driver];
}; };
hardware.printers.ensurePrinters = [{ hardware.printers.ensurePrinters = [
name = "OfficeJet"; {
location = "Zimmer"; name = "OfficeJet";
deviceUri = "https://${localAddresses.officejet}"; location = "Zimmer";
model = "drv:///hp/hpcups.drv/hp-officejet_4650_series.ppd"; deviceUri = "https://${localAddresses.officejet}";
ppdOptions = { model = "drv:///hp/hpcups.drv/hp-officejet_4650_series.ppd";
Duplex = "DuplexNoTumble"; # DuplexNoTumble DuplexTumble None ppdOptions = {
PageSize = "A4"; # A4 A4.FB A4.Duplex Duplex = "DuplexNoTumble"; # DuplexNoTumble DuplexTumble None
MediaType = "Plain"; PageSize = "A4"; # A4 A4.FB A4.Duplex
OutputMode = "Normal"; MediaType = "Plain";
ColorModel = "KGray"; # RGB CMYGray KGray OutputMode = "Normal";
}; ColorModel = "KGray"; # RGB CMYGray KGray
}]; };
}
];
} }
/*
HP/hp-officejet_4650_series.ppd.gz
drv:///hp/hpcups.drv/hp-officejet_4650_series.ppd
*/
/* HP/hp-officejet_4650_series.ppd.gz
drv:///hp/hpcups.drv/hp-officejet_4650_series.ppd
*/

View File

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

View File

@@ -1,7 +1,11 @@
{ config, pkgs, ... }: { {
config,
pkgs,
...
}: {
imports = [ imports = [
<niveum/modules/retiolum.nix> <niveum/modules/retiolum.nix>
]; ];
networking.hosts = { "42:0:ca48:f98f:63d7:31ce:922b:245d" = [ "go" ]; }; networking.hosts = {"42:0:ca48:f98f:63d7:31ce:922b:245d" = ["go"];};
} }

View File

@@ -1,7 +1,10 @@
{ config, pkgs, ... }: {
let config,
pkgs,
...
}: let
inherit (import <niveum/lib>) colours; inherit (import <niveum/lib>) colours;
in{ in {
home-manager.users.me.programs.rofi = { home-manager.users.me.programs.rofi = {
enable = true; enable = true;
font = "Monospace 10"; font = "Monospace 10";

View File

@@ -1,5 +1,8 @@
{ pkgs, config, ... }:
{ {
pkgs,
config,
...
}: {
services.xserver.displayManager.sessionCommands = "${pkgs.seafile-client}/bin/seafile-applet &"; services.xserver.displayManager.sessionCommands = "${pkgs.seafile-client}/bin/seafile-applet &";
home-manager.users.me.xdg.configFile = { home-manager.users.me.xdg.configFile = {
@@ -16,5 +19,5 @@
}; };
}; };
environment.systemPackages = [ pkgs.seafile-client ]; environment.systemPackages = [pkgs.seafile-client];
} }

View File

@@ -1,5 +1,9 @@
{ pkgs, config, lib, ... }: {
let pkgs,
config,
lib,
...
}: let
inherit (import <niveum/lib>) sshPort kieran; inherit (import <niveum/lib>) sshPort kieran;
in { in {
services.xserver.displayManager.sessionCommands = "${pkgs.openssh}/bin/ssh-add"; services.xserver.displayManager.sessionCommands = "${pkgs.openssh}/bin/ssh-add";
@@ -25,6 +29,11 @@ in {
user = "root"; user = "root";
port = sshPort; port = sshPort;
}; };
tahina = {
hostname = "tahina.r";
user = "root";
port = sshPort;
};
manakish = { manakish = {
hostname = "manakish.r"; hostname = "manakish.r";
user = "kfm"; user = "kfm";
@@ -48,6 +57,10 @@ in {
hostname = "135.181.85.233"; hostname = "135.181.85.233";
user = "root"; user = "root";
}; };
oracle = {
hostname = "130.61.171.199";
user = "ubuntu";
};
}; };
}; };
} }

View File

@@ -1,13 +1,16 @@
{ config, lib, pkgs, ... }:
let
inherit (import <niveum/lib>) sshPort kieran;
in
{ {
config,
lib,
pkgs,
...
}: let
inherit (import <niveum/lib>) sshPort kieran;
in {
users.motd = "Welcome to ${config.networking.hostName}!"; users.motd = "Welcome to ${config.networking.hostName}!";
services.openssh = { services.openssh = {
enable = true; enable = true;
ports = [ sshPort ]; ports = [sshPort];
passwordAuthentication = false; passwordAuthentication = false;
forwardX11 = true; forwardX11 = true;
}; };

View File

@@ -1,5 +1,9 @@
{ config, pkgs, lib, ... }: {
let config,
pkgs,
lib,
...
}: let
dictionaries = { dictionaries = {
lojban = { lojban = {
jbo-deu = pkgs.fetchzip { jbo-deu = pkgs.fetchzip {
@@ -100,7 +104,9 @@ let
sha256 = "0cx086zvb86bmz7i8vnsch4cj4fb0cp165g4hig4982zakj6f2jd"; sha256 = "0cx086zvb86bmz7i8vnsch4cj4fb0cp165g4hig4982zakj6f2jd";
}; };
}; };
sanskrit = let repo = "https://github.com/indic-dict/stardict-sanskrit/raw/4ebd2d3db5820f7cbe3a649c3d5aa8f83d19b29f"; in { sanskrit = let
repo = "https://github.com/indic-dict/stardict-sanskrit/raw/4ebd2d3db5820f7cbe3a649c3d5aa8f83d19b29f";
in {
BoehtlingkRoth = pkgs.fetchzip { BoehtlingkRoth = pkgs.fetchzip {
url = "${repo}/sa-head/german-entries/tars/Bohtlingk-and-Roth-Grosses-Petersburger-Worterbuch__2021-10-05_14-23-18Z__19MB.tar.gz"; url = "${repo}/sa-head/german-entries/tars/Bohtlingk-and-Roth-Grosses-Petersburger-Worterbuch__2021-10-05_14-23-18Z__19MB.tar.gz";
sha256 = "13414a8rgd7hd5ffar6nl68nk3ys60wjkgb7m11hp0ahaasmf6ly"; sha256 = "13414a8rgd7hd5ffar6nl68nk3ys60wjkgb7m11hp0ahaasmf6ly";
@@ -154,13 +160,14 @@ let
}; };
}; };
makeStardictDataDir = dicts: pkgs.linkFarm "dictionaries" (lib.mapAttrsToList (name: path: { inherit name path; }) dicts); makeStardictDataDir = dicts: pkgs.linkFarm "dictionaries" (lib.mapAttrsToList (name: path: {inherit name path;}) dicts);
makeStardict = name: dicts: pkgs.writers.writeDashBin name '' makeStardict = name: dicts:
set -efu pkgs.writers.writeDashBin name ''
export SDCV_PAGER=${toString sdcvPager} set -efu
exec ${pkgs.sdcv}/bin/sdcv --color --only-data-dir --data-dir ${makeStardictDataDir dicts} "$@" export SDCV_PAGER=${toString sdcvPager}
''; exec ${pkgs.sdcv}/bin/sdcv --color --only-data-dir --data-dir ${makeStardictDataDir dicts} "$@"
'';
sdcvPager = pkgs.writeDash "sdcvPager" '' sdcvPager = pkgs.writeDash "sdcvPager" ''
export PATH=${lib.makeBinPath [pkgs.gnused pkgs.ncurses pkgs.less]} export PATH=${lib.makeBinPath [pkgs.gnused pkgs.ncurses pkgs.less]}
@@ -266,22 +273,26 @@ let
s!</\?p[^>]*>!!gI s!</\?p[^>]*>!!gI
" | less -FR " | less -FR
''; '';
in in {
{
environment.etc.stardict.source = toString (makeStardictDataDir ({ environment.etc.stardict.source = toString (makeStardictDataDir ({
Crum = pkgs.fetchzip { Crum = pkgs.fetchzip {
url = "http://download.huzheng.org/misc/stardict-Coptic-English_all_dialects-2.4.2.tar.bz2"; url = "http://download.huzheng.org/misc/stardict-Coptic-English_all_dialects-2.4.2.tar.bz2";
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.sanskrit // dictionaries.oed // dictionaries.russian // dictionaries.englishGerman)); }
// dictionaries.classics
// dictionaries.sanskrit
// dictionaries.oed
// dictionaries.russian
// dictionaries.englishGerman));
environment.systemPackages = [ environment.systemPackages = [
pkgs.goldendict pkgs.goldendict
@@ -293,65 +304,65 @@ in
(makeStardict "jbo" dictionaries.lojban) (makeStardict "jbo" dictionaries.lojban)
]; ];
} }
/* /*
https://github.com/latin-dict/Georges1910/releases/download/v1.0/Georges1910-stardict.zip https://github.com/latin-dict/Georges1910/releases/download/v1.0/Georges1910-stardict.zip
https://github.com/nikita-moor/latin-dictionary/releases/download/2020-02-14/LiddellScott1940-stardict.zip https://github.com/nikita-moor/latin-dictionary/releases/download/2020-02-14/LiddellScott1940-stardict.zip
http://download.huzheng.org/bigdict/stardict-Cambridge_Dictionary_of_American_Idioms-2.4.2.tar.bz2 http://download.huzheng.org/bigdict/stardict-Cambridge_Dictionary_of_American_Idioms-2.4.2.tar.bz2
http://download.huzheng.org/bigdict/stardict-Concise_Oxford_Thesaurus_2nd_Ed-2.4.2.tar.bz2 http://download.huzheng.org/bigdict/stardict-Concise_Oxford_Thesaurus_2nd_Ed-2.4.2.tar.bz2
http://download.huzheng.org/bigdict/stardict-Urban_Dictionary_P1-2.4.2.tar.bz2 http://download.huzheng.org/bigdict/stardict-Urban_Dictionary_P1-2.4.2.tar.bz2
http://download.huzheng.org/bigdict/stardict-Urban_Dictionary_P2-2.4.2.tar.bz2 http://download.huzheng.org/bigdict/stardict-Urban_Dictionary_P2-2.4.2.tar.bz2
Duden_Rechtschreibung = pkgs.fetchzip {
url = "http://download.huzheng.org/babylon/german/stardict-Duden_Rechtschreibung-2.4.2.tar.bz2";
sha256 = "0xiprb45s88w62rn8rlbjrsagbiliay9hszsiy20glwabf6zsfji";
};
Duden = pkgs.fetchzip {
url = "http://download.huzheng.org/de/stardict-duden-2.4.2.tar.bz2";
sha256 = "049i4ynfqqxykv1nlkyks94mvn14s22qdax5gg7hx1ks5y4xw64j";
};
FreeOnlineDictionaryOfComputing = pkgs.fetchzip {
url = "http://download.huzheng.org/dict.org/stardict-dictd_www.dict.org_foldoc-2.4.2.tar.bz2";
sha256 = "1lw2i8dzxpx929cpgvv0x366dnh4drr10wzqmrhcd0kvwglqawgm";
};
Cappeller = pkgs.fetchzip {
url = "${repo}/sa-head/german-entries/tars/capeller-sanskrit-german__2021-10-05_14-23-18Z__1MB.tar.gz";
sha256 = "0jwrj2aih2lrcjg0lqm8jrvq9vsas9s8j4c9ggbg2n0jyz03kci3";
stripRoot = false;
};
Yates = pkgs.fetchzip {
url = "https://github.com/indic-dict/stardict-sanskrit/raw/4ebd2d3db5820f7cbe3a649c3d5aa8f83d19b29f/sa-head/en-entries/tars/yates__2021-10-05_14-23-18Z__2MB.tar.gz";
sha256 = "1k7gbalysf48pwa06zfykrqhdk466g35xy64b30k4z8bybgdn8z2";
stripRoot = false;
};
Wilson = pkgs.fetchzip {
url = "https://github.com/indic-dict/stardict-sanskrit/raw/4ebd2d3db5820f7cbe3a649c3d5aa8f83d19b29f/sa-head/en-entries/tars/wilson__2021-10-05_14-23-18Z__3MB.tar.gz";
sha256 = "0r5z1xif56zlw9r2jp3fvwmcjv4f2fhd9r17j30nah9awx2m1isg";
stripRoot = false;
};
SpokenSanskrit = pkgs.fetchzip {
url = "https://github.com/indic-dict/stardict-sanskrit/raw/4ebd2d3db5820f7cbe3a649c3d5aa8f83d19b29f/sa-head/en-entries/tars/spokensanskrit__2019-01-12_05-13-52Z__12MB.tar.gz";
sha256 = "0x8j657mawvdcyd1knzvf33yp15z77d661n3h6g9hcj7wn9s5xyk";
stripRoot = false;
};
Grassmann = pkgs.fetchzip {
url = "${repo}/sa-head/german-entries/tars/grassman-sanskrit-german__2021-10-05_14-23-18Z__2MB.tar.gz";
sha256 = "0jalsykaxkl6wzrky72lz8g3jdz26lmjpyibbfaf7a5vvnr55k02";
stripRoot = false;
};
Benfey = pkgs.fetchzip {
url = "https://github.com/indic-dict/stardict-sanskrit/raw/4ebd2d3db5820f7cbe3a649c3d5aa8f83d19b29f/sa-head/en-entries/tars/benfey__2021-10-05_14-23-18Z__2MB.tar.gz";
sha256 = "0lj3hgphqgnihn482g9kgjwbvdrcd38vc29v1fi36srn08qdhvcb";
stripRoot = false;
};
ApteSa = pkgs.fetchzip {
url = "${repo}/sa-head/en-entries/tars/apte-sa__2021-12-18_13-20-56Z__6MB.tar.gz";
sha256 = "0cq1dd02d1pvmjnibbs2cscifjnk2z0nqccf5yzzilxkzsrarh32";
stripRoot = false;
};
MacDonell = pkgs.fetchzip {
url = "https://github.com/indic-dict/stardict-sanskrit/raw/4ebd2d3db5820f7cbe3a649c3d5aa8f83d19b29f/sa-head/en-entries/tars/macdonell__2021-10-05_14-23-18Z__2MB.tar.gz";
sha256 = "1yzmj0393mxvjv4n2lnvd2c722v2bmxxiyq7pscdwni3bxip3h8s";
stripRoot = false;
};
*/
Duden_Rechtschreibung = pkgs.fetchzip {
url = "http://download.huzheng.org/babylon/german/stardict-Duden_Rechtschreibung-2.4.2.tar.bz2";
sha256 = "0xiprb45s88w62rn8rlbjrsagbiliay9hszsiy20glwabf6zsfji";
};
Duden = pkgs.fetchzip {
url = "http://download.huzheng.org/de/stardict-duden-2.4.2.tar.bz2";
sha256 = "049i4ynfqqxykv1nlkyks94mvn14s22qdax5gg7hx1ks5y4xw64j";
};
FreeOnlineDictionaryOfComputing = pkgs.fetchzip {
url = "http://download.huzheng.org/dict.org/stardict-dictd_www.dict.org_foldoc-2.4.2.tar.bz2";
sha256 = "1lw2i8dzxpx929cpgvv0x366dnh4drr10wzqmrhcd0kvwglqawgm";
};
Cappeller = pkgs.fetchzip {
url = "${repo}/sa-head/german-entries/tars/capeller-sanskrit-german__2021-10-05_14-23-18Z__1MB.tar.gz";
sha256 = "0jwrj2aih2lrcjg0lqm8jrvq9vsas9s8j4c9ggbg2n0jyz03kci3";
stripRoot = false;
};
Yates = pkgs.fetchzip {
url = "https://github.com/indic-dict/stardict-sanskrit/raw/4ebd2d3db5820f7cbe3a649c3d5aa8f83d19b29f/sa-head/en-entries/tars/yates__2021-10-05_14-23-18Z__2MB.tar.gz";
sha256 = "1k7gbalysf48pwa06zfykrqhdk466g35xy64b30k4z8bybgdn8z2";
stripRoot = false;
};
Wilson = pkgs.fetchzip {
url = "https://github.com/indic-dict/stardict-sanskrit/raw/4ebd2d3db5820f7cbe3a649c3d5aa8f83d19b29f/sa-head/en-entries/tars/wilson__2021-10-05_14-23-18Z__3MB.tar.gz";
sha256 = "0r5z1xif56zlw9r2jp3fvwmcjv4f2fhd9r17j30nah9awx2m1isg";
stripRoot = false;
};
SpokenSanskrit = pkgs.fetchzip {
url = "https://github.com/indic-dict/stardict-sanskrit/raw/4ebd2d3db5820f7cbe3a649c3d5aa8f83d19b29f/sa-head/en-entries/tars/spokensanskrit__2019-01-12_05-13-52Z__12MB.tar.gz";
sha256 = "0x8j657mawvdcyd1knzvf33yp15z77d661n3h6g9hcj7wn9s5xyk";
stripRoot = false;
};
Grassmann = pkgs.fetchzip {
url = "${repo}/sa-head/german-entries/tars/grassman-sanskrit-german__2021-10-05_14-23-18Z__2MB.tar.gz";
sha256 = "0jalsykaxkl6wzrky72lz8g3jdz26lmjpyibbfaf7a5vvnr55k02";
stripRoot = false;
};
Benfey = pkgs.fetchzip {
url = "https://github.com/indic-dict/stardict-sanskrit/raw/4ebd2d3db5820f7cbe3a649c3d5aa8f83d19b29f/sa-head/en-entries/tars/benfey__2021-10-05_14-23-18Z__2MB.tar.gz";
sha256 = "0lj3hgphqgnihn482g9kgjwbvdrcd38vc29v1fi36srn08qdhvcb";
stripRoot = false;
};
ApteSa = pkgs.fetchzip {
url = "${repo}/sa-head/en-entries/tars/apte-sa__2021-12-18_13-20-56Z__6MB.tar.gz";
sha256 = "0cq1dd02d1pvmjnibbs2cscifjnk2z0nqccf5yzzilxkzsrarh32";
stripRoot = false;
};
MacDonell = pkgs.fetchzip {
url = "https://github.com/indic-dict/stardict-sanskrit/raw/4ebd2d3db5820f7cbe3a649c3d5aa8f83d19b29f/sa-head/en-entries/tars/macdonell__2021-10-05_14-23-18Z__2MB.tar.gz";
sha256 = "1yzmj0393mxvjv4n2lnvd2c722v2bmxxiyq7pscdwni3bxip3h8s";
stripRoot = false;
};
*/

View File

@@ -6,5 +6,5 @@
''; '';
}; };
users.users.me.extraGroups = [ "wheel" ]; users.users.me.extraGroups = ["wheel"];
} }

View File

@@ -1,5 +1,8 @@
{ pkgs, lib, ... }: {
let pkgs,
lib,
...
}: let
important-directories = pkgs.writeText "directories" '' important-directories = pkgs.writeText "directories" ''
h ~/ h ~/
d ~/cloud/Dropbox/ d ~/cloud/Dropbox/
@@ -12,53 +15,52 @@ let
cf ''${XDG_CONFIG_HOME:-$HOME/.config} cf ''${XDG_CONFIG_HOME:-$HOME/.config}
''; '';
in { in {
environment.systemPackages = [ pkgs.sxiv ]; environment.systemPackages = [pkgs.sxiv];
# TODO fix # TODO fix
home-manager.users.me.xdg.configFile."sxiv/exec/key-handler".source = home-manager.users.me.xdg.configFile."sxiv/exec/key-handler".source = pkgs.writers.writeDash "key-handler" ''
pkgs.writers.writeDash "key-handler" '' PATH=$PATH:${
PATH=$PATH:${ lib.makeBinPath [
lib.makeBinPath [ pkgs.gnused
pkgs.gnused pkgs.gawk
pkgs.gawk pkgs.dmenu
pkgs.dmenu pkgs.coreutils
pkgs.coreutils pkgs.libnotify
pkgs.libnotify pkgs.imagemagick
pkgs.imagemagick pkgs.xclip
pkgs.xclip ]
] }
}
echo >&2 key "$1" pressed echo >&2 key "$1" pressed
while read file; do while read file; do
case "$1" in case "$1" in
"c") "c")
[ -z "$destdir" ] && destdir="$(sed "s/\s.*#.*$//;/^\s*$/d" ${important-directories} | awk '{print $2}' | dmenu -l 20 -i -p "Copy file(s) to where?" | sed "s|~|$HOME|g")" [ -z "$destdir" ] && destdir="$(sed "s/\s.*#.*$//;/^\s*$/d" ${important-directories} | awk '{print $2}' | dmenu -l 20 -i -p "Copy file(s) to where?" | sed "s|~|$HOME|g")"
[ -z "$destdir" ] && exit [ -z "$destdir" ] && exit
[ ! -d "$destdir" ] && notify-send "$destdir is not a directory, cancelled." && exit [ ! -d "$destdir" ] && notify-send "$destdir is not a directory, cancelled." && exit
cp "$file" "$destdir" && notify-send -i "$(readlink -f "$file")" "$file copied to $destdir." & cp "$file" "$destdir" && notify-send -i "$(readlink -f "$file")" "$file copied to $destdir." &
;; ;;
"m") "m")
[ -z "$destdir" ] && destdir="$(sed "s/\s.*#.*$//;/^\s*$/d" ${important-directories} | awk '{print $2}' | dmenu -l 20 -i -p "Move file(s) to where?" | sed "s|~|$HOME|g")" [ -z "$destdir" ] && destdir="$(sed "s/\s.*#.*$//;/^\s*$/d" ${important-directories} | awk '{print $2}' | dmenu -l 20 -i -p "Move file(s) to where?" | sed "s|~|$HOME|g")"
[ -z "$destdir" ] && exit [ -z "$destdir" ] && exit
[ ! -d "$destdir" ] && notify-send "$destdir is not a directory, cancelled." && exit [ ! -d "$destdir" ] && notify-send "$destdir is not a directory, cancelled." && exit
mv "$file" "$destdir" && notify-send -i "$(readlink -f "$file")" "$file moved to $destdir." & mv "$file" "$destdir" && notify-send -i "$(readlink -f "$file")" "$file moved to $destdir." &
;; ;;
"r") "r")
convert -rotate 90 "$file" "$file" ;; convert -rotate 90 "$file" "$file" ;;
"R") "R")
convert -rotate -90 "$file" "$file" ;; convert -rotate -90 "$file" "$file" ;;
"f") "f")
convert -flop "$file" "$file" ;; convert -flop "$file" "$file" ;;
"y") "y")
echo -n "$file" | xclip -selection clipboard && echo -n "$file" | xclip -selection clipboard &&
notify-send "$file copied to clipboard" & ;; notify-send "$file copied to clipboard" & ;;
"Y") "Y")
readlink -f "$file" | xclip -selection clipboard && readlink -f "$file" | xclip -selection clipboard &&
notify-send "$(readlink -f "$file") copied to clipboard" & ;; notify-send "$(readlink -f "$file") copied to clipboard" & ;;
"d") "d")
[ "$(printf "No\\nYes" | dmenu -i -p "Really delete $file?")" = "Yes" ] && rm "$file" && notify-send "$file deleted." ;; [ "$(printf "No\\nYes" | dmenu -i -p "Really delete $file?")" = "Yes" ] && rm "$file" && notify-send "$file deleted." ;;
esac esac
done done
''; '';
} }

View File

@@ -1,5 +1,8 @@
{ pkgs, lib, ... }: {
let pkgs,
lib,
...
}: let
nixpkgs-unstable = import <nixpkgs-unstable> {}; nixpkgs-unstable = import <nixpkgs-unstable> {};
toSymbols = pkgs.writers.writeDash "to-symbols" '' toSymbols = pkgs.writers.writeDash "to-symbols" ''
${pkgs.gnused}/bin/sed ' ${pkgs.gnused}/bin/sed '
@@ -42,7 +45,7 @@ in {
enable = true; enable = true;
time = "*:0/1"; time = "*:0/1";
token = lib.strings.fileContents <system-secrets/telegram/kmein.token>; token = lib.strings.fileContents <system-secrets/telegram/kmein.token>;
chatIds = [ "-1001796440545" ]; chatIds = ["-1001796440545"];
command = toString (pkgs.writers.writeDash "common-transits" '' command = toString (pkgs.writers.writeDash "common-transits" ''
now=$(${pkgs.coreutils}/bin/date +%_H:%M | ${pkgs.gnused}/bin/sed 's/^\s*//') now=$(${pkgs.coreutils}/bin/date +%_H:%M | ${pkgs.gnused}/bin/sed 's/^\s*//')
date=$(${pkgs.coreutils}/bin/date +'%m %d %Y') date=$(${pkgs.coreutils}/bin/date +'%m %d %Y')

View File

@@ -1,5 +1,8 @@
{ pkgs, lib, ... }: {
let pkgs,
lib,
...
}: let
autorenkalender-package = pkgs.fetchFromGitHub { autorenkalender-package = pkgs.fetchFromGitHub {
owner = "kmein"; owner = "kmein";
repo = "autorenkalender"; repo = "autorenkalender";
@@ -7,13 +10,13 @@ let
sha256 = "1pa7sjg33vdnjianrqldv445jdzzv3mn231ljk1j58hs0cd505gs"; sha256 = "1pa7sjg33vdnjianrqldv445jdzzv3mn231ljk1j58hs0cd505gs";
}; };
autorenkalender = autorenkalender =
pkgs.python3Packages.callPackage autorenkalender-package { }; pkgs.python3Packages.callPackage autorenkalender-package {};
in { in {
niveum.telegramBots.autorenkalender = { niveum.telegramBots.autorenkalender = {
enable = true; enable = true;
time = "07:00"; time = "07:00";
token = lib.strings.fileContents <system-secrets/telegram/kmein.token>; token = lib.strings.fileContents <system-secrets/telegram/kmein.token>;
chatIds = [ "@autorenkalender" ]; chatIds = ["@autorenkalender"];
parseMode = "Markdown"; parseMode = "Markdown";
command = "${autorenkalender}/bin/autorenkalender"; command = "${autorenkalender}/bin/autorenkalender";
}; };

View File

@@ -1,5 +1,9 @@
{ config, pkgs, lib, ... }: {
let config,
pkgs,
lib,
...
}: let
telebots = pkgs.callPackage <telebots> {}; telebots = pkgs.callPackage <telebots> {};
reverseDirectory = "/run/telegram-reverse"; reverseDirectory = "/run/telegram-reverse";
proverbDirectory = "/run/telegram-proverb"; proverbDirectory = "/run/telegram-proverb";
@@ -14,17 +18,18 @@ in {
<niveum/modules/telegram-bot.nix> <niveum/modules/telegram-bot.nix>
]; ];
systemd.tmpfiles.rules = map (path: tmpfilesConfig { systemd.tmpfiles.rules = map (path:
type = "d"; tmpfilesConfig {
mode = "0750"; type = "d";
age = "1h"; mode = "0750";
inherit path; age = "1h";
}) [ reverseDirectory proverbDirectory ]; inherit path;
}) [reverseDirectory proverbDirectory];
systemd.services.telegram-reverse = { systemd.services.telegram-reverse = {
wantedBy = [ "multi-user.target" ]; wantedBy = ["multi-user.target"];
description = "Telegram reverse bot"; description = "Telegram reverse bot";
path = [ pkgs.ffmpeg ]; path = [pkgs.ffmpeg];
environment.TELEGRAM_BOT_TOKEN = lib.strings.fileContents <system-secrets/telegram/reverse.token>; environment.TELEGRAM_BOT_TOKEN = lib.strings.fileContents <system-secrets/telegram/reverse.token>;
enable = true; enable = true;
script = "${telebots}/bin/telegram-reverse"; script = "${telebots}/bin/telegram-reverse";
@@ -33,7 +38,7 @@ in {
}; };
systemd.services.telegram-betacode = { systemd.services.telegram-betacode = {
wantedBy = [ "multi-user.target" ]; wantedBy = ["multi-user.target"];
description = "Telegram beta code bot"; description = "Telegram beta code bot";
environment.TELEGRAM_BOT_TOKEN = lib.strings.fileContents <system-secrets/telegram/betacode.token>; environment.TELEGRAM_BOT_TOKEN = lib.strings.fileContents <system-secrets/telegram/betacode.token>;
enable = true; enable = true;
@@ -42,7 +47,7 @@ in {
}; };
systemd.services.telegram-proverb = { systemd.services.telegram-proverb = {
wantedBy = [ "multi-user.target" ]; wantedBy = ["multi-user.target"];
description = "Telegram proverb bot"; description = "Telegram proverb bot";
environment.TELEGRAM_BOT_TOKEN = lib.strings.fileContents <system-secrets/telegram/proverb.token>; environment.TELEGRAM_BOT_TOKEN = lib.strings.fileContents <system-secrets/telegram/proverb.token>;
enable = true; enable = true;

View File

@@ -1,13 +1,16 @@
{ pkgs, lib, ... }: {
let pkgs,
scripts = import <niveum/packages/scripts> { inherit pkgs lib; }; lib,
...
}: let
scripts = import <niveum/packages/scripts> {inherit pkgs lib;};
inherit (scripts) literature-quote; inherit (scripts) literature-quote;
in { in {
niveum.telegramBots.quotebot = { niveum.telegramBots.quotebot = {
enable = true; enable = true;
time = "08/6:00"; time = "08/6:00";
token = lib.strings.fileContents <system-secrets/telegram/kmein.token>; token = lib.strings.fileContents <system-secrets/telegram/kmein.token>;
chatIds = [ "18980945" "757821027" "455964311" ]; chatIds = ["18980945" "757821027" "455964311"];
command = "${literature-quote}/bin/literature-quote"; command = "${literature-quote}/bin/literature-quote";
parseMode = "Markdown"; parseMode = "Markdown";
}; };

View File

@@ -1,8 +1,11 @@
{ pkgs, lib, ... }: {
let pkgs,
nachtischsatan-bot = { token }: lib,
...
}: let
nachtischsatan-bot = {token}:
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 Updater, MessageHandler from telegram.ext import Updater, MessageHandler
from telegram.ext.filters import Filters from telegram.ext.filters import Filters
@@ -23,7 +26,7 @@ let
''; '';
in { in {
systemd.services.telegram-nachtischsatan = { systemd.services.telegram-nachtischsatan = {
wantedBy = [ "multi-user.target" ]; wantedBy = ["multi-user.target"];
description = "*flubberflubber*"; description = "*flubberflubber*";
enable = true; enable = true;
script = toString (nachtischsatan-bot { script = toString (nachtischsatan-bot {

View File

@@ -1,10 +1,13 @@
{ pkgs, lib, ... }:
{ {
pkgs,
lib,
...
}: {
niveum.telegramBots.tlg-wotd = { niveum.telegramBots.tlg-wotd = {
enable = true; enable = true;
time = "9:30"; time = "9:30";
token = lib.strings.fileContents <system-secrets/telegram/kmein.token>; token = lib.strings.fileContents <system-secrets/telegram/kmein.token>;
chatIds = [ "@tlgwotd" ]; chatIds = ["@tlgwotd"];
command = toString (pkgs.writers.writeDash "tlg-wotd" '' command = toString (pkgs.writers.writeDash "tlg-wotd" ''
${pkgs.curl}/bin/curl -sSL http://stephanus.tlg.uci.edu/Iris/Wotd \ ${pkgs.curl}/bin/curl -sSL http://stephanus.tlg.uci.edu/Iris/Wotd \
| ${pkgs.recode}/bin/recode html..utf8 \ | ${pkgs.recode}/bin/recode html..utf8 \

View File

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

View File

@@ -1,4 +1,4 @@
{ pkgs, ... }: { {pkgs, ...}: {
environment.systemPackages = [ environment.systemPackages = [
pkgs.tmuxp pkgs.tmuxp
pkgs.reptyr # move programs over to a tmux session pkgs.reptyr # move programs over to a tmux session
@@ -9,26 +9,44 @@
keyMode = "vi"; keyMode = "vi";
clock24 = true; clock24 = true;
terminal = "screen-256color"; terminal = "screen-256color";
baseIndex = 1;
aggressiveResize = true;
escapeTime = 50;
historyLimit = 7000;
shortcut = "a";
extraConfig = '' extraConfig = ''
set -g mouse on
unbind *
bind * list-clients
# naVIgate
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
# Use C-h and C-l to cycle through panes
bind -r C-h select-window -t :-
bind -r C-l select-window -t :+
setw -g monitor-activity on
set -g visual-activity on
set -g status-interval 2 set -g status-interval 2
set -g status-left-length 32 set -g status-left-length 32
set -g status-right-length 150 set -g status-right-length 150
set -g status-bg default set -g status-bg colour242
setw -g window-status-format "#[fg=colour12,bg=colour233] #I #[fg=white,bg=colour237] #W " setw -g window-status-format "#[fg=colour12,bg=colour233] #I #[fg=white,bg=colour237] #W "
setw -g window-status-current-format "#[fg=colour12,bg=colour233] * #[fg=white,bg=colour237,bold] #W " setw -g window-status-current-format "#[fg=colour12,bg=colour233] * #[fg=white,bg=colour237,bold] #W "
set -g status-left "" set -g status-left ""
set -g status-right "#[fg=colour255,bg=colour237,bold] %Y-%m-%d #[default]#[fg=colour12,bg=colour233] %H:%M " set -g status-right "#[fg=colour255,bg=colour237,bold] #(hostname -I) #[default]#[fg=colour12,bg=colour233] %FT%R "
set -g status-justify left set -g status-justify left
set -g status-position bottom set -g status-position bottom
set -g mouse on
unbind *
bind * list-clients
''; '';
}; };
} }

View File

@@ -1,10 +1,12 @@
{ pkgs, lib, ... }: {
let pkgs,
lib,
...
}: let
inherit (import <niveum/lib>) localAddresses; inherit (import <niveum/lib>) localAddresses;
living-room-id = 131090; living-room-id = 131090;
in in {
{ imports = [<niveum/modules/traadfri.nix>];
imports = [ <niveum/modules/traadfri.nix> ];
environment.systemPackages = [ environment.systemPackages = [
(pkgs.writers.writeDashBin "traadfri-party" '' (pkgs.writers.writeDashBin "traadfri-party" ''

View File

@@ -1 +1 @@
{ pkgs, ... }: { environment.systemPackages = [ pkgs.vscode ]; } {pkgs, ...}: {environment.systemPackages = [pkgs.vscode];}

View File

@@ -1,6 +1,9 @@
{ pkgs, lib, ... }:
{ {
imports = [ <stockholm/krebs/3modules/fetchWallpaper.nix> ]; pkgs,
lib,
...
}: {
imports = [<stockholm/krebs/3modules/fetchWallpaper.nix>];
krebs.fetchWallpaper = { krebs.fetchWallpaper = {
enable = true; enable = true;

View File

@@ -1,6 +1,9 @@
{ config, pkgs, ... }:
{ {
environment.systemPackages = [ pkgs.watson ]; config,
pkgs,
...
}: {
environment.systemPackages = [pkgs.watson];
environment.variables.WATSON_DIR = "${config.users.users.me.home}/cloud/Seafile/Documents/watson"; environment.variables.WATSON_DIR = "${config.users.users.me.home}/cloud/Seafile/Documents/watson";
} }

View File

@@ -1,4 +1,8 @@
{ config, pkgs, ... }: { {
config,
pkgs,
...
}: {
home-manager.users.me.home.file.".zshrc".text = '' home-manager.users.me.home.file.".zshrc".text = ''
# nothing to see here # nothing to see here
''; '';
@@ -21,7 +25,7 @@
enableCompletion = true; enableCompletion = true;
autosuggestions.enable = true; autosuggestions.enable = true;
syntaxHighlighting.enable = true; syntaxHighlighting.enable = true;
syntaxHighlighting.highlighters = [ "main" "brackets" "pattern" "line" ]; syntaxHighlighting.highlighters = ["main" "brackets" "pattern" "line"];
interactiveShellInit = '' interactiveShellInit = ''
setopt INTERACTIVE_COMMENTS CORRECT setopt INTERACTIVE_COMMENTS CORRECT
setopt MULTIOS setopt MULTIOS

44
flake.lock generated
View File

@@ -2,11 +2,11 @@
"nodes": { "nodes": {
"flake-utils": { "flake-utils": {
"locked": { "locked": {
"lastModified": 1644229661, "lastModified": 1648297722,
"narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=", "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=",
"owner": "numtide", "owner": "numtide",
"repo": "flake-utils", "repo": "flake-utils",
"rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797", "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -22,11 +22,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1643933536, "lastModified": 1647175256,
"narHash": "sha256-yRmsWAG4DnLxLIUtlaZsl0kH7rN5xSoyNRlf0YZrcH4=", "narHash": "sha256-7H+veXPM7IwdN1DoZqliwb9sghlN56koV5dnCu1kpsc=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "2860d7e3bb350f18f7477858f3513f9798896831", "rev": "a8d00f5c038cf7ec54e7dac9c57b171c1217f008",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -109,11 +109,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1644837400, "lastModified": 1647992509,
"narHash": "sha256-treFS89w/xKzeTjJSJdYp/Ceddv6oqq7bL9mZMQDPi0=", "narHash": "sha256-AG40Nt5OWz0LBs5p457emOuwLKOvTtcv/2fUdnEN3Ws=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "a03ae0e6d078cfdbb8404c3bff3622bd4e2f1c57", "rev": "d2caa9377539e3b5ff1272ac3aa2d15f3081069f",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -125,11 +125,11 @@
}, },
"nixpkgs-unstable": { "nixpkgs-unstable": {
"locked": { "locked": {
"lastModified": 1644951967, "lastModified": 1648337267,
"narHash": "sha256-j+l8bt++dsYTJSGABuqeBEom5aNpD4n0BsOTdewFYuU=", "narHash": "sha256-8DRg8UDvs63iaIaHEbWG7/lnD9ImQlMNsTZMY3PvFLc=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "05e1f8a2c7797b0d9f9e07ab2aaeccecdcf9b7da", "rev": "6de161729c81dc98e844793cc9c8fda29d5ef62a",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -158,11 +158,11 @@
"retiolum": { "retiolum": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1644849126, "lastModified": 1647444524,
"narHash": "sha256-iaRNvfQrUD+ZownDWWNdDwhVPgSsU5ojvVdswVq1IpY=", "narHash": "sha256-N4T1UXLkYJMQqk65LkTDpW70ujXXeZ9xe5k+LOpznAI=",
"owner": "krebs", "owner": "krebs",
"repo": "retiolum", "repo": "retiolum",
"rev": "6de359ef848dc1f38fb76731c35e712ee885fd88", "rev": "de6d7dc9bd671e65f2ee3004b6807625e7553e84",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -194,11 +194,11 @@
"scripts": { "scripts": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1639436812, "lastModified": 1648314795,
"narHash": "sha256-6CajvfDo7t4ANgjc7DxqH7lI3WRE4MK8q3mBKAjk80k=", "narHash": "sha256-hGIXkAcGiJnVXnl8kigZpI3VFrLmAr2+yr85hi5JwP0=",
"owner": "kmein", "owner": "kmein",
"repo": "scripts", "repo": "scripts",
"rev": "d34a8161ba11135a45d3141dc9af482db945d63c", "rev": "d1d525b92a34e55b1ad886807c284106e58716b2",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -210,11 +210,11 @@
"stockholm": { "stockholm": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1644865613, "lastModified": 1648214990,
"narHash": "sha256-z7hPtMYxoQuWyLujUs5vbdZOGbjFosh+/IX3GpCDlkc=", "narHash": "sha256-rptATGq+jcpL+P+Cr6d3OajV6zYkbHPWlt3aQNZI2TY=",
"ref": "master", "ref": "master",
"rev": "e3785b22b2c6cb173a58fd066c4eda80a67fb872", "rev": "ae9c0b12710b5361d0d45510eb401eebfc1b3fb0",
"revCount": 10404, "revCount": 10497,
"type": "git", "type": "git",
"url": "https://cgit.lassul.us/stockholm" "url": "https://cgit.lassul.us/stockholm"
}, },

150
flake.nix
View File

@@ -16,60 +16,100 @@
}; };
# legacy # legacy
menstruation-backend = { url = "github:kmein/menstruation.rs"; flake = false; }; menstruation-backend = {
menstruation-telegram = { url = "github:kmein/menstruation-telegram"; flake = false; }; url = "github:kmein/menstruation.rs";
nix-writers = { url = "git+https://cgit.krebsco.de/nix-writers"; flake = false; }; flake = false;
recht = { url = "github:kmein/recht"; flake = false; }; };
retiolum = { url = "github:krebs/retiolum"; flake = false; }; menstruation-telegram = {
scripts = { url = "github:kmein/scripts"; flake = false; }; url = "github:kmein/menstruation-telegram";
stockholm = { url = "git+https://cgit.lassul.us/stockholm"; flake = false; }; flake = false;
telebots = { url = "github:kmein/telebots"; flake = false; }; };
tinc-graph = { url = "github:kmein/tinc-graph"; flake = false; }; nix-writers = {
traadfri = { url = "github:kmein/traadfri"; flake = false; }; url = "git+https://cgit.krebsco.de/nix-writers";
tuna = { url = "github:kmein/tuna"; flake = false; }; flake = false;
};
recht = {
url = "github:kmein/recht";
flake = false;
};
retiolum = {
url = "github:krebs/retiolum";
flake = false;
};
scripts = {
url = "github:kmein/scripts";
flake = false;
};
stockholm = {
url = "git+https://cgit.lassul.us/stockholm";
flake = false;
};
telebots = {
url = "github:kmein/telebots";
flake = false;
};
tinc-graph = {
url = "github:kmein/tinc-graph";
flake = false;
};
traadfri = {
url = "github:kmein/traadfri";
flake = false;
};
tuna = {
url = "github:kmein/tuna";
flake = false;
};
}; };
outputs = outputs = {
{ self self,
, flake-utils flake-utils,
, home-manager home-manager,
, krops krops,
, menstruation-backend menstruation-backend,
, menstruation-telegram menstruation-telegram,
, nix-writers nix-writers,
, nixpkgs nixpkgs,
, nixpkgs-unstable nixpkgs-unstable,
, recht recht,
, retiolum retiolum,
, scripts scripts,
, stockholm stockholm,
, telebots telebots,
, tinc-graph tinc-graph,
, traadfri traadfri,
, tuna tuna,
}@inputs: } @ inputs: let
let
system = "x86_64-linux"; system = "x86_64-linux";
pkgs = nixpkgs.legacyPackages.${system}; pkgs = nixpkgs.legacyPackages.${system};
source = name: { source = name:
niveum.file = toString ./.; {
nixos-config.symlink = "niveum/systems/${name}/configuration.nix"; niveum.file = toString ./.;
system-secrets.pass = { nixos-config.symlink = "niveum/systems/${name}/configuration.nix";
dir = toString ~/.password-store; system-secrets.pass = {
name = "systems/${name}"; dir = toString ~/.password-store;
}; name = "systems/${name}";
secrets.pass = { };
dir = toString ~/.password-store; secrets.pass = {
name = "shared"; dir = toString ~/.password-store;
}; name = "shared";
} // nixpkgs.lib.mapAttrs' (name: value: { };
inherit name; }
value.file = toString value; // nixpkgs.lib.mapAttrs' (name: value: {
}) (nixpkgs.lib.filterAttrs (name: _: !builtins.elem name [ "flake-utils" "krops" "self" ]) inputs); inherit name;
deployScriptFor = {name, host}: let inherit (import ./lib/default.nix) sshPort; in toString (krops.packages.${system}.writeDeploy "deploy-${name}" { value.file = toString value;
source = krops.lib.evalSource [ (source name) ]; }) (nixpkgs.lib.filterAttrs (name: _: !builtins.elem name ["flake-utils" "krops" "self"]) inputs);
target = "root@${host}:${toString sshPort}"; deployScriptFor = {
}); name,
host,
}: let
inherit (import ./lib/default.nix) sshPort;
in
toString (krops.packages.${system}.writeDeploy "deploy-${name}" {
source = krops.lib.evalSource [(source name)];
target = "root@${host}:${toString sshPort}";
});
in { in {
apps.${system} = let apps.${system} = let
forSystems = f: builtins.listToAttrs (map f (builtins.attrNames (builtins.readDir ./systems))); forSystems = f: builtins.listToAttrs (map f (builtins.attrNames (builtins.readDir ./systems)));
@@ -77,16 +117,20 @@
name = "deploy-${name}"; name = "deploy-${name}";
value = { value = {
type = "app"; type = "app";
program = deployScriptFor { inherit name; host = "${name}.r"; }; program = deployScriptFor {
inherit name;
host = "${name}.r";
};
}; };
}); });
ciScripts = forSystems (name: { ciScripts = forSystems (name: {
name = "build-${name}"; name = "build-${name}";
value = { value = {
type = "app"; type = "app";
program = import ./ci.nix { inherit name system inputs; }; program = import ./ci.nix {inherit name system inputs;};
}; };
}); });
in deployScripts // ciScripts; in
deployScripts // ciScripts;
}; };
} }

View File

@@ -1,5 +1,13 @@
rec { rec {
tmpfilesConfig = {type, path, mode ? "-", user ? "-", group ? "-", age ? "-", argument ? "-"}: "${type} '${path}' ${mode} ${user} ${group} ${age} ${argument}"; tmpfilesConfig = {
type,
path,
mode ? "-",
user ? "-",
group ? "-",
age ? "-",
argument ? "-",
}: "${type} '${path}' ${mode} ${user} ${group} ${age} ${argument}";
restic = rec { restic = rec {
port = 3571; port = 3571;
@@ -8,14 +16,25 @@ rec {
}; };
firewall = lib: { firewall = lib: {
accept = { source, protocol, dport }: "nixos-fw -s ${lib.escapeShellArg source} -p ${lib.escapeShellArg protocol} --dport ${lib.escapeShellArg (toString dport)} -j nixos-fw-accept"; accept = {
source,
protocol,
dport,
}: "nixos-fw -s ${lib.escapeShellArg source} -p ${lib.escapeShellArg protocol} --dport ${lib.escapeShellArg (toString dport)} -j nixos-fw-accept";
addRules = lib.concatMapStringsSep "\n" (rule: "iptables -A ${rule}"); addRules = lib.concatMapStringsSep "\n" (rule: "iptables -A ${rule}");
removeRules = lib.concatMapStringsSep "\n" (rule: "iptables -D ${rule} || true"); removeRules = lib.concatMapStringsSep "\n" (rule: "iptables -D ${rule} || true");
}; };
serveHtml = file: pkgs: '' serveHtml = file: pkgs: ''
default_type "text/html"; default_type "text/html";
root ${pkgs.linkFarm "fahrplan" [{ name = "index.html"; path = file; }]}; root ${
pkgs.linkFarm "fahrplan" [
{
name = "index.html";
path = file;
}
]
};
index index.html; index index.html;
''; '';
@@ -50,10 +69,11 @@ rec {
github = "kmein"; github = "kmein";
email = "kmein@posteo.de"; email = "kmein@posteo.de";
name = "Kierán Meinhardt"; name = "Kierán Meinhardt";
sshKeys = pkgs: pkgs.lib.strings.splitString "\n" (pkgs.lib.strings.fileContents (pkgs.fetchurl { sshKeys = pkgs:
url = "https://github.com/kmein.keys"; pkgs.lib.strings.splitString "\n" (pkgs.lib.strings.fileContents (pkgs.fetchurl {
sha256 = "09c6ny0rmpid1m0pc1wsmb3wyy9g721lf4kv55i4lrp42b3i2d5b"; url = "https://github.com/kmein.keys";
})); sha256 = "09c6ny0rmpid1m0pc1wsmb3wyy9g721lf4kv55i4lrp42b3i2d5b";
}));
}; };
syncthing.devices = { syncthing.devices = {
@@ -62,6 +82,7 @@ rec {
manakish.id = "AJVBWR2-VFFAGZF-7ZF5JAX-T63GMOG-NZ446WK-MC5E6WK-6X6Q2HE-QQA2JQ3"; manakish.id = "AJVBWR2-VFFAGZF-7ZF5JAX-T63GMOG-NZ446WK-MC5E6WK-6X6Q2HE-QQA2JQ3";
toum.id = "CBJQXFF-FMFGWFU-2J6FMPR-SRDTSGX-7NHOYOH-CQCABKF-KQJMRJC-SDE24Q4"; toum.id = "CBJQXFF-FMFGWFU-2J6FMPR-SRDTSGX-7NHOYOH-CQCABKF-KQJMRJC-SDE24Q4";
zaatar.id = "CGHO6LK-ZJBAXBD-UWI7AH3-BXYARE6-EUIM7PE-O2FUCOM-VCCRNCM-IG34WQ7"; 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,4 +1,7 @@
{pkgs, path}: '' {
pkgs,
path,
}: ''
<config> <config>
<paths> <paths>
<path recursive="1">${path}</path> <path recursive="1">${path}</path>

View File

@@ -1,5 +1,9 @@
{ pkgs, wirelessInterface, colours, batteryName }: {
let pkgs,
wirelessInterface,
colours,
batteryName,
}: let
inherit (pkgs) lib; inherit (pkgs) lib;
setsid = script: setsid = script:
@@ -95,37 +99,43 @@ in {
{ {
block = "custom"; block = "custom";
interval = 60 * 5; interval = 60 * 5;
command = let spacetime = import <niveum/configs/spacetime.nix>; in pkgs.writers.writePython3 "sun.py" { libraries = [ pkgs.python3Packages.astral ]; flakeIgnore = [ "E121" "E501" ]; } command = let
'' spacetime = import <niveum/configs/spacetime.nix>;
import astral in
import astral.moon pkgs.writers.writePython3 "sun.py" {
import astral.sun libraries = [pkgs.python3Packages.astral];
flakeIgnore = ["E121" "E501"];
moon_phases = {
0: "🌑",
3.5: "🌒",
7: "🌓",
10.5: "🌔",
14: "🌕",
17.5: "🌖",
21: "🌗",
24.5: "🌘",
28: "🌑",
} }
current_phase = astral.moon.phase() ''
closest_phase = min(moon_phases.keys(), key=lambda x: abs(current_phase - x)) import astral
import astral.moon
import astral.sun
city = astral.LocationInfo("Berlin", "Germany", "${spacetime.time.timeZone}", ${toString spacetime.location.latitude}, ${toString spacetime.location.longitude}) moon_phases = {
sun = astral.sun.sun(city.observer, date=astral.today(), tzinfo=city.timezone) 0: "🌑",
3.5: "🌒",
7: "🌓",
10.5: "🌔",
14: "🌕",
17.5: "🌖",
21: "🌗",
24.5: "🌘",
28: "🌑",
}
current_phase = astral.moon.phase()
closest_phase = min(moon_phases.keys(), key=lambda x: abs(current_phase - x))
print("🌅 {} 🌇 {} {} {}".format(sun["sunrise"].strftime("%R"), sun["sunset"].strftime("%R"), moon_phases[closest_phase], round(current_phase, 1))) 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"), moon_phases[closest_phase], round(current_phase, 1)))
'';
} }
{ {
block = "custom"; block = "custom";
interval = 5; interval = 5;
command = pkgs.writers.writeDash "hu-berlin-vpn" '' command = pkgs.writers.writeDash "hu-berlin-vpn" ''
PATH=${lib.makeBinPath [ pkgs.systemd ]} PATH=${lib.makeBinPath [pkgs.systemd]}
(systemctl is-active --quiet openvpn-hu-berlin.service && echo "🎓👍 (OpenVPN)") \ (systemctl is-active --quiet openvpn-hu-berlin.service && echo "🎓👍 (OpenVPN)") \
|| (systemctl is-active --quiet hu-vpn.service && echo "🎓👍 (PPP+SSL)") \ || (systemctl is-active --quiet hu-vpn.service && echo "🎓👍 (PPP+SSL)") \
|| echo "🎓👎" || echo "🎓👎"
@@ -154,7 +164,7 @@ in {
format_mem = "{mem_used;G}"; format_mem = "{mem_used;G}";
clickable = false; clickable = false;
} }
{ block = "load"; } {block = "load";}
{ {
block = "time"; block = "time";
interval = 1; interval = 1;

143
lib/radio-news.html Normal file
View File

@@ -0,0 +1,143 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>lassulus radio news</title>
<style>
body {
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
}
main {
max-width: 800px;
margin: 0 auto;
display: grid;
grid-template-columns: 2fr 1fr;
grid-gap: 2em;
}
#news-list ul {
list-style: none;
padding-left: 0;
}
#news-list li {
margin-bottom: 1em;
}
#news-list time {
display: block;
color: grey;
}
form label {
display: block;
}
form input,
form textarea {
width: 100%;
margin-bottom: 1em;
}
@media only screen and (max-width: 768px) {
main {
grid-template-columns: 1fr;
}
}
</style>
<script>
const newsEndpoint = "http://prism.r:7999";
function isoString(date) {
return date.toISOString().slice(0, -5) + "Z";
}
function setNextNews() {
document.getElementById("next-news").innerHTML = (
60 - new Date().getUTCMinutes()
).toString();
}
setInterval(setNextNews, 6000);
function fetchNews() {
fetch(newsEndpoint).then((response) => {
response.json().then((news) => {
const newsList = document.getElementById("news-list");
newsList.innerHTML = "";
const ul = document.createElement("ul");
for (const newsItem of news) {
const start = new Date(newsItem.from);
const end = new Date(newsItem.to);
const li = document.createElement("li");
const startDate = document.createElement("time");
startDate.className = "start";
startDate.title = start.toString();
startDate.setAttribute("datetime", isoString(start));
startDate.appendChild(document.createTextNode(isoString(start)));
const endDate = document.createElement("time");
endDate.className = "end";
endDate.title = end.toString();
endDate.setAttribute("datetime", isoString(end));
endDate.appendChild(document.createTextNode(isoString(end)));
li.appendChild(document.createTextNode(newsItem.text));
li.appendChild(startDate);
li.appendChild(endDate);
ul.appendChild(li);
}
newsList.appendChild(ul);
});
});
}
function sendNews(event) {
event.preventDefault();
const formData = new FormData(event.target);
const request = new XMLHttpRequest();
request.open("POST", newsEndpoint, false); // synchronous
request.send(
JSON.stringify({
from: isoString(new Date(formData.get("from"))),
to: isoString(new Date(formData.get("to"))),
text: formData.get("text"),
})
);
location.reload();
}
window.onload = () => {
setNextNews();
fetchNews();
};
</script>
</head>
<body>
<main>
<section>
<h1>Submit news</h1>
<form onsubmit="sendNews(event)">
<label>Start date</label>
<input type="datetime-local" name="from" required />
<label>End date</label>
<input type="datetime-local" name="to" required />
<label>News text</label>
<textarea name="text" rows="10" required></textarea>
<input type="submit" />
</form>
Next news report should start in <span id="next-news"></span> minutes.
</section>
<aside>
<h1>Planned news</h1>
<div id="news-list">
<em>No news planned yet.</em>
</div>
</aside>
</main>
</body>
</html>

View File

@@ -18,4 +18,9 @@
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";
}; };
tahina = {
ipv4 = "10.243.2.74";
ipv6 = "42:0:3c46:2923:1c90:872:edd6:306";
};
} }

File diff suppressed because it is too large Load Diff

View File

@@ -8,7 +8,6 @@ nnoremap <C-l> :Rg<CR>
let g:fzf_layout = { 'down': '~15%' } let g:fzf_layout = { 'down': '~15%' }
colorscheme paramount colorscheme paramount
set background=dark
" transparent background " transparent background
hi Normal guibg=NONE ctermbg=NONE hi Normal guibg=NONE ctermbg=NONE
@@ -35,11 +34,17 @@ nnoremap <Leader>a <Plug>(ale_hover)
nnoremap <Leader>d <Plug>(ale_go_to_definition_in_tab) nnoremap <Leader>d <Plug>(ale_go_to_definition_in_tab)
nnoremap <Leader>rf <Plug>(ale_find_references) nnoremap <Leader>rf <Plug>(ale_find_references)
" Hit `%` on `if` to jump to `else`.
runtime macros/matchit.vim
filetype plugin indent on filetype plugin indent on
set autoindent
set notitle set notitle
set nospell set nospell
set nocompatible
set smartcase ignorecase " you need these two set smartcase ignorecase " you need these two
set backspace=indent,eol,start
set hidden
set ruler
set shiftwidth=2 tabstop=2 expandtab set shiftwidth=2 tabstop=2 expandtab
set laststatus=1 set laststatus=1
set number set number
@@ -109,29 +114,33 @@ command! ToggleBackground call s:toggle_background()
inoremap <F12> <C-O>:ToggleBackground<CR> inoremap <F12> <C-O>:ToggleBackground<CR>
nnoremap <F12> :ToggleBackground<CR> nnoremap <F12> :ToggleBackground<CR>
autocmd bufnewfile,bufread *.4th set filetype=forth augroup filetypes
autocmd bufnewfile,bufread *.asm set filetype=nasm autocmd!
autocmd bufnewfile,bufread *.c set keywordprg=man\ 3 autocmd bufnewfile,bufread *.4th set filetype=forth
autocmd bufnewfile,bufread *.h set keywordprg=man\ 3 autocmd bufnewfile,bufread *.asm set filetype=nasm
autocmd bufnewfile,bufread *.conf set filetype=conf autocmd bufnewfile,bufread *.c set keywordprg=man\ 3
autocmd bufnewfile,bufread *.nix packadd vim-nix | set filetype=nix | set path+=/var/src autocmd bufnewfile,bufread *.h set keywordprg=man\ 3
autocmd bufnewfile,bufread *.rust packadd rust-vim autocmd bufnewfile,bufread *.conf set filetype=conf
autocmd bufnewfile,bufread *.csv packadd csv.vim | set filetype=csv autocmd bufnewfile,bufread *.nix packadd vim-nix | set filetype=nix | set path+=/var/src
autocmd bufnewfile,bufread *.tex packadd vimtex | set filetype=tex autocmd bufnewfile,bufread *.rust packadd rust-vim
autocmd bufnewfile,bufread *.ics packadd icalendar.vim | set filetype=icalendar autocmd bufnewfile,bufread *.csv packadd csv.vim | set filetype=csv
autocmd bufnewfile,bufread *.ts packadd typescript-vim | set filetype=typescript autocmd bufnewfile,bufread *.tex packadd vimtex | set filetype=tex
autocmd bufnewfile,bufread *.jq packadd jq.vim autocmd bufnewfile,bufread *.ics packadd icalendar.vim | set filetype=icalendar
autocmd bufnewfile,bufread *.journal packadd vim-ledger | set filetype=ledger shiftwidth=4 autocmd bufnewfile,bufread *.ts packadd typescript-vim | set filetype=typescript
autocmd bufnewfile,bufread urls,config set filetype=conf autocmd bufnewfile,bufread *.jq packadd jq.vim
autocmd bufnewfile,bufread *.elm packadd elm-vim | set filetype=elm shiftwidth=4 autocmd bufnewfile,bufread *.journal packadd vim-ledger | set filetype=ledger shiftwidth=4
autocmd bufnewfile,bufread *.md packadd vim-pandoc | packadd vim-pandoc-syntax | set filetype=pandoc autocmd bufnewfile,bufread urls,config set filetype=conf
autocmd filetype haskell packadd haskell-vim | set keywordprg=hoogle\ -i autocmd bufnewfile,bufread *.elm packadd elm-vim | set filetype=elm shiftwidth=4
autocmd filetype javascript packadd vim-javascript autocmd bufnewfile,bufread *.md packadd vim-pandoc | packadd vim-pandoc-syntax | set filetype=pandoc
autocmd filetype make setlocal noexpandtab autocmd filetype haskell packadd haskell-vim | set keywordprg=hoogle\ -i
autocmd filetype javascript packadd vim-javascript
autocmd filetype make setlocal noexpandtab
autocmd filetype html packadd emmet-vim
autocmd filetype gitcommit setlocal spell spelllang=en
autocmd filetype mail setlocal spell spelllang=de textwidth=0
augroup end
autocmd filetype html packadd emmet-vim
autocmd filetype gitcommit setlocal spell spelllang=en
autocmd filetype mail setlocal spell spelllang=de textwidth=0
autocmd bufreadpost * autocmd bufreadpost *
\ if line("'\"") > 0 && line("'\"") <= line("$") | \ if line("'\"") > 0 && line("'\"") <= line("$") |
\ exe "normal! g`\"" | \ exe "normal! g`\"" |

View File

@@ -1,20 +1,25 @@
{ pkgs, lib, config, ... }: {
with lib; pkgs,
let cfg = config.niveum.dropbox; lib,
config,
...
}:
with lib; let
cfg = config.niveum.dropbox;
in { in {
options.niveum.dropbox = { enable = mkEnableOption "Dropbox"; }; options.niveum.dropbox = {enable = mkEnableOption "Dropbox";};
config = mkIf cfg.enable { config = mkIf cfg.enable {
environment.systemPackages = [ pkgs.dropbox-cli ]; environment.systemPackages = [pkgs.dropbox-cli];
networking.firewall = { networking.firewall = {
allowedTCPPorts = [ 17500 ]; allowedTCPPorts = [17500];
allowedUDPPorts = [ 17500 ]; allowedUDPPorts = [17500];
}; };
systemd.user.services.dropbox = { systemd.user.services.dropbox = {
description = "Dropbox synchronisation service"; description = "Dropbox synchronisation service";
wantedBy = [ "graphical-session.target" ]; wantedBy = ["graphical-session.target"];
serviceConfig = { serviceConfig = {
ExecStart = "${pkgs.dropbox.out}/bin/dropbox"; ExecStart = "${pkgs.dropbox.out}/bin/dropbox";
ExecReload = "${pkgs.coreutils.out}/bin/kill -HUP $MAINPID"; ExecReload = "${pkgs.coreutils.out}/bin/kill -HUP $MAINPID";

View File

@@ -1,6 +1,10 @@
{ config, lib, pkgs, ... }: {
with lib; config,
let lib,
pkgs,
...
}:
with lib; let
cfg = config.niveum.hledger; cfg = config.niveum.hledger;
hledger-git = pkgs.writers.writeDashBin "hledger-git" '' hledger-git = pkgs.writers.writeDashBin "hledger-git" ''
LEDGER_DIR="$(dirname $LEDGER_FILE)" LEDGER_DIR="$(dirname $LEDGER_FILE)"
@@ -39,14 +43,14 @@ in {
default = "127.0.0.1"; default = "127.0.0.1";
}; };
capabilities = mkOption { capabilities = mkOption {
type = types.listOf (types.enum [ "view" "add" "manage" ]); type = types.listOf (types.enum ["view" "add" "manage"]);
default = [ "view" "add" ]; default = ["view" "add"];
}; };
flags = mkOption { flags = mkOption {
type = types.listOf types.str; type = types.listOf types.str;
default = [ ]; default = [];
}; };
user = mkOption { type = types.attrs; }; user = mkOption {type = types.attrs;};
package = mkOption { package = mkOption {
type = types.package; type = types.package;
default = pkgs.hledger-web; default = pkgs.hledger-web;
@@ -55,22 +59,22 @@ in {
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
environment.systemPackages = [ cfg.package hledger-git hledger-edit ]; environment.systemPackages = [cfg.package hledger-git hledger-edit];
environment.variables.LEDGER_FILE = environment.variables.LEDGER_FILE =
mkIf (cfg.ledgerFile != null) cfg.ledgerFile; mkIf (cfg.ledgerFile != null) cfg.ledgerFile;
systemd.services.hledger-web = mkIf cfg.server.enable { systemd.services.hledger-web = mkIf cfg.server.enable {
description = "hledger server"; description = "hledger server";
wantedBy = [ "multi-user.target" ]; wantedBy = ["multi-user.target"];
serviceConfig = { serviceConfig = {
Restart = "always"; Restart = "always";
ExecStart = '' ExecStart = ''
${cfg.server.package}/bin/hledger-web \ ${cfg.server.package}/bin/hledger-web \
--port=${toString cfg.server.port} \ --port=${toString cfg.server.port} \
--host=${cfg.server.host} \ --host=${cfg.server.host} \
--capabilities=${concatStringsSep "," cfg.server.capabilities} \ --capabilities=${concatStringsSep "," cfg.server.capabilities} \
${concatStringsSep " " cfg.server.flags} ${concatStringsSep " " cfg.server.flags}
''; '';
User = cfg.server.user.name; User = cfg.server.user.name;
PrivateTemp = true; PrivateTemp = true;

View File

@@ -1,8 +1,13 @@
{ pkgs, lib, config, ... }: {
with lib; pkgs,
let cfg = config.niveum.minecraft; lib,
config,
...
}:
with lib; let
cfg = config.niveum.minecraft;
in { in {
options.niveum.minecraft = { enable = mkEnableOption "Minecraft"; }; options.niveum.minecraft = {enable = mkEnableOption "Minecraft";};
config = mkIf cfg.enable { environment.systemPackages = [ pkgs.minecraft ]; }; config = mkIf cfg.enable {environment.systemPackages = [pkgs.minecraft];};
} }

View File

@@ -1,6 +1,10 @@
{ config, lib, pkgs, ... }: {
with lib; config,
let lib,
pkgs,
...
}:
with lib; let
cfg = config.services.moodle-dl; cfg = config.services.moodle-dl;
json = pkgs.formats.json {}; json = pkgs.formats.json {};
moodle-dl-json = json.generate "moodle-dl.json" cfg.settings; moodle-dl-json = json.generate "moodle-dl.json" cfg.settings;
@@ -52,7 +56,6 @@ in {
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
users.users.moodle-dl = { users.users.moodle-dl = {
isSystemUser = true; isSystemUser = true;
home = cfg.directory; home = cfg.directory;
@@ -63,7 +66,7 @@ in {
systemd.services.moodle-dl = { systemd.services.moodle-dl = {
description = "A Moodle downloader that downloads course content"; description = "A Moodle downloader that downloads course content";
wants = [ "network-online.target" ]; wants = ["network-online.target"];
serviceConfig = mkMerge [ serviceConfig = mkMerge [
{ {
Type = "oneshot"; Type = "oneshot";
@@ -73,11 +76,11 @@ in {
ExecStart = "${cfg.package}/bin/moodle-dl ${lib.optionalString cfg.notifyOnly "--without-downloading-files"}"; ExecStart = "${cfg.package}/bin/moodle-dl ${lib.optionalString cfg.notifyOnly "--without-downloading-files"}";
ExecStartPre = "${pkgs.coreutils}/bin/ln -sfn ${toString moodle-dl-json} ${cfg.directory}/config.json"; ExecStartPre = "${pkgs.coreutils}/bin/ln -sfn ${toString moodle-dl-json} ${cfg.directory}/config.json";
} }
(mkIf (cfg.directory == stateDirectoryDefault) { StateDirectory = "moodle-dl"; }) (mkIf (cfg.directory == stateDirectoryDefault) {StateDirectory = "moodle-dl";})
]; ];
inherit (cfg) startAt; inherit (cfg) startAt;
}; };
}; };
meta.maintainers = [ maintainers.kmein ]; meta.maintainers = [maintainers.kmein];
} }

View File

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

View File

@@ -1,6 +1,10 @@
{ config, pkgs, lib, ... }: {
with lib; config,
let pkgs,
lib,
...
}:
with lib; let
netname = "retiolum"; netname = "retiolum";
cfg = config.networking.retiolum; cfg = config.networking.retiolum;
in { in {
@@ -27,10 +31,10 @@ in {
}; };
config = { config = {
services.tinc.networks.${netname} = { services.tinc.networks.${netname} = {
name = cfg.nodename; name = cfg.nodename;
hosts = builtins.mapAttrs hosts =
builtins.mapAttrs
(name: _: builtins.readFile "${<retiolum/hosts>}/${name}") (name: _: builtins.readFile "${<retiolum/hosts>}/${name}")
(builtins.readDir <retiolum/hosts>); (builtins.readDir <retiolum/hosts>);
rsaPrivateKeyFile = toString <system-secrets/retiolum.key>; rsaPrivateKeyFile = toString <system-secrets/retiolum.key>;
@@ -43,11 +47,11 @@ in {
networking.extraHosts = builtins.readFile (toString <retiolum/etc.hosts>); networking.extraHosts = builtins.readFile (toString <retiolum/etc.hosts>);
environment.systemPackages = [ config.services.tinc.networks.${netname}.package ]; environment.systemPackages = [config.services.tinc.networks.${netname}.package];
networking.firewall = { networking.firewall = {
allowedTCPPorts = [ 655 ]; allowedTCPPorts = [655];
allowedUDPPorts = [ 655 ]; allowedUDPPorts = [655];
}; };
#services.netdata.portcheck.checks.tinc.port = 655; #services.netdata.portcheck.checks.tinc.port = 655;

View File

@@ -1,13 +1,17 @@
{ config, lib, pkgs, ... }: {
config,
with lib; lib,
pkgs,
let ...
}:
with lib; let
cfg = config.services.spotifyd; cfg = config.services.spotifyd;
toml = pkgs.formats.toml {}; toml = pkgs.formats.toml {};
spotifydConf = if cfg.settings != {} then toml.generate "spotify.conf" cfg.settings else pkgs.writeText "spotifyd.conf" cfg.config; spotifydConf =
in if cfg.settings != {}
{ then toml.generate "spotify.conf" cfg.settings
else pkgs.writeText "spotifyd.conf" cfg.config;
in {
options = { options = {
services.spotifyd = { services.spotifyd = {
enable = mkEnableOption "spotifyd, a Spotify playing daemon"; enable = mkEnableOption "spotifyd, a Spotify playing daemon";
@@ -41,8 +45,8 @@ in
]; ];
systemd.services.spotifyd = { systemd.services.spotifyd = {
wantedBy = [ "multi-user.target" ]; wantedBy = ["multi-user.target"];
after = [ "network-online.target" "sound.target" ]; after = ["network-online.target" "sound.target"];
description = "spotifyd, a Spotify playing daemon"; description = "spotifyd, a Spotify playing daemon";
environment.SHELL = "/bin/sh"; environment.SHELL = "/bin/sh";
serviceConfig = { serviceConfig = {
@@ -56,5 +60,5 @@ in
}; };
}; };
meta.maintainers = [ maintainers.anderslundstedt ]; meta.maintainers = [maintainers.anderslundstedt];
} }

View File

@@ -1,10 +1,14 @@
{ config, lib, pkgs, ... }:
with lib;
{ {
config,
lib,
pkgs,
...
}:
with lib; {
options.niveum = { options.niveum = {
wirelessInterface = mkOption { type = types.str; }; wirelessInterface = mkOption {type = types.str;};
batteryName = mkOption { type = types.str; }; batteryName = mkOption {type = types.str;};
promptColours = let promptColours = let
colours16 = types.enum [ colours16 = types.enum [

View File

@@ -1,6 +1,10 @@
{ lib, config, pkgs, ... }: {
with lib; lib,
let config,
pkgs,
...
}:
with lib; let
cfg = config.niveum.telegramBots; cfg = config.niveum.telegramBots;
botService = name: bot: botService = name: bot:
@@ -8,37 +12,38 @@ let
enable = bot.enable; enable = bot.enable;
startAt = bot.time; startAt = bot.time;
serviceConfig.Type = "oneshot"; serviceConfig.Type = "oneshot";
wants = [ "network-online.target" ]; wants = ["network-online.target"];
script = strings.concatStringsSep "\n" ([ "QUOTE=$(${bot.command})" "if [ -n \"$QUOTE\" ]; then" ] script = strings.concatStringsSep "\n" (["QUOTE=$(${bot.command})" "if [ -n \"$QUOTE\" ]; then"]
++ map (chatId: '' ++ map (chatId: ''
${pkgs.curl}/bin/curl -s -X POST "https://api.telegram.org/bot${bot.token}/sendMessage" \ ${pkgs.curl}/bin/curl -s -X POST "https://api.telegram.org/bot${bot.token}/sendMessage" \
-d chat_id="${chatId}" \ -d chat_id="${chatId}" \
-d text="$QUOTE" ${ -d text="$QUOTE" ${
lib.strings.optionalString (bot.parseMode != null) lib.strings.optionalString (bot.parseMode != null)
"-d parse_mode=${bot.parseMode}" "-d parse_mode=${bot.parseMode}"
} }
'') bot.chatIds '')
++ [ "fi" ]); bot.chatIds
++ ["fi"]);
}; };
in { in {
options.niveum.telegramBots = mkOption { options.niveum.telegramBots = mkOption {
type = types.attrsOf (types.submodule { type = types.attrsOf (types.submodule {
options = { options = {
enable = mkEnableOption "Telegram bot"; enable = mkEnableOption "Telegram bot";
time = mkOption { type = types.str; }; time = mkOption {type = types.str;};
token = mkOption { type = types.strMatching "[0-9A-Za-z:-]+"; }; token = mkOption {type = types.strMatching "[0-9A-Za-z:-]+";};
chatIds = mkOption { chatIds = mkOption {
type = types.listOf (types.strMatching "-?[0-9]+|@[A-Za-z0-9]+"); type = types.listOf (types.strMatching "-?[0-9]+|@[A-Za-z0-9]+");
}; };
command = mkOption { type = types.str; }; command = mkOption {type = types.str;};
parseMode = mkOption { parseMode = mkOption {
type = types.nullOr (types.enum [ "HTML" "Markdown" ]); type = types.nullOr (types.enum ["HTML" "Markdown"]);
default = null; default = null;
}; };
}; };
}); });
default = { }; default = {};
}; };
config = { systemd.services = attrsets.mapAttrs' botService cfg; }; config = {systemd.services = attrsets.mapAttrs' botService cfg;};
} }

View File

@@ -1,39 +1,49 @@
{ pkgs, lib, config, ... }: {
with lib; pkgs,
let lib,
config,
...
}:
with lib; let
cfg = config.niveum.traadfri; cfg = config.niveum.traadfri;
traadfri = pkgs.callPackage <traadfri> { traadfri = pkgs.callPackage <traadfri> {
libcoap = pkgs.callPackage <niveum/packages/libcoap.nix> { tls = true; }; libcoap = pkgs.callPackage <niveum/packages/libcoap.nix> {tls = true;};
}; };
in { in {
options.niveum.traadfri = { options.niveum.traadfri = {
enable = mkEnableOption "Trådfri CLI"; enable = mkEnableOption "Trådfri CLI";
user = mkOption { type = types.str; }; user = mkOption {type = types.str;};
host = mkOption { type = types.str; }; host = mkOption {type = types.str;};
key = mkOption { type = types.str; }; key = mkOption {type = types.str;};
rooms = mkOption { rooms = mkOption {
type = types.attrsOf types.int; type = types.attrsOf types.int;
default = { }; default = {};
}; };
bulbs = mkOption { bulbs = mkOption {
type = types.attrsOf types.int; type = types.attrsOf types.int;
default = { }; default = {};
}; };
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
environment.systemPackages = [ environment.systemPackages =
(pkgs.writers.writeDashBin "traadfri" '' [
TRAADFRI_USER="${cfg.user}" \ (pkgs.writers.writeDashBin "traadfri" ''
TRAADFRI_KEY="${cfg.key}" \ TRAADFRI_USER="${cfg.user}" \
TRAADFRI_HUB="${cfg.host}" \ TRAADFRI_KEY="${cfg.key}" \
${traadfri}/bin/traadfri $@ TRAADFRI_HUB="${cfg.host}" \
'') ${traadfri}/bin/traadfri $@
] ++ lib.mapAttrsToList (name: value: pkgs.writers.writeDashBin "traadfri-${name}" '' '')
exec traadfri --target Room ${toString value} "$@" ]
'') cfg.rooms ++ lib.mapAttrsToList (name: value:
++ lib.mapAttrsToList (name: value: pkgs.writers.writeDashBin "traadfri-${name}" '' pkgs.writers.writeDashBin "traadfri-${name}" ''
exec traadfri --target Bulb ${toString value} "$@" exec traadfri --target Room ${toString value} "$@"
'') cfg.bulbs; '')
cfg.rooms
++ lib.mapAttrsToList (name: value:
pkgs.writers.writeDashBin "traadfri-${name}" ''
exec traadfri --target Bulb ${toString value} "$@"
'')
cfg.bulbs;
}; };
} }

View File

@@ -1,6 +1,10 @@
{ config, lib, pkgs, ... }: {
with lib; config,
let lib,
pkgs,
...
}:
with lib; let
tuna = pkgs.callPackage <tuna> {}; tuna = pkgs.callPackage <tuna> {};
cfg = config.services.tuna; cfg = config.services.tuna;
in { in {
@@ -77,8 +81,8 @@ in {
users.groups.tuna = {}; users.groups.tuna = {};
# ref https://github.com/florianheinemann/MPD.FM/blob/9d037cf87597b26ae2f10ba9feea48946ad6cc68/service/MPD.FM.service # ref https://github.com/florianheinemann/MPD.FM/blob/9d037cf87597b26ae2f10ba9feea48946ad6cc68/service/MPD.FM.service
systemd.services.tuna = { systemd.services.tuna = {
wantedBy = [ "multi-user.target" ]; wantedBy = ["multi-user.target"];
after = [ "mpd.service" ]; after = ["mpd.service"];
script = "${cfg.package}/bin/tuna"; script = "${cfg.package}/bin/tuna";
environment = { environment = {
NODE_ENV = "production"; NODE_ENV = "production";

View File

@@ -1,6 +1,6 @@
self: super: self: super:
with super.lib; with super.lib; let
let
eval = import <nixpkgs/nixos/lib/eval-config.nix>; eval = import <nixpkgs/nixos/lib/eval-config.nix>;
paths = (eval {modules = [(import <nixos-config>)];}).config.nixpkgs.overlays; paths = (eval {modules = [(import <nixos-config>)];}).config.nixpkgs.overlays;
in foldl' (flip extends) (_: super) paths self in
foldl' (flip extends) (_: super) paths self

View File

@@ -1,4 +1,10 @@
{ lib, stdenv, makeWrapper, pandoc, fetchFromGitHub }: {
lib,
stdenv,
makeWrapper,
pandoc,
fetchFromGitHub,
}:
stdenv.mkDerivation { stdenv.mkDerivation {
name = "daybook"; name = "daybook";
src = fetchFromGitHub { src = fetchFromGitHub {
@@ -7,8 +13,8 @@ stdenv.mkDerivation {
rev = "db2c34830e09183c80f3381bf5e4c44d52f05d53"; rev = "db2c34830e09183c80f3381bf5e4c44d52f05d53";
sha256 = "0nbsv8f12qh5spq7zhimhdf3p7msk33xrb0ilqvlc6jmlkpislmv"; sha256 = "0nbsv8f12qh5spq7zhimhdf3p7msk33xrb0ilqvlc6jmlkpislmv";
}; };
nativeBuildInputs = [ makeWrapper ]; nativeBuildInputs = [makeWrapper];
buildInputs = [ pandoc ]; buildInputs = [pandoc];
buildPhase = '' buildPhase = ''
mkdir -p $out/man/man1 mkdir -p $out/man/man1
pandoc --standalone --to man daybook.1.md -o $out/man/man1/daybook.1 pandoc --standalone --to man daybook.1.md -o $out/man/man1/daybook.1

View File

@@ -1,5 +1,7 @@
{ lib, writeShellScriptBin }: {
let lib,
writeShellScriptBin,
}: let
aliasFlag = name: value: "-c alias.${name}=${lib.escapeShellArg value}"; aliasFlag = name: value: "-c alias.${name}=${lib.escapeShellArg value}";
aliases = { aliases = {
eroeffne = "init"; eroeffne = "init";
@@ -20,10 +22,11 @@ let
tagebuch = "log"; tagebuch = "log";
zustand = "status"; zustand = "status";
}; };
in writeShellScriptBin "depp" '' in
if [ $# -gt 0 ]; then writeShellScriptBin "depp" ''
git ${lib.concatStringsSep " " (lib.attrsets.mapAttrsToList aliasFlag aliases)} "$@" if [ $# -gt 0 ]; then
else git ${lib.concatStringsSep " " (lib.attrsets.mapAttrsToList aliasFlag aliases)} "$@"
printf "${lib.concatStringsSep "\n" (lib.attrsets.mapAttrsToList (n: v: n + " " + v) aliases)}\n" else
fi printf "${lib.concatStringsSep "\n" (lib.attrsets.mapAttrsToList (n: v: n + " " + v) aliases)}\n"
'' fi
''

View File

@@ -1,4 +1,4 @@
{ yarn2nix-moretea }: {yarn2nix-moretea}:
yarn2nix-moretea.mkYarnPackage { yarn2nix-moretea.mkYarnPackage {
name = "devanagari"; name = "devanagari";
src = ./.; src = ./.;

View File

@@ -1,11 +1,17 @@
{ fetchurl, fetchgit, linkFarm, runCommandNoCC, gnutar }: rec { {
fetchurl,
fetchgit,
linkFarm,
runCommandNoCC,
gnutar,
}: rec {
offline_cache = linkFarm "offline" packages; offline_cache = linkFarm "offline" packages;
packages = [ packages = [
{ {
name = "_sanskrit_coders_sanscript___sanscript_1.1.5.tgz"; name = "_sanskrit_coders_sanscript___sanscript_1.1.5.tgz";
path = fetchurl { path = fetchurl {
name = "_sanskrit_coders_sanscript___sanscript_1.1.5.tgz"; name = "_sanskrit_coders_sanscript___sanscript_1.1.5.tgz";
url = "https://registry.yarnpkg.com/@sanskrit-coders/sanscript/-/sanscript-1.1.5.tgz"; url = "https://registry.yarnpkg.com/@sanskrit-coders/sanscript/-/sanscript-1.1.5.tgz";
sha1 = "a22222cf7a5d55f7b19e210242c59f6f819fd643"; sha1 = "a22222cf7a5d55f7b19e210242c59f6f819fd643";
}; };
} }

View File

@@ -1,4 +1,10 @@
{ lib, stdenv, xdo, makeWrapper, fetchFromGitHub }: {
lib,
stdenv,
xdo,
makeWrapper,
fetchFromGitHub,
}:
stdenv.mkDerivation { stdenv.mkDerivation {
name = "devour"; name = "devour";
version = "master"; version = "master";
@@ -10,10 +16,10 @@ stdenv.mkDerivation {
sha256 = "0f2jb8knx7lqy6wmf3rchgq2n2dj496lm8vgcs58rppzrmsk59d5"; sha256 = "0f2jb8knx7lqy6wmf3rchgq2n2dj496lm8vgcs58rppzrmsk59d5";
}; };
nativeBuildInputs = [ makeWrapper ]; nativeBuildInputs = [makeWrapper];
buildInputs = [ xdo ]; buildInputs = [xdo];
DESTDIR="$(out)"; DESTDIR = "$(out)";
fixupPhase = '' fixupPhase = ''
wrapProgram $out/bin/devour --prefix PATH ":" ${xdo}/bin ; wrapProgram $out/bin/devour --prefix PATH ":" ${xdo}/bin ;

View File

@@ -1,5 +1,8 @@
{ fetchzip, symlinkJoin, lib }: {
let fetchzip,
symlinkJoin,
lib,
}: let
gfs-font = name: sha256: gfs-font = name: sha256:
fetchzip { fetchzip {
inherit name sha256; inherit name sha256;
@@ -10,30 +13,31 @@ let
unzip -j -o $downloadedFile "**/*.otf" -d $out/share/fonts/opentype unzip -j -o $downloadedFile "**/*.otf" -d $out/share/fonts/opentype
''; '';
}; };
in symlinkJoin { in
name = "gfs-fonts"; symlinkJoin {
paths = lib.mapAttrsToList gfs-font { name = "gfs-fonts";
GFS_Artemisia = "1q39086pr2jhv118fjfv6l1li6japv4pdjnhh1scqw06mqrmydf4"; paths = lib.mapAttrsToList gfs-font {
GFS_Baskerville = "07gx5b9b43zv74d2lay37sajd4ba2wqn3b7xzvyhn265ds9x7cxk"; GFS_Artemisia = "1q39086pr2jhv118fjfv6l1li6japv4pdjnhh1scqw06mqrmydf4";
GFS_Bodoni = "0jhl0728ikzha1krm01sk52nz3jzibidwmyvgidg61d87l8nbf2p"; GFS_Baskerville = "07gx5b9b43zv74d2lay37sajd4ba2wqn3b7xzvyhn265ds9x7cxk";
GFS_Bodoni_Classic = "06jw2irskn75s50mgwkx08rzwqi82gpc6lgjsimsi8p81566gfrh"; GFS_Bodoni = "0jhl0728ikzha1krm01sk52nz3jzibidwmyvgidg61d87l8nbf2p";
GFS_Complutum = "1q7dxs2z3yrgchd2pz9h72mjrk62kdc2mmqw8kg9q76k28f8n3p0"; # -> GFSPolyglot.otf GFS_Bodoni_Classic = "06jw2irskn75s50mgwkx08rzwqi82gpc6lgjsimsi8p81566gfrh";
GFS_Decker = "016v1j5n9ph4i2cpmlk26pcxhp3q2fjwlaryppd5akl84dfkpncl"; GFS_Complutum = "1q7dxs2z3yrgchd2pz9h72mjrk62kdc2mmqw8kg9q76k28f8n3p0"; # -> GFSPolyglot.otf
GFS_Didot = "0ysvrp527wm0wxfp6wmlgmxfx7ysr5mwpmjmqp1h605cy44jblfm"; GFS_Decker = "016v1j5n9ph4i2cpmlk26pcxhp3q2fjwlaryppd5akl84dfkpncl";
GFS_Didot_Classic = "0n5awqksvday3l3d85yhwmbmfj9bcpxivy4wpd4zrkgl7b85af2c"; GFS_Didot = "0ysvrp527wm0wxfp6wmlgmxfx7ysr5mwpmjmqp1h605cy44jblfm";
GFS_Didot_Display = "0n2di2zyc76w6f8mc6hfilc2ir6igks7ldjp9fkw1gjp06330fi7"; GFS_Didot_Classic = "0n5awqksvday3l3d85yhwmbmfj9bcpxivy4wpd4zrkgl7b85af2c";
GFS_Elpis = "02l7wd3nbn1kpv7ghxh19k4dbvd49ijyxd6gq83gcr9vlmxcq2s2"; GFS_Didot_Display = "0n2di2zyc76w6f8mc6hfilc2ir6igks7ldjp9fkw1gjp06330fi7";
GFS_Gazis = "0x9iwj6pinaykrds0iw6552hf256d0dr41sipdb1jnnlr2d3bf9w"; GFS_Elpis = "02l7wd3nbn1kpv7ghxh19k4dbvd49ijyxd6gq83gcr9vlmxcq2s2";
GFS_Goschen = "1jvbn33wzq2yj0aygwy9pd2msg3wkmdp0npjzazadrmfjpnpkcy9"; GFS_Gazis = "0x9iwj6pinaykrds0iw6552hf256d0dr41sipdb1jnnlr2d3bf9w";
GFS_NeoHellenic = "1ixm2frdc6i5lbn9h0h4gdsvsw2k4hny75q8ig4kgs28ac3dbzq3"; GFS_Goschen = "1jvbn33wzq2yj0aygwy9pd2msg3wkmdp0npjzazadrmfjpnpkcy9";
GFS_Olga = "1qaxaw3ngnbr1gb1xyk5f2z647zklg6sl3bqwi28l47j9mp0f8aj"; GFS_NeoHellenic = "1ixm2frdc6i5lbn9h0h4gdsvsw2k4hny75q8ig4kgs28ac3dbzq3";
GFS_Orpheus = "18n6fag4pyr8jdwnsz0vixf47jz4ym8mjmppc1w3k7v27cg1z9dz"; GFS_Olga = "1qaxaw3ngnbr1gb1xyk5f2z647zklg6sl3bqwi28l47j9mp0f8aj";
GFS_Orpheus_Classic = "1rqy1kf7slw56zfhbv264yzarjisnqbqydj4f7hghiknhnmdakps"; GFS_Orpheus = "18n6fag4pyr8jdwnsz0vixf47jz4ym8mjmppc1w3k7v27cg1z9dz";
GFS_Orpheus_Sans = "02rh7z8c3h3xyfi52rn47z4finizx636d05bg5g23v0l0mqs6nkg"; GFS_Orpheus_Classic = "1rqy1kf7slw56zfhbv264yzarjisnqbqydj4f7hghiknhnmdakps";
GFS_Philostratos = "0zh3d0cn6b2fjbwnvmg379z20zh7w626w2bnj19xcazjvqkwhzx1"; GFS_Orpheus_Sans = "02rh7z8c3h3xyfi52rn47z4finizx636d05bg5g23v0l0mqs6nkg";
GFS_Porson = "0c2axagkm6wxv8na2q11k6c5dmgkwx5hn9sh9qy82gbips9blnda"; GFS_Philostratos = "0zh3d0cn6b2fjbwnvmg379z20zh7w626w2bnj19xcazjvqkwhzx1";
GFS_Pyrsos = "0y0dv7y3n01bbhhnczflx1zcc7by56cffmr2xqixj2rd1nvchx0j"; GFS_Porson = "0c2axagkm6wxv8na2q11k6c5dmgkwx5hn9sh9qy82gbips9blnda";
GFS_Solomos = "1mpx9mw566awvfjdfx5sbz3wz5gbnjjw56gz30mk1lw06vxf0dxz"; GFS_Pyrsos = "0y0dv7y3n01bbhhnczflx1zcc7by56cffmr2xqixj2rd1nvchx0j";
GFS_Theokritos = "0haasx819x8c8yvna6pqywgi4060av2570jm34cddnz1fgnhv1b8"; GFS_Solomos = "1mpx9mw566awvfjdfx5sbz3wz5gbnjjw56gz30mk1lw06vxf0dxz";
}; GFS_Theokritos = "0haasx819x8c8yvna6pqywgi4060av2570jm34cddnz1fgnhv1b8";
} };
}

View File

@@ -1,15 +1,14 @@
# { stdenv, python }: # { stdenv, python }:
{ pkgs ? import <nixpkgs> { } }: {pkgs ? import <nixpkgs> {}}:
with pkgs; with pkgs;
with pkgs.python2Packages; with pkgs.python2Packages;
buildPythonApplication rec {
buildPythonApplication rec { pname = "gourmet";
pname = "gourmet"; version = "0.17.4";
version = "0.17.4"; src = builtins.fetchTarball {
src = builtins.fetchTarball { url = "https://github.com/thinkle/gourmet/archive/${version}.tar.gz";
url = "https://github.com/thinkle/gourmet/archive/${version}.tar.gz"; };
}; buildInputs = [distutils_extra intltool];
buildInputs = [ distutils_extra intltool ]; propagatedBuildInputs = [sqlalchemy reportlab lxml];
propagatedBuildInputs = [ sqlalchemy reportlab lxml ]; meta = with stenv.lib; {maintainers = with maintainers; [kmein];};
meta = with stenv.lib; { maintainers = with maintainers; [ kmein ]; }; }
}

View File

@@ -1,4 +1,10 @@
{ lib, stdenv, cmake, python3, fetchFromGitHub }: {
lib,
stdenv,
cmake,
python3,
fetchFromGitHub,
}:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
version = "2017.09.06"; version = "2017.09.06";
name = "iolanguage-${version}"; name = "iolanguage-${version}";
@@ -9,7 +15,7 @@ stdenv.mkDerivation rec {
sha256 = "07rg1zrz6i6ghp11cm14w7bbaaa1s8sb0y5i7gr2sds0ijlpq223"; sha256 = "07rg1zrz6i6ghp11cm14w7bbaaa1s8sb0y5i7gr2sds0ijlpq223";
fetchSubmodules = true; fetchSubmodules = true;
}; };
buildInputs = [ cmake python3 ]; buildInputs = [cmake python3];
preBuild = "mkdir -p build && cd build"; preBuild = "mkdir -p build && cd build";
buildPhase = '' buildPhase = ''
cmake -DCMAKE_INSTALL_PREFIX=$out/ .. cmake -DCMAKE_INSTALL_PREFIX=$out/ ..
@@ -17,8 +23,7 @@ stdenv.mkDerivation rec {
''; '';
meta = with lib; { meta = with lib; {
homepage = "https://iolanguage.org/"; homepage = "https://iolanguage.org/";
description = description = "Io programming language. Inspired by Self, Smalltalk and LISP.";
"Io programming language. Inspired by Self, Smalltalk and LISP.";
license = licenses.bsd3; license = licenses.bsd3;
}; };
} }

View File

@@ -1,11 +1,14 @@
{ stdenv, fetchurl }: {
stdenv,
fetchurl,
}:
stdenv.mkDerivation { stdenv.mkDerivation {
name = "ix"; name = "ix";
src = fetchurl { src = fetchurl {
url = "https://ix.io/client"; url = "https://ix.io/client";
sha256 = "0xc2s4s1aq143zz8lgkq5k25dpf049dw253qxiav5k7d7qvzzy57"; sha256 = "0xc2s4s1aq143zz8lgkq5k25dpf049dw253qxiav5k7d7qvzzy57";
}; };
phases = [ "installPhase" ]; phases = ["installPhase"];
installPhase = '' installPhase = ''
mkdir -p $out/bin mkdir -p $out/bin
install $src $out/bin/ix install $src $out/bin/ix

View File

@@ -1,6 +1,18 @@
{ lib, pkg-config, fetchFromGitHub, automake, autoconf, which, libtool, stdenv, gnutls {
, doxygen, asciidoc lib,
, tls ? false, docs ? true }: pkg-config,
fetchFromGitHub,
automake,
autoconf,
which,
libtool,
stdenv,
gnutls,
doxygen,
asciidoc,
tls ? false,
docs ? true,
}:
stdenv.mkDerivation { stdenv.mkDerivation {
name = "libcoap"; name = "libcoap";
version = "unstable-2021-05-28"; version = "unstable-2021-05-28";
@@ -11,8 +23,9 @@ stdenv.mkDerivation {
sha256 = "1igjv0hbwmakdccp5in4gw9w2p5swxdwsdx0glyna2s29sh1d37x"; sha256 = "1igjv0hbwmakdccp5in4gw9w2p5swxdwsdx0glyna2s29sh1d37x";
fetchSubmodules = true; fetchSubmodules = true;
}; };
buildInputs = [ which pkg-config automake autoconf libtool ] buildInputs =
++ lib.optionals docs [ doxygen asciidoc ] [which pkg-config automake autoconf libtool]
++ lib.optionals docs [doxygen asciidoc]
++ lib.optional tls gnutls; ++ lib.optional tls gnutls;
# preConfigure = "./autogen.sh"; # preConfigure = "./autogen.sh";
# configureFlags = lib.optional (!docs) "--disable-documentation" ++ lib.optional tls "--enable-dtls"; # configureFlags = lib.optional (!docs) "--disable-documentation" ++ lib.optional tls "--enable-dtls";
@@ -27,6 +40,6 @@ stdenv.mkDerivation {
description = "A CoAP (RFC 7252) implementation in C"; description = "A CoAP (RFC 7252) implementation in C";
platforms = platforms.linux; platforms = platforms.linux;
license = licenses.bsd2; license = licenses.bsd2;
maintainers = [ maintainers.kmein ]; maintainers = [maintainers.kmein];
}; };
} }

View File

@@ -1,6 +1,22 @@
{ lib, fetchFromGitHub, mkDerivation, ansi-terminal, base, directory, doctest, filepath {
, megaparsec, optparse-applicative, prettyprinter, process lib,
, raw-strings-qq, stdenv, tasty, tasty-hunit, text, yaml fetchFromGitHub,
mkDerivation,
ansi-terminal,
base,
directory,
doctest,
filepath,
megaparsec,
optparse-applicative,
prettyprinter,
process,
raw-strings-qq,
stdenv,
tasty,
tasty-hunit,
text,
yaml,
}: }:
mkDerivation { mkDerivation {
pname = "mahlzeit"; pname = "mahlzeit";
@@ -14,15 +30,32 @@ mkDerivation {
isLibrary = true; isLibrary = true;
isExecutable = true; isExecutable = true;
libraryHaskellDepends = [ libraryHaskellDepends = [
ansi-terminal base directory filepath megaparsec prettyprinter text ansi-terminal
base
directory
filepath
megaparsec
prettyprinter
text
yaml yaml
]; ];
executableHaskellDepends = [ executableHaskellDepends = [
ansi-terminal base directory filepath optparse-applicative process ansi-terminal
text yaml base
directory
filepath
optparse-applicative
process
text
yaml
]; ];
testHaskellDepends = [ testHaskellDepends = [
base doctest megaparsec raw-strings-qq tasty tasty-hunit base
doctest
megaparsec
raw-strings-qq
tasty
tasty-hunit
]; ];
homepage = "https://github.com/kmein/mahlzeit"; homepage = "https://github.com/kmein/mahlzeit";
description = "Recipe toolkit"; description = "Recipe toolkit";

View File

@@ -1,4 +1,9 @@
{ stdenv, pandoc, lib, fetchgit }: {
stdenv,
pandoc,
lib,
fetchgit,
}:
stdenv.mkDerivation { stdenv.mkDerivation {
name = "pandoc-doc"; name = "pandoc-doc";
version = pandoc.version; version = pandoc.version;

View File

@@ -0,0 +1,37 @@
{
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";
license = licenses.unfree;
platforms = platforms.all;
maintainers = with maintainers; [kmein];
};
}

View File

@@ -1,4 +1,11 @@
{ lib, stdenv, cmake, pkgconfig, libogg, fetchFromGitHub }: {
lib,
stdenv,
cmake,
pkgconfig,
libogg,
fetchFromGitHub,
}:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "opustags"; name = "opustags";
version = "1.3.0"; version = "1.3.0";
@@ -14,9 +21,9 @@ stdenv.mkDerivation rec {
"-DCMAKE_INSTALL_PREFIX=$out" "-DCMAKE_INSTALL_PREFIX=$out"
]; ];
buildInputs = [ libogg ]; buildInputs = [libogg];
nativeBuildInputs = [ cmake pkgconfig ]; nativeBuildInputs = [cmake pkgconfig];
meta = with lib; { meta = with lib; {
homepage = "https://github.com/fmang/opustags"; homepage = "https://github.com/fmang/opustags";

View File

@@ -1,4 +1,9 @@
{ fetchPypi, buildPythonPackage, pygtrie, ... }: {
fetchPypi,
buildPythonPackage,
pygtrie,
...
}:
buildPythonPackage rec { buildPythonPackage rec {
pname = "betacode"; pname = "betacode";
version = "0.2"; version = "0.2";
@@ -7,6 +12,6 @@ buildPythonPackage rec {
sha256 = "08fnjzjvnm9m6p4ddyr8qgfb9bs2nipv4ls50784v0xazgxx7siv"; sha256 = "08fnjzjvnm9m6p4ddyr8qgfb9bs2nipv4ls50784v0xazgxx7siv";
}; };
preBuild = ''echo > README.rst''; preBuild = ''echo > README.rst'';
propagatedBuildInputs = [ pygtrie ]; propagatedBuildInputs = [pygtrie];
doCheck = false; doCheck = false;
} }

View File

@@ -1,4 +1,11 @@
{ fetchFromGitHub, buildPythonPackage, backports_functools_lru_cache, selenium, regex, ... }: {
fetchFromGitHub,
buildPythonPackage,
backports_functools_lru_cache,
selenium,
regex,
...
}:
buildPythonPackage rec { buildPythonPackage rec {
pname = "indic_transliteration"; pname = "indic_transliteration";
version = "unstable-2020-12-15"; version = "unstable-2020-12-15";
@@ -8,7 +15,7 @@ buildPythonPackage rec {
rev = "2ea25a03af15937916b6768835e056166986c567"; rev = "2ea25a03af15937916b6768835e056166986c567";
sha256 = "1pcf800hl0zkcffc47mkjq9mizsxdi0hwxlnij5bvbqdshd3w9ll"; sha256 = "1pcf800hl0zkcffc47mkjq9mizsxdi0hwxlnij5bvbqdshd3w9ll";
}; };
patches = [ ./regex-version.patch ]; patches = [./regex-version.patch];
propagatedBuildInputs = [ backports_functools_lru_cache selenium regex ]; propagatedBuildInputs = [backports_functools_lru_cache selenium regex];
doCheck = false; doCheck = false;
} }

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