170 lines
3.9 KiB
Nix
170 lines
3.9 KiB
Nix
{
|
|
inputs,
|
|
config,
|
|
pkgs,
|
|
helper,
|
|
lib,
|
|
...
|
|
}:
|
|
let
|
|
inherit (pkgs.stdenv.hostPlatform) system;
|
|
inherit (lib)
|
|
mkOption
|
|
mkEnableOption
|
|
types
|
|
mkIf
|
|
optionals
|
|
;
|
|
|
|
inherit (helper) capitalize;
|
|
|
|
stateVersion = "25.05";
|
|
|
|
cfg = config.systemConf;
|
|
monitorType =
|
|
with types;
|
|
submodule {
|
|
options = {
|
|
desc = mkOption {
|
|
type = str;
|
|
description = "Hyprland monitor description";
|
|
example = "ASUSTek COMPUTER INC ASUS VG32VQ1B 0x00002271";
|
|
};
|
|
output = mkOption {
|
|
type = str;
|
|
description = "Hyprland monitor output";
|
|
example = "DP-6";
|
|
};
|
|
props = mkOption {
|
|
type = str;
|
|
description = "Hyprland monitor properties";
|
|
default = "prefered, 0x0, 1";
|
|
example = "2560x1440@180, -1440x-600, 1, transform, 1";
|
|
};
|
|
};
|
|
};
|
|
|
|
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;
|
|
};
|
|
|
|
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";
|
|
};
|
|
};
|
|
|
|
hyprland = {
|
|
enable = (mkEnableOption "Enable hyprland") // {
|
|
default = false;
|
|
};
|
|
monitors = mkOption {
|
|
type = with types; listOf monitorType;
|
|
default = [ ];
|
|
example = [
|
|
{
|
|
desc = "ASUSTek COMPUTER INC ASUS VG32VQ1B 0x00002271";
|
|
output = "DP-6";
|
|
props = "2560x1440@165, 0x0, 1";
|
|
}
|
|
];
|
|
description = "Monitors used for hyprland and waybar";
|
|
};
|
|
};
|
|
|
|
enableHomeManager = (mkEnableOption "Home manager") // {
|
|
default = true;
|
|
};
|
|
|
|
nvidia = {
|
|
enable = (mkEnableOption "Enable nvidia configuration") // {
|
|
default = false;
|
|
};
|
|
};
|
|
};
|
|
|
|
config = {
|
|
# ==== System ==== #
|
|
networking = {
|
|
inherit (cfg) domain;
|
|
hostName = cfg.hostname;
|
|
};
|
|
environment.systemPackages = [
|
|
inputs.attic.packages.${system}.attic
|
|
];
|
|
system.stateVersion = stateVersion;
|
|
|
|
# ==== Home Manager ==== #
|
|
home-manager = mkIf cfg.enableHomeManager {
|
|
backupFileExtension = "backup-hm";
|
|
useUserPackages = true;
|
|
useGlobalPkgs = true;
|
|
extraSpecialArgs = {
|
|
inherit helper inputs system;
|
|
inherit (cfg) username;
|
|
};
|
|
users."${cfg.username}" = {
|
|
imports = [
|
|
inputs.hyprland.homeManagerModules.default
|
|
inputs.caelestia-shell.homeManagerModules.default
|
|
inputs.sops-nix.homeManagerModules.default
|
|
inputs.zen-browser.homeManagerModules.${system}.default
|
|
inputs.nvf.homeManagerModules.default
|
|
{
|
|
home = {
|
|
homeDirectory = "/home/${cfg.username}";
|
|
stateVersion = stateVersion;
|
|
};
|
|
programs.home-manager.enable = true;
|
|
|
|
home.file.".face" = mkIf (cfg.face != null) {
|
|
source = cfg.face;
|
|
};
|
|
}
|
|
]
|
|
++ (optionals cfg.hyprland.enable [
|
|
../home/user/hyprland.nix
|
|
]);
|
|
};
|
|
};
|
|
};
|
|
}
|