187 lines
3.8 KiB
Nix
187 lines
3.8 KiB
Nix
# Global config
|
||
|
||
{ config, lib, pkgs, ... }:
|
||
|
||
with lib; with types;
|
||
let named = submodule {
|
||
options = {
|
||
normal = mkOption { type = str; };
|
||
bright = mkOption { type = str; };
|
||
pastel = mkOption { type = str; };
|
||
};
|
||
};
|
||
special = submodule {
|
||
options = {
|
||
primary = mkOption { type = str; };
|
||
normal = mkOption { type = str; };
|
||
slight = mkOption { type = str; };
|
||
};
|
||
};
|
||
themeType = submodule {
|
||
options = {
|
||
foreground = mkOption { type = special; };
|
||
background = mkOption { type = special; };
|
||
grayscales = mkOption { type = listOf str; };
|
||
red = mkOption { type = named; };
|
||
green = mkOption { type = named; };
|
||
blue = mkOption { type = named; };
|
||
yellow = mkOption { type = named; };
|
||
purple = mkOption { type = named; };
|
||
cyan = mkOption { type = named; };
|
||
pink = mkOption { type = named; };
|
||
orange = mkOption { type = named; };
|
||
misc = mkOption { type = attrsOf str; };
|
||
hex = mkOption { type = themeType; };
|
||
};
|
||
}; in
|
||
{
|
||
|
||
options.riley = with lib; {
|
||
|
||
ide = mkOption {
|
||
type = types.bool;
|
||
description = ''
|
||
Enable IDE-like plugins such as language servers for Rust, Haskell and
|
||
Nix in the editor, and configure accordingly. If disabled, the editor
|
||
will lack some features such as semantic highlighting.
|
||
'';
|
||
default = true;
|
||
};
|
||
|
||
gui = mkOption {
|
||
type = types.bool;
|
||
description = ''
|
||
Enable the display server and related graphical programs.
|
||
'';
|
||
default = true;
|
||
};
|
||
|
||
theme = mkOption {
|
||
type = themeType;
|
||
description = ''
|
||
The theme used across the installation. Not used if gui is disabled.
|
||
'';
|
||
};
|
||
|
||
};
|
||
|
||
options.devices = mkOption {
|
||
type = with types; submodule {
|
||
options = {
|
||
|
||
audio = mkOption {
|
||
type = nullOr (submodule {
|
||
options = {
|
||
speakers = mkOption { type = str; };
|
||
external = mkOption { type = str; };
|
||
headset = mkOption { type = nullOr str; };
|
||
main-mic = mkOption { type = nullOr str; };
|
||
};
|
||
});
|
||
description = ''
|
||
Known audio devices: outputs & microphones.
|
||
Each string should be a pulseaudio sink or source.
|
||
'';
|
||
};
|
||
|
||
video = mkOption {
|
||
type = submodule {
|
||
options = {
|
||
displays = let output = submodule {
|
||
options = {
|
||
primary = mkOption {
|
||
type = bool;
|
||
default = false;
|
||
};
|
||
position = mkOption {
|
||
type = nullOr (listOf int);
|
||
default = null;
|
||
};
|
||
rotate = mkOption {
|
||
type = enum [ "normal" "left" "right" "inverted" ];
|
||
default = "normal";
|
||
};
|
||
};
|
||
}; in mkOption {
|
||
type = attrsOf output;
|
||
description = ''
|
||
A list of outputs with information on how to place them.
|
||
'';
|
||
};
|
||
};
|
||
};
|
||
description = ''
|
||
Define the video devices (just the displays, for now).
|
||
'';
|
||
};
|
||
|
||
};
|
||
};
|
||
};
|
||
|
||
|
||
imports = [
|
||
|
||
<home-manager/nixos>
|
||
|
||
./ide
|
||
./gui
|
||
|
||
./fonts.nix
|
||
./git.nix
|
||
./ssh.nix
|
||
|
||
];
|
||
|
||
config = {
|
||
|
||
riley.theme = (import ../colors.nix)."dark";
|
||
|
||
environment.systemPackages = with pkgs; [
|
||
|
||
# Web utils
|
||
|
||
wget
|
||
curl
|
||
git
|
||
|
||
# Coreutils
|
||
|
||
ripgrep
|
||
bottom
|
||
skim
|
||
exa
|
||
bat
|
||
lf
|
||
fd
|
||
|
||
];
|
||
|
||
boot = {
|
||
loader.systemd-boot = {
|
||
enable = true;
|
||
editor = false;
|
||
configurationLimit = 10;
|
||
};
|
||
|
||
loader.efi = {
|
||
canTouchEfiVariables = true;
|
||
};
|
||
|
||
cleanTmpDir = true;
|
||
};
|
||
|
||
networking = {
|
||
firewall.enable = false;
|
||
useDHCP = false;
|
||
};
|
||
|
||
nixpkgs.config.allowUnfree = true;
|
||
|
||
users.users."riley" = {
|
||
isNormalUser = true;
|
||
extraGroups = [ "wheel" ]; # Enable ‘sudo’ for the user.
|
||
};
|
||
|
||
};
|
||
}
|