nix-conf/options/systemconf.nix
2026-02-04 18:21:40 +08:00

162 lines
3.6 KiB
Nix
Executable file

{
self,
inputs,
config,
pkgs,
helper,
lib,
...
}:
let
inherit (pkgs.stdenv.hostPlatform) system;
inherit (lib)
optional
mkOption
mkEnableOption
mkMerge
types
mkIf
;
inherit (helper) capitalize;
stateVersion = "25.11";
cfg = config.systemConf;
defaultSddmTheme = (
pkgs.sddm-astronaut.override {
embeddedTheme = "purple_leaves";
themeConfig = {
ScreenWidth = "1920";
ScreenHeight = "1080";
Font = "SF Pro Display Bold";
HeaderText = "Welcome, ${capitalize cfg.username}";
};
}
);
in
{
options.systemConf = {
hostname = mkOption {
type = types.str;
description = "Hostname for system";
};
face = mkOption {
type = with types; nullOr path;
description = "User avatar";
default = null;
apply =
img:
(
if img != null then
pkgs.runCommand "user-face"
{
buildInputs = with pkgs; [ imagemagick ];
}
''
size=$(identify -format "%[fx:min(w,h)]" ${img})
magick ${img} -gravity center -crop "''\${size}x''\${size}+0+0" -resize 512x512 $out
''
else
null
);
};
domain = mkOption {
type = types.str;
default = "local";
description = "Domain for system";
};
username = mkOption {
type = types.str;
description = "Main username";
};
sddm = {
theme = mkOption {
type = types.str;
description = "sddm theme name";
default = "sddm-astronaut-theme";
};
package = mkOption {
type = types.package;
default = defaultSddmTheme;
description = "sddm theme package";
};
};
windowManager = mkOption {
type =
with types;
nullOr (enum [
"hyprland"
"niri"
"mango"
]);
default = null;
};
enableHomeManager = (mkEnableOption "Home manager") // {
default = true;
};
nvidia = {
enable = (mkEnableOption "Enable nvidia configuration") // {
default = false;
};
};
};
config = {
# ==== System ==== #
networking = {
inherit (cfg) domain;
hostName = cfg.hostname;
};
system.stateVersion = stateVersion;
programs.hyprland.enable = cfg.windowManager == "hyprland";
programs.niri.enable = cfg.windowManager == "niri";
programs.mango.enable = cfg.windowManager == "mango";
# ==== Home Manager ==== #
home-manager = mkIf cfg.enableHomeManager {
backupFileExtension = "backup-hm";
useUserPackages = true;
useGlobalPkgs = true;
extraSpecialArgs = {
inherit
helper
inputs
system
self
;
inherit (cfg) username hostname;
};
sharedModules = [
inputs.mango.hmModules.mango
inputs.hyprland.homeManagerModules.default
inputs.caelestia-shell.homeManagerModules.default
inputs.sops-nix.homeManagerModules.default
inputs.zen-browser.homeModules.twilight
inputs.nvf.homeManagerModules.default
inputs.noctalia.homeModules.default
inputs.niri-nfsm.homeModules.default
];
users.${cfg.username} = {
home = {
homeDirectory = "/home/${cfg.username}";
stateVersion = stateVersion;
};
programs.home-manager.enable = true;
home.file.".face" = mkIf (cfg.face != null) {
source = cfg.face;
};
};
};
};
}