{ config, lib, pkgs, ... }: let fixWifiScript = pkgs.writeScriptBin "fix-wifi" '' #!/usr/bin/env python3 import subprocess import socket import logging from typing import List, Optional def check_internet_connection(hosts_to_check: Optional[List[str]] = None) -> bool: """ Check internet connectivity by attempting to connect to reliable hosts. :param hosts_to_check: Optional list of hosts to check. :return: Boolean indicating if internet connection is available """ if hosts_to_check is None: hosts_to_check = [ "8.8.8.8", # Google DNS "1.1.1.1", # Cloudflare DNS "9.9.9.9" # Quad9 DNS ] for host in hosts_to_check: try: # Create a socket connection with a 5-second timeout socket.create_connection((host, 53), timeout=5) return True except (socket.error, socket.timeout): continue return False def reset_wifi_card() -> bool: """ Execute WiFi card reset commands. :return: Boolean indicating if reset commands were successful """ reset_commands = [ "echo 1 | sudo -u root tee /sys/bus/pci/devices/0000:09:00.0/reset", "sudo rmmod iwlwifi", "sudo modprobe iwlwifi" ] try: for command in reset_commands: result = subprocess.run( command, shell=True, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True ) print(f"Executed: {command}") print(f"Output: {result.stdout}") return True except subprocess.CalledProcessError as e: print(f"Error resetting WiFi: {e}") print(f"Error output: {e.stderr}") return False def main(): """ Check internet connection and reset WiFi if not connected. """ if not check_internet_connection(): print("No internet connection detected. Attempting WiFi reset...") reset_wifi_card() else: print("Internet connection is stable. No reset needed.") if __name__ == "__main__": main() ''; pkgsVersion = pkgs.unstable; in { services = { # Enable Desktop Environment. xserver = { desktopManager.gnome.enable = true; # Enable Desktop Environment. displayManager = { gdm.enable = lib.mkForce true; gdm.wayland = lib.mkForce true; }; }; # Enable Flatpak flatpak.enable = lib.mkDefault false; # enable auto discovery of printers avahi = { enable = lib.mkDefault true; nssmdns4 = lib.mkDefault true; openFirewall = lib.mkDefault true; }; restic.backups = { jallen-nas = { initialize = true; createWrapper = true; inhibitsSleep = true; environmentFile = config.sops.templates."restic.env".path; passwordFile = config.sops.secrets."desktop/restic/password".path; repositoryFile = config.sops.secrets."desktop/restic/repo".path; paths = [ "/home/matt" ]; exclude = [ "/home/matt/Games" "/home/matt/1TB" "/home/matt/Downloads" "/home/matt/Nextcloud" "/home/matt/.cache" "/home/matt/.local/share/Steam" "/home/matt/.var/app/com.valvesoftware.Steam" "/home/matt/.tmp" "/home/matt/.thumbnails" "/home/matt/.compose-cache" ]; }; proton-drive = { initialize = true; createWrapper = true; inhibitsSleep = true; passwordFile = config.sops.secrets."desktop/restic/password".path; rcloneConfigFile = "/home/matt/.config/rclone/rclone.conf"; repository = "rclone:proton-drive:backup-nix"; paths = [ "/home/matt" ]; exclude = [ "/home/matt/Games" "/home/matt/1TB" "/home/matt/Downloads" "/home/matt/Nextcloud" "/home/matt/.cache" "/home/matt/.local/share/Steam" "/home/matt/.var/app/com.valvesoftware.Steam" "/home/matt/.tmp" "/home/matt/.thumbnails" "/home/matt/.compose-cache" ]; }; }; btrfs = { autoScrub.enable = lib.mkDefault true; autoScrub.fileSystems = lib.mkDefault [ "/nix" "/root" "/etc" "/var/log" "/home" ]; }; ratbagd.enable = lib.mkDefault true; }; systemd = { services = { fix-wifi = { enable = lib.mkDefault true; path = with pkgsVersion; [ bash python3 networkmanager kmod fixWifiScript ]; wantedBy = [ "multi-user.target" ]; after = [ "network.target" ]; serviceConfig = { Type = "oneshot"; ExecStart = [ "${fixWifiScript}/bin/fix-wifi" ]; }; }; }; user.services = { rclone-home-proton = { enable = lib.mkDefault false; path = with pkgsVersion; [ bash pkgs.rclone ]; script = '' rclone sync /home/matt proton-drive:backup-nix --exclude '/home/matt/Games/**' --exclude '/home/matt/1TB/**' --exclude '/home/matt/Downloads/**' ''; }; rsync-home = { enable = lib.mkDefault false; path = with pkgsVersion; [ bash rsync openssh ]; script = '' rsync -rtpogvPlHzs --ignore-existing --exclude={'/home/matt/Games', '/home/matt/1TB', '/home/matt/Downloads/*', '/home/matt/.cache'} -e ssh /home/matt admin@10.0.1.18:/media/nas/main/backup/desktop-nix/home ''; }; }; }; }