From 1da95b53c14a5ee47d1e25fca1f8744ea1520a0e Mon Sep 17 00:00:00 2001 From: randomuser Date: Fri, 7 Jul 2023 23:44:40 -0500 Subject: [PATCH] preparing for netbox --- configuration.nix | 11 +- hardware-configuration.nix | 38 ----- mail.nix | 37 +++++ netbox.nix | 135 +++++++++++++++ nixos/vultr-server/configuration.nix | 154 ------------------ nixos/vultr-server/hardware-configuration.nix | 37 ----- nixos/vultr-server/mail.nix | 28 ---- 7 files changed, 181 insertions(+), 259 deletions(-) delete mode 100644 hardware-configuration.nix create mode 100644 mail.nix create mode 100644 netbox.nix delete mode 100644 nixos/vultr-server/configuration.nix delete mode 100644 nixos/vultr-server/hardware-configuration.nix delete mode 100644 nixos/vultr-server/mail.nix diff --git a/configuration.nix b/configuration.nix index 2f35ebb..15bc4a2 100644 --- a/configuration.nix +++ b/configuration.nix @@ -3,6 +3,7 @@ let hostname = "virtbox"; isVirtbox = hostname == "virtbox"; + isNetbox = hostname == "netbox"; in { imports = @@ -12,7 +13,7 @@ in ./netbox.nix ]; - networking.networkmanager.enable = true; # Easiest to use and most distros use this by default. + networking.networkmanager.enable = true; time.timeZone = "America/Chicago"; @@ -27,14 +28,20 @@ in curl htop git + tree + dig + htop ]; system.copySystemConfiguration = true; system.stateVersion = "23.05"; # don't change this, lol # branch and enable different capabilities based on the system - test = lib.mkIf isVirtbox { services.virtbox.enable = true; }; + + test = lib.mkIf isNetbox { + services.netbox.enable = true; + }; } diff --git a/hardware-configuration.nix b/hardware-configuration.nix deleted file mode 100644 index a0704e5..0000000 --- a/hardware-configuration.nix +++ /dev/null @@ -1,38 +0,0 @@ -# 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 = [ "ahci" "xhci_pci" "virtio_pci" "sr_mod" "virtio_blk" ]; - boot.initrd.kernelModules = [ ]; - boot.kernelModules = [ "kvm-intel" ]; - boot.extraModulePackages = [ ]; - - fileSystems."/" = - { device = "/dev/disk/by-uuid/348bd40a-08e7-48e4-aad7-d4fe002e9dc0"; - fsType = "ext4"; - }; - - fileSystems."/boot" = - { device = "/dev/disk/by-uuid/f161dbd9-52f3-4d04-b327-dbcf74cc44fd"; - fsType = "ext4"; - }; - - swapDevices = - [ { device = "/dev/disk/by-uuid/9349bfd4-d7f0-4e0d-b485-5e897d2d1e7b"; } - ]; - - # 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..useDHCP`. - networking.useDHCP = lib.mkDefault true; - # networking.interfaces.enp1s0.useDHCP = lib.mkDefault true; - - nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; -} diff --git a/mail.nix b/mail.nix new file mode 100644 index 0000000..d2d2478 --- /dev/null +++ b/mail.nix @@ -0,0 +1,37 @@ +{ config, pkgs, ... }: +let + release = "nixos-23.05"; + cfg = config.services.nixosmail; +in { + options.services.nixosmail = { + enable = mkEnableOption "NixOS mail server"; + }; + + imports = [ + (builtins.fetchTarball { + url = "https://gitlab.com/simple-nixos-mailserver/nixos-mailserver/-/archive/${release}/nixos-mailserver-${release}.tar.gz"; + # This hash needs to be updated + sha256 = "1ngil2shzkf61qxiqw11awyl81cr7ks2kv3r3k243zz7v2xakm5c"; + }) + ]; + + config = mkIf cfg.enable { + mailserver = { + enable = true; + fqdn = "mail.beepboop.systems"; + domains = [ "beepboop.systems" ]; + loginAccounts = { + "ryan@beepboop.systems" = { + # nix-shell -p mkpasswd --run 'mkpasswd -sm bcrypt' > /hashed/password/file/location + hashedPasswordFile = "/etc/ryan-beepboop-systemsuser-pass"; + + aliases = [ + "info@beepboop.systems" + "postmaster@beepboop.systems" + ]; + }; + }; + certificateScheme = "acme-nginx"; + }; + }; +} diff --git a/netbox.nix b/netbox.nix new file mode 100644 index 0000000..fdb8f57 --- /dev/null +++ b/netbox.nix @@ -0,0 +1,135 @@ +{ lib, config, pkgs, ... }: + +with lib; +let + cfg = config.services.netbox; +in { + options.serviecs.netbox = { + enable = mkEnableOption "netbox configs"; + }; + + imports = + [ + ./mail.nix + ]; + + config = mkIf cfg.enable { + boot.loader.grub.enable = true; + boot.loader.grub.device = "/dev/vda"; + + networking.hostName = "netbox"; + + users.users.useracc = { + isNormalUser = true; + extraGroups = [ "wheel" "docker" ]; + }; + + environment.systemPackages = with pkgs; [ + # nothing more needed, at the moment + ]; + + services.openssh = { + enable = true; + ports = [55555]; + }; + + networking.usePredictableInterfaceNames = false; + + services.nixosmail.enable = true; + + services.gitea = { + enable = true; + appName = "crappy code"; # Give the site a name + database = { + type = "postgres"; + passwordFile = "/etc/gittea-pass"; + }; + settings.server = { + DOMAIN = "git.beepboop.systems"; + ROOT_URL = "https://git.beepboop.systems/"; + HTTP_PORT = 3001; + }; + }; + + services.postgresql = { + enable = true; # Ensure postgresql is enabled + authentication = '' + local gitea all ident map=gitea-users + ''; + identMap = # Map the gitea user to postgresql + '' + gitea-users gitea gitea + ''; + }; + + services.nginx.enable = true; + services.nginx.clientMaxBodySize = "100m"; + + services.nginx.virtualHosts."beepboop.systems" = { + forceSSL = true; + enableACME = true; + root = "/var/www/beepboop.systems"; + }; + + services.nginx.virtualHosts."git.beepboop.systems" = { + forceSSL = true; + enableACME = true; + locations."/".proxyPass = "http://localhost:3001"; + }; + + services.nginx.virtualHosts."paperless.beepboop.systems" = { + forceSSL = true; + enableACME = true; + locations."/".proxyPass = "http://localhost:3004"; + }; + + services.nginx.virtualHosts."bitwarden.beepboop.systems" = { + forceSSL = true; + enableACME = true; + locations."/" = { + proxyPass = "http://127.0.0.1:8000"; + }; + }; + + services.nginx.virtualHosts."skillissue.agency" = { + forceSSL = true; + enableACME = true; + root = "/var/www/skillissue.agency"; + }; + + security.acme = { + acceptTerms = true; + email = "nickforanick@protonmail.com"; + }; + + services.roundcube = { + enable = true; + # this is the url of the vhost, not necessarily the same as the fqdn of + # the mailserver + hostName = "cube.beepboop.systems"; + extraConfig = '' + # starttls needed for authentication, so the fqdn required to match + # the certificate + $config['smtp_server'] = "tls://${config.mailserver.fqdn}"; + $config['smtp_user'] = "%u"; + $config['smtp_pass'] = "%p"; + ''; + }; + + services.paperless = { + enable = true; + passwordFile = "/etc/paperless-password"; + port = 3004; + address = "localhost"; + extraConfig = { + PAPERLESS_URL = "https://paperless.beepboop.systems"; + }; + }; + + services.vaultwarden.enable = true; + + # Open ports in the firewall. + networking.firewall.enable = false; + networking.firewall.allowedTCPPorts = [ 55555 80 443 ]; + }; +} diff --git a/nixos/vultr-server/configuration.nix b/nixos/vultr-server/configuration.nix deleted file mode 100644 index 992cdc1..0000000 --- a/nixos/vultr-server/configuration.nix +++ /dev/null @@ -1,154 +0,0 @@ -{ config, pkgs, ... }: - -{ - imports = - [ # Include the results of the hardware scan. - ./hardware-configuration.nix - ./mail.nix - ]; - - # Use the GRUB 2 boot loader. - boot.loader.grub.enable = true; - # boot.loader.grub.efiSupport = true; - # boot.loader.grub.efiInstallAsRemovable = true; - # boot.loader.efi.efiSysMountPoint = "/boot/efi"; - # Define on which hard drive you want to install Grub. - boot.loader.grub.device = "/dev/vda"; # or "nodev" for efi only - - networking.hostName = "netbox"; # Define your hostname. - # Pick only one of the below networking options. - # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. - networking.networkmanager.enable = true; # Easiest to use and most distros use this by default. - - # Set your time zone. - # time.timeZone = "Europe/Amsterdam"; - - # Configure network proxy if necessary - # networking.proxy.default = "http://user:password@proxy:port/"; - # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain"; - - # Select internationalisation properties. - i18n.defaultLocale = "en_US.UTF-8"; - # console = { - # font = "Lat2-Terminus16"; - # keyMap = "us"; - # useXkbConfig = true; # use xkbOptions in tty. - # }; - - # Enable the X11 windowing system. - # services.xserver.enable = true; - - # Configure keymap in X11 - # services.xserver.layout = "us"; - # services.xserver.xkbOptions = "eurosign:e,caps:escape"; - - # Enable CUPS to print documents. - # services.printing.enable = true; - - # Enable sound. - # sound.enable = true; - # hardware.pulseaudio.enable = true; - - # Enable touchpad support (enabled default in most desktopManager). - # services.xserver.libinput.enable = true; - - # Define a user account. Don't forget to set a password with ‘passwd’. - users.users.useracc = { - isNormalUser = true; - extraGroups = [ "wheel" ]; # Enable ‘sudo’ for the user. - }; - - # List packages installed in system profile. To search, run: - # $ nix search wget - environment.systemPackages = with pkgs; [ - neovim - curl - git - tree - dig - ]; - - # Some programs need SUID wrappers, can be configured further or are - # started in user sessions. - # programs.mtr.enable = true; - # programs.gnupg.agent = { - # enable = true; - # enableSSHSupport = true; - # }; - - # List services that you want to enable: - - # Enable the OpenSSH daemon. - services.openssh = { - enable = true; - ports = [55555]; - }; - - networking.usePredictableInterfaceNames = false; - - services.gitea = { - enable = true; - appName = "crappy code"; # Give the site a name - database = { - type = "postgres"; - passwordFile = "/etc/gittea-pass"; - }; - domain = "git.beepboop.systems"; - rootUrl = "https://git.beepboop.systems/"; - httpPort = 3001; - }; - - services.postgresql = { - enable = true; # Ensure postgresql is enabled - authentication = '' - local gitea all ident map=gitea-users - ''; - identMap = # Map the gitea user to postgresql - '' - gitea-users gitea gitea - ''; - }; - - services.nginx.enable = true; - - services.nginx.virtualHosts."beepboop.systems" = { - addSSL = true; - enableACME = true; - root = "/var/www/beepboop.systems"; - }; - - services.nginx.virtualHosts."mail.beepboop.systems" = { - addSSL = true; - enableACME = true; - root = "/var/www/mail.beepboop.systems"; - }; - - services.nginx.virtualHosts."git.beepboop.systems" = { - addSSL = true; - enableACME = true; - locations."/".proxyPass = "http://localhost:3001"; - }; - - security.acme = { - acceptTerms = true; - email = "nickforanick@protonmail.com"; - }; - - # Open ports in the firewall. - networking.firewall.enable = false; - networking.firewall.allowedTCPPorts = [ 55555 80 443 ]; - # networking.firewall.allowedUDPPorts = [ ... ]; - - # Copy the NixOS configuration file and link it from the resulting system - # (/run/current-system/configuration.nix). This is useful in case you - # accidentally delete configuration.nix. - # system.copySystemConfiguration = true; - - # This value determines the NixOS release from which the default - # settings for stateful data, like file locations and database versions - # on your system were taken. It's perfectly fine and recommended to leave - # this value at the release version of the first install of this system. - # Before changing this value read the documentation for this option - # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html). - system.stateVersion = "23.05"; # Did you read the comment? -} diff --git a/nixos/vultr-server/hardware-configuration.nix b/nixos/vultr-server/hardware-configuration.nix deleted file mode 100644 index 89e88a0..0000000 --- a/nixos/vultr-server/hardware-configuration.nix +++ /dev/null @@ -1,37 +0,0 @@ -# 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 = [ ]; - - boot.initrd.availableKernelModules = [ "ata_piix" "uhci_hcd" "virtio_pci" "sr_mod" "virtio_blk" ]; - boot.initrd.kernelModules = [ ]; - boot.kernelModules = [ ]; - boot.extraModulePackages = [ ]; - - fileSystems."/" = - { device = "/dev/disk/by-uuid/a57b82ca-7bfd-458e-b3e8-4962511cc0b8"; - fsType = "ext4"; - }; - - fileSystems."/boot" = - { device = "/dev/disk/by-uuid/DF39-1ECE"; - fsType = "vfat"; - }; - - swapDevices = - [ { device = "/dev/disk/by-uuid/57fbd850-1ced-4e21-9e52-4f3b529c61b0"; } - ]; - - # 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..useDHCP`. - networking.useDHCP = lib.mkDefault true; - # networking.interfaces.ens3.useDHCP = lib.mkDefault true; - - nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; - virtualisation.hypervGuest.enable = true; -} diff --git a/nixos/vultr-server/mail.nix b/nixos/vultr-server/mail.nix deleted file mode 100644 index 505a775..0000000 --- a/nixos/vultr-server/mail.nix +++ /dev/null @@ -1,28 +0,0 @@ -{ config, pkgs, ... }: -let release = "nixos-23.05"; -in { - imports = [ - (builtins.fetchTarball { - url = "https://gitlab.com/simple-nixos-mailserver/nixos-mailserver/-/archive/${release}/nixos-mailserver-${release}.tar.gz"; - # This hash needs to be updated - sha256 = "1ngil2shzkf61qxiqw11awyl81cr7ks2kv3r3k243zz7v2xakm5c"; - }) - ]; - - mailserver = { - enable = true; - fqdn = "mail.beepboop.systems"; - domains = [ "beepboop.systems" ]; - loginAccounts = { - "ryan@beepboop.systems" = { - # nix-shell -p mkpasswd --run 'mkpasswd -sm bcrypt' > /hashed/password/file/location - hashedPasswordFile = "/etc/ryan-beepboop-systemsuser-pass"; - - aliases = [ - "info@beepboop.systems" - "postmaster@beepboop.systems" - ]; - }; - }; - }; -}