{ config, lib, pkgs, ... }: with lib; let cfg = config.grimmShared; in { options.grimmShared = { enable = mkEnableOption "grimm-shared-common"; locale = mkOption { type = types.bool; default = true; description = "Sets german units but english language"; }; printing = mkOption { type = types.bool; default = false; description = "Enables print and scan related options"; }; portals = mkOption { type = types.bool; default = false; description = "Enables portals for wlr, gtk and kde as well as fixes fonts"; }; network = mkOption { type = types.bool; default = false; description = "Enables network manager, wifi and bluetooth"; }; tooling = { enable = mkEnableOption "grimm-tooling"; pass = mkOption { type = types.bool; default = true; description = "Enables password-store, gnupg and such secret handling"; }; git_user = mkOption { type = types.str; default = "Grimmauld"; description = "Username for git to use"; }; git_email = mkOption { type = types.str; default = "${config.grimmShared.tooling.git_user}@grimmauld.de"; description = "Email for git to use"; }; }; sound = mkOption { type = types.bool; default = false; description = "whether to enable sound"; }; graphical = mkOption { type = types.bool; default = false; description = "whether to enable graphical components"; }; gaming = mkOption { type = types.bool; default = false; description = "enables steam, heroic, prism and gamemoded"; }; firefox = { enable = mkEnableOption "grimm-firefox"; plugins = mkOption { type = types.attrsOf types.str; default = {}; description = "set of plugins to install. Format: guid = short-id"; }; disableUserPlugins = mkOption { type = types.bool; default = false; description = "disables user controlled plugins"; }; }; sway = { enable = mkEnableOption "grimm-sway"; definitions = mkOption { type = types.attrsOf types.str; default = {}; description = "set of definitions assigning variable to value"; }; keybinds = mkOption { type = types.attrsOf types.str; default = {}; description = "set of keybinds assigning key combo to action"; }; autolaunch = mkOption { type = types.listOf types.str; default = []; description = "set of commands to be run at sway startup"; }; extraConfig = mkOption { type = types.str; default = ""; description = "additional sway config to be included"; }; barStyle = mkOption { type = types.nullOr types.path; default = null; description = "waybar style sheet to use"; }; barConfig = mkOption { type = types.nullOr types.path; default = null; description = "waybar config to use"; }; }; cloudSync = { enable = mkEnableOption "cloud_sync"; username = mkOption { type = types.nonEmptyStr; description = "username to use for cloud login"; }; server = mkOption { type = types.nonEmptyStr; description = "server url to use for cloud sync"; }; passwordFile = mkOption { type = types.nonEmptyStr; description = "password file to use for login"; }; paths = mkOption { type = let mod = types.submodule ({config, ...} : { options = { remote = mkOption { type = types.nonEmptyStr; description = "path on the cloud server"; }; local = mkOption { type = types.nonEmptyStr; default = "$HOME/" + (lib.strings.concatStrings (builtins.match "/*(.+)" config.remote)); description = "local path to sync"; }; }; }); in types.attrsOf (types.listOf mod); default = []; description = "puts my personal config in place using above methods"; }; }; }; imports = [ ./common/localisation.nix ./common/printing.nix ./common/portals.nix ./common/networking.nix ./common/toolchains.nix ./common/sound.nix ./common/opengl.nix ./common/gaming.nix ./common/firefox.nix ./common/pass.nix ./common/sway.nix ./common/cloudsync.nix ]; }