summaryrefslogtreecommitdiff
path: root/modules/options.nix
diff options
context:
space:
mode:
authorFreya Murphy <freya@freyacat.org>2025-06-23 22:51:53 -0400
committerFreya Murphy <freya@freyacat.org>2025-06-23 22:51:53 -0400
commit4107dbd75fc5acc289bb297892269a34fbf5d79d (patch)
tree5b1a3a4c5acb83654f3cc27421b5220a400b24d9 /modules/options.nix
parentfix fonts config (diff)
downloaddotfiles-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.nix362
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;
+ };
+}