From 9c6f17f1136d4d93469e52b15c184809cdbd9034 Mon Sep 17 00:00:00 2001 From: Danilo Reyes Date: Mon, 16 Mar 2026 16:41:10 -0600 Subject: [PATCH] rest of the split migration --- .codex/rules/default.rules | 1 + config/base.nix | 2 +- config/derek-home.nix | 3 + config/derek.nix | 1 - config/home-manager.nix | 5 +- config/stylix-home.nix | 41 ++++++ config/stylix.nix | 26 ---- environments/hyprland-home.nix | 113 ++++++++++++++++ environments/hyprland.nix | 125 ++---------------- modules/dev/cc.nix | 44 ------ modules/dev/cc/common.nix | 22 +++ modules/dev/cc/home.nix | 34 +++++ modules/dev/cc/nixos.nix | 27 ++++ modules/dev/docker.nix | 46 ------- modules/dev/docker/common.nix | 19 +++ modules/dev/docker/home.nix | 35 +++++ modules/dev/docker/nixos.nix | 27 ++++ modules/dev/go.nix | 52 -------- modules/dev/go/common.nix | 25 ++++ modules/dev/go/home.nix | 35 +++++ modules/dev/go/nixos.nix | 27 ++++ modules/dev/haskell.nix | 54 -------- modules/dev/haskell/common.nix | 23 ++++ modules/dev/haskell/home.nix | 39 ++++++ modules/dev/haskell/nixos.nix | 27 ++++ modules/dev/julia/common.nix | 16 +++ modules/dev/julia/home.nix | 34 +++++ modules/dev/{julia.nix => julia/nixos.nix} | 15 +-- modules/dev/mcp/common.nix | 18 +++ modules/dev/mcp/home.nix | 34 +++++ modules/dev/{mcp.nix => mcp/nixos.nix} | 17 +-- modules/dev/ruby.nix | 48 ------- modules/dev/ruby/common.nix | 17 +++ modules/dev/ruby/home.nix | 39 ++++++ modules/dev/ruby/nixos.nix | 27 ++++ modules/dev/rust.nix | 49 ------- modules/dev/rust/common.nix | 22 +++ modules/dev/rust/home.nix | 35 +++++ modules/dev/rust/nixos.nix | 27 ++++ modules/dev/zig/common.nix | 19 +++ modules/dev/zig/home.nix | 34 +++++ modules/dev/{zig.nix => zig/nixos.nix} | 18 +-- modules/shell/config/home.nix | 20 +++ .../shell/{config.nix => config/nixos.nix} | 0 44 files changed, 859 insertions(+), 483 deletions(-) create mode 100644 config/derek-home.nix create mode 100644 config/stylix-home.nix create mode 100644 environments/hyprland-home.nix delete mode 100644 modules/dev/cc.nix create mode 100644 modules/dev/cc/common.nix create mode 100644 modules/dev/cc/home.nix create mode 100644 modules/dev/cc/nixos.nix delete mode 100644 modules/dev/docker.nix create mode 100644 modules/dev/docker/common.nix create mode 100644 modules/dev/docker/home.nix create mode 100644 modules/dev/docker/nixos.nix delete mode 100644 modules/dev/go.nix create mode 100644 modules/dev/go/common.nix create mode 100644 modules/dev/go/home.nix create mode 100644 modules/dev/go/nixos.nix delete mode 100644 modules/dev/haskell.nix create mode 100644 modules/dev/haskell/common.nix create mode 100644 modules/dev/haskell/home.nix create mode 100644 modules/dev/haskell/nixos.nix create mode 100644 modules/dev/julia/common.nix create mode 100644 modules/dev/julia/home.nix rename modules/dev/{julia.nix => julia/nixos.nix} (51%) create mode 100644 modules/dev/mcp/common.nix create mode 100644 modules/dev/mcp/home.nix rename modules/dev/{mcp.nix => mcp/nixos.nix} (51%) delete mode 100644 modules/dev/ruby.nix create mode 100644 modules/dev/ruby/common.nix create mode 100644 modules/dev/ruby/home.nix create mode 100644 modules/dev/ruby/nixos.nix delete mode 100644 modules/dev/rust.nix create mode 100644 modules/dev/rust/common.nix create mode 100644 modules/dev/rust/home.nix create mode 100644 modules/dev/rust/nixos.nix create mode 100644 modules/dev/zig/common.nix create mode 100644 modules/dev/zig/home.nix rename modules/dev/{zig.nix => zig/nixos.nix} (52%) create mode 100644 modules/shell/config/home.nix rename modules/shell/{config.nix => config/nixos.nix} (100%) diff --git a/.codex/rules/default.rules b/.codex/rules/default.rules index 6e4c1b2..a227a09 100644 --- a/.codex/rules/default.rules +++ b/.codex/rules/default.rules @@ -1,2 +1,3 @@ prefix_rule(pattern=["deadnix", "-e"], decision="allow") prefix_rule(pattern=["nix", "eval"], decision="allow") +prefix_rule(pattern=["nix", "develop", "path:.#nix", "--command", "bash", "-lc", "deadnix -e && nix run nixpkgs#nixfmt-tree && statix fix"], decision="allow") diff --git a/config/base.nix b/config/base.nix index 496dff1..c9ac740 100644 --- a/config/base.nix +++ b/config/base.nix @@ -26,11 +26,11 @@ backupFileExtension = "hbckup"; useUserPackages = true; useGlobalPkgs = true; + users.jawz = import ./home-manager.nix; sharedModules = [ ../modules/home-manager.nix ]; extraSpecialArgs = { inherit inputs outputs; }; - users.jawz = import ./home-manager.nix; }; time = { inherit (config.my) timeZone; diff --git a/config/derek-home.nix b/config/derek-home.nix new file mode 100644 index 0000000..813b46e --- /dev/null +++ b/config/derek-home.nix @@ -0,0 +1,3 @@ +_: { + home.stateVersion = "23.05"; +} diff --git a/config/derek.nix b/config/derek.nix index 9cb89b3..5690f5c 100644 --- a/config/derek.nix +++ b/config/derek.nix @@ -86,5 +86,4 @@ in "games" ]; }; - home-manager.users.bearded_dragonn.home.stateVersion = "23.05"; } diff --git a/config/home-manager.nix b/config/home-manager.nix index b8bfec3..d3ab990 100644 --- a/config/home-manager.nix +++ b/config/home-manager.nix @@ -29,7 +29,10 @@ let }; in { - imports = lib.optionals (osConfig != null) [ ./jawz-home.nix ]; + imports = lib.optionals (osConfig != null) [ + ./jawz-home.nix + ./stylix-home.nix + ]; home.stateVersion = "23.05"; programs = { direnv = { diff --git a/config/stylix-home.nix b/config/stylix-home.nix new file mode 100644 index 0000000..7db9492 --- /dev/null +++ b/config/stylix-home.nix @@ -0,0 +1,41 @@ +{ + config, + lib, + pkgs, + inputs, + osConfig, + ... +}: +let + schemesFile = import ./schemes.nix { + inherit pkgs inputs; + }; + scheme = schemesFile.schemes.paul; + cfg = osConfig.my.stylix; + gnomeEnabled = osConfig.services.desktopManager.gnome.enable; +in +{ + gtk = lib.mkIf (!cfg.enable && gnomeEnabled) { + enable = true; + iconTheme = { + name = "Papirus-Light"; + package = pkgs.papirus-icon-theme.override { + color = "yellow"; + }; + }; + }; + stylix = { + inherit (cfg) enable; + autoEnable = cfg.enable; + iconTheme = { + enable = true; + package = scheme.iconPackage; + light = "Papirus-Light"; + dark = "Papirus-Dark"; + }; + targets.librewolf = { + firefoxGnomeTheme.enable = true; + profileNames = [ config.home.username ]; + }; + }; +} diff --git a/config/stylix.nix b/config/stylix.nix index f98ce75..9e6a0c5 100644 --- a/config/stylix.nix +++ b/config/stylix.nix @@ -11,7 +11,6 @@ let }; scheme = schemesFile.schemes.paul; cfg = config.my.stylix; - gnomeEnabled = config.services.desktopManager.gnome.enable; in { options.my.stylix = { @@ -30,30 +29,5 @@ in targets.qt.platform = lib.mkForce "qtct"; } // lib.optionalAttrs (scheme ? base16Scheme) { inherit (scheme) base16Scheme; }; - home-manager.users = inputs.self.lib.mkHomeManagerUsers lib config.my.stylix.users (user: { - gtk = lib.mkIf (!cfg.enable && gnomeEnabled) { - enable = true; - iconTheme = { - name = "Papirus-Light"; - package = pkgs.papirus-icon-theme.override { - color = "yellow"; - }; - }; - }; - stylix = { - inherit (cfg) enable; - autoEnable = cfg.enable; - iconTheme = { - enable = true; - package = scheme.iconPackage; - light = "Papirus-Light"; - dark = "Papirus-Dark"; - }; - targets.librewolf = { - firefoxGnomeTheme.enable = true; - profileNames = [ user ]; - }; - }; - }); }; } diff --git a/environments/hyprland-home.nix b/environments/hyprland-home.nix new file mode 100644 index 0000000..3382422 --- /dev/null +++ b/environments/hyprland-home.nix @@ -0,0 +1,113 @@ +{ + pkgs, + config, + ... +}: +let + mod = "SUPER"; + waybarConfig = import ./waybar-config.nix { inherit pkgs config; }; + waybarStyle = import ./waybar-style.nix { inherit config; }; +in +{ + programs = { + wofi = { + enable = true; + settings = { + allow_images = true; + allow_markup = true; + insensitive = true; + width = "30%"; + }; + }; + waybar = waybarConfig.programs.waybar // { + style = waybarStyle; + }; + }; + wayland.windowManager.hyprland = { + enable = true; + settings = { + general = { + gaps_in = 5; + gaps_out = 10; + border_size = 3; + layout = "dwindle"; + }; + misc = { + disable_hyprland_logo = true; + disable_splash_rendering = true; + force_default_wallpaper = 0; + }; + dwindle = { + pseudotile = true; + preserve_split = true; + force_split = 2; + }; + bind = [ + "${mod}, return, exec, ghostty" + "${mod}, Q, killactive," + "${mod} SHIFT, F, togglefloating," + "${mod}, F, fullscreen," + "${mod}, T, pin," + "${mod}, G, togglegroup," + "${mod}, bracketleft, changegroupactive, b" + "${mod}, bracketright, changegroupactive, f" + "${mod}, S, exec, wofi --show drun icons" + "${mod}, P, pin, active" + "${mod}, left, movefocus, l" + "${mod}, right, movefocus, r" + "${mod}, up, movefocus, u" + "${mod}, down, movefocus, d" + "${mod}, h, movefocus, l" + "${mod}, l, movefocus, r" + "${mod}, k, movefocus, u" + "${mod}, j, movefocus, d" + "${mod} SHIFT, left, movewindow, l" + "${mod} SHIFT, right, movewindow, r" + "${mod} SHIFT, up, movewindow, u" + "${mod} SHIFT, down, movewindow, d" + "${mod} SHIFT, h, movewindow, l" + "${mod} SHIFT, l, movewindow, r" + "${mod} SHIFT, k, movewindow, u" + "${mod} SHIFT, j, movewindow, d" + "${mod}, 1, workspace, 1" + "${mod}, 2, workspace, 2" + "${mod}, 3, workspace, 3" + "${mod}, 4, workspace, 4" + "${mod}, 5, workspace, 5" + "${mod}, 6, workspace, 6" + "${mod}, 7, workspace, 7" + "${mod}, 8, workspace, 8" + "${mod}, 9, workspace, 9" + "${mod}, 0, workspace, 10" + "${mod} SHIFT, 1, movetoworkspace, 1" + "${mod} SHIFT, 2, movetoworkspace, 2" + "${mod} SHIFT, 3, movetoworkspace, 3" + "${mod} SHIFT, 4, movetoworkspace, 4" + "${mod} SHIFT, 5, movetoworkspace, 5" + "${mod} SHIFT, 6, movetoworkspace, 6" + "${mod} SHIFT, 7, movetoworkspace, 7" + "${mod} SHIFT, 8, movetoworkspace, 8" + "${mod} SHIFT, 9, movetoworkspace, 9" + "${mod} SHIFT, 0, movetoworkspace, 10" + "${mod}, F3, exec, grimblast save area ~/Pictures/Screenshots/$(date +'%Y-%m-%d_%H-%M-%S').png" + "${mod} SHIFT, F3, exec, grimblast save screen ~/Pictures/Screenshots/$(date +'%Y-%m-%d_%H-%M-%S').png" + ]; + binde = [ + "${mod} SHIFT, h, moveactive, -20 0" + "${mod} SHIFT, l, moveactive, 20 0" + "${mod} SHIFT, k, moveactive, 0 -20" + "${mod} SHIFT, j, moveactive, 0 20" + "${mod} CTRL, l, resizeactive, 30 0" + "${mod} CTRL, h, resizeactive, -30 0" + "${mod} CTRL, k, resizeactive, 0 -10" + "${mod} CTRL, j, resizeactive, 0 10" + ",XF86AudioRaiseVolume, exec, wpctl set-volume -l 1.4 @DEFAULT_AUDIO_SINK@ 5%+" + ",XF86AudioLowerVolume, exec, wpctl set-volume -l 1.4 @DEFAULT_AUDIO_SINK@ 5%-" + ]; + bindm = [ + "${mod}, mouse:272, movewindow" + "${mod}, mouse:273, resizewindow" + ]; + }; + }; +} diff --git a/environments/hyprland.nix b/environments/hyprland.nix index eb1df6b..e76e7ff 100644 --- a/environments/hyprland.nix +++ b/environments/hyprland.nix @@ -1,13 +1,7 @@ { pkgs, - config, ... }: -let - mod = "SUPER"; - waybarConfig = import ./waybar-config.nix { inherit pkgs config; }; - waybarStyle = import ./waybar-style.nix { inherit config; }; -in { programs.hyprland.enable = true; services.greetd = { @@ -19,119 +13,16 @@ in }; users.users.jawz.packages = builtins.attrValues { inherit (pkgs) - # Wayland utilities wl-clipboard-rs wf-recorder - grimblast # screenshots - mako # notification daemon - libnotify # dependency of mako - swaylock-effects # screen locker - yazi # file manager - imv # images - playerctl # media player control + grimblast + mako + libnotify + swaylock-effects + yazi + imv + playerctl ; }; - home-manager.users.jawz = { - programs = { - wofi = { - enable = true; - settings = { - allow_images = true; - allow_markup = true; - insensitive = true; - width = "30%"; - }; - }; - waybar = waybarConfig.programs.waybar // { - style = waybarStyle; - }; - }; - wayland.windowManager.hyprland = { - enable = true; - settings = { - general = { - gaps_in = 5; - gaps_out = 10; - border_size = 3; - layout = "dwindle"; - }; - misc = { - disable_hyprland_logo = true; - disable_splash_rendering = true; - force_default_wallpaper = 0; - }; - dwindle = { - pseudotile = true; - preserve_split = true; - force_split = 2; - }; - bind = [ - "${mod}, return, exec, ghostty" - "${mod}, Q, killactive," - "${mod} SHIFT, F, togglefloating," - "${mod}, F, fullscreen," - "${mod}, T, pin," - "${mod}, G, togglegroup," - "${mod}, bracketleft, changegroupactive, b" - "${mod}, bracketright, changegroupactive, f" - "${mod}, S, exec, wofi --show drun icons" - "${mod}, P, pin, active" - "${mod}, left, movefocus, l" - "${mod}, right, movefocus, r" - "${mod}, up, movefocus, u" - "${mod}, down, movefocus, d" - "${mod}, h, movefocus, l" - "${mod}, l, movefocus, r" - "${mod}, k, movefocus, u" - "${mod}, j, movefocus, d" - "${mod} SHIFT, left, movewindow, l" - "${mod} SHIFT, right, movewindow, r" - "${mod} SHIFT, up, movewindow, u" - "${mod} SHIFT, down, movewindow, d" - "${mod} SHIFT, h, movewindow, l" - "${mod} SHIFT, l, movewindow, r" - "${mod} SHIFT, k, movewindow, u" - "${mod} SHIFT, j, movewindow, d" - "${mod}, 1, workspace, 1" - "${mod}, 2, workspace, 2" - "${mod}, 3, workspace, 3" - "${mod}, 4, workspace, 4" - "${mod}, 5, workspace, 5" - "${mod}, 6, workspace, 6" - "${mod}, 7, workspace, 7" - "${mod}, 8, workspace, 8" - "${mod}, 9, workspace, 9" - "${mod}, 0, workspace, 10" - "${mod} SHIFT, 1, movetoworkspace, 1" - "${mod} SHIFT, 2, movetoworkspace, 2" - "${mod} SHIFT, 3, movetoworkspace, 3" - "${mod} SHIFT, 4, movetoworkspace, 4" - "${mod} SHIFT, 5, movetoworkspace, 5" - "${mod} SHIFT, 6, movetoworkspace, 6" - "${mod} SHIFT, 7, movetoworkspace, 7" - "${mod} SHIFT, 8, movetoworkspace, 8" - "${mod} SHIFT, 9, movetoworkspace, 9" - "${mod} SHIFT, 0, movetoworkspace, 10" - "${mod}, F3, exec, grimblast save area ~/Pictures/Screenshots/$(date +'%Y-%m-%d_%H-%M-%S').png" - "${mod} SHIFT, F3, exec, grimblast save screen ~/Pictures/Screenshots/$(date +'%Y-%m-%d_%H-%M-%S').png" - ]; - binde = [ - "${mod} SHIFT, h, moveactive, -20 0" - "${mod} SHIFT, l, moveactive, 20 0" - "${mod} SHIFT, k, moveactive, 0 -20" - "${mod} SHIFT, j, moveactive, 0 20" - "${mod} CTRL, l, resizeactive, 30 0" - "${mod} CTRL, h, resizeactive, -30 0" - "${mod} CTRL, k, resizeactive, 0 -10" - "${mod} CTRL, j, resizeactive, 0 10" - ",XF86AudioRaiseVolume, exec, wpctl set-volume -l 1.4 @DEFAULT_AUDIO_SINK@ 5%+" - ",XF86AudioLowerVolume, exec, wpctl set-volume -l 1.4 @DEFAULT_AUDIO_SINK@ 5%-" - ]; - bindm = [ - "${mod}, mouse:272, movewindow" - "${mod}, mouse:273, resizewindow" - ]; - }; - }; - }; + home-manager.users.jawz.imports = [ ./hyprland-home.nix ]; } diff --git a/modules/dev/cc.nix b/modules/dev/cc.nix deleted file mode 100644 index 811437a..0000000 --- a/modules/dev/cc.nix +++ /dev/null @@ -1,44 +0,0 @@ -{ - config, - inputs, - lib, - pkgs, - ... -}: -let - packages = builtins.attrValues { - inherit (pkgs) - clang # C/C++ compiler frontend (part of LLVM) - clang-tools # Extra LLVM tools (e.g. clang-tidy, clang-apply-replacements) - gcc # GNU Compiler Collection (C, C++, etc.) - gdb # GNU Debugger - valgrind # Memory leak detector and performance profiler - ; - }; -in -{ - options = { - my.dev.cc = { - enable = lib.mkEnableOption "Install C/C++ tooling globally"; - users = lib.mkOption { - type = inputs.self.lib.usersOptionType lib; - default = config.my.toggleUsers.dev; - description = "Users to install C/C++ packages for"; - }; - }; - devShells.cc = lib.mkOption { - type = lib.types.package; - default = pkgs.mkShell { - inherit packages; - name = "cc-dev-shell"; - shellHook = '' - echo "🔧 C/C++ dev environment" - ''; - }; - description = "C/C++ development shell"; - }; - }; - config = lib.mkIf config.my.dev.cc.enable { - users.users = inputs.self.lib.mkUserAttrs lib config.my.dev.cc.users { inherit packages; }; - }; -} diff --git a/modules/dev/cc/common.nix b/modules/dev/cc/common.nix new file mode 100644 index 0000000..19fb090 --- /dev/null +++ b/modules/dev/cc/common.nix @@ -0,0 +1,22 @@ +{ pkgs }: +let + packages = builtins.attrValues { + inherit (pkgs) + clang + clang-tools + gcc + gdb + valgrind + ; + }; +in +{ + inherit packages; + devShell = pkgs.mkShell { + inherit packages; + name = "cc-dev-shell"; + shellHook = '' + echo "🔧 C/C++ dev environment" + ''; + }; +} diff --git a/modules/dev/cc/home.nix b/modules/dev/cc/home.nix new file mode 100644 index 0000000..aabef0f --- /dev/null +++ b/modules/dev/cc/home.nix @@ -0,0 +1,34 @@ +{ + config, + inputs, + lib, + osConfig ? null, + pkgs, + ... +}: +let + hm = inputs.self.lib.hmModule { + inherit + config + inputs + osConfig + ; + optionPath = [ + "dev" + "cc" + ]; + }; + cfg = config.my.dev.cc; + feature = import ./common.nix { inherit pkgs; }; +in +{ + options.my.dev.cc.enable = lib.mkEnableOption "Install C/C++ tooling globally"; + config = lib.mkMerge [ + { + my.dev.cc.enable = lib.mkDefault hm.enabledByDefault; + } + (lib.mkIf cfg.enable { + home.packages = feature.packages; + }) + ]; +} diff --git a/modules/dev/cc/nixos.nix b/modules/dev/cc/nixos.nix new file mode 100644 index 0000000..18a6a71 --- /dev/null +++ b/modules/dev/cc/nixos.nix @@ -0,0 +1,27 @@ +{ + config, + inputs, + lib, + pkgs, + ... +}: +let + feature = import ./common.nix { inherit pkgs; }; +in +{ + options = { + my.dev.cc = { + enable = lib.mkEnableOption "Install C/C++ tooling globally"; + users = lib.mkOption { + type = inputs.self.lib.usersOptionType lib; + default = config.my.toggleUsers.dev; + description = "Users to install C/C++ packages for"; + }; + }; + devShells.cc = lib.mkOption { + type = lib.types.package; + default = feature.devShell; + description = "C/C++ development shell"; + }; + }; +} diff --git a/modules/dev/docker.nix b/modules/dev/docker.nix deleted file mode 100644 index 4313f64..0000000 --- a/modules/dev/docker.nix +++ /dev/null @@ -1,46 +0,0 @@ -{ - config, - inputs, - lib, - pkgs, - ... -}: -let - packages = builtins.attrValues { - inherit (pkgs) - dockfmt # Format Dockerfiles - dockerfile-language-server # LSP for Dockerfiles - ; - }; -in -{ - options = { - my.dev.docker = { - enable = lib.mkEnableOption "Install Docker tooling globally"; - users = lib.mkOption { - type = inputs.self.lib.usersOptionType lib; - default = config.my.toggleUsers.dev; - description = "Users to install Docker packages for"; - }; - }; - devShells.docker = lib.mkOption { - type = lib.types.package; - default = pkgs.mkShell { - inherit packages; - name = "docker-dev-shell"; - shellHook = '' - echo "🐳 Docker dev environment" - ''; - }; - description = "Docker and Dockerfile tooling shell"; - }; - }; - config = lib.mkMerge [ - (lib.mkIf config.my.dev.docker.enable { - users.users = inputs.self.lib.mkUserAttrs lib config.my.dev.docker.users { inherit packages; }; - }) - { - environment.variables.DOCKER_CONFIG = "\${XDG_CONFIG_HOME}/docker"; - } - ]; -} diff --git a/modules/dev/docker/common.nix b/modules/dev/docker/common.nix new file mode 100644 index 0000000..a653128 --- /dev/null +++ b/modules/dev/docker/common.nix @@ -0,0 +1,19 @@ +{ pkgs }: +let + packages = builtins.attrValues { + inherit (pkgs) + dockfmt + dockerfile-language-server + ; + }; +in +{ + inherit packages; + devShell = pkgs.mkShell { + inherit packages; + name = "docker-dev-shell"; + shellHook = '' + echo "🐳 Docker dev environment" + ''; + }; +} diff --git a/modules/dev/docker/home.nix b/modules/dev/docker/home.nix new file mode 100644 index 0000000..994c402 --- /dev/null +++ b/modules/dev/docker/home.nix @@ -0,0 +1,35 @@ +{ + config, + inputs, + lib, + osConfig ? null, + pkgs, + ... +}: +let + hm = inputs.self.lib.hmModule { + inherit + config + inputs + osConfig + ; + optionPath = [ + "dev" + "docker" + ]; + }; + cfg = config.my.dev.docker; + feature = import ./common.nix { inherit pkgs; }; +in +{ + options.my.dev.docker.enable = lib.mkEnableOption "Install Docker tooling globally"; + config = lib.mkMerge [ + { + my.dev.docker.enable = lib.mkDefault hm.enabledByDefault; + } + (lib.mkIf cfg.enable { + home.packages = feature.packages; + home.sessionVariables.DOCKER_CONFIG = "${config.xdg.configHome}/docker"; + }) + ]; +} diff --git a/modules/dev/docker/nixos.nix b/modules/dev/docker/nixos.nix new file mode 100644 index 0000000..d928bcd --- /dev/null +++ b/modules/dev/docker/nixos.nix @@ -0,0 +1,27 @@ +{ + config, + inputs, + lib, + pkgs, + ... +}: +let + feature = import ./common.nix { inherit pkgs; }; +in +{ + options = { + my.dev.docker = { + enable = lib.mkEnableOption "Install Docker tooling globally"; + users = lib.mkOption { + type = inputs.self.lib.usersOptionType lib; + default = config.my.toggleUsers.dev; + description = "Users to install Docker packages for"; + }; + }; + devShells.docker = lib.mkOption { + type = lib.types.package; + default = feature.devShell; + description = "Docker and Dockerfile tooling shell"; + }; + }; +} diff --git a/modules/dev/go.nix b/modules/dev/go.nix deleted file mode 100644 index c808ecc..0000000 --- a/modules/dev/go.nix +++ /dev/null @@ -1,52 +0,0 @@ -{ - config, - inputs, - lib, - pkgs, - ... -}: -let - packages = builtins.attrValues { - inherit (pkgs) - go # Go compiler and core toolchain - gocode-gomod # Code completion for Go (modern fork of gocode) - gotools # Contains godoc, gorename, goimports, etc. - gore # Go REPL - gotests # Generate Go tests from function signatures - gomodifytags # Struct tag manipulation - golangci-lint # Linter aggregation - ; - }; - GOPATH = "\${XDG_DATA_HOME}/go"; -in -{ - options = { - my.dev.go = { - enable = lib.mkEnableOption "Install Go tooling globally"; - users = lib.mkOption { - type = inputs.self.lib.usersOptionType lib; - default = config.my.toggleUsers.dev; - description = "Users to install Go packages for"; - }; - }; - devShells.go = lib.mkOption { - type = lib.types.package; - default = pkgs.mkShell { - inherit packages GOPATH; - name = "go-dev-shell"; - shellHook = '' - echo "🐹 Go dev environment" - ''; - }; - description = "Go development shell with Emacs tooling, REPL, formatter, and linter"; - }; - }; - config = lib.mkMerge [ - { - environment.variables = { inherit GOPATH; }; - } - (lib.mkIf config.my.dev.go.enable { - users.users = inputs.self.lib.mkUserAttrs lib config.my.dev.go.users { inherit packages; }; - }) - ]; -} diff --git a/modules/dev/go/common.nix b/modules/dev/go/common.nix new file mode 100644 index 0000000..3b842aa --- /dev/null +++ b/modules/dev/go/common.nix @@ -0,0 +1,25 @@ +{ pkgs }: +let + packages = builtins.attrValues { + inherit (pkgs) + go + gocode-gomod + gotools + gore + gotests + gomodifytags + golangci-lint + ; + }; + GOPATH = "\${XDG_DATA_HOME:-\$HOME/.local/share}/go"; +in +{ + inherit packages GOPATH; + devShell = pkgs.mkShell { + inherit packages GOPATH; + name = "go-dev-shell"; + shellHook = '' + echo "🐹 Go dev environment" + ''; + }; +} diff --git a/modules/dev/go/home.nix b/modules/dev/go/home.nix new file mode 100644 index 0000000..3f37150 --- /dev/null +++ b/modules/dev/go/home.nix @@ -0,0 +1,35 @@ +{ + config, + inputs, + lib, + osConfig ? null, + pkgs, + ... +}: +let + hm = inputs.self.lib.hmModule { + inherit + config + inputs + osConfig + ; + optionPath = [ + "dev" + "go" + ]; + }; + cfg = config.my.dev.go; + feature = import ./common.nix { inherit pkgs; }; +in +{ + options.my.dev.go.enable = lib.mkEnableOption "Install Go tooling globally"; + config = lib.mkMerge [ + { + my.dev.go.enable = lib.mkDefault hm.enabledByDefault; + } + (lib.mkIf cfg.enable { + home.packages = feature.packages; + home.sessionVariables.GOPATH = "${config.xdg.dataHome}/go"; + }) + ]; +} diff --git a/modules/dev/go/nixos.nix b/modules/dev/go/nixos.nix new file mode 100644 index 0000000..b147349 --- /dev/null +++ b/modules/dev/go/nixos.nix @@ -0,0 +1,27 @@ +{ + config, + inputs, + lib, + pkgs, + ... +}: +let + feature = import ./common.nix { inherit pkgs; }; +in +{ + options = { + my.dev.go = { + enable = lib.mkEnableOption "Install Go tooling globally"; + users = lib.mkOption { + type = inputs.self.lib.usersOptionType lib; + default = config.my.toggleUsers.dev; + description = "Users to install Go packages for"; + }; + }; + devShells.go = lib.mkOption { + type = lib.types.package; + default = feature.devShell; + description = "Go development shell with Emacs tooling, REPL, formatter, and linter"; + }; + }; +} diff --git a/modules/dev/haskell.nix b/modules/dev/haskell.nix deleted file mode 100644 index 945c57c..0000000 --- a/modules/dev/haskell.nix +++ /dev/null @@ -1,54 +0,0 @@ -{ - config, - inputs, - lib, - pkgs, - ... -}: -let - packages = builtins.attrValues { - inherit (pkgs) - haskell-language-server # LSP server for Haskell - cabal-install # Standard Haskell build tool - hlint # Linter for Haskell source code - ; - inherit (pkgs.haskellPackages) - hoogle # Haskell API search engine - ; - }; -in -{ - options = { - my.dev.haskell = { - enable = lib.mkEnableOption "Install Haskell tooling globally"; - users = lib.mkOption { - type = inputs.self.lib.usersOptionType lib; - default = config.my.toggleUsers.dev; - description = "Users to install Haskell packages for"; - }; - }; - devShells.haskell = lib.mkOption { - type = lib.types.package; - default = pkgs.mkShell { - inherit packages; - name = "haskell-dev-shell"; - shellHook = '' - echo "λ Haskell dev environment" - ''; - }; - description = "Haskell development shell"; - }; - }; - config = lib.mkMerge [ - (lib.mkIf config.my.dev.haskell.enable { - users.users = inputs.self.lib.mkUserAttrs lib config.my.dev.haskell.users { inherit packages; }; - }) - { - environment.variables = { - CABAL_DIR = "\${XDG_CACHE_HOME}/cabal"; - STACK_ROOT = "\${XDG_DATA_HOME}/stack"; - GHCUP_USE_XDG_DIRS = "true"; - }; - } - ]; -} diff --git a/modules/dev/haskell/common.nix b/modules/dev/haskell/common.nix new file mode 100644 index 0000000..70b778b --- /dev/null +++ b/modules/dev/haskell/common.nix @@ -0,0 +1,23 @@ +{ pkgs }: +let + packages = builtins.attrValues { + inherit (pkgs) + haskell-language-server + cabal-install + hlint + ; + inherit (pkgs.haskellPackages) + hoogle + ; + }; +in +{ + inherit packages; + devShell = pkgs.mkShell { + inherit packages; + name = "haskell-dev-shell"; + shellHook = '' + echo "λ Haskell dev environment" + ''; + }; +} diff --git a/modules/dev/haskell/home.nix b/modules/dev/haskell/home.nix new file mode 100644 index 0000000..94939f1 --- /dev/null +++ b/modules/dev/haskell/home.nix @@ -0,0 +1,39 @@ +{ + config, + inputs, + lib, + osConfig ? null, + pkgs, + ... +}: +let + hm = inputs.self.lib.hmModule { + inherit + config + inputs + osConfig + ; + optionPath = [ + "dev" + "haskell" + ]; + }; + cfg = config.my.dev.haskell; + feature = import ./common.nix { inherit pkgs; }; +in +{ + options.my.dev.haskell.enable = lib.mkEnableOption "Install Haskell tooling globally"; + config = lib.mkMerge [ + { + my.dev.haskell.enable = lib.mkDefault hm.enabledByDefault; + } + (lib.mkIf cfg.enable { + home.packages = feature.packages; + home.sessionVariables = { + CABAL_DIR = "${config.xdg.cacheHome}/cabal"; + STACK_ROOT = "${config.xdg.dataHome}/stack"; + GHCUP_USE_XDG_DIRS = "true"; + }; + }) + ]; +} diff --git a/modules/dev/haskell/nixos.nix b/modules/dev/haskell/nixos.nix new file mode 100644 index 0000000..6f72c74 --- /dev/null +++ b/modules/dev/haskell/nixos.nix @@ -0,0 +1,27 @@ +{ + config, + inputs, + lib, + pkgs, + ... +}: +let + feature = import ./common.nix { inherit pkgs; }; +in +{ + options = { + my.dev.haskell = { + enable = lib.mkEnableOption "Install Haskell tooling globally"; + users = lib.mkOption { + type = inputs.self.lib.usersOptionType lib; + default = config.my.toggleUsers.dev; + description = "Users to install Haskell packages for"; + }; + }; + devShells.haskell = lib.mkOption { + type = lib.types.package; + default = feature.devShell; + description = "Haskell development shell"; + }; + }; +} diff --git a/modules/dev/julia/common.nix b/modules/dev/julia/common.nix new file mode 100644 index 0000000..c926838 --- /dev/null +++ b/modules/dev/julia/common.nix @@ -0,0 +1,16 @@ +{ pkgs }: +let + packages = builtins.attrValues { + inherit (pkgs) julia; + }; +in +{ + inherit packages; + devShell = pkgs.mkShell { + inherit packages; + name = "julia-dev-shell"; + shellHook = '' + echo "🔬 Julia dev environment" + ''; + }; +} diff --git a/modules/dev/julia/home.nix b/modules/dev/julia/home.nix new file mode 100644 index 0000000..6a94961 --- /dev/null +++ b/modules/dev/julia/home.nix @@ -0,0 +1,34 @@ +{ + config, + inputs, + lib, + osConfig ? null, + pkgs, + ... +}: +let + hm = inputs.self.lib.hmModule { + inherit + config + inputs + osConfig + ; + optionPath = [ + "dev" + "julia" + ]; + }; + cfg = config.my.dev.julia; + feature = import ./common.nix { inherit pkgs; }; +in +{ + options.my.dev.julia.enable = lib.mkEnableOption "Install Julia globally"; + config = lib.mkMerge [ + { + my.dev.julia.enable = lib.mkDefault hm.enabledByDefault; + } + (lib.mkIf cfg.enable { + home.packages = feature.packages; + }) + ]; +} diff --git a/modules/dev/julia.nix b/modules/dev/julia/nixos.nix similarity index 51% rename from modules/dev/julia.nix rename to modules/dev/julia/nixos.nix index 96c6831..ddb913c 100644 --- a/modules/dev/julia.nix +++ b/modules/dev/julia/nixos.nix @@ -6,9 +6,7 @@ ... }: let - packages = builtins.attrValues { - inherit (pkgs) julia; # High-performance dynamic language for technical computing - }; + feature = import ./common.nix { inherit pkgs; }; in { options = { @@ -22,17 +20,8 @@ in }; devShells.julia = lib.mkOption { type = lib.types.package; - default = pkgs.mkShell { - inherit packages; - name = "julia-dev-shell"; - shellHook = '' - echo "🔬 Julia dev environment" - ''; - }; + default = feature.devShell; description = "Julia development shell"; }; }; - config = lib.mkIf config.my.dev.julia.enable { - users.users = inputs.self.lib.mkUserAttrs lib config.my.dev.julia.users { inherit packages; }; - }; } diff --git a/modules/dev/mcp/common.nix b/modules/dev/mcp/common.nix new file mode 100644 index 0000000..bafa849 --- /dev/null +++ b/modules/dev/mcp/common.nix @@ -0,0 +1,18 @@ +{ pkgs, inputs }: +let + packages = [ + pkgs.codex + inputs.self.packages.${pkgs.system}.nixos-mcp + ]; +in +{ + inherit packages; + devShell = pkgs.mkShell { + inherit packages; + name = "mcp-dev-shell"; + shellHook = '' + export CODEX_HOME=$PWD/.codex + echo "MCP shell ready: codex + nixos-mcp" + ''; + }; +} diff --git a/modules/dev/mcp/home.nix b/modules/dev/mcp/home.nix new file mode 100644 index 0000000..1d676af --- /dev/null +++ b/modules/dev/mcp/home.nix @@ -0,0 +1,34 @@ +{ + config, + inputs, + lib, + osConfig ? null, + pkgs, + ... +}: +let + hm = inputs.self.lib.hmModule { + inherit + config + inputs + osConfig + ; + optionPath = [ + "dev" + "mcp" + ]; + }; + cfg = config.my.dev.mcp; + feature = import ./common.nix { inherit pkgs inputs; }; +in +{ + options.my.dev.mcp.enable = lib.mkEnableOption "Install MCP tooling globally"; + config = lib.mkMerge [ + { + my.dev.mcp.enable = lib.mkDefault hm.enabledByDefault; + } + (lib.mkIf cfg.enable { + home.packages = feature.packages; + }) + ]; +} diff --git a/modules/dev/mcp.nix b/modules/dev/mcp/nixos.nix similarity index 51% rename from modules/dev/mcp.nix rename to modules/dev/mcp/nixos.nix index 3ee6c5f..f09734b 100644 --- a/modules/dev/mcp.nix +++ b/modules/dev/mcp/nixos.nix @@ -6,10 +6,7 @@ ... }: let - packages = [ - pkgs.codex - inputs.self.packages.${pkgs.system}.nixos-mcp - ]; + feature = import ./common.nix { inherit pkgs inputs; }; in { options = { @@ -23,18 +20,8 @@ in }; devShells.mcp = lib.mkOption { type = lib.types.package; + default = feature.devShell; description = "MCP dev shell for this repo"; - default = pkgs.mkShell { - inherit packages; - name = "mcp-dev-shell"; - shellHook = '' - export CODEX_HOME=$PWD/.codex - echo "MCP shell ready: codex + nixos-mcp" - ''; - }; }; }; - config = lib.mkIf config.my.dev.mcp.enable { - users.users = inputs.self.lib.mkUserAttrs lib config.my.dev.mcp.users { inherit packages; }; - }; } diff --git a/modules/dev/ruby.nix b/modules/dev/ruby.nix deleted file mode 100644 index f7419c3..0000000 --- a/modules/dev/ruby.nix +++ /dev/null @@ -1,48 +0,0 @@ -{ - config, - inputs, - lib, - pkgs, - ... -}: -let - packages = builtins.attrValues { - inherit (pkgs) ruby; # Ruby interpreter - inherit (pkgs.rubyPackages) solargraph; # LSP for Ruby - }; -in -{ - options = { - my.dev.ruby = { - enable = lib.mkEnableOption "Install Ruby tooling globally"; - users = lib.mkOption { - type = inputs.self.lib.usersOptionType lib; - default = config.my.toggleUsers.dev; - description = "Users to install Ruby packages for"; - }; - }; - devShells.ruby = lib.mkOption { - type = lib.types.package; - default = pkgs.mkShell { - inherit packages; - name = "ruby-dev-shell"; - shellHook = '' - echo "💎 Ruby dev environment" - ''; - }; - description = "Ruby development shell with interpreter and Solargraph LSP"; - }; - }; - config = lib.mkMerge [ - (lib.mkIf config.my.dev.ruby.enable { - users.users = inputs.self.lib.mkUserAttrs lib config.my.dev.ruby.users { inherit packages; }; - }) - { - environment.variables = { - GEM_HOME = "\${XDG_DATA_HOME}/ruby/gems"; - GEM_PATH = "\${XDG_DATA_HOME}/ruby/gems"; - GEM_SPEC_CACHE = "\${XDG_DATA_HOME}/ruby/specs"; - }; - } - ]; -} diff --git a/modules/dev/ruby/common.nix b/modules/dev/ruby/common.nix new file mode 100644 index 0000000..f78883e --- /dev/null +++ b/modules/dev/ruby/common.nix @@ -0,0 +1,17 @@ +{ pkgs }: +let + packages = builtins.attrValues { + inherit (pkgs) ruby; + inherit (pkgs.rubyPackages) solargraph; + }; +in +{ + inherit packages; + devShell = pkgs.mkShell { + inherit packages; + name = "ruby-dev-shell"; + shellHook = '' + echo "💎 Ruby dev environment" + ''; + }; +} diff --git a/modules/dev/ruby/home.nix b/modules/dev/ruby/home.nix new file mode 100644 index 0000000..1be0d60 --- /dev/null +++ b/modules/dev/ruby/home.nix @@ -0,0 +1,39 @@ +{ + config, + inputs, + lib, + osConfig ? null, + pkgs, + ... +}: +let + hm = inputs.self.lib.hmModule { + inherit + config + inputs + osConfig + ; + optionPath = [ + "dev" + "ruby" + ]; + }; + cfg = config.my.dev.ruby; + feature = import ./common.nix { inherit pkgs; }; +in +{ + options.my.dev.ruby.enable = lib.mkEnableOption "Install Ruby tooling globally"; + config = lib.mkMerge [ + { + my.dev.ruby.enable = lib.mkDefault hm.enabledByDefault; + } + (lib.mkIf cfg.enable { + home.packages = feature.packages; + home.sessionVariables = { + GEM_HOME = "${config.xdg.dataHome}/ruby/gems"; + GEM_PATH = "${config.xdg.dataHome}/ruby/gems"; + GEM_SPEC_CACHE = "${config.xdg.dataHome}/ruby/specs"; + }; + }) + ]; +} diff --git a/modules/dev/ruby/nixos.nix b/modules/dev/ruby/nixos.nix new file mode 100644 index 0000000..fc284bd --- /dev/null +++ b/modules/dev/ruby/nixos.nix @@ -0,0 +1,27 @@ +{ + config, + inputs, + lib, + pkgs, + ... +}: +let + feature = import ./common.nix { inherit pkgs; }; +in +{ + options = { + my.dev.ruby = { + enable = lib.mkEnableOption "Install Ruby tooling globally"; + users = lib.mkOption { + type = inputs.self.lib.usersOptionType lib; + default = config.my.toggleUsers.dev; + description = "Users to install Ruby packages for"; + }; + }; + devShells.ruby = lib.mkOption { + type = lib.types.package; + default = feature.devShell; + description = "Ruby development shell with interpreter and Solargraph LSP"; + }; + }; +} diff --git a/modules/dev/rust.nix b/modules/dev/rust.nix deleted file mode 100644 index efdd975..0000000 --- a/modules/dev/rust.nix +++ /dev/null @@ -1,49 +0,0 @@ -{ - config, - inputs, - lib, - pkgs, - ... -}: -let - packages = builtins.attrValues { - inherit (pkgs) - rustc # Rust compiler - cargo # Rust package manager - rust-analyzer # Language server for Rust - clippy # Linter for Rust - rustfmt # Formatter for Rust code - ; - }; -in -{ - options = { - my.dev.rust = { - enable = lib.mkEnableOption "Install Rust tooling globally"; - users = lib.mkOption { - type = inputs.self.lib.usersOptionType lib; - default = config.my.toggleUsers.dev; - description = "Users to install Rust packages for"; - }; - }; - devShells.rust = lib.mkOption { - type = lib.types.package; - default = pkgs.mkShell { - inherit packages; - name = "rust-dev-shell"; - shellHook = '' - echo "🦀 Rust dev environment" - ''; - }; - description = "Rust development shell with cargo and rust-analyzer"; - }; - }; - config = lib.mkMerge [ - (lib.mkIf config.my.dev.rust.enable { - users.users = inputs.self.lib.mkUserAttrs lib config.my.dev.rust.users { inherit packages; }; - }) - { - environment.variables.CARGO_HOME = "\${XDG_DATA_HOME}/cargo"; - } - ]; -} diff --git a/modules/dev/rust/common.nix b/modules/dev/rust/common.nix new file mode 100644 index 0000000..1df7a64 --- /dev/null +++ b/modules/dev/rust/common.nix @@ -0,0 +1,22 @@ +{ pkgs }: +let + packages = builtins.attrValues { + inherit (pkgs) + rustc + cargo + rust-analyzer + clippy + rustfmt + ; + }; +in +{ + inherit packages; + devShell = pkgs.mkShell { + inherit packages; + name = "rust-dev-shell"; + shellHook = '' + echo "🦀 Rust dev environment" + ''; + }; +} diff --git a/modules/dev/rust/home.nix b/modules/dev/rust/home.nix new file mode 100644 index 0000000..216446c --- /dev/null +++ b/modules/dev/rust/home.nix @@ -0,0 +1,35 @@ +{ + config, + inputs, + lib, + osConfig ? null, + pkgs, + ... +}: +let + hm = inputs.self.lib.hmModule { + inherit + config + inputs + osConfig + ; + optionPath = [ + "dev" + "rust" + ]; + }; + cfg = config.my.dev.rust; + feature = import ./common.nix { inherit pkgs; }; +in +{ + options.my.dev.rust.enable = lib.mkEnableOption "Install Rust tooling globally"; + config = lib.mkMerge [ + { + my.dev.rust.enable = lib.mkDefault hm.enabledByDefault; + } + (lib.mkIf cfg.enable { + home.packages = feature.packages; + home.sessionVariables.CARGO_HOME = "${config.xdg.dataHome}/cargo"; + }) + ]; +} diff --git a/modules/dev/rust/nixos.nix b/modules/dev/rust/nixos.nix new file mode 100644 index 0000000..110973b --- /dev/null +++ b/modules/dev/rust/nixos.nix @@ -0,0 +1,27 @@ +{ + config, + inputs, + lib, + pkgs, + ... +}: +let + feature = import ./common.nix { inherit pkgs; }; +in +{ + options = { + my.dev.rust = { + enable = lib.mkEnableOption "Install Rust tooling globally"; + users = lib.mkOption { + type = inputs.self.lib.usersOptionType lib; + default = config.my.toggleUsers.dev; + description = "Users to install Rust packages for"; + }; + }; + devShells.rust = lib.mkOption { + type = lib.types.package; + default = feature.devShell; + description = "Rust development shell with cargo and rust-analyzer"; + }; + }; +} diff --git a/modules/dev/zig/common.nix b/modules/dev/zig/common.nix new file mode 100644 index 0000000..11ca063 --- /dev/null +++ b/modules/dev/zig/common.nix @@ -0,0 +1,19 @@ +{ pkgs }: +let + packages = builtins.attrValues { + inherit (pkgs) + zig + zls + ; + }; +in +{ + inherit packages; + devShell = pkgs.mkShell { + inherit packages; + name = "zig-dev-shell"; + shellHook = '' + echo "🦎 Zig dev environment" + ''; + }; +} diff --git a/modules/dev/zig/home.nix b/modules/dev/zig/home.nix new file mode 100644 index 0000000..8080e88 --- /dev/null +++ b/modules/dev/zig/home.nix @@ -0,0 +1,34 @@ +{ + config, + inputs, + lib, + osConfig ? null, + pkgs, + ... +}: +let + hm = inputs.self.lib.hmModule { + inherit + config + inputs + osConfig + ; + optionPath = [ + "dev" + "zig" + ]; + }; + cfg = config.my.dev.zig; + feature = import ./common.nix { inherit pkgs; }; +in +{ + options.my.dev.zig.enable = lib.mkEnableOption "Install Zig tooling globally"; + config = lib.mkMerge [ + { + my.dev.zig.enable = lib.mkDefault hm.enabledByDefault; + } + (lib.mkIf cfg.enable { + home.packages = feature.packages; + }) + ]; +} diff --git a/modules/dev/zig.nix b/modules/dev/zig/nixos.nix similarity index 52% rename from modules/dev/zig.nix rename to modules/dev/zig/nixos.nix index 0c6c557..ca7670b 100644 --- a/modules/dev/zig.nix +++ b/modules/dev/zig/nixos.nix @@ -6,12 +6,7 @@ ... }: let - packages = builtins.attrValues { - inherit (pkgs) - zig # Zig compiler and stdlib - zls # Language server for Zig - ; - }; + feature = import ./common.nix { inherit pkgs; }; in { options = { @@ -25,17 +20,8 @@ in }; devShells.zig = lib.mkOption { type = lib.types.package; - default = pkgs.mkShell { - inherit packages; - name = "zig-dev-shell"; - shellHook = '' - echo "🦎 Zig dev environment" - ''; - }; + default = feature.devShell; description = "Zig development shell with compiler and LSP"; }; }; - config = lib.mkIf config.my.dev.zig.enable { - users.users = inputs.self.lib.mkUserAttrs lib config.my.dev.zig.users { inherit packages; }; - }; } diff --git a/modules/shell/config/home.nix b/modules/shell/config/home.nix new file mode 100644 index 0000000..917a928 --- /dev/null +++ b/modules/shell/config/home.nix @@ -0,0 +1,20 @@ +{ + inputs, + lib, + osConfig ? null, + ... +}: +let + shellType = inputs.self.lib.hmShellType osConfig "bash"; +in +{ + options.my.shell.type = lib.mkOption { + type = lib.types.enum [ + "bash" + "zsh" + ]; + default = "bash"; + description = "The shell to use in Home Manager"; + }; + config.my.shell.type = lib.mkDefault shellType; +} diff --git a/modules/shell/config.nix b/modules/shell/config/nixos.nix similarity index 100% rename from modules/shell/config.nix rename to modules/shell/config/nixos.nix