210 lines
5.9 KiB
Nix
Executable File
210 lines
5.9 KiB
Nix
Executable File
{ 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
|
|
'';
|
|
};
|
|
};
|
|
};
|
|
} |