home: use agenix modules via flake
Signed-off-by: Amneesh Singh <natto@weirdnatto.in>
This commit is contained in:
		@@ -5,49 +5,75 @@ let
 | 
			
		||||
    ./modules/programs.nix
 | 
			
		||||
    globalArgs
 | 
			
		||||
  ];
 | 
			
		||||
 | 
			
		||||
  mkPkgs = system: import inputs.nixpkgs {
 | 
			
		||||
    inherit system;
 | 
			
		||||
    config = {
 | 
			
		||||
      allowUnfree = true;
 | 
			
		||||
      allowBroken = true;
 | 
			
		||||
      allowInsecure = true;
 | 
			
		||||
    };
 | 
			
		||||
    overlays = [ self.overlays.default ];
 | 
			
		||||
  };
 | 
			
		||||
in
 | 
			
		||||
{
 | 
			
		||||
  flake.homeConfigurations = {
 | 
			
		||||
    natto = inputs.home-manager.lib.homeManagerConfiguration {
 | 
			
		||||
      modules = [
 | 
			
		||||
  flake.homeConfigurations =
 | 
			
		||||
    let
 | 
			
		||||
 | 
			
		||||
      nattoModules = [
 | 
			
		||||
        ./natto
 | 
			
		||||
        ./modules/secret.nix
 | 
			
		||||
        ./modules/laptop.nix
 | 
			
		||||
        inputs.hyprland.homeManagerModules.default
 | 
			
		||||
        inputs.agenix.homeManagerModules.default
 | 
			
		||||
      ] ++ commonModules;
 | 
			
		||||
      pkgs = self.legacyPackages.x86_64-linux;
 | 
			
		||||
    };
 | 
			
		||||
    in
 | 
			
		||||
    {
 | 
			
		||||
      natto-laptop = inputs.home-manager.lib.homeManagerConfiguration {
 | 
			
		||||
        modules = nattoModules ++ [
 | 
			
		||||
          { laptop = true; }
 | 
			
		||||
        ];
 | 
			
		||||
        pkgs = mkPkgs "x86_64-linux";
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
    spark = inputs.home-manager.lib.homeManagerConfiguration {
 | 
			
		||||
      modules = [{
 | 
			
		||||
        home = {
 | 
			
		||||
          homeDirectory = "/home/spark";
 | 
			
		||||
          username = "spark";
 | 
			
		||||
          stateVersion = "23.05";
 | 
			
		||||
        };
 | 
			
		||||
      }] ++ commonModules;
 | 
			
		||||
      pkgs = self.legacyPackages.aarch64-linux;
 | 
			
		||||
    };
 | 
			
		||||
      natto = inputs.home-manager.lib.homeManagerConfiguration {
 | 
			
		||||
        modules = nattoModules;
 | 
			
		||||
        pkgs = mkPkgs "x86_64-linux";
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
    bat = inputs.home-manager.lib.homeManagerConfiguration {
 | 
			
		||||
      modules = [{
 | 
			
		||||
        home = {
 | 
			
		||||
          homeDirectory = "/home/bat";
 | 
			
		||||
          username = "bat";
 | 
			
		||||
          stateVersion = "23.05";
 | 
			
		||||
        };
 | 
			
		||||
      }] ++ commonModules;
 | 
			
		||||
      pkgs = self.legacyPackages.x86_64-linux;
 | 
			
		||||
    };
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    spin = inputs.home-manager.lib.homeManagerConfiguration {
 | 
			
		||||
      modules = [{
 | 
			
		||||
        home = {
 | 
			
		||||
          homeDirectory = "/home/spin";
 | 
			
		||||
          username = "spin";
 | 
			
		||||
          stateVersion = "23.05";
 | 
			
		||||
        };
 | 
			
		||||
      }] ++ commonModules;
 | 
			
		||||
      pkgs = self.legacyPackages.x86_64-linux;
 | 
			
		||||
    // {
 | 
			
		||||
      spark = inputs.home-manager.lib.homeManagerConfiguration {
 | 
			
		||||
        modules = [{
 | 
			
		||||
          home = {
 | 
			
		||||
            homeDirectory = "/home/spark";
 | 
			
		||||
            username = "spark";
 | 
			
		||||
            stateVersion = "23.05";
 | 
			
		||||
          };
 | 
			
		||||
        }] ++ commonModules;
 | 
			
		||||
        pkgs = self.legacyPackages.aarch64-linux;
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
      bat = inputs.home-manager.lib.homeManagerConfiguration {
 | 
			
		||||
        modules = [{
 | 
			
		||||
          home = {
 | 
			
		||||
            homeDirectory = "/home/bat";
 | 
			
		||||
            username = "bat";
 | 
			
		||||
            stateVersion = "23.05";
 | 
			
		||||
          };
 | 
			
		||||
        }] ++ commonModules;
 | 
			
		||||
        pkgs = self.legacyPackages.x86_64-linux;
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
      spin = inputs.home-manager.lib.homeManagerConfiguration {
 | 
			
		||||
        modules = [{
 | 
			
		||||
          home = {
 | 
			
		||||
            homeDirectory = "/home/spin";
 | 
			
		||||
            username = "spin";
 | 
			
		||||
            stateVersion = "23.05";
 | 
			
		||||
          };
 | 
			
		||||
        }] ++ commonModules;
 | 
			
		||||
        pkgs = self.legacyPackages.x86_64-linux;
 | 
			
		||||
      };
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,93 +0,0 @@
 | 
			
		||||
/* Module by @ryantm in github:ryantm/agenix */
 | 
			
		||||
 | 
			
		||||
{ config, lib, pkgs, ... }:
 | 
			
		||||
 | 
			
		||||
with lib;
 | 
			
		||||
 | 
			
		||||
let
 | 
			
		||||
  cfg = config.age;
 | 
			
		||||
  ageBin = "${pkgs.rage}/bin/rage";
 | 
			
		||||
  users = config.users.users;
 | 
			
		||||
  home_ = config.home.homeDirectory;
 | 
			
		||||
  username_ = config.home.username;
 | 
			
		||||
  identities = builtins.concatStringsSep " " (map (path: "-i ${path}") cfg.sshKeyPaths);
 | 
			
		||||
  installSecret = secretType: ''
 | 
			
		||||
    echo "decrypting ${secretType.file} to ${secretType.path}..." 
 | 
			
		||||
    TMP_FILE="${secretType.path}.tmp"
 | 
			
		||||
    mkdir -p $(dirname ${secretType.path})
 | 
			
		||||
    (umask 0400; ${ageBin} --decrypt ${identities} -o "$TMP_FILE" "${secretType.file}")
 | 
			
		||||
    chmod ${secretType.mode} "$TMP_FILE"
 | 
			
		||||
    chown ${secretType.owner} "$TMP_FILE"
 | 
			
		||||
    mv -f "$TMP_FILE" '${secretType.path}'
 | 
			
		||||
  '';
 | 
			
		||||
 | 
			
		||||
  secretType = types.submodule ({ config, ... }: {
 | 
			
		||||
    options = {
 | 
			
		||||
      name = mkOption {
 | 
			
		||||
        type = types.str;
 | 
			
		||||
        default = config._module.args.name;
 | 
			
		||||
        description = ''
 | 
			
		||||
          Name of the file used in /run/secrets
 | 
			
		||||
        '';
 | 
			
		||||
      };
 | 
			
		||||
      file = mkOption {
 | 
			
		||||
        type = types.path;
 | 
			
		||||
        description = ''
 | 
			
		||||
          Age file the secret is loaded from.
 | 
			
		||||
        '';
 | 
			
		||||
      };
 | 
			
		||||
      path = mkOption {
 | 
			
		||||
        type = types.str;
 | 
			
		||||
        default = "${home_}/.secrets/${config.name}";
 | 
			
		||||
        description = ''
 | 
			
		||||
          Path where the decrypted secret is installed.
 | 
			
		||||
        '';
 | 
			
		||||
      };
 | 
			
		||||
      mode = mkOption {
 | 
			
		||||
        type = types.str;
 | 
			
		||||
        default = "0400";
 | 
			
		||||
        description = ''
 | 
			
		||||
          Permissions mode of the in octal.
 | 
			
		||||
        '';
 | 
			
		||||
      };
 | 
			
		||||
      owner = mkOption {
 | 
			
		||||
        type = types.str;
 | 
			
		||||
        default = "${username_}";
 | 
			
		||||
        description = ''
 | 
			
		||||
          User of the file.
 | 
			
		||||
        '';
 | 
			
		||||
      };
 | 
			
		||||
    };
 | 
			
		||||
  });
 | 
			
		||||
in
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
  options.age = {
 | 
			
		||||
    secrets = mkOption {
 | 
			
		||||
      type = types.attrsOf secretType;
 | 
			
		||||
      default = { };
 | 
			
		||||
      description = ''
 | 
			
		||||
        Attrset of secrets.
 | 
			
		||||
      '';
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    sshKeyPaths = mkOption {
 | 
			
		||||
      type = types.listOf types.path;
 | 
			
		||||
      default = [ ];
 | 
			
		||||
      description = ''
 | 
			
		||||
        Path to SSH keys to be used as identities in age decryption.
 | 
			
		||||
      '';
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
  config = mkIf (cfg.secrets != { }) {
 | 
			
		||||
    assertions = [{
 | 
			
		||||
      assertion = cfg.sshKeyPaths != [ ];
 | 
			
		||||
      message = "age.sshKeyPaths must be set.";
 | 
			
		||||
    }];
 | 
			
		||||
    home.activation = {
 | 
			
		||||
      decryptSecrets = lib.hm.dag.entryBefore [ "writeBoundary" ] (concatStrings (map installSecret (builtins.attrValues cfg.secrets)));
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -4,7 +4,7 @@
 | 
			
		||||
    userDirs.enable = true;
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  age.sshKeyPaths = [ "${config.home.homeDirectory}/.ssh/id_ed25519" ];
 | 
			
		||||
  age.identityPaths = [ "${config.home.homeDirectory}/.ssh/id_ed25519" ];
 | 
			
		||||
 | 
			
		||||
  home = {
 | 
			
		||||
    pointerCursor = {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user