first
This commit is contained in:
144
templates/home-manager-module/default.nix
Normal file
144
templates/home-manager-module/default.nix
Normal file
@@ -0,0 +1,144 @@
|
||||
# Home Manager Module Template
|
||||
# This is a template for creating new Home Manager modules in m3ta-nixpkgs
|
||||
# Copy this template and modify it for your specific module
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.programs.myProgram; # Replace 'myProgram' with your program/module name
|
||||
# Common locations: config.programs.*, config.services.*, config.m3ta.*
|
||||
in {
|
||||
# Define options that users can set in their Home Manager configuration
|
||||
options.programs.myProgram = {
|
||||
enable = mkEnableOption "my custom program"; # Replace with your program description
|
||||
|
||||
# Example: Package option
|
||||
package = mkOption {
|
||||
type = types.package;
|
||||
default = pkgs.hello; # Replace with your package
|
||||
defaultText = literalExpression "pkgs.hello";
|
||||
description = "The package to use";
|
||||
};
|
||||
|
||||
# Example: String option
|
||||
configDir = mkOption {
|
||||
type = types.str;
|
||||
default = "${config.xdg.configHome}/myprogram";
|
||||
defaultText = literalExpression ''"''${config.xdg.configHome}/myprogram"'';
|
||||
description = "Directory to store configuration";
|
||||
};
|
||||
|
||||
# Example: Boolean option
|
||||
enableBashIntegration = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = "Whether to enable Bash integration";
|
||||
};
|
||||
|
||||
# Example: Attribute set for settings
|
||||
settings = mkOption {
|
||||
type = types.attrs;
|
||||
default = {};
|
||||
example = literalExpression ''
|
||||
{
|
||||
theme = "dark";
|
||||
fontSize = 12;
|
||||
}
|
||||
'';
|
||||
description = "Configuration settings written to config file";
|
||||
};
|
||||
|
||||
# Example: Lines of text (for config files)
|
||||
extraConfig = mkOption {
|
||||
type = types.lines;
|
||||
default = "";
|
||||
example = ''
|
||||
# Custom configuration
|
||||
option = value
|
||||
'';
|
||||
description = "Extra configuration to append to the config file";
|
||||
};
|
||||
|
||||
# Example: Environment variables
|
||||
environmentVariables = mkOption {
|
||||
type = types.attrsOf types.str;
|
||||
default = {};
|
||||
example = {MY_VAR = "value";};
|
||||
description = "Environment variables to set";
|
||||
};
|
||||
};
|
||||
|
||||
# Define what happens when the module is enabled
|
||||
config = mkIf cfg.enable {
|
||||
# Add package to user profile
|
||||
home.packages = [cfg.package];
|
||||
|
||||
# Set environment variables
|
||||
home.sessionVariables = cfg.environmentVariables;
|
||||
|
||||
# Create configuration file
|
||||
# Method 1: Using xdg.configFile
|
||||
xdg.configFile."myprogram/config.conf" = {
|
||||
text = ''
|
||||
# Generated by Home Manager
|
||||
${builtins.toJSON cfg.settings}
|
||||
${cfg.extraConfig}
|
||||
'';
|
||||
};
|
||||
|
||||
# Method 2: Using home.file for non-XDG locations
|
||||
# home.file.".myprogramrc".text = ''
|
||||
# # Configuration here
|
||||
# '';
|
||||
|
||||
# Example: Bash integration
|
||||
programs.bash.initExtra = mkIf cfg.enableBashIntegration ''
|
||||
# My program bash integration
|
||||
eval "$(${cfg.package}/bin/myprogram init bash)"
|
||||
'';
|
||||
|
||||
# Example: Zsh integration
|
||||
programs.zsh.initExtra = mkIf cfg.enableBashIntegration ''
|
||||
# My program zsh integration
|
||||
eval "$(${cfg.package}/bin/myprogram init zsh)"
|
||||
'';
|
||||
|
||||
# Example: Fish integration
|
||||
# programs.fish.interactiveShellInit = mkIf cfg.enableFishIntegration ''
|
||||
# ${cfg.package}/bin/myprogram init fish | source
|
||||
# '';
|
||||
|
||||
# Example: Systemd user service
|
||||
systemd.user.services.myprogram = {
|
||||
Unit = {
|
||||
Description = "My Program Service";
|
||||
After = ["graphical-session.target"];
|
||||
};
|
||||
|
||||
Service = {
|
||||
Type = "simple";
|
||||
ExecStart = "${cfg.package}/bin/myprogram daemon";
|
||||
Restart = "on-failure";
|
||||
RestartSec = 5;
|
||||
};
|
||||
|
||||
Install = {
|
||||
WantedBy = ["default.target"];
|
||||
};
|
||||
};
|
||||
|
||||
# Example: Create directories
|
||||
# home.file."${cfg.configDir}/.keep".text = "";
|
||||
|
||||
# Example: Manage symlinks
|
||||
# home.file."bin/myprogram".source = "${cfg.package}/bin/myprogram";
|
||||
};
|
||||
|
||||
# Module metadata (optional)
|
||||
meta = {
|
||||
maintainers = with lib.maintainers; []; # Add your name if in nixpkgs
|
||||
};
|
||||
}
|
Reference in New Issue
Block a user