dotfiles/modules/common/default.nix
2025-02-05 17:25:29 -05:00

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;
};
}