diff options
Diffstat (limited to 'nix/default.nix')
-rw-r--r-- | nix/default.nix | 320 |
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"; + }; + +} |