From 9a5a9ea290444ac585456fb756859a0fb85b5f3b Mon Sep 17 00:00:00 2001 From: Luke Channings <461449+LukeChannings@users.noreply.github.com> Date: Wed, 29 Jan 2025 12:15:20 +0000 Subject: [PATCH] Clean up module handling --- config/brew/darwin.nix | 6 +- config/default.nix | 104 +++++++++--------- config/helix/nixos+darwin.nix | 6 + config/home-manager/darwin.nix | 5 + config/home-manager/home.nix | 3 + config/home-manager/nixos+darwin.nix | 12 ++ config/home-manager/nixos.nix | 5 + config/nix/darwin.nix | 19 +--- config/nix/home.nix | 7 +- config/nix/nixos+darwin.nix | 16 +++ config/nix/nixos.nix | 15 +-- .../{universal.nix => nixos+darwin.nix} | 1 + config/toolbox/darwin.nix | 5 + config/vscode/home.nix | 6 +- config/vscode/nixos+darwin.nix | 9 ++ devenv.nix | 2 +- flake.nix | 2 +- 17 files changed, 132 insertions(+), 91 deletions(-) create mode 100644 config/helix/nixos+darwin.nix create mode 100644 config/home-manager/darwin.nix create mode 100644 config/home-manager/home.nix create mode 100644 config/home-manager/nixos+darwin.nix create mode 100644 config/home-manager/nixos.nix create mode 100644 config/nix/nixos+darwin.nix rename config/nixpkgs/{universal.nix => nixos+darwin.nix} (53%) create mode 100644 config/toolbox/darwin.nix create mode 100644 config/vscode/nixos+darwin.nix diff --git a/config/brew/darwin.nix b/config/brew/darwin.nix index 6aa091a..1d1213c 100644 --- a/config/brew/darwin.nix +++ b/config/brew/darwin.nix @@ -1,5 +1,9 @@ -{ ... }: +{ inputs, ... }: { + imports = [ + inputs.brew-nix.darwinModules.default + ]; + brew-nix.enable = true; nixpkgs.overlays = [ diff --git a/config/default.nix b/config/default.nix index d63dea5..5fa8f3b 100644 --- a/config/default.nix +++ b/config/default.nix @@ -5,8 +5,6 @@ ... }: let - nixpkgsConfigModule = import ./nixpkgs/universal.nix; - nixpkgsConfig = nixpkgsConfigModule.nixpkgs.config; defaultOverlays = builtins.attrValues config.flake.overlays; inherit (lib) optional; @@ -15,47 +13,61 @@ let filesCalled = with inputs.nixpkgs.lib.fileset; - name: toList (fileFilter (file: file.name == name || file.name == "universal.nix") ./.); + nameFilter: + toList (fileFilter (file: (nameFilter file.name) || file.name == "home+nixos+darwin.nix") ./.); importAsAttrset = with builtins; pathList: listToAttrs ( - map (path: { - name = baseNameOf (dirOf path); - value = import path; - }) pathList + map ( + path: + let + type = (baseNameOf path); + in + { + name = "${baseNameOf (dirOf path)}${ + if type == "nixos+darwin.nix" then + "-os-shared" + else if type == "home+nixos+darwin.nix" then + "-shared" + else + "" + }"; + value = import path; + } + ) pathList ); stateVersion = "24.11"; nixDarwinStateVersion = 5; - homeModules = (importAsAttrset (filesCalled "home.nix")) // { - _setup = { - home.stateVersion = stateVersion; - xdg.enable = true; - }; + # + # To organise configurations I separate configurations into modules: + # + # - home.nix - home-manager modules + # - darwin.nix - nix-darwin modules + # - nixos.nix - nixos modules + # + # Available combinations: + # + # - home+nixos+darwin.nix + # - nixos+darwin.nix + # + homeModules = (importAsAttrset (filesCalled (_: _ == "home.nix"))) // { + _setup.home.stateVersion = stateVersion; + default-packages = import ./default-packages.nix; - nix-index-database = inputs.nix-index-database.hmModules.nix-index; }; - darwinModules = (importAsAttrset (filesCalled "darwin.nix")) // { - inherit nixpkgsConfigModule; - home-manager = inputs.home-manager.darwinModules.home-manager; - brew-nix = inputs.brew-nix.darwinModules.default; - link-apps = inputs.toolbox.modules.darwin.link-apps; - - _setup = { - system.stateVersion = nixDarwinStateVersion; + darwinModules = + (importAsAttrset (filesCalled (_: _ == "darwin.nix" || _ == "nixos+darwin.nix"))) + // { + _setup.system.stateVersion = nixDarwinStateVersion; }; - }; - nixosModules = (importAsAttrset (filesCalled "nixos.nix")) // { - home-manager = inputs.home-manager.nixosModules.default; - - _setup = { - system.stateVersion = stateVersion; - }; + nixosModules = (importAsAttrset (filesCalled (_: _ == "nixos.nix" || _ == "nixos+darwin.nix"))) // { + _setup.system.stateVersion = stateVersion; }; disableModules = @@ -70,39 +82,23 @@ let ( { config, - pkgs, inputs, ... }: { imports = osModules; - config = { - home-manager = { - backupFileExtension = "backup"; - - sharedModules = homeModules; - - # Use the system-level nixpkgs instead of Home Manager's - useGlobalPkgs = true; - - # Install packages to /etc/profiles instead of ~/.nix-profile, useful when - # using multiple profiles for one user - useUserPackages = true; - - extraSpecialArgs = { - inherit pkgs inputs; - }; - }; - }; + config.home-manager.sharedModules = homeModules; + config.home-manager.extraSpecialArgs = { + inherit inputs; + } // inputs; } ); mkHomeManagerConfiguration = { - system, config, overlays ? defaultOverlays, - pkgs ? import inputs.nixpkgs { inherit system; config = nixpkgsConfig; inherit overlays; }, + pkgs, disabledModules ? [ ], }: inputs.home-manager.lib.homeManagerConfiguration { @@ -200,7 +196,11 @@ let "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMZzAdnH2X/vW+HEovUZCgDjfIiXyokxCNIhCDrF1+Rh" ]; - nix.settings.trusted-users = [ "luke" "luke@idm.channings.me" ]; + nix.settings.trusted-users = [ + "luke" + "luke@idm.channings.me" + ]; + # nixpkgs.overlays = overlays; } ( @@ -240,10 +240,6 @@ let inherit deployment; }; - meta.nodeNixpkgs.${normalizedHostName} = import inputs.nixpkgs { - inherit system overlays; - config = nixpkgsConfig; - }; meta.nodeSpecialArgs.${normalizedHostName} = { inherit inputs; } // inputs; diff --git a/config/helix/nixos+darwin.nix b/config/helix/nixos+darwin.nix new file mode 100644 index 0000000..d80f0aa --- /dev/null +++ b/config/helix/nixos+darwin.nix @@ -0,0 +1,6 @@ +{ inputs, ... }: +{ + nixpkgs.overlays = [ + inputs.helix.overlays.default + ]; +} diff --git a/config/home-manager/darwin.nix b/config/home-manager/darwin.nix new file mode 100644 index 0000000..0e34124 --- /dev/null +++ b/config/home-manager/darwin.nix @@ -0,0 +1,5 @@ +{ inputs, ... }: { + imports = [ + inputs.home-manager.darwinModules.home-manager + ]; +} diff --git a/config/home-manager/home.nix b/config/home-manager/home.nix new file mode 100644 index 0000000..1dac606 --- /dev/null +++ b/config/home-manager/home.nix @@ -0,0 +1,3 @@ +{ + xdg.enable = true; +} diff --git a/config/home-manager/nixos+darwin.nix b/config/home-manager/nixos+darwin.nix new file mode 100644 index 0000000..de6228d --- /dev/null +++ b/config/home-manager/nixos+darwin.nix @@ -0,0 +1,12 @@ +{ + home-manager = { + backupFileExtension = "backup"; + + # Use the system-level nixpkgs instead of Home Manager's + useGlobalPkgs = true; + + # Install packages to /etc/profiles instead of ~/.nix-profile, useful when + # using multiple profiles for one user + useUserPackages = true; + }; +} diff --git a/config/home-manager/nixos.nix b/config/home-manager/nixos.nix new file mode 100644 index 0000000..7c28811 --- /dev/null +++ b/config/home-manager/nixos.nix @@ -0,0 +1,5 @@ +{ inputs, ... }: { + imports = [ + inputs.home-manager.nixosModules.home-manager + ]; +} diff --git a/config/nix/darwin.nix b/config/nix/darwin.nix index c92c955..8c582d9 100644 --- a/config/nix/darwin.nix +++ b/config/nix/darwin.nix @@ -1,20 +1,5 @@ -{ - pkgs, - config, - inputs, - lib, - ... -}: -{ +{ inputs, ... }: { imports = [ - inputs.lix-module.nixosModules.default + inputs.nix-index-database.darwinModules.nix-index ]; - - services.nix-daemon.enable = true; - - nix = { - package = lib.mkDefault pkgs.lix; - channel.enable = false; - settings = (import ./config.nix { users = config.users.users; }); - }; } diff --git a/config/nix/home.nix b/config/nix/home.nix index 0a675c0..766e5f3 100644 --- a/config/nix/home.nix +++ b/config/nix/home.nix @@ -1,4 +1,9 @@ -{ pkgs, lib, ... }: { +{ inputs, pkgs, lib, ... }: { + + imports = [ + inputs.nix-index-database.hmModules.nix-index + ]; + nix.package = lib.mkDefault pkgs.lix; programs.nix-index-database.comma.enable = true; } diff --git a/config/nix/nixos+darwin.nix b/config/nix/nixos+darwin.nix new file mode 100644 index 0000000..2a1b579 --- /dev/null +++ b/config/nix/nixos+darwin.nix @@ -0,0 +1,16 @@ +{ + config, + pkgs, + inputs, + lib, + ... +}: +{ + imports = [ + inputs.lix-module.nixosModules.default + ]; + + nix.package = lib.mkDefault pkgs.lix; + nix.channel.enable = false; + nix.settings = (import ./config.nix { users = config.users.users; }); +} diff --git a/config/nix/nixos.nix b/config/nix/nixos.nix index 2a1b579..8a889f3 100644 --- a/config/nix/nixos.nix +++ b/config/nix/nixos.nix @@ -1,16 +1,5 @@ -{ - config, - pkgs, - inputs, - lib, - ... -}: -{ +{ inputs, ... }: { imports = [ - inputs.lix-module.nixosModules.default + inputs.nix-index-database.nixosModules.nix-index ]; - - nix.package = lib.mkDefault pkgs.lix; - nix.channel.enable = false; - nix.settings = (import ./config.nix { users = config.users.users; }); } diff --git a/config/nixpkgs/universal.nix b/config/nixpkgs/nixos+darwin.nix similarity index 53% rename from config/nixpkgs/universal.nix rename to config/nixpkgs/nixos+darwin.nix index 996bed0..4987a4f 100644 --- a/config/nixpkgs/universal.nix +++ b/config/nixpkgs/nixos+darwin.nix @@ -1,3 +1,4 @@ +# These settings are inherited by home-manager when `useGlobalPkgs` is enabled. { nixpkgs.config.allowUnfree = true; nixpkgs.config.allowUnfreePredicate = pkg: true; diff --git a/config/toolbox/darwin.nix b/config/toolbox/darwin.nix new file mode 100644 index 0000000..a11caa2 --- /dev/null +++ b/config/toolbox/darwin.nix @@ -0,0 +1,5 @@ +{ inputs, ... }: { + imports = [ + inputs.toolbox.modules.darwin.link-apps + ]; +} diff --git a/config/vscode/home.nix b/config/vscode/home.nix index 096ff9e..890f80a 100644 --- a/config/vscode/home.nix +++ b/config/vscode/home.nix @@ -5,7 +5,7 @@ ... }: { - config.programs.vscode = { + programs.vscode = { enable = true; package = pkgs.vscodium.overrideAttrs (_final: _prev: { dontPatchShebangs = true; }); @@ -23,10 +23,10 @@ }; keybindings = (lib.importJSON ./keybindings.json); - extensions = import ./extensions.nix { inherit pkgs; }; + extensions = lib.mkIf (pkgs?vscode-marketplace) (import ./extensions.nix { inherit pkgs; }); }; - config.home.packages = [ + home.packages = [ (pkgs.writeShellScriptBin "code" '' ${config.programs.vscode.package}/Applications/VSCodium.app/Contents/MacOS/Electron $@ '') diff --git a/config/vscode/nixos+darwin.nix b/config/vscode/nixos+darwin.nix new file mode 100644 index 0000000..3414c7f --- /dev/null +++ b/config/vscode/nixos+darwin.nix @@ -0,0 +1,9 @@ +{ inputs, ... }: { + imports = [ + { + nixpkgs.overlays = [ + inputs.vscode-extensions.overlays.default + ]; + } + ]; +} diff --git a/devenv.nix b/devenv.nix index af570e0..9e03689 100644 --- a/devenv.nix +++ b/devenv.nix @@ -10,7 +10,7 @@ { _module.args.pkgs = import inputs.nixpkgs { inherit system; - inherit ((import ./config/nixpkgs).nixpkgs) config; + config.allowUnfree = true; overlays = [ inputs.vscode-extensions.overlays.default ]; }; diff --git a/flake.nix b/flake.nix index 3baac84..c77eaf9 100644 --- a/flake.nix +++ b/flake.nix @@ -121,7 +121,7 @@ }; legacyPackages.homeConfigurations.luke = self.lib.mkHomeManagerConfiguration { - inherit system; + inherit pkgs; disabledModules = [ "chromium"