Compare commits

..

No commits in common. "28e9fba68692045a42390ad2c8cbc0575c371a9b" and "ee565ff88f3b53a96290d5d9c428a14d9b2f792b" have entirely different histories.

40 changed files with 276 additions and 460 deletions

View file

@ -45,11 +45,6 @@
"x86_64-darwin" "x86_64-darwin"
"aarch64-darwin" "aarch64-darwin"
]; ];
perSystem =
{ pkgs, ... }:
{
formatter = pkgs.nixfmt-tree;
};
imports = [ imports = [
(inputs.import-tree ./modules/top) (inputs.import-tree ./modules/top)
(inputs.import-tree ./modules/hosts) (inputs.import-tree ./modules/hosts)

View file

@ -1,11 +1,8 @@
{ ... }: { ... }:
{ {
config.dendritic.features.editor-neovim.homeModules = [ config.dendritic.features.editor-neovim.homeModules = [
( ({ pkgs, ... }: {
{ pkgs, ... }: home.packages = with pkgs; [ neovim ];
{ })
home.packages = with pkgs; [ neovim ];
}
)
]; ];
} }

View file

@ -1,98 +1,95 @@
{ inputs, ... }: { inputs, ... }:
{ {
config.dendritic.features.editor-neovim.homeModules = [ config.dendritic.features.editor-neovim.homeModules = [
( ({ pkgs, lib, ... }: {
{ pkgs, lib, ... }: imports = [
{ inputs.nvf.homeManagerModules.default
imports = [ ../home/programs/neovim/options.nix
inputs.nvf.homeManagerModules.default ../home/programs/neovim/languages.nix
../home/programs/neovim/options.nix ../home/programs/neovim/picker.nix
../home/programs/neovim/languages.nix ../home/programs/neovim/snacks.nix
../home/programs/neovim/picker.nix ../home/programs/neovim/keymaps.nix
../home/programs/neovim/snacks.nix ../home/programs/neovim/utils.nix
../home/programs/neovim/keymaps.nix ../home/programs/neovim/mini.nix
../home/programs/neovim/utils.nix ];
../home/programs/neovim/mini.nix
programs.nvf = {
enable = true;
settings.vim = {
startPlugins = with pkgs; [
vimPlugins.grug-far-nvim
vimPlugins.image-nvim
vimPlugins.vim-hoogle
vimPlugins.telescope_hoogle
vimPlugins.zk-nvim
vimPlugins.cyberdream-nvim
vimPlugins.octo-nvim
];
luaConfigRC.colorscheme = ''
vim.cmd.colorscheme("cyberdream-light")
'';
luaConfigRC.zk_nvim = ''
local ok, zk = pcall(require, "zk")
if not ok then return end
zk.setup({
picker = "select",
lsp = {
config = {
name = "zk",
cmd = { "zk", "lsp" },
filetypes = { "markdown" },
},
auto_attach = { enabled = true },
},
})
'';
};
settings.vim.augroups = [
{ name = "SwiftSetup"; }
]; ];
programs.nvf = { settings.vim.autocmds = [
enable = true; {
event = [ "FileType" ];
settings.vim = { pattern = [ "swift" ];
startPlugins = with pkgs; [ group = "SwiftSetup";
vimPlugins.grug-far-nvim desc = "Start sourcekit-lsp for Swift files";
vimPlugins.image-nvim callback = lib.generators.mkLuaInline ''
vimPlugins.vim-hoogle function()
vimPlugins.telescope_hoogle local lspconfig = require("lspconfig")
vimPlugins.zk-nvim for _, client in pairs(vim.lsp.get_active_clients()) do
vimPlugins.cyberdream-nvim if client.name == "sourcekit" then return end
vimPlugins.octo-nvim
];
luaConfigRC.colorscheme = ''
vim.cmd.colorscheme("cyberdream-light")
'';
luaConfigRC.zk_nvim = ''
local ok, zk = pcall(require, "zk")
if not ok then return end
zk.setup({
picker = "select",
lsp = {
config = {
name = "zk",
cmd = { "zk", "lsp" },
filetypes = { "markdown" },
},
auto_attach = { enabled = true },
},
})
'';
};
settings.vim.augroups = [
{ name = "SwiftSetup"; }
];
settings.vim.autocmds = [
{
event = [ "FileType" ];
pattern = [ "swift" ];
group = "SwiftSetup";
desc = "Start sourcekit-lsp for Swift files";
callback = lib.generators.mkLuaInline ''
function()
local lspconfig = require("lspconfig")
for _, client in pairs(vim.lsp.get_active_clients()) do
if client.name == "sourcekit" then return end
end
lspconfig.sourcekit.setup({
cmd = { "sourcekit-lsp" },
filetypes = { "swift", "swiftpm" },
root_dir = lspconfig.util.root_pattern("Package.swift", ".git"),
})
end end
''; lspconfig.sourcekit.setup({
} cmd = { "sourcekit-lsp" },
filetypes = { "swift", "swiftpm" },
root_dir = lspconfig.util.root_pattern("Package.swift", ".git"),
})
end
'';
}
{ {
event = [ "BufWritePost" ]; event = [ "BufWritePost" ];
pattern = [ "*.swift" ]; pattern = [ "*.swift" ];
group = "SwiftSetup"; group = "SwiftSetup";
desc = "Format Swift files on save"; desc = "Format Swift files on save";
callback = lib.generators.mkLuaInline '' callback = lib.generators.mkLuaInline ''
function() function()
if vim.fn.executable("swift-format") == 1 then if vim.fn.executable("swift-format") == 1 then
vim.cmd("silent! noautocmd !swift-format -i %") vim.cmd("silent! noautocmd !swift-format -i %")
vim.cmd("checktime") vim.cmd("checktime")
end
end end
''; end
} '';
]; }
}; ];
} };
) })
]; ];
} }

View file

@ -11,7 +11,6 @@
home.packages = with pkgs; [ home.packages = with pkgs; [
vhs vhs
libqalculate
]; ];
} }
) )

View file

@ -79,7 +79,7 @@
bind -N "+^+t join pane" J join-pane -t 1 bind -N "+^+t join pane" J join-pane -t 1
bind -N "+e editor" E new-window -S -n '📝' 'nvim +GoToFile' bind -N "+e editor" E new-window -S -n '📝' 'nvim +GoToFile'
bind -N "+g jjui" g new-window -S -n '🌳' 'jjui' bind -N "+g lazyjj" g new-window -S -n '🌳' 'lazyjj'
bind -N "++Q kill current session" Q kill-session bind -N "++Q kill current session" Q kill-session
bind -N "++T break pane" B break-pane bind -N "++T break pane" B break-pane
@ -116,7 +116,7 @@
fzf fzf
fd fd
zoxide zoxide
jjui lazyjj
]; ];
programs.zsh = { programs.zsh = {

View file

@ -2,39 +2,33 @@
{ {
config.dendritic.features = { config.dendritic.features = {
secrets-home-sops.homeModules = [ secrets-home-sops.homeModules = [
( ({ inputs, config, ... }: {
{ inputs, config, ... }: imports = [
{ inputs.sops-nix.homeModules.sops
imports = [ ];
inputs.sops-nix.homeModules.sops
];
sops.defaultSopsFile = ../../secrets/users/${config.dendritic.current.primaryUser}.yaml; sops.defaultSopsFile = ../../secrets/users/${config.dendritic.current.primaryUser}.yaml;
sops.defaultSopsFormat = "yaml"; sops.defaultSopsFormat = "yaml";
sops.age.keyFile = "${config.home.homeDirectory}/.config/sops/age/keys.txt"; sops.age.keyFile = "${config.home.homeDirectory}/.config/sops/age/keys.txt";
sops.secrets."user/test" = { sops.secrets."user/test" = {
path = ".config/secrets/test"; path = ".config/secrets/test";
}; };
} })
)
]; ];
secrets-system-sops.nixosModules = [ secrets-system-sops.nixosModules = [
( ({ inputs, config, ... }: {
{ inputs, config, ... }: imports = [
{ inputs.sops-nix.nixosModules.sops
imports = [ ];
inputs.sops-nix.nixosModules.sops
];
sops.defaultSopsFile = ../../secrets/hosts/${config.dendritic.current.hostName}.yaml; sops.defaultSopsFile = ../../secrets/hosts/${config.dendritic.current.hostName}.yaml;
sops.defaultSopsFormat = "yaml"; sops.defaultSopsFormat = "yaml";
sops.age.keyFile = "/home/${config.dendritic.current.primaryUser}/.config/sops/age/keys.txt"; sops.age.keyFile = "/home/${config.dendritic.current.primaryUser}/.config/sops/age/keys.txt";
sops.secrets."system/example" = { }; sops.secrets."system/example" = { };
} })
)
]; ];
}; };
} }

View file

@ -1,5 +1,4 @@
{ pkgs, ... }: {pkgs, ...}: {
{
home.packages = with pkgs; [ home.packages = with pkgs; [
cachix cachix
devenv devenv

View file

@ -1,6 +1,5 @@
# ✨ Magical shell history # ✨ Magical shell history
{ ... }: {...}: {
{
programs.atuin = { programs.atuin = {
enable = true; enable = true;
flags = [ flags = [

View file

@ -1,6 +1,5 @@
# A cat clone with syntax highlighting and Git integration. # A cat clone with syntax highlighting and Git integration.
{ ... }: {...}: {
{
programs.bat = { programs.bat = {
enable = true; enable = true;
}; };

View file

@ -1,6 +1,5 @@
# An interactive treeview directory navigator # An interactive treeview directory navigator
{ ... }: {...}: {
{
programs.broot = { programs.broot = {
enable = true; enable = true;
enableZshIntegration = true; enableZshIntegration = true;

View file

@ -1,5 +1,4 @@
{ ... }: {...}: {
{
programs.btop = { programs.btop = {
enable = true; enable = true;
}; };

View file

@ -1,6 +1,5 @@
# A modern replacement for 'ls'. # A modern replacement for 'ls'.
{ ... }: {...}: {
{
programs.eza = { programs.eza = {
enable = true; enable = true;
enableZshIntegration = true; enableZshIntegration = true;

View file

@ -3,13 +3,11 @@
config, config,
lib, lib,
... ...
}: }: let
let
accent = "#" + config.lib.stylix.colors.base0D; accent = "#" + config.lib.stylix.colors.base0D;
foreground = "#" + config.lib.stylix.colors.base05; foreground = "#" + config.lib.stylix.colors.base05;
muted = "#" + config.lib.stylix.colors.base03; muted = "#" + config.lib.stylix.colors.base03;
in in {
{
programs.fzf = { programs.fzf = {
enable = true; enable = true;
enableZshIntegration = true; enableZshIntegration = true;

View file

@ -2,8 +2,7 @@
pkgs, pkgs,
lib, lib,
... ...
}: }: {
{
programs.ghostty = { programs.ghostty = {
enable = true; enable = true;
enableZshIntegration = true; enableZshIntegration = true;
@ -14,7 +13,7 @@
auto-update = "off"; auto-update = "off";
working-directory = "home"; working-directory = "home";
window-inherit-working-directory = false; # avoid inheritance window-inherit-working-directory = false; # avoid inheritance
keybinds = [ ]; keybinds = [];
# background-opacity = 0.8; # background-opacity = 0.8;
background-opacity = 1; background-opacity = 1;
confirm-close-surface = false; confirm-close-surface = false;

View file

@ -1,6 +1,5 @@
# A terminal-based Kubernetes CLI. # A terminal-based Kubernetes CLI.
{ ... }: {...}: {
{
programs.k9s = { programs.k9s = {
enable = true; enable = true;
}; };

View file

@ -1,5 +1,4 @@
{ pkgs }: {pkgs}: {
{
browser = "${pkgs.firefox}/bin/firefox"; browser = "${pkgs.firefox}/bin/firefox";
terminal = "${pkgs.ghostty}/bin/ghostty"; terminal = "${pkgs.ghostty}/bin/ghostty";
fileManager = "${pkgs.thunar}/bin/thunar"; fileManager = "${pkgs.thunar}/bin/thunar";

View file

@ -2,8 +2,7 @@
config, config,
pkgs, pkgs,
... ...
}: }: {
{
home.sessionVariables = { home.sessionVariables = {
XDG_ICON_DIR = "${pkgs.whitesur-icon-theme}/share/icons/WhiteSur"; XDG_ICON_DIR = "${pkgs.whitesur-icon-theme}/share/icons/WhiteSur";
GSETTINGS_SCHEMA_DIR = "${pkgs.gsettings-desktop-schemas}/share/gsettings-schemas/${pkgs.gsettings-desktop-schemas.name}/glib-2.0/schemas"; GSETTINGS_SCHEMA_DIR = "${pkgs.gsettings-desktop-schemas}/share/gsettings-schemas/${pkgs.gsettings-desktop-schemas.name}/glib-2.0/schemas";
@ -53,18 +52,18 @@
layout = { layout = {
preset-column-widths = [ preset-column-widths = [
{ proportion = 1. / 3.; } {proportion = 1. / 3.;}
{ proportion = 1. / 2.; } {proportion = 1. / 2.;}
{ proportion = 2. / 3.; } {proportion = 2. / 3.;}
]; ];
default-column-width = { default-column-width = {
proportion = 0.5; proportion = 0.5;
}; };
preset-window-heights = [ preset-window-heights = [
{ proportion = 1. / 3.; } {proportion = 1. / 3.;}
{ proportion = 1. / 2.; } {proportion = 1. / 2.;}
{ proportion = 2. / 3.; } {proportion = 2. / 3.;}
]; ];
background-color = "#00000000"; background-color = "#00000000";

View file

@ -1,9 +1,8 @@
# ✨ password manager # ✨ password manager
{ pkgs, ... }: {pkgs, ...}: {
{
programs.password-store = { programs.password-store = {
enable = true; enable = true;
package = pkgs.pass.withExtensions (exts: [ exts.pass-otp ]); package = pkgs.pass.withExtensions (exts: [exts.pass-otp]);
}; };
home.packages = with pkgs; [ home.packages = with pkgs; [

View file

@ -3,12 +3,10 @@
config, config,
lib, lib,
... ...
}: }: let
let
accent = "#${config.lib.stylix.colors.base0D}"; accent = "#${config.lib.stylix.colors.base0D}";
background-alt = "#${config.lib.stylix.colors.base01}"; background-alt = "#${config.lib.stylix.colors.base01}";
in in {
{
programs.starship = { programs.starship = {
enable = true; enable = true;
enableZshIntegration = true; enableZshIntegration = true;

View file

@ -1,22 +0,0 @@
{
config.dendritic.hosts.grymforge = {
system = "x86_64-linux";
type = "desktop";
roles = [
"workstation"
];
primaryUser = "gwg313";
primaryUserExtraGroups = [
"wheel"
"networkmanager"
"audio"
];
nixosModules = [
../nixos/hardware/grymforge.nix
../nixos/hosts/candlekeep/ssh.nix
../nixos/hosts/candlekeep/nfs.nix
../nixos/hosts/candlekeep/networking.nix
];
};
}

View file

@ -2,8 +2,7 @@
lib, lib,
config, config,
... ...
}: }: {
{
config = lib.mkIf config.bluetooth.enable { config = lib.mkIf config.bluetooth.enable {
services.blueman.enable = true; services.blueman.enable = true;
hardware.bluetooth = { hardware.bluetooth = {

View file

@ -1,5 +1,4 @@
{ _ }: {_}: {
{
# Disable so comma can be installed # Disable so comma can be installed
programs.command-not-found.enable = false; programs.command-not-found.enable = false;
programs.nix-index-database.comma.enable = true; programs.nix-index-database.comma.enable = true;

View file

@ -2,11 +2,10 @@
config, config,
pkgs, pkgs,
... ...
}: }: {
{
services.dbus = { services.dbus = {
enable = true; enable = true;
packages = [ pkgs.dconf ]; packages = [pkgs.dconf];
}; };
programs.dconf = { programs.dconf = {

View file

@ -1,5 +1,4 @@
{ pkgs, ... }: {pkgs, ...}: {
{
programs.gnupg.agent = { programs.gnupg.agent = {
enable = true; enable = true;
enableSSHSupport = true; enableSSHSupport = true;

View file

@ -1,5 +1,4 @@
{ pkgs, ... }: {pkgs, ...}: {
{
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
wlr-randr wlr-randr
wl-clipboard wl-clipboard

View file

@ -7,8 +7,7 @@
pkgs, pkgs,
modulesPath, modulesPath,
... ...
}: }: {
{
imports = [ imports = [
(modulesPath + "/installer/scan/not-detected.nix") (modulesPath + "/installer/scan/not-detected.nix")
# ../../common/nixos/nfs.nix # ../../common/nixos/nfs.nix
@ -21,25 +20,23 @@
"sd_mod" "sd_mod"
"rtsx_pci_sdmmc" "rtsx_pci_sdmmc"
]; ];
boot.initrd.kernelModules = [ ]; boot.initrd.kernelModules = [];
boot.kernelModules = [ "kvm-amd" ]; boot.kernelModules = ["kvm-amd"];
boot.extraModulePackages = [ ]; boot.extraModulePackages = [];
boot = { boot = {
loader = { loader = {
systemd-boot.enable = true; systemd-boot.enable = true;
efi.canTouchEfiVariables = true; efi.canTouchEfiVariables = true;
}; };
initrd.luks.devices."luks-1dbfdeb6-8537-41b2-abf0-09373af3eeee".device = initrd.luks.devices."luks-1dbfdeb6-8537-41b2-abf0-09373af3eeee".device = "/dev/disk/by-uuid/1dbfdeb6-8537-41b2-abf0-09373af3eeee";
"/dev/disk/by-uuid/1dbfdeb6-8537-41b2-abf0-09373af3eeee";
}; };
fileSystems."/" = { fileSystems."/" = {
device = "/dev/disk/by-uuid/c79b630a-d130-42ed-8cdc-3f8545fe2993"; device = "/dev/disk/by-uuid/c79b630a-d130-42ed-8cdc-3f8545fe2993";
fsType = "ext4"; fsType = "ext4";
}; };
boot.initrd.luks.devices."luks-96e3b309-ca79-4b42-aca5-3f098b123758".device = boot.initrd.luks.devices."luks-96e3b309-ca79-4b42-aca5-3f098b123758".device = "/dev/disk/by-uuid/96e3b309-ca79-4b42-aca5-3f098b123758";
"/dev/disk/by-uuid/96e3b309-ca79-4b42-aca5-3f098b123758";
fileSystems."/boot" = { fileSystems."/boot" = {
device = "/dev/disk/by-uuid/1FBA-8B80"; device = "/dev/disk/by-uuid/1FBA-8B80";
fsType = "vfat"; fsType = "vfat";
@ -49,7 +46,7 @@
]; ];
}; };
swapDevices = [ swapDevices = [
{ device = "/dev/disk/by-uuid/17eec89e-2381-4a25-8935-63cbcc67d07c"; } {device = "/dev/disk/by-uuid/17eec89e-2381-4a25-8935-63cbcc67d07c";}
]; ];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking # Enables DHCP on each ethernet and wireless interface. In case of scripted networking

View file

@ -1,68 +0,0 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{
config,
lib,
pkgs,
modulesPath,
...
}:
{
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = [
"nvme"
"xhci_pci"
"usbhid"
"usb_storage"
"sd_mod"
];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-amd" ];
boot.extraModulePackages = [ ];
boot = {
loader = {
systemd-boot.enable = true;
efi.canTouchEfiVariables = true;
};
initrd.luks.devices."luks-ab8d2b18-14de-44ff-a7b5-91d5f5d0e937".device =
"/dev/disk/by-uuid/ab8d2b18-14de-44ff-a7b5-91d5f5d0e937";
};
fileSystems."/" = {
device = "/dev/disk/by-uuid/95565731-9a95-4fcc-857d-1f066f4e4acf";
fsType = "ext4";
};
boot.initrd.luks.devices."luks-c140b0df-2cce-4710-a2fa-94dd3016a7e6".device =
"/dev/disk/by-uuid/c140b0df-2cce-4710-a2fa-94dd3016a7e6";
fileSystems."/boot" = {
device = "/dev/disk/by-uuid/34C4-ECCE";
fsType = "vfat";
options = [
"fmask=0077"
"dmask=0077"
];
};
swapDevices = [
{ device = "/dev/disk/by-uuid/2fea88dc-b9a8-40d6-a87d-f7383548e60d"; }
];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.enp1s0.useDHCP = lib.mkDefault true;
# networking.interfaces.wlo1.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}

View file

@ -1,5 +1,4 @@
{ _ }: {_}: {
{
# Set your time zone. # Set your time zone.
time.timeZone = "America/Toronto"; time.timeZone = "America/Toronto";

View file

@ -1,5 +1,4 @@
{ pkgs, ... }: {pkgs, ...}: {
{
# Enable sound with pipewire. # Enable sound with pipewire.
hardware.pulseaudio.enable = false; hardware.pulseaudio.enable = false;
# hardware.alsa.enablePersistence = true; # hardware.alsa.enablePersistence = true;
@ -19,7 +18,7 @@
"context.properties" = { "context.properties" = {
"default.clock.rate" = 192000; "default.clock.rate" = 192000;
#"defautlt.allowed-rates" = [ 192000 48000 44100 ]; #"defautlt.allowed-rates" = [ 192000 48000 44100 ];
"defautlt.allowed-rates" = [ 192000 ]; "defautlt.allowed-rates" = [192000];
#"default.clock.quantum" = 32; #"default.clock.quantum" = 32;
#"default.clock.min-quantum" = 32; #"default.clock.min-quantum" = 32;
#"default.clock.max-quantum" = 32; #"default.clock.max-quantum" = 32;

View file

@ -2,8 +2,7 @@
config, config,
lib, lib,
... ...
}: }: {
{
services.sshguard = { services.sshguard = {
enable = true; enable = true;
services = [ services = [

View file

@ -2,8 +2,7 @@
config, config,
pkgs, pkgs,
... ...
}: }: {
{
boot.kernel.sysctl = { boot.kernel.sysctl = {
# disallow core dumping by SUID/SGID programs # disallow core dumping by SUID/SGID programs
"fs.suid_dumpable" = 0; "fs.suid_dumpable" = 0;

View file

@ -2,8 +2,7 @@
config, config,
pkgs, pkgs,
... ...
}: }: {
{
boot.kernel.sysctl = { boot.kernel.sysctl = {
}; };
} }

View file

@ -2,8 +2,7 @@
config, config,
pkgs, pkgs,
... ...
}: }: {
{
boot.kernel.sysctl = { boot.kernel.sysctl = {
# enable BBR congestion control # enable BBR congestion control
"net.ipv4.tcp_congestion_control" = "bbr"; "net.ipv4.tcp_congestion_control" = "bbr";

View file

@ -2,8 +2,7 @@
config, config,
pkgs, pkgs,
... ...
}: }: {
{
boot.kernel.sysctl = { boot.kernel.sysctl = {
# disallow IPv6 packet forwarding # disallow IPv6 packet forwarding
"net.ipv6.conf.default.forwarding" = 0; "net.ipv6.conf.default.forwarding" = 0;

View file

@ -2,8 +2,7 @@
config, config,
pkgs, pkgs,
... ...
}: }: {
{
boot.kernel.sysctl = { boot.kernel.sysctl = {
# do not allow mmap in lower addresses # do not allow mmap in lower addresses
"vm.mmap_min_addr" = 65536; "vm.mmap_min_addr" = 65536;

View file

@ -2,37 +2,34 @@
{ {
options.dendritic.features = lib.mkOption { options.dendritic.features = lib.mkOption {
type = lib.types.attrsOf ( type = lib.types.attrsOf (
lib.types.submodule ( lib.types.submodule ({ name, ... }: {
{ name, ... }: options = {
{ name = lib.mkOption {
options = { type = lib.types.str;
name = lib.mkOption { default = name;
type = lib.types.str;
default = name;
};
features = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [ ];
};
nixosModules = lib.mkOption {
type = lib.types.listOf lib.types.deferredModule;
default = [ ];
};
homeModules = lib.mkOption {
type = lib.types.listOf lib.types.deferredModule;
default = [ ];
};
includeInEmbeddedHomeManager = lib.mkOption {
type = lib.types.bool;
default = true;
};
}; };
}
) features = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [ ];
};
nixosModules = lib.mkOption {
type = lib.types.listOf lib.types.deferredModule;
default = [ ];
};
homeModules = lib.mkOption {
type = lib.types.listOf lib.types.deferredModule;
default = [ ];
};
includeInEmbeddedHomeManager = lib.mkOption {
type = lib.types.bool;
default = true;
};
};
})
); );
default = { }; default = { };
}; };

View file

@ -1,54 +1,43 @@
{ lib, ... }: {lib, ...}: {
{
options.dendritic.hosts = lib.mkOption { options.dendritic.hosts = lib.mkOption {
type = lib.types.attrsOf ( type = lib.types.attrsOf (
lib.types.submodule ( lib.types.submodule ({name, ...}: {
{ name, ... }: options = {
{ name = lib.mkOption {
options = { type = lib.types.str;
name = lib.mkOption { default = name;
type = lib.types.str;
default = name;
};
system = lib.mkOption {
type = lib.types.str;
};
type = lib.mkOption {
type = lib.types.enum [
"laptop"
"desktop"
"server"
];
};
roles = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [ ];
};
primaryUser = lib.mkOption {
type = lib.types.nullOr lib.types.str;
default = null;
};
primaryUserExtraGroups = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [
"wheel"
"networkmanager"
];
};
nixosModules = lib.mkOption {
type = lib.types.listOf lib.types.deferredModule;
default = [ ];
};
}; };
}
) system = lib.mkOption {
type = lib.types.str;
};
type = lib.mkOption {
type = lib.types.enum ["laptop" "desktop" "server"];
};
roles = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [];
};
primaryUser = lib.mkOption {
type = lib.types.nullOr lib.types.str;
default = null;
};
primaryUserExtraGroups = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = ["wheel" "networkmanager"];
};
nixosModules = lib.mkOption {
type = lib.types.listOf lib.types.deferredModule;
default = [];
};
};
})
); );
default = { }; default = {};
}; };
} }

View file

@ -1,70 +1,63 @@
{ lib, ... }: {lib, ...}: {
{
options.dendritic.users = lib.mkOption { options.dendritic.users = lib.mkOption {
type = lib.types.attrsOf ( type = lib.types.attrsOf (
lib.types.submodule ( lib.types.submodule ({name, ...}: {
{ name, ... }: options = {
{ name = lib.mkOption {
options = { type = lib.types.str;
name = lib.mkOption { default = name;
type = lib.types.str;
default = name;
};
username = lib.mkOption {
type = lib.types.str;
default = name;
};
nixosModules = lib.mkOption {
type = lib.types.listOf lib.types.deferredModule;
default = [ ];
};
homeModules = lib.mkOption {
type = lib.types.listOf lib.types.deferredModule;
default = [ ];
};
homes = lib.mkOption {
type = lib.types.attrsOf (
lib.types.submodule (
{ name, ... }:
{
options = {
host = lib.mkOption {
type = lib.types.str;
default = name;
};
system = lib.mkOption {
type = lib.types.str;
};
stateVersion = lib.mkOption {
type = lib.types.str;
default = "25.05";
};
roles = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [ ];
};
extraModules = lib.mkOption {
type = lib.types.listOf lib.types.deferredModule;
default = [ ];
};
};
}
)
);
default = { };
};
}; };
}
) username = lib.mkOption {
type = lib.types.str;
default = name;
};
nixosModules = lib.mkOption {
type = lib.types.listOf lib.types.deferredModule;
default = [];
};
homeModules = lib.mkOption {
type = lib.types.listOf lib.types.deferredModule;
default = [];
};
homes = lib.mkOption {
type = lib.types.attrsOf (
lib.types.submodule ({name, ...}: {
options = {
host = lib.mkOption {
type = lib.types.str;
default = name;
};
system = lib.mkOption {
type = lib.types.str;
};
stateVersion = lib.mkOption {
type = lib.types.str;
default = "25.05";
};
roles = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [];
};
extraModules = lib.mkOption {
type = lib.types.listOf lib.types.deferredModule;
default = [];
};
};
})
);
default = {};
};
};
})
); );
default = { }; default = {};
}; };
} }

View file

@ -17,12 +17,5 @@
roles = [ "workstation" ]; roles = [ "workstation" ];
extraModules = [ ]; extraModules = [ ];
}; };
homes.grymforge = {
system = "x86_64-linux";
stateVersion = "25.11";
roles = [ "workstation" ];
extraModules = [ ];
};
}; };
} }

View file

@ -1,17 +0,0 @@
system:
example: ENC[AES256_GCM,data:HGduc8uq6YhzDBM=,iv:IDdNjIjWAhTEzHiGrsuSpHSjidpeFnGdzkiBCjBv5H4=,tag:pm2IGSy3siDAhn2E7lMUhA==,type:str]
sops:
age:
- recipient: age1k3hs0gyzrmsdyqh9lpret46q3xaayxxntruzc4euy6h3slqn4u6q36h7rg
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA0R1VYMmEvdWk5UzBQLzds
Q2JzSC9zZFJVWldHbTlkdTIrSXNFLzZqdjBFClJqZmxTSCtjeGwxNjA3VFVscEtP
NEhOcU9la2MzNWNEK1NwU0dNTHlPNFUKLS0tIHVWVlRkRHlwb21IemRFS3FTT1kz
U21XTEVjNWgzVHVYQ2dDQmIrV21EdGMKw14LaWlK9WbBXxnNvKfNgg44K9/Y7p5H
+3QeahQRu8OYn/tFyaMiRxIzLWOhBhtdqAH8k2GN2X5TxzGA1vxGXg==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2026-04-14T00:22:17Z"
mac: ENC[AES256_GCM,data:bPSDTqcfnnUcj80y+9qUfWkX9NcBWdQETMC3qyZYB3FWrJryepWn4bMUEb5IBfwcZXiKWmvyOTXjFYEkx4F4YGZA0qz3usuq6EjeZDSFrpf9Itr9wdc400mc7cf5YFtNOkf+BuE3nsYQDj1KViBKReEgMjZe9bHjvmi1f+utvjM=,iv:DcvjgVAUTily7Xm1+3NCA7/P3+qE05WlQkkqKggm27g=,tag:47TIh6ybU4Cu8QybMxuz/g==,type:str]
unencrypted_suffix: _unencrypted
version: 3.12.2