diff options
author | Freya Murphy <freya@freyacat.org> | 2025-06-23 22:51:53 -0400 |
---|---|---|
committer | Freya Murphy <freya@freyacat.org> | 2025-06-23 22:51:53 -0400 |
commit | 4107dbd75fc5acc289bb297892269a34fbf5d79d (patch) | |
tree | 5b1a3a4c5acb83654f3cc27421b5220a400b24d9 /modules/options.nix | |
parent | fix fonts config (diff) | |
download | dotfiles-nix-4107dbd75fc5acc289bb297892269a34fbf5d79d.tar.gz dotfiles-nix-4107dbd75fc5acc289bb297892269a34fbf5d79d.tar.bz2 dotfiles-nix-4107dbd75fc5acc289bb297892269a34fbf5d79d.zip |
move global cfg options into modules (remove /config)
Diffstat (limited to 'modules/options.nix')
-rw-r--r-- | modules/options.nix | 362 |
1 files changed, 362 insertions, 0 deletions
diff --git a/modules/options.nix b/modules/options.nix new file mode 100644 index 0000000..53b59cb --- /dev/null +++ b/modules/options.nix @@ -0,0 +1,362 @@ +{ + 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; + }; + + bitdepth = mkOption { + type = types.int; + description = "Monitor color bitdepth"; + default = 8; + }; + }; + }; + + # theme color options + + colorOpts = self: { + options = { + name = mkOption { + type = types.str; + description = "Name of the theme"; + }; + + author = mkOption { + type = types.str; + description = "Author of the theme"; + }; + + fg = mkOption { + type = types.str; + description = "Text color"; + }; + + bg = mkOption { + type = types.str; + description = "Background color"; + }; + + surface = { + fg = mkOption { + type = types.str; + description = "Surface text color"; + }; + bg = mkOption { + type = types.str; + description = "Surface background color"; + }; + }; + + hover = { + fg = mkOption { + type = types.str; + description = "Hover text color"; + }; + bg = mkOption { + type = types.str; + description = "Hover background color"; + }; + }; + + primary = mkOption { + type = types.str; + description = "Primary accent color"; + }; + + success = mkOption { + type = types.str; + description = "Success color"; + }; + + warning = mkOption { + type = types.str; + description = "Warning color"; + }; + + error = mkOption { + type = types.str; + description = "Error color"; + }; + + normal = { + black = mkOption { + type = types.str; + description = "Terminal normal color"; + }; + + blue = mkOption { + type = types.str; + description = "Terminal normal color"; + }; + + cyan = mkOption { + type = types.str; + description = "Terminal normal color"; + }; + + green = mkOption { + type = types.str; + description = "Terminal normal color"; + }; + + magenta = mkOption { + type = types.str; + description = "Terminal normal color"; + }; + + red = mkOption { + type = types.str; + description = "Terminal normal color"; + }; + + white = mkOption { + type = types.str; + description = "Terminal normal color"; + }; + + yellow = mkOption { + type = types.str; + description = "Terminal normal color"; + }; + }; + + bright = { + black = mkOption { + type = types.str; + description = "Terminal bright color"; + }; + + blue = mkOption { + type = types.str; + description = "Terminal bright color"; + }; + + cyan = mkOption { + type = types.str; + description = "Terminal bright color"; + }; + + green = mkOption { + type = types.str; + description = "Terminal bright color"; + }; + + magenta = mkOption { + type = types.str; + description = "Terminal bright color"; + }; + + red = mkOption { + type = types.str; + description = "Terminal bright color"; + }; + + white = mkOption { + type = types.str; + description = "Terminal bright color"; + }; + + yellow = mkOption { + type = types.str; + description = "Terminal bright color"; + }; + }; + }; + }; + + stateVersion = "25.05"; +in { + options = { + # + # System information + # + hostName = mkOption { + type = types.str; + description = "Hostname of the system."; + }; + + # + # 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.path; + description = "Home directory path of the user"; + default = builtins.toPath "/home/${config.user}"; + }; + dotfilesPath = mkOption { + type = types.path; + description = "Dotfiles path inside the users home dir"; + default = builtins.toPath "${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 colorOpts); + description = "color scheme"; + }; + + opacity = mkOption { + type = types.float; + description = "Window opacity."; + }; + + # theme fonts + font = { + size = mkOption { + type = types.int; + description = "Theme primary font size."; + }; + + regular = mkOption { + type = types.str; + description = "Regular system font."; + }; + + monospace = mkOption { + type = types.str; + description = "Monospace system font."; + }; + + header = mkOption { + type = types.str; + description = "Header system font."; + }; + + icon = mkOption { + type = types.str; + description = "Icon system font."; + }; + }; + + borderWidth = mkOption { + type = types.int; + description = "Theme border width"; + }; + + outerRadius = mkOption { + type = types.int; + description = "Theme outer border radius."; + }; + + innerRadius = mkOption { + type = types.int; + description = "Theme inner border radius."; + }; + + outerGap = mkOption { + type = types.int; + description = "Theme outer gap/spacing."; + }; + + innerGap = mkOption { + type = types.int; + description = "Theme inner gap/spacing."; + }; + + blur = mkEnableOption { + description = "If to enable blur in some programs."; + }; + + wallpaper = mkOption { + type = types.str; + description = "Path to wallpaper image"; + }; + + lockscreen = mkOption { + type = types.str; + description = "Path to lockscreen image"; + }; + + avatar = mkOption { + type = types.str; + description = "Path to avatar image"; + }; + }; + + # + # 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 = stateVersion; + home-manager.users.root.home.stateVersion = stateVersion; + system.stateVersion = stateVersion; + }; +} |