From a048152eb0c3d936d1af3a1b35b327ebcb844d2a Mon Sep 17 00:00:00 2001 From: John Lancaster <32917998+jsl12@users.noreply.github.com> Date: Mon, 30 Jun 2025 18:27:45 -0500 Subject: [PATCH] examples --- README.md | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ flake.nix | 22 +++++++++------ home.nix | 2 ++ 3 files changed, 97 insertions(+), 8 deletions(-) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..db18adf --- /dev/null +++ b/README.md @@ -0,0 +1,81 @@ +# JSL Home + +## Usage + +Shell alias for "nix home manager update" + +```shell +nhmu +``` + +### Function + +```nix +{ + description = "Machine-specific Home Manager configuration"; + + inputs = { + nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; + john-home-config = { + url = "git+https://gitea.john-stream.com/john/home-manager"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; + + outputs = + { nixpkgs, ... }@inputs: + let + system = "x86_64-linux"; + pkgs = nixpkgs.legacyPackages.${system}; + mkHomeJSL = inputs.john-home-config.lib.mkHomeConfiguration; + userName = "john"; + in + { + homeConfigurations."${userName}" = mkHomeJSL userName; + }; +} +``` + +### Module + +```nix +{ + description = "Home Manager configuration of john"; + + inputs = { + nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; + home-manager = { + url = "github:nix-community/home-manager"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + john-home-config = { + url = "path:/home/john/home-manager"; + inputs.nixpkgs.follows = "nixpkgs"; + inputs.home-manager.follows = "home-manager"; + }; + }; + + outputs = + { nixpkgs, ... }@inputs: + let + system = "x86_64-linux"; + pkgs = nixpkgs.legacyPackages.${system}; + homeManagerConfiguration = inputs.home-manager.lib.homeManagerConfiguration; + jslDefault = inputs.john-home-config.homeManagerModules.default; + userName = "john"; + in + { + homeConfigurations."${userName}" = homeManagerConfiguration { + inherit pkgs; + modules = [ + jslDefault { + user = "${userName}"; + # Add any additional configuration here + } + ./home.nix + # Add other home manager modules here + ]; + }; + }; +} +``` diff --git a/flake.nix b/flake.nix index ede4d34..7d22aeb 100644 --- a/flake.nix +++ b/flake.nix @@ -16,21 +16,22 @@ pkgs = nixpkgs.legacyPackages.${system}; lib = pkgs.lib; - # Define the module first (moved from below) + # Defined up separately up here so that it can be evaluated by itself to determine the username homeManagerModule = { config, pkgs, ... }: { options.user = lib.mkOption { type = lib.types.str; description = "The username for the Home Manager configuration."; }; + + options.profile = lib.mkOption { + type = lib.types.enum [ "personal" "work" ]; + default = "personal"; + description = "Profile type for the Home Manager configuration."; + }; + imports = [ ./home.nix ]; }; - # Function to create a home configuration for any user - mkHomeConfiguration = username: home-manager.lib.homeManagerConfiguration { - inherit pkgs; - modules = [ homeManagerModule { user = username; } ]; - }; - # Default username from the module evaluation evaluatedOptions = lib.evalModules { modules = [ homeManagerModule ]; }; userName = evaluatedOptions.config.user; @@ -40,7 +41,12 @@ homeConfigurations.${userName} = mkHomeConfiguration userName; # Export the function so other flakes can create configurations for any user - lib.mkHomeConfiguration = mkHomeConfiguration; + lib.mkHomeConfiguration = username: home-manager.lib.homeManagerConfiguration { + inherit pkgs; + modules = [ + homeManagerModule { user = username; } + ]; + }; # Export modules for reuse in other flakes homeManagerModules.default = homeManagerModule; diff --git a/home.nix b/home.nix index b4c1712..8d6dec0 100644 --- a/home.nix +++ b/home.nix @@ -80,4 +80,6 @@ # Let Home Manager install and manage itself. programs.home-manager.enable = true; + + programs.ssh.enable = true; }