From 57a5314813fef2700cea82c63f1ac0187c0f7b19 Mon Sep 17 00:00:00 2001 From: randomuser Date: Sat, 24 Jun 2023 16:55:54 -0500 Subject: [PATCH] add some nixos configs --- nixos/vultr-server/configuration.nix | 154 ++++++++++++++++++ nixos/vultr-server/hardware-configuration.nix | 37 +++++ nixos/vultr-server/mail.nix | 28 ++++ 3 files changed, 219 insertions(+) create mode 100644 nixos/vultr-server/configuration.nix create mode 100644 nixos/vultr-server/hardware-configuration.nix create mode 100644 nixos/vultr-server/mail.nix diff --git a/nixos/vultr-server/configuration.nix b/nixos/vultr-server/configuration.nix new file mode 100644 index 0000000..992cdc1 --- /dev/null +++ b/nixos/vultr-server/configuration.nix @@ -0,0 +1,154 @@ +{ 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 new file mode 100644 index 0000000..89e88a0 --- /dev/null +++ b/nixos/vultr-server/hardware-configuration.nix @@ -0,0 +1,37 @@ +# 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 new file mode 100644 index 0000000..505a775 --- /dev/null +++ b/nixos/vultr-server/mail.nix @@ -0,0 +1,28 @@ +{ 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" + ]; + }; + }; + }; +}