summaryrefslogtreecommitdiff
path: root/nix/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nix/default.nix')
-rw-r--r--nix/default.nix320
1 files changed, 320 insertions, 0 deletions
diff --git a/nix/default.nix b/nix/default.nix
new file mode 100644
index 0000000..d9c06e0
--- /dev/null
+++ b/nix/default.nix
@@ -0,0 +1,320 @@
+{ 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";
+ };
+
+}