diff --git a/install-danos.sh b/install-danos.sh index dc3001a..a4a80f4 100755 --- a/install-danos.sh +++ b/install-danos.sh @@ -12,7 +12,13 @@ NEW_USERNAME=$(grep ":1000:" /etc/passwd | cut -d: -f1) export NEW_USERHOME export NEW_USERNAME # - +# Add user-setup and first-login-user-setup, so that they can be added to as needed and run at the end and on first login. +echo "#!/usr/bin/env bash" >>"$NEW_USERHOME"/.first-login-user-setup +chmod +x "$NEW_USERHOME"/.first-login-user-setup +chown "$NEW_USERNAME":"$NEW_USERNAME" "$NEW_USERHOME"/.first-login-user-setup +echo "#!/usr/bin/bash" >>"$NEW_USERHOME"/.user-setup +chmod +x "$NEW_USERHOME"/.user-setup +chown "$NEW_USERNAME":"$NEW_USERNAME" "$NEW_USERHOME"/.user-setup # User command #runuser -l "$NEW_USERNAME" -c 'commands' # @@ -142,7 +148,7 @@ DEBIAN_FRONTEND=noninteractive apt update if lscpu | grep -iq "QEMU"; then echo "QEMU Virtual CPU detected. Installing xrdp and restarting service..." apt update - DEBIAN_FRONTEND=noninteractive apt -y install xserver-xorg picom arandr autorandr rofi xrdp xorgxrdp qemu-guest-agent xsecurelock xss-lock + DEBIAN_FRONTEND=noninteractive apt -y install xserver-xorg xserver-xorg-input-all picom arandr autorandr rofi xrdp xorgxrdp qemu-guest-agent xsecurelock xss-lock usermod -aG xrdp "$NEW_USERNAME" systemctl restart xrdp.service ufw allow 3389/tcp comment Remote_Desktop_Protocol @@ -158,7 +164,7 @@ DEBIAN_FRONTEND=noninteractive apt -y install bash-completion kitty bind9-dnsuti DEBIAN_FRONTEND=noninteractive apt -y install build-essential dkms mokutil ufw gufw unzip cron openssh-server xdg-desktop-portal xdg-desktop-portal-gtk unattended-upgrades #DEBIAN_FRONTEND=noninteractive apt -y install xdg-desktop-portal-wlr wofi DEBIAN_FRONTEND=noninteractive apt -y install mc thunar gvfs gvfs-backends nsxiv mpv flameshot parted gparted mpd mpc ncmpcpp fzf ccrypt xarchiver notepadqq -DEBIAN_FRONTEND=noninteractive apt -y install colord mesa-utils htop tmux numlockx xdg-utils fancontrol xbacklight brightnessctl pm-utils ncdu less +DEBIAN_FRONTEND=noninteractive apt -y install colord mesa-utils htop btop tmux numlockx xdg-utils fancontrol xbacklight brightnessctl pm-utils ncdu less tealdeer DEBIAN_FRONTEND=noninteractive apt -y install fwupd firmware-iwlwifi bluez-firmware # # Keyboard layouts, fonts, character sets and replacement tables for kbd / Keyboard @@ -933,15 +939,14 @@ GTK4SETTINGS CURRENT_HOSTNAME=$(hostname) if [ "$CURRENT_HOSTNAME" = "danos" ] || [ "$CURRENT_HOSTNAME" = "debian" ]; then # Generate and set a new hostname - THE_NEW_HOSTNAME="$(openssl rand -base64 6)-DanOS" + THE_NEW_HOSTNAME="$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | head -c 6)-DanOS" + #THE_NEW_HOSTNAME="$(openssl rand -base64 6)-DanOS" echo "$THE_NEW_HOSTNAME" | tee /etc/hostname sed -i "s/127.0.1.1.*/127.0.1.1 $THE_NEW_HOSTNAME/" /etc/hosts # Update /etc/machine-info (for systems using systemd) #sed -i "s/HOSTNAME=.*/HOSTNAME=$THE_NEW_HOSTNAME/" /etc/machine-info fi # -echo "#!/usr/bin/env bash" >>"$NEW_USERHOME"/.first-login-user-setup -chown "$NEW_USERNAME":"$NEW_USERNAME" "$NEW_USERHOME"/.first-login-user-setup # # Remove extrepo_google_chrome.sources it makes its own source list file after installation rm /etc/apt/sources.list.d/extrepo_google_chrome.sources @@ -961,6 +966,19 @@ cat <<"FIRSTUSERLOGINSETUP" >>"$NEW_USERHOME"/.first-login-user-setup if [ -f "$HOME/.first-login-user-setup" ]; then echo "Running User first login setup..." xdg-user-dirs-update + gsettings set org.gnome.desktop.interface color-scheme "prefer-dark" + gsettings set org.gnome.desktop.interface gtk-theme "EliverLara-Nordic" + # Remove first-login-user-setup file + rm -f "$HOME"/.first-login-user-setup +fi +# +FIRSTUSERLOGINSETUP +# +# Add user-setup + +cat <<"USERSETUP" >>"$NEW_USERHOME"/.user-setup +# User setup +if [ -f "$HOME/.user-setup" ]; then mkdir -p ~/Screenshots xdg-mime default kitty.desktop text/x-shellscript xdg-mime default nsxiv.desktop image/jpeg @@ -968,15 +986,17 @@ if [ -f "$HOME/.first-login-user-setup" ]; then xdg-mime default thunar.desktop inode/directory # Set xdg-desktop-portal prefer dark mode. # See more run: gsettings list-schemas - gsettings set org.gnome.desktop.interface color-scheme "prefer-dark" - gsettings set org.gnome.desktop.interface gtk-theme "EliverLara-Nordic" # Sound systemctl enable --user systemctl enable --user --now pipewire.socket pipewire-pulse.socket wireplumber.service - # Remove first-login-user-setup file - rm -f "$HOME"/.first-login-user-setup + # Remove .user-setup file + rm -f "$HOME"/.user-setup fi # -FIRSTUSERLOGINSETUP +USERSETUP +# +# Run first-login-user-setup under the installation +# shellcheck disable=SC2016 +runuser -l "$NEW_USERNAME" -c '/usr/bin/bash $HOME/.user-setup' # # Add / Copy the ETC Environment if [ -d /tmp/src/etc/ ]; then diff --git a/iso-to-usb b/iso-to-usb index daadd1d..ddcfbdc 100755 --- a/iso-to-usb +++ b/iso-to-usb @@ -38,11 +38,11 @@ fi # Execute the dd command echo "Writing '$1' to '$2'..." -time sudo dd bs=4M status=progress conv=fsync oflag=direct if="$1" of="/dev/$2" +time sudo dd bs=8M status=progress conv=fsync oflag=direct if="$1" of="/dev/$2" # Check the exit code of the dd command if [ $? -eq 0 ]; then - echo "Write complete." + echo "ISO to USB Write complete." else echo "Write failed. Check for errors." fi diff --git a/preseed-user.cfg b/preseed-user.cfg index 080c9cd..c59dd33 100644 --- a/preseed-user.cfg +++ b/preseed-user.cfg @@ -45,8 +45,7 @@ d-i netcfg/hostname string danos # d-i netcfg/get_hostname string # Provide a default domain but still ask -d-i netcfg/get_domain string -d-i netcfg/get_domain seen false +d-i netcfg/get_domain string ### Description: Wireless ESSID for ${iface}: # Attempting to find an available wireless network failed. @@ -82,17 +81,17 @@ d-i netcfg/get_domain seen false ### Localization -# TEST +# TEST OK # Language and locale -d-i debian-installer/language string da -d-i debian-installer/country string DK -d-i debian-installer/locale string da_DK.UTF-8 +#d-i debian-installer/language string da +#d-i debian-installer/country string DK +#d-i debian-installer/locale string da_DK.UTF-8 # Keyboard configuration -d-i keyboard-configuration/xkb-keymap select dk -d-i keyboard-configuration/variant select Danish -d-i keyboard-configuration/layoutcode string dk -d-i keyboard-configuration/layout select da +#d-i keyboard-configuration/xkb-keymap select dk +#d-i keyboard-configuration/variant select Danish +#d-i keyboard-configuration/layoutcode string dk +#d-i keyboard-configuration/layout select da # Preseeding only locale sets language, country and locale. #d-i debian-installer/locale string da_DK.UTF-8 @@ -100,7 +99,9 @@ d-i localechooser/translation/warn-light boolean true d-i localechooser/translation/warn-severe boolean true # # FROM sudo debconf-get-selections --installer -d-i debconf/language string da +#d-i debconf/language string da +# +# # # The values can also be preseeded individually for greater flexibility. #d-i debian-installer/locale string da_DK.UTF-8 @@ -182,7 +183,7 @@ d-i netcfg/choose_interface select auto # values set here. However, setting the values still prevents the questions # from being shown, even if values come from dhcp. #d-i netcfg/get_hostname string danos-test -#d-i netcfg/get_domain string +#d-i netcfg/get_domain string # If you want to force a hostname, regardless of what either the DHCP @@ -242,11 +243,11 @@ d-i passwd/root-login boolean false #d-i passwd/root-password-crypted password [crypt(3) hash] # To create a normal user account. -d-i passwd/user-fullname string DanOS Debian -d-i passwd/username string danos +#d-i passwd/user-fullname string DanOS Debian +#d-i passwd/username string danos # Normal user's password, either in clear text -d-i passwd/user-password password Danos -d-i passwd/user-password-again password Danos +#d-i passwd/user-password password Danos +#d-i passwd/user-password-again password Danos # or encrypted using a crypt(3) hash. #d-i passwd/user-password-crypted password [crypt(3) hash] # Create the first user with the specified UID instead of the default. @@ -288,7 +289,7 @@ d-i clock-setup/ntp boolean true # - regular: use the usual partition types for your architecture # - lvm: use LVM to partition the disk # - crypto: use LVM within an encrypted partition -d-i partman-auto/method string regular +#d-i partman-auto/method string regular # You can define the amount of space that will be used for the LVM volume # group. It can either be a size with its unit (eg. 20 GB), a percentage of diff --git a/preseed-user.cfg.bak b/preseed-user.cfg.bak new file mode 100644 index 0000000..080c9cd --- /dev/null +++ b/preseed-user.cfg.bak @@ -0,0 +1,607 @@ +#_preseed_V1 +# DanOS Version +#### Contents of the preconfiguration file (for trixie) +# +# debconf-utils +# Get info for debian-installer run: sudo debconf-get-selections --installer +# Check / Test the preseed.cfg file run: sudo debconf-set-selections -c preseed.cfg +# +d-i auto-install/enable boolean true +d-i preseed/interactive boolean true +# +# Set prioritys +d-i debconf/priority string high +#d-i debconf/priority string critical +#d-i debconf/priority string high +#d-i debconf/priority string medium +#d-i debconf/priority string low + +# Choices: SSID +### Description: Wireless ESSID for ${iface}: +# ${iface} is a wireless network interface. Please enter the name (the ESSID) +# of the wireless network you would like ${iface} to use. If you would like +# to use any available network, leave this field blank. +#d-i netcfg/wireless_essid string + +#d-i netcfg/get_hostname string danos +#d-i netcfg/get_hostname seen false + + +# Make sure installer prompts for SSID and WPA key +#d-i netcfg/wireless_essid note critical +#d-i netcfg/wireless_show_essids note critical +#d-i netcfg/wireless_wpa note critical +#d-i netcfg/wireless_security_type note critical +d-i netcfg/hostname string danos +#d-i netcfg/wireless_wpa string +#d-i netcfg/wireless_wpa seen false +#d-i netcfg/wireless_show_essids select +#d-i netcfg/wireless_show_essids seen false +#d-i netcfg/wireless_essid seen false +#d-i netcfg/wireless_security_type select wpa +#d-i netcfg/wireless_security_type seen false +# Ask user for hostname +# (don’t preseed, so installer will prompt) +# d-i netcfg/get_hostname string + +# Provide a default domain but still ask +d-i netcfg/get_domain string +d-i netcfg/get_domain seen false + +### Description: Wireless ESSID for ${iface}: +# Attempting to find an available wireless network failed. +# . +# ${iface} is a wireless network interface. Please enter the name (the ESSID) +# of the wireless network you would like ${iface} to use. To connect to any +# available network, leave this field blank. +#d-i netcfg/wireless_essid_again string + +### Description: Wireless network type for ${iface}: +# Choose WEP/Open if the network is open or secured with WEP. +# Choose WPA/WPA2 if the network is protected with WPA/WPA2 PSK +# (Pre-Shared Key). +#d-i netcfg/wireless_security_type select wpa +# Possible choices: WEP/Open Network, WPA/WPA2 PSK +#d-i priority-critical select netcfg/wireless_show_essids + +# WPA/WPA2-adgangsfrase for den trådløse +#d-i priority-critical select netcfg/wireless_wpa +#d-i netcfg/wireless_wpa string seen false +#d-i netcfg/wireless_show_essids select manual +#d-i netcfg/wireless_security_type select seen false +#d-i netcfg/wireless_essid select seen false +#d-i netcfg/ seen true +#d-i netcfg/hostname string seen false + +### Description: Wireless network: +# Select the wireless network to use during the installation process. +#d-i netcfg/wireless_show_essids select +# Possible choices: ${essid_list} Enter ESSID manually + +#d-i debconf/priority string high + +### Localization + +# TEST +# Language and locale +d-i debian-installer/language string da +d-i debian-installer/country string DK +d-i debian-installer/locale string da_DK.UTF-8 + +# Keyboard configuration +d-i keyboard-configuration/xkb-keymap select dk +d-i keyboard-configuration/variant select Danish +d-i keyboard-configuration/layoutcode string dk +d-i keyboard-configuration/layout select da + +# Preseeding only locale sets language, country and locale. +#d-i debian-installer/locale string da_DK.UTF-8 +d-i localechooser/translation/warn-light boolean true +d-i localechooser/translation/warn-severe boolean true +# +# FROM sudo debconf-get-selections --installer +d-i debconf/language string da +# +# The values can also be preseeded individually for greater flexibility. +#d-i debian-installer/locale string da_DK.UTF-8 +#d-i debian-installer/language string da +#d-i debian-installer/country string DK + +# Optionally specify additional locales to be generated. +#d-i localechooser/supported-locales multiselect en_US.UTF-8, da_DK.UTF-8 + +# Keyboard selection. +#d-i keyboard-configuration/xkb-keymap select dk +# d-i keyboard-configuration/toggle select No toggling + +### Speech synthesis +# Which ALSA card to be used for software speech. +# Can be a number from 0, or an ID as seen in +# /sys/class/sound/card*/id +#d-i espeakup/card string 0 + +# Which espeak-ng voice to be used +#d-i espeakup/voice string en + +### Network configuration +# Disable network configuration entirely. This is useful for cdrom +# installations on non-networked devices where the network questions, +# warning and long timeouts are a nuisance. +#d-i netcfg/enable boolean false + +# netcfg will choose an interface that has link if possible. This makes it +# skip displaying a list if there is more than one interface. +d-i netcfg/choose_interface select auto + +# Set prioritys +#d-i debconf/priority string critical +#d-i netcfg/hostname?=danos-test +#d-i netcfg/hostname string danos-test +#d-i netcfg/hostname seen true + +# To pick a particular interface instead: +#d-i netcfg/choose_interface select eth1 + +# To set a different link detection timeout (default is 3 seconds). +# Values are interpreted as seconds. +#d-i netcfg/link_wait_timeout string 10 + +# If you have a slow dhcp server and the installer times out waiting for +# it, this might be useful. +#d-i netcfg/dhcp_timeout string 60 +#d-i netcfg/dhcpv6_timeout string 60 + +# Automatic network configuration is the default. +# If you prefer to configure the network manually, uncomment this line and +# the static network configuration below. +#d-i netcfg/disable_autoconfig boolean true + +# If you want the preconfiguration file to work on systems both with and +# without a dhcp server, uncomment these lines and the static network +# configuration below. +#d-i netcfg/dhcp_failed note +#d-i netcfg/dhcp_options select Configure network manually + +# Static network configuration. +# +# IPv4 example +#d-i netcfg/get_ipaddress string 192.168.1.42 +#d-i netcfg/get_netmask string 255.255.255.0 +#d-i netcfg/get_gateway string 192.168.1.1 +#d-i netcfg/get_nameservers string 192.168.1.1 +#d-i netcfg/confirm_static boolean true +# +# IPv6 example +#d-i netcfg/get_ipaddress string fc00::2 +#d-i netcfg/get_netmask string ffff:ffff:ffff:ffff:: +#d-i netcfg/get_gateway string fc00::1 +#d-i netcfg/get_nameservers string fc00::1 +#d-i netcfg/confirm_static boolean true + +# Any hostname and domain names assigned from dhcp take precedence over +# values set here. However, setting the values still prevents the questions +# from being shown, even if values come from dhcp. +#d-i netcfg/get_hostname string danos-test +#d-i netcfg/get_domain string + + +# If you want to force a hostname, regardless of what either the DHCP +# server returns or what the reverse DNS entry for the IP is, uncomment +# and adjust the following line. +#d-i netcfg/hostname string somehost + +# Disable that annoying WEP key dialog. +d-i netcfg/wireless_wep string +# The wacky dhcp hostname that some ISPs use as a password of sorts. +#d-i netcfg/dhcp_hostname string radish + +# If you want to completely disable firmware lookup (i.e. not use firmware +# files or packages that might be available on installation images): +#d-i hw-detect/firmware-lookup string never + +# If non-free firmware is needed for the network or other hardware, you can +# configure the installer to always try to load it, without prompting. Or +# change to false to disable asking. +d-i hw-detect/load_firmware boolean true + +### Network console +# Use the following settings if you wish to make use of the network-console +# component for remote installation over SSH. This only makes sense if you +# intend to perform the remainder of the installation manually. +#d-i anna/choose_modules string network-console +#d-i network-console/authorized_keys_url string http://10.0.0.1/openssh-key +#d-i network-console/password password r00tme +#d-i network-console/password-again password r00tme + +### Mirror settings +# Mirror protocol: +# If you select ftp, the mirror/country string does not need to be set. +# Default value for the mirror protocol: http. +#d-i mirror/protocol string ftp +d-i mirror/country string manual +d-i mirror/http/hostname string http.deb.debian.org +d-i mirror/http/directory string /debian +d-i mirror/http/proxy string + +# Suite to install. +#d-i mirror/suite string testing +# Suite to use for loading installer components (optional). +#d-i mirror/udeb/suite string testing + +### Account setup +# Skip creation of a root account (normal user account will be able to +# use sudo). +d-i passwd/root-login boolean false +# Alternatively, to skip creation of a normal user account. +#d-i passwd/make-user boolean false + +# Root password, either in clear text +#d-i passwd/root-password password Power2ad +#d-i passwd/root-password-again password Power2ad +# or encrypted using a crypt(3) hash. +#d-i passwd/root-password-crypted password [crypt(3) hash] + +# To create a normal user account. +d-i passwd/user-fullname string DanOS Debian +d-i passwd/username string danos +# Normal user's password, either in clear text +d-i passwd/user-password password Danos +d-i passwd/user-password-again password Danos +# or encrypted using a crypt(3) hash. +#d-i passwd/user-password-crypted password [crypt(3) hash] +# Create the first user with the specified UID instead of the default. +#d-i passwd/user-uid string 1010 + +# The user account will be added to some standard initial groups. To +# override that, use this. +#d-i passwd/user-default-groups string audio cdrom video + +### Clock and time zone setup +# Controls whether or not the hardware clock is set to UTC. +#d-i clock-setup/utc boolean true + +# You may set this to any valid setting for $TZ; see the contents of +# /usr/share/zoneinfo/ for valid values. +#d-i time/zone string Europe/Copenhagen + +# Controls whether to use NTP to set the clock during the install +d-i clock-setup/ntp boolean true +# NTP server to use. The default is almost always fine here. +#d-i clock-setup/ntp-server string ntp.example.com + +#d-i debconf/priority string critical + +### Partitioning +## Partitioning example +# If the system has free space you can choose to only partition that space. +# This is only honoured if partman-auto/method (below) is not set. +#d-i partman-auto/init_automatically_partition select biggest_free + +# Alternatively, you may specify a disk to partition. If the system has only +# one disk the installer will default to using that, but otherwise the device +# name must be given in traditional, non-devfs format (so e.g. /dev/sda +# and not e.g. /dev/discs/disc0/disc). +# For example, to use the first SCSI/SATA hard disk: +#d-i partman-auto/disk string /dev/sda +# In addition, you'll need to specify the method to use. +# The presently available methods are: +# - regular: use the usual partition types for your architecture +# - lvm: use LVM to partition the disk +# - crypto: use LVM within an encrypted partition +d-i partman-auto/method string regular + +# You can define the amount of space that will be used for the LVM volume +# group. It can either be a size with its unit (eg. 20 GB), a percentage of +# free space or the 'max' keyword. +#d-i partman-auto-lvm/guided_size string max + +# If one of the disks that are going to be automatically partitioned +# contains an old LVM configuration, the user will normally receive a +# warning. This can be preseeded away... +#d-i partman-lvm/device_remove_lvm boolean true +# The same applies to pre-existing software RAID array: +#d-i partman-md/device_remove_md boolean true +# And the same goes for the confirmation to write the lvm partitions. +#d-i partman-lvm/confirm boolean true +#d-i partman-lvm/confirm_nooverwrite boolean true + +# You can choose one of the predefined partitioning recipes: +# - atomic: all files in one partition +# - home: separate /home partition +# - multi: separate /home, /var, and /tmp partitions +# - server: separate /var and /srv partitions; swap limitted to 1G +# - small_disk: scheme dedicated to small harddrives (under 10GB) +d-i partman-auto/choose_recipe select atomic + +# Or provide a recipe of your own... +# If you have a way to get a recipe file into the d-i environment, you can +# just point at it. +#d-i partman-auto/expert_recipe_file string /hd-media/recipe + +# If not, you can put an entire recipe into the preconfiguration file in one +# (logical) line. This example creates a small /boot partition, suitable +# swap, and uses the rest of the space for the root partition: +#d-i partman-auto/expert_recipe string \ +# boot-root :: \ +# 40 50 100 ext3 \ +# $primary{ } $bootable{ } \ +# method{ format } format{ } \ +# use_filesystem{ } filesystem{ ext3 } \ +# mountpoint{ /boot } \ +# . \ +# 500 10000 1000000000 ext3 \ +# method{ format } format{ } \ +# use_filesystem{ } filesystem{ ext3 } \ +# mountpoint{ / } \ +# . \ +# 64 512 300% linux-swap \ +# method{ swap } format{ } \ +# . + +# The full recipe format is documented in the file partman-auto-recipe.txt +# included in the 'debian-installer' package or available from D-I source +# repository. This also documents how to specify settings such as file +# system labels, volume group names and which physical devices to include +# in a volume group. + +## Partitioning for EFI +# If your system needs an EFI partition you could add something like +# this to the recipe above, as the first element in the recipe: +# 538 538 1075 free \ +# $iflabel{ gpt } \ +# $reusemethod{ } \ +# method{ efi } \ +# format{ } \ +# . \ +# +# The fragment above is for the amd64 architecture; the details may be +# different on other architectures. The 'partman-auto' package in the +# D-I source repository may have an example you can follow. + +# This makes partman automatically partition without confirmation, provided +# that you told it what to do using one of the methods above. +d-i partman-partitioning/confirm_write_new_label boolean true +d-i partman/choose_partition select finish +d-i partman/confirm boolean true +d-i partman/confirm_nooverwrite boolean true + +# Force UEFI booting ('BIOS compatibility' will be lost). Default: false. +#d-i partman-efi/non_efi_system boolean true +# Ensure the partition table is GPT - this is required for EFI +#d-i partman-partitioning/choose_label select gpt +#d-i partman-partitioning/default_label string gpt + +# When disk encryption is enabled, skip wiping the partitions beforehand. +d-i partman-auto-crypto/erase_disks boolean false + +## Partitioning using RAID +# The method should be set to "raid". +#d-i partman-auto/method string raid +# Specify the disks to be partitioned. They will all get the same layout, +# so this will only work if the disks are the same size. +#d-i partman-auto/disk string /dev/sda /dev/sdb + +# Next you need to specify the physical partitions that will be used. +#d-i partman-auto/expert_recipe string \ +# multiraid :: \ +# 1000 5000 4000 raid \ +# $primary{ } method{ raid } \ +# . \ +# 64 512 300% raid \ +# method{ raid } \ +# . \ +# 500 10000 1000000000 raid \ +# method{ raid } \ +# . + +# Last you need to specify how the previously defined partitions will be +# used in the RAID setup. Remember to use the correct partition numbers +# for logical partitions. RAID levels 0, 1, 5, 6 and 10 are supported; +# devices are separated using "#". +# Parameters are: +# \ +# + +#d-i partman-auto-raid/recipe string \ +# 1 2 0 ext3 / \ +# /dev/sda1#/dev/sdb1 \ +# . \ +# 1 2 0 swap - \ +# /dev/sda5#/dev/sdb5 \ +# . \ +# 0 2 0 ext3 /home \ +# /dev/sda6#/dev/sdb6 \ +# . + +# For additional information see the file partman-auto-raid-recipe.txt +# included in the 'debian-installer' package or available from D-I source +# repository. + +# This makes partman automatically partition without confirmation. +#d-i partman-md/confirm boolean true +#d-i partman-partitioning/confirm_write_new_label boolean true +#d-i partman/choose_partition select finish +#d-i partman/confirm boolean true +#d-i partman/confirm_nooverwrite boolean true + +## Controlling how partitions are mounted +# The default is to mount by UUID, but you can also choose "traditional" to +# use traditional device names, or "label" to try filesystem labels before +# falling back to UUIDs. +#d-i partman/mount_style select uuid + +### Base system installation +# Configure APT to not install recommended packages by default. Use of this +# option can result in an incomplete system and should only be used by very +# experienced users. +#d-i base-installer/install-recommends boolean false + +# The kernel image (meta) package to be installed; "none" can be used if no +# kernel is to be installed. +#d-i base-installer/kernel/image string linux-image-686 + +### Apt setup +# Choose, if you want to scan additional installation media +# (default: false). +d-i apt-setup/cdrom/set-first boolean false +# You can choose to install non-free firmware. +d-i apt-setup/non-free-firmware boolean true +# You can choose to install non-free and contrib software. +d-i apt-setup/non-free boolean true +d-i apt-setup/contrib boolean true +# Uncomment the following line, if you don't want to have the sources.list +# entry for a DVD/BD installation image active in the installed system +# (entries for netinst or CD images will be disabled anyway, regardless of +# this setting). +#d-i apt-setup/disable-cdrom-entries boolean true +# Uncomment this if you don't want to use a network mirror. +d-i apt-setup/use_mirror boolean false +# Select which update services to use; define the mirrors to be used. +# Values shown below are the normal defaults. +d-i apt-setup/services-select multiselect security, updates +d-i apt-setup/security_host string security.debian.org + +# Additional repositories, local[0-9] available +#d-i apt-setup/local0/repository string \ +# http://local.server/debian stable main +#d-i apt-setup/local0/comment string local server +# Enable deb-src lines +#d-i apt-setup/local0/source boolean true +# URL to the public key of the local repository; you must provide a key or +# apt will complain about the unauthenticated repository and so the +# sources.list line will be left commented out. +#d-i apt-setup/local0/key string http://local.server/key +# or one can provide it in-line by base64 encoding the contents of the +# key file (with `base64 -w0`) and specifying it thus: +#d-i apt-setup/local0/key string base64://LS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tCi4uLgo= +# The content of the key file is checked to see if it appears to be ASCII-armoured. +# If so it will be saved with an ".asc" extension, otherwise it gets a '.gpg' extension. +# "keybox database" format is currently not supported. (see generators/60local in apt-setup's source) + +# By default the installer requires that repositories be authenticated +# using a known gpg key. This setting can be used to disable that +# authentication. Warning: Insecure, not recommended. +#d-i debian-installer/allow_unauthenticated boolean true + +# Uncomment this to add multiarch configuration for i386 +#d-i apt-setup/multiarch string i386 + + +### Package selection +#tasksel tasksel/first multiselect standard, web-server, kde-desktop +tasksel tasksel/first multiselect standard, ssh-server + +# Or choose to not get the tasksel dialog displayed at all (and don't install +# any packages): +#d-i pkgsel/run_tasksel boolean false + +# Individual additional packages to install +#d-i pkgsel/include string wget curl git +# Whether to upgrade packages after debootstrap. +# Allowed values: none, safe-upgrade, full-upgrade +#d-i pkgsel/upgrade select none + +# You can choose, if your system will report back on what software you have +# installed, and what software you use. The default is not to report back, +# but sending reports helps the project determine what software is most +# popular and should be included on the first DVD. +popularity-contest popularity-contest/participate boolean false + +### Boot loader installation +# Grub is the boot loader (for x86). + +# This is fairly safe to set, it makes grub install automatically to the UEFI +# partition/boot record if no other operating system is detected on the machine. +d-i grub-installer/only_debian boolean true + +# This one makes grub-installer install to the UEFI partition/boot record, if +# it also finds some other OS, which is less safe as it might not be able to +# boot that other OS. +d-i grub-installer/with_other_os boolean true + +# Due notably to potential USB sticks, the location of the primary drive can +# not be determined safely in general, so this needs to be specified: +#d-i grub-installer/bootdev string /dev/sda +# To install to the primary device (assuming it is not a USB stick): +#d-i grub-installer/bootdev string default + +# Alternatively, if you want to install to a location other than the UEFI +# parition/boot record, uncomment and edit these lines: +#d-i grub-installer/only_debian boolean false +#d-i grub-installer/with_other_os boolean false +#d-i grub-installer/bootdev string (hd0,1) +# To install grub to multiple disks: +#d-i grub-installer/bootdev string (hd0,1) (hd1,1) (hd2,1) + +# Optional password for grub, either in clear text +#d-i grub-installer/password password r00tme +#d-i grub-installer/password-again password r00tme +# or encrypted using an MD5 hash, see grub-md5-crypt(8). +#d-i grub-installer/password-crypted password [MD5 hash] + +# Use the following option to add additional boot parameters for the +# installed system (if supported by the bootloader installer). +# Note: options passed to the installer will be added automatically. +#d-i debian-installer/add-kernel-opts string nousb + +### Finishing up the installation +# During installations from serial console, the regular virtual consoles +# (VT1-VT6) are normally disabled in /etc/inittab. Uncomment the next +# line to prevent this. +#d-i finish-install/keep-consoles boolean true + +# Avoid that last message about the install being complete. +d-i finish-install/reboot_in_progress note + +# This will prevent the installer from ejecting the disc during the reboot, +# which is useful in some situations. +#d-i cdrom-detect/eject boolean false + +# This is how to make the installer shutdown when finished, but not +# reboot into the installed system. +#d-i debian-installer/exit/halt boolean true +# This will power off the machine instead of just halting it. +#d-i debian-installer/exit/poweroff boolean true + +### Preseeding other packages +# Depending on what software you choose to install, or if things go wrong +# during the installation process, it's possible that other questions may +# be asked. You can preseed those too, of course. To get a list of every +# possible question that could be asked during an install, do an +# installation, and then run these commands: +# debconf-get-selections --installer > file +# debconf-get-selections >> file + + +#### Advanced options +### Running custom commands during the installation +# d-i preseeding is inherently not secure. Nothing in the installer checks +# for attempts at buffer overflows or other exploits of the values of a +# preconfiguration file like this one. Only use preconfiguration files from +# trusted locations! To drive that home, and because it's generally useful, +# here's a way to run any shell command you'd like inside the installer, +# automatically. + +# This first command is run as early as possible, just after +# preseeding is read. +#d-i preseed/early_command string anna-install some-udeb +# This command is run immediately before the partitioner starts. It may be +# useful to apply dynamic partitioner preseeding that depends on the state +# of the disks (which may not be visible when preseed/early_command runs). +#d-i partman/early_command \ +# string debconf-set partman-auto/disk "$(list-devices disk | head -n1)" +# This command is run just before the install finishes, but when there is +# still a usable /target directory. You can chroot to /target and use it +# directly, or use the apt-install and in-target commands to easily install +# packages and run commands in the target system. +#d-i preseed/late_command string apt-install zsh; in-target chsh -s /bin/zsh + +# Include the DanOS post installation script. +d-i preseed/late_command string apt-install wget sed grep coreutils bash; \ + NEW_USERHOME=$(grep ":1000:" /target/etc/passwd | cut -d: -f6); \ + NEW_USERNAME=$(grep ":1000:" /target/etc/passwd | cut -d: -f1); \ + cp -rfp /cdrom/src/ /target/tmp/; \ + cp -rfp /cdrom/src/ /target/root/; \ + cp -pf /cdrom/install.sh /target/root/install.sh; \ + in-target /bin/sh /root/install.sh + diff --git a/remaster-debian-iso-and-preseed.sh b/remaster-debian-iso-and-preseed.sh index da33bc9..b0511f8 100755 --- a/remaster-debian-iso-and-preseed.sh +++ b/remaster-debian-iso-and-preseed.sh @@ -3,12 +3,12 @@ # sudo apt install -y wget git xorriso isolinux p7zip-full fakeroot binutils # DVD ISO Base offline -DEBIAN_ISO_URL=https://cdimage.debian.org/debian-cd/current/amd64/iso-dvd/ -GET_ISO_NAME=$(curl -s https://cdimage.debian.org/debian-cd/current/amd64/iso-dvd/ | grep -oP 'debian-\d+(?:\.\d+)+-amd64-DVD-1\.iso' | head -n 1) +#DEBIAN_ISO_URL=https://cdimage.debian.org/debian-cd/current/amd64/iso-dvd/ +#GET_ISO_NAME=$(curl -s https://cdimage.debian.org/debian-cd/current/amd64/iso-dvd/ | grep -oP 'debian-\d+(?:\.\d+)+-amd64-DVD-1\.iso' | head -n 1) -# NetInstall iso -#DEBIAN_ISO_URL=https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/ -#GET_ISO_NAME=$(curl -s https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/ | grep -oP 'debian-\d+(?:\.\d+)+-amd64-netinst\.iso' | head -n 1) +# NetInstall ISO +DEBIAN_ISO_URL=https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/ +GET_ISO_NAME=$(curl -s https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/ | grep -oP 'debian-\d+(?:\.\d+)+-amd64-netinst\.iso' | head -n 1) # PRESEED_ISO_NAME=DanOS-Debian #WORK_DIR=$(pwd) #BRUGES IKKE MERE @@ -17,6 +17,9 @@ ISO_WORK_TMP=iso-extract # Setup the environment for creating the new ISO version. function setup() { sudo apt update && sudo apt install -y wget git xorriso isolinux p7zip-full fakeroot binutils + if [ -f source-debian.iso ]; then + rm source-debian.iso + fi if [ ! -f source-debian.iso ]; then wget -O source-debian.iso $DEBIAN_ISO_URL/"$GET_ISO_NAME" fi @@ -24,11 +27,18 @@ function setup() { sudo chmod -R +w $ISO_WORK_TMP sudo cp preseed-user.cfg $ISO_WORK_TMP/preseed.cfg || exit 1 sudo cp -rfup src/ iso-extract/ || exit 1 + sudo cp src/grub/splash.png $ISO_WORK_TMP/isolinux/splash.png || exit 1 sudo cp install-danos.sh $ISO_WORK_TMP/install.sh || exit 1 - sudo sed -i 's/append vga/append auto=true priority=critical vga/' $ISO_WORK_TMP/isolinux/gtk.cfg + sudo sed -i 's/append vga/append auto=true vga/' $ISO_WORK_TMP/isolinux/gtk.cfg sudo sed -i '/spkgtk\.cfg/d; /spk\.cfg/d' $ISO_WORK_TMP/isolinux/menu.cfg sudo sed -i 's/--- quiet/--- quiet file=\/cdrom\/preseed.cfg/' $ISO_WORK_TMP/isolinux/gtk.cfg - sudo sed -i '0,/--- quiet/ s/--- quiet/auto=true priority=critical file=\/cdrom\/preseed.cfg --- quiet/' $ISO_WORK_TMP/boot/grub/grub.cfg + #sudo sed -i '0,/--- quiet/ s/--- quiet/auto=true file=\/cdrom\/preseed.cfg --- quiet/' $ISO_WORK_TMP/boot/grub/grub.cfg + sudo sed -i '0,/--- quiet/ s/--- quiet/auto=true priority=high file=\/cdrom\/preseed.cfg --- quiet/' $ISO_WORK_TMP/boot/grub/grub.cfg + sudo sed -i '/set theme=\/boot\/grub\/theme\/1/a set default=0' $ISO_WORK_TMP/boot/grub/grub.cfg + sudo sed -i '/set theme=\/boot\/grub\/theme\/1/a set timeout=7' $ISO_WORK_TMP/boot/grub/grub.cfg + if [ -f source-debian.iso ]; then + rm source-debian.iso + fi #sudo mkdir -p $ISO_WORK_TMP/var/cache/apt/archives #sudo apt reinstall --download-only -y -o Dir::Cache="./" -o Dir::Cache::archives="iso-extract/src/packages/" \ # wget curl git xdg-utils xdg-user-dirs build-essential htop dkms cmake plymouth plymouth-themes power-profiles-daemon wayland-protocols wayland-utils wlr-randr libwlroots-0.18 @@ -43,7 +53,7 @@ function make() { sudo cp -fu install-danos.sh $ISO_WORK_TMP/install.sh || exit 1 sudo cp preseed-user.cfg $ISO_WORK_TMP/preseed.cfg || exit 1 if [ -f $PRESEED_ISO_NAME.iso ]; then rm $PRESEED_ISO_NAME.iso; fi - xorriso -as mkisofs -o $PRESEED_ISO_NAME.iso -V "Debian DanOS" -isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin -c isolinux/boot.cat -b isolinux/isolinux.bin -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e boot/grub/efi.img -no-emul-boot -isohybrid-gpt-basdat $ISO_WORK_TMP + xorriso -as mkisofs -o $PRESEED_ISO_NAME.iso -V "DANOS_DEBIAN" -isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin -c isolinux/boot.cat -b isolinux/isolinux.bin -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e boot/grub/efi.img -no-emul-boot -isohybrid-gpt-basdat $ISO_WORK_TMP ls -lah ./*.iso else diff --git a/src/autogen-qtile-keybinding.sh b/src/autogen-qtile-keybinding.sh deleted file mode 100644 index 556ce7c..0000000 --- a/src/autogen-qtile-keybinding.sh +++ /dev/null @@ -1,421 +0,0 @@ -#!/usr/bin/env python3 - -############################################## -# Auto Qtile keybindings - image generator # -# Qmade version of the configuration # -############################################## - -import getopt -import os -import sys - -import cairocffi as cairo -from cairocffi import ImageSurface - -this_dir = os.path.dirname(__file__) -base_dir = os.path.abspath(os.path.join(this_dir, "..")) -sys.path.insert(0, base_dir) - -BUTTON_NAME_Y = 65 -BUTTON_NAME_X = 10 - -COMMAND_Y = 20 -COMMAND_X = 10 - -LEGEND = ["modifiers", "layout", "group", "window", "other"] - -CUSTOM_KEYS = { - "Backspace": 2, - "Tab": 1.5, - "\\": 1.5, - "Return": 2.4533, - "shift": 2, - "space": 5, -} - -class Button: - def __init__(self, key, x, y, width, height): - self.key = key - self.x = x - self.y = y - self.width = width - self.height = height - - -class Pos: - WIDTH = 78 - HEIGHT = 70 - GAP = 5 - - def __init__(self, x, y): - self.x = x - self.row_x = x - self.y = y - self.custom_width = {} - for i, val in CUSTOM_KEYS.items(): - self.custom_width[i] = val * self.WIDTH - - def get_pos(self, name): - if name in self.custom_width: - width = self.custom_width[name] - else: - width = self.WIDTH - - info = Button(name, self.x, self.y, width, self.HEIGHT) - - self.x = self.x + self.GAP + width - - return info - - def skip_x(self, times=1): - self.x = self.x + self.GAP + times * self.WIDTH - - def next_row(self): - self.x = self.row_x - self.y = self.y + self.GAP + self.HEIGHT - - -class KeyboardPNGFactory: - def __init__(self, modifiers, keys): - self.keys = keys - self.modifiers = modifiers.split("-") - self.key_pos = self.calculate_pos(20, 140) - - def rgb_red(self, context): - context.set_source_rgb(0.8431372549, 0.3725490196, 0.3725490196) - - def rgb_green(self, context): - context.set_source_rgb(0.6862745098, 0.6862745098, 0) - - def rgb_yellow(self, context): - context.set_source_rgb(1, 0.6862745098, 0) - - def rgb_cyan(self, context): - context.set_source_rgb(0.5137254902, 0.6784313725, 0.6784313725) - - def rgb_violet(self, context): - context.set_source_rgb(0.831372549, 0.5215686275, 0.6784313725) - - def calculate_pos(self, x, y): - pos = Pos(x, y) - - key_pos = {} - for c in "`1234567890-=": - key_pos[c] = pos.get_pos(c) - - key_pos["Backspace"] = pos.get_pos("Backspace") - pos.next_row() - - key_pos["Tab"] = pos.get_pos("Tab") - for c in "qwertyuiop[]\\": - key_pos[c] = pos.get_pos(c) - pos.next_row() - - pos.skip_x(1.6) - for c in "asdfghjkl;'": - key_pos[c] = pos.get_pos(c) - key_pos["Return"] = pos.get_pos("Return") - pos.next_row() - - key_pos["shift"] = pos.get_pos("shift") - for c in "zxcvbnm": - key_pos[c] = pos.get_pos(c) - key_pos["period"] = pos.get_pos("period") - key_pos["comma"] = pos.get_pos("comma") - key_pos["/"] = pos.get_pos("/") - pos.next_row() - - key_pos["control"] = pos.get_pos("control") - pos.skip_x() - key_pos["mod4"] = pos.get_pos("mod4") - key_pos["mod1"] = pos.get_pos("mod1") - key_pos["space"] = pos.get_pos("space") - key_pos["Print"] = pos.get_pos("Print") - pos.skip_x(3) - key_pos["Up"] = pos.get_pos("Up") - - pos.next_row() - pos.skip_x(12.33) - key_pos["Left"] = pos.get_pos("Left") - key_pos["Down"] = pos.get_pos("Down") - key_pos["Right"] = pos.get_pos("Right") - - pos.next_row() - - for legend in LEGEND: - key_pos[legend] = pos.get_pos(legend) - - pos.skip_x(5) - key_pos["Button1"] = pos.get_pos("Button1") - key_pos["Button2"] = pos.get_pos("Button2") - key_pos["Button3"] = pos.get_pos("Button3") - - pos.next_row() - key_pos["FN_KEYS"] = pos.get_pos("FN_KEYS") - - return key_pos - - def render(self, filename): - surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, 1280, 800) - context = cairo.Context(surface) - with context: - context.set_source_rgb(1, 1, 1) - context.paint() - - context.move_to(40, 50) - context.set_font_size(34) - context.show_text("Qmade - Keybindings for Qtile") - - context.move_to(40, 80) - context.set_font_size(22) - if len([i for i in self.modifiers if i]): - context.show_text("Modifiers: " + ", ".join(self.modifiers)) - else: - context.show_text("No modifiers used.") - - for i in self.key_pos.values(): - if i.key in ["FN_KEYS"]: - continue - - self.draw_button(context, i.key, i.x, i.y, i.width, i.height) - - # draw functional - fn = [i for i in keys.values() if i.key[:4] == "XF86"] - if len(fn): - fn_pos = self.key_pos["FN_KEYS"] - x = fn_pos.x - for i in fn: - self.draw_button(context, i.key, x, fn_pos.y, fn_pos.width, fn_pos.height) - x += Pos.GAP + Pos.WIDTH - - # draw mouse base - context.rectangle(830, 670, 244, 90) - context.set_source_rgb(0, 0, 0) - context.stroke() - context.set_font_size(28) - context.move_to(900, 730) - context.show_text("MOUSE") - - surface.write_to_png(filename) - - def draw_button(self, context, key, x, y, width, height): - radius = 5 # Radius for the rounded corners - fn = False - if key[:4] == "XF86": - fn = True - - if key in LEGEND: - if key == "modifiers": - self.rgb_red(context) - elif key == "group": - self.rgb_green(context) - elif key == "layout": - self.rgb_cyan(context) - elif key == "window": - self.rgb_yellow(context) - else: - self.rgb_violet(context) - self.rounded_rectangle(context, x, y, width, height, radius) - context.fill() - - if key in self.modifiers: - self.rounded_rectangle(context, x, y, width, height, radius) - self.rgb_red(context) - context.fill() - - if key in self.keys: - k = self.keys[key] - self.rounded_rectangle(context, x, y, width, height, radius) - self.set_key_color(context, k) - context.fill() - - self.show_multiline(context, x + COMMAND_X, y + COMMAND_Y, k) - - self.rounded_rectangle(context, x, y, width, height, radius) - context.set_source_rgb(0, 0, 0) - context.stroke() - - if fn: - key = key[4:] - context.set_font_size(10) - else: - context.set_font_size(14) - - context.move_to(x + BUTTON_NAME_X, y + BUTTON_NAME_Y) - context.show_text(self.translate(key)) - - def rounded_rectangle(self, context, x, y, width, height, radius): - context.new_path() - context.arc(x + radius, y + radius, radius, 2 * (3.14 / 2), 3 * (3.14 / 2)) - context.arc(x + width - radius, y + radius, radius, 3 * (3.14 / 2), 4 * (3.14 / 2)) - context.arc(x + width - radius, y + height - radius, radius, 0, 3.14 / 2) - context.arc(x + radius, y + height - radius, radius, 3.14 / 2, 2 * (3.14 / 2)) - context.close_path() - - def show_multiline(self, context, x, y, key): - """Cairo doesn't support multiline. Added with word wrapping.""" - c_width = 14 - if key.key in CUSTOM_KEYS: - c_width *= CUSTOM_KEYS[key.key] - - context.set_font_size(10) - context.set_source_rgb(0, 0, 0) - context.move_to(x, y) - words = key.command.split(" ") - words.reverse() - printable = last_word = words.pop() - while len(words): - last_word = words.pop() - if len(printable + " " + last_word) < c_width: - printable += " " + last_word - continue - - context.show_text(printable) - y += 10 - context.move_to(x, y) - printable = last_word - - if last_word is not None: - context.show_text(printable) - - def set_key_color(self, context, key): - if key.scope == "group": - self.rgb_green(context) - elif key.scope == "layout": - self.rgb_cyan(context) - elif key.scope == "window": - self.rgb_yellow(context) - else: - self.rgb_violet(context) - - def translate(self, text): - dictionary = { - "period": ",", - "comma": ".", - "Left": "←", - "Down": "↓", - "Right": "→", - "Up": "↑", - "AudioRaiseVolume": "Volume up", - "AudioLowerVolume": "Volume down", - "AudioMute": "Audio mute", - "AudioMicMute": "Mic mute", - "MonBrightnessUp": "Brightness up", - "MonBrightnessDown": "Brightness down", - } - - if text not in dictionary: - return text - - return dictionary[text] - - -class KInfo: - NAME_MAP = { - "togroup": "to group", - "toscreen": "to screen", - } - - def __init__(self, key): - self.key = key.key - self.command = self.get_command(key) - self.scope = self.get_scope(key) - - def get_command(self, key): - if hasattr(key, "desc") and key.desc: - return key.desc - - cmd = key.commands[0] - command = cmd.name - if command in self.NAME_MAP: - command = self.NAME_MAP[command] - - command = command.replace("_", " ") - - if len(cmd.args): - if isinstance(cmd.args[0], str): - command += " " + cmd.args[0] - - return command - - def get_scope(self, key): - selectors = key.commands[0].selectors - if len(selectors): - return selectors[0][0] - - -class MInfo(KInfo): - def __init__(self, mouse): - self.key = mouse.button - self.command = self.get_command(mouse) - self.scope = self.get_scope(mouse) - - -def get_kb_map(config_path=None): - from libqtile.confreader import Config - - c = Config(config_path) - if config_path: - c.load() - - kb_map = {} - for key in c.keys: - mod = "-".join(key.modifiers) - if mod not in kb_map: - kb_map[mod] = {} - - info = KInfo(key) - kb_map[mod][info.key] = info - - for mouse in c.mouse: - mod = "-".join(mouse.modifiers) - if mod not in kb_map: - kb_map[mod] = {} - - info = MInfo(mouse) - kb_map[mod][info.key] = info - - return kb_map - - -help_doc = """ -usage: gen-keybinding-img [-h] [-c CONFIGFILE] [-o OUTPUT_DIR] - -Qtile keybindings image generator - -optional arguments: - -h, --help show this help message and exit - -c CONFIGFILE, --config CONFIGFILE - use specified configuration file. If no presented - default will be used - -o OUTPUT_DIR, --output-dir OUTPUT_DIR - set directory to export all images to -""" -if __name__ == "__main__": - config_path = os.path.expanduser("~/.config/qtile/config.py") # Set default config path - output_dir = "" - try: - opts, args = getopt.getopt(sys.argv[1:], "hc:o:", ["help=", "config=", "output-dir="]) - except getopt.GetoptError: - print(help_doc) - sys.exit(2) - - for opt, arg in opts: - if opt in ("-h", "--help"): - print(help_doc) - sys.exit() - elif opt in ("-c", "--config"): - config_path = arg - elif opt in ("-o", "--output-dir"): - output_dir = arg - - kb_map = get_kb_map(config_path) - for modifier, keys in kb_map.items(): - if not modifier: - filename = "keybinding_no_modifier.png" - else: - filename = "keybinding_{}.png".format(modifier) - - output_file = os.path.abspath(os.path.join(output_dir, filename)) - f = KeyboardPNGFactory(modifier, keys) - f.render(output_file) diff --git a/src/config/qtile/autostart.sh b/src/config/qtile/autostart.sh index fe4786c..cb1b095 100755 --- a/src/config/qtile/autostart.sh +++ b/src/config/qtile/autostart.sh @@ -5,6 +5,11 @@ pgrep -x picom >/dev/null || picom --backend xrender --vsync --no-fading-openclo exec /usr/bin/lxpolkit & # Graphical authentication agent +# Run "ARandr" to set the desired screens with resolution and refresh rate and save it as a profile using. +# Terminal command.: autorandr --save PROFILENAME +# +# See more https://man.archlinux.org/man/extra/autorandr/autorandr.1.en +# autorandr --change & # This here if statement sets your background image, with feh... @@ -30,11 +35,16 @@ fi #kdeconnectd & # # Turn off the Screen after X time in seconds -xset s 2700 & +xset dpms 2700 2700 2700 & -# Run & Remove .first-login-user-setup file -------------------------------------------------------------- +# Run & Remove .user-setup / .first-login-user-setup files -------------------------------------------------------------- if [ -f ~/.first-login-user-setup ]; then . ~/.first-login-user-setup sleep 0.69 rm -f ~/.first-login-user-setup fi +if [ -f ~/.user-setup ]; then + . ~/.user-setup + sleep 0.69 + rm -f ~/.user-setup +fi diff --git a/src/config/qtile/config.py b/src/config/qtile/config.py index 887c188..3f8c912 100644 --- a/src/config/qtile/config.py +++ b/src/config/qtile/config.py @@ -227,9 +227,9 @@ keys.extend([ ]) # ScratchPads groups.append(ScratchPad("scratchpad", [ - DropDown("term1", "kitty --class=scratch", width=0.8, height=0.8, x=0.5 - (0.8 / 2), y=0.5 - (0.8 / 2), opacity=1, on_focus_lost_hide=False), + DropDown("term1", "kitty --class=scratch", width=0.8, height=0.8, x=0.5 - (0.8 / 2), y=0.5 - (0.8 / 2), opacity=1, on_focus_lost_hide=True), DropDown("term2", "kitty --class=scratch --override background_opacity=1", width=0.8, height=0.8, x=0.5 - (0.8 / 2), y=0.5 - (0.8 / 2), opacity=1, on_focus_lost_hide=False), - DropDown("term3", "kitty --class=scratch --override background_opacity=1", width=0.8, height=0.8, x=0.5 - (0.8 / 2), y=0.5 - (0.8 / 2), opacity=1, on_focus_lost_hide=False), + DropDown("term3", "kitty --class=scratch --override background_opacity=1", width=0.8, height=0.8, x=0.5 - (0.8 / 2), y=0.5 - (0.8 / 2), opacity=1, on_focus_lost_hide=True), DropDown("term4", "kitty --class=scratch --override background_opacity=1", width=0.9, height=0.9, x=0.5 - (0.9 / 2), y=0.5 - (0.9 / 2), opacity=1, on_focus_lost_hide=False), DropDown("file-explorer", "kitty --class=yazi --override background_opacity=1 -e sudo yazi", width=0.8, height=0.8, x=0.5 - (0.8 / 2), y=0.5 - (0.8 / 2), opacity=1, on_focus_lost_hide=False), DropDown("audio", "kitty --class=volume -e alsamixer", width=0.8, height=0.8, x=0.5 - (0.8 / 2), y=0.5 - (0.8 / 2), opacity=1), diff --git a/src/grub/grub.cfg b/src/grub/grub.cfg new file mode 100644 index 0000000..67bc64c --- /dev/null +++ b/src/grub/grub.cfg @@ -0,0 +1,51 @@ +if [ x$feature_default_font_path = xy ] ; then + font=unicode +else + font=$prefix/font.pf2 +fi + +if loadfont $font ; then + set gfxmode=1024x768 + set gfxpayload=keep + insmod efi_gop + insmod efi_uga + insmod video_bochs + insmod video_cirrus + insmod gfxterm + insmod png + # Added as a workaround for #1110759 + echo "Loading bootloader..." + terminal_output gfxterm +fi + +if background_image /isolinux/splash.png; then + set color_normal=light-gray/black + set color_highlight=white/black +elif background_image /splash.png; then + set color_normal=light-gray/black + set color_highlight=white/black +else + set menu_color_normal=cyan/blue + set menu_color_highlight=white/blue +fi + +insmod play +play 960 440 1 0 4 440 1 +set theme=/boot/grub/theme/1 +set timeout=5 +set default=0 +menuentry --hotkey=g 'Graphical Install' { + set background_color=black + linux /install.amd/vmlinuz vga=788 auto=true file=/cdrom/preseed.cfg --- quiet + initrd /install.amd/gtk/initrd.gz +} +menuentry 'Graphical Rescue Mode' { + set background_color=black + linux /install.amd/vmlinuz vga=788 rescue/enable=true --- quiet + initrd /install.amd/gtk/initrd.gz +} +menuentry --hotkey=s 'Install with speech synthesis' { + set background_color=black + linux /install.amd/vmlinuz vga=788 auto=true file=/cdrom/preseed.cfg speakup.synth=soft --- quiet + initrd /install.amd/gtk/initrd.gz +} diff --git a/src/grub/splash.png b/src/grub/splash.png new file mode 100644 index 0000000..4ccb4ce Binary files /dev/null and b/src/grub/splash.png differ diff --git a/src/remaster-debian-iso-and-preseed.sh b/src/remaster-debian-iso-and-preseed.sh deleted file mode 100755 index 585a6ff..0000000 --- a/src/remaster-debian-iso-and-preseed.sh +++ /dev/null @@ -1,64 +0,0 @@ -#!/usr/bin/env bash -# Debian ISO Remastering for QMADE - https://github.com/ITmail-dk/qmade/ -# sudo apt install -y wget git xorriso isolinux p7zip-full fakeroot binutils - -DEBIAN_ISO_URL=https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/ -GET_ISO_NAME=$(curl -s https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/ | grep -oP 'debian-\d+(?:\.\d+)+-amd64-netinst\.iso' | head -n 1) -PRESEED_ISO_NAME=QMADE-Debian -#WORK_DIR=$(pwd) -ISO_WORK_TMP=iso-extract - -# Setup the environment for creating the new ISO version. -function setup() { - sudo apt update && sudo apt install -y wget git xorriso isolinux p7zip-full fakeroot binutils - if [ ! -f Debian-source.iso ]; then - wget -O Debian-source.iso $DEBIAN_ISO_URL/"$GET_ISO_NAME" - fi - xorriso -osirrox on -indev Debian-source.iso -extract / $ISO_WORK_TMP - sudo chmod -R +w $ISO_WORK_TMP - sudo mkdir -p $ISO_WORK_TMP/var/cache/apt/archives - if [ ! -f preseed.cfg ]; then - wget https://raw.githubusercontent.com/ITmail-dk/qmade/refs/heads/main/preseed.cfg - fi - sudo cp preseed.cfg $ISO_WORK_TMP - sudo sed -i 's/append vga/append auto=true priority=critical vga/' $ISO_WORK_TMP/isolinux/gtk.cfg - sudo sed -i '/spkgtk\.cfg/d; /spk\.cfg/d' $ISO_WORK_TMP/isolinux/menu.cfg - sudo sed -i 's/--- quiet/--- quiet file=\/cdrom\/preseed.cfg/' $ISO_WORK_TMP/isolinux/gtk.cfg - sudo sed -i '0,/--- quiet/ s/--- quiet/--- quiet file=\/cdrom\/preseed.cfg/' $ISO_WORK_TMP/boot/grub/grub.cfg - sudo apt reinstall --download-only -y -o Dir::Cache="./" -o Dir::Cache::archives="iso-extract/var/cache/apt/archives" \ - bash-completion xserver-xorg x11-utils xinit acl arandr autorandr picom fwupd colord mesa-utils htop wget curl git tmux \ - numlockx kitty neovim xdg-utils cups cups-common lm-sensors fancontrol xbacklight brightnessctl unzip network-manager \ - dnsutils dunst libnotify-bin notify-osd xsecurelock pm-utils rofi 7zip jq poppler-utils fd-find ripgrep zoxide sddm \ - imagemagick nsxiv mpv flameshot mc thunar gvfs gvfs-backends parted gparted mpd mpc ncmpcpp fzf ccrypt xarchiver \ - notepadqq font-manager fontconfig fontconfig-config fonts-recommended fonts-liberation fonts-freefont-ttf \ - fonts-noto-core libfontconfig1 pipewire pipewire-audio pipewire-alsa pipewire-pulse pipewire-jack wireplumber \ - libspa-0.2-bluetooth pavucontrol alsa-utils qpwgraph sddm-theme-breeze sddm-theme-maui ffmpeg cmake \ - policykit-1-gnome remmina libreoffice keynav - sudo chmod -R +r iso-extract/var/ - make -} - -# Make a new ISO file after removing the old one if it exists. -function make() { - if [ -d $ISO_WORK_TMP ]; then - if [ -f $PRESEED_ISO_NAME.iso ]; then rm $PRESEED_ISO_NAME.iso; fi - xorriso -as mkisofs -o $PRESEED_ISO_NAME.iso -V "Debian QMADE" -isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin -c isolinux/boot.cat -b isolinux/isolinux.bin -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e boot/grub/efi.img -no-emul-boot -isohybrid-gpt-basdat $ISO_WORK_TMP - ls -lah ./*.iso - - else - echo "$ISO_WORK_TMP does not exist, runing setup..." - setup - fi -} - -function usb() { - lsblk - echo -en "Enter the name of the USB Disk so sda, sdb etc..: " - read -r USB_DISK - clear - sudo dd bs=4M status=progress conv=fsync oflag=direct if="$(pwd)"/$PRESEED_ISO_NAME.iso of=/dev/"$USB_DISK" - echo "ISO to USB All done." -} - -# Run the function by, function_name -"$@" make