From 446f2ac62e23507dc704471987388382fb238f6d Mon Sep 17 00:00:00 2001 From: Franck Cuny Date: Thu, 10 Feb 2022 17:46:13 -0800 Subject: home-manager: split the configuration --- flake.nix | 47 ++++++++++++++++++++++++++++--------------- lib/default.nix | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+), 16 deletions(-) create mode 100644 lib/default.nix diff --git a/flake.nix b/flake.nix index 750c21a..e792668 100644 --- a/flake.nix +++ b/flake.nix @@ -1,6 +1,5 @@ { description = "personal NixOS configurations"; - inputs = { # Nixpkgs, NixOS's official repo nixpkgs.url = "github:nixos/nixpkgs/release-21.11"; @@ -16,20 +15,36 @@ }; # Output config, or config for NixOS system - outputs = { self, nixpkgs, home-manager, ... }@inputs: { - nixosConfigurations = { - # desktop - carmel = nixpkgs.lib.nixosSystem { - system = "x86_64-linux"; - modules = [ - ./hosts/carmel/configuration.nix - home-manager.nixosModules.home-manager { - home-manager.useGlobalPkgs = true; - home-manager.useUserPackages = true; - home-manager.users.fcuny = import ./users/fcuny/desktop.nix; - } - ]; + outputs = { ... }@inputs: + let + lib = import ./lib { inherit inputs; }; + in: { + nixosConfigurations = { + carmel = lib.mkSystem { + hostname = "carmel"; + system = "x86_64-linux"; + desktop = true; + }; }; - }; - }; + + homeConfigurations = { + "fcuny@carmel" = lib.mkHome { + username = "fcuny"; + system = "x86_64-linux"; + hostname = "carmel"; + desktop = true; + }; + }; + } // inputs.utils.lib.eachDefaultSystem (system: + let + pkgs = import inputs.nixpkgs { inherit system overlays; }; + home-manager = inputs.home-manager.defaultPackage."${system}"; + in + { + packages = pkgs // { inherit home-manager; }; + + devShell = pkgs.mkShell { + buildInputs = with pkgs; [ nixUnstable nixfmt rnix-lsp home-manager git ]; + }; + }); } diff --git a/lib/default.nix b/lib/default.nix new file mode 100644 index 0000000..7f0f8ed --- /dev/null +++ b/lib/default.nix @@ -0,0 +1,62 @@ +{ inputs, overlays }: +{ + mkSystem = + { hostname + , system + , desktop ? false + }: + inputs.nixpkgs.lib.nixosSystem { + inherit system; + specialArgs = { + inherit inputs system hostname desktop; + }; + modules = [ + ../modules/deskop + ../modules/system + ../hosts/${hostname} + { + networking.hostName = hostname; + # Apply overlay and allow unfree packages + nixpkgs = { + inherit overlays; + config.allowUnfree = true; + }; + # Add each input as a registry + nix.registry = inputs.nixpkgs.lib.mapAttrs' + (n: v: + inputs.nixpkgs.lib.nameValuePair (n) ({ flake = v; })) + inputs; + } + ] + }; + + mkHome = + { username + , system + , hostname + , desktop ? false + }: + inputs.home-manager.lib.homeManagerConfiguration { + inherit username system; + extraSpecialArgs = { + inherit system hostname graphical; + }; + homeDirectory = "/home/${username}"; + configuration = ../users/${username}; + extraModules = [ + ../modules/home-manager + # Base configuration + { + nixpkgs = { + inherit overlays; + config.allowUnfree = true; + }; + programs = { + home-manager.enable = true; + git.enable = true; + }; + systemd.user.startServices = "sd-switch"; + } + ]; + }; +} -- cgit 1.4.1