PortValhalla/lib/modules/programs.nix

118 lines
3 KiB
Nix

{ lib, config, ... }:
let
inherit (lib) mkEnableOption mkDefault mkOption types;
cfg = config.valhalla;
mkUsersOption = programs: osConfig: mkOption {
type = types.attrsOf (types.submodule (
{ config, ... }: {
options = {
inherit programs;
};
config = {
programs = lib.attrsets.concatMapAttrs
(
name: program:
if (builtins.elem name (builtins.attrNames config.programs)) then {
${name} = {
enable = mkDefault program.enable;
};
} else { }
)
osConfig.programs;
};
}
));
};
mkPrograms = infos: builtins.foldl'
(programs: info:
programs // {
${builtins.elemAt info 0} = {
enable = mkEnableOption (builtins.elemAt info 1);
};
})
{ }
infos;
programs = mkPrograms [
[ "aliae" "aliae" ]
[ "brave" "Brave Browser" ]
[ "discord" "Discord" ]
[ "firefox" "Firefox Web Browser" ]
[ "openssh" "OpenSSH" ]
[ "osu!lazer" "osu!lazer" ]
[ "pennywise" "Pennywise" ]
[ "powershell" "PowerShell Core" ]
[ "retroarch" "RetroArch" ]
[ "steam" "Steam" ]
[ "thunderbird" "Thunderbird" ]
[ "vscode" "Visual Studio Code" ]
[ "zoxide" "zoxide" ]
];
linuxPrograms = mkPrograms [
[ "bash" "Bash" ]
[ "fish" "fish" ]
[ "icedtea" "IcedTea" ]
[ "grub" "GRUB" ]
[ "logo-ls" "logo-ls" ]
[ "lutris" "Lutris" ]
[ "minegrub-theme" "Minegrub Theme" ]
[ "networkmanager" "NetworkManager" ]
[ "nginx" "nginx" ]
[ "nodejs-n" "n" ]
[ "nuke-usb" "nuke-usb" ]
[ "nvidia-dkms" "Nvidia Drivers" ]
[ "plasma" "Plasma" ]
[ "pyenv" "pyenv" ]
[ "sddm" "SDDM" ]
[ "vim" "Vim" ]
[ "virt-manager" "Virtual Machine Manager" ]
[ "waydroid" "Waydroid" ]
[ "xone" "xone" ]
];
windowsPrograms = mkPrograms [
[ "lghub" "Logitech G Hub" ]
[ "maniaplanet" "ManiaPlanet" ]
[ "msedge-redirect" "MSEdgeRedirect" ]
[ "nvs" "Node Version Switcher" ]
[ "osu!" "Osu!" ]
[ "posh-git" "posh-git" ]
[ "putty" "PuTTY" ]
[ "rewasd" "reWASD" ]
[ "terminal-icons" "Terminal Icons" ]
[ "tm-nations-forever" "TrackMania Nations Forever" ]
[ "tm-united-forever" "TrackMania United Forever" ]
[ "tobii-gamehub" "Tobii Game Hub" ]
[ "tobii-ghost" "Tobii Ghost" ]
[ "ubiquiti-unifi-controller" "Ubiquiti UniFi Controller" ]
[ "visualstudio" "Visual Studio" ]
[ "winscp" "WinSCP" ]
];
in
{
imports = [
./programs/btrfs.nix
./programs/docker.nix
./programs/git.nix
./programs/nextcloud.nix
./programs/oh-my-posh.nix
./programs/rclone.nix
./programs/systemd-networkd.nix
];
options = {
valhalla = {
users = mkUsersOption programs cfg;
linux.users = mkUsersOption linuxPrograms cfg.linux;
windows.users = mkUsersOption windowsPrograms cfg.windows;
inherit programs;
linux.programs = linuxPrograms;
windows.programs = windowsPrograms;
};
};
}