{ config, lib, pkgs, ... }: with lib; let cfg = config.grimmShared; sync_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"; }; }; }); screen = types.submodule { options = { fps = mkOption { type = types.int; default = 60; description = "max framerate of screen"; }; mode = mkOption { type = types.nonEmptyStr; default = "1920x1080"; description = "pixel format of the screen"; }; id = mkOption { type = types.nonEmptyStr; description = "ID of the screen"; }; pos = mkOption { type = types.nullOr types.nonEmptyStr; default = null; example = "0,0"; description = "position where to place the screen"; }; }; }; sway_conf = types.submodule ({ config, ... }: rec { options = { 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"; }; definitions = mkOption { type = types.attrsOf types.str; default = { }; description = "set of definitions assigning variable to value"; }; modes = mkOption { type = types.attrsOf sway_conf; default = { }; description = "possible modes to switch to, e.g. resize"; }; }; }); 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"; }; }; screens = mkOption { type = types.attrsOf screen; default = { }; description = "Screens to initialize"; }; sway = { enable = mkEnableOption "grimm-sway"; bar = { enable = mkEnableOption "grimm-sway-bar"; style = mkOption { type = types.nullOr types.path; default = null; description = "waybar style sheet to use"; }; config = mkOption { type = types.nullOr types.path; default = null; description = "waybar config to use"; }; }; config = mkOption { type = sway_conf; description = "sway 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"; }; }; }; options.users.users = mkOption { type = types.attrsOf (types.submodule { options = { syncPaths = mkOption { type = types.listOf sync_mod; default = [ ]; description = "paths to sync via nextcloud"; }; }; }); }; 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 ]; }