summaryrefslogtreecommitdiffstats
path: root/tv
diff options
context:
space:
mode:
Diffstat (limited to 'tv')
-rw-r--r--tv/1systems/cd.nix143
-rw-r--r--tv/1systems/mkdir.nix83
-rw-r--r--tv/1systems/nomic.nix116
-rw-r--r--tv/1systems/rmdir.nix84
-rw-r--r--tv/1systems/wu.nix409
-rw-r--r--tv/2configs/AO753.nix39
-rw-r--r--tv/2configs/CAC-CentOS-7-64bit.nix47
-rw-r--r--tv/2configs/CAC-Developer-1.nix6
-rw-r--r--tv/2configs/CAC-Developer-2.nix6
-rw-r--r--tv/2configs/base.nix187
-rw-r--r--tv/2configs/bash_completion.sh779
-rw-r--r--tv/2configs/charybdis.nix605
-rw-r--r--tv/2configs/consul-client.nix9
-rw-r--r--tv/2configs/consul-server.nix21
-rw-r--r--tv/2configs/cryptoroot.nix4
-rw-r--r--tv/2configs/exim-retiolum.nix126
-rw-r--r--tv/2configs/exim-smarthost.nix475
-rw-r--r--tv/2configs/git.nix90
-rw-r--r--tv/2configs/mail-client.nix14
-rw-r--r--tv/2configs/smartd.nix17
-rw-r--r--tv/2configs/synaptics.nix14
-rw-r--r--tv/2configs/urlwatch.nix51
-rw-r--r--tv/2configs/urxvt.nix24
-rw-r--r--tv/2configs/w110er.nix42
-rw-r--r--tv/2configs/xserver.nix41
-rw-r--r--tv/3modules/consul.nix118
-rw-r--r--tv/3modules/default.nix9
-rw-r--r--tv/3modules/ejabberd.nix166
-rw-r--r--tv/3modules/iptables.nix126
-rw-r--r--tv/4lib/default.nix27
-rw-r--r--tv/4lib/git.nix182
-rw-r--r--tv/4lib/modules.nix21
-rw-r--r--tv/5pkgs/charybdis/default.nix34
-rw-r--r--tv/5pkgs/charybdis/remove-setenv.patch12
-rw-r--r--tv/5pkgs/default.nix13
-rw-r--r--tv/5pkgs/lentil/default.nix15
-rw-r--r--tv/5pkgs/lentil/syntaxes.patch11
-rw-r--r--tv/5pkgs/much.nix64
-rw-r--r--tv/5pkgs/viljetic-pages/default.nix16
-rw-r--r--tv/5pkgs/viljetic-pages/index.html10
-rw-r--r--tv/5pkgs/viljetic-pages/logo.xpm24
41 files changed, 4280 insertions, 0 deletions
diff --git a/tv/1systems/cd.nix b/tv/1systems/cd.nix
new file mode 100644
index 000000000..54292eb83
--- /dev/null
+++ b/tv/1systems/cd.nix
@@ -0,0 +1,143 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+let
+ tvpkgs = import ../5pkgs { inherit pkgs; };
+in
+
+{
+ krebs.build.host = config.krebs.hosts.cd;
+ krebs.build.user = config.krebs.users.tv;
+
+ krebs.build.target = "root@cd.internet";
+
+ krebs.build.deps = {
+ nixpkgs = {
+ url = https://github.com/NixOS/nixpkgs;
+ rev = "4c01e6d91993b6de128795f4fbdd25f6227fb870";
+ };
+ secrets = {
+ url = "/home/tv/secrets/${config.krebs.build.host.name}";
+ };
+ stockholm = {
+ url = toString ../..;
+ };
+ };
+
+ imports = [
+ ../2configs/CAC-Developer-2.nix
+ ../2configs/CAC-CentOS-7-64bit.nix
+ ../2configs/base.nix
+ ../2configs/consul-server.nix
+ ../2configs/exim-smarthost.nix
+ ../2configs/git.nix
+ {
+ imports = [ ../2configs/charybdis.nix ];
+ tv.charybdis = {
+ enable = true;
+ sslCert = ../../Zcerts/charybdis_cd.crt.pem;
+ };
+ }
+ {
+ tv.ejabberd = {
+ enable = true;
+ hosts = [ "jabber.viljetic.de" ];
+ };
+ }
+ {
+ krebs.github-hosts-sync.enable = true;
+ tv.iptables.input-internet-accept-new-tcp =
+ singleton config.krebs.github-hosts-sync.port;
+ }
+ {
+ tv.iptables = {
+ enable = true;
+ input-internet-accept-new-tcp = [
+ "ssh"
+ "tinc"
+ "smtp"
+ "xmpp-client"
+ "xmpp-server"
+ ];
+ input-retiolum-accept-new-tcp = [
+ "http"
+ ];
+ };
+ }
+ {
+ tv.iptables.input-internet-accept-new-tcp = singleton "http";
+ krebs.nginx.servers.cgit.server-names = singleton "cgit.cd.viljetic.de";
+ }
+ {
+ # TODO make public_html also available to cd, cd.retiolum (AKA default)
+ tv.iptables.input-internet-accept-new-tcp = singleton "http";
+ krebs.nginx.servers.public_html = {
+ server-names = singleton "cd.viljetic.de";
+ locations = singleton (nameValuePair "~ ^/~(.+?)(/.*)?\$" ''
+ alias /home/$1/public_html$2;
+ '');
+ };
+ }
+ {
+ krebs.nginx.servers.viljetic = {
+ server-names = singleton "viljetic.de";
+ # TODO directly set root (instead via location)
+ locations = singleton (nameValuePair "/" ''
+ root ${tvpkgs.viljetic-pages};
+ '');
+ };
+ }
+ {
+ krebs.retiolum = {
+ enable = true;
+ connectTo = [
+ "fastpoke"
+ "pigstarter"
+ "ire"
+ ];
+ };
+ }
+ ];
+
+ networking.interfaces.enp2s1.ip4 = [
+ {
+ address = "162.219.7.216";
+ prefixLength = 24;
+ }
+ ];
+ networking.defaultGateway = "162.219.7.1";
+ networking.nameservers = [
+ "8.8.8.8"
+ ];
+
+ environment.systemPackages = with pkgs; [
+ git # required for ./deploy, clone_or_update
+ htop
+ iftop
+ iotop
+ iptables
+ mutt # for mv
+ nethogs
+ rxvt_unicode.terminfo
+ tcpdump
+ ];
+
+ services.journald.extraConfig = ''
+ SystemMaxUse=1G
+ RuntimeMaxUse=128M
+ '';
+
+ users.extraUsers = {
+ mv = {
+ uid = 1338;
+ group = "users";
+ home = "/home/mv";
+ createHome = true;
+ useDefaultShell = true;
+ openssh.authorizedKeys.keys = [
+ config.krebs.users.mv.pubkey
+ ];
+ };
+ };
+}
diff --git a/tv/1systems/mkdir.nix b/tv/1systems/mkdir.nix
new file mode 100644
index 000000000..cd3d3b5c4
--- /dev/null
+++ b/tv/1systems/mkdir.nix
@@ -0,0 +1,83 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+{
+ krebs.build.host = config.krebs.hosts.mkdir;
+ krebs.build.user = config.krebs.users.tv;
+
+ krebs.build.target = "root@mkdir.internet";
+
+ krebs.build.deps = {
+ nixpkgs = {
+ url = https://github.com/NixOS/nixpkgs;
+ rev = "9d5508d85c33b8fb22d79dde6176792eac2c2696";
+ };
+ secrets = {
+ url = "/home/tv/secrets/${config.krebs.build.host.name}";
+ };
+ stockholm = {
+ url = toString ../..;
+ };
+ };
+
+ imports = [
+ ../2configs/CAC-Developer-1.nix
+ ../2configs/CAC-CentOS-7-64bit.nix
+ ../2configs/base.nix
+ ../2configs/consul-server.nix
+ ../2configs/exim-smarthost.nix
+ ../2configs/git.nix
+ {
+ tv.iptables = {
+ enable = true;
+ input-internet-accept-new-tcp = [
+ "ssh"
+ "tinc"
+ "smtp"
+ ];
+ input-retiolum-accept-new-tcp = [
+ "http"
+ ];
+ };
+ }
+ {
+ krebs.retiolum = {
+ enable = true;
+ connectTo = [
+ "cd"
+ "fastpoke"
+ "pigstarter"
+ "ire"
+ ];
+ };
+ }
+ ];
+
+ networking.interfaces.enp2s1.ip4 = [
+ {
+ address = "162.248.167.241"; # TODO
+ prefixLength = 24;
+ }
+ ];
+ networking.defaultGateway = "162.248.167.1";
+ networking.nameservers = [
+ "8.8.8.8"
+ ];
+
+ environment.systemPackages = with pkgs; [
+ git # required for ./deploy, clone_or_update
+ htop
+ iftop
+ iotop
+ iptables
+ nethogs
+ rxvt_unicode.terminfo
+ tcpdump
+ ];
+
+ services.journald.extraConfig = ''
+ SystemMaxUse=1G
+ RuntimeMaxUse=128M
+ '';
+}
diff --git a/tv/1systems/nomic.nix b/tv/1systems/nomic.nix
new file mode 100644
index 000000000..b9a10cb4f
--- /dev/null
+++ b/tv/1systems/nomic.nix
@@ -0,0 +1,116 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+{
+ krebs.build.host = config.krebs.hosts.nomic;
+ krebs.build.user = config.krebs.users.tv;
+
+ krebs.build.target = "root@nomic.gg23";
+
+ krebs.build.deps = {
+ nixpkgs = {
+ url = https://github.com/NixOS/nixpkgs;
+ rev = "9d5508d85c33b8fb22d79dde6176792eac2c2696";
+ };
+ secrets = {
+ url = "/home/tv/secrets/${config.krebs.build.host.name}";
+ };
+ stockholm = {
+ url = toString ../..;
+ };
+ };
+
+ imports = [
+ ../2configs/AO753.nix
+ ../2configs/base.nix
+ ../2configs/consul-server.nix
+ ../2configs/exim-retiolum.nix
+ ../2configs/git.nix
+ {
+ tv.iptables = {
+ enable = true;
+ input-internet-accept-new-tcp = [
+ "ssh"
+ "http"
+ "tinc"
+ "smtp"
+ ];
+ };
+ }
+ {
+ krebs.nginx = {
+ enable = true;
+ servers.default.locations = [
+ (nameValuePair "~ ^/~(.+?)(/.*)?\$" ''
+ alias /home/$1/public_html$2;
+ '')
+ ];
+ };
+ }
+ {
+ krebs.retiolum = {
+ enable = true;
+ connectTo = [
+ "gum"
+ "pigstarter"
+ ];
+ };
+ }
+ ];
+
+ boot.initrd.luks = {
+ cryptoModules = [ "aes" "sha1" "xts" ];
+ devices = [
+ {
+ name = "luks1";
+ device = "/dev/disk/by-uuid/cac73902-1023-4906-8e95-3a8b245337d4";
+ }
+ ];
+ };
+
+ fileSystems."/" =
+ { device = "/dev/disk/by-uuid/de4780fc-0473-4708-81df-299b7383274c";
+ fsType = "btrfs";
+ };
+
+ fileSystems."/boot" =
+ { device = "/dev/disk/by-uuid/be3a1d80-3157-4d7c-86cc-ef01b64eff5e";
+ fsType = "ext4";
+ };
+
+ fileSystems."/home" =
+ { device = "/dev/disk/by-uuid/9db9c8ff-51da-4cbd-9f0a-0cd3333bbaff";
+ fsType = "btrfs";
+ };
+
+ swapDevices = [ ];
+
+ nix = {
+ buildCores = 2;
+ maxJobs = 2;
+ daemonIONiceLevel = 1;
+ daemonNiceLevel = 1;
+ };
+
+ # TODO base
+ boot.tmpOnTmpfs = true;
+
+ environment.systemPackages = with pkgs; [
+ (writeScriptBin "play" ''
+ #! /bin/sh
+ set -euf
+ mpv() { exec ${mpv}/bin/mpv "$@"; }
+ case $1 in
+ deepmix) mpv http://deepmix.ru/deepmix128.pls;;
+ groovesalad) mpv http://somafm.com/play/groovesalad;;
+ ntslive) mpv http://listen2.ntslive.co.uk/listen.pls;;
+ *)
+ echo "$0: bad argument: $*" >&2
+ exit 23
+ esac
+ '')
+ rxvt_unicode.terminfo
+ tmux
+ ];
+}
diff --git a/tv/1systems/rmdir.nix b/tv/1systems/rmdir.nix
new file mode 100644
index 000000000..c8ac43e4c
--- /dev/null
+++ b/tv/1systems/rmdir.nix
@@ -0,0 +1,84 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+{
+ krebs.build.host = config.krebs.hosts.rmdir;
+ krebs.build.user = config.krebs.users.tv;
+
+ krebs.build.target = "root@rmdir.internet";
+
+ krebs.build.deps = {
+ nixpkgs = {
+ url = https://github.com/NixOS/nixpkgs;
+ rev = "4c01e6d91993b6de128795f4fbdd25f6227fb870";
+ };
+ secrets = {
+ url = "/home/tv/secrets/${config.krebs.build.host.name}";
+ };
+ stockholm = {
+ url = toString ../..;
+ };
+ };
+
+ imports = [
+ ../2configs/CAC-Developer-1.nix
+ ../2configs/CAC-CentOS-7-64bit.nix
+ ../2configs/base.nix
+ ../2configs/consul-server.nix
+ ../2configs/exim-smarthost.nix
+ ../2configs/git.nix
+ {
+ tv.iptables = {
+ enable = true;
+ input-internet-accept-new-tcp = [
+ "ssh"
+ "tinc"
+ "smtp"
+ ];
+ input-retiolum-accept-new-tcp = [
+ "http"
+ ];
+ };
+ }
+ {
+ krebs.retiolum = {
+ enable = true;
+ connectTo = [
+ "cd"
+ "mkdir"
+ "fastpoke"
+ "pigstarter"
+ "ire"
+ ];
+ };
+ }
+ ];
+
+ networking.interfaces.enp2s1.ip4 = [
+ {
+ address = "167.88.44.94";
+ prefixLength = 24;
+ }
+ ];
+ networking.defaultGateway = "167.88.44.1";
+ networking.nameservers = [
+ "8.8.8.8"
+ ];
+
+ environment.systemPackages = with pkgs; [
+ git # required for ./deploy, clone_or_update
+ htop
+ iftop
+ iotop
+ iptables
+ nethogs
+ rxvt_unicode.terminfo
+ tcpdump
+ ];
+
+ services.journald.extraConfig = ''
+ SystemMaxUse=1G
+ RuntimeMaxUse=128M
+ '';
+}
diff --git a/tv/1systems/wu.nix b/tv/1systems/wu.nix
new file mode 100644
index 000000000..27691ec56
--- /dev/null
+++ b/tv/1systems/wu.nix
@@ -0,0 +1,409 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+let
+ tvpkgs = import ../5pkgs { inherit pkgs; };
+in
+
+{
+ krebs.build.host = config.krebs.hosts.wu;
+ krebs.build.user = config.krebs.users.tv;
+
+ krebs.build.target = "root@wu";
+
+ krebs.build.deps = {
+ nixpkgs = {
+ url = https://github.com/NixOS/nixpkgs;
+ rev = "9d5508d85c33b8fb22d79dde6176792eac2c2696";
+ };
+ secrets = {
+ url = "/home/tv/secrets/${config.krebs.build.host.name}";
+ };
+ stockholm = {
+ url = toString ../..;
+ };
+ };
+
+ imports = [
+ ../2configs/w110er.nix
+ ../2configs/base.nix
+ ../2configs/consul-client.nix
+ ../2configs/exim-retiolum.nix
+ ../2configs/git.nix
+ ../2configs/mail-client.nix
+ ../2configs/xserver.nix
+ ../2configs/synaptics.nix # TODO w110er if xserver is enabled
+ ../2configs/urlwatch.nix
+ {
+ environment.systemPackages = with pkgs; [
+
+ # stockholm
+ git
+ gnumake
+ parallel
+ tvpkgs.genid
+ tvpkgs.hashPassword
+ tvpkgs.lentil
+ (pkgs.writeScriptBin "ff" ''
+ #! ${pkgs.bash}/bin/bash
+ exec sudo -u ff -i <<EOF
+ exec ${pkgs.firefoxWrapper}/bin/firefox $(printf " %q" "$@")
+ EOF
+ '')
+ (pkgs.writeScriptBin "im" ''
+ #! ${pkgs.bash}/bin/bash
+ export PATH=${makeSearchPath "bin" (with pkgs; [
+ tmux
+ gnugrep
+ weechat
+ ])}
+ if tmux list-sessions -F\#S | grep -q '^im''$'; then
+ exec tmux attach -t im
+ else
+ exec tmux new -s im weechat
+ fi
+ '')
+
+ # root
+ cryptsetup
+ ntp # ntpate
+
+ # tv
+ bc
+ bind # dig
+ file
+ gitAndTools.qgit
+ gnupg21
+ haskellPackages.hledger
+ htop
+ jq
+ manpages
+ mkpasswd
+ mpv
+ netcat
+ nix-repl
+ nmap
+ p7zip
+ pavucontrol
+ posix_man_pages
+ qrencode
+ sxiv
+ texLive
+ tmux
+ tvpkgs.dic
+ zathura
+
+ #ack
+ #apache-httpd
+ #ascii
+ #emacs
+ #es
+ #esniper
+ #gcc
+ #gptfdisk
+ #graphviz
+ #haskellPackages.cabal2nix
+ #haskellPackages.ghc
+ #haskellPackages.shake
+ #hdparm
+ #i7z
+ #iftop
+ #imagemagick
+ #inotifyTools
+ #iodine
+ #iotop
+ #lshw
+ #lsof
+ #minicom
+ #mtools
+ #ncmpc
+ #neovim
+ #nethogs
+ #nix-prefetch-scripts #cvs bug
+ #openssl
+ #openswan
+ #parted
+ #perl
+ #powertop
+ #ppp
+ #proot
+ #pythonPackages.arandr
+ #pythonPackages.youtube-dl
+ #racket
+ #rxvt_unicode-with-plugins
+ #scrot
+ #sec
+ #silver-searcher
+ #sloccount
+ #smartmontools
+ #socat
+ #sshpass
+ #strongswan
+ #sysdig
+ #sysstat
+ #tcpdump
+ #tlsdate
+ #unetbootin
+ #utillinuxCurses
+ #wvdial
+ #xdotool
+ #xkill
+ #xl2tpd
+ #xsel
+ ];
+ }
+ {
+ tv.iptables = {
+ enable = true;
+ input-internet-accept-new-tcp = [
+ "ssh"
+ "http"
+ "tinc"
+ "smtp"
+ ];
+ };
+ }
+ {
+ krebs.nginx = {
+ enable = true;
+ servers.default.locations = [
+ (nameValuePair "~ ^/~(.+?)(/.*)?\$" ''
+ alias /home/$1/public_html$2;
+ '')
+ ];
+ };
+ }
+ {
+ krebs.retiolum = {
+ enable = true;
+ connectTo = [
+ "gum"
+ "pigstarter"
+ ];
+ };
+ }
+ {
+ users.extraGroups = {
+ tv.gid = 1337;
+ slaves.gid = 3799582008; # genid slaves
+ };
+
+ users.extraUsers =
+ mapAttrs (name: user@{ extraGroups ? [], ... }: user // {
+ inherit name;
+ home = "/home/${name}";
+ createHome = true;
+ useDefaultShell = true;
+ group = "tv";
+ extraGroups = ["slaves"] ++ extraGroups;
+ }) {
+ ff = {
+ uid = 13378001;
+ extraGroups = [
+ "audio"
+ "video"
+ ];
+ };
+
+ cr = {
+ uid = 13378002;
+ extraGroups = [
+ "audio"
+ "video"
+ "bumblebee"
+ ];
+ };
+
+ fa = {
+ uid = 2300001;
+ };
+
+ rl = {
+ uid = 2300002;
+ };
+
+ tief = {
+ uid = 2300702;
+ };
+
+ btc-bitcoind = {
+ uid = 2301001;
+ };
+
+ btc-electrum = {
+ uid = 2301002;
+ };
+
+ ltc-litecoind = {
+ uid = 2301101;
+ };
+
+ eth = {
+ uid = 2302001;
+ };
+
+ emse-hsdb = {
+ uid = 4200101;
+ };
+
+ wine = {
+ uid = 13370400;
+ extraGroups = [
+ "audio"
+ "video"
+ "bumblebee"
+ ];
+ };
+
+ df = {
+ uid = 13370401;
+ extraGroups = [
+ "audio"
+ "video"
+ "bumblebee"
+ ];
+ };
+
+ xr = {
+ uid = 13370061;
+ extraGroups = [
+ "audio"
+ "video"
+ ];
+ };
+
+ "23" = {
+ uid = 13370023;
+ };
+
+ electrum = {
+ uid = 13370102;
+ };
+
+ skype = {
+ uid = 6660001;
+ extraGroups = [
+ "audio"
+ ];
+ };
+
+ onion = {
+ uid = 6660010;
+ };
+
+ zalora = {
+ uid = 1000301;
+ extraGroups = [
+ "audio"
+ # TODO remove vboxusers when hardening is active
+ "vboxusers"
+ "video"
+ ];
+ };
+ };
+
+ security.sudo.extraConfig =
+ let
+ isSlave = u: elem "slaves" u.extraGroups;
+ masterOf = u: u.group;
+ slaves = filterAttrs (_: isSlave) config.users.extraUsers;
+ toSudoers = u: "${masterOf u} ALL=(${u.name}) NOPASSWD: ALL";
+ in
+ concatMapStringsSep "\n" toSudoers (attrValues slaves);
+ }
+ ];
+
+ boot.initrd.luks = {
+ cryptoModules = [ "aes" "sha512" "xts" ];
+ devices = [
+ { name = "home"; device = "/dev/vg840/enchome"; preLVM = false; }
+ ];
+ };
+
+ fileSystems = {
+ "/" = {
+ device = "/dev/mapper/vg840-wuroot";
+ fsType = "btrfs";
+ options = "defaults,noatime,ssd,compress=lzo";
+ };
+ "/home" = {
+ device = "/dev/mapper/home";
+ options = "defaults,noatime,ssd,compress=lzo";
+ };
+ "/boot" = {
+ device = "/dev/sda1";
+ };
+ "/tmp" = {
+ device = "tmpfs";
+ fsType = "tmpfs";
+ options = "nosuid,nodev,noatime";
+ };
+ };
+
+ nixpkgs.config.chromium.enablePepperFlash = true;
+
+ nixpkgs.config.allowUnfree = true;
+ hardware.bumblebee.enable = true;
+ hardware.bumblebee.group = "video";
+ hardware.enableAllFirmware = true;
+ hardware.opengl.driSupport32Bit = true;
+ hardware.pulseaudio.enable = true;
+
+ environment.systemPackages = with pkgs; [
+ xlibs.fontschumachermisc
+ slock
+ ethtool
+ #firefoxWrapper # with plugins
+ #chromiumDevWrapper
+ tinc
+ iptables
+ #jack2
+ ];
+
+ security.setuidPrograms = [
+ "sendmail" # for cron
+ "slock"
+ ];
+
+ services.printing.enable = true;
+
+ services.journald.extraConfig = ''
+ SystemMaxUse=1G
+ RuntimeMaxUse=128M
+ '';
+
+ # see tmpfiles.d(5)
+ systemd.tmpfiles.rules = [
+ "d /tmp 1777 root root - -" # does this work with mounted /tmp?
+ ];
+
+ virtualisation.libvirtd.enable = true;
+
+ networking.extraHosts = ''
+ 192.168.1.1 wrt.gg23 wrt
+ 192.168.1.11 mors.gg23
+ 192.168.1.12 uriel.gg23
+ 192.168.1.23 raspi.gg23 raspi
+ 192.168.1.37 wu.gg23
+ 192.168.1.111 nomic.gg23
+ 192.168.1.124 schnabeldrucker.gg23 schnabeldrucker
+ '';
+
+ services.udev.extraRules = ''
+ SUBSYSTEM=="net", ATTR{address}=="00:90:f5:da:aa:c3", NAME="en0"
+ SUBSYSTEM=="net", ATTR{address}=="a0:88:b4:1b:ae:6c", NAME="wl0"
+
+ # for jack
+ KERNEL=="rtc0", GROUP="audio"
+ KERNEL=="hpet", GROUP=