From 63c3d1af271db6438c43e138c1d7860fc9f1098a Mon Sep 17 00:00:00 2001 From: Julian Mutter Date: Tue, 22 Apr 2025 21:24:36 +0200 Subject: [PATCH] Add real home-manager and nixos modules --- modules/home-manager/default.nix | 8 ++++ modules/home-manager/fonts.nix | 43 ++++++++++++++++++++++ modules/home-manager/monitors.nix | 61 +++++++++++++++++++++++++++++++ modules/nixos/default.nix | 3 ++ 4 files changed, 115 insertions(+) create mode 100644 modules/home-manager/default.nix create mode 100644 modules/home-manager/fonts.nix create mode 100644 modules/home-manager/monitors.nix create mode 100644 modules/nixos/default.nix diff --git a/modules/home-manager/default.nix b/modules/home-manager/default.nix new file mode 100644 index 0000000..6924876 --- /dev/null +++ b/modules/home-manager/default.nix @@ -0,0 +1,8 @@ +{ + fonts = import ./fonts.nix; + monitors = import ./monitors.nix; + # pass-secret-service = import ./pass-secret-service.nix; + # wallpaper = import ./wallpaper.nix; + # xpo = import ./xpo.nix; + # colors = import ./colors.nix; +} diff --git a/modules/home-manager/fonts.nix b/modules/home-manager/fonts.nix new file mode 100644 index 0000000..3f2ee34 --- /dev/null +++ b/modules/home-manager/fonts.nix @@ -0,0 +1,43 @@ +{ + lib, + config, + ... +}: +let + mkFontOption = kind: { + name = lib.mkOption { + type = lib.types.str; + default = null; + description = "Family name for ${kind} font profile"; + example = "Fira Code"; + }; + package = lib.mkOption { + type = lib.types.package; + default = null; + description = "Package for ${kind} font profile"; + example = "pkgs.fira-code"; + }; + size = lib.mkOption { + type = lib.types.int; + default = 12; + description = "Size in pixels for ${kind} font profile"; + example = "14"; + }; + }; + cfg = config.fontProfiles; +in +{ + options.fontProfiles = { + enable = lib.mkEnableOption "Whether to enable font profiles"; + monospace = mkFontOption "monospace"; + regular = mkFontOption "regular"; + }; + + config = lib.mkIf cfg.enable { + fonts.fontconfig.enable = true; + home.packages = [ + cfg.monospace.package + cfg.regular.package + ]; + }; +} diff --git a/modules/home-manager/monitors.nix b/modules/home-manager/monitors.nix new file mode 100644 index 0000000..3b7c9f0 --- /dev/null +++ b/modules/home-manager/monitors.nix @@ -0,0 +1,61 @@ +{ + lib, + config, + ... +}: +let + inherit (lib) mkOption types; +in +{ + options.monitors = mkOption { + type = types.listOf ( + types.submodule { + options = { + name = mkOption { + type = types.str; + example = "DP-1"; + }; + primary = mkOption { + type = types.bool; + default = false; + }; + width = mkOption { + type = types.int; + example = 1920; + }; + height = mkOption { + type = types.int; + example = 1080; + }; + refreshRate = mkOption { + type = types.int; + default = 60; + }; + position = mkOption { + type = types.str; + default = "auto"; + }; + enabled = mkOption { + type = types.bool; + default = true; + }; + workspace = mkOption { + type = types.nullOr types.str; + default = null; + }; + }; + } + ); + default = [ ]; + }; + config = { + assertions = [ + { + assertion = + ((lib.length config.monitors) != 0) + -> ((lib.length (lib.filter (m: m.primary) config.monitors)) == 1); + message = "Exactly one monitor must be set to primary."; + } + ]; + }; +} diff --git a/modules/nixos/default.nix b/modules/nixos/default.nix new file mode 100644 index 0000000..8464af6 --- /dev/null +++ b/modules/nixos/default.nix @@ -0,0 +1,3 @@ +{ + # hydra-auto-upgrade = import ./hydra-auto-upgrade.nix; +}