320 lines
7.2 KiB
Nix
320 lines
7.2 KiB
Nix
{ config, lib, pkgs, ... }:
|
|
|
|
with lib;
|
|
|
|
let
|
|
|
|
# monitor options
|
|
|
|
monitorOpts = self: {
|
|
options = {
|
|
|
|
name = mkOption {
|
|
type = types.str;
|
|
description = "Name of the monitor.";
|
|
};
|
|
|
|
scale = mkOption {
|
|
type = types.float;
|
|
description = "Scaling factor of the monitor.";
|
|
default = 1.0;
|
|
};
|
|
|
|
};
|
|
};
|
|
|
|
# base16 theme color options
|
|
# https://github.com/chriskempson/base16/blob/main/styling.md
|
|
|
|
base16Opts = self: {
|
|
options = {
|
|
|
|
name = mkOption {
|
|
type = types.str;
|
|
description = "Name of the theme";
|
|
};
|
|
|
|
author = mkOption {
|
|
type = types.str;
|
|
description = "Author of the theme";
|
|
};
|
|
|
|
base00 = mkOption {
|
|
type = types.str;
|
|
description = "Default Background.";
|
|
};
|
|
|
|
base01 = mkOption {
|
|
type = types.str;
|
|
description = "Lighter Background (Used for status bars, line number and folding marks).";
|
|
};
|
|
|
|
base02 = mkOption {
|
|
type = types.str;
|
|
description = "Selection Background.";
|
|
};
|
|
|
|
base03 = mkOption {
|
|
type = types.str;
|
|
description = "Comments, Invisibles, Line Highlighting.";
|
|
};
|
|
|
|
base04 = mkOption {
|
|
type = types.str;
|
|
description = "Dark Foreground (Used for status bars).";
|
|
};
|
|
|
|
base05 = mkOption {
|
|
type = types.str;
|
|
description = "Default Foreground, Caret, Delimiters, Operators.";
|
|
};
|
|
|
|
base06 = mkOption {
|
|
type = types.str;
|
|
description = "Light Foreground (Not often used).";
|
|
};
|
|
|
|
base07 = mkOption {
|
|
type = types.str;
|
|
description = "Light Background (Not often used).";
|
|
};
|
|
|
|
base08 = mkOption {
|
|
type = types.str;
|
|
description = "Variables, XML Tags, Markup Link Text, Markup Lists, Diff Deleted.";
|
|
};
|
|
|
|
base09 = mkOption {
|
|
type = types.str;
|
|
description = "Integers, Boolean, Constants, XML Attributes, Markup Link Url.";
|
|
};
|
|
|
|
base0A = mkOption {
|
|
type = types.str;
|
|
description = "Classes, Markup Bold, Search Text Background.";
|
|
};
|
|
|
|
base0B = mkOption {
|
|
type = types.str;
|
|
description = "Strings, Inherited Class, Markup Code, Diff Inserted.";
|
|
};
|
|
|
|
base0C = mkOption {
|
|
type = types.str;
|
|
description = "Support, Regular Expressions, Escape Characters, Markup Quotes.";
|
|
};
|
|
|
|
base0D = mkOption {
|
|
type = types.str;
|
|
description = "Functions, Methods, Attribute IDs, Headings.";
|
|
};
|
|
|
|
base0E = mkOption {
|
|
type = types.str;
|
|
description = "Keywords, Storage, Selector, Markup Italic, Diff Changed.";
|
|
};
|
|
|
|
base0F = mkOption {
|
|
type = types.str;
|
|
description = "Deprecated, Opening/Closing Embedded Language Tags.";
|
|
};
|
|
|
|
accent = mkOption {
|
|
type = types.str;
|
|
description = "Accent color.";
|
|
default = config.theme.colors.base0D;
|
|
};
|
|
|
|
};
|
|
};
|
|
|
|
in
|
|
|
|
{
|
|
|
|
imports = [
|
|
./programs
|
|
./home
|
|
./system
|
|
];
|
|
|
|
options = {
|
|
|
|
#
|
|
# Primary user of the system
|
|
#
|
|
user = mkOption {
|
|
type = types.str;
|
|
description = "Primary user of the system";
|
|
};
|
|
fullName = mkOption {
|
|
type = types.str;
|
|
description = "Human readable name of the user";
|
|
};
|
|
email = mkOption {
|
|
type = types.str;
|
|
description = "Primary email of the user";
|
|
};
|
|
homePath = mkOption {
|
|
type = types.str;
|
|
description = "Home directory path of the user";
|
|
default = "/home/${config.user}";
|
|
};
|
|
dotfilesPath = mkOption {
|
|
type = types.str;
|
|
description = "Dotfiles path inside the users home dir";
|
|
default = "${config.homePath}/.config/nix";
|
|
};
|
|
|
|
#
|
|
# Monitors of the system
|
|
#
|
|
monitors = mkOption {
|
|
default = [];
|
|
description = "Monitors of the system.";
|
|
type = with types; listOf (submodule monitorOpts);
|
|
};
|
|
|
|
#
|
|
# Theme of the system
|
|
#
|
|
theme = {
|
|
colors = mkOption {
|
|
type = with types; (submodule base16Opts);
|
|
description = "Base16 color scheme";
|
|
default = (import ./themes).catppuccin.mocha;
|
|
};
|
|
|
|
opacity = mkOption {
|
|
type = types.float;
|
|
description = "Window opacity.";
|
|
default = 1.0;
|
|
};
|
|
|
|
# theme fonts
|
|
font = {
|
|
size = mkOption {
|
|
type = types.int;
|
|
description = "Theme primary font size.";
|
|
default = 14;
|
|
};
|
|
|
|
regular = mkOption {
|
|
type = types.str;
|
|
description = "Regular system font.";
|
|
default = "JetBrains Mono";
|
|
};
|
|
|
|
monospace = mkOption {
|
|
type = types.str;
|
|
description = "Monospace system font.";
|
|
default = "monospace";
|
|
};
|
|
|
|
header = mkOption {
|
|
type = types.str;
|
|
description = "Header system font.";
|
|
default = "JetBrains Mono ExtraBold";
|
|
};
|
|
|
|
icon = mkOption {
|
|
type = types.str;
|
|
description = "Icon system font.";
|
|
default = "Font Awesome 6 Pro";
|
|
};
|
|
|
|
};
|
|
|
|
borderWidth = mkOption {
|
|
type = types.int;
|
|
description = "Theme border width";
|
|
default = 3;
|
|
};
|
|
|
|
outerRadius = mkOption {
|
|
type = types.int;
|
|
description = "Theme outer border radius.";
|
|
default = 5;
|
|
};
|
|
|
|
innerRadius = mkOption {
|
|
type = types.int;
|
|
description = "Theme inner border radius.";
|
|
default = 2;
|
|
};
|
|
|
|
outerGap = mkOption {
|
|
type = types.int;
|
|
description = "Theme outer gap/spacing.";
|
|
default = 10;
|
|
};
|
|
|
|
innerGap = mkOption {
|
|
type = types.int;
|
|
description = "Theme inner gap/spacing.";
|
|
default = 3;
|
|
};
|
|
|
|
wallpaper = mkOption {
|
|
type = types.str;
|
|
description = "Path to wallpaper image";
|
|
default = "";
|
|
};
|
|
|
|
avatar = mkOption {
|
|
type = types.str;
|
|
description = "Path to avatar image";
|
|
default = "";
|
|
};
|
|
};
|
|
|
|
#
|
|
# Default programs
|
|
#
|
|
default = {
|
|
browser = mkOption {
|
|
type = types.str;
|
|
description = "Default browser launch command.";
|
|
};
|
|
appLauncher = mkOption {
|
|
type = types.str;
|
|
description = "Default application launcher launch command.";
|
|
};
|
|
lockScreen = mkOption {
|
|
type = types.str;
|
|
description = "Default lock screen launch command.";
|
|
};
|
|
terminal = mkOption {
|
|
type = types.str;
|
|
description = "Default terminal launch command.";
|
|
};
|
|
};
|
|
|
|
#
|
|
# Programs to auto start on launch
|
|
#
|
|
autoRun = mkOption {
|
|
type = with types; listOf str;
|
|
description = "List of programs to auto run in a graphical environment.";
|
|
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 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";
|
|
};
|
|
|
|
}
|