2022-05-06 03:01:56 +00:00
|
|
|
{ config, lib, pkgs, ... }: {
|
2022-05-02 03:39:50 +00:00
|
|
|
|
2022-12-22 00:07:58 +00:00
|
|
|
imports =
|
|
|
|
[ ./applications ./mail ./neovim ./programming ./repositories ./shell ];
|
2022-05-02 03:39:50 +00:00
|
|
|
|
2022-12-14 04:02:42 +00:00
|
|
|
options = {
|
2022-11-03 01:29:14 +00:00
|
|
|
user = lib.mkOption {
|
|
|
|
type = lib.types.str;
|
2022-06-20 03:44:29 +00:00
|
|
|
description = "Primary user of the system";
|
|
|
|
};
|
2022-09-10 02:16:45 +00:00
|
|
|
fullName = lib.mkOption {
|
|
|
|
type = lib.types.str;
|
|
|
|
description = "Human readable name of the user";
|
|
|
|
};
|
2022-06-20 03:44:29 +00:00
|
|
|
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";
|
|
|
|
};
|
|
|
|
};
|
2022-10-16 14:20:50 +00:00
|
|
|
identityFile = lib.mkOption {
|
|
|
|
type = lib.types.str;
|
2022-10-29 03:58:33 +00:00
|
|
|
description = "Path to existing private key file.";
|
2022-10-16 14:20:50 +00:00
|
|
|
default = "/etc/ssh/ssh_host_ed25519_key";
|
|
|
|
};
|
2022-06-20 03:44:29 +00:00
|
|
|
gui = {
|
2022-11-03 01:29:14 +00:00
|
|
|
enable = lib.mkEnableOption {
|
|
|
|
description = "Enable graphics.";
|
2022-06-20 03:44:29 +00:00
|
|
|
default = false;
|
|
|
|
};
|
2022-07-26 03:36:06 +00:00
|
|
|
};
|
2022-11-03 01:29:14 +00:00
|
|
|
theme = {
|
|
|
|
colors = lib.mkOption {
|
|
|
|
type = lib.types.attrs;
|
|
|
|
description = "Base16 color scheme.";
|
2022-12-21 21:18:03 +00:00
|
|
|
default = (import ../colorscheme/gruvbox).dark;
|
2022-11-03 01:29:14 +00:00
|
|
|
};
|
|
|
|
dark = lib.mkOption {
|
|
|
|
type = lib.types.bool;
|
|
|
|
description = "Enable dark mode.";
|
|
|
|
default = true;
|
|
|
|
};
|
2022-06-20 03:44:29 +00:00
|
|
|
};
|
2022-11-03 01:29:14 +00:00
|
|
|
homePath = lib.mkOption {
|
|
|
|
type = lib.types.path;
|
2022-06-20 12:39:41 +00:00
|
|
|
description = "Path of user's home directory.";
|
|
|
|
default = builtins.toPath (if pkgs.stdenv.isDarwin then
|
2022-06-20 03:54:16 +00:00
|
|
|
"/Users/${config.user}"
|
|
|
|
else
|
2022-06-20 12:39:41 +00:00
|
|
|
"/home/${config.user}");
|
|
|
|
};
|
2022-11-03 01:29:14 +00:00
|
|
|
dotfilesPath = lib.mkOption {
|
|
|
|
type = lib.types.path;
|
2022-05-29 17:44:45 +00:00
|
|
|
description = "Path of dotfiles repository.";
|
2022-06-20 12:39:41 +00:00
|
|
|
default = config.homePath + "/dev/personal/dotfiles";
|
2022-05-29 17:44:45 +00:00
|
|
|
};
|
2022-11-03 01:29:14 +00:00
|
|
|
dotfilesRepo = lib.mkOption {
|
|
|
|
type = lib.types.str;
|
2023-07-28 22:46:59 +00:00
|
|
|
description = "Link to dotfiles repository HTTPS URL.";
|
2022-06-04 14:29:36 +00:00
|
|
|
};
|
2022-11-03 01:29:14 +00:00
|
|
|
unfreePackages = lib.mkOption {
|
|
|
|
type = lib.types.listOf lib.types.str;
|
2022-06-05 01:08:09 +00:00
|
|
|
description = "List of unfree packages to allow.";
|
|
|
|
default = [ ];
|
|
|
|
};
|
2023-07-07 16:16:07 +00:00
|
|
|
hostnames = {
|
|
|
|
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.";
|
|
|
|
};
|
2023-11-10 03:37:34 +00:00
|
|
|
paperless = lib.mkOption {
|
|
|
|
type = lib.types.str;
|
|
|
|
description = "Hostname for document server (paperless-ngx).";
|
|
|
|
};
|
2023-07-07 16:16:07 +00:00
|
|
|
prometheus = lib.mkOption {
|
|
|
|
type = lib.types.str;
|
|
|
|
description = "Hostname for Prometheus 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.";
|
|
|
|
};
|
|
|
|
};
|
2022-05-29 17:44:45 +00:00
|
|
|
};
|
|
|
|
|
2022-12-14 04:02:42 +00:00
|
|
|
config = let stateVersion = "23.05";
|
2022-10-16 14:20:50 +00:00
|
|
|
in {
|
2022-05-02 03:39:50 +00:00
|
|
|
|
2023-03-03 14:39:42 +00:00
|
|
|
nix = {
|
|
|
|
|
|
|
|
# Enable features in Nix commands
|
|
|
|
extraOptions = ''
|
|
|
|
experimental-features = nix-command flakes
|
|
|
|
warn-dirty = false
|
|
|
|
'';
|
|
|
|
|
2023-04-15 14:07:59 +00:00
|
|
|
gc = {
|
|
|
|
automatic = true;
|
|
|
|
options = "--delete-older-than 7d";
|
|
|
|
};
|
|
|
|
|
2023-03-03 14:39:42 +00:00
|
|
|
settings = {
|
|
|
|
|
|
|
|
# Add community Cachix to binary cache
|
2023-07-01 21:33:24 +00:00
|
|
|
# Don't use with macOS because blocked by corporate firewall
|
2023-04-15 14:07:59 +00:00
|
|
|
builders-use-substitutes = true;
|
2023-03-08 15:30:47 +00:00
|
|
|
substituters = lib.mkIf (!pkgs.stdenv.isDarwin)
|
|
|
|
[ "https://nix-community.cachix.org" ];
|
|
|
|
trusted-public-keys = lib.mkIf (!pkgs.stdenv.isDarwin) [
|
2023-03-03 14:39:42 +00:00
|
|
|
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
|
|
|
|
];
|
|
|
|
|
|
|
|
# Scans and hard links identical files in the store
|
2023-03-22 20:20:30 +00:00
|
|
|
# Not working with macOS: https://github.com/NixOS/nix/issues/7273
|
|
|
|
auto-optimise-store = lib.mkIf (!pkgs.stdenv.isDarwin) true;
|
2023-03-03 14:39:42 +00:00
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
};
|
2022-05-22 23:43:46 +00:00
|
|
|
|
2022-10-16 14:20:50 +00:00
|
|
|
# Basic common system packages for all devices
|
|
|
|
environment.systemPackages = with pkgs; [ git vim wget curl ];
|
2022-05-29 17:44:45 +00:00
|
|
|
|
2022-10-16 14:20:50 +00:00
|
|
|
# Use the system-level nixpkgs instead of Home Manager's
|
|
|
|
home-manager.useGlobalPkgs = true;
|
2022-05-29 17:44:45 +00:00
|
|
|
|
2022-10-16 14:20:50 +00:00
|
|
|
# Install packages to /etc/profiles instead of ~/.nix-profile, useful when
|
|
|
|
# using multiple profiles for one user
|
|
|
|
home-manager.useUserPackages = true;
|
2022-05-22 23:43:46 +00:00
|
|
|
|
2022-10-16 14:20:50 +00:00
|
|
|
# Allow specified unfree packages (identified elsewhere)
|
|
|
|
# Retrieves package object based on string name
|
|
|
|
nixpkgs.config.allowUnfreePredicate = pkg:
|
|
|
|
builtins.elem (lib.getName pkg) config.unfreePackages;
|
2022-06-05 01:08:09 +00:00
|
|
|
|
2022-10-16 14:20:50 +00:00
|
|
|
# Pin a state version to prevent warnings
|
|
|
|
home-manager.users.${config.user}.home.stateVersion = stateVersion;
|
|
|
|
home-manager.users.root.home.stateVersion = stateVersion;
|
2022-05-22 23:43:46 +00:00
|
|
|
|
2022-10-16 14:20:50 +00:00
|
|
|
};
|
2022-05-02 03:39:50 +00:00
|
|
|
|
|
|
|
}
|