mirror of
				https://github.com/nmasur/dotfiles
				synced 2025-11-04 03:33:15 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			168 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			168 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
{
 | 
						|
  config,
 | 
						|
  lib,
 | 
						|
  pkgs,
 | 
						|
  ...
 | 
						|
}:
 | 
						|
{
 | 
						|
 | 
						|
  imports = [
 | 
						|
    ./applications
 | 
						|
    ./mail
 | 
						|
    ./neovim
 | 
						|
    ./programming
 | 
						|
    ./repositories
 | 
						|
    ./shell
 | 
						|
  ];
 | 
						|
 | 
						|
  options = {
 | 
						|
    user = lib.mkOption {
 | 
						|
      type = lib.types.str;
 | 
						|
      description = "Primary user of the system";
 | 
						|
    };
 | 
						|
    fullName = lib.mkOption {
 | 
						|
      type = lib.types.str;
 | 
						|
      description = "Human readable name of the user";
 | 
						|
    };
 | 
						|
    userDirs = {
 | 
						|
      # Required to prevent infinite recursion when referenced by himalaya
 | 
						|
      download = lib.mkOption {
 | 
						|
        type = lib.types.str;
 | 
						|
        description = "XDG directory for downloads";
 | 
						|
        default = if pkgs.stdenv.isDarwin then "$HOME/Downloads" else "$HOME/downloads";
 | 
						|
      };
 | 
						|
    };
 | 
						|
    identityFile = lib.mkOption {
 | 
						|
      type = lib.types.str;
 | 
						|
      description = "Path to existing private key file.";
 | 
						|
      default = "/etc/ssh/ssh_host_ed25519_key";
 | 
						|
    };
 | 
						|
    # homePath = lib.mkOption {
 | 
						|
    #   type = lib.types.path;
 | 
						|
    #   description = "Path of user's home directory.";
 | 
						|
    #   default = builtins.toPath (
 | 
						|
    #     if pkgs.stdenv.isDarwin then "/Users/${config.user}" else "/home/${config.user}"
 | 
						|
    #   );
 | 
						|
    # };
 | 
						|
    # dotfilesPath = lib.mkOption {
 | 
						|
    #   type = lib.types.path;
 | 
						|
    #   description = "Path of dotfiles repository.";
 | 
						|
    #   default = config.homePath + "/dev/personal/dotfiles";
 | 
						|
    # };
 | 
						|
    # dotfilesRepo = lib.mkOption {
 | 
						|
    #   type = lib.types.str;
 | 
						|
    #   description = "Link to dotfiles repository HTTPS URL.";
 | 
						|
    # };
 | 
						|
    unfreePackages = lib.mkOption {
 | 
						|
      type = lib.types.listOf lib.types.str;
 | 
						|
      description = "List of unfree packages to allow.";
 | 
						|
      default = [ ];
 | 
						|
    };
 | 
						|
    insecurePackages = lib.mkOption {
 | 
						|
      type = lib.types.listOf lib.types.str;
 | 
						|
      description = "List of insecure packages to allow.";
 | 
						|
      default = [ ];
 | 
						|
    };
 | 
						|
    # hostnames = {
 | 
						|
    #   audiobooks = lib.mkOption {
 | 
						|
    #     type = lib.types.str;
 | 
						|
    #     description = "Hostname for audiobook server (Audiobookshelf).";
 | 
						|
    #   };
 | 
						|
    #   budget = lib.mkOption {
 | 
						|
    #     type = lib.types.str;
 | 
						|
    #     description = "Hostname for budgeting server (ActualBudget).";
 | 
						|
    #   };
 | 
						|
    #   files = lib.mkOption {
 | 
						|
    #     type = lib.types.str;
 | 
						|
    #     description = "Hostname for files server (Filebrowser).";
 | 
						|
    #   };
 | 
						|
    #   git = lib.mkOption {
 | 
						|
    #     type = lib.types.str;
 | 
						|
    #     description = "Hostname for git server (Gitea).";
 | 
						|
    #   };
 | 
						|
    #   metrics = lib.mkOption {
 | 
						|
    #     type = lib.types.str;
 | 
						|
    #     description = "Hostname for metrics server.";
 | 
						|
    #   };
 | 
						|
    #   minecraft = lib.mkOption {
 | 
						|
    #     type = lib.types.str;
 | 
						|
    #     description = "Hostname for Minecraft server.";
 | 
						|
    #   };
 | 
						|
    #   paperless = lib.mkOption {
 | 
						|
    #     type = lib.types.str;
 | 
						|
    #     description = "Hostname for document server (paperless-ngx).";
 | 
						|
    #   };
 | 
						|
    #   photos = lib.mkOption {
 | 
						|
    #     type = lib.types.str;
 | 
						|
    #     description = "Hostname for photo management (Immich).";
 | 
						|
    #   };
 | 
						|
    #   prometheus = lib.mkOption {
 | 
						|
    #     type = lib.types.str;
 | 
						|
    #     description = "Hostname for Prometheus server.";
 | 
						|
    #   };
 | 
						|
    #   influxdb = lib.mkOption {
 | 
						|
    #     type = lib.types.str;
 | 
						|
    #     description = "Hostname for InfluxDB2 server.";
 | 
						|
    #   };
 | 
						|
    #   secrets = lib.mkOption {
 | 
						|
    #     type = lib.types.str;
 | 
						|
    #     description = "Hostname for passwords and secrets (Vaultwarden).";
 | 
						|
    #   };
 | 
						|
    #   stream = lib.mkOption {
 | 
						|
    #     type = lib.types.str;
 | 
						|
    #     description = "Hostname for video/media library (Jellyfin).";
 | 
						|
    #   };
 | 
						|
    #   content = lib.mkOption {
 | 
						|
    #     type = lib.types.str;
 | 
						|
    #     description = "Hostname for personal content system (Nextcloud).";
 | 
						|
    #   };
 | 
						|
    #   books = lib.mkOption {
 | 
						|
    #     type = lib.types.str;
 | 
						|
    #     description = "Hostname for books library (Calibre-Web).";
 | 
						|
    #   };
 | 
						|
    #   download = lib.mkOption {
 | 
						|
    #     type = lib.types.str;
 | 
						|
    #     description = "Hostname for download services.";
 | 
						|
    #   };
 | 
						|
    #   irc = lib.mkOption {
 | 
						|
    #     type = lib.types.str;
 | 
						|
    #     description = "Hostname for IRC services.";
 | 
						|
    #   };
 | 
						|
    #   n8n = lib.mkOption {
 | 
						|
    #     type = lib.types.str;
 | 
						|
    #     description = "Hostname for n8n automation.";
 | 
						|
    #   };
 | 
						|
    #   notifications = lib.mkOption {
 | 
						|
    #     type = lib.types.str;
 | 
						|
    #     description = "Hostname for push notification services (ntfy).";
 | 
						|
    #   };
 | 
						|
    #   status = lib.mkOption {
 | 
						|
    #     type = lib.types.str;
 | 
						|
    #     description = "Hostname for status page (Uptime-Kuma).";
 | 
						|
    #   };
 | 
						|
    #   transmission = lib.mkOption {
 | 
						|
    #     type = lib.types.str;
 | 
						|
    #     description = "Hostname for peer2peer downloads (Transmission).";
 | 
						|
    #   };
 | 
						|
    # };
 | 
						|
  };
 | 
						|
 | 
						|
  config =
 | 
						|
    let
 | 
						|
      stateVersion = "23.05";
 | 
						|
    in
 | 
						|
    {
 | 
						|
 | 
						|
      # Allow specified unfree packages (identified elsewhere)
 | 
						|
      # Retrieves package object based on string name
 | 
						|
      nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) config.unfreePackages;
 | 
						|
 | 
						|
      # Allow specified insecure packages (identified elsewhere)
 | 
						|
      nixpkgs.config.permittedInsecurePackages = config.insecurePackages;
 | 
						|
 | 
						|
      # Pin a state version to prevent warnings
 | 
						|
      home-manager.users.${config.user}.home.stateVersion = stateVersion;
 | 
						|
      home-manager.users.root.home.stateVersion = stateVersion;
 | 
						|
    };
 | 
						|
}
 |