summaryrefslogtreecommitdiffstats
path: root/lass
diff options
context:
space:
mode:
Diffstat (limited to 'lass')
-rw-r--r--lass/1systems/blue/source.nix6
-rw-r--r--lass/1systems/xerxes/config.nix119
-rw-r--r--lass/1systems/xerxes/physical.nix86
-rw-r--r--lass/2configs/br.nix9
-rw-r--r--lass/2configs/nfs-dl.nix15
-rw-r--r--lass/3modules/autowifi.nix111
-rw-r--r--lass/3modules/default.nix1
7 files changed, 339 insertions, 8 deletions
diff --git a/lass/1systems/blue/source.nix b/lass/1systems/blue/source.nix
index 21f3a8bd..1a98fc05 100644
--- a/lass/1systems/blue/source.nix
+++ b/lass/1systems/blue/source.nix
@@ -1,6 +1,6 @@
-{ lib, pkgs, ... }:
+{ lib, pkgs, test, ... }:
{
- nixpkgs = lib.mkForce {
+ nixpkgs = lib.mkIf (! test) (lib.mkForce {
file = {
path = toString (pkgs.fetchFromGitHub {
owner = "nixos";
@@ -10,5 +10,5 @@
});
useChecksum = true;
};
- };
+ });
}
diff --git a/lass/1systems/xerxes/config.nix b/lass/1systems/xerxes/config.nix
new file mode 100644
index 00000000..2d25bc88
--- /dev/null
+++ b/lass/1systems/xerxes/config.nix
@@ -0,0 +1,119 @@
+{ config, lib, pkgs, ... }:
+
+{
+ imports = [
+ <stockholm/lass>
+
+ <stockholm/lass/2configs/retiolum.nix>
+ <stockholm/lass/2configs/exim-retiolum.nix>
+ <stockholm/lass/2configs/baseX.nix>
+ <stockholm/lass/2configs/browsers.nix>
+ <stockholm/lass/2configs/programs.nix>
+ <stockholm/lass/2configs/network-manager.nix>
+ <stockholm/lass/2configs/syncthing.nix>
+ <stockholm/lass/2configs/games.nix>
+ <stockholm/lass/2configs/steam.nix>
+ <stockholm/lass/2configs/wine.nix>
+ <stockholm/lass/2configs/fetchWallpaper.nix>
+ <stockholm/lass/2configs/nfs-dl.nix>
+ <stockholm/lass/2configs/pass.nix>
+ <stockholm/lass/2configs/mail.nix>
+ ];
+
+ krebs.build.host = config.krebs.hosts.xerxes;
+
+ environment.shellAliases = {
+ deploy = pkgs.writeDash "deploy" ''
+ set -eu
+ export SYSTEM="$1"
+ $(nix-build $HOME/sync/stockholm/lass/krops.nix --no-out-link --argstr name "$SYSTEM" -A deploy)
+ '';
+ };
+
+ services.xserver = {
+ displayManager.lightdm.autoLogin.enable = true;
+ displayManager.lightdm.autoLogin.user = "lass";
+ };
+
+ krebs.syncthing = {
+ folders = {
+ the_playlist = {
+ path = "/home/lass/tmp/the_playlist";
+ peers = [ "mors" "phone" "prism" "xerxes" ];
+ };
+ };
+ };
+ krebs.permown = {
+ "/home/lass/tmp/the_playlist" = {
+ owner = "lass";
+ group = "syncthing";
+ umask = "0007";
+ };
+ };
+
+ boot.blacklistedKernelModules = [ "xpad" ];
+ systemd.services.xboxdrv = {
+ wantedBy = [ "multi-user.target" ];
+ script = ''
+ ${pkgs.xboxdrv.overrideAttrs(o: {
+ patches = [ (pkgs.fetchurl {
+ url = "https://patch-diff.githubusercontent.com/raw/xboxdrv/xboxdrv/pull/251.patch";
+ sha256 = "17784y20mxqrlhgvwvszh8lprxrvgmb7ah9dknmbhj5jhkjl8wq5";
+ }) ];
+ })}/bin/xboxdrv --type xbox360 --dbus disabled -D
+ '';
+ };
+
+ programs.adb.enable = true;
+
+ services.logind.lidSwitch = "ignore";
+ services.acpid = {
+ enable = true;
+ lidEventCommands = ''
+ export DISPLAY=:${toString config.services.xserver.display}
+ case "$1" in
+ "button/lid LID close")
+ ${pkgs.xorg.xinput}/bin/xinput disable 'pointer: Mouse for Windows'
+ ${pkgs.xorg.xinput}/bin/xinput disable 'keyboard: Mouse for Windows'
+ ${pkgs.acpilight}/bin/xbacklight -get > /tmp/pre_lid_brightness
+ ${pkgs.acpilight}/bin/xbacklight -set 0
+ ;;
+ "button/lid LID open")
+ ${pkgs.xorg.xinput}/bin/xinput enable 'pointer: Mouse for Windows'
+ ${pkgs.xorg.xinput}/bin/xinput enable 'keyboard: Mouse for Windows'
+ ${pkgs.acpilight}/bin/xbacklight -set $(cat /tmp/pre_lid_brightness)
+ ;;
+ esac
+ '';
+ };
+
+ systemd.services.suspend-again = {
+ after = [ "suspend.target" ];
+ requiredBy = [ "suspend.target" ];
+ # environment = {
+ # DISPLAY = ":${toString config.services.xserver.display}";
+ # };
+ serviceConfig = {
+ ExecStart = pkgs.writeDash "suspend-again" ''
+ ${pkgs.gnugrep}/bin/grep -q closed /proc/acpi/button/lid/LID0/state
+ if [ "$?" -eq 0 ]; then
+ echo 'wakeup with closed lid'
+ ${pkgs.systemd}/bin/systemctl suspend
+ fi
+ '';
+ Type = "simple";
+ };
+ };
+
+ hardware.bluetooth.enable = true;
+ hardware.pulseaudio.package = pkgs.pulseaudioFull;
+ # hardware.pulseaudio.configFile = pkgs.writeText "default.pa" ''
+ # load-module module-bluetooth-policy
+ # load-module module-bluetooth-discover
+ # ## module fails to load with
+ # ## module-bluez5-device.c: Failed to get device path from module arguments
+ # ## module.c: Failed to load module "module-bluez5-device" (argument: ""): initialization failed.
+ # # load-module module-bluez5-device
+ # # load-module module-bluez5-discover
+ # '';
+}
diff --git a/lass/1systems/xerxes/physical.nix b/lass/1systems/xerxes/physical.nix
new file mode 100644
index 00000000..5d60dfc4
--- /dev/null
+++ b/lass/1systems/xerxes/physical.nix
@@ -0,0 +1,86 @@
+{ pkgs, lib, ... }:
+{
+ imports = [
+ ./config.nix
+ <nixpkgs/nixos/modules/installer/scan/not-detected.nix>
+ ];
+
+ boot.zfs.enableUnstable = true;
+ boot.loader.grub = {
+ enable = true;
+ device = "/dev/sda";
+ efiSupport = true;
+ };
+ boot.loader.efi.canTouchEfiVariables = true;
+
+ # TODO fix touchscreen
+ boot.blacklistedKernelModules = [
+ "goodix"
+ ];
+
+ boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "usbhid" "sd_mod" ];
+ boot.initrd.kernelModules = [ ];
+ boot.initrd.luks.devices.crypted.device = "/dev/sda3";
+ boot.kernelModules = [ "kvm-intel" ];
+ boot.extraModulePackages = [ ];
+ boot.kernelParams = [
+ "fbcon=rotate:1"
+ "boot.shell_on_fail"
+ ];
+
+ fileSystems."/" = {
+ device = "rpool/root";
+ fsType = "zfs";
+ };
+
+ fileSystems."/home" = {
+ device = "rpool/home";
+ fsType = "zfs";
+ };
+
+ fileSystems."/boot" = {
+ device = "/dev/disk/by-uuid/E749-784C";
+ fsType = "vfat";
+ };
+
+ swapDevices = [ ];
+
+ boot.extraModprobeConfig = ''
+ options zfs zfs_arc_max=1073741824
+ '';
+
+ nix.maxJobs = lib.mkDefault 4;
+
+ networking.hostId = "9b0a74ac";
+ networking.networkmanager.enable = true;
+
+ hardware.opengl.enable = true;
+
+ services.tlp.enable = true;
+ services.tlp.extraConfig = ''
+ CPU_SCALING_GOVERNOR_ON_AC=ondemand
+ CPU_SCALING_GOVERNOR_ON_BAT=powersave
+ CPU_MIN_PERF_ON_AC=0
+ CPU_MAX_PERF_ON_AC=100
+ CPU_MIN_PERF_ON_BAT=0
+ CPU_MAX_PERF_ON_BAT=30
+ '';
+
+ services.logind.extraConfig = ''
+ HandlePowerKey=suspend
+ IdleAction=suspend
+ IdleActionSec=300
+ '';
+
+ services.xserver = {
+ videoDrivers = [ "intel" ];
+ deviceSection = ''
+ Option "TearFree" "true"
+ '';
+ displayManager.sessionCommands = ''
+ echo nonono > /tmp/xxyy
+ (sleep 2 && ${pkgs.xorg.xrandr}/bin/xrandr --output eDP1 --rotate right)
+ (sleep 2 && ${pkgs.xorg.xinput}/bin/xinput set-prop 'Goodix Capacitive TouchScreen' 'Coordinate Transformation Matrix' 0 1 0 -1 0 1 0 0 1)
+ '';
+ };
+}
diff --git a/lass/2configs/br.nix b/lass/2configs/br.nix
index ad307c79..e4ccffe2 100644
--- a/lass/2configs/br.nix
+++ b/lass/2configs/br.nix
@@ -5,10 +5,11 @@ with import <stockholm/lib>;
<nixpkgs/nixos/modules/services/hardware/sane_extra_backends/brscan4.nix>
];
- krebs.nixpkgs.allowUnfreePredicate = pkg: any (flip hasPrefix pkg.name) [
- "brother-udev-rule-type1-"
- "brscan4-"
- "mfcl2700dnlpr-"
+ krebs.nixpkgs.allowUnfreePredicate = pkg: any (eq (packageName pkg)) [
+ "brother-udev-rule-type1"
+ "brscan4"
+ "brscan4-etc-files"
+ "mfcl2700dnlpr"
];
hardware.sane = {
diff --git a/lass/2configs/nfs-dl.nix b/lass/2configs/nfs-dl.nix
index abbcc1d4..ba53321b 100644
--- a/lass/2configs/nfs-dl.nix
+++ b/lass/2configs/nfs-dl.nix
@@ -1,7 +1,20 @@
{
fileSystems."/mnt/prism" = {
- device = "prism.w:/export";
+ device = "prism.w:/export/download";
fsType = "nfs";
+ options = [
+ "timeo=14"
+ "noauto"
+ "noatime"
+ "nodiratime"
+ "noac"
+ "nocto"
+ "x-systemd.automount"
+ "x-systemd.device-timeout=1"
+ "x-systemd.idle-timeout=1min"
+ "x-systemd.requires=retiolum.service"
+ "x-systemd.requires=wpa_supplicant.service"
+ ];
};
}
diff --git a/lass/3modules/autowifi.nix b/lass/3modules/autowifi.nix
new file mode 100644
index 00000000..930d9972
--- /dev/null
+++ b/lass/3modules/autowifi.nix
@@ -0,0 +1,111 @@
+{ config, lib, pkgs, ... }:
+with import <stockholm/lib>;
+let
+
+ cfg = config.lass.autowifi;
+
+in {
+ options.lass.autowifi = {
+ enable = mkEnableOption "automatic wifi connector";
+ knownWifisFile = mkOption {
+ type = types.str;
+ default = "/etc/wifis";
+ };
+ };
+
+ config = {
+ systemd.services.autowifi = {
+ description = "Automatic wifi connector";
+ wantedBy = [ "multi-user.target" ];
+ serviceConfig = {
+ Type = "simple";
+ Restart = "always";
+ RestartSec = "10s";
+ ExecStart = pkgs.writers.writePython3 "autowifi" {} /* python3 */ ''
+ import subprocess
+ import time
+ import urllib.request
+
+
+ def connect(ssid, psk=None):
+ subprocess.run(["${pkgs.networkmanager}/bin/nmcli", "connection", "delete", "autowifi"])
+ print("connecting to {}".format(ssid))
+ if psk is None:
+ subprocess.run(["${pkgs.networkmanager}/bin/nmcli", "device", "wifi", "connect", ssid, "name", "autowifi"])
+ else:
+ subprocess.run(["${pkgs.networkmanager}/bin/nmcli", "device", "wifi", "connect", ssid, "name", "autowifi", "password", psk])
+
+
+ def scan():
+ wifis_raw = subprocess.check_output(["${pkgs.networkmanager}/bin/nmcli", "-t", "device", "wifi", "list", "--rescan", "yes"])
+ wifis_list = wifis_raw.split(b'\n')
+ wifis = []
+ for line in wifis_list:
+ ls = line.split(b':')
+ if len(ls) == 8:
+ wifis.append({"ssid": ls[1], "signal": int(ls[5]), "crypto": ls[7]})
+ return wifis
+
+
+ def get_known_wifis():
+ wifis_lines = []
+ with open('${cfg.knownWifisFile}') as f:
+ wifis_lines = f.read().splitlines()
+ wifis = []
+ for line in wifis_lines:
+ ls = line.split(':')
+ wifis.append({"ssid": ls[0].encode(), "psk": ls[1].encode()})
+ return wifis
+
+
+ def check_internet():
+ try:
+ beacon = urllib.request.urlopen('http://krebsco.de/secret')
+ except: # noqa
+ print("no internet")
+ return False
+ if beacon.read() == b'1337\n':
+ return True
+ print("no internet")
+ return False
+
+
+ def is_wifi_open(wifi):
+ if wifi['crypto'] == ${"b''"}:
+ return True
+ else:
+ return False
+
+
+ def is_wifi_seen(wifi, seen_wifis):
+ for seen_wifi in seen_wifis:
+ if seen_wifi["ssid"] == wifi["ssid"]:
+ return True
+ return False
+
+
+ def bloop():
+ while True:
+ if not check_internet():
+ wifis = scan()
+ known_wifis = get_known_wifis()
+ known_seen_wifis = [wifi for wifi in known_wifis if is_wifi_seen(wifi, wifis)]
+ for wifi in known_seen_wifis:
+ connect(wifi['ssid'], wifi['psk'])
+ if check_internet():
+ continue
+ open_wifis = filter(is_wifi_open, wifis)
+ for wifi in open_wifis:
+ connect(wifi['ssid'])
+ if check_internet():
+ continue
+ time.sleep(10)
+
+
+ bloop()
+ '';
+ };
+ };
+ };
+}
+
diff --git a/lass/3modules/default.nix b/lass/3modules/default.nix
index 613c7c8a..1195cd3d 100644
--- a/lass/3modules/default.nix
+++ b/lass/3modules/default.nix
@@ -14,5 +14,6 @@ _:
./umts.nix
./usershadow.nix
./xjail.nix
+ ./autowifi.nix
];
}