summary refs log tree commit diff
diff options
context:
space:
mode:
authorMel <einebeere@gmail.com>2024-11-04 03:26:19 +0100
committerMel <einebeere@gmail.com>2024-11-04 03:26:19 +0100
commit9a52eff1c92d63ea7309a4b0768f572973b5a6e6 (patch)
treefe565a90381c7716ba093b4ba11b432f8b0494eb
parent2fc26761a1e93e6212845ebd005eab71da704d6e (diff)
downloadnetwork-9a52eff1c92d63ea7309a4b0768f572973b5a6e6.tar.zst
network-9a52eff1c92d63ea7309a4b0768f572973b5a6e6.zip
Add basic renard server config
Signed-off-by: Mel <einebeere@gmail.com>
-rw-r--r--flake.lock18
-rw-r--r--flake.nix38
-rw-r--r--machines/renard/default.nix14
-rw-r--r--machines/renard/devices.nix13
-rw-r--r--machines/renard/hardware.nix33
-rw-r--r--machines/renard/home.nix9
-rw-r--r--modules/common.nix21
-rw-r--r--modules/www.nix31
-rw-r--r--util.nix7
9 files changed, 158 insertions, 26 deletions
diff --git a/flake.lock b/flake.lock
index 66c938b..a7105a6 100644
--- a/flake.lock
+++ b/flake.lock
@@ -38,11 +38,11 @@
     },
     "nixpkgs": {
       "locked": {
-        "lastModified": 1729691686,
-        "narHash": "sha256-BAuPWW+9fa1moZTU+jFh+1cUtmsuF8asgzFwejM4wac=",
+        "lastModified": 1730327045,
+        "narHash": "sha256-xKel5kd1AbExymxoIfQ7pgcX6hjw9jCgbiBjiUfSVJ8=",
         "owner": "NixOS",
         "repo": "nixpkgs",
-        "rev": "32e940c7c420600ef0d1ef396dc63b04ee9cad37",
+        "rev": "080166c15633801df010977d9d7474b4a6c549d7",
         "type": "github"
       },
       "original": {
@@ -54,11 +54,11 @@
     },
     "nixpkgs-unstable": {
       "locked": {
-        "lastModified": 1729665710,
-        "narHash": "sha256-AlcmCXJZPIlO5dmFzV3V2XF6x/OpNWUV8Y/FMPGd8Z4=",
+        "lastModified": 1730531603,
+        "narHash": "sha256-Dqg6si5CqIzm87sp57j5nTaeBbWhHFaVyG7V6L8k3lY=",
         "owner": "NixOS",
         "repo": "nixpkgs",
-        "rev": "2768c7d042a37de65bb1b5b3268fc987e534c49d",
+        "rev": "7ffd9ae656aec493492b44d0ddfb28e79a1ea25d",
         "type": "github"
       },
       "original": {
@@ -71,11 +71,11 @@
     "oisd": {
       "flake": false,
       "locked": {
-        "lastModified": 1729966322,
-        "narHash": "sha256-3Qnz98SRzzFZ8n5oKcpsW4PqGHkfk+Ef+5WKxeY68BI=",
+        "lastModified": 1730668406,
+        "narHash": "sha256-3VuzSnkJVEBBAu1VhYXlY1uPu/rFz6N91wYDFJMpN9Y=",
         "owner": "sjhgvr",
         "repo": "oisd",
-        "rev": "7634ebcc1036111300e5f0436cbea18c281a9151",
+        "rev": "07186bcabbf2de4e320a6d4c4f3d558b0d844e52",
         "type": "github"
       },
       "original": {
diff --git a/flake.nix b/flake.nix
index c0adac4..3b0b980 100644
--- a/flake.nix
+++ b/flake.nix
@@ -19,43 +19,51 @@
 
   outputs = inputs @ { self, nixpkgs, nixpkgs-unstable, home-manager, ... }:
   let
-    system = "x86_64-linux";
+    systems = {
+      x86 = "x86_64-linux";
+      arm = "aarch64-linux";
+    };
 
-    machines = [
-      "corsac"
+    machines = with systems; [
+      { name = "corsac"; system = x86; }
+      { name = "lapin"; system = arm; }
+      { name = "renard"; system = x86; }
     ];
     
-    packageSets = let
+    packageSetsForSystem = system: let
       pkgsInputs = { inherit system; config = import ./config.nix; };
     in rec {
       pkgs = import nixpkgs pkgsInputs;
       unstablePkgs = import nixpkgs-unstable pkgsInputs;
-      auxiliaryPkgs = import ./pkgs { inherit pkgs unstablePkgs; };
+      auxiliaryPkgs = import ./pkgs { inherit system pkgs unstablePkgs; };
     };
 
+    inherit (nixpkgs) lib;
   in {
-    nixosConfigurations = nixpkgs.lib.genAttrs machines
-      (machine: nixpkgs.lib.nixosSystem {
-        inherit system;
+    nixosConfigurations = lib.mergeAttrsList (map (machine: {
+      ${machine.name} = nixpkgs.lib.nixosSystem {
+        inherit (machine) system;
 
-        specialArgs = inputs // packageSets // {
-          me = machine;
+        specialArgs = inputs // (packageSetsForSystem machine.system) // {
+          me = machine.name;
           security = import ./security.nix;
+          util = import ./util.nix { inherit lib; };
         };
 
         modules = [
-          ./machines/${machine}
+          ./machines/${machine.name}
         
           home-manager.nixosModules.home-manager {
             home-manager.useGlobalPkgs = true;
             home-manager.useUserPackages = true;
-            home-manager.users.mel = import ./machines/${machine}/home.nix;
+            home-manager.users.mel = import ./machines/${machine.name}/home.nix;
           }
         ];
-      }
-    );
+      };
+    }) machines);
 
     # compatibility wrapper for nixos-option
-    legacyPackages.${system} = with packageSets; pkgs.recurseIntoAttrs pkgs;
+    legacyPackages = lib.genAttrs (lib.attrValues systems) 
+      (system: with packageSetsForSystem system; pkgs.recurseIntoAttrs pkgs);
   };
 }
diff --git a/machines/renard/default.nix b/machines/renard/default.nix
new file mode 100644
index 0000000..680e2cd
--- /dev/null
+++ b/machines/renard/default.nix
@@ -0,0 +1,14 @@
+{ ... }:
+
+{
+  imports = [
+    ../../modules/common.nix
+
+    ./hardware.nix
+    ./devices.nix
+  
+    ../../modules/www.nix
+  ];
+
+  system.stateVersion = "24.05";
+}
diff --git a/machines/renard/devices.nix b/machines/renard/devices.nix
new file mode 100644
index 0000000..e54f622
--- /dev/null
+++ b/machines/renard/devices.nix
@@ -0,0 +1,13 @@
+{ config, pkgs, ... }:
+
+{
+  boot.initrd = {
+    availableKernelModules = [ "virtio_pci" "virtio_scsi" ];
+    kernelModules = [ "dm-snapshot" ];
+  };
+
+  boot.loader.grub = {
+    enable = true;
+    device = "/dev/sda";
+  };
+}
diff --git a/machines/renard/hardware.nix b/machines/renard/hardware.nix
new file mode 100644
index 0000000..5db9ce8
--- /dev/null
+++ b/machines/renard/hardware.nix
@@ -0,0 +1,33 @@
+# Do not modify this file!  It was generated by ‘nixos-generate-config’
+# and may be overwritten by future invocations.  Please make changes
+# to /etc/nixos/configuration.nix instead.
+{ config, lib, pkgs, modulesPath, ... }:
+
+{
+  imports =
+    [ (modulesPath + "/profiles/qemu-guest.nix")
+    ];
+
+  boot.initrd.availableKernelModules = [ "ata_piix" "uhci_hcd" "virtio_pci" "virtio_scsi" "sd_mod" ];
+  boot.initrd.kernelModules = [ ];
+  boot.kernelModules = [ ];
+  boot.extraModulePackages = [ ];
+
+  fileSystems."/" =
+    { device = "/dev/disk/by-uuid/258bcc4c-22a7-4c4c-a264-568b7194dffc";
+      fsType = "ext4";
+    };
+
+  swapDevices =
+    [ { device = "/dev/disk/by-uuid/a0b48c9b-9885-4722-a6e1-0e30e657669c"; }
+    ];
+
+  # Enables DHCP on each ethernet and wireless interface. In case of scripted networking
+  # (the default) this is the recommended approach. When using systemd-networkd it's
+  # still possible to use this option, but it's recommended to use it in conjunction
+  # with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
+  networking.useDHCP = lib.mkDefault true;
+  # networking.interfaces.eth0.useDHCP = lib.mkDefault true;
+
+  nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
+}
diff --git a/machines/renard/home.nix b/machines/renard/home.nix
new file mode 100644
index 0000000..dce0783
--- /dev/null
+++ b/machines/renard/home.nix
@@ -0,0 +1,9 @@
+{ pkgs, ... }:
+
+{
+  imports = [
+    ../../modules/home/common.nix
+  ];
+
+  home.stateVersion = "24.05";
+}
diff --git a/modules/common.nix b/modules/common.nix
index f035db5..2f2b141 100644
--- a/modules/common.nix
+++ b/modules/common.nix
@@ -1,4 +1,4 @@
-{ me, config, lib, pkgs, ... }:
+{ me, util, config, lib, pkgs, ... }:
 
 {
   imports = [
@@ -9,8 +9,25 @@
   ];
 
   boot.kernelPackages = pkgs.linuxPackages_latest;
+ 
+  
+  users.motd = ''
+
+/^  /^
+\ ' ' 7   < Hi, I'm ${util.titleCase me}
+/    \
+
+  '';
 
-  networking.hostName = me;
+  networking = {
+    hostName = me;
+  
+    firewall = {
+      enable = true;
+      allowedTCPPorts = [ 80 443 ];
+      trustedInterfaces = [ "tailscale0" ];
+    };
+  };
 
   services.envfs.enable = true;
   virtualisation.libvirtd.enable = true;
diff --git a/modules/www.nix b/modules/www.nix
new file mode 100644
index 0000000..1df69cf
--- /dev/null
+++ b/modules/www.nix
@@ -0,0 +1,31 @@
+{ me, ... }:
+
+let 
+  rnrdUrl =
+    if me == "renard"
+      then "rnrd.eu"
+      else "${me}.rnrd.eu";
+in
+{
+  security.acme = {
+    acceptTerms = true;
+    defaults.email = "einebeere@gmail.com";
+  };
+
+  services.nginx = {
+    enable = true;
+    recommendedGzipSettings = true;
+    recommendedOptimisation = true;
+    recommendedProxySettings = true;
+    recommendedTlsSettings = true;
+  
+    virtualHosts = {
+      default = { default = true; };
+      ${rnrdUrl} = {
+        root = "/var/www/html";
+        forceSSL = true;
+        enableACME = true;
+      };
+    };
+  };
+}
diff --git a/util.nix b/util.nix
new file mode 100644
index 0000000..e783f3b
--- /dev/null
+++ b/util.nix
@@ -0,0 +1,7 @@
+{ lib }:
+{
+  titleCase = str: with lib.strings; let
+    firstCharUpper = s: concatStrings [(toUpper (substring 0 1 s)) (substring 1 (stringLength s) s)];
+  in
+    concatStringsSep " " (map firstCharUpper (splitString " " str));
+}