From b644c875172f37286b5301f497523c4f4212ec43 Mon Sep 17 00:00:00 2001 From: soraefir Date: Wed, 17 Apr 2024 00:25:54 +0200 Subject: [PATCH] Autosys --- flake.nix | 113 ++++++++++++------------ generator.nix | 74 ++++++++-------- modules/nixos/system/xdg/default.nix | 123 ++++++++++++++------------- modules/server/default.nix | 2 +- modules/shared/syscfg/default.nix | 8 ++ systems/asguard/cfg.nix | 3 + 6 files changed, 172 insertions(+), 151 deletions(-) create mode 100644 systems/asguard/cfg.nix diff --git a/flake.nix b/flake.nix index ea6c64a..2b0e444 100755 --- a/flake.nix +++ b/flake.nix @@ -30,62 +30,67 @@ }; outputs = inputs: - - let gen = import ./generator.nix { inherit inputs; }; + let + gen = import ./generator.nix { inherit inputs; }; + sys = builtins.attrNames + # (builtins.filterSource (path: type: type == "directory") + (builtins.readDir ./systems); # ); + gensys = builtins.listToAttrs + (builtins.map (x: gen.generate { syspath = x; }) sys); in { devShells = import ./shells { inherit inputs; }; - - nixosConfigurations = { - valinor = gen.generate { - type = "nixos"; - system = "x86_64-linux"; - host = "valinor"; - }; - iriy = gen.generate { - type = "nixos"; - system = "x86_64-linux"; - host = "iriy"; - }; - efir = gen.generate { - type = "nixos"; - system = "x86_64-linux"; - host = "efir"; - }; - avalon = gen.generate { - type = "nixos"; - system = "x86_64-linux"; - host = "avalon"; - }; - ci = gen.generate { - type = "nixos"; - system = "x86_64-linux"; - host = "ci"; - }; - sandbox = gen.generate { - type = "nixos"; - system = "x86_64-linux"; - host = "sandbox"; - }; - }; - darwinConfigurations = { - asgard = gen.generate { - type = "macos"; - system = "x86_64-darwin"; - host = "asgard"; - }; - }; - homeConfigurations = { - yomi = gen.generate { - type = "home"; - system = "arm-64"; - host = "example"; - }; - example = gen.generate { - type = "home"; - system = "-"; # supports any - host = "example"; - }; - }; + inherit gensys; + # nixosConfigurations = { + # valinor = gen.generate { + # type = "nixos"; + # system = ""; + # host = "valinor"; + # }; + # iriy = gen.generate { + # type = "nixos"; + # system = "x86_64-linux"; + # host = "iriy"; + # }; + # efir = gen.generate { + # type = "nixos"; + # system = "x86_64-linux"; + # host = "efir"; + # }; + # avalon = gen.generate { + # type = "nixos"; + # system = "x86_64-linux"; + # host = "avalon"; + # }; + # ci = gen.generate { + # type = "nixos"; + # system = "x86_64-linux"; + # host = "ci"; + # }; + # sandbox = gen.generate { + # type = "nixos"; + # system = "x86_64-linux"; + # host = "sandbox"; + # }; + # }; + # darwinConfigurations = { + # asgard = gen.generate { + # type = "macos"; + # system = "x86_64-darwin"; + # host = "asgard"; + # }; + # }; + # homeConfigurations = { + # yomi = gen.generate { + # type = "home"; + # system = "arm-64"; + # host = "example"; + # }; + # example = gen.generate { + # type = "home"; + # system = "-"; # supports any + # host = "example"; + # }; + # }; }; # ===== Unsupported/NotImplemented ====== diff --git a/generator.nix b/generator.nix index ba38943..4ad6c57 100755 --- a/generator.nix +++ b/generator.nix @@ -1,43 +1,47 @@ { inputs, ... }: { - generate = { type, system, host }: + generate = { syspath }: let + syscfg = import ./systems/${syspath}/cfg.nix; nameValuePair = name: value: { inherit name value; }; - syscfg = import ./systems/${host}/cfg.nix; in ({ - "nixos" = inputs.nixpkgs.lib.nixosSystem { - system = system; - modules = [ - ./modules/shared/syscfg - ./modules/shared/sops - ./modules/nixos - syscfg - ./systems/${host} - inputs.sops-nix.nixosModules.sops - inputs.home-manager.nixosModules.home-manager - { - home-manager.useGlobalPkgs = true; - home-manager.useUserPackages = true; - home-manager.extraSpecialArgs = { inherit inputs; }; - home-manager.users = builtins.listToAttrs (map (userConfig: - nameValuePair userConfig.username { - imports = [ - ./modules/shared/syscfg - ./modules/shared/colors - ./modules/home - syscfg - { usercfg = userConfig; } - inputs.nix-colors.homeManagerModule - inputs.hyprland.homeManagerModules.default - ]; - }) syscfg.syscfg.users); - } - ]; + "nixos" = { + nisoxConfigurations."${syscfg.hostname}" = + inputs.nixpkgs.lib.nixosSystem { + system = syscfg.system; + modules = [ + ./modules/shared/syscfg + ./modules/shared/sops + ./modules/nixos + syscfg + syspath + inputs.sops-nix.nixosModules.sops + inputs.home-manager.nixosModules.home-manager + { + home-manager.useGlobalPkgs = true; + home-manager.useUserPackages = true; + home-manager.extraSpecialArgs = { inherit inputs; }; + home-manager.users = builtins.listToAttrs (map (userConfig: + nameValuePair userConfig.username { + imports = [ + ./modules/shared/syscfg + ./modules/shared/colors + ./modules/home + syscfg + { usercfg = userConfig; } + inputs.nix-colors.homeManagerModule + inputs.hyprland.homeManagerModules.default + ]; + }) syscfg.syscfg.users); + } + ]; + }; }; + "macos" = inputs.darwin.lib.darwinSystem { - system = system; + system = syscfg.system; modules = [ inputs.sops-nix.nixosModules.sops - ./systems/${host} + syspath inputs.home-manager.darwinModules.home-manager { home-manager.useGlobalPkgs = true; @@ -47,15 +51,15 @@ imports = [ inputs.nix-colors.homeManagerModule inputs.hyprland.homeManagerModules - ./systems/${host}/home.nix + ./systems/${syspath}/home.nix ]; }; } ]; }; "home" = inputs.home-manager.lib.homeManagerConfiguration { - modules = [ ./modules/home ./systems/${host}/home.nix ]; + modules = [ ./modules/home ./systems/${syscfg.hostname}/home.nix ]; }; _ = throw "Unsupported system"; - }.${type}); + }.${syscfg.type}); } diff --git a/modules/nixos/system/xdg/default.nix b/modules/nixos/system/xdg/default.nix index c7734eb..595c201 100644 --- a/modules/nixos/system/xdg/default.nix +++ b/modules/nixos/system/xdg/default.nix @@ -1,67 +1,68 @@ { config, lib, pkgs, ... }: { - config = lib.mkMerge[ + config = lib.mkMerge [ (lib.mkIf (config.syscfg.make.gui) { - xdg.portal = { - enable = true; - # wlr.enable = true; - extraPortals = with pkgs; [ - xdg-desktop-portal-hyprland - xdg-desktop-portal-gtk - ]; - config.common.default = [ "hyprland" "gtk" ]; - }; + xdg.portal = { + enable = true; + # wlr.enable = true; + extraPortals = with pkgs; [ + xdg-desktop-portal-hyprland + xdg-desktop-portal-gtk + ]; + config.common.default = [ "hyprland" "gtk" ]; + }; - environment.sessionVariables = rec { - GBM_BACKEND = "amd-drm"; - __GL_GSYNC_ALLOWED = "0"; - __GL_VRR_ALLOWED = "1"; - WLR_DRM_NO_ATOMIC = "1"; - __GLX_VENDOR_LIBRARY_NAME = "amd"; - _JAVA_AWT_WM_NONREPARENTING = "1"; - QT_QPA_PLATFORM = "wayland"; - QT_WAYLAND_DISABLE_WINDOWDECORATION = "1"; - GDK_BACKEND = "wayland"; - WLR_NO_HARDWARE_CURSORS = "1"; - MOZ_ENABLE_WAYLAND = "1"; - WLR_BACKEND = "vulkan"; - WLR_RENDERER = "vulkan"; - XCURSOR_SIZE = "24"; - NIXOS_OZONE_WL = "1"; - }; - }) - ({ + environment.sessionVariables = rec { + GBM_BACKEND = "amd-drm"; + __GL_GSYNC_ALLOWED = "0"; + __GL_VRR_ALLOWED = "1"; + WLR_DRM_NO_ATOMIC = "1"; + __GLX_VENDOR_LIBRARY_NAME = "amd"; + _JAVA_AWT_WM_NONREPARENTING = "1"; + QT_QPA_PLATFORM = "wayland"; + QT_WAYLAND_DISABLE_WINDOWDECORATION = "1"; + GDK_BACKEND = "wayland"; + WLR_NO_HARDWARE_CURSORS = "1"; + MOZ_ENABLE_WAYLAND = "1"; + WLR_BACKEND = "vulkan"; + WLR_RENDERER = "vulkan"; + XCURSOR_SIZE = "24"; + NIXOS_OZONE_WL = "1"; + }; + }) + ({ - environment.sessionVariables = rec { - PATH = [ "$HOME/.local/bin/:$PATH" ]; - XDG_CACHE_HOME = "$HOME/.cache"; - XDG_CONFIG_HOME = "$HOME/.config"; - XDG_DATA_HOME = "$HOME/.local/share"; - XDG_STATE_HOME = "$HOME/.local/state"; - XDG_BIN_HOME = "$HOME/.local/bin"; - XDG_DESKTOP_DIR = "$HOME/desktop"; - XDG_DOCUMENTS_DIR = "$HOME/files"; - XDG_DOWNLOAD_DIR = "$HOME/download"; - XDG_MUSIC_DIR = "$HOME/media/music"; - XDG_PICTURES_DIR = "$HOME/media/photo"; - XDG_PUBLICSHARE_DIR = "$HOME/pub"; - XDG_TEMPLATES_DIR = "$HOME/media/templates"; - XDG_VIDEOS_DIR = "$HOME/media/video"; - }; + environment.sessionVariables = rec { + PATH = [ "$HOME/.local/bin/:$PATH" ]; + XDG_CACHE_HOME = "$HOME/.cache"; + XDG_CONFIG_HOME = "$HOME/.config"; + XDG_DATA_HOME = "$HOME/.local/share"; + XDG_STATE_HOME = "$HOME/.local/state"; + XDG_BIN_HOME = "$HOME/.local/bin"; + XDG_DESKTOP_DIR = "$HOME/desktop"; + XDG_DOCUMENTS_DIR = "$HOME/files"; + XDG_DOWNLOAD_DIR = "$HOME/download"; + XDG_MUSIC_DIR = "$HOME/media/music"; + XDG_PICTURES_DIR = "$HOME/media/photo"; + XDG_PUBLICSHARE_DIR = "$HOME/pub"; + XDG_TEMPLATES_DIR = "$HOME/media/templates"; + XDG_VIDEOS_DIR = "$HOME/media/video"; + }; - environment.etc."xdg/user-dirs.defaults".text = '' - XDG_CACHE_HOME="$HOME/.cache" - XDG_CONFIG_HOME="$HOME/.config" - XDG_DATA_HOME="$HOME/.local/share" - XDG_STATE_HOME="$HOME/.local/state" - XDG_BIN_HOME="$HOME/.local/bin" - XDG_DESKTOP_DIR="$HOME/desktop" - XDG_DOCUMENTS_DIR="$HOME/files" - XDG_DOWNLOAD_DIR="$HOME/download" - XDG_MUSIC_DIR="$HOME/media/music" - XDG_PICTURES_DIR="$HOME/media/photo" - XDG_PUBLICSHARE_DIR="$HOME/pub" - XDG_TEMPLATES_DIR="$HOME/media/templates" - XDG_VIDEOS_DIR="$HOME/media/video" - ''; - })]; + environment.etc."xdg/user-dirs.defaults".text = '' + XDG_CACHE_HOME="$HOME/.cache" + XDG_CONFIG_HOME="$HOME/.config" + XDG_DATA_HOME="$HOME/.local/share" + XDG_STATE_HOME="$HOME/.local/state" + XDG_BIN_HOME="$HOME/.local/bin" + XDG_DESKTOP_DIR="$HOME/desktop" + XDG_DOCUMENTS_DIR="$HOME/files" + XDG_DOWNLOAD_DIR="$HOME/download" + XDG_MUSIC_DIR="$HOME/media/music" + XDG_PICTURES_DIR="$HOME/media/photo" + XDG_PUBLICSHARE_DIR="$HOME/pub" + XDG_TEMPLATES_DIR="$HOME/media/templates" + XDG_VIDEOS_DIR="$HOME/media/video" + ''; + }) + ]; } diff --git a/modules/server/default.nix b/modules/server/default.nix index 32b6898..31f838d 100644 --- a/modules/server/default.nix +++ b/modules/server/default.nix @@ -1,4 +1,4 @@ { ... }: { -virtualisation.arion.projects. + # virtualisation.arion.projects. } diff --git a/modules/shared/syscfg/default.nix b/modules/shared/syscfg/default.nix index b2a3e61..f0eefed 100644 --- a/modules/shared/syscfg/default.nix +++ b/modules/shared/syscfg/default.nix @@ -98,6 +98,14 @@ in with lib; { options.usercfg = userOpt; options.syscfg = { hostname = mkOption { type = types.str; }; + type = mkOption { + type = types.enum [ "nixos" "macos" "home" ]; + default = "nixos"; + }; + system = mkOption { + type = types.enum [ "x86_64-linux" "x86_64-darwin" "-" ]; + default = "x86_64-linux"; + }; defaultUser = mkOption { type = types.str; }; make = makeOpt; net = netOpt; diff --git a/systems/asguard/cfg.nix b/systems/asguard/cfg.nix new file mode 100644 index 0000000..0db3279 --- /dev/null +++ b/systems/asguard/cfg.nix @@ -0,0 +1,3 @@ +{ + +}