dotfiles-nix/modules/default.nix

176 lines
4 KiB
Nix
Raw Normal View History

2025-01-21 02:43:35 +00:00
{ config, lib, pkgs, ... }:
{
imports = [
./programs
./home.nix
./system.nix
];
options = {
# Primary user of the system
user = lib.mkOption {
type = lib.types.str;
description = "Primary user of the system";
};
fullName = lib.mkOption {
type = lib.types.str;
description = "Human readable name of the user";
};
homePath = lib.mkOption {
type = lib.types.str;
description = "Home directory path of the user";
default = "/home/${config.user}";
};
email = lib.mkOption {
type = lib.types.str;
description = "Primary email of the user";
};
# Toggable components
desktop = {
enable = lib.mkEnableOption {
description = "Enable the gui.";
default = false;
};
};
system = {
enable = lib.mkEnableOption {
description = "Enable system services.";
default = false;
};
};
# Monitor
monitor = {
name = lib.mkOption {
type = lib.types.str;
description = "Name of the primary monitor.";
default = "";
};
scale = lib.mkOption {
type = lib.types.float;
description = "Scale of the primary monitor.";
default = 1.0;
};
};
# Theme of the system
theme = {
colors = lib.mkOption {
type = lib.types.attrs;
description = "base16 color scheme";
default = (import ./themes).catppuccin.mocha;
};
accentColor = lib.mkOption {
type = lib.types.str;
description = "Theme accent color.";
default = config.theme.colors.base0D;
};
opacity = lib.mkOption {
type = lib.types.float;
description = "Window opacity.";
default = 1.0;
};
font = lib.mkOption {
type = lib.types.str;
description = "Theme primary font.";
default = "JetBrains Mono";
};
fontSize = lib.mkOption {
type = lib.types.int;
description = "Theme primary font size.";
default = 14;
};
headerFont = lib.mkOption {
type = lib.types.str;
description = "Theme header font.";
default = "JetBrains Mono ExtraBold";
};
monospaceFont = lib.mkOption {
type = lib.types.str;
description = "Theme monospace font.";
default = "monospace";
};
iconFont = lib.mkOption {
type = lib.types.str;
description = "Theme icon font.";
default = "Font Awesome 6 Pro";
};
borderWidth = lib.mkOption {
type = lib.types.int;
description = "Theme border width";
default = 3;
};
outerRadius = lib.mkOption {
type = lib.types.int;
description = "Theme outer border radius.";
default = 5;
};
innerRadius = lib.mkOption {
type = lib.types.int;
description = "Theme inner border radius.";
default = 2;
};
outerGap = lib.mkOption {
type = lib.types.int;
description = "Theme outer gap/spacing.";
default = 10;
};
innerGap = lib.mkOption {
type = lib.types.int;
description = "Theme inner gap/spacing.";
default = 3;
};
};
wallpaper = lib.mkOption {
type = lib.types.str;
description = "Path to wallpaper image";
default = "";
};
avatar = lib.mkOption {
type = lib.types.str;
description = "Path to avatar image";
default = "";
};
};
config = {
# use system packages in home manager
home-manager.useGlobalPkgs = true;
# install user packages to /etc/profiles and not home directory
home-manager.useUserPackages = true;
# allow flakes
nix.settings.experimental-features = [ "nix-command" "flakes" ];
# allow unfree packages
nixpkgs.config.allowUnfree = true;
# set state version
home-manager.users.${config.user}.home.stateVersion = "25.05";
home-manager.users.root.home.stateVersion = "25.05";
system.stateVersion = "25.05";
};
}