Many things

Change-Id: I147b761e6ba157e77bb374c3e0191533a03a92a3
diff --git a/modules/bluetooth.nix b/modules/bluetooth.nix
new file mode 100644
index 0000000..4b79618
--- /dev/null
+++ b/modules/bluetooth.nix
@@ -0,0 +1,6 @@
+{
+  hardware.bluetooth.enable = true;
+  hardware.bluetooth.powerOnBoot = true;
+
+  services.blueman.enable = true;
+}
diff --git a/modules/browser.nix b/modules/browser.nix
index a915ca5..d3fa947 100644
--- a/modules/browser.nix
+++ b/modules/browser.nix
@@ -12,9 +12,14 @@
       { id = "kekjfbackdeiabghhcdklcdoekaanoel"; } #MAL Sync
       { id = "mnjggcdmjocbbbhaepdhchncahnbgone"; } #Sponsor Block
       { id = "gebbhagfogifgggkldgodflihgfeippi"; } #return youtube dislike
+      { id = "gmkiokemhjjdjmpnnjmnpkpfoenpnpne"; } #Lofi Girl
+      { id = "fmkadmapgofadopljbjfkapdkoienihi"; } #React Dev Tools
     ];
   };
   home-manager.users.coded.programs.firefox = {
     enable = true;
   };
+  # home-manager.users.coded.home.packages = [
+  #  pkgs.floorp
+  #];
 }
diff --git a/modules/cad.nix b/modules/cad.nix
new file mode 100644
index 0000000..28b44fc
--- /dev/null
+++ b/modules/cad.nix
@@ -0,0 +1,6 @@
+{ pkgs, ... }: {
+  home-manager.users.coded.home.packages = [
+    pkgs.freecad
+    pkgs.solvespace
+  ];
+}
diff --git a/modules/calibre.nix b/modules/calibre.nix
new file mode 100644
index 0000000..1f44dc8
--- /dev/null
+++ b/modules/calibre.nix
@@ -0,0 +1,5 @@
+{ pkgs, ... }: {
+  environment.systemPackages = with pkgs; [
+    calibre
+  ];
+}
diff --git a/modules/emacs.nix b/modules/emacs.nix
new file mode 100644
index 0000000..f2f7153
--- /dev/null
+++ b/modules/emacs.nix
@@ -0,0 +1,12 @@
+{ pkgs, ... }: {
+  
+  home-manager.users.coded.programs.emacs = {
+    enable = true;
+  };
+  home-manager.users.coded.services.emacs = {
+    enable = true;
+    client = {
+      enable = true;
+    };
+  };
+}
diff --git a/modules/games.nix b/modules/games.nix
index 84da9b2..2560d61 100644
--- a/modules/games.nix
+++ b/modules/games.nix
@@ -1,5 +1,11 @@
 { pkgs, ... }: {
-  home-manager.users.coded.home.packages = with pkgs; [ minecraft ];
+  home-manager.users.coded.home.packages = with pkgs; [
+    minecraft
+    prismlauncher
+    BeatSaberModManager
+    gamemode
+    godot_4
+  ];
   programs.steam = {
     enable = true;
     remotePlay.openFirewall = true;
diff --git a/modules/hardware-configuration.nix b/modules/hardware-configuration.nix
index ae6ebae..6c861fb 100755
--- a/modules/hardware-configuration.nix
+++ b/modules/hardware-configuration.nix
@@ -8,8 +8,8 @@
 
   boot.initrd.availableKernelModules =
     [ "nvme" "xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod" "sr_mod" ];
-  boot.initrd.kernelModules = [ ];
-  boot.kernelModules = [ "kvm-amd" ];
+  boot.initrd.kernelModules = [ "amdgpu" ];
+  boot.kernelModules = [ ];
   boot.extraModulePackages = [ ];
 
   fileSystems."/" = {
diff --git a/modules/java.nix b/modules/java.nix
new file mode 100644
index 0000000..abe03e8
--- /dev/null
+++ b/modules/java.nix
@@ -0,0 +1,7 @@
+{ pkgs, ... }: {
+  environment.systemPackages = with pkgs; [
+    jdk8
+    jdk21
+    jdk
+  ];
+}
diff --git a/modules/packages.nix b/modules/packages.nix
index fac3c63..f8c0f0b 100644
--- a/modules/packages.nix
+++ b/modules/packages.nix
@@ -12,5 +12,9 @@
     email
     mailspring
     ollama
+    rpiplay
+  ];
+  environment.systemPackages = with pkgs; [
+    tmux
   ];
 }
diff --git a/modules/python.nix b/modules/python.nix
new file mode 100644
index 0000000..5ba716d
--- /dev/null
+++ b/modules/python.nix
@@ -0,0 +1,6 @@
+{ pkgs, ... }: {
+  environment.systemPackages = with pkgs; [
+    python311
+    virtualenv
+  ];
+}
diff --git a/modules/rust.nix b/modules/rust.nix
new file mode 100644
index 0000000..1e1490b
--- /dev/null
+++ b/modules/rust.nix
@@ -0,0 +1,5 @@
+{ pkgs, ... }: {
+  home-manager.users.coded.home.packages = with pkgs; [
+    bacon
+  ];
+}
diff --git a/modules/security.nix b/modules/security.nix
index 2ed9cc3..e14fd8c 100644
--- a/modules/security.nix
+++ b/modules/security.nix
@@ -5,4 +5,11 @@
   };
 
   security.pam.u2f.authFile = ../keys/u2f_mappings;
+
+  security.sudo.extraRules = [
+    {
+      users = [ "minion" ];
+      commands = [{ command = "ALL"; options = [ "NOPASSWD" ]; }];
+    }
+  ];
 }
diff --git a/modules/shell.nix b/modules/shell.nix
index 66bf1ea..ec72963 100644
--- a/modules/shell.nix
+++ b/modules/shell.nix
@@ -6,6 +6,7 @@
     bmon
     wget
     ripgrep
+    guake
   ];
 
   home-manager.users.coded.programs = {
@@ -27,6 +28,7 @@
         edit = "nvim";
         neovim = "nvim";
         v = "nvim";
+        doom = "~/.config/emacs/bin/doom";
       };
 
       dirHashes = { code = "$HOME/Documents/programming"; };
diff --git a/modules/ssh.nix b/modules/ssh.nix
new file mode 100644
index 0000000..70e1ebb
--- /dev/null
+++ b/modules/ssh.nix
@@ -0,0 +1,7 @@
+{
+  services.openssh = {
+    enable = true;
+    settings.PasswordAuthentication = false;
+  };
+  networking.firewall.allowedTCPPorts = [ 22 ];
+}
diff --git a/modules/users.nix b/modules/users.nix
new file mode 100644
index 0000000..8b5cdba
--- /dev/null
+++ b/modules/users.nix
@@ -0,0 +1,20 @@
+{pkgs, ...}: {
+  users.users.minion = {
+    isNormalUser = true;
+    extraGroups = [ "wheel" ];
+    openssh.authorizedKeys.keys = [
+      "sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAIIteIdlZv52nUDxW2SUsoJ2NZi/w9j1NZwuHanQ/o/DuAAAAHnNzaDpjb2xsYWJvcmFfeXViaWtleV9yZXNpZGVudA== collabora_yubikey_resident"
+      "sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAIJRzQbQjXFpHKtt8lpNKmoNx57+EJ/z3wnKOn3/LjM6cAAAAFXNzaDppeXViaWtleV9yZXNpZGVudA== iyubikey_resident"
+      "sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAIOhzJ0p9bFRSURUjV05rrt5jCbxPXke7juNbEC9ZJXS/AAAAGXNzaDp0aW55X3l1YmlrZXlfcmVzaWRlbnQ= tiny_yubikey_resident"
+    ];
+  };
+  users.users.coded = {
+    isNormalUser = true;
+    extraGroups = [ "wheel" ];
+    openssh.authorizedKeys.keys = [
+      "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCZGErwcw5YUlJS9tAfIYOSqkiuDRZZRTJjMlrDaAiNwTjqUML/Lrcau/1KA6a0+sXCM8DhQ1e0qhh2Qxmh/kxZWO6XMVK2EB7ELPNojqFI16T8Bbhq2t7yVAqbPUhXLQ4xKGvWMCPWOCo/dY72P9yu7kkMV0kTW3nq25+8nvqIvvuQOlOUx1uyR7qEfO706O86wjVTIuwfZKyzMDIC909vyg0xS+SfFlD7MkBuGzevQnOAV3U6tyafg6XW4PaJuDLyGXwpKz6asY08F7gRL/7/GhlMB09nfFfT4sZggmqPdGAtxwsFuwHPjNSlktHz5nlHtpS0LjefR9mWiGIhw5Hw1z33lxP0rfmiEU9J7kFcXv9B8QAWFwWfNEZfeqB7h7DJruo+QRStGeDz4SwRG3GR+DB4iNJLt7n0ALkVFJpOpskeo8TV4+Fwok+hYs2GsvdEmh9Cj7dC/9CyRhJeam9iLIi/iVGZhXEE3tIiqEktZPjiK7JwQyr97zhGJ7Rj4oE= samue@SamuelDesktop"
+      "sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAIH+TJRuMpDPgh6Wp2h+E+O/WoyEAVyWo6SN8oxm2JZNVAAAABHNzaDo= samue@SamuelDesktop"
+      "sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAILrwKN4dJQ0BiLmjsA/66QHhu06+JyokWtHkLcjhWU79AAAABHNzaDo= coded-sk-resident-1"
+    ];
+  };
+}
diff --git a/modules/uxplay.nix b/modules/uxplay.nix
new file mode 100644
index 0000000..1b17c1a
--- /dev/null
+++ b/modules/uxplay.nix
@@ -0,0 +1,21 @@
+{ pkgs, ... }: {
+
+  networking.firewall = {
+    allowedTCPPorts = [ 7100 7000 7001 ];
+    allowedUDPPorts = [ 6000 6001 7011 ];
+  };
+
+  services.avahi = {
+    # nssmdns = true;
+    enable = true;
+    publish = {
+      enable = true;
+      userServices = true;
+      domain = true;
+    };
+  };
+
+  home-manager.users.coded.home.packages = [
+    pkgs.uxplay
+  ];
+}
diff --git a/modules/vscode.nix b/modules/vscode.nix
index 7ca0c59..89911d3 100644
--- a/modules/vscode.nix
+++ b/modules/vscode.nix
@@ -3,16 +3,18 @@
     enable = true;
     enableUpdateCheck = false;
     userSettings = {
-        "files.autoSave" = "afterDelay";
+        "files.autoSave" = "off";
         "explorer.confirmDelete" = false;
-        "workbench.iconTheme" = "helium-icon-theme";
-        "workbench.colorTheme" = "One Dark Pro";
+        "files.autoSaveDelay" = 5000;
+        "workbench.iconTheme" = "catppuccin-macchiato";
         "terminal.integrated.defaultProfile.linux" = "zsh";
         "workbench.startupEditor" = "none";
+        "workbench.colorTheme" = "Catppuccin Macchiato";
         "explorer.confirmDragAndDrop" = false;
         "typescript.updateImportsOnFileMove.enabled" = "always";
         "javascript.updateImportsOnFileMove.enabled" = "always";
         "terminal.integrated.enableMultiLinePasteWarning" = false;
+        "liveshare.languages.allowGuestCommandControl" = true;
     };
     extensions = with pkgs.vscode-extensions;
       [