mirror of
https://github.com/kmein/niveum
synced 2026-03-20 20:01:08 +01:00
Compare commits
16 Commits
7afe712c27
...
tahina
| Author | SHA1 | Date | |
|---|---|---|---|
| 2e96539faa | |||
| e08eb0e970 | |||
| 012d78cc0e | |||
|
|
62f52922b8 | ||
| 28d359c73b | |||
| 8830147359 | |||
| e9adccacd9 | |||
|
|
588ec3d180 | ||
| 6ea8500818 | |||
| bf6c82a11d | |||
| 9c68ff20bc | |||
| 2565bfbc27 | |||
| a4d002e293 | |||
| 730070bc9d | |||
| 6f1f1887b9 | |||
|
|
68f8bb06f4 |
57
ci.nix
57
ci.nix
@@ -19,12 +19,12 @@
|
||||
}
|
||||
'';
|
||||
nixPath = nixpkgs.lib.concatStringsSep ":" ([
|
||||
"niveum=${toString ./.}"
|
||||
"nixos-config=${toString ./.}/systems/${name}/configuration.nix"
|
||||
"system-secrets=${systemSecrets}"
|
||||
"secrets=${sharedSecrets}"
|
||||
]
|
||||
++ nixpkgs.lib.mapAttrsToList (name: value: "${name}=${value}") inputs);
|
||||
"niveum=${toString ./.}"
|
||||
"nixos-config=${toString ./.}/systems/${name}/configuration.nix"
|
||||
"system-secrets=${systemSecrets}"
|
||||
"secrets=${sharedSecrets}"
|
||||
]
|
||||
++ nixpkgs.lib.mapAttrsToList (name: value: "${name}=${value}") inputs);
|
||||
# cd ~/.password-store/shared && find * -type f | sed 's/.gpg$//'
|
||||
sharedSecrets = ensureFiles [
|
||||
"di.fm/key"
|
||||
@@ -53,29 +53,30 @@
|
||||
zaatar = ensureFiles (["moodle.token" "telegram/moodle-dl.token" "mpd-web.key"] ++ basic);
|
||||
kabsa = ensureFiles basic;
|
||||
manakish = ensureFiles basic;
|
||||
tahina = ensureFiles basic;
|
||||
makanek = ensureFiles ([
|
||||
"irc/retiolum"
|
||||
"irc/hackint"
|
||||
"irc/libera"
|
||||
"irc/oftc"
|
||||
"matrix/nibbana"
|
||||
"maxmind/license.key"
|
||||
"moodle-dl/faye.token"
|
||||
"nextcloud/admin"
|
||||
"nextcloud/database"
|
||||
"telegram/nachtischsatan.token"
|
||||
"telegram/reverse.token"
|
||||
"telegram/odyssey.token"
|
||||
"telegram/betacode.token"
|
||||
"telegram/moodle-dl.token"
|
||||
"telegram/proverb.token"
|
||||
"telegram/menstruation.token"
|
||||
"telegram/cool_village.token"
|
||||
"telegram/kmein.token"
|
||||
"telegram/prometheus.token"
|
||||
"weechat/relay"
|
||||
]
|
||||
++ basic);
|
||||
"irc/retiolum"
|
||||
"irc/hackint"
|
||||
"irc/libera"
|
||||
"irc/oftc"
|
||||
"matrix/nibbana"
|
||||
"maxmind/license.key"
|
||||
"moodle-dl/faye.token"
|
||||
"nextcloud/admin"
|
||||
"nextcloud/database"
|
||||
"telegram/nachtischsatan.token"
|
||||
"telegram/reverse.token"
|
||||
"telegram/odyssey.token"
|
||||
"telegram/betacode.token"
|
||||
"telegram/moodle-dl.token"
|
||||
"telegram/proverb.token"
|
||||
"telegram/menstruation.token"
|
||||
"telegram/cool_village.token"
|
||||
"telegram/kmein.token"
|
||||
"telegram/prometheus.token"
|
||||
"weechat/relay"
|
||||
]
|
||||
++ basic);
|
||||
}
|
||||
.${name};
|
||||
in
|
||||
|
||||
@@ -2,11 +2,11 @@
|
||||
programs.chromium = {
|
||||
enable = true;
|
||||
extensions = [
|
||||
"nngceckbapebfimnlniiiahkandclblb" # BitWarden
|
||||
# "ihlenndgcmojhcghmfjfneahoeklbjjh" # cVim
|
||||
# "fpnmgdkabkmnadcjpehmlllkndpkmiak" # Wayback Machine
|
||||
"cjpalhdlnbpafiamejdnhcphjbkeiagm" # uBlock Origin
|
||||
"khncfooichmfjbepaaaebmommgaepoid" # Remove YouTube Recommended Videos
|
||||
"pjjgklgkfeoeiebjogplpnibpfnffkng" # undistracted
|
||||
"nhdogjmejiglipccpnnnanhbledajbpd" # vuejs devtools
|
||||
];
|
||||
};
|
||||
|
||||
|
||||
@@ -111,6 +111,10 @@ in {
|
||||
take = pkgs.writers.writeDash "take" ''
|
||||
mkdir "$1" && cd "$1"
|
||||
'';
|
||||
cdt = pkgs.writers.writeDash "cdt" ''
|
||||
cd "$(mktemp -d)"
|
||||
pwd
|
||||
'';
|
||||
swallow = command: "${pkgs.scripts.swallow}/bin/swallow ${command}";
|
||||
in {
|
||||
"ß" = "${pkgs.utillinux}/bin/setsid";
|
||||
@@ -131,6 +135,8 @@ in {
|
||||
rm = "rm --interactive";
|
||||
s = "${pkgs.systemd}/bin/systemctl";
|
||||
take = "source ${take}";
|
||||
cdt = "source ${cdt}";
|
||||
vit = "$EDITOR $(mktemp)";
|
||||
tmux = "${pkgs.tmux}/bin/tmux -2";
|
||||
sxiv = swallow "${pkgs.sxiv}/bin/sxiv";
|
||||
zathura = swallow "${pkgs.zathura}/bin/zathura";
|
||||
@@ -181,7 +187,7 @@ in {
|
||||
|
||||
environment.systemPackages = [
|
||||
pkgs.gnupg
|
||||
(pkgs.pass.withExtensions (e: [e.pass-otp]))
|
||||
(pkgs.pass.withExtensions (e: [e.pass-otp e.pass-import e.pass-genphrase]))
|
||||
];
|
||||
}
|
||||
{
|
||||
@@ -194,11 +200,12 @@ in {
|
||||
};
|
||||
}
|
||||
{
|
||||
networking.hosts = lib.mapAttrs' (name: address: {
|
||||
name = address;
|
||||
value = ["${name}.local"];
|
||||
})
|
||||
localAddresses;
|
||||
networking.hosts =
|
||||
lib.mapAttrs' (name: address: {
|
||||
name = address;
|
||||
value = ["${name}.local"];
|
||||
})
|
||||
localAddresses;
|
||||
}
|
||||
./alacritty.nix
|
||||
./backup.nix
|
||||
|
||||
@@ -13,6 +13,7 @@ in {
|
||||
pkgs.gitAndTools.gh
|
||||
pkgs.gitAndTools.git-extras
|
||||
pkgs.gitAndTools.git-trim
|
||||
pkgs.gitAndTools.git-absorb
|
||||
pkgs.gitstats
|
||||
pkgs.patch
|
||||
pkgs.patchutils
|
||||
|
||||
@@ -191,14 +191,14 @@ in {
|
||||
# set accordingly: postponed trash record
|
||||
${
|
||||
lib.concatStringsSep "\n\n" (lib.mapAttrsToList (name: account: let
|
||||
imapRoot = "imaps://${account.user}@${account.imap}";
|
||||
in ''
|
||||
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)
|
||||
imapRoot = "imaps://${account.user}@${account.imap}";
|
||||
in ''
|
||||
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)
|
||||
}
|
||||
''
|
||||
}
|
||||
|
||||
@@ -23,15 +23,15 @@
|
||||
cslDirectory = pkgs.linkFarm "citation-styles" [
|
||||
(zoteroStyle {
|
||||
name = "chicago-author-date-de";
|
||||
sha256 = "0fz0xn46rkciblr34a7x2v60j0lbq9l3fmzi43iphph27m0czn6s";
|
||||
sha256 = "sha256-ddMYk4A9DJQhx9ldkmF7PhwKuc7wUSr26uHHGAze9Ps=";
|
||||
})
|
||||
(zoteroStyle {
|
||||
name = "din-1505-2";
|
||||
sha256 = "1pvy1b7qm13mnph7z365rrz1j082bl2y8ih73rhzd0zd6dz1jyjq";
|
||||
sha256 = "sha256-bXZbB850fek8J6wMVFL32ndI7F4wiKKr1qUC71ezreE=";
|
||||
})
|
||||
(zoteroStyle {
|
||||
name = "apa";
|
||||
sha256 = "1878vxp0y0h05yzaghnd51n981623mxskw3lsdyzmffqhihvv111";
|
||||
sha256 = "sha256-yq4fW6hQknycLjaj5fPbXLrQlGBp5myXiOSHBU90jEc=";
|
||||
})
|
||||
];
|
||||
|
||||
@@ -265,6 +265,7 @@ in {
|
||||
(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 = ''
|
||||
|
||||
@@ -29,6 +29,11 @@ in {
|
||||
user = "root";
|
||||
port = sshPort;
|
||||
};
|
||||
tahina = {
|
||||
hostname = "tahina.r";
|
||||
user = "root";
|
||||
port = sshPort;
|
||||
};
|
||||
manakish = {
|
||||
hostname = "manakish.r";
|
||||
user = "kfm";
|
||||
@@ -52,6 +57,10 @@ in {
|
||||
hostname = "135.181.85.233";
|
||||
user = "root";
|
||||
};
|
||||
oracle = {
|
||||
hostname = "130.61.171.199";
|
||||
user = "ubuntu";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -275,24 +275,24 @@
|
||||
'';
|
||||
in {
|
||||
environment.etc.stardict.source = toString (makeStardictDataDir ({
|
||||
Crum = pkgs.fetchzip {
|
||||
url = "http://download.huzheng.org/misc/stardict-Coptic-English_all_dialects-2.4.2.tar.bz2";
|
||||
sha256 = "1fi281mb9yzv40wjsdapi8fzpa7x2yscz582lv2qnss9g8zzzzr9";
|
||||
};
|
||||
SmithBiographyMythology = pkgs.fetchzip {
|
||||
url = "https://github.com/latin-dict/Smith1873/releases/download/v1.0/Smith1873-stardict.zip";
|
||||
sha256 = "01h5fxacp2m60xir8kzslkfy772vs3vmz07zhdwfhcwdaxif2af2";
|
||||
};
|
||||
SmithAntiquities = pkgs.fetchzip {
|
||||
url = "https://github.com/latin-dict/Smith1890/releases/download/v1.0/Smith1890-stardict.zip";
|
||||
sha256 = "0vpsv62p2lrzmgys4d1swpnc6lqhdi7rxwkj2ngy3lz5dk3fysyb";
|
||||
};
|
||||
}
|
||||
// dictionaries.classics
|
||||
// dictionaries.sanskrit
|
||||
// dictionaries.oed
|
||||
// dictionaries.russian
|
||||
// dictionaries.englishGerman));
|
||||
Crum = pkgs.fetchzip {
|
||||
url = "http://download.huzheng.org/misc/stardict-Coptic-English_all_dialects-2.4.2.tar.bz2";
|
||||
sha256 = "1fi281mb9yzv40wjsdapi8fzpa7x2yscz582lv2qnss9g8zzzzr9";
|
||||
};
|
||||
SmithBiographyMythology = pkgs.fetchzip {
|
||||
url = "https://github.com/latin-dict/Smith1873/releases/download/v1.0/Smith1873-stardict.zip";
|
||||
sha256 = "01h5fxacp2m60xir8kzslkfy772vs3vmz07zhdwfhcwdaxif2af2";
|
||||
};
|
||||
SmithAntiquities = pkgs.fetchzip {
|
||||
url = "https://github.com/latin-dict/Smith1890/releases/download/v1.0/Smith1890-stardict.zip";
|
||||
sha256 = "0vpsv62p2lrzmgys4d1swpnc6lqhdi7rxwkj2ngy3lz5dk3fysyb";
|
||||
};
|
||||
}
|
||||
// dictionaries.classics
|
||||
// dictionaries.sanskrit
|
||||
// dictionaries.oed
|
||||
// dictionaries.russian
|
||||
// dictionaries.englishGerman));
|
||||
|
||||
environment.systemPackages = [
|
||||
pkgs.goldendict
|
||||
|
||||
@@ -18,50 +18,49 @@ in {
|
||||
environment.systemPackages = [pkgs.sxiv];
|
||||
|
||||
# TODO fix
|
||||
home-manager.users.me.xdg.configFile."sxiv/exec/key-handler".source =
|
||||
pkgs.writers.writeDash "key-handler" ''
|
||||
PATH=$PATH:${
|
||||
lib.makeBinPath [
|
||||
pkgs.gnused
|
||||
pkgs.gawk
|
||||
pkgs.dmenu
|
||||
pkgs.coreutils
|
||||
pkgs.libnotify
|
||||
pkgs.imagemagick
|
||||
pkgs.xclip
|
||||
]
|
||||
}
|
||||
home-manager.users.me.xdg.configFile."sxiv/exec/key-handler".source = pkgs.writers.writeDash "key-handler" ''
|
||||
PATH=$PATH:${
|
||||
lib.makeBinPath [
|
||||
pkgs.gnused
|
||||
pkgs.gawk
|
||||
pkgs.dmenu
|
||||
pkgs.coreutils
|
||||
pkgs.libnotify
|
||||
pkgs.imagemagick
|
||||
pkgs.xclip
|
||||
]
|
||||
}
|
||||
|
||||
echo >&2 key "$1" pressed
|
||||
while read file; do
|
||||
case "$1" in
|
||||
"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" ] && 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." &
|
||||
;;
|
||||
"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" ] && 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." &
|
||||
;;
|
||||
"r")
|
||||
convert -rotate 90 "$file" "$file" ;;
|
||||
"R")
|
||||
convert -rotate -90 "$file" "$file" ;;
|
||||
"f")
|
||||
convert -flop "$file" "$file" ;;
|
||||
"y")
|
||||
echo -n "$file" | xclip -selection clipboard &&
|
||||
notify-send "$file copied to clipboard" & ;;
|
||||
"Y")
|
||||
readlink -f "$file" | xclip -selection clipboard &&
|
||||
notify-send "$(readlink -f "$file") copied to clipboard" & ;;
|
||||
"d")
|
||||
[ "$(printf "No\\nYes" | dmenu -i -p "Really delete $file?")" = "Yes" ] && rm "$file" && notify-send "$file deleted." ;;
|
||||
esac
|
||||
done
|
||||
'';
|
||||
echo >&2 key "$1" pressed
|
||||
while read file; do
|
||||
case "$1" in
|
||||
"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" ] && 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." &
|
||||
;;
|
||||
"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" ] && 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." &
|
||||
;;
|
||||
"r")
|
||||
convert -rotate 90 "$file" "$file" ;;
|
||||
"R")
|
||||
convert -rotate -90 "$file" "$file" ;;
|
||||
"f")
|
||||
convert -flop "$file" "$file" ;;
|
||||
"y")
|
||||
echo -n "$file" | xclip -selection clipboard &&
|
||||
notify-send "$file copied to clipboard" & ;;
|
||||
"Y")
|
||||
readlink -f "$file" | xclip -selection clipboard &&
|
||||
notify-send "$(readlink -f "$file") copied to clipboard" & ;;
|
||||
"d")
|
||||
[ "$(printf "No\\nYes" | dmenu -i -p "Really delete $file?")" = "Yes" ] && rm "$file" && notify-send "$file deleted." ;;
|
||||
esac
|
||||
done
|
||||
'';
|
||||
}
|
||||
|
||||
44
flake.lock
generated
44
flake.lock
generated
@@ -2,11 +2,11 @@
|
||||
"nodes": {
|
||||
"flake-utils": {
|
||||
"locked": {
|
||||
"lastModified": 1644229661,
|
||||
"narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=",
|
||||
"lastModified": 1648297722,
|
||||
"narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797",
|
||||
"rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -22,11 +22,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1643933536,
|
||||
"narHash": "sha256-yRmsWAG4DnLxLIUtlaZsl0kH7rN5xSoyNRlf0YZrcH4=",
|
||||
"lastModified": 1647175256,
|
||||
"narHash": "sha256-7H+veXPM7IwdN1DoZqliwb9sghlN56koV5dnCu1kpsc=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "2860d7e3bb350f18f7477858f3513f9798896831",
|
||||
"rev": "a8d00f5c038cf7ec54e7dac9c57b171c1217f008",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -109,11 +109,11 @@
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1646406548,
|
||||
"narHash": "sha256-xp+3f76ycZXNf9pG65Ef9KfDl1fas2UQu/cBe/pLd+c=",
|
||||
"lastModified": 1647992509,
|
||||
"narHash": "sha256-AG40Nt5OWz0LBs5p457emOuwLKOvTtcv/2fUdnEN3Ws=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "47cd6702934434dd02bc53a67dbce3e5493e33a2",
|
||||
"rev": "d2caa9377539e3b5ff1272ac3aa2d15f3081069f",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -125,11 +125,11 @@
|
||||
},
|
||||
"nixpkgs-unstable": {
|
||||
"locked": {
|
||||
"lastModified": 1646523963,
|
||||
"narHash": "sha256-ixFwYnaOycrzs0iN9RvyRMEGCkQ9Pj58x6V/qc2khy8=",
|
||||
"lastModified": 1648337267,
|
||||
"narHash": "sha256-8DRg8UDvs63iaIaHEbWG7/lnD9ImQlMNsTZMY3PvFLc=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "a173e92ee458878651356b9bcfb1e2b5145f76af",
|
||||
"rev": "6de161729c81dc98e844793cc9c8fda29d5ef62a",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -158,11 +158,11 @@
|
||||
"retiolum": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1646081604,
|
||||
"narHash": "sha256-+o4I0UWPT2ZBr3oGF3vHGidfjbydkzyuFKWKDOzJo2U=",
|
||||
"lastModified": 1647444524,
|
||||
"narHash": "sha256-N4T1UXLkYJMQqk65LkTDpW70ujXXeZ9xe5k+LOpznAI=",
|
||||
"owner": "krebs",
|
||||
"repo": "retiolum",
|
||||
"rev": "259d60325310b728f79c68dc1148f597e097d1b2",
|
||||
"rev": "de6d7dc9bd671e65f2ee3004b6807625e7553e84",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -194,11 +194,11 @@
|
||||
"scripts": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1639436812,
|
||||
"narHash": "sha256-6CajvfDo7t4ANgjc7DxqH7lI3WRE4MK8q3mBKAjk80k=",
|
||||
"lastModified": 1648314795,
|
||||
"narHash": "sha256-hGIXkAcGiJnVXnl8kigZpI3VFrLmAr2+yr85hi5JwP0=",
|
||||
"owner": "kmein",
|
||||
"repo": "scripts",
|
||||
"rev": "d34a8161ba11135a45d3141dc9af482db945d63c",
|
||||
"rev": "d1d525b92a34e55b1ad886807c284106e58716b2",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -210,11 +210,11 @@
|
||||
"stockholm": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1646301205,
|
||||
"narHash": "sha256-m3eG8L0PI9Y2R2ZRF5NHfIzvRGkOL7aUIl7i+UCxUGc=",
|
||||
"lastModified": 1648214990,
|
||||
"narHash": "sha256-rptATGq+jcpL+P+Cr6d3OajV6zYkbHPWlt3aQNZI2TY=",
|
||||
"ref": "master",
|
||||
"rev": "87a44dd1573cbdc8f0fc3553b0896b470bcfa44d",
|
||||
"revCount": 10431,
|
||||
"rev": "ae9c0b12710b5361d0d45510eb401eebfc1b3fb0",
|
||||
"revCount": 10497,
|
||||
"type": "git",
|
||||
"url": "https://cgit.lassul.us/stockholm"
|
||||
},
|
||||
|
||||
@@ -82,6 +82,7 @@ rec {
|
||||
manakish.id = "AJVBWR2-VFFAGZF-7ZF5JAX-T63GMOG-NZ446WK-MC5E6WK-6X6Q2HE-QQA2JQ3";
|
||||
toum.id = "CBJQXFF-FMFGWFU-2J6FMPR-SRDTSGX-7NHOYOH-CQCABKF-KQJMRJC-SDE24Q4";
|
||||
zaatar.id = "CGHO6LK-ZJBAXBD-UWI7AH3-BXYARE6-EUIM7PE-O2FUCOM-VCCRNCM-IG34WQ7";
|
||||
tahina.id = "UKJ2CBO-EQPKQL4-3QLRUSG-SSYR6AB-CCCUTKU-CLPYR7N-RUI5A6Y-JTL5NA4";
|
||||
};
|
||||
|
||||
ignorePaths = [
|
||||
|
||||
@@ -18,4 +18,9 @@
|
||||
ipv4 = "10.243.2.85";
|
||||
ipv6 = "42:0:3c46:ac99:ae36:cb8:c551:ba27";
|
||||
};
|
||||
|
||||
tahina = {
|
||||
ipv4 = "10.243.2.74";
|
||||
ipv6 = "42:0:3c46:2923:1c90:872:edd6:306";
|
||||
};
|
||||
}
|
||||
|
||||
@@ -598,6 +598,12 @@ in
|
||||
station = soma-fm-name "Vaporwaves";
|
||||
stream = soma-fm "vaporwaves";
|
||||
}
|
||||
{
|
||||
desc = "Featuring the music from an independent record label focused on modern electronic ambient and space music.";
|
||||
logo = "https://somafm.com/img3/synphaera120.jpg";
|
||||
station = soma-fm-name "Synphaera";
|
||||
stream = soma-fm "synphaera";
|
||||
}
|
||||
{
|
||||
desc = "Emotional Experiments in Music: Ambient, modern composition, post-rock, & experimental electronic music";
|
||||
logo = "http://soma.fm/img/n5md120.png";
|
||||
@@ -1443,6 +1449,58 @@ in
|
||||
stream = "http://91.121.59.45:8013/live";
|
||||
station = "Feeling Floyd | Live";
|
||||
}
|
||||
{
|
||||
station = "Chinese Music World";
|
||||
stream = "https://radio.chinesemusicworld.com/chinesemusic.ogg";
|
||||
}
|
||||
{
|
||||
stream = "https://live.hunter.fm/lofi_high";
|
||||
station = "LoFi | Hunter FM";
|
||||
}
|
||||
{
|
||||
stream = "https://live.hunter.fm/pisadinha_high";
|
||||
station = "Pisadinha | Hunter FM";
|
||||
}
|
||||
{
|
||||
stream = "https://classicfm.ice.infomaniak.ch/classic-fm.mp3";
|
||||
station = "Classic FM";
|
||||
}
|
||||
{
|
||||
station = "Digital Jazz";
|
||||
stream = "http://stm01.virtualcast.com.br:8190/live";
|
||||
}
|
||||
{
|
||||
station = "Jazz | Radio Monte Carlo";
|
||||
stream = "http://edge.radiomontecarlo.net/rmcweb019";
|
||||
}
|
||||
{
|
||||
station = "NRK Jazz";
|
||||
stream = "http://lyd.nrk.no/nrk_radio_jazz_aac_h";
|
||||
}
|
||||
{
|
||||
station = "Digital Impulse – Classical Channel";
|
||||
stream = "http://orion.shoutca.st:8978/stream";
|
||||
}
|
||||
{
|
||||
station = "Старое радио (детское)";
|
||||
stream = "http://195.91.237.50:8000/detskoe128";
|
||||
}
|
||||
{
|
||||
station = "Старое радио";
|
||||
stream = "http://195.91.237.50:8000/ices128";
|
||||
}
|
||||
{
|
||||
station = "Старое радио (музыка)";
|
||||
stream = "http://195.91.237.50:8000/music128";
|
||||
}
|
||||
{
|
||||
station = "Fango Radio";
|
||||
stream = "https://azuracast.streams.ovh/radio/8090/radio.mp3";
|
||||
}
|
||||
{
|
||||
station = "Mikis Radio";
|
||||
stream = "http://radio.hostchefs.net:8046/stream";
|
||||
}
|
||||
]
|
||||
/*
|
||||
(caster-fm "TODO" "noasrv" 10182) # https://github.com/cccruzr/albumsyoumusthear/blob/7e00baf575e4d357cd275d54d1aeb717321141a8/HLS/IBERO_90_1.m3u
|
||||
@@ -1452,8 +1510,8 @@ in
|
||||
http://cw.dimebank.com:8080/CNNslow
|
||||
http://cw.dimebank.com:8080/CNNfast
|
||||
|
||||
Brazilian Jazz
|
||||
http://stm01.virtualcast.com.br:8190/live
|
||||
Orchestral
|
||||
http://orion.shoutca.st:8978/stream
|
||||
|
||||
LoFi / Chill
|
||||
http://ice55.securenetsystems.net/DASH76
|
||||
@@ -1471,5 +1529,17 @@ in
|
||||
http://185.105.4.53:2339//;stream.mp3
|
||||
http://cast5.servcast.net:1390/;stream.mp3
|
||||
|
||||
Hard rock
|
||||
http://andromeda.shoutca.st:9254/stream
|
||||
|
||||
Rock alternative
|
||||
http://icy.unitedradio.it/VirginRockAlternative.mp3
|
||||
|
||||
American nautical weather news
|
||||
http://ca.radioboss.fm:8149/stream
|
||||
|
||||
Christian radio in all languages
|
||||
https://jesuscomingfm.com/#
|
||||
tamazight http://live.jesuscomingfm.com:8462/;
|
||||
*/
|
||||
|
||||
|
||||
@@ -15,14 +15,14 @@ with lib; let
|
||||
mode = "0400"; # readonly (user)
|
||||
text =
|
||||
(foldlAttrs (accum: {
|
||||
name,
|
||||
value,
|
||||
}: ''
|
||||
${accum}
|
||||
name,
|
||||
value,
|
||||
}: ''
|
||||
${accum}
|
||||
|
||||
[${name}] ${mkProfileEntry value}'')
|
||||
"# Generated by nixos-networkmanager-profiles"
|
||||
profileAttrs)
|
||||
[${name}] ${mkProfileEntry value}'')
|
||||
"# Generated by nixos-networkmanager-profiles"
|
||||
profileAttrs)
|
||||
+ "\n";
|
||||
};
|
||||
|
||||
|
||||
@@ -33,9 +33,10 @@ in {
|
||||
config = {
|
||||
services.tinc.networks.${netname} = {
|
||||
name = cfg.nodename;
|
||||
hosts = builtins.mapAttrs
|
||||
(name: _: builtins.readFile "${<retiolum/hosts>}/${name}")
|
||||
(builtins.readDir <retiolum/hosts>);
|
||||
hosts =
|
||||
builtins.mapAttrs
|
||||
(name: _: builtins.readFile "${<retiolum/hosts>}/${name}")
|
||||
(builtins.readDir <retiolum/hosts>);
|
||||
rsaPrivateKeyFile = toString <system-secrets/retiolum.key>;
|
||||
ed25519PrivateKeyFile = toString <system-secrets/retiolum.ed25519>;
|
||||
extraConfig = ''
|
||||
|
||||
@@ -14,16 +14,16 @@ with lib; let
|
||||
serviceConfig.Type = "oneshot";
|
||||
wants = ["network-online.target"];
|
||||
script = strings.concatStringsSep "\n" (["QUOTE=$(${bot.command})" "if [ -n \"$QUOTE\" ]; then"]
|
||||
++ map (chatId: ''
|
||||
${pkgs.curl}/bin/curl -s -X POST "https://api.telegram.org/bot${bot.token}/sendMessage" \
|
||||
-d chat_id="${chatId}" \
|
||||
-d text="$QUOTE" ${
|
||||
lib.strings.optionalString (bot.parseMode != null)
|
||||
"-d parse_mode=${bot.parseMode}"
|
||||
}
|
||||
'')
|
||||
bot.chatIds
|
||||
++ ["fi"]);
|
||||
++ map (chatId: ''
|
||||
${pkgs.curl}/bin/curl -s -X POST "https://api.telegram.org/bot${bot.token}/sendMessage" \
|
||||
-d chat_id="${chatId}" \
|
||||
-d text="$QUOTE" ${
|
||||
lib.strings.optionalString (bot.parseMode != null)
|
||||
"-d parse_mode=${bot.parseMode}"
|
||||
}
|
||||
'')
|
||||
bot.chatIds
|
||||
++ ["fi"]);
|
||||
};
|
||||
in {
|
||||
options.niveum.telegramBots = mkOption {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
self: super:
|
||||
with super.lib; let
|
||||
eval = import <nixpkgs/nixos/lib/eval-config.nix>;
|
||||
paths = (eval {modules = [(import <nixos-config>)];}).config.nixpkgs.overlays;
|
||||
in
|
||||
foldl' (flip extends) (_: super) paths self
|
||||
with super.lib; let
|
||||
eval = import <nixpkgs/nixos/lib/eval-config.nix>;
|
||||
paths = (eval {modules = [(import <nixos-config>)];}).config.nixpkgs.overlays;
|
||||
in
|
||||
foldl' (flip extends) (_: super) paths self
|
||||
|
||||
@@ -307,31 +307,33 @@ in
|
||||
packages = [pkgs.xdo];
|
||||
};
|
||||
|
||||
ipa = pkgs.writers.writeHaskellBin "ipa" {
|
||||
libraries = with pkgs; [haskellPackages.text haskellPackages.ipa];
|
||||
} ''
|
||||
import Data.Maybe (fromJust)
|
||||
import Language.IPA
|
||||
import qualified Data.Text as T
|
||||
import qualified Data.Text.IO as T
|
||||
main = T.interact (T.unwords . map (unIPA . fromJust . (xSampaToIpa =<<) . mkXSampa) . T.words)
|
||||
'';
|
||||
ipa =
|
||||
pkgs.writers.writeHaskellBin "ipa" {
|
||||
libraries = with pkgs; [haskellPackages.text haskellPackages.ipa];
|
||||
} ''
|
||||
import Data.Maybe (fromJust)
|
||||
import Language.IPA
|
||||
import qualified Data.Text as T
|
||||
import qualified Data.Text.IO as T
|
||||
main = T.interact (T.unwords . map (unIPA . fromJust . (xSampaToIpa =<<) . mkXSampa) . T.words)
|
||||
'';
|
||||
|
||||
default-gateway = pkgs.writers.writeDashBin "default-gateway" ''
|
||||
${pkgs.iproute}/bin/ip -json route | ${pkgs.jq}/bin/jq --raw-output '.[0].gateway'
|
||||
'';
|
||||
|
||||
betacode = pkgs.writers.writeHaskellBin "betacode" {
|
||||
libraries = with pkgs; [
|
||||
(haskell.lib.unmarkBroken (haskell.lib.doJailbreak haskellPackages.betacode))
|
||||
haskellPackages.text
|
||||
];
|
||||
} ''
|
||||
import qualified Data.Text.IO as T
|
||||
import qualified Data.Text as T
|
||||
import Text.BetaCode
|
||||
main = T.interact (either (error . T.unpack) id . fromBeta)
|
||||
'';
|
||||
betacode =
|
||||
pkgs.writers.writeHaskellBin "betacode" {
|
||||
libraries = with pkgs; [
|
||||
(haskell.lib.unmarkBroken (haskell.lib.doJailbreak haskellPackages.betacode))
|
||||
haskellPackages.text
|
||||
];
|
||||
} ''
|
||||
import qualified Data.Text.IO as T
|
||||
import qualified Data.Text as T
|
||||
import Text.BetaCode
|
||||
main = T.interact (either (error . T.unpack) id . fromBeta)
|
||||
'';
|
||||
|
||||
devanagari = pkgs.callPackage ../devanagari {};
|
||||
|
||||
@@ -447,6 +449,20 @@ in
|
||||
${pkgs.wget}/bin/wget -q -N https://github.com/Mic92/nix-index-database/releases/latest/download/$filename
|
||||
ln -f $filename files
|
||||
'';
|
||||
|
||||
rofi-hass = pkgs.writers.writeBashBin "rofi-hass" ''
|
||||
export PATH=${lib.makeBinPath [pkgs.home-assistant-cli pkgs.jq pkgs.util-linux pkgs.rofi pkgs.gnused pkgs.libnotify]}
|
||||
json=$(hass-cli -o json state list 2>/dev/null)
|
||||
idx=$(jq -r '.[] | [.entity_id, .state] | join(" ")' <<< "$json" | column -t | rofi -dmenu -i -markup-rows -format d)
|
||||
item=$(jq -r '.[].entity_id' <<< "$json" | sed "''${idx}q;d")
|
||||
itype=$(sed -r 's/\..+$//' <<< "$item")
|
||||
|
||||
case "$itype" in
|
||||
light) hass-cli state toggle "$item" &>/dev/null ;;
|
||||
scene) hass-cli service call --arguments entity_id="$item" scene.turn_on &>/dev/null ;;
|
||||
*) notify-send "Error" "Event type '$itype' not implemented yet. Do you have time to file an issue or write a PR?" ;;
|
||||
esac
|
||||
'';
|
||||
}
|
||||
// {
|
||||
devour = pkgs.callPackage <niveum/packages/devour.nix> {};
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
}: let
|
||||
streams-tsv = pkgs.fetchurl {
|
||||
url = "https://raw.githubusercontent.com/jnk22/kodinerds-iptv/master/iptv/kodi/kodi_tv.m3u";
|
||||
sha256 = "1cw1gmb16vwh6qfw0z3wjjfgn0zg2qplnddqzva5b0xx2g2appla";
|
||||
sha256 = "sha256-gbHV37Yo+D3TYfDXZyb9IX8aRsguZ3qG2SYlY8NsTL0=";
|
||||
postFetch = ''
|
||||
${pkgs.gnused}/bin/sed '/#EXTM3U/d;/#EXTINF/s/.*,//g' $out | ${pkgs.coreutils}/bin/paste -d'\t' - - > $out.tmp
|
||||
mv $out.tmp $out
|
||||
|
||||
@@ -36,6 +36,7 @@
|
||||
"/mnt/sd-card" = {
|
||||
device = "/dev/disk/by-id/mmc-SD32G_0xda0aa352-part1";
|
||||
fsType = "vfat";
|
||||
options = ["nofail"];
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -238,6 +238,16 @@ in {
|
||||
}
|
||||
];
|
||||
}
|
||||
{
|
||||
job_name = "tahina";
|
||||
static_configs = [
|
||||
{
|
||||
targets = [
|
||||
"tahina.r:${toString config.services.prometheus.exporters.node.port}"
|
||||
];
|
||||
}
|
||||
];
|
||||
}
|
||||
];
|
||||
|
||||
services.prometheus.exporters.blackbox = {
|
||||
|
||||
@@ -67,7 +67,7 @@ in {
|
||||
autoconnect = true;
|
||||
address = "irc.libera.chat/6697";
|
||||
ssl = true;
|
||||
autojoin = ["#flipdot" "#haskell" "#nixos" "#fysi" "#binaergewitter" "#neovim" "#lojban" "#vim" "#newsboat" ];
|
||||
autojoin = ["#flipdot" "#haskell" "#nixos" "#fysi" "#binaergewitter" "#neovim" "#lojban" "#vim" "#newsboat"];
|
||||
sasl_mechanism = "plain";
|
||||
sasl_username = nick;
|
||||
sasl_password = lib.strings.fileContents <system-secrets/irc/libera>;
|
||||
|
||||
69
systems/tahina/configuration.nix
Normal file
69
systems/tahina/configuration.nix
Normal file
@@ -0,0 +1,69 @@
|
||||
{
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
inherit (import <niveum/lib>) retiolumAddresses;
|
||||
in {
|
||||
imports = [
|
||||
./hardware-configuration.nix
|
||||
<niveum/configs/battery.nix>
|
||||
<niveum/configs/spacetime.nix>
|
||||
<niveum/modules/retiolum.nix>
|
||||
<niveum/configs/sshd.nix>
|
||||
{
|
||||
console.keyMap = "de";
|
||||
i18n.defaultLocale = "de_DE.UTF-8";
|
||||
services.xserver = {
|
||||
layout = "de";
|
||||
libinput.enable = true;
|
||||
};
|
||||
}
|
||||
{
|
||||
nix.nixPath = ["/var/src"];
|
||||
}
|
||||
];
|
||||
|
||||
users.users.xenos = {
|
||||
name = "xenos";
|
||||
password = "xenos";
|
||||
isNormalUser = true;
|
||||
};
|
||||
|
||||
services.xserver = {
|
||||
enable = true;
|
||||
desktopManager.pantheon.enable = true;
|
||||
displayManager = {
|
||||
lightdm = {
|
||||
enable = true;
|
||||
greeters.pantheon.enable = true;
|
||||
};
|
||||
autoLogin = {
|
||||
enable = true;
|
||||
user = "xenos";
|
||||
};
|
||||
};
|
||||
};
|
||||
boot.plymouth.enable = true;
|
||||
|
||||
environment.systemPackages = [
|
||||
pkgs.libreoffice
|
||||
pkgs.gimp
|
||||
pkgs.inkscape
|
||||
pkgs.firefox
|
||||
pkgs.audacity
|
||||
pkgs.pidgin
|
||||
];
|
||||
|
||||
networking = {
|
||||
useDHCP = false;
|
||||
interfaces = {
|
||||
enp0s25.useDHCP = true;
|
||||
wlo1.useDHCP = true;
|
||||
};
|
||||
retiolum = retiolumAddresses.tahina;
|
||||
hostName = "tahina";
|
||||
};
|
||||
|
||||
system.stateVersion = "21.11";
|
||||
}
|
||||
42
systems/tahina/hardware-configuration.nix
Normal file
42
systems/tahina/hardware-configuration.nix
Normal file
@@ -0,0 +1,42 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
modulesPath,
|
||||
...
|
||||
}: {
|
||||
imports = [
|
||||
(modulesPath + "/installer/scan/not-detected.nix")
|
||||
];
|
||||
|
||||
boot = {
|
||||
loader = {
|
||||
systemd-boot = {
|
||||
enable = true;
|
||||
consoleMode = "max";
|
||||
};
|
||||
efi.canTouchEfiVariables = true;
|
||||
};
|
||||
initrd = {
|
||||
availableKernelModules = ["xhci_pci" "ehci_pci" "ahci" "firewire_ohci" "usb_storage" "sd_mod" "sr_mod" "sdhci_pci"];
|
||||
kernelModules = ["dm-snapshot"];
|
||||
luks.devices.luksmap.device = "/dev/disk/by-uuid/b7d66981-8cb7-4aad-a595-ee6574b312cf";
|
||||
};
|
||||
kernelModules = ["kvm-intel"];
|
||||
extraModulePackages = [];
|
||||
};
|
||||
|
||||
fileSystems."/" = {
|
||||
device = "/dev/disk/by-uuid/e9a8bd34-61eb-4317-888d-bd7d6248a906";
|
||||
fsType = "xfs";
|
||||
};
|
||||
|
||||
fileSystems."/boot" = {
|
||||
device = "/dev/disk/by-uuid/9B2F-31E1";
|
||||
fsType = "vfat";
|
||||
};
|
||||
|
||||
swapDevices = [];
|
||||
|
||||
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||
}
|
||||
@@ -1,5 +1,13 @@
|
||||
{
|
||||
networking.firewall.allowedTCPPorts = [8123];
|
||||
let
|
||||
port = 8123;
|
||||
in {
|
||||
networking.firewall.allowedTCPPorts = [port];
|
||||
|
||||
services.nginx.virtualHosts."home.kmein.r" = {
|
||||
locations."/" = {
|
||||
proxyPass = "http://127.0.0.1:${toString port}";
|
||||
};
|
||||
};
|
||||
|
||||
virtualisation.oci-containers = {
|
||||
backend = "podman";
|
||||
|
||||
Reference in New Issue
Block a user