diff --git a/hosts/homex/configuration.nix b/hosts/homex/configuration.nix index 6adeb6e..27e5d21 100644 --- a/hosts/homex/configuration.nix +++ b/hosts/homex/configuration.nix @@ -8,11 +8,23 @@ imports = [ ../../modules/nixos/systems/set-user.nix ../../modules/nixos/config/host.nix + ../../modules/nixos/homelab ./hardware-configuration.nix ./network.nix ./users ]; + homelab = { + enable = true; + flakeDir = "/home/guz/.nix#homex"; + + forgejo = { + enable = true; + }; + }; + + services.tailscale.enable = true; + # Bootloader. boot.loader.systemd-boot.enable = true; boot.loader.efi.canTouchEfiVariables = true; @@ -21,3 +33,4 @@ nixpkgs.config.allowUnfree = true; } + diff --git a/modules/nixos/homelab/default.nix b/modules/nixos/homelab/default.nix new file mode 100644 index 0000000..3c3e71d --- /dev/null +++ b/modules/nixos/homelab/default.nix @@ -0,0 +1,35 @@ +{ config, pkgs, lib, ... }: + +let + cfg = config.homelab; + homelab = pkgs.writeShellScriptBin "homelab" '' + command="$1"; + + flakeDir="${toString cfg.flakeDir}"; + + if [[ "$command" == "build" ]]; then + shift 1; + sudo nixos-rebuild switch --flake "$flakeDir" "$@" + fi + ''; +in +{ + imports = [ + ]; + options.homelab = with lib; with lib.types; { + enable = mkEnableOption ""; + flakeDir = mkOption { + type = str; + }; + storage = mkOption { + type = path; + default = /data/homelab; + description = "The Homelab central storage path"; + }; + }; + config = lib.mkIf cfg.enable { + environment.systemPackages = [ + homelab + ]; + }; +} diff --git a/modules/nixos/homelab/forgejo.nix b/modules/nixos/homelab/forgejo.nix new file mode 100644 index 0000000..f8f55e8 --- /dev/null +++ b/modules/nixos/homelab/forgejo.nix @@ -0,0 +1,33 @@ +{ config, lib, pkgs, ... }: + +let + cfg = config.homelab.forgejo; +in +{ + imports = [ ]; + options.homelab.forgejo = with lib; with lib.types; { + enable = mkEnableOption ""; + user = mkOption { + type = str; + default = "forgejo"; + }; + data = { + root = mkOption { + type = path; + default = config.homelab.storage + /forgejo; + }; + }; + }; + config = lib.mkIf cfg.enable { + services.forgejo = { + enable = true; + user = cfg.user; + group = cfg.user; + stateDir = toString cfg.data.root; + database = { + user = cfg.user; + type = "sqlite3"; + }; + }; + }; +}