commit 35fead0d0b3b2ce4772ce703807419001edda200 Author: davedatum Date: Mon Oct 28 13:48:02 2019 +0000 Initial commit diff --git a/branding/tromjaro/branding.desc b/branding/tromjaro/branding.desc new file mode 100644 index 0000000..60ab9f1 --- /dev/null +++ b/branding/tromjaro/branding.desc @@ -0,0 +1,87 @@ +--- +componentName: tromjaro + +# This selects between different welcome texts. When false, uses +# the traditional "Welcome to the %1 installer.", and when true, +# uses "Welcome to the Calamares installer for %1." This allows +# to distinguish this installer from other installers for the +# same distribution. +welcomeStyleCalamares: false + +# Should the welcome image (productWelcome, below) be scaled +# up beyond its natural size? If false, the image does not grow +# with the window but remains the same size throughout (this +# may have surprising effects on HiDPI monitors). +welcomeExpandingLogo: true + +# Size and expansion policy for Calamares. +# - "normal" or unset, expand as needed, use *windowSize* +# - "fullscreen", start as large as possible, ignore *windowSize* +# - "noexpand", never expand, use *windowSize* +windowExpanding: noexpand + +# Size of Calamares window, expressed as w,h. Both w and h +# may be either pixels (suffix px) or font-units (suffix em). +# e.g. "800px,600px" +# "60em,480px" +# This setting is ignored if "fullscreen" is selected for +# *windowExpanding*, above. If not set, use constants defined +# in CalamaresUtilsGui, 800x520. +windowSize: 800px,520px + +# These are strings shown to the user in the user interface. +# There is no provision for translating them -- since they +# are names, the string is included as-is. +# +# The four Url strings are the Urls used by the buttons in +# the welcome screen, and are not shown to the user. Clicking +# on the "Support" button, for instance, opens the link supportUrl. +# If a Url is empty, the corresponding button is not shown. +# +# bootloaderEntryName is how this installation / distro is named +# in the boot loader (e.g. in the GRUB menu). +strings: + productName: TROMjaro Linux + shortProductName: TROMjaro + version: 18.0 + shortVersion: 18.0 + versionedName: TROMjaro Linux 18.0 "Illyria" + shortVersionedName: TROMjaro 18.0 + bootloaderEntryName: TROMjaro + +# These images are loaded from the branding module directory. +# +# productIcon is used as the window icon, and will (usually) be used +# by the window manager to represent the application. This image +# should be square, and may be displayed by the window manager +# as small as 16x16 (but possibly larger). +# productLogo is used as the logo at the top of the left-hand column +# which shows the steps to be taken. The image should be square, +# and is displayed at 80x80 pixels (also on HiDPI). +# productWelcome is shown on the welcome page of the application in +# the middle of the window, below the welcome text. It can be +# any size and proportion, and will be scaled to fit inside +# the window. Use `welcomeExpandingLogo` to make it non-scaled. +# Recommended size is 320x150. +images: + productLogo: "logo.png" + productIcon: "logo.png" + productWelcome: "languages.png" + +# The slideshow is displayed during execution steps (e.g. when the +# installer is actually writing to disk and doing other slow things). +slideshow: "show.qml" + +# Colors for text and background components. +# +# - sidebarBackground is the background of the sidebar +# - sidebarText is the (foreground) text color +# - sidebarTextHighlight sets the background of the selected (current) step. +# Optional, and defaults to the application palette. +# - sidebarSelect is the text color of the selected step. +# +style: + sidebarBackground: "#454948" + sidebarText: "#efefef" + sidebarTextSelect: "#4d915e" + sidebarTextHighlight: "#1a1c1b" diff --git a/branding/tromjaro/languages.png b/branding/tromjaro/languages.png new file mode 100644 index 0000000..6ad1f50 Binary files /dev/null and b/branding/tromjaro/languages.png differ diff --git a/branding/tromjaro/logo.png b/branding/tromjaro/logo.png new file mode 100644 index 0000000..60be8a3 Binary files /dev/null and b/branding/tromjaro/logo.png differ diff --git a/branding/tromjaro/show.qml b/branding/tromjaro/show.qml new file mode 100644 index 0000000..634424c --- /dev/null +++ b/branding/tromjaro/show.qml @@ -0,0 +1,131 @@ +/* === This file is part of Calamares - === + * + * Copyright 2015, Teo Mrnjavac + * + * Calamares is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Calamares is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Calamares. If not, see . + */ + +/* + * Slides images dimensions are 800x440px. + */ + +import QtQuick 2.0; +import calamares.slideshow 1.0; + +Presentation +{ + id: presentation + + Timer { + interval: 20000 + running: true + repeat: true + onTriggered: presentation.goToNextSlide() + } + + Slide { + + Image { + id: background1 + source: "slide1.png" + width: 800; height: 440 + fillMode: Image.PreserveAspectFit + anchors.centerIn: parent + } + Text { + anchors.horizontalCenter: background1.horizontalCenter + anchors.top: background1.bottom + text: "" + wrapMode: Text.WordWrap + width: 800 + horizontalAlignment: Text.Center + } + } + + Slide { + + Image { + id: background2 + source: "slide2.png" + width: 800; height: 440 + fillMode: Image.PreserveAspectFit + anchors.centerIn: parent + } + Text { + anchors.horizontalCenter: background2.horizontalCenter + anchors.top: background2.bottom + text: "" + wrapMode: Text.WordWrap + width: 800 + horizontalAlignment: Text.Center + } + } + + Slide { + + Image { + id: background3 + source: "slide3.png" + width: 800; height: 440 + fillMode: Image.PreserveAspectFit + anchors.centerIn: parent + } + Text { + anchors.horizontalCenter: background3.horizontalCenter + anchors.top: background3.bottom + text: "" + wrapMode: Text.WordWrap + width: 800 + horizontalAlignment: Text.Center + } + } + + Slide { + + Image { + id: background4 + source: "slide4.png" + width: 800; height: 440 + fillMode: Image.PreserveAspectFit + anchors.centerIn: parent + } + Text { + anchors.horizontalCenter: background4.horizontalCenter + anchors.top: background4.bottom + text: "" + wrapMode: Text.WordWrap + width: 800 + horizontalAlignment: Text.Center + } + } + + Slide { + + Image { + id: background5 + source: "slide5.png" + width: 800; height: 440 + fillMode: Image.PreserveAspectFit + anchors.centerIn: parent + } + Text { + anchors.horizontalCenter: background5.horizontalCenter + anchors.top: background5.bottom + text: "" + wrapMode: Text.WordWrap + width: 800 + horizontalAlignment: Text.Center + } + } +} diff --git a/branding/tromjaro/slide1.png b/branding/tromjaro/slide1.png new file mode 100644 index 0000000..94f13a0 Binary files /dev/null and b/branding/tromjaro/slide1.png differ diff --git a/branding/tromjaro/slide2.png b/branding/tromjaro/slide2.png new file mode 100644 index 0000000..54a64b3 Binary files /dev/null and b/branding/tromjaro/slide2.png differ diff --git a/branding/tromjaro/slide3.png b/branding/tromjaro/slide3.png new file mode 100644 index 0000000..a320451 Binary files /dev/null and b/branding/tromjaro/slide3.png differ diff --git a/branding/tromjaro/slide4.png b/branding/tromjaro/slide4.png new file mode 100644 index 0000000..89ab708 Binary files /dev/null and b/branding/tromjaro/slide4.png differ diff --git a/branding/tromjaro/slide5.png b/branding/tromjaro/slide5.png new file mode 100644 index 0000000..004f234 Binary files /dev/null and b/branding/tromjaro/slide5.png differ diff --git a/branding/tromjaro/squid.png b/branding/tromjaro/squid.png new file mode 100644 index 0000000..452e445 Binary files /dev/null and b/branding/tromjaro/squid.png differ diff --git a/modules/bootloader.conf b/modules/bootloader.conf new file mode 100644 index 0000000..51337de --- /dev/null +++ b/modules/bootloader.conf @@ -0,0 +1,54 @@ +# Bootloader configuration. The bootloader is installed to allow +# the system to start (and pick one of the installed operating +# systems to run). +--- +# Define which bootloader you want to use for EFI installations +# Possible options are 'grub', 'sb-shim' and 'systemd-boot'. +efiBootLoader: "grub" + +# systemd-boot configuration files settings, set kernel and initramfs file names +# and amount of time before default selection boots +kernel: "_ALL_kver_" +img: "_default_image_" +fallback: "_fallback_image_" +timeout: "10" + +# Optionally set the menu entry name and kernel name to use in systemd-boot. +# If not specified here, these settings will be taken from branding.desc. +# +# bootloaderEntryName: "Manjaro" +kernelLine: ", with _manjaro_kernel_" +fallbackKernelLine: ", with _manjaro_kernel_ (fallback initramfs)" + +# GRUB 2 binary names and boot directory +# Some distributions (e.g. Fedora) use grub2-* (resp. /boot/grub2/) names. +# These names are also used when using sb-shim, since that needs some +# GRUB functionality (notably grub-probe) to work. As needed, you may use +# complete paths like `/usr/bin/efibootmgr` for the executables. +# +grubInstall: "grub-install" +grubMkconfig: "grub-mkconfig" +grubCfg: "/boot/grub/grub.cfg" +grubProbe: "grub-probe" +efiBootMgr: "efibootmgr" + +# Optionally set the bootloader ID to use for EFI. This is passed to +# grub-install --bootloader-id. +# +# If not set here, the value from bootloaderEntryName from branding.desc +# is used, with problematic characters (space and slash) replaced. +# +# The ID is also used as a directory name within the EFI environment, +# and the bootloader is copied from /boot/efi/EFI// . When +# setting the option here, keep in mind that the name is sanitized +# (problematic characters, see above, are replaced). +# +# efiBootloaderId: "dirname" + +# Optionally install a copy of the GRUB EFI bootloader as the EFI +# fallback loader (either bootia32.efi or bootx64.efi depending on +# the system). This may be needed on certain systems (Intel DH87MC +# seems to be the only one). If you set this to false, take care +# to add another module to optionally install the fallback on those +# boards that need it. +installEFIFallback: true diff --git a/modules/chrootcfg.conf b/modules/chrootcfg.conf new file mode 100644 index 0000000..1f900c2 --- /dev/null +++ b/modules/chrootcfg.conf @@ -0,0 +1,14 @@ +--- +requirements: + - name: /etc + mode: "0o755" + - name: /var/cache/pacman/pkg + mode: "0o755" + - name: /var/lib/pacman + mode: "0o755" + +isRank: true + +keyrings: + - archlinux + - manjaro diff --git a/modules/contextualprocess.conf b/modules/contextualprocess.conf new file mode 100644 index 0000000..74bd230 --- /dev/null +++ b/modules/contextualprocess.conf @@ -0,0 +1,46 @@ +# Configuration for the contextual process job. +# +# Contextual processes are based on **global** configuration values. +# When a given global value (string) equals a given value, then +# the associated command is executed. +# +# The special top-level keys *dontChroot* and *timeout* have +# meaning just like in shellprocess.conf. They are excluded from +# the comparison with global variables. +# +# Configuration consists of keys for global variable names (except +# *dontChroot* and *timeout*), and the sub-keys are strings to compare +# to the variable's value. If the variable has that particular value, the +# corresponding value (script) is executed. +# +# You can check for an empty value with "". +# +# As a special case, the value-check "*" matches any value, but **only** +# if no other value-check matches. Use it as an *else* form for value- +# checks. Take care to put the asterisk in quotes. The value-check "*" +# **also** matches a literal asterisk as value; a confusing corner case +# is checking for an asterisk **and** having a wildcard match with +# different commands. This is currently not possible. +# +# Global configuration variables are not checked in a deterministic +# order, so do not rely on commands from one variable-check to +# always happen before (or after) checks on another +# variable. Similarly, the value-equality checks are not +# done in a deterministic order, but all of the value-checks +# for a given variable happen together. As a special case, the +# value-check for "*" (the *else* case) happens after all of the +# other value-checks, and only matches if none of the others do. +# +# The values after a value sub-keys are the same kinds of values +# as can be given to the *script* key in the shellprocess module. +# See shellprocess.conf for documentation on valid values. +--- +dontChroot: false +firmwareType: + efi: + - "-pkg remove efi-firmware" + - command: "-mkinitramfsrd -abgn" + timeout: 120 # This is slow + bios: "-pkg remove bios-firmware" + "": "/bin/false no-firmware-type-set" + "*": "/bin/false some-other-firmware-value" diff --git a/modules/displaymanager.conf b/modules/displaymanager.conf new file mode 100644 index 0000000..f6b5a39 --- /dev/null +++ b/modules/displaymanager.conf @@ -0,0 +1,58 @@ +# Configure one or more display managers (e.g. SDDM) +# with a "best effort" approach. +# +# This module also sets up autologin, if the feature is enabled in +# globalstorage (where it would come from the users page). +--- +# The DM module attempts to set up all the DMs found in this list, in the +# precise order listed. The displaymanagers list can also be set in +# globalstorage, and in that case it overrides the setting here. +# +# If *sysconfigSetup* is set to *true* (see below, only relevant for +# openSUSE derivatives) then this list is ignored and only sysconfig +# is attempted. You can also list "sysconfig" in this list instead. +# +displaymanagers: + - slim + - sddm + - lightdm + - gdm + - mdm + - lxdm + - kdm + +# Enable the following settings to force a desktop environment +# in your displaymanager configuration file. This will attempt +# to configure the given DE (without checking if it is installed). +# The DM configuration for each potential DM may **or may not** +# support configuring a default DE, so the keys are mandatory +# but their interpretation is up to the DM configuration. +# +# Subkeys of *defaultDesktopEnvironment* are (all mandatory): +# - *executable* a full path to an executable +# - *desktopFile* a .desktop filename +# +# If this is **not** set, then Calamares will look for installed +# DE's and pick the first one it finds that is actually installed. +# +# If this **is** set, and the *executable* key doesn't point to +# an installed file, then the .desktop file's TryExec key is +# used instead. +# + +#defaultDesktopEnvironment: +# executable: "startkde" +# desktopFile: "plasma" + +#If true, try to ensure that the user, group, /var directory etc. for the +#display manager are set up correctly. This is normally done by the distribution +#packages, and best left to them. Therefore, it is disabled by default. +basicSetup: false + +# If true, setup autologin for openSUSE. This only makes sense on openSUSE +# derivatives or other systems where /etc/sysconfig/displaymanager exists. +# +# The preferred way to pick sysconfig is to just list it in the +# *displaymanagers* list (as the only one). +# +sysconfigSetup: false diff --git a/modules/finished.conf b/modules/finished.conf new file mode 100644 index 0000000..3b6dd9d --- /dev/null +++ b/modules/finished.conf @@ -0,0 +1,44 @@ +# Configuration for the "finished" page, which is usually shown only at +# the end of the installation (successful or not). +--- +# DEPRECATED +# +# The finished page can hold a "restart system now" checkbox. +# If this is false, no checkbox is shown and the system is not restarted +# when Calamares exits. +# restartNowEnabled: true + +# DEPRECATED +# +# Initial state of the checkbox "restart now". Only relevant when the +# checkbox is shown by restartNowEnabled. +# restartNowChecked: false + +# Behavior of the "restart system now" button. +# +# There are four usable values: +# - never +# Does not show the button and does not restart. +# This matches the old behavior with restartNowEnabled=false. +# - user-unchecked +# Shows the button, defaults to unchecked, restarts if it is checked. +# This matches the old behavior with restartNowEnabled=true and restartNowChecked=false. +# - user-checked +# Shows the button, defaults to checked, restarts if it is checked. +# This matches the old behavior with restartNowEnabled=true and restartNowChecked=true. +# - always +# Shows the button, checked, but the user cannot change it. +# This is new behavior. +# +# The three combinations of legacy values are still supported. +restartNowMode: user-unchecked + +# If the checkbox is shown, and the checkbox is checked, then when +# Calamares exits from the finished-page it will run this command. +# If not set, falls back to "shutdown -r now". +restartNowCommand: "systemctl -i reboot" + +# When the last page is (successfully) reached, send a DBus notification +# to the desktop that the installation is done. This works only if the +# user as whom Calamares is run, can reach the regular desktop session bus. +notifyOnFinished: false diff --git a/modules/fsresizer.conf b/modules/fsresizer.conf new file mode 100644 index 0000000..3332924 --- /dev/null +++ b/modules/fsresizer.conf @@ -0,0 +1,49 @@ +# Module that resizes a single FS to fill the entire (rest) of +# a device. This is used in OEM situations where an image is +# flashed onto an SD card (or similar) and used to boot a device, +# after which the FS should expand to fill the SD card. +# +# Example: a distro produces a 6GiB large image that is +# written to an 8GiB SD card; the FS should expand to take +# advantage of the unused 2GiB. The FS should expand much +# more if the same image is written to a 16GiB card. +--- + +# Which FS needs to be grown? Choose one way to identify it: +# - *fs* names a mount point which should already be mounted +# in the system. +# - *dev* names a device +fs: / +# dev: /dev/mmcblk0p1 + +# How much of the total remaining space should the FS use? +# The only sensible amount is "all of it". The value is +# in percent, so set it to 100. Perhaps a fixed size is +# needed (that would be weird though, since you don't know +# how big the card is), use MiB as suffix in that case. +# If missing, then it's assumed to be 0, and no resizing +# will happen. +# +# Percentages apply to **available space**. +size: 100% + +# Resizing might not be worth it, though. Set the minimum +# that it must grow; if it cannot grow that much, the +# resizing is skipped. Can be in percentage or absolute +# size, as above. If missing, then it's assumed to be 0, +# which means resizing is always worthwhile. +# +# If *atleast* is not zero, then the setting *required*, +# below, becomes relevant. +# +# Percentages apply to **total device size**. +#atleast: 1000MiB + +# When *atleast* is not zero, then the resize may be +# recommended (the default) or **required**. If the +# resize is required and cannot be carried out (because +# there's not enough space), then that is a fatal +# error for the installer. By default, resize is only +# recommended and it is not an error for no resize to be +# carried out. +required: false diff --git a/modules/fstab.conf b/modules/fstab.conf new file mode 100644 index 0000000..b2f3de3 --- /dev/null +++ b/modules/fstab.conf @@ -0,0 +1,33 @@ +# Creates /etc/fstab and /etc/crypttab in the target system. +# Also creates mount points for all the filesystems. +# +# When creating fstab entries for a filesystem, this module +# uses the options for the filesystem type to write to the +# options field of the file. +--- +# Mount options to use for all filesystems. If a specific filesystem +# is listed here, use those options, otherwise use the *default* +# options from this mapping. +mountOptions: + default: defaults,noatime + btrfs: defaults,noatime,space_cache,autodefrag + +# Mount options to use for the EFI System Partition. If not defined, the +# *mountOptions* for *vfat* are used, or if that is not set either, +# *default* from *mountOptions*. +efiMountOptions: umask=0077 + +# If a filesystem is on an SSD, add the following options. If a specific +# filesystem is listed here, use those options, otherwise no additional +# options are set (i.e. there is no *default* like in *mountOptions*). +ssdExtraMountOptions: + ext4: discard + jfs: discard + xfs: discard + swap: discard + btrfs: discard,compress=lzo + +# Additional options added to each line in /etc/crypttab +crypttabOptions: luks +# For Debian and Debian-based distributions, change the above line to: +# crypttabOptions: luks,keyscript=/bin/cat diff --git a/modules/grubcfg.conf b/modules/grubcfg.conf new file mode 100644 index 0000000..b354ec3 --- /dev/null +++ b/modules/grubcfg.conf @@ -0,0 +1,25 @@ +# Write lines to /etc/default/grub (in the target system) based +# on calculated values and the values set in the *defaults* key +# in this configuration file. +# +# Calculated values are: +# - GRUB_DISTRIBUTOR, branding module, *bootloaderEntryName* +# - GRUB_ENABLE_CRYPTODISK, based on the presence of filesystems +# that use LUKS +# - GRUB_CMDLINE_LINUX_DEFAULT, adding LUKS setup and plymouth +# support to the kernel. + +--- +# If set to true, always creates /etc/default/grub from scratch even if the file +# already existed. If set to false, edits the existing file instead. +overwrite: false + +# Default entries to write to /etc/default/grub if it does not exist yet or if +# we are overwriting it. +# +defaults: + GRUB_TIMEOUT: 5 + GRUB_DEFAULT: "saved" + GRUB_DISABLE_SUBMENU: true + GRUB_TERMINAL_OUTPUT: "console" + GRUB_DISABLE_RECOVERY: true diff --git a/modules/initcpio.conf b/modules/initcpio.conf new file mode 100644 index 0000000..517e483 --- /dev/null +++ b/modules/initcpio.conf @@ -0,0 +1,22 @@ +# Run mkinitcpio(8) with the given preset value +--- +# This key defines the kernel to be loaded. +# It can have the following values: +# - empty or unset, interpreted as "all" +# - the literal string "$uname" (without quotes, with dollar), +# which will use the output of `uname -r` to determine the +# running kernel, and use that. +# - any other string. +# +# Whatever is set, that string is passed as *preset* argument to the +# `-p` option of *mkinitcpio*. Take care that both "$uname" operates +# in the host system, and might not be correct if the target system is +# updated (to a newer kernel) as part of the installation. +# +# Note that "all" is probably not a good preset to use either. +kernel: linux312 + +# Set this to true to turn off mitigations for lax file +# permissions on initramfs (which, in turn, can compromise +# your LUKS encryption keys, CVS-2019-13179). +be_unsafe: false diff --git a/modules/keyboard.conf b/modules/keyboard.conf new file mode 100644 index 0000000..ee97c39 --- /dev/null +++ b/modules/keyboard.conf @@ -0,0 +1,16 @@ +# NOTE: you must have ckbcomp installed and runnable +# on the live system, for keyboard layout previews. +--- +# The name of the file to write X11 keyboard settings to +# The default value is the name used by upstream systemd-localed. +# Relative paths are assumed to be relative to /etc/X11/xorg.conf.d +xOrgConfFileName: "/etc/X11/xorg.conf.d/00-keyboard.conf" + +# The path to search for keymaps converted from X11 to kbd format +# Leave this empty if the setting does not make sense on your distribution. +convertedKeymapPath: "/lib/kbd/keymaps/xkb" + +# Write keymap configuration to /etc/default/keyboard, usually +# found on Debian-related systems. +# Defaults to true if nothing is set. +#writeEtcDefaultKeyboard: true diff --git a/modules/license.conf b/modules/license.conf new file mode 100644 index 0000000..9057f8a --- /dev/null +++ b/modules/license.conf @@ -0,0 +1,45 @@ +# Configuration file for License viewmodule, Calamares +# Syntax is YAML 1.2 +--- +# Define a list of licenses which may / must be accepted before continuing. +# +# Each entry in this list has the following keys: +# - id Entry identifier, must be unique. Not user visible. YAML: string. +# - name Pretty name for the software product, user visible and untranslatable. YAML: string. +# - vendor Pretty name for the software vendor, user visible and untranslatable. YAML: string, optional, default is empty. +# - type Package type identifier for presentation, not user visible but affects user visible strings. YAML: string. +# values: driver, gpudriver, browserplugin, codec, package, software; optional, default is software. +# - required If set to true, the user cannot proceed without accepting this license. YAML: boolean, optional, default is false. +# - url A URL for the license; a remote URL is not shown in Calamares, but a link +# to the URL is provided, which opens in the default web browser. A local +# URL (i.e. file:///) assumes that the contents are HTML or plain text, and +# displays the license in-line. YAML: string, mandatory. +entries: +- id: nvidia + name: Nvidia + vendor: Nvidia Corporation + type: driver + url: http://developer.download.nvidia.com/cg/Cg_3.0/license.pdf + required: false +- id: amd + name: Catalyst + vendor: "Advanced Micro Devices, Inc." + type: gpudriver + url: http://support.amd.com/en-us/download/eula + required: false +- id: flashplugin + name: Adobe Flash + vendor: Adobe Systems Incorporated + type: browserplugin + url: http://www.adobe.com/products/eulas/pdfs/PlatformClients_PC_WWEULA_Combined_20100108_1657.pdf + required: true +# This example uses a file: link. This example uses a relative link, which +# is relative to where you run Calamares. Assuming you run it from build/ +# as part of your testing, you'll get the LICENSE text for Calamares +# (which is the text of the GPLv3, not proprietary at all). +- id: mine_mine + name: Calamares Proprietary License + vendor: Calamares, Inc. + type: software + required: true + url: file:../LICENSE diff --git a/modules/locale.conf b/modules/locale.conf new file mode 100644 index 0000000..4beb4fe --- /dev/null +++ b/modules/locale.conf @@ -0,0 +1,97 @@ +--- +# This settings are used to set your default system time zone. +# Time zones are usually located under /usr/share/zoneinfo and +# provided by the 'tzdata' package of your Distribution. +# +# Distributions using systemd can list available +# time zones by using the timedatectl command. +# timedatectl list-timezones +# +# The starting timezone (e.g. the pin-on-the-map) when entering +# the locale page can be set through keys *region* and *zone*. +# If either is not set, defaults to America/New_York. +# +region: "America" +zone: "New_York" + + +# System locales are detected in the following order: +# +# - /usr/share/i18n/SUPPORTED +# - localeGenPath (defaults to /etc/locale.gen if not set) +# - 'locale -a' output +# +# Enable only when your Distribution is using an +# custom path for locale.gen +# +#localeGenPath: "PATH_TO/locale.gen" + +# GeoIP based Language settings: Leave commented out to disable GeoIP. +# +# GeoIP needs a working Internet connection. +# This can be managed from `welcome.conf` by adding +# internet to the list of required conditions. +# +# The configuration +# is in three parts: a *style*, which can be "json" or "xml" +# depending on the kind of data returned by the service, and +# a *url* where the data is retrieved, and an optional *selector* +# to pick the right field out of the returned data (e.g. field +# name in JSON or element name in XML). +# +# The default selector (when the setting is blank) is picked to +# work with existing JSON providers (which use "time_zone") and +# Ubiquity's XML providers (which use "TimeZone"). +# +# If the service configured via *url* uses +# a different attribute name (e.g. "timezone") in JSON or a +# different element tag (e.g. "") in XML, set this +# string to the name or tag to be used. +# +# In JSON: +# - if the string contains "." characters, this is used as a +# multi-level selector, e.g. "a.b" will select the timezone +# from data "{a: {b: "Europe/Amsterdam" } }". +# - each part of the string split by "." characters is used as +# a key into the JSON data. +# In XML: +# - all elements with the named tag (e.g. all TimeZone) elements +# from the document are checked; the first one with non-empty +# text value is used. +# +# +# An HTTP(S) request is made to *url*. The request should return +# valid data in a suitable format, depending on *style*; +# generally this includes a string value with the timezone +# in / format. For services that return data which +# does not follow the conventions of "suitable data" described +# below, *selector* may be used to pick different data. +# +# Note that this example URL works, but the service is shutting +# down in June 2018. +# +# Suitable JSON data looks like +# ``` +# {"time_zone":"America/New_York"} +# ``` +# Suitable XML data looks like +# ``` +# Europe/Brussels +# ``` +# +# To accommodate providers of GeoIP timezone data with peculiar timezone +# naming conventions, the following cleanups are performed automatically: +# - backslashes are removed +# - spaces are replaced with _ +# +# Legacy settings "geoipStyle", "geoipUrl" and "geoipSelector" +# in the top-level are still supported, but I'd advise against. +# +# To disable GeoIP checking, either comment-out the entire geoip section, +# or set the *style* key to an unsupported format (e.g. `none`). +# Also, note the analogous feature in src/modules/welcome/welcome.conf. +# +geoip: + style: "json" + url: "https://geoip.kde.org/v1/calamares" + selector: "" # leave blank for the default diff --git a/modules/luksopenswaphookcfg.conf b/modules/luksopenswaphookcfg.conf new file mode 100644 index 0000000..f5610cd --- /dev/null +++ b/modules/luksopenswaphookcfg.conf @@ -0,0 +1,4 @@ +# Writes an openswap configuration with LUKS settings to the given path +--- +# Path of the configuration file to write (in the target system) +configFilePath: /etc/openswap.conf diff --git a/modules/machineid.conf b/modules/machineid.conf new file mode 100644 index 0000000..97bd10a --- /dev/null +++ b/modules/machineid.conf @@ -0,0 +1,24 @@ +# Machine-ID and other random data on the target system. +# +# This module can create a number of "random" things on the target: +# - a systemd machine-id file (hence the name of the Calamares module) +# with a random UUID. +# - a dbus machine-id file (or, optionally, link to the one from systemd) +# - an entropy file +# +--- +# Whether to create /etc/machine-id for systemd. +systemd: true + +# Whether to create /var/lib/dbus/machine-id for D-Bus. +dbus: true +# Whether /var/lib/dbus/machine-id should be a symlink to /etc/machine-id +# (ignored if dbus is false, or if there is no /etc/machine-id to point to). +dbus-symlink: true +# this is a deprecated form of *dbus-symlink* +symlink: true + +# Whether to create an entropy file +entropy: false +# Whether to copy entropy from the host +entropy-copy: false diff --git a/modules/mhwdcfg.conf b/modules/mhwdcfg.conf new file mode 100644 index 0000000..1233ab9 --- /dev/null +++ b/modules/mhwdcfg.conf @@ -0,0 +1,19 @@ +--- +bus: + - pci +# - usb + +identifier: + net: + - 200 + - 280 + video: + - 300 + - 302 + - 380 + +driver: free + +local: true + +repo: /opt/mhwd/pacman-mhwd.conf diff --git a/modules/mount.conf b/modules/mount.conf new file mode 100644 index 0000000..bb28eed --- /dev/null +++ b/modules/mount.conf @@ -0,0 +1,36 @@ +# Mount filesystems in the target (generally, before treating the +# target as a usable chroot / "live" system). Filesystems are +# automatically mounted from the partitioning module. Filesystems +# listed here are **extra**. The filesystems listed in *extraMounts* +# are mounted in all target systems. The filesystems listed in +# *extraMountsEfi* are mounted in the target system **only** if +# the host machine uses UEFI. +--- +# Extra filesystems to mount. The key's value is a list of entries; each +# entry has four keys: +# - device The device node to mount +# - fs The filesystem type to use +# - mountPoint Where to mount the filesystem +# - options (optional) Extra options to pass to mount(8) +# +extraMounts: + - device: proc + fs: proc + mountPoint: /proc + - device: sys + fs: sysfs + mountPoint: /sys + - device: /dev + mountPoint: /dev + options: bind + - device: tmpfs + fs: tmpfs + mountPoint: /run + - device: /run/udev + mountPoint: /run/udev + options: bind + +extraMountsEfi: + - device: efivarfs + fs: efivarfs + mountPoint: /sys/firmware/efi/efivars diff --git a/modules/netinstall.conf b/modules/netinstall.conf new file mode 100644 index 0000000..fd59c24 --- /dev/null +++ b/modules/netinstall.conf @@ -0,0 +1,23 @@ +--- +# This is the URL that is retrieved to get the netinstall groups-and-packages +# data (which should be in the format described in netinstall.yaml), e.g.: +# groupsUrl: http://example.org/netinstall.php +# or it can be a locally installed file: +# groupsUrl: file:///usr/share/calamares/netinstall.yaml +# +# Note that the contents of the groups file is the **important** +# part of the configuration of this module. It specifies what +# the user may select and what commands are to be run. +# +# The format of the groups file is documented in `README.md`. +# +# groupsUrl: file:///usr/share/calamares/netinstall.yaml + +# If the installation can proceed without netinstall (e.g. the Live CD +# can create a working installed system, but netinstall is preferred +# to bring it up-to-date or extend functionality) leave this set to +# false (the default). If set to true, the netinstall data is required. +# +# This only has an effect if the netinstall data cannot be retrieved, +# or is corrupt: having "required" set, means the install cannot proceed. +required: false diff --git a/modules/oemid.conf b/modules/oemid.conf new file mode 100644 index 0000000..8f9bc3d --- /dev/null +++ b/modules/oemid.conf @@ -0,0 +1,13 @@ +# This is an OEM setup (phase-0) configuration file. +--- +# The batch-identifier is written to /var/log/installer/oem-id. +# This value is put into the text box as the **suggested** +# OEM ID. If @@DATE@@ is included in the identifier, then +# that is replaced by the current date in yyyy-MM-dd (ISO) format. +# +# it is ok for the identifier to be empty. +# +# The identifier is written to the file as UTF-8 (this will be no +# different from ASCII, for most inputs) and followed by a newline. +# If the identifier is empty, only a newline is written. +batch-identifier: neon-@@DATE@@ diff --git a/modules/openrcdmcryptcfg.conf b/modules/openrcdmcryptcfg.conf new file mode 100644 index 0000000..57ee2dc --- /dev/null +++ b/modules/openrcdmcryptcfg.conf @@ -0,0 +1,2 @@ +--- +configFilePath: /etc/conf.d/dmcrypt diff --git a/modules/packagechooser.conf b/modules/packagechooser.conf new file mode 100644 index 0000000..28f06f3 --- /dev/null +++ b/modules/packagechooser.conf @@ -0,0 +1,106 @@ +# Configuration for the low-density software chooser +--- +# The packagechooser writes a GlobalStorage value for the choice that +# has been made. The key is *packagechooser_*. If *id* is set here, +# it is substituted into the key name. If it is not set, the module's +# instance name is used; see the *instances* section of `settings.conf`. +# If there is just one packagechooser module, and no *id* is set, +# resulting GS key is probably *packagechooser_packagechooser*. +# +# The GS value is a comma-separated list of the IDs of the selected +# packages, or an empty string if none is selected. +# +# id: "" + +# Software selection mode, to set whether the software packages +# can be chosen singly, or multiply. +# +# Possible modes are "optional", "required" (for zero or one) +# or "optionalmultiple", "requiredmultiple" (for zero-or-more +# or one-or-more). +mode: required + +# Human-visible strings in this module. These are all optional. +# The following translated keys are used: +# - *step*, used in the overall progress view (left-hand pane) +# +# Each key kan have a [locale] added to it, which is used as +# the translated string for that locale. For the strings +# associated with the "no-selection" item, see *items*, below +# with the explicit id "". +# +labels: + step: "Office Suite" + step[de]: "Office-Paket" + +# Items to display in the chooser. In general, this should be a +# pretty short list to avoid overwhelming the UI. This is a list +# of objects, and the items are displayed in list order. +# +# Either provide the data for an item in the list (using the keys +# below), or use existing AppData XML files, or use AppStream cache +# as a source for the data. +# +# For data provided by the list: the item has an id, which is used in +# setting the value of *packagechooser_*). The following fields +# are mandatory: +# +# - *id* ID for the product. The ID "" is special, and is used for +# "no package selected". Only include this if the mode allows +# selecting none. +# - *package* Package name for the product. While mandatory, this is +# not actually used anywhere. +# - *name* Human-readable name of the product. To provide translations, +# add a *[lang]* decoration as part of the key name, e.g. `name[nl]` +# for Dutch. The list of usable languages can be found in +# `CMakeLists.txt` or as part of the debug output of Calamares. +# - *description* Human-readable description. These can be translated +# as well. +# - *screenshot* Path to a single screenshot of the product. May be +# a filesystem path or a QRC path (e.g. ":/images/no-selection.png"). +# +# Use the empty string "" as ID / key for the "no selection" item if +# you want to customize the display of that item as well. +# +# For data provided by AppData XML: the item has an *appdata* +# key which points to an AppData XML file in the local filesystem. +# This file is parsed to provide the id (from AppData id), name +# (from AppData name), description (from AppData description paragraphs +# or the summary entries), and a screenshot (the defautl screenshot +# from AppData). No package is set (but that is unused anyway). +# +# AppData may contain IDs that are not useful inside Calamares, +# and the screenshot URL may be remote -- a remote URL will not +# be loaded and the screenshot will be missing. An item with *appdata* +# **may** specify an ID or screenshot path, as above. This will override +# the settings from AppData. +# +# For data provided by AppStream cache: the item has an *appstream* +# key which matches the AppStream identifier in the cache (e.g. +# *org.kde.kwrite.desktop*). Data is retrieved from the AppStream +# cache for that ID. The package name is set from the AppStream data. +# +# An item for AppStream may also contain an *id* and a *screenshot* +# key which will override the data from AppStream. +items: + - id: "" + package: "" + name: "No Office Suite" + name[de]: "Kein Office Paket" + description: "Please pick an office suite from the list. If you don't want to install an office suite, that's fine, you can install one later as needed." + description[de]: "Bitte wählen Sie ein Office-Paket von der Liste. Wenn Sie kein Office installieren wollen, kann dies auch zu einer späteren Zeitpunkt erfolgen." + screenshot: ":/images/choose-office.jpg" + - id: "libreoffice-still" + package: "libreoffice-still" + name: "LibreOffice" + name[de]: "LibreOffice" + description: "LibreOffice is a powerful and free office suite, used by millions of people around the world. Its clean interface and feature-rich tools help you unleash your creativity and enhance your productivity." + description[de]: "LibreOffice ist ein leistungsstarkes Office-Paket. Die klare Oberfläche und mächtigen Werkzeuge lassen Sie Ihre Kreativität entfalten und Ihre Produktivität steigern." + screenshot: ":/images/LibreOffice.jpg" + - id: "freeoffice" + package: "freeoffice" + name: "FreeOffice" + name[de]: "FreeOffice" + description: "FreeOffice is a powerful Office suite with word processing, spreadsheet and presentation software. It is seamlessly compatible with Microsoft Office and can be used free of charge. For long-term use, request a free product key directly in the application." + description[de]: "FreeOffice ist ein leistungsstarkes Office-Paket mit Textverarbeitung, Tabellenkalkulation und Präsentationssoftware. Es ist nahtlos kompatible zu Microsoft Office und kann frei genutzt werden. Für eine Langzeitnutzung kann ein Produktkey im Programm angefordert werden." + screenshot: ":/images/FreeOffice.jpg" diff --git a/modules/packages.conf b/modules/packages.conf new file mode 100644 index 0000000..e42e8e9 --- /dev/null +++ b/modules/packages.conf @@ -0,0 +1,170 @@ +--- +# +# Which package manager to use, options are: +# - packagekit - PackageKit CLI tool +# - zypp - Zypp RPM frontend +# - yum - Yum RPM frontend +# - dnf - DNF, the new RPM frontend +# - urpmi - Mandriva package manager +# - apt - APT frontend for DEB and RPM +# - pacman - Pacman +# - portage - Gentoo package manager +# - entropy - Sabayon package manager +# - dummy - Dummy manager, only logs +# +backend: dummy + +# +# Often package installation needs an internet connection. +# Since you may allow system installation without a connection +# and want to offer OPTIONAL package installation, it's +# possible to have no internet, yet have this packages module +# enabled in settings. +# +# You can skip the whole module when there is no internet +# by setting "skip_if_no_internet" to true. +# +# You can run a package-manager specific update procedure +# before installing packages (for instance, to update the +# list of packages and dependencies); this is done only if there +# is an internet connection. +# +# Set "update_db" to 'true' for refreshing the database on the +# target system. On target installations, which got installed by +# unsquashing, a full system update may be needed. Otherwise +# post-installing additional packages may result in conflicts. +# Therefore set also "update_system" to 'true'. +# +skip_if_no_internet: false +update_db: true +update_system: false + +# +# List of maps with package operations such as install or remove. +# Distro developers can provide a list of packages to remove +# from the installed system (for instance packages meant only +# for the live system). +# +# A job implementing a distro specific logic to determine other +# packages that need to be installed or removed can run before +# this one. Distro developers may want to install locale packages +# or remove drivers not needed on the installed system. +# Such a job would populate a list of dictionaries in the global +# storage called "packageOperations" and that list is processed +# after the static list in the job configuration (i.e. the list +# that is in this configuration file). +# +# Allowed package operations are: +# - install, try_install: will call the package manager to +# install one or more packages. The install target will +# abort the whole installation if package-installation +# fails, while try_install carries on. Packages may be +# listed as (localized) names, or as (localized) package-data. +# See below for the description of the format. +# - localInstall: this is used to call the package manager +# to install a package from a path-to-a-package. This is +# useful if you have a static package archive on the install media. +# The *pacman* package manager is the only one to specially support +# this operation (all others treat this the same as *install*). +# - remove, try_remove: will call the package manager to +# remove one or more packages. The remove target will +# abort the whole installation if package-removal fails, +# while try_remove carries on. Packages may be listed as +# (localized) names. +# +# There are two formats for naming packages: as a name or as package-data, +# which is an object notation providing package-name, as well as pre- and +# post-install scripts. +# +# Here are both formats, for installing vi. The first one just names the +# package for vi (using the naming of the installed package manager), while +# the second contains three data-items; the pre-script is run before invoking +# the package manager, and the post-script runs once it is done. +# +# - install +# - vi +# - package: vi +# pre-script: touch /tmp/installing-vi +# post-script: rm -f /tmp/installing-vi +# +# The pre- and post-scripts are optional, but you cannot leave both out +# if you do use the *package* key: using "package: vi" with neither script +# option will trick Calamares into trying to install a package named +# "package: vi", which is unlikely to work. +# +# The pre- and post-scripts are **not** executed by a shell unless you +# explicitly invoke `/bin/sh` in them. The command-lines are passed +# to exec(), which does not understand shell syntax. In other words: +# +# pre-script: ls | wc -l +# +# Will fail, because `|` is passed as a command-line argument to ls, +# as are `wc`, and `-l`. No shell pipeline is set up, and ls is likely +# to complain. Invoke the shell explicitly: +# +# pre-script: /bin/sh -c \"ls | wc -l\" +# +# The above note on shell-expansion applies to versions up-to-and-including +# Calamares 3.2.12, but will change in future. +# +# Any package name may be localized; this is used to install localization +# packages for software based on the selected system locale. By including +# the string `LOCALE` in the package name, the following happens: +# +# - if the system locale is English (any variety), then the package is not +# installed at all, +# - otherwise `$LOCALE` or `${LOCALE}` is replaced by the 'lower-cased' BCP47 +# name of the 'language' part of the selected system locale (not the +# country/region/dialect part), e.g. selecting "nl_BE" will use "nl" +# here. +# +# Take care that just plain `LOCALE` will not be replaced, so `foo-LOCALE` will +# be left unchanged, while `foo-$LOCALE` will be changed. However, `foo-LOCALE` +# **will** be removed from the list of packages (i.e. not installed), if +# English is selected. If a non-English locale is selected, then `foo-LOCALE` +# will be installed, unchanged (no language-name-substitution occurs). +# +# The following installs localizations for vi, if they are relevant; if +# there is no localization, installation continues normally. +# +# - install +# - vi-$LOCALE +# - package: vi-${LOCALE} +# pre-script: touch /tmp/installing-vi +# post-script: rm -f /tmp/installing-vi +# +# When installing packages, Calamares will invoke the package manager +# with a list of package names if it can; package-data prevents this because +# of the scripts that need to run. In other words, this: +# +# - install: +# - vi +# - binutils +# - package: wget +# pre-script: touch /tmp/installing-wget +# +# This will invoke the package manager three times, once for each package, +# because not all of them are simple package names. You can speed up the +# process if you have only a few pre-scripts, by using multiple install targets: +# +# - install: +# - vi +# - binutils +# - install: +# - package: wget +# pre-script: touch /tmp/installing-wget +# +# This will call the package manager once with the package-names "vi" and +# "binutils", and then a second time for "wget". When installing large numbers +# of packages, this can lead to a considerable time savings. +# +operations: + - install: + - vi + - vi-${LOCALE} + - wget + - binutils + - remove: + - vi + - wget + - binutils diff --git a/modules/partition.conf b/modules/partition.conf new file mode 100644 index 0000000..6fbb44c --- /dev/null +++ b/modules/partition.conf @@ -0,0 +1,137 @@ +# This setting specifies the mount point of the EFI system partition. Some +# distributions (Fedora, Debian, Manjaro, etc.) use /boot/efi, others (KaOS, +# etc.) use just /boot. +efiSystemPartition: "/boot/efi" + +# This optional setting specifies the size of the EFI system partition. +# If nothing is specified, the default size of 300MiB will be used. +# efiSystemPartitionSize: 300M + +# In autogenerated partitioning, allow the user to select a swap size? +# If there is exactly one choice, no UI is presented, and the user +# cannot make a choice -- this setting is used. If there is more than +# one choice, a UI is presented. +# +# Legacy settings *neverCreateSwap* and *ensureSuspendToDisk* correspond +# to values of *userSwapChoices* as follows: +# - *neverCreateSwap* is true, means [none] +# - *neverCreateSwap* is false, *ensureSuspendToDisk* is false, [small] +# - *neverCreateSwap* is false, *ensureSuspendToDisk* is true, [suspend] +# +# Autogenerated swap sizes are as follows: +# - *suspend*: Swap is always at least total memory size, +# and up to 4GiB RAM follows the rule-of-thumb 2 * memory; +# from 4GiB to 8 GiB it stays steady at 8GiB, and over 8 GiB memory +# swap is the size of main memory. +# - *small*: Follows the rules above, but Swap is at +# most 8GiB, and no more than 10% of available disk. +# In both cases, a fudge factor (usually 10% extra) is applied so that there +# is some space for administrative overhead (e.g. 8 GiB swap will allocate +# 8.8GiB on disk in the end). +userSwapChoices: + - none # Create no swap, use no swap + - reuse # Re-use existing swap, but don't create any (unsupported right now) + - small # Up to 4GB + - suspend # At least main memory size + - file # To swap file instead of partition (unsupported right now) + +# LEGACY SETTINGS (these will generate a warning) +# ensureSuspendToDisk: true +# neverCreateSwap: false + +# Correctly draw nested (e.g. logical) partitions as such. +drawNestedPartitions: false + +# Show/hide partition labels on manual partitioning page. +alwaysShowPartitionLabels: true + +# Default filesystem type, used when a "new" partition is made. +# +# When replacing a partition, the existing filesystem inside the +# partition is retained. In other cases, e.g. Erase and Alongside, +# as well as when using manual partitioning and creating a new +# partition, this filesystem type is pre-selected. Note that +# editing a partition in manual-creation mode will not automatically +# change the filesystem type to this default value -- it is not +# creating a new partition. +# +# Suggested values: ext2, ext3, ext4, reiser, xfs, jfs, btrfs +# If nothing is specified, Calamares defaults to "ext4". +# +# Names are case-sensitive and defined by KPMCore. +defaultFileSystemType: "ext4" + +# Show/hide LUKS related functionality in automated partitioning modes. +# Disable this if you choose not to deploy early unlocking support in GRUB2 +# and/or your distribution's initramfs solution. +# +# BIG FAT WARNING: +# +# This option is unsupported, as it cuts out a crucial security feature. +# Disabling LUKS and shipping Calamares without a correctly configured GRUB2 +# and initramfs is considered suboptimal use of the Calamares software. The +# Calamares team will not provide user support for any potential issue that +# may arise as a consequence of setting this option to false. +# It is strongly recommended that system integrators put in the work to support +# LUKS unlocking support in GRUB2 and initramfs/dracut/mkinitcpio/etc. +# Support is offered to system integrators that wish to do so, through the +# Calamares bug tracker, as well as in #calamares on Freenode. +# For more information on setting up GRUB2 for Calamares with LUKS, see +# https://github.com/calamares/calamares/wiki/Deploy-LUKS +# +# If nothing is specified, LUKS is enabled in automated modes. +#enableLuksAutomatedPartitioning: true + +# Allow manual partitioning. +# +# When set to false, this option hides the "Manual partitioning" button, +# limiting the user's choice to "Erase", "Replace" or "Alongside". +# This can be useful when using a custom partition layout we don't want +# the user to modify. +# +# If nothing is specified, manual partitioning is enabled. +#allowManualPartitioning: true + +# To apply a custom partition layout, it has to be defined this way : +# +# partitionLayout: +# - name: "rootfs" +# filesystem: "ext4" +# mountPoint: "/" +# size: 20% +# minSize: 500M +# maxSize: 10G +# - name: "home" +# filesystem: "ext4" +# mountPoint: "/home" +# size: 3G +# minSize: 1.5G +# - name: "data" +# filesystem: "fat32" +# mountPoint: "/data" +# size: 100% +# +# There can be any number of partitions, each entry having the following attributes: +# - name: partition label +# - filesystem: filesystem type +# - mountPoint: partition mount point +# - size: partition size in bytes (append 'K', 'M' or 'G' for KiB, MiB or GiB) +# or +# % of the available drive space if a '%' is appended to the value +# - minSize: minimum partition size (optional parameter) +# - maxSize: maximum partition size (optional parameter) + +# Checking for available storage +# +# This overlaps with the setting of the same name in the welcome module's +# requirements section. If nothing is set by the welcome module, this +# value is used instead. It is still a problem if there is no required +# size set at all, and the replace and resize options will not be offered +# if no required size is set. +# +# The value is in Gibibytes (GiB). +# +# BIG FAT WARNING: except for OEM-phase-0 use, you should be using +# the welcome module, **and** configure this value in +# `welcome.conf`, not here. +# requiredStorage: 3.5 diff --git a/modules/plasmalnf.conf b/modules/plasmalnf.conf new file mode 100644 index 0000000..a954c68 --- /dev/null +++ b/modules/plasmalnf.conf @@ -0,0 +1,79 @@ +# The Plasma Look-and-Feel module allows selecting a Plasma +# Look-and-Feel in the live- or host-system and switches the +# host Plasma session immediately to the chosen LnF; it +# can also write a LnF configuration to the target user / on +# the target system. +# +# This module should be used once in a view section (to get +# the UI) and once in the exec section (to apply the selection +# to the target user). It should come **after** the user module +# in exec, so that the target user has been created alrady. +--- +# Full path to the Plasma look-and-feel tool (CLI program +# for querying and applying Plasma themes). If this is not +# set, no LNF setting will happen. +lnftool: "/usr/bin/lookandfeeltool" + +# For systems where the user Calamares runs as (usually root, +# via either sudo or pkexec) has a clean environment, set this +# to the originating username; the lnftool will be run through +# "sudo -H -u " instead of directly. +# +# liveuser: "live" + +# You can limit the list of Plasma look-and-feel themes by listing ids +# here. If this key is not present, all of the installed themes are listed. +# If the key is present, only installed themes that are **also** included +# in the list are shown (could be none!). See the *showAll* key, below, +# to change that. +# +# Themes may be listed by id, (e.g. fluffy-bunny, below) or as a theme +# and an image (e.g. breeze) which will be used to show a screenshot. +# Themes with no image set at all get a "missing screenshot" image; if the +# image file is not found, they get a color swatch based on the image name. +# +# The image may be an absolute path. If it is a relative path, though, +# it is searched in the current directory and in the branding directory +# (i.e. relative to the directory where your branding.desc lives). +# +# Valid forms of entries in the *themes* key: +# - A single string (unquoted), which is the theme id +# - A pair of *theme* and *image* keys, e.g. +# ``` +# - theme: fluffy-bunny.desktop +# image: "fluffy-screenshot.png" +# ``` +# +# The image screenshot is resized to 12x8 the current font size, with +# a minimum of 120x80 pixels. This allows the screenshot to scale up +# on HiDPI displays where the fonts are larger (in pixels). +themes: + - org.kde.fuzzy-pig.desktop + - theme: org.kde.breeze.desktop + image: "breeze.png" + - theme: org.kde.breezedark.desktop + image: "breeze-dark.png" + - org.kde.fluffy-bunny.desktop + +# If *showAll* is true, then all installed themes are shown in the +# UI for selection, even if they are not listed in *themes*. This +# allows selection of all themes even while not all of them are +# listed in *themes* -- which is useful to show screenshots for those +# you do have a screenshot for. +showAll: false + +# You can pre-select one of the themes; it is not applied +# immediately, but its radio-button is switched on to indicate +# that that is the theme (that is most likely) currently in use. +# Do this only on Live images where you are reasonably sure +# that the user is not going to change the theme out from under +# themselves before running the installer. +# +# If this key is present, its value should be the id of the theme +# which should be pre-selected. If absent, empty, or the pre-selected +# theme is not found on the live system, no theme will be pre-selected. +# +# As a special setting, use "*", to try to find the currently- +# selected theme by reading the Plasma configuration. This requires +# KF5::Config at build- and run-time. +preselect: "*" diff --git a/modules/plymouthcfg.conf b/modules/plymouthcfg.conf new file mode 100644 index 0000000..47c54f5 --- /dev/null +++ b/modules/plymouthcfg.conf @@ -0,0 +1,28 @@ +# Plymouth Configuration Module +# +# This module can be used to setup the default plymouth theme to +# be used with your distribution +# +# You should only use this module if the plymouth package is installed +# on the build configurations of your distribution & the plymouth +# theme you want to configure is installed as well. If the unpacked +# filesystem configures a plymouth theme already, there is no need +# to change it here. +--- + + +# Leave this commented if you want to use the default theme +# shipped with your distribution configurations. Make sure that +# the theme exists in the themes directory of plymouth path. +# Debian / Ubuntu comes with themes "joy", "script", "softwaves", +# possibly others. Look in /usr/share/plymouth/themes for more. +# +# Specifying a non-existent theme will leave the plymouth +# configuration set to that theme. It is up to plymouth to +# deal with that. + +plymouth_theme: spinfinity + + + + diff --git a/modules/postcfg.conf b/modules/postcfg.conf new file mode 100644 index 0000000..1c8651d --- /dev/null +++ b/modules/postcfg.conf @@ -0,0 +1,4 @@ +--- +keyrings: + - archlinux + - manjaro diff --git a/modules/preservefiles.conf b/modules/preservefiles.conf new file mode 100644 index 0000000..671a308 --- /dev/null +++ b/modules/preservefiles.conf @@ -0,0 +1,49 @@ +# Configuration for the preserve-files job +# +# The *files* key contains a list of files to preserve. Each element of +# the list should have one of these forms: +# +# - an absolute path (probably within the host system). This will be preserved +# as the same path within the target system (chroot). If, globally, dontChroot +# is true, then these items are ignored (since the destination is the same +# as the source). +# - a map with a *dest* key. The *dest* value is a path interpreted in the +# target system (if dontChroot is true, in the host system). Relative paths +# are not recommended. There are three possible other keys in the map: +# - *from*, which must have one of the values, below; it is used to +# preserve files whose pathname is known to Calamares internally. +# - *src*, to refer to a path interpreted in the host system. Relative +# paths are not recommended, and are interpreted relative to where +# Calamares is being run. +# - *perm*, is a colon-separated tuple of :: +# where is in octal (e.g. 4777 for wide-open, 0400 for read-only +# by owner). If set, the file's ownership and permissions are set to +# those values within the target system; if not set, no permissions +# are changed. +# Only one of the two source keys (either *from* or *src*) may be set. +# +# The target filename is modified as follows: +# - `@@ROOT@@` is replaced by the path to the target root (may be /) +# - `@@USER@@` is replaced by the username entered by on the user +# page (may be empty, for instance if no user page is enabled) +# +# Special values for the key *from* are: +# - *log*, for the complete log file (up to the moment the preservefiles +# module is run), +# - *config*, for the Calamares configuration file +# - *globals*, for a JSON dump of the contents of global storage +--- +files: + - /etc/oem-information + - from: log + dest: /root/install.log + perm: root:wheel:644 + - from: config + dest: /root/install.cfg + perm: root:wheel:400 + +# The *perm* key contains a default value to apply to all files listed +# above that do not have a *perm* key of their own. If not set, +# root:root:0400 (highly restrictive) is used. +# +# perm: "root:root:0400" diff --git a/modules/rawfs.conf b/modules/rawfs.conf new file mode 100644 index 0000000..10e654a --- /dev/null +++ b/modules/rawfs.conf @@ -0,0 +1,24 @@ +# Configuration for the rawfs module: raw filesystem copy to a block device + +--- + +# To apply a custom partition layout, it has to be defined as a list of targets. +# +# For each target, the following attributes must be defined: +# * mountPoint: The mount point of the destination device on the installed system +# The corresponding block device will automatically be identified and used as the +# destination for the operation +# * source: The source filesystem; it can be the mount point of a locally (on the +# live system) mounted filesystem, a path to a disk image, or a block device +# * resize (optional): Expand the destination filesystem to fill the whole +# partition at the end of the operation; this works only with ext filesystems +# for now + +targets: + - mountPoint: / + source: / + - mountPoint: /home + source: /images/home.img + resize: true + - mountPoint: /data + source: /dev/mmcblk0p3 diff --git a/modules/removeuser.conf b/modules/removeuser.conf new file mode 100644 index 0000000..dab4b25 --- /dev/null +++ b/modules/removeuser.conf @@ -0,0 +1,6 @@ +# Removes a single user (with userdel) from the system. +# This is typically used in OEM setups or if the live user +# spills into the target system. +--- +# Username in the target system to be removed. +username: live diff --git a/modules/services.conf b/modules/services.conf new file mode 100644 index 0000000..4d34df7 --- /dev/null +++ b/modules/services.conf @@ -0,0 +1,87 @@ +# Systemd services manipulation. +# +# This module can enable services and targets for systemd +# (if packaging doesn't already do that). It can calso +# disable services (but not targets). +# +# First, services are enabled; then targets; then services +# are disabled -- this order of operations is fixed. +--- + +# There are three configuration keys for this module: +# *services*, *targets* and *disable*. The value of each +# key is a list of entries. Each entry has two keys: +# - *name* is the (string) name of the service or target that is being +# changed. Use quotes. Don't include ".target" or ".service" +# in the name. +# - *mandatory* is a boolean option, which states whether the change +# must be done successfully. If systemd reports an error while changing +# a mandatory entry, the installation will fail. When mandatory is false, +# errors for that entry (service or target) are ignored. If mandatory +# is not specified, the default is false. +# +# An entry may also be given as a single string, which is then +# interpreted as the name of the service. In this case, mandatory +# is also set to the default of false. +# +# Use [] to express an empty list. + +# # This example enables NetworkManager (and fails if it can't), +# # disables cups (and ignores failure). Then it enables the +# # graphical target (e.g. so that SDDM runs for login), and +# # finally disables pacman-init (an ArchLinux-only service). +# # +# # Enables .service +# services: +# - name: "NetworkManager" +# mandatory: true +# - name: "cups" +# mandatory: false +# +# # Enables .target +# targets: +# - name: "graphical" +# mandatory: true +# +# # Disables .service +# disable: +# - name: "pacman-init" +# mandatory: false +# +# # Disables .target +# # .. this shows how to use just the name +# disable-targets: +# - graphical +# +# # Masks (stronger version of disable). This section +# # is unusual because you **must** include the suffix +# # (e.g. ".service") as part of the name, so, e.g. to mask +# # NetworkManager (rather than just disable it) you must +# # specify "NetworkManager.service" as name. +# mask: +# - name: "NetworkManager.service" +# - mandatory: true + +# By default, no changes are made. +#services: [] +#targets: [] +#disable: [] +disable-targets: [] +mask: [] + +# Manjaro settings + +services: + - name: "NetworkManager" + mandatory: false + + - name: "org.cups.cupsd" + mandatory: false + +targets: + - name: "graphical" + mandatory: true + +disable: + - name: "pacman-init" + mandatory: false diff --git a/modules/servicescfg.conf b/modules/servicescfg.conf new file mode 100644 index 0000000..d0995f4 --- /dev/null +++ b/modules/servicescfg.conf @@ -0,0 +1,10 @@ +--- +services: + enabled: + - name: "NetworkManager" + runlevel: "default" + - name: "cups" + runlevel: "default" +# disabled: +# - name: "hwclock" +# runlevel: "boot" diff --git a/modules/shellprocess.conf b/modules/shellprocess.conf new file mode 100644 index 0000000..4734aaa --- /dev/null +++ b/modules/shellprocess.conf @@ -0,0 +1,36 @@ +# Configuration for the shell process job. +# +# Executes a list of commands found under the key *script*. +# If the top-level key *dontChroot* is true, then the commands +# are executed in the context of the live system, otherwise +# in the context of the target system. In all of the commands, +# the following substitutions will take place: +# - `@@ROOT@@` is replaced by the root mount point of the **target** +# system from the point of view of the command (for chrooted +# commands, that will be */*). +# - `@@USER@@` is replaced by the username, set on the user page. +# +# The (global) timeout for the command list can be set with +# the *timeout* key. The value is a time in seconds, default +# is 10 seconds if not set. +# +# If a command starts with "-" (a single minus sign), then the +# return value of the command following the - is ignored; otherwise, +# a failing command will abort the installation. This is much like +# make's use of - in a command. +# +# The value of *script* may be: +# - a single string; this is one command that is executed. +# - a list of strings; these are executed one at a time, by +# separate shells (/bin/sh -c is invoked for each command). +# - an object, specifying a key *command* and (optionally) +# a key *timeout* to set the timeout for this specific +# command differently from the global setting. +--- +dontChroot: false +timeout: 10 +script: + - "-touch @@ROOT@@/tmp/thingy" + - "/usr/bin/false" + - command: "/usr/local/bin/slowloris" + timeout: 3600 diff --git a/modules/tracking.conf b/modules/tracking.conf new file mode 100644 index 0000000..84c3f55 --- /dev/null +++ b/modules/tracking.conf @@ -0,0 +1,88 @@ +# Settings for various kinds of tracking that Distributions can +# enable. Distributions looking at tracking should be aware of +# the privacy (and hence communications) impact of that tracking, +# and are advised to consult the Mozilla and KDE policies on +# privacy and user tracking. +# +# There are three areas of tracking (-configuration) supported +# by Calamares It is up to individual Distributions to create +# suitable backends / configuration scripts for each. The +# different areas are: +# +# install: This is "phone home" functionality at the end of the +# install process. When enabled, it contacts the given +# URL. The URL can contain the special token $MACHINE, +# which is replaced by the machine-id of the installed +# system (if available, blank otherwise). +# +# machine: This enables machine-level tracking on a (semi-) +# continuous basis. It is meant to keep track of installed +# systems and their continued use / updating. +# +# user: This area enables user-level tracking, along the lines +# of the KDE User Telemetry Policy. It enables specific +# collection of data at a user- and application-level, +# possibly including actions done in an application. +# For the KDE environment, this enables user tracking +# with the appropriate framework, and the KDE User Telemetry +# policy applies. +# +# Each area has a key *enabled*. If the area is enabled, it is shown to +# the user. This defaults to off, which means no tracking would be +# configured or enabled by Calamares. +# +# Each area has a key *policy*, which is a Url to be opened when +# the user clicks on the corresponding Help button for an explanation +# of the details of that particular kind of tracking. If no policy +# is set, the help button is hidden. The example policy links +# go to Calamares' generic user manual. +# +# Each area may have other configuration keys, depending on the +# area and how it needs to be configured. +# +# Globally, there are two other keys: +# +# policy: (optional) url about tracking settings for this distro. +# default: (optional) level to enable by default +# +--- +# This is the global policy; it is displayed as a link on the page. +# If blank or commented out, no link is displayed on the tracking +# page. It is recommended to either provide policy URLs for each +# area, *or* one general link, and not to mix them. +policy: "https://github.com/calamares/calamares/wiki/Users-Guide#installation-tracking" + +# This is the default level to enable for tracking. If commented out, +# empty, or otherwise invalid, "none" is used, so no tracking by default. +default: user + +# The install area has one specific configuration key: +# url: this URL (remember to include the protocol, and prefer https) +# is fetched (with a GET request, and the data discarded) at +# the end of the installation process. The following tokens +# are replaced in the url (possibly by blank strings, or by 0). +# - $CPU (cpu make and model) +# - $MEMORY (amount of main memory available) +# - $DISK (total amount of disk attached) +# Typically these are used as GET parameters, as in the example. +# +# Note that phone-home only works if the system has an internet +# connection; it is a good idea to require internet in the welcome +# module then. +install: + enabled: false + policy: "https://github.com/calamares/calamares/wiki/Users-Guide#installation-tracking" + # url: "https://example.com/install.php?c=$CPU&m=$MEMORY" + +# The machine area has one specific configuration key: +# style: This string specifies what kind of tracking configuration +# needs to be done. There is currently only one valid +# style, "neon", which edits two files in the installed +# system to enable system-tracking. +machine: + enabled: false + style: neon + +# The user area is not yet implemented, and has no specific configuration. +user: + enabled: false diff --git a/modules/umount.conf b/modules/umount.conf new file mode 100644 index 0000000..22a2e74 --- /dev/null +++ b/modules/umount.conf @@ -0,0 +1,42 @@ +### Umount Module +# +# This module represents the last part of the installation, the unmounting +# of partitions used for the install. It is also the last place where it +# is possible to copy files to the target system, thus the best place to +# copy an installation log. +# +# This module has two configuration keys: +# srcLog location in the live system where the log is +# destLog location in the target system to copy the log +# +# You can either use the default source path (which is +# `/root/.cache/calamares/session.log` ) to copy the regular log, +# or if you want to use the full output of `sudo calamares -d` you will need +# to redirect standard output, for instance in a launcher script or +# in the desktop file. +# +# Example launcher script: +# +# ``` +# #!/bin/sh +# sudo /usr/bin/calamares -d > installation.log +# ``` +# +# Example desktop line: +# +# ``` +# Exec=sudo /usr/bin/calamares -d > installation.log +# ``` +# +# If no source and destination are set, no copy is attempted. If the +# copy fails for some reason, a warning is printed but the installation +# does not fail. + +--- +# example when using the normal Calamares log: +srcLog: "/root/.cache/calamares/session.log" +destLog: "/var/log/Calamares.log" + +# example when using a log created by `sudo calamares -d`: +#srcLog: "/home/live/installation.log" +#destLog: "/var/log/installation.log" diff --git a/modules/unpackfs.conf b/modules/unpackfs.conf new file mode 100644 index 0000000..454e82e --- /dev/null +++ b/modules/unpackfs.conf @@ -0,0 +1,89 @@ +# Unsquash / unpack a filesystem. Multiple sources are supported, and +# they may be squashed or plain filesystems. +# +# Configuration: +# +# from globalstorage: rootMountPoint +# from job.configuration: the path to where to mount the source image(s) +# for copying an ordered list of unpack mappings for image file <-> +# target dir relative to rootMountPoint. + +--- +# Each list item is unpacked, in order, to the target system. +# +# Each list item has the following **mandatory** attributes: +# - *source* path relative to the live / intstalling system to the image +# - *sourcefs* the type of the source files; valid entries are +# - `ext4` (copies the filesystem contents) +# - `squashfs` (unsquashes) +# - `file` (copies a file or directory) +# - (may be others if mount supports it) +# - *destination* path relative to rootMountPoint (so in the target +# system) where this filesystem is unpacked. It may be an +# empty string, which effectively is / (the root) of the target +# system. +# +# Each list item **optionally** can include the following attributes: +# - *exclude* is a list of values that is expanded into --exclude +# arguments for rsync (each entry in exclude gets its own --exclude). +# - *excludeFile* is a single file that is passed to rsync as an +# --exclude-file argument. This should be a full pathname +# inside the **host** filesystem. +# +# EXAMPLES +# +# Usually you list a filesystem image to unpack; you can use +# squashfs or an ext4 image. An empty destination is equivalent to "/", +# the root of the target system. The destination directory must exist +# in the target system. +# +# - source: "/path/to/filesystem.sqfs" +# sourcefs: "squashfs" +# destination: "" +# +# Multiple entries are unpacked in-order; if there is more than one +# item then only the first must exist beforehand -- it's ok to +# create directories with one unsquash and then to use those +# directories as a target from a second unsquash. +# +# - source: "/path/to/another/filesystem.img" +# sourcefs: "ext4" +# destination: "" +# - source: "/path/to/another/filesystem2.img" +# sourcefs: "ext4" +# destination: "/usr/lib/extra" +# +# You can list filesystem source paths relative to the Calamares run +# directory, if you use -d (this is only useful for testing, though). +# +# - source: ./example.sqfs +# sourcefs: squashfs +# destination: "" +# +# You can list individual files (copied one-by-one), or directories +# (the files inside this directory are copied directly to the destination, +# so no "dummycpp/" subdirectory is created in this example). +# Do note that the target directory must exist already (e.g. from +# extracting some other filesystem). +# +# - source: ../CHANGES +# sourcefs: file +# destination: "/tmp/derp" +# - source: ../src/modules/dummycpp +# sourcefs: file +# destination: "/tmp/derp" +# +# The *destination* and *source* are handed off to rsync, so the semantics +# of trailing slashes apply. In order to *rename* a file as it is +# copied, specify one single file (e.g. CHANGES) and a full pathname +# for its destination name, as in the example below. + +unpack: + - source: ../CHANGES + sourcefs: file + destination: "/tmp/changes.txt" + - source: src/qml/calamares/slideshow + sourcefs: file + destination: "/tmp/slideshow/" + exclude: [ "*.qmlc", "qmldir" ] + # excludeFile: /etc/calamares/modules/unpackfs/exclude-list.txt diff --git a/modules/users.conf b/modules/users.conf new file mode 100644 index 0000000..0c40fae --- /dev/null +++ b/modules/users.conf @@ -0,0 +1,85 @@ +# Configuration for the one-user-system user module. +# +# Besides these settings, the user module also places the following +# keys into the globalconfig area, based on user input in the view step. +# +# - hostname +# - username +# - password (obscured) +# - autologinUser (if enabled, set to username) +# +# These globalconfig keys are set when the jobs for this module +# are created. +--- +# Used as default groups for the created user. +# Adjust to your Distribution defaults. +defaultGroups: + - users + - lp + - video + - network + - storage + - wheel + - audio + +# Some Distributions require a 'autologin' group for the user. +# Autologin causes a user to become automatically logged in to +# the desktop environment on boot. +# Disable when your Distribution does not require such a group. +autologinGroup: autologin +# You can control the initial state for the 'autologin checkbox' in UsersViewStep here. +# Possible values are: true to enable or false to disable the checkbox by default +doAutologin: true + +# When set to a non-empty string, Calamares creates a sudoers file for the user. +# /etc/sudoers.d/10-installer +# Remember to add sudoersGroup to defaultGroups. +# +# If your Distribution already sets up a group of sudoers in its packaging, +# remove this setting (delete or comment out the line below). Otherwise, +# the setting will be duplicated in the /etc/sudoers.d/10-installer file, +# potentially confusing users. +sudoersGroup: wheel + +# Setting this to false , causes the root account to be disabled. +setRootPassword: true +# You can control the initial state for the 'root password checkbox' in UsersViewStep here. +# Possible values are: true to enable or false to disable the checkbox by default. +# When enabled the user password is used for the root account too. +# NOTE: doReusePassword requires setRootPassword to be enabled. +doReusePassword: true + +# These are optional password-requirements that a distro can enforce +# on the user. The values given in this sample file disable each check, +# as if the check was not listed at all. +# +# Checks may be listed multiple times; each is checked separately, +# and no effort is done to ensure that the checks are consistent +# (e.g. specifying a maximum length less than the minimum length +# will annoy users). +# +# The libpwquality check relies on the (optional) libpwquality library. +# Its value is a list of configuration statements that could also +# be found in pwquality.conf, and these are handed off to the +# libpwquality parser for evaluation. The check is ignored if +# libpwquality is not available at build time (generates a warning in +# the log). The Calamares password check rejects passwords with a +# score of < 40 with the given libpwquality settings. +# +# (additional checks may be implemented in CheckPWQuality.cpp and +# wired into UsersPage.cpp) +passwordRequirements: + minLength: -1 # Password at least this many characters + maxLength: -1 # Password at most this many characters + libpwquality: + - minlen=0 + - minclass=0 + +# Shell to be used for the regular user of the target system. +# There are three possible kinds of settings: +# - unset (i.e. commented out, the default), act as if set to /bin/bash +# - empty (explicit), don't pass shell information to useradd at all +# and rely on a correct configuration file in /etc/default/useradd +# - set, non-empty, use that path as shell. No validation is done +# that the shell actually exists or is executable. +# userShell: /bin/bash diff --git a/modules/welcome.conf b/modules/welcome.conf new file mode 100644 index 0000000..0361830 --- /dev/null +++ b/modules/welcome.conf @@ -0,0 +1,92 @@ +# Configuration for the welcome module. The welcome page +# displays some information from the branding file. +# Which parts it displays can be configured through +# the show* variables. +# +# In addition to displaying the welcome page, this module +# can check requirements for installation. +--- +# Display settings for various buttons on the welcome page. +# The URLs themselves come from branding.desc is the setting +# here is "true". If the setting is false, the button is hidden. +# The setting can also be a full URL which will then be used +# instead of the one from the branding file, or empty or not-set +# which will hide the button. +showSupportUrl: true +showKnownIssuesUrl: true +showReleaseNotesUrl: true + +# If this Url is set to something non-empty, a "donate" +# button is added to the welcome page alongside the +# others (see settings, above). Clicking the button opens +# the corresponding link. (This button has no corresponding +# branding.desc string) +# +# showDonateUrl: https://kde.org/community/donations/ + +# Requirements checking. These are general, generic, things +# that are checked. They may not match with the actual requirements +# imposed by other modules in the system. +requirements: + # Amount of available disk, in GiB. Floating-point is allowed here. + # Note that this does not account for *usable* disk, so it is possible + # to pass this requirement, yet have no space to install to. + requiredStorage: 5.5 + + # Amount of available RAM, in GiB. Floating-point is allowed here. + requiredRam: 1.0 + + # To check for internet connectivity, Calamares does a HTTP GET + # on this URL; on success (e.g. HTTP code 200) internet is OK. + internetCheckUrl: http://google.com + + # List conditions to check. Each listed condition will be + # probed in some way, and yields true or false according to + # the host system satisfying the condition. + # + # This sample file lists all the conditions that are known. + check: + - storage + - ram + - power + - internet + - root + - screen + # List conditions that **must** be satisfied (from the list + # of conditions, above) for installation to proceed. + # If any of these conditions are not met, the user cannot + # continue past the welcome page. + required: + # - storage + - ram + # - root + +# GeoIP checking +# +# This can be used to pre-select a language based on the country +# the user is currently in. It *assumes* that there's internet +# connectivity, though. Configuration is like in the locale module, +# but remember to use a URL that returns full data **and** to +# use a selector that will pick the country, not the timezone. +# +# To disable GeoIP checking, either comment-out the entire geoip section, +# or set the *style* key to an unsupported format (e.g. `none`). +# Also, note the analogous feature in src/modules/locale/locale.conf. +# +geoip: + style: "none" + url: "https://geoip.kde.org/v1/ubiquity" # extended XML format + selector: "CountryCode" # blank uses default, which is wrong + +# User interface +# +# The "select language" icon is an international standard, but it +# might not theme very well with your desktop environment. +# Fill in an icon name (following FreeDesktop standards) to +# use that named icon instead of the usual one. +# +# Leave blank or unset to use the international standard. +# +# Known icons in this space are "set-language" and "config-language". +# +# languageIcon: set-language diff --git a/qml/calamares/slideshow/BackButton.qml b/qml/calamares/slideshow/BackButton.qml new file mode 100644 index 0000000..2d5f4dd --- /dev/null +++ b/qml/calamares/slideshow/BackButton.qml @@ -0,0 +1,24 @@ +/* === This file is part of Calamares - === + * + * Copyright 2018, Adriaan de Groot + * + * Calamares is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Calamares is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Calamares. If not, see . + */ + +NavButton { + id: backButton + anchors.left: parent.left + visible: parent.currentSlide > 0 + isForward: false +} diff --git a/qml/calamares/slideshow/ForwardButton.qml b/qml/calamares/slideshow/ForwardButton.qml new file mode 100644 index 0000000..9f6fecf --- /dev/null +++ b/qml/calamares/slideshow/ForwardButton.qml @@ -0,0 +1,23 @@ +/* === This file is part of Calamares - === + * + * Copyright 2018, Adriaan de Groot + * + * Calamares is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Calamares is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Calamares. If not, see . + */ + +NavButton { + id: forwardButton + anchors.right: parent.right + visible: parent.currentSlide + 1 < parent.slides.length; +} diff --git a/qml/calamares/slideshow/NavButton.qml b/qml/calamares/slideshow/NavButton.qml new file mode 100644 index 0000000..33d8cad --- /dev/null +++ b/qml/calamares/slideshow/NavButton.qml @@ -0,0 +1,68 @@ +/* === This file is part of Calamares - === + * + * Copyright 2018, Adriaan de Groot + * + * Calamares is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Calamares is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Calamares. If not, see . + */ + +/* This is a navigation (arrow) button that fades in on hover, and + * which calls forward / backward navigation on the presentation it + * is in. It should be a child item of the presentation (not of a + * single slide). Use the ForwardButton or BackButton for a pre- + * configured instance that interacts with the presentation. + */ + +import QtQuick 2.5; + +Image { + id: fade + + property bool isForward : true + + width: 100 + height: 100 + anchors.verticalCenter: parent.verticalCenter + opacity: 0.3 + + OpacityAnimator { + id: fadeIn + target: fade + from: fade.opacity + to: 1.0 + duration: 500 + running: false + } + + OpacityAnimator { + id: fadeOut + target: fade + from: fade.opacity + to: 0.3 + duration: 250 + running: false + } + + MouseArea { + anchors.fill: parent + hoverEnabled: true + onEntered: { fadeOut.running = false; fadeIn.running = true } + onExited: { fadeIn.running = false ; fadeOut.running = true } + onClicked: { + if (isForward) + fade.parent.goToNextSlide() + else + fade.parent.goToPreviousSlide() + } + } +} diff --git a/qml/calamares/slideshow/Presentation.qml b/qml/calamares/slideshow/Presentation.qml new file mode 100644 index 0000000..1d2fd9c --- /dev/null +++ b/qml/calamares/slideshow/Presentation.qml @@ -0,0 +1,240 @@ +/* === This file is part of Calamares - === + * + * Copyright 2017, Adriaan de Groot + * - added looping, keys-instead-of-shortcut + * Copyright 2018, Adriaan de Groot + * - make looping a property, drop the 'c' fade-key + * - drop navigation through entering a slide number + * (this and the 'c' key make sense in a *presentation* + * slideshow, not in a passive slideshow like Calamares) + * - remove quit key + * Copyright 2019, Adriaan de Groot + * - Support "V2" loading + * - Disable shortcuts until the content is visible in Calamares + * + * SPDX-License-Identifier: LGPL-2.1 + * License-Filename: LICENSES/LGPLv2.1-Presentation + */ + +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QML Presentation System. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +import QtQuick 2.5 +import QtQuick.Window 2.0 + +Item { + id: root + + property variant slides: [] + property int currentSlide: 0 + + property bool loopSlides: true + + property bool showNotes: false; + property bool allowDelay: true; + property alias mouseNavigation: mouseArea.enabled + property bool arrowNavigation: true + property bool keyShortcutsEnabled: true + + property color titleColor: textColor; + property color textColor: "black" + property string fontFamily: "Helvetica" + property string codeFontFamily: "Courier New" + + // This is set by the C++ part of Calamares when the slideshow + // becomes visible. You can connect it to a timer, or whatever + // else needs to start only when the slideshow becomes visible. + // + // It is used in this example also to keep the keyboard shortcuts + // enabled only while the slideshow is active. + property bool activatedInCalamares: false + + // Private API + property int _lastShownSlide: 0 + + Component.onCompleted: { + var slideCount = 0; + var slides = []; + for (var i=0; i 0) + root.slides[root.currentSlide].visible = true; + } + + function switchSlides(from, to, forward) { + from.visible = false + to.visible = true + return true + } + + onCurrentSlideChanged: { + switchSlides(root.slides[_lastShownSlide], root.slides[currentSlide], currentSlide > _lastShownSlide) + _lastShownSlide = currentSlide + // Always keep focus on the slideshow + root.focus = true + } + + function goToNextSlide() { + if (root.slides[currentSlide].delayPoints) { + if (root.slides[currentSlide]._advance()) + return; + } + if (currentSlide + 1 < root.slides.length) + ++currentSlide; + else if (loopSlides) + currentSlide = 0; // Loop at the end + } + + function goToPreviousSlide() { + if (currentSlide - 1 >= 0) + --currentSlide; + else if (loopSlides) + currentSlide = root.slides.length - 1 + } + + focus: true // Keep focus + + // Navigation through key events, too + Keys.onSpacePressed: goToNextSlide() + Keys.onRightPressed: goToNextSlide() + Keys.onLeftPressed: goToPreviousSlide() + + // navigate with arrow keys + Shortcut { sequence: StandardKey.MoveToNextLine; enabled: root.activatedInCalamares && root .arrowNavigation; onActivated: goToNextSlide() } + Shortcut { sequence: StandardKey.MoveToPreviousLine; enabled: root.activatedInCalamares && root.arrowNavigation; onActivated: goToPreviousSlide() } + Shortcut { sequence: StandardKey.MoveToNextChar; enabled: root.activatedInCalamares && root.arrowNavigation; onActivated: goToNextSlide() } + Shortcut { sequence: StandardKey.MoveToPreviousChar; enabled: root.activatedInCalamares && root.arrowNavigation; onActivated: goToPreviousSlide() } + + // presentation-specific single-key shortcuts (which interfere with normal typing) + Shortcut { sequence: " "; enabled: root.activatedInCalamares && root.keyShortcutsEnabled; onActivated: goToNextSlide() } + + // standard shortcuts + Shortcut { sequence: StandardKey.MoveToNextPage; enabled: root.activatedInCalamares; onActivated: goToNextSlide() } + Shortcut { sequence: StandardKey.MoveToPreviousPage; enabled: root.activatedInCalamares; onActivated: goToPreviousSlide() } + + MouseArea { + id: mouseArea + anchors.fill: parent + acceptedButtons: Qt.LeftButton | Qt.RightButton + onClicked: { + if (mouse.button == Qt.RightButton) + goToPreviousSlide() + else + goToNextSlide() + } + onPressAndHold: goToPreviousSlide(); //A back mechanism for touch only devices + } + + Window { + id: notesWindow; + width: 400 + height: 300 + + title: "QML Presentation: Notes" + visible: root.showNotes + + Flickable { + anchors.fill: parent + contentWidth: parent.width + contentHeight: textContainer.height + + Item { + id: textContainer + width: parent.width + height: notesText.height + 2 * notesText.padding + + Text { + id: notesText + + property real padding: 16; + + x: padding + y: padding + width: parent.width - 2 * padding + + + font.pixelSize: 16 + wrapMode: Text.WordWrap + + property string notes: root.slides[root.currentSlide].notes; + + onNotesChanged: { + var result = ""; + + var lines = notes.split("\n"); + var beginNewLine = false + for (var i=0; i 0) + result += " "; + result += line; + } + } + + if (result.length == 0) { + font.italic = true; + text = "no notes.." + } else { + font.italic = false; + text = result; + } + } + } + } + } + } +} diff --git a/qml/calamares/slideshow/Slide.qml b/qml/calamares/slideshow/Slide.qml new file mode 100644 index 0000000..6b32ddf --- /dev/null +++ b/qml/calamares/slideshow/Slide.qml @@ -0,0 +1,206 @@ +/* === This file is part of Calamares - === + * + * SPDX-License-Identifier: LGPL-2.1 + * License-Filename: LICENSES/LGPLv2.1-Presentation + */ + +/**************************************************************************** +** +** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the QML Presentation System. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +import QtQuick 2.5 + +Item { + /* + Slides can only be instantiated as a direct child of a Presentation {} as they rely on + several properties there. + */ + + id: slide + + property bool isSlide: true; + + property bool delayPoints: false; + property int _pointCounter: 0; + function _advance() { + if (!parent.allowDelay) + return false; + + _pointCounter = _pointCounter + 1; + if (_pointCounter < content.length) + return true; + _pointCounter = 0; + return false; + } + + property string title; + property variant content: [] + property string centeredText + property string writeInText; + property string notes; + + property real fontSize: parent.height * 0.05 + property real fontScale: 1 + + property real baseFontSize: fontSize * fontScale + property real titleFontSize: fontSize * 1.2 * fontScale + property real bulletSpacing: 1 + + property real contentWidth: width + + // Define the slide to be the "content area" + x: parent.width * 0.05 + y: parent.height * 0.2 + width: parent.width * 0.9 + height: parent.height * 0.7 + + property real masterWidth: parent.width + property real masterHeight: parent.height + + property color titleColor: parent.titleColor; + property color textColor: parent.textColor; + property string fontFamily: parent.fontFamily; + property int textFormat: Text.PlainText + + visible: false + + Text { + id: titleText + font.pixelSize: titleFontSize + text: title; + anchors.horizontalCenter: parent.horizontalCenter + anchors.bottom: parent.top + anchors.bottomMargin: parent.fontSize * 1.5 + font.bold: true; + font.family: slide.fontFamily + color: slide.titleColor + horizontalAlignment: Text.Center + z: 1 + } + + Text { + id: centeredId + width: parent.width + anchors.centerIn: parent + anchors.verticalCenterOffset: - parent.y / 3 + text: centeredText + horizontalAlignment: Text.Center + font.pixelSize: baseFontSize + font.family: slide.fontFamily + color: slide.textColor + wrapMode: Text.Wrap + } + + Text { + id: writeInTextId + property int length; + font.family: slide.fontFamily + font.pixelSize: baseFontSize + color: slide.textColor + + anchors.fill: parent; + wrapMode: Text.Wrap + + text: slide.writeInText.substring(0, length); + + NumberAnimation on length { + from: 0; + to: slide.writeInText.length; + duration: slide.writeInText.length * 30; + running: slide.visible && parent.visible && slide.writeInText.length > 0 + } + + visible: slide.writeInText != undefined; + } + + + Column { + id: contentId + anchors.fill: parent + + Repeater { + model: content.length + + Row { + id: row + + function decideIndentLevel(s) { return s.charAt(0) == " " ? 1 + decideIndentLevel(s.substring(1)) : 0 } + property int indentLevel: decideIndentLevel(content[index]) + property int nextIndentLevel: index < content.length - 1 ? decideIndentLevel(content[index+1]) : 0 + property real indentFactor: (10 - row.indentLevel * 2) / 10; + + height: text.height + (nextIndentLevel == 0 ? 1 : 0.3) * slide.baseFontSize * slide.bulletSpacing + x: slide.baseFontSize * indentLevel + visible: (!slide.parent.allowDelay || !delayPoints) || index <= _pointCounter + + Rectangle { + id: dot + anchors.baseline: text.baseline + anchors.baselineOffset: -text.font.pixelSize / 2 + width: text.font.pixelSize / 3 + height: text.font.pixelSize / 3 + color: slide.textColor + radius: width / 2 + opacity: text.text.length == 0 ? 0 : 1 + } + + Item { + id: space + width: dot.width * 1.5 + height: 1 + } + + Text { + id: text + width: slide.contentWidth - parent.x - dot.width - space.width + font.pixelSize: baseFontSize * row.indentFactor + text: content[index] + textFormat: slide.textFormat + wrapMode: Text.WordWrap + color: slide.textColor + horizontalAlignment: Text.AlignLeft + font.family: slide.fontFamily + } + } + } + } + +} diff --git a/qml/calamares/slideshow/SlideCounter.qml b/qml/calamares/slideshow/SlideCounter.qml new file mode 100644 index 0000000..e59476f --- /dev/null +++ b/qml/calamares/slideshow/SlideCounter.qml @@ -0,0 +1,38 @@ +/* === This file is part of Calamares - === + * + * Copyright 2018, Adriaan de Groot + * + * Calamares is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Calamares is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Calamares. If not, see . + */ + +/* This control just shows a (non-translated) count of the slides + * in the slideshow in the format "n / total". + */ + +import QtQuick 2.5; + +Rectangle { + id: slideCounter + anchors.right: parent.right + anchors.bottom: parent.bottom + width: 100 + height: 50 + + Text { + id: slideCounterText + anchors.centerIn: parent + //: slide counter, %1 of %2 (numeric) + text: qsTr("%L1 / %L2").arg(parent.parent.currentSlide + 1).arg(parent.parent.slides.length) + } +} diff --git a/qml/calamares/slideshow/qmldir b/qml/calamares/slideshow/qmldir new file mode 100644 index 0000000..7b964b8 --- /dev/null +++ b/qml/calamares/slideshow/qmldir @@ -0,0 +1,10 @@ +module calamares.slideshow + +Presentation 1.0 Presentation.qml +Slide 1.0 Slide.qml + +NavButton 1.0 NavButton.qml +ForwardButton 1.0 ForwardButton.qml +BackButton 1.0 BackButton.qml + +SlideCounter 1.0 SlideCounter.qml diff --git a/settings.conf b/settings.conf new file mode 100644 index 0000000..4fe02c7 --- /dev/null +++ b/settings.conf @@ -0,0 +1,183 @@ +# Configuration file for Calamares +# Syntax is YAML 1.2 +--- +# Modules can be job modules (with different interfaces) and QtWidgets view +# modules. They could all be placed in a number of different paths. +# "modules-search" is a list of strings, each of these can either be a full +# path to a directory or the keyword "local". +# +# "local" means: +# - modules in $LIBDIR/calamares/modules, with +# - settings in SHARE/calamares/modules or /etc/calamares/modules. +# In debug-mode (e.g. calamares -d) "local" also adds some paths +# that make sense from inside the build-directory, so that you +# can build-and-run with the latest modules immediately. +# +# Strings other than "local" are taken as paths and interpreted +# relative to wherever Calamares is started. It is therefore **strongly** +# recommended to use only absolute paths here. This is mostly useful +# if your distro has forks of standard Calamares modules, but also +# uses some form of upstream packaging which might overwrite those +# forked modules -- then you can keep modules somewhere outside of +# the "regular" module tree. +# +# +# YAML: list of strings. +modules-search: [ local ] + +# Instances section. This section is optional, and it defines custom instances +# for modules of any kind. An instance entry has an module name, an instance +# name, and a configuration file name. The primary goal of this mechanism is +# to allow loading multiple instances of the same module, with different +# configuration. If you don't need this, the instances section can safely be +# left empty. +# +# Module name plus instance name makes an instance key, e.g. +# "webview@owncloud", where "webview" is the module name (for the webview +# viewmodule) and "owncloud" is the instance name. In the *sequence* +# section below, use instance-keys to name instances (instead of just +# a module name, for modules which have only a single instance). +# +# Every module implicitly has an instance with the instance name equal +# to its module name, e.g. "welcome@welcome". In the *sequence* section, +# mentioning a module without a full instance key (e.g. "welcome") +# means that implicit module. +# +# An instance must specify its configuration file (e.g. `webview-home.conf`). +# The implicit instances all have configuration files named `.conf`. +# This (implict) way matches the source examples, where the welcome +# module contains an example `welcome.conf`. +# +# For more information on running module instances, run Calamares in debug +# mode and check the Modules page in the Debug information interface. +# +# A module that is often used with instances is shellprocess, which will +# run shell commands specified in the configuration file. By configuring +# more than one instance of the module, multiple shell sessions can be run +# during install. +# +# YAML: list of maps of string:string key-value pairs. +#instances: +#- id: owncloud +# module: webview +# config: owncloud.conf + +# Sequence section. This section describes the sequence of modules, both +# viewmodules and jobmodules, as they should appear and/or run. +# +# A jobmodule instance key (or name) can only appear in an exec phase, whereas +# a viewmodule instance key (or name) can appear in both exec and show phases. +# There is no limit to the number of show or exec phases. However, the same +# module instance key should not appear more than once per phase, and +# deployers should take notice that the global storage structure is persistent +# throughout the application lifetime, possibly influencing behavior across +# phases. A show phase defines a sequence of viewmodules (and therefore +# pages). These viewmodules can offer up jobs for the execution queue. +# +# An exec phase displays a progress page (with brandable slideshow). This +# progress page iterates over the modules listed in the *immediately +# preceding* show phase, and enqueues their jobs, as well as any other jobs +# from jobmodules, in the order defined in the current exec phase. +# +# It then executes the job queue and clears it. If a viewmodule offers up a +# job for execution, but the module name (or instance key) isn't listed in the +# immediately following exec phase, this job will not be executed. +# +# YAML: list of lists of strings. +sequence: +- show: + - welcome + - locale + - keyboard + - partition + - users + - summary +- exec: + - partition + - mount + - unpackfs + - machineid + - fstab + - locale + - keyboard + - localecfg + - luksopenswaphookcfg + - luksbootkeyfile + - plymouthcfg + - initcpiocfg + - initcpio + - users + - displaymanager + - mhwdcfg + - networkcfg + - hwclock + - services + - grubcfg + - bootloader + - postcfg + - umount +- show: + - finished + +# A branding component is a directory, either in SHARE/calamares/branding or +# in /etc/calamares/branding (the latter takes precedence). The directory must +# contain a YAML file branding.desc which may reference additional resources +# (such as images) as paths relative to the current directory. +# +# A branding component can also ship a QML slideshow for execution pages, +# along with translation files. +# +# Only the name of the branding component (directory) should be specified +# here, Calamares then takes care of finding it and loading the contents. +# +# YAML: string. +branding: tromjaro + +# If this is set to true, Calamares will show an "Are you sure?" prompt right +# before each execution phase, i.e. at points of no return. If this is set to +# false, no prompt is shown. Default is false, but Calamares will complain if +# this is not explicitly set. +# +# YAML: boolean. +prompt-install: false + +# If this is set to true, Calamares will execute all target environment +# commands in the current environment, without chroot. This setting should +# only be used when setting up Calamares as a post-install configuration tool, +# as opposed to a full operating system installer. +# +# Some official Calamares modules are not expected to function with this +# setting. (e.g. partitioning seems like a bad idea, since that is expected to +# have been done already) +# +# Default is false (for a normal installer), but Calamares will complain if +# this is not explicitly set. +# +# YAML: boolean. +dont-chroot: false + +# If this is set to true, Calamares refers to itself as a "setup program" +# rather than an "installer". Defaults to the value of dont-chroot, but +# Calamares will complain if this is not explicitly set. +# oem-setup: true + +# If this is set to true, the "Cancel" button will be disabled entirely. +# The button is also hidden from view. +# +# This can be useful if when e.g. Calamares is used as a post-install +# configuration tool and you require the user to go through all the +# configuration steps. +# +# Default is false, but Calamares will complain if this is not explicitly set. +# +# YAML: boolean. +disable-cancel: false + +# If this is set to true, the "Cancel" button will be disabled once +# you start the 'Installation', meaning there won't be a way to cancel +# the Installation until it has finished or installation has failed. +# +# Default is false, but Calamares will complain if this is not explicitly set. +# +# YAML: boolean. +disable-cancel-during-exec: false