diff --git a/machines/yadunut-mbp/configuration.nix b/machines/yadunut-mbp/configuration.nix index 5b82062..c1c017e 100644 --- a/machines/yadunut-mbp/configuration.nix +++ b/machines/yadunut-mbp/configuration.nix @@ -4,16 +4,18 @@ let in { imports = [ - ../../modules/darwin/sane-defaults + ../../modules/common/sane-defaults + ../../modules/common/users ]; system.primaryUser = "yadunut"; - users.users."yadunut" = { - openssh.authorizedKeys.keys = [ keys.yadunut ]; - }; - users.users."root" = { - openssh.authorizedKeys.keys = [ keys.yadunut ]; + + nut = { + users.enable = true; + sane-defaults.enable = true; }; + nixpkgs.config.allowUnfree = true; + homebrew = { enable = true; onActivation.cleanup = "zap"; diff --git a/modules/common/sane-defaults/default.nix b/modules/common/sane-defaults/default.nix new file mode 100644 index 0000000..12e9655 --- /dev/null +++ b/modules/common/sane-defaults/default.nix @@ -0,0 +1,32 @@ +{ + _class, + lib, + config, + ... +}: +let + inherit (lib) mkIf mkEnableOption; + cfg = config.nut.sane-defaults; + nixosModule = mkIf cfg.enable { }; + darwinModule = mkIf cfg.enable { + system.defaults = { + NSGlobalDomain = { + InitialKeyRepeat = 10; + KeyRepeat = 1; + AppleShowAllExtensions = true; + ApplePressAndHoldEnabled = false; + }; + dock.autohide = true; + dock.autohide-delay = 0.0; + }; + }; +in +{ + imports = [ + (lib.optionalAttrs (_class == "nixos") nixosModule) + (lib.optionalAttrs (_class == "darwin") darwinModule) + ]; + options.nut.sane-defaults = { + enable = mkEnableOption "enable sane defaults"; + }; +} diff --git a/modules/common/template/default.nix b/modules/common/template/default.nix new file mode 100644 index 0000000..6be5989 --- /dev/null +++ b/modules/common/template/default.nix @@ -0,0 +1,19 @@ +{ + _class, + lib, + config, + ... +}: +let + inherit (lib) mkIf; + cfg = config.nut.template; + nixosModule = mkIf cfg.enable { }; + darwinModule = mkIf cfg.enable { }; +in +{ + imports = [ + (lib.optionalAttrs (_class == "nixos") nixosModule) + (lib.optionalAttrs (_class == "darwin") darwinModule) + ]; + options.nut.template = { }; +} diff --git a/modules/common/users/default.nix b/modules/common/users/default.nix new file mode 100644 index 0000000..0a53d8b --- /dev/null +++ b/modules/common/users/default.nix @@ -0,0 +1,53 @@ +{ + _class, + lib, + config, + inputs, + ... +}: + +let + keys = import ../../../keys.nix; + cfg = config.nut.users; + nixosModule = { + config = lib.mkIf cfg.enable { + # Enable Home Manager for NixOS and define the user + home-manager.useUserPackages = true; + home-manager.users.yadunut = { + imports = [ ./home.nix ]; + home.homeDirectory = lib.mkForce "/home/yadunut"; + }; + }; + }; + darwinModule = { + config = lib.mkIf cfg.enable { + users.users."yadunut" = { + openssh.authorizedKeys.keys = [ keys.yadunut ]; + }; + users.users."root" = { + openssh.authorizedKeys.keys = [ keys.yadunut ]; + }; + home-manager.useUserPackages = true; + home-manager.users.yadunut = { + imports = [ ./home.nix ]; + home.homeDirectory = lib.mkForce "/Users/yadunut"; + }; + }; + }; +in +{ + imports = [ + # Import the correct Home Manager module for the current platform + ( + if _class == "darwin" then + inputs.home-manager.darwinModules.home-manager + else + inputs.home-manager.nixosModules.home-manager + ) + (lib.optionalAttrs (_class == "nixos") nixosModule) + (lib.optionalAttrs (_class == "darwin") darwinModule) + ]; + options.nut.users = { + enable = lib.mkEnableOption "user setup"; + }; +} diff --git a/modules/common/users/home.nix b/modules/common/users/home.nix new file mode 100644 index 0000000..6092117 --- /dev/null +++ b/modules/common/users/home.nix @@ -0,0 +1,45 @@ +{ + _class, + config, + lib, + pkgs, + ... +}: +let + config = { + nut = { + git = { + enable = true; + gpgProgram = "/Applications/1Password.app/Contents/MacOS/op-ssh-sign"; + signingKey = "~/.ssh/yadunut_ed25519.pub"; + }; + zsh.enable = true; + }; + home.username = "yadunut"; + home.packages = [ + pkgs.entr + pkgs.jq + pkgs.just + pkgs.rsync + pkgs.codex + pkgs.dive + pkgs.cachix + pkgs.ouch + + pkgs.claude-code + pkgs.codex + pkgs.amp-cli + ]; + + nixpkgs.config.allowUnfree = true; + programs.home-manager.enable = true; + home.stateVersion = "25.05"; + }; +in +{ + imports = [ + config + ../../home/git + ../../home/zsh + ]; +} diff --git a/modules/darwin/sane-defaults/default.nix b/modules/darwin/sane-defaults/default.nix deleted file mode 100644 index 426f5a7..0000000 --- a/modules/darwin/sane-defaults/default.nix +++ /dev/null @@ -1,29 +0,0 @@ -{ - self, - lib, - inputs, - clan-core, - specialArgs, - config, - options, - _class, - modulesPath, - _prefix, -}@args: -let - _ = builtins.trace "MODULE ARGS:\n${lib.generators.toPretty { } (builtins.attrNames args)}" null; -in -{ - system.defaults = { - NSGlobalDomain = { - InitialKeyRepeat = 10; - KeyRepeat = 1; - AppleShowAllExtensions = true; - ApplePressAndHoldEnabled = false; - }; - dock.autohide = true; - dock.autohide-delay = 0.0; - - }; - -}