code:
---
pid: 0
title: "alis :. Arch Linux Install Script"
url: "/"
date: 2022-02-04T16:00:00+01:00
updated: 2022-02-04T16:00:00+01:00
index: true
tags: []
---

Arch Linux Install Script

A simple powerful Bash based script for an unattended, easy and fast way to install Arch Linux.

Boot. Get. Configure. Install. Enjoy.

Usage

See it in video

What is alis?

{{< markdown >}}
Arch Linux Install Script (or alis, also known as _the Arch Linux executable installation guide and wiki_) installs unattended, automated and customized Arch Linux system.

It is a simple Bash script developed from many Arch Linux Wiki pages that fully automates the installation of a [Arch Linux](https://archlinux.org/) system after booting from the original Arch Linux installation media. It contains the same commands that you would type and execute one by one interactively to complete the installation. The only user intervention needed is to edit a configuration file to choose the installation options and preferences from partitioning, to encryption, bootloader, file system, language and keyboard mapping, desktop environment, kernels, packages to install and graphic drivers. This automation makes the installation easy and fast, as fast as your internet connection allows.
{{< /markdown >}}

Bash based

Contains the same commands you type on a manual install one after another. Being Bash based is easy to compare the script commands with your own manual recipe and easy to compare with the commands provided by the Arch Linux wiki pages and other installation guides, ecause that can be known as _the Arch Linux executable installation guide and wiki_.

            Source code

Simple configuration

The configuration is a simple Bash file that defines some environment variables to customize the installation to each user own preferences. Simple variables but that allow most common and quite advanced configurations.

            Configuration file

Unattended

Fully automated to complete the installation easy and fast, as fast as your internet connection allows. Not a guided script means is not necessary to spend time on answer slowly the same questions over and over on each usage.

            See the video

Desktop environments

Choose between the most popular GNU/Linux desktop environments like GNOME, KDE, XFCE or discover and try alternative graphical environments options like i3-gap, Deepin, Budgie and others. Pick one from more than 10 available environments.

Advanced features

Based on more than 70 Arch Linux wiki pages to get a successful installation also for advanced features like LVM, LUKS encryption, BTRFS filesystem with subvolumes, alternative kernels, systemd-boot, systemd-homed, PipeWire, AUR utility or SSH install for virtual machines.

And much more!

These are a small feature set selection provided by alis. Read the complete list.

            Full feature set list

        {{< ad-bilboard >}}

Usage

Only 4 commands away to have a vanilla Arch Linux system.

        {{}}

Video

Arch Linux base installation installed in less than 4 minutes with a fiber internet connection and a NVMe SSD. Don't trust? See the video.

Type the system installation commands and wait to the installation complete. After a reboot the system is ready to use and customized with your choosen preferences.

Screenshots

Once the installation ends you have a ready to use system with your choosen preferences including all the free software latest version you wish to do produtive task from browsing, multimedia and office programs, to programming languages, compilers and server software and tools for creative and artistic tasks.

These are some desktop environments that can be installed.

              <button type="button" data-bs-target="#desktopEnvironmentsCarousel" data-bs-slide-to="0" class="active" aria-current="true" aria-label="GNOME"></button>
              <button type="button" data-bs-target="#desktopEnvironmentsCarousel" data-bs-slide-to="1" aria-label="KDE"></button>
              <button type="button" data-bs-target="#desktopEnvironmentsCarousel" data-bs-slide-to="2" aria-label="XFCE"></button>

Arch Linux with GNOME desktop environment installed with alis

Arch Linux with KDE desktop environment installed with alis

Arch Linux with XFCE desktop environment installed with alis

            <button class="carousel-control-prev" type="button" data-bs-target="#desktopEnvironmentsCarousel" data-bs-slide="prev">

              Previous
            </button>
            <button class="carousel-control-next" type="button" data-bs-target="#desktopEnvironmentsCarousel" data-bs-slide="next">

              Next
            </button>


code:
#!/usr/bin/env bash
#                         # Start the system with latest Arch Linux installation media
# loadkeys [keymap]       # Load keyboard keymap, eg. loadkeys es, loadkeys us, loadkeys de
# curl -sL https://raw.githubusercontent.com/picodotdev/alis/master/download.sh | bash     # Download alis scripts
# vim alis.conf           # Edit configuration and change variables values with your preferences (system configuration)
# ./alis.sh               # Start installation

repo_name: supersonicsataa/alis

license: mit


code:
---
pid: 2
title: "Gettting Started :. Arch Linux Install Script"
type: "pages"
url: "/getting-started/"
date: 2022-02-04T16:00:00+01:00
updated: 2022-02-04T16:00:00+01:00
index: true
rss: true
sharing: true
imagePage: "logotype:octopress.png"
tags: []
draft: true
---

# Getting Started


code:
---
pid: 3
title: "Istallation :. Arch Linux Install Script"
type: "pages"
url: "/installation/"
date: 2022-02-04T16:00:00+01:00
updated: 2022-02-04T16:00:00+01:00
index: true
rss: true
sharing: true
imagePage: "logotype:octopress.png"
tags: []
draft: true
---

# Installation

Principles

{{< markdown >}}
* Use the original Arch Linux installation media
* As much unattended and automated as possible, require as little interactivity as possible
* Allow to customize the installation to cover the most common cases
* Provide support for system recovery
* Provide support for installation log
{{< /markdown >}}

Features

System: UEFI, BIOS

Storage: SATA, NVMe and MMC

Encryption: root partition encrypted and no encrypted

Partition: no LVM, LVM, LVM on LUKS, GPT on UEFI, MBR on BIOS, custom partition scheme and mountpoints

File system: ext4, btrfs (with subvols), xfs, f2fs, reiserfs

Kernels: linux, linux-lts, linux-hardened, linux-zen

Desktop environment: GNOME, KDE, XFCE, Mate, Cinnamon, LXDE, i3-wm, i3-gaps, Deepin, Budgie, Bspwm, Awesome, Qtile, Openbox

Display managers: GDM, SDDM, Lightdm, lxdm

Graphics controller: intel, nvidia and amd with optionally early KMS start. With intel optionally fastboot, hardware video acceleration and framebuffer compression.

Bootloader: GRUB, rEFInd, systemd-boot

Custom shell: bash, zsh, dash, fish

WPA WIFI network installation

Periodic TRIM for SSD storage

Intel and AMD processors microcode

Optional swap file

VirtualBox guest additions and VMware tools support

Kernel compression and custom parameters

Users creation and add to sudoers

systemd units enable or disable

systemd-homed support

PipeWire support

Multilib support

Files provision support

Arch Linux custom packages installation and repositories installation

Flatpak utility installation and Flatpak packages installation

SDKMAN utility installation and SDKMAN packages installation

AUR utility installation (yay, aurman) and AUR packages installation

Packages installation after base system installation (preferred way of packages installation)

Script for download installation and recovery scripts and configuration files

Retry packages download on connection/mirror error

Packer support for testing in VirtualBox

Installation log with all commands executed and output in a file and/or asciinema video

Wait after installation for an abortable reboot

Fork the repository and use your own configuration

System installation

        Download and boot from the latest original Arch Linux installation media. After boot use the following commands to start the installation.

        Follow the Arch Way of doing things and learn what this script does. This will allow you to know what is happening.

      Internet connection is required, with wireless WIFI connection see Wireless_network_configuration to bring up WIFI connection before start the installation.

        Minimum usage

{{< highlight bash "" >}}
                        # Start the system with latest Arch Linux installation media
loadkeys [keymap]       # Load keyboard keymap, eg. loadkeys es, loadkeys us, loadkeys de
curl -sL https://raw.githubusercontent.com/picodotdev/alis/master/download.sh | bash     # Download alis scripts
vim alis.conf           # Edit configuration and change variables values with your preferences (system configuration)
./alis.sh               # Start installation
{{< / highlight >}}

        Advanced usage

{{< highlight bash "" >}}
                        # Start the system with latest Arch Linux installation media
loadkeys [keymap]       # Load keyboard keymap, eg. loadkeys es, loadkeys us, loadkeys de
iwctl --passphrase "[WIFI_KEY]" station [WIFI_INTERFACE] connect "[WIFI_ESSID]"          # (Optional) Connect to WIFI network. _ip link show_ to know WIFI_INTERFACE.
curl -sL https://raw.githubusercontent.com/picodotdev/alis/master/download.sh | bash     # Download alis scripts
# curl -sL https://git.io/JeaH6 | bash                                                   # Alternative download URL with URL shortener
./alis-asciinema.sh     # (Optional) Start asciinema video recording
vim alis.conf           # Edit configuration and change variables values with your preferences (system configuration)
vim alis-packages.conf  # (Optional) Edit configuration and change variables values with your preferences (packages to install)
                        # (The preferred way to install packages is after system installation, see Packages installation)
./alis.sh               # Start installation
./alis-reboot.sh        # (Optional) Reboot the system, only necessary when REBOOT="false"
{{< / highlight >}}

Video

Arch Linux base installation installed in less than 4 minutes with a fiber internet connection and a NVMe SSD. Don't trust me? See the video.

Packages installation

    After the base Arch Linux system is installed, alis can install packages with pacman, Flatpak, SDKMAN and from AUR.

{{< highlight bash "" >}}
                                 # After system installation start a user session
curl -sL https://raw.githubusercontent.com/picodotdev/alis/master/download.sh | bash     # Download alis scripts
# curl -sL https://git.io/JeaH6 | bash                                                   # Alternative download URL with URL shortener
./alis-packages-asciinema.sh     # (Optional) Start asciinema video recording
vim alis-packages.conf           # Edit configuration and change variables values with your preferences (packages to install)
./alis-packages.sh               # Start packages installation
{{< / highlight >}}

Recovery

      Boot from the latest original Arch Linux installation media. After boot use the following comands to start the recovery, this will allow you to enter in the arch-chroot environment.

{{< highlight bash "" >}}
                                 # Start the system with latest Arch Linux installation media
loadkeys [keymap]                # Load keyboard keymap, eg. loadkeys es, loadkeys us, loadkeys de
iwctl --passphrase "[WIFI_KEY]" station [WIFI_INTERFACE] connect "[WIFI_ESSID]"          # (Optional) Connect to WIFI network. _ip link show_ to know WIFI_INTERFACE.
curl -sL https://raw.githubusercontent.com/picodotdev/alis/master/download.sh | bash     # Download alis scripts
# curl -sL https://git.io/JeaH6 | bash                                                   # Alternative download URL with URL shortener
./alis-recovery-asciinema.sh     # (Optional) Start asciinema video recording
vim alis-recovery.conf           # Edit configuration and change variables values with your last installation configuration with alis (mainly device and partition scheme)
./alis-recovery.sh               # Start recovery
./alis-recovery-reboot.sh        # Reboot the system
{{< / highlight >}}

How you can help

Test in VirtualBox and create an issue if something does not work, attach the main parts of the used configuration file and the error message

Create issues with new features

Send pull requests

Share it in social networks, forums, create a blog post or video about it

Send me an email, I like to read that the script is being used and is useful :). Which are your computer specs, which is your alis configuration, if is your personal or working computer, if all worked fine or some suggestion to improve the script

Media reference

2022.01 Arch + Alis, Arco Linux (video playlist)

2020.07 Arch installer - alis

2019.06 Arch Linux OS Challenge: Install Arch 'The Easy Way' With These 2 Alternative Methods


code:
---
pid: 1
title: "Overview"
type: "pages"
url: "/overview/"
date: 2022-02-10T19:00:00+01:00
updated: 2022-02-10T16:30:00+01:00
index: true
tags: []
---

        {{< ad-bilboard >}}

# Overview

The [Arch Linux](https://archlinux.org/) distribution can be intimidating for users who want to use it as it does not offer a graphical installer and the officially recommended option is to read a few dozen pages of the wiki to complete the installation and then type many commands interactively from the terminal in which the installation media is launched. An installer is not offered because one of the principles of Arch is that it adjusts to the user and not the user to Arch, with an installer it is very difficult or impossible to achieve the customization desired by all users, that is why it is left to each user the responsibility but the power to install it as you want according to your preferences.

Actually it is not complicated to install Arch Linux in a basic configuration including a desktop environment but some options have a little more complexity and sometimes it is not achieved on the first try or it is achieved but not done correctly. For example, using LUKS over LVM to encrypt storage are additional steps in the installation that may cause the system to fail to boot properly using a boot loader such as systemd-boot or a user is not aware of the need to enable support for TRIM of the SSD device to keep it in optimal performance and durability conditions.

In any case, reading the wiki pages and finishing the installation successfully requires time and some effort to acquire the necessary knowledge, this makes Arch-based distributions with a graphical installer an alternative for those who want a distro like Arch Linux but installing it easily and quickly. However, some Arch-based distributions add their own customizations are no longer considered an Arch Linux distribution but a derivative distribution.

{{< tableofcontents >}}

### Introduction to Arch Linux

A user who is interested in must be aware of [the Arch Linux principles](https://wiki.archlinux.org/title/Arch_Linux#Principles) on which it is based, also known unofficially as _The Arch Way_, which are stated as _Simplicity_, _Modernity_, _Pragmatism_, _User centrality_ and _Versatility_. They can be summarized in that Arch Linux provides packages with minimal customizations over the original software, it is a _rolling-release_ distribution in which the packages are constantly updated to the latest versions, decisions are based on technical aspects, generally offering free software and open source without excluding proprietary software for those users who require that functionality, it is a user-centric rather than user-friendly distribution, it is intended for competent GNU/Linux users or anyone with an attitude that is willing to read documentation and solve their own problems. Finally, it is a general purpose distribution that not installs unwanted packages.

Once these principles and some of its characteristics are known, if you think that Arch Linux suits your needs, it is time to install. The official way to install Arch Linux is through the [official installation guide](https://wiki.archlinux.org/title/Installation_guide) that is made up of a collection of wiki pages that explain each step together with the commands to execute one after the other on the terminal in which the installation media starts. Installing Arch Linux manually and after reading the various necessary wiki pages you learn and know in more detail various aspects of the installed system, this is a great way to learn many things.

In addition to the principles, another way to see how Arch Linux differs from other distributions is that it is a rolling release distribution, so that in each system update, all the packages and programs are updated to the latest versions. That Arch is a rolling release distribution does not mean it is unstable, on the contrary, it is a very stable distribution that does not usually cause problems and, generally, if they do occur, they are minor and corrected in the next version of the package that presents the bad behavior. For the rare occasions in which there is a serious problem in which the system does not start until the graphic environment and in case it is not possible to restore the proper functioning of the system, it is always recommended to make backup copies so not to lose any important data.

Another relevant aspect is its the great [Arch Linux wiki](https://wiki.archlinux.org/) knowledge base, broken down into topics with enough detail to learn, install, get started, and resolve common known issues. The necessary commands for all of this are included in the wiki pages.

If the wiki is not enough, there are the official discussion [forums](https://bbs.archlinux.org/), to request and offer help to other users of the distribution. Another source of help and information is the [Arch Linux Reddit](https://www.reddit.com/r/archlinux/) channel where you can read and write comments for other users of the distribution, sometimes about help, conversations or news related to Arch.

### The alis script to install Arch Linux

Installing Arch Linux manually allows you to know the installed system in detail, however, reading several dozen pages of the wiki requires time and performing the manual installation is slow with the possibility of making mistakes. The first manual installations of Arch Linux is didactic but it is tedious for users who already know how to do it and simply want to install the system in a short time or without discovering new small steps that have changed over time since the last installation. Luckily, Arch Linux, being a rolling release distribution, and unless the system fails for some reason or you want to make a fundamental change to the system, an installation allows you to keep the system running for years, fully updated with regular system updates every few weeks.

Each Arch Linux user may have his own recipe with the list of commands compiled to perform the installation according to his preferences. Some of these users find it convenient to create a script for personal use to automate the installation. A few of those users share their script in case it is useful to other users. In the absence of an official installer the result is that there are several unofficial user-developed scripts available to perform the installation easily, [arch-install](https://github.com/archlinux/archinstall) and [archfi](https://github.com/MatMoul/archfi/) are two examples.

Another script to install Arch Linux is this one where you are, [alis](https://github.com/picodotdev/alis). Arch Linux Install Script or alis is a script to install a pure Arch Linux from official installation media.

### Motivation

alis is a personal project that arises just like other projects and scripts. The existing scripts that I knew of to install Arch Linux were not flexible enough or ware interactive so at the time I was going to need to install Arch Linux on my next personal computer I was going to use, an Intel NUC, I started creating the script that I wanted but didn't exist.

The goal of alis is to make an Arch Linux installation as fast as possible and flexible enough to be able to install Arch with the most common options that most users want. Even so, since the flexibility of Arch Linux is so great that it is almost impossible to cover all the possible configurations and perform the installation to leave it just as a user wants. alis allows to install a system with the most common and fundamental system options and once installed the user can customize the installation according to the less important specific preferences. Even the installation of packages in alis although it is possible, I recommend installing them after the base installation, because it is more reliable than doing it during the installation, especially some AUR packages that are prone to not compiling well or to fail in the installation.

To satisfy these two properties of speed and flexibility, it is necessary for the script to be unattended, since being guided makes the interaction with the text or graphic interface easier than typing the commands in the terminal, but it is still slow, repetitive and tedious. Also a guided installer would be too complex to cover all possible customization options and if it is very simple it only offers a small part of all the options that users want.

Surely there are many users who, still wanting to install Arch or happy with Arch, switch to another distribution or another Arch derivative distribution for the simple fact that they have a graphical, guided and automated installer after some clicks.

It is a personal project that I keep in my spare time, keep in mind when asking for help or some new feature that you want. If it works for you that is perfect, and if not, send a pull request to GitHub so I can review it and if it improves the script and is useful for other users I will be happy to merge it.

alis is intended both for newcomers to facilitate the task or simply to serve as an executable guide to the commands that he obtains from the wiki. It is also intended for advanced users to avoid the tedious work of performing the installation manually or in a virtual machine, making the installation repeatable and not spending another significant amount of time on each new installation.

I do my best to keep it reliable and fix errors but do not expect it to be perfect and completely error free. Arch is a rolling release distro and things change, I do not have time to try all the possible combinations at all times, so before using it in real hardware try it in a virtual machine.

### Principles

The principles on which alis is based are the following:

* Use the original Arch Linux installation media
* As much unattended and automated as possible, require as little interactivity as possible
* Allow to customize the installation to cover the most common cases
* Provide support for system recovery
* Provide support for installation log
* Use sane configuration default values

I did not want to create a new installation media because it requires a repository to store it and by security concerns so alis is downloaded once booted from the original installation media which authenticity can be checked with a hash algorithm. To use alis only requires four commands to be typed and tweak some configuration variables to easily customize the installation to cover the most common cases. The configuration has sane defaults and allows you to choose more advanced features.

Generally it is not needed to start a recovery but when after an update something serious happens it is necessary to recover the system to a working state, maybe downgrading packages. Also is almost unattended, it allows to collect all the script output to a log including to capture the output to an [asciinema](https://asciinema.org/) video to review after installation if needed.

#### Bash based

alis is a script based on the Bash shell. Contains the same commands you type on a manual install one after another. Being Bash based is easy to compare the script commands with your own manual recipe and easy to compare with the commands provided by the Arch Linux wiki pages and other installation guides. Although alis is not used can serve as a guide and documentation to do some specific tasks, because that can be known as _the Arch Linux executable installation guide and wiki_.

#### Simple configuration

The configuration is a simple Bash file that defines some environment variables to customize the installation to each user's own preferences. Simple variables but that allow most common and quite advanced configurations.

Customizing the installation simply consists of changing the values of the variables for which many of them are already provided as predefined options to choose from. Other variables require the user to enter the exact values that he wants. Editing the configuration file can be done after downloading alis before starting the unattended installation but the configuration can also be downloaded from the internet as a personal GitHub repository and used multiple times.

#### Unattended

Fully automated to complete the installation easy and fast, as fast as your internet connection allows. Not a guided script means it is not necessary to spend time on answer slowly the same questions over and over on each usage.

If the script were guided it would be much more complex to create some kind of text-based interface and much more so if it were graphical. The script being guided would be much more complex and yet would certainly offer a few fewer customization options.

Being a script that I develop in my personal time, being simple is a must and allow new features to be added with the minimal work is essential for it to be maintainable.

#### Desktop environments

The most popular GNU/Linux desktop environments are [GNOME](https://www.gnome.org/), [KDE](https://kde.org/), [XFCE](https://xfce.org/) but also there are many other alternative graphical environments options like [i3-gap](https://github.com/Airblader/i3), [Deepin](https://www.deepin.org/en/dde/), [Budgie](https://github.com/BuddiesOfBudgie/budgie-desktop) and others. alis supports more than 10 environments.

#### Advanced features

Using some advanced features of a system requires additional configuration. Some are likely to be the standard in a few years like [PipeWire](https://pipewire.org/) server for audio and video likely to replace Pulseaudio sound server in most distributions, same for BTRFS file system with subvolumes as replacement for ext4, systemd-boot as loader boot instead of Grub, systemd-homed to make user directories portable and system-independent. In addition, alis offers support for installation via SSH with cloud-init, which is very useful for installing and automating it also on local virtual machines or in the cloud.

#### And much more!

But alis offers many more options like support for systems with BIOS or UEFI, different combinations of partitions with or without LVM and LUKS, different file systems like ext4, btrfs (with subvols), xfs, f2fs, reiserfs, the installation of additional kernels with the possibility of adding boot parameters in the configuration or compression programs for the initramfs, graphics drivers for Intel, AMD, and Nvidia, various boot loaders, customizing the command line interpreter between bash, zsh, dash or fish and support for installing packages during or after the base system install from the Arch Linux and AUR repositories, from Flatpak, or from SDKMAN.

In addition to other features such as support for TRIM on SSD drives to keep them in optimal working order, microcode for Intel and AMD processors, optionally swap with file, file provisioning to provide some configuration file among a few others.

### How you can collaborate

If you use alis and find it useful, there are several ways you can collaborate and give something back in exchange for using the script. Some very simple ones that do not require much effort is to share it on social networks or forums when other users ask for help installing Arch Linux. If you have a blog you can also write an article or if you have a YouTube channel upload a video so that other users when they look for information on how to install Arch Linux quickly and easily find the script in one way or another.

If you make a change to the script and it is interesting for other users, you can send me a pull request so that I can merge it and in this way you do not have to keep the change in your fork. You can also create a issue or open a [discussion](https://github.com/picodotdev/alis/discussions) thread on GitHub.

The above are already great ways to contribute to the script and enough, seeing what is used and useful helps me keep interested in further developing it, fixing bugs, updating and adding new features. If the script has been very useful to you and you want to thank the work also with a small economic donation, especially if you use it in a work or business environment, you can do it through [PayPal](https://www.paypal.com) to my associated PayPal email address [pico.dev@gmail.com](mailto:pico.dev@gmail.com).

### How to submit bug reports and request changes

An Arch Linux user when he has an error or a problem should try first to solve the problem himself, with the help of the wiki and searching for information with an internet search engine. And finally, if you are not able to solve the problem yourself, then ask other users for information. In order for other people to be able to provide you with help quickly and effectively, it is necessary that you describe the problem in detail and provide as much relevant information as possible, sometimes an image is better or complements the description.

The source code repository is hosted on GitHub, which also allows you to create issues with requests for changes or bug fixes, but the best thing is that if you can send a pull request that I will review and if it is useful I will apply to the source code of alis. The changes and new features should be useful to other users as well.

### Other alternatives

There are other quite good similar projects that can be used as alternative to install a pure Arch Linux without any additions.

* [Arch Installer](https://github.com/archlinux/archinstall) (archinstall) (maybe is the most relevant as is included in the official installation media)
* [archfi](https://github.com/MatMoul/archfi/)
* [Archlinux Ultimate Installer (aui)](https://github.com/helmuthdu/aui) (only accepts patches)

Also, if you prefer to install an Arch Linux using a guided graphical installer you can choose an Arch based distribution.

* [ArcoLinux](https://arcolinux.com/)
* [Manjaro](https://manjaro.org/)
* [EndeavourOS](https://endeavouros.com/)
* [Archlabs](https://archlabslinux.com/)
* [RebornOS](https://rebornos.org/)
* [BlackArch](https://blackarch.org/)

Also and recomended for new Arch Linux new comers follow the Arch Way of doing things is a good way to use and learn about Arch. There are many guides out here, the official Arch Linux installation guide the first one. These are other good ones that explains step by step from instalation media creation to first boot and programs installation, all the necessary to start.

* [The Arch Linux Handbook](https://www.freecodecamp.org/news/how-to-install-arch-linux/)

        {{< ad-bilboard >}}


code:
# shellcheck disable=SC2148
# SC2148: Tips depend on target shell and yours is unknown. Add a shebang.
$ ./alis-cloud-init-iso.sh
$ ./alis-cloud-kvm-virt-installsh
$ ./alis-cloud-init-ssh.sh -i [ip addr]
$ ./alis-cloud-init-ssh.sh -i [ip addr] -c [config]


code:
# shellcheck disable=SC2148
# SC2148: Tips depend on target shell and yours is unknown. Add a shebang.
$ ./alis.packages.sh


code:
# shellcheck disable=SC2148
# SC2148: Tips depend on target shell and yours is unknown. Add a shebang.
# alis.sh


code:
# shellcheck disable=SC2148,SC2102
# SC2148: Tips depend on target shell and yours is unknown. Add a shebang.
# SC2102: Ranges can only match single chars (mentioned due to duplicates).
$ paru -S [package]
$ yay -S [package]


code:
# shellcheck disable=SC2148
# SC2148: Tips depend on target shell and yours is unknown. Add a shebang.
# curl -sL https://raw.githubusercontent.com/picodotdev/alis/master/download.sh | bash -s -u picodotdev


code:
# shellcheck disable=SC2148
# SC2148: Tips depend on target shell and yours is unknown. Add a shebang.
# curl -sL https://raw.githubusercontent.com/picodotdev/alis/master/download.sh | bash


code:
# shellcheck disable=SC2148
# SC2148: Tips depend on target shell and yours is unknown. Add a shebang.
#                         # Start the system with latest Arch Linux installation media
# loadkeys [keymap]       # Load keyboard keymap, eg. loadkeys es, loadkeys us, loadkeys de
# curl -sL https://raw.githubusercontent.com/picodotdev/alis/master/download.sh | bash     # Download alis scripts
# vim alis.conf           # Edit configuration and change variables values with your preferences (system configuration)
# ./alis.sh               # Start installation


code:
# shellcheck disable=SC2148
# SC2148: Tips depend on target shell and yours is unknown. Add a shebang.
# loadkeys [keymap]


code:
# shellcheck disable=SC2148,SC2215
# SC2148: Tips depend on target shell and yours is unknown. Add a shebang.
# SC2215: This flag is used as a command name. Bad line break or missing [ .. ]?
$ ls -l
total 1520
-rwxr-xr-x 1 picodotdev picodotdev     506 mar 20 11:40 alis-asciinema.sh
-rwxr-xr-x 1 picodotdev picodotdev     415 mar 20 11:40 alis-cloud-init-iso.sh
-rwxr-xr-x 1 picodotdev picodotdev    1252 mar 20 11:40 alis-cloud-init-ssh.sh
-rw-r--r-- 1 picodotdev picodotdev     981 mar 20 11:40 alis-commons.conf
-rwxr-xr-x 1 picodotdev picodotdev   13336 mar 20 11:40 alis-commons.sh
-rw-r--r-- 1 picodotdev picodotdev    9319 mar 20 11:40 alis.conf
-rwxr-xr-x 1 picodotdev picodotdev     975 mar 20 11:40 alis-kvm-virt-install.sh
drwxr-xr-x 8 picodotdev picodotdev    4096 mar 20 11:04 alis-master
-rw-r--r-- 1 picodotdev picodotdev 1354656 mar 20 11:40 alis-master.zip
-rwxr-xr-x 1 picodotdev picodotdev     514 mar 20 11:40 alis-packages-asciinema.sh
-rw-r--r-- 1 picodotdev picodotdev    5672 mar 20 11:40 alis-packages.conf
-rwxr-xr-x 1 picodotdev picodotdev     548 mar 20 11:40 alis-packages-exit.sh
-rwxr-xr-x 1 picodotdev picodotdev    9004 mar 20 11:40 alis-packages.sh
-rwxr-xr-x 1 picodotdev picodotdev     670 mar 20 11:40 alis-packer.sh
-rwxr-xr-x 1 picodotdev picodotdev     201 mar 20 11:40 alis-reboot.sh
-rwxr-xr-x 1 picodotdev picodotdev     524 mar 20 11:40 alis-recovery-asciinema.sh
-rw-r--r-- 1 picodotdev picodotdev    2738 mar 20 11:40 alis-recovery.conf
-rwxr-xr-x 1 picodotdev picodotdev     864 mar 20 11:40 alis-recovery-reboot.sh
-rwxr-xr-x 1 picodotdev picodotdev    8702 mar 20 11:40 alis-recovery.sh
-rwxr-xr-x 1 picodotdev picodotdev   67840 mar 20 11:40 alis.sh
drwxr-xr-x 2 picodotdev picodotdev    4096 mar 20 11:40 configs
-rwxr-xr-x 1 picodotdev picodotdev     647 mar 20 11:40 download.sh
-rwxr-xr-x 1 picodotdev picodotdev     645 mar 20 11:40 download-sid.sh
drwxr-xr-x 3 picodotdev picodotdev    4096 mar 20 11:40 files


code:
# shellcheck disable=SC2148
# SC2148: Tips depend on target shell and yours is unknown. Add a shebang.
$ sha1sum archlinux-2022.03.01-x86_64.iso
64070acf60ac342d7aaddddfa0448f5900c4a0a5  archlinux-2022.03.01-x86_64.iso


code:
# shellcheck disable=SC2148,SC2102
# SC2148: Tips depend on target shell and yours is unknown. Add a shebang.
# SC2102: Ranges can only match single chars (mentioned due to duplicates).
$ pacman -U [package]
$ pacman -U /var/cache/pacman/pkg/linux-5.16.15.arch1-1-x86_64.pkg.tar.zst


code:
# shellcheck disable=SC2148,SC2102
# SC2148: Tips depend on target shell and yours is unknown. Add a shebang.
$ pacman -S [package]
$ pacman -S firefox


code:
# shellcheck disable=SC2148,SC2102
# SC2148: Tips depend on target shell and yours is unknown. Add a shebang.
$ pacman -Syu


code:
# shellcheck disable=SC2148,SC2102
# SC2148: Tips depend on target shell and yours is unknown. Add a shebang.
$ vim alis-recovery.conf
$ ./alis-recovery.sh


code:
# shellcheck disable=SC2148,SC2102
# SC2148: Tips depend on target shell and yours is unknown. Add a shebang.
# vim alis.conf


code:
# shellcheck disable=SC2148,SC2102
# SC2148: Tips depend on target shell and yours is unknown. Add a shebang.
# vim alis-packages.conf


code:
#!/usr/bin/env bash
set -eu

cd deploy/
git add .
git commit -m "Site update at $(LC_ALL=en_US.utf8 date +%Y-%m-%dT%H:%M:%S%z)"
git push origin gh-pages
cd ..


code:
#!/usr/bin/env bash
git clone -b master git@github.com:picodotdev/alis.git
cd alis || exit
git config --local user.email "pico.dev@gmail.com"
git config --local user.name "pico.dev"

git clone -b gh-pages git@github.com:picodotdev/alis.git deploy/
cd deploy || exit
git config --local user.email "pico.dev@gmail.com"
git config --local user.name "pico.dev"


code:
#!/usr/bin/env bash
set -eu

mv deploy/ deploy-backup/
mkdir deploy/

cd deploy/
git init -b gh-pages
git remote add origin git@github.com:picodotdev/alis.git
git config --local user.email "pico.dev@gmail.com"
git config --local user.name "pico.dev"
git config --local pull.ff only
git checkout -b gh-pages
cd ..

hugo --destination="deploy"

cd deploy/
git add -A
git commit -m "Site reset at $(LC_ALL=en_US.utf8 date +%Y-%m-%dT%H:%M:%S%z)"
git push --force origin gh-pages
cd ..


code:
#!/usr/bin/env bash
hugo server --buildDrafts --buildFuture --watch --disableLiveReload


code:
$arch-color: #08c;
$arch-background-color: #f6f9fc;
$arch-background-dark-color: #222;
$arch-background-font-color: white;

body {
  font-family: 'Open Sans', sans-serif;;
  font-size: 1.1em;
  background-color: $arch-background-color;
  overflow-x: hidden;
}

a {
  color: $arch-color;
}

a:visited {
  color: lighten($arch-color, 5%);
}

a:hover {
  color: darken($arch-color, 5%);
}

h1 {
  font-size: 5em;
  font-weight: bold;
}

header {
  min-height: 40px;
  padding: 10px 15px;
  background: $arch-background-dark-color;
  border-bottom: 5px $arch-color solid;

  .navbar-light .navbar-nav .nav-link {
    color: $arch-background-font-color;
    font-weight: bold;
  }

  .navbar-light .navbar-nav .nav-link.active, .navbar-light .navbar-nav .show > .nav-link {
    color: $arch-background-font-color;
    font-weight: bold;
  }
}

footer {
  font-size: 0.9em;
  min-height: 100px;
  padding: 10px 15px;
  background: $arch-background-dark-color;
  border-top: 5px $arch-color solid;
  color: $arch-background-font-color;
}

.container-fluid {
  padding-right: 0px;
  padding-left: 0px;
}

.row {
  margin-right: 0px;
  margin-left: 0px;
}

.navbar {
  font-weight: bold;
}

.card {
  border: 1px solid #bcd;
  border-radius: 0rem;
}

div.code {
  border: 1px solid #ddd;
  border-radius: 0em;
  margin-bottom: 1em;

  div.highlight {
    font-size: 1em;
    border-bottom: 1px solid #ddd;

    table {
      overflow: auto;

      td:nth-child(2) {
        width: 100%;
      }
    }
  }

  div.highlight-meta {
    font-size: 1em;
    background-color: #f7f7f7;
    padding: 6px;

    span.raw {
      float: right;
    }

    span, a {
      color: #666;
      font-weight: 600;
      text-decoration: none;
      font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol;
      font-size: 0.8em;
    }
  }

  pre {
    margin-bottom: 0rem;
  }
}

div.sidebar-sticky {
  top: 15px;
  min-height: 600px;
  max-height: 1050px;
  display: none;
}

div.adsense-vertical {
  min-width: 120px;
  max-width: 300px;
  min-height: 600px;
  max-height: 1050px;
  display: block;
}

div.adsense-bilboard {
  min-width: 250px;
  max-width: 970px;
  min-height: 60px;
  max-height: 280px;
  display: block;
  margin: auto;
}

div.tableofcontents {
  border: 1px solid #ddd;
  border-radius: 0em;
  background-color: #f7f7f7;
  display: inline-block;
}

div.media {
  display: block;
  text-align: center;
  margin-bottom: 1em;

  iframe[id^="asciicast-iframe"], amp-iframe[id^="asciicast-iframe"] {
    border: 0em solid white;
    box-shadow: 0px 0px 0px rgba(0, 0, 0, 0.15);
  }

  img, video, iframe, amp-img, amp-video, amp-iframe, amp-ad {
    background-color: white;
    border: 0.5em solid white;
    border-radius: 0.3em;
    box-shadow: 0px 1px 4px rgba(0, 0, 0, 0.15);
    box-sizing: content-box;
    max-width: 100%;
    max-height: 100%;
    object-fit: contain;
    vertical-align: middle;

    &.white-background {
      background-color: white;
    }

    &.black-background {
      background-color: black;
    }
  }

  figure {
    clear: both;

    p {
      a {
        display: inline-block;
      }
    }

    figcaption {
      font-size: 0.8em;
    }
  }
}

div.media-amazon.float-right {
  margin-left: 20px;
}

div.media-twitter {
  text-align: left;
}

@media screen and (max-width: 576px) {
  h1 {
    font-size: 4em;;
  }
}

@media screen and (min-width: 1650px) {
  div.main {
    max-width: 1320px;
  }

  div.sidebar-sticky {
    display: block;
  }
}


code:
/* Background */ .chroma { background-color: #ffffff }
/* Other */ .chroma .x {  }
/* Error */ .chroma .err { color: #a61717; background-color: #e3d2d2 }
/* LineTableTD */ .chroma .lntd { vertical-align: top; padding: 0; margin: 0; border: 0; }
/* LineTable */ .chroma .lntable { border-spacing: 0; padding: 0; margin: 0; border: 0; width: auto; overflow: auto; display: block; }
/* LineHighlight */ .chroma .hl { display: block; width: 100%;background-color: #ffffcc }
/* LineNumbersTable */ .chroma .lnt { margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #7f7f7f }
/* LineNumbers */ .chroma .ln { margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #7f7f7f }
/* Keyword */ .chroma .k { color: #000000; font-weight: bold }
/* KeywordConstant */ .chroma .kc { color: #000000; font-weight: bold }
/* KeywordDeclaration */ .chroma .kd { color: #000000; font-weight: bold }
/* KeywordNamespace */ .chroma .kn { color: #000000; font-weight: bold }
/* KeywordPseudo */ .chroma .kp { color: #000000; font-weight: bold }
/* KeywordReserved */ .chroma .kr { color: #000000; font-weight: bold }
/* KeywordType */ .chroma .kt { color: #445588; font-weight: bold }
/* Name */ .chroma .n {  }
/* NameAttribute */ .chroma .na { color: #008080 }
/* NameBuiltin */ .chroma .nb { color: #0086b3 }
/* NameBuiltinPseudo */ .chroma .bp { color: #999999 }
/* NameClass */ .chroma .nc { color: #445588; font-weight: bold }
/* NameConstant */ .chroma .no { color: #008080 }
/* NameDecorator */ .chroma .nd { color: #3c5d5d; font-weight: bold }
/* NameEntity */ .chroma .ni { color: #800080 }
/* NameException */ .chroma .ne { color: #990000; font-weight: bold }
/* NameFunction */ .chroma .nf { color: #990000; font-weight: bold }
/* NameFunctionMagic */ .chroma .fm {  }
/* NameLabel */ .chroma .nl { color: #990000; font-weight: bold }
/* NameNamespace */ .chroma .nn { color: #555555 }
/* NameOther */ .chroma .nx {  }
/* NameProperty */ .chroma .py {  }
/* NameTag */ .chroma .nt { color: #000080 }
/* NameVariable */ .chroma .nv { color: #008080 }
/* NameVariableClass */ .chroma .vc { color: #008080 }
/* NameVariableGlobal */ .chroma .vg { color: #008080 }
/* NameVariableInstance */ .chroma .vi { color: #008080 }
/* NameVariableMagic */ .chroma .vm {  }
/* Literal */ .chroma .l {  }
/* LiteralDate */ .chroma .ld {  }
/* LiteralString */ .chroma .s { color: #dd1144 }
/* LiteralStringAffix */ .chroma .sa { color: #dd1144 }
/* LiteralStringBacktick */ .chroma .sb { color: #dd1144 }
/* LiteralStringChar */ .chroma .sc { color: #dd1144 }
/* LiteralStringDelimiter */ .chroma .dl { color: #dd1144 }
/* LiteralStringDoc */ .chroma .sd { color: #dd1144 }
/* LiteralStringDouble */ .chroma .s2 { color: #dd1144 }
/* LiteralStringEscape */ .chroma .se { color: #dd1144 }
/* LiteralStringHeredoc */ .chroma .sh { color: #dd1144 }
/* LiteralStringInterpol */ .chroma .si { color: #dd1144 }
/* LiteralStringOther */ .chroma .sx { color: #dd1144 }
/* LiteralStringRegex */ .chroma .sr { color: #009926 }
/* LiteralStringSingle */ .chroma .s1 { color: #dd1144 }
/* LiteralStringSymbol */ .chroma .ss { color: #990073 }
/* LiteralNumber */ .chroma .m { color: #009999 }
/* LiteralNumberBin */ .chroma .mb { color: #009999 }
/* LiteralNumberFloat */ .chroma .mf { color: #009999 }
/* LiteralNumberHex */ .chroma .mh { color: #009999 }
/* LiteralNumberInteger */ .chroma .mi { color: #009999 }
/* LiteralNumberIntegerLong */ .chroma .il { color: #009999 }
/* LiteralNumberOct */ .chroma .mo { color: #009999 }
/* Operator */ .chroma .o { color: #000000; font-weight: bold }
/* OperatorWord */ .chroma .ow { color: #000000; font-weight: bold }
/* Punctuation */ .chroma .p {  }
/* Comment */ .chroma .c { color: #999988; font-style: italic }
/* CommentHashbang */ .chroma .ch { color: #999988; font-style: italic }
/* CommentMultiline */ .chroma .cm { color: #999988; font-style: italic }
/* CommentSingle */ .chroma .c1 { color: #999988; font-style: italic }
/* CommentSpecial */ .chroma .cs { color: #999999; font-weight: bold; font-style: italic }
/* CommentPreproc */ .chroma .cp { color: #999999; font-weight: bold; font-style: italic }
/* CommentPreprocFile */ .chroma .cpf { color: #999999; font-weight: bold; font-style: italic }
/* Generic */ .chroma .g {  }
/* GenericDeleted */ .chroma .gd { color: #000000; background-color: #ffdddd }
/* GenericEmph */ .chroma .ge { color: #000000; font-style: italic }
/* GenericError */ .chroma .gr { color: #aa0000 }
/* GenericHeading */ .chroma .gh { color: #999999 }
/* GenericInserted */ .chroma .gi { color: #000000; background-color: #ddffdd }
/* GenericOutput */ .chroma .go { color: #888888 }
/* GenericPrompt */ .chroma .gp { color: #555555 }
/* GenericStrong */ .chroma .gs { font-weight: bold }
/* GenericSubheading */ .chroma .gu { color: #aaaaaa }
/* GenericTraceback */ .chroma .gt { color: #aa0000 }
/* GenericUnderline */ .chroma .gl { text-decoration: underline }
/* TextWhitespace */ .chroma .w { color: #bbbbbb }


code:
---
links:
  html:
    suffix: "/"
    absolute: "false"
  xml:
    suffix: "/"
    absolute: "true"
  amp:
    suffix: "/index-amp.html"
    absolute: "false"
tags:
  html:
    imgtag: "img"
    imgtagopen: "<img"
    imgtagclose: ""
    imgtagsrc: "src"
    iframetag: "iframe"
    iframetagopen: "<iframe"
    iframetagclose: ""
    iframetagsrc: "data-src"
    audiotag: "audio"
    audiotagopen: "<audio"
    audiotagclose: "</audio>"
  xml:
    imgtag: "img"
    imgtagopen: "<img"
    imgtagclose: ""
    imgtagsrc: "src"
    iframetag: "iframe"
    iframetagopen: "<iframe"
    iframetagclose: ""
    iframetagsrc: "src"
    audiotag: "audio"
    audiotagopen: "<audio"
    audiotagclose: "</audio>"
  amp:
    imgtag: "amp-img"
    imgtagopen: "<amp-img"
    imgtagclose: "</amp-img>"
    imgtagsrc: "src"
    iframetag: "amp-iframe"
    iframetagopen: "<amp-iframe"
    iframetagclose: "</amp-iframe>"
    iframetagsrc: "src"
    audiotag: "amp-audio"
    audiotagopen: "<amp-audio"
    audiotagclose: "</amp-audio>"


code:
{{- $links := .Page.Site.Data.theme.conf.links.html -}}
{{- $tags := .Page.Site.Data.theme.conf.tags.html -}}
{{- $imgtagopen := $tags.imgtagopen -}}
{{- $imgtagclose := $tags.imgtagclose -}}
{{- $imgtagsrc := $tags.imgtagsrc -}}

{{- $nil := default nil nil -}}
{{- $src := $nil -}}
{{- $srcthumb := $nil -}}
{{- $width := $nil -}}
{{- $height := $nil -}}
{{- $title := .Title -}}

{{- $strings := split .Destination "," -}}
{{- $attributes := dict -}}
{{- range $i := $strings -}}
  {{- $key := index (split $i "=") 0 -}}
  {{- $value := index (split $i "=") 1 -}}
  {{- $attributes = merge $attributes (dict $key $value) -}}
{{- end -}}
{{- $page := default "" (index $attributes "page") -}}
{{- $url := index $attributes "url" -}}
{{- $size := index $attributes "size" -}}
{{- $width := index (split $size "x") 0 -}}
{{- $height := index (split $size "x") 1 -}}
{{- $command := default "Fit" (index $attributes "command") -}}
{{- $commandthumb := default "Fit" (index $attributes "commandthumb") -}}
{{- $options := default "2560x1440" (index $attributes "options") -}}
{{- $optionsthumb := index $attributes "size" -}}
{{- $gallery := eq "true" (index $attributes "gallery") -}}
{{- $class := index $attributes "class" -}}
{{- $class := replace $class "." " " -}}
{{- $layout := index $attributes "layout" -}}
{{- $loading := default "lazy" (index $attributes "lazy") -}}

{{- if (eq $loading "false") -}}
  {{- $loading := $nil -}}
{{- end -}}

{{- if or (hasPrefix $url "logotype:") (hasPrefix $url "resource:") (hasPrefix $url "image:") (hasPrefix $url "asset:") -}}
  {{- $binding := index (split $url ":") 0 -}}
  {{- $image := index (split $url ":") 1 -}}
  {{- $imagethumb := index (split $url ":") 2 -}}

  {{- if eq $binding "logotype" -}}
    {{- $src = print "assets/images/logotypes/" $image | relURL -}}
    {{- $srcthumb = cond (eq $imagethumb nil) $src (print "assets/images/logotypes/" $imagethumb | relURL) -}}
  {{- else if or (eq $binding "resource") (eq $binding "image") -}}
    {{- $p := cond (eq $page "") .Page (.Page.GetPage $page) -}}
    {{- $path := cond (eq $binding "image") "images/" "" -}}

    {{- if (findRE "\\.svg$|\\.webp$|\\.gif" $image) -}}
      {{- $base := replace .Page.Permalink "/index-amp.html" "/" -}}
      {{- $src = print $base $path $image | relURL -}}
      {{- $srcthumb = cond (eq $imagethumb nil) $src (print $base $path $imagethumb | relURL) -}}
    {{- else -}}
      {{- $resource := $p.Resources.GetMatch (print $path $image) -}}
      {{- $resourcethumb := $p.Resources.GetMatch (print $path $image) -}}
      {{- $scaled := $nil -}}
      {{- $scaledhumb := $nil -}}

      {{- if eq $resource nil -}}{{- errorf "Invalid resource '%s'" $image -}}{{- end -}}
      {{- if eq $optionsthumb nil -}}{{- errorf "Invalid thumb optionsthumb '%s'" $optionsthumb -}}{{- end -}}

      {{- if eq $command "Fit" -}}
        {{- $scaled = $resource.Fit $options -}}
      {{- else if eq $command "Resize" -}}
        {{- $scaled = $resource.Resize $options -}}
      {{- else if eq $command "Fill" -}}
        {{- $scaled = $resource.Fill $options -}}
      {{- else -}}
        {{- errorf "Invalid image processing command: Must be one of Fit, Fill or Resize '%s'" .Destination -}}
      {{- end -}}

      {{- if eq $commandthumb "Fit" -}}
        {{- $scaledhumb = $resourcethumb.Fit $optionsthumb -}}
      {{- else if eq $commandthumb "Resize" -}}
        {{- $scaledhumb = $resourcethumb.Resize $optionsthumb -}}
      {{- else if eq $commandthumb "Fill" -}}
        {{- $scaledhumb = $resourcethumb.Fill $optionsthumb -}}
      {{- else -}}
        {{- errorf "Invalid image processing command: Must be one of Fit, Fill or Resize '%s'" .Destination -}}
      {{- end -}}

      {{- $src = $scaled.RelPermalink -}}
      {{- $srcthumb = $scaledhumb.RelPermalink -}}
      {{- $width = $scaledhumb.Width -}}
      {{- $height = $scaledhumb.Height -}}

      {{- if eq $layout "fixed-height" -}}
        {{- $width = $nil -}}
      {{- end -}}
    {{- end -}}
  {{- else if eq $binding "asset" -}}
    {{- $src = $image | relURL -}}
    {{- $srcthumb = cond (eq $imagethumb nil) $src (print "assets/images/logotypes/" $imagethumb | relURL) -}}
  {{- end -}}
{{- else -}}
  {{- errorf "Malformed image destination '%s'" .Destination -}}
{{- end -}}

{{- $srcimg := default .Destination $src -}}
{{- $srca := $nil -}}

{{- if and $gallery (ne $src nil) (ne $srcthumb nil) -}}
  {{- $srcimg = $srcthumb -}}
  {{- $srca = $src -}}
{{- end -}}
{{- if eq $links.absolute "true" -}}
  {{- $srcimg = absURL $srcimg -}}
  {{- $srca = absURL $srca -}}
{{- end -}}
{{ $srcimg = replace $srcimg "/index-amp.html" "/" }}
{{ $srca = replace $srca "/index-amp.html" "/" }}

{{- if $gallery }}{{ end -}}
  {{- $imgtagopen | safeHTML }} {{ $imgtagsrc }}="{{ $srcimg }}"{{ with $width }} width="{{ . }}"{{ end }}{{ with $height }} height="{{ . }}"{{ end }}{{ with $title }} alt="{{ . }}" title="{{ . }}"{{ end }}{{ with $layout }} layout="{{ . }}"{{ end }} class="{{ with $class }}{{ . }} {{ end }}"{{ with $loading }} loading="{{ . }}"{{ end }}>{{ $imgtagclose | safeHTML -}}
{{- if $gallery }}{{ end -}}


code:
{{- $links := .Page.Site.Data.theme.conf.links.html -}}
{{- $noLinks := .Page.Site.Data.theme.conf.links.amp -}}
{{- $href := .Destination -}}
{{- $title := .Title -}}
{{- $text := .Text -}}

{{- $nil := default nil nil -}}
{{- $binding := $nil -}}
{{- $attributes := dict -}}

{{- if or (eq (len (findRE "javadoc\\d+:" $href)) 1) (hasPrefix $href "javaee8:") (hasPrefix $href "tapestry:") (hasPrefix $href "spring-boot:") (hasPrefix $href "spring-framework:") -}}
  {{- $binding = index (split $href ":") 0 -}}
  {{- $href = index (split $href ":") 1 -}}
{{- end -}}

{{- $strings := split $href "," -}}
{{- range $i,$v := $strings -}}
  {{- if eq $i 0 -}}
    {{- $href = index (split $v ",") 0 -}}
  {{- else -}}
    {{- $key := index (split $v "=") 0 -}}
    {{- $value := index (split $v "=") 1 -}}
    {{- $attributes = merge $attributes (dict $key $value) -}}
  {{- end -}}
{{- end -}}

{{- if in (slice "javadoc8" "javadoc9" "javadoc10") $binding -}}
{{- $version := replace $binding "javadoc" "" -}}
{{- $href = print "https://docs.oracle.com/javase/" $version "/docs/api/" $href -}}
{{- else if (eq (len (findRE "javadoc\\d+" $binding)) 1) -}}
{{- $version := replace $binding "javadoc" "" -}}
{{- $href = print "https://docs.oracle.com/en/java/javase/" $version "/docs/api/" $href -}}
{{- else if eq $binding "javaee8" -}}
{{- $href = print "https://javaee.github.io/javaee-spec/javadocs/" $href -}}
{{- else if eq $binding "tapestry" -}}
{{- $href = print "https://tapestry.apache.org/current/apidocs/" $href -}}
{{- else if eq $binding "spring-boot" -}}
{{- $href = print "https://docs.spring.io/spring-boot/docs/current/api/" $href -}}
{{- else if eq $binding "spring-framework" -}}
{{- $href = print "https://docs.spring.io/spring-framework/docs/current/javadoc-api/" $href -}}
{{- end -}}

{{- if eq $links.absolute "true" -}}
  {{- $href = absURL $href -}}
{{- end -}}
{{- if and (findRE (print "^" .Page.Site.BaseURL) $href) (strings.HasSuffix $href $noLinks.suffix) -}}
  {{- $href = replaceRE (print $noLinks.suffix "$") $links.suffix $href -}}
{{- end -}}
{{- $rel := index $attributes "rel" -}}
{{- $target := index $attributes "target" -}}
{{- $class := index $attributes "class" -}}

{{- if findRE (print "^" .Page.Site.Params.misc.sponsoredlink) $href -}}
  {{- $rel = strings.TrimLeft " " (print (default "" $rel) " " "sponsored") -}}
{{- end -}}

{{ $text }}


code:
<!DOCTYPE html>

    {{ partial "meta.html" . }}
    <title>{{ block "title" . }}{{ .Site.Title }}{{ end }}</title>
    {{ partial "css.html" . }}
    {{ partial "javascript.html" . }}

                  {{ partial "navbar.html" . }}

                  {{ block "main" . }}{{ end }}

              {{ partial "ad-sidebar.html" . }}

alis

{{ .Site.Params.Description }}

                    {{ range .Site.Menus.navbar }}

{{ .Name }}

                    {{ end }}

                    alis by pico.dev and other contributors is licensed under the GNU General Public License v3.0.

                    Site powered by Hugo, GitHub, GitHub Pages and Bootstrap.

                    Arch Linux Install Script is based on Arch Linux but is NOT approved, sponsored, or affiliated with Arch Linux or its related projects.


code:
{{ define "main" }}
{{ end }}


code:
{{ define "main" }}
  {{ replace .Content "<toc></toc>" .TableOfContents | safeHTML }}
{{ end }}


code:
{{ define "main" }}
{{ replace .Content "<toc></toc>" .TableOfContents | safeHTML }}
{{ end }}


code:
{{- $cssOpts := (dict "targetPath" "css/main.css" "outputStyle" "compressed" "enableSourceMap" true) }}
{{- $mainCss := resources.Get "main.scss" | toCSS $cssOpts }}
{{- $syntaxCss := resources.Get "syntax.css" }}

<link href="https://fonts.googleapis.com/css?family=Open+Sans:400,600" rel="stylesheet">
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.8.0/font/bootstrap-icons.css">
<link rel="stylesheet" type="text/css" href="{{ $syntaxCss.RelPermalink }}" integrity="{{ $syntaxCss.Data.Integrity }}">
<link rel="stylesheet" type="text/css" href="{{ $mainCss.RelPermalink }}" integrity="{{ $mainCss.Data.Integrity }}">


code:
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script>

<!-- Google AdSense -->
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-3533636310991304" crossorigin="anonymous"></script>

<!-- Global site tag (gtag.js) - Google Analytics -->
<script type="text/javascript" src="https://www.googletagmanager.com/gtag/js?id=G-71D7PJB4PJ" async></script>
<script type="text/javascript">
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());
  gtag('config', 'G-71D7PJB4PJ');
</script>


code:
<meta name="base" href="{{ "" | relURL }}">
<meta name="description" content="{{ if .Params.summary }}{{ .Params.summary }}{{ else }}{{ .Site.Params.Description }}{{ end }}">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<link rel="icon" type="image/png" href="/alis/images/favicon.png" />


code:
    alis
    <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">

    </button>

        {{ range .Site.Menus.navbar }}

          {{ .Name }}

        {{ end }}


code:
{{ $file := print "code/" .Params.file }}
{{ $resource := .Page.Resources.GetMatch $file }}
{{- if eq $resource nil -}}
    {{ $file = print .Params.file }}
    {{ $resource = .Page.Resources.GetMatch $file }}
{{- end -}}
{{- if eq $resource nil -}}{{- errorf "Resource not found '%s'" $file -}}{{- end -}}
{{ $content := $resource.Content }}
{{ $lines := len (findRE "\n" $content) }}
{{- if eq $lines 0 -}}
    {{ $content = print $content "\n\n" }}
{{- else if eq $lines 1 -}}
    {{ $content = print $content "\n" }}
{{- end -}}
{{ $content := highlight $content .Params.language .Params.options | }}
{{ $content := replaceRE "[ ]{4}" "    " $content }}
{{ $content := replaceRE "\\n" "
" $content }}
{{ $file := .Params.file }}
{{ $file := replace $file ".xhtml" ".html" }}
{{ $file := replace $file ".xmarkdown" ".markdown" }}

    {{ $content | safeHTML }}

        {{ $file }}


code:
{{ $class1 := replace $.Params.class1 " " "." }}
{{ $class2 := replace $.Params.class2 " " "." }}
{{ $class3 := replace $.Params.class3 " " "." }}
{{ with .Params.image1 }}![](url={{ . }}{{ with $.Params.thumb1 }}:{{ . }}{{ end }},size={{ $.Params.optionsthumb1 }},gallery={{ $.Params.gallery }},class={{ $class1 }} "{{ $.Params.title1 }}"){{ end }}
{{ with .Params.image2 }}![](url={{ . }}{{ with $.Params.thumb2 }}:{{ . }}{{ end }},size={{ $.Params.optionsthumb2 }},gallery={{ $.Params.gallery }},class={{ $class2 }} "{{ $.Params.title2 }}"){{ end }}
{{ with .Params.image3 }}![](url={{ . }}{{ with $.Params.thumb3 }}:{{ . }}{{ end }},size={{ $.Params.optionsthumb3 }},gallery={{ $.Params.gallery }},class={{ $class3 }} "{{ $.Params.title3 }}"){{ end }}
{{ with .Params.caption }}
{{ . }}{{ with $.Params.source }}
{{ i18n "source" }}: {{ . }}{{ end -}}
{{ end }}


code: {{ .Inner | .Page.RenderString }}


code:
{{ i18n "article_content" }}

    <toc></toc>


code:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.0" width="600" height="199.41692" id="svg2424">
  <defs id="defs2426">
    <linearGradient x1="112.49854" y1="6.1372099" x2="112.49853" y2="129.3468" id="path1082_2_" gradientUnits="userSpaceOnUse" gradientTransform="translate(287,-83)">
      <stop id="stop193" style="stop-color:#ffffff;stop-opacity:0" offset="0"/>
      <stop id="stop195" style="stop-color:#ffffff;stop-opacity:0.27450982" offset="1"/>
      <midPointStop offset="0" style="stop-color:#FFFFFF" id="midPointStop197"/>
      <midPointStop offset="0.5" style="stop-color:#FFFFFF" id="midPointStop199"/>
      <midPointStop offset="1" style="stop-color:#000000" id="midPointStop201"/>
    </linearGradient>
    <linearGradient x1="541.33502" y1="104.50665" x2="606.91248" y2="303.14029" id="linearGradient2544" xlink:href="#path1082_2_" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-0.3937741,0,0,0.393752,357.51969,122.00151)"/>
    <linearGradient id="linearGradient3388">
      <stop id="stop3390" style="stop-color:#000000;stop-opacity:0" offset="0"/>
      <stop id="stop3392" style="stop-color:#000000;stop-opacity:0.37113401" offset="1"/>
    </linearGradient>
    <linearGradient x1="490.72305" y1="237.72447" x2="490.72305" y2="183.9644" id="linearGradient4416" xlink:href="#linearGradient3388" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.749107,0,0,0.749107,-35.459862,91.44108)"/>
  </defs>
  <g transform="translate(-34.777313,-129.80241)" id="layer1">
    <g transform="matrix(0.8746356,0,0,0.8746356,14.730518,23.408954)" id="g2424">
      <g transform="matrix(0.6378586,0,0,0.6378586,36.486487,2.17139)" id="g2809" style="fill:#4d4d4d;fill-opacity:1">
        <path d="m 339.96875,309.09375 c -14.47141,-0.0239 -26.4812,2.94367 -31.125,4.5625 l -4.78125,25.8125 c -0.0116,0.0951 23.79543,-6.34855 34.28125,-5.96875 17.36158,0.62381 18.95948,6.63541 18.65625,14.75 0.29595,0.47462 -4.47933,-7.33192 -19.5,-7.59375 -18.94961,-0.32687 -45.69284,6.70947 -45.65625,35.3125 -0.51086,32.17412 24.03361,41.63882 40.75,41.8125 15.02821,-0.27364 22.0777,-5.69136 25.9375,-8.59375 5.07124,-5.30236 10.87308,-10.63447 16.40625,-17.03125 -5.23567,9.51278 -9.77472,16.0898 -14.5,21.125 l 0,4.25 22.84375,-3.84375 0.15625,-62.09375 c -0.23141,-8.78839 5.04123,-42.41827 -43.46875,-42.5 z m -3.28125,54.0625 c 9.46889,0.12995 20.32788,4.79708 20.34375,16.03125 0.049,10.21821 -12.80005,15.71183 -21.15625,15.625 -8.35976,-0.0868 -19.45093,-6.56982 -19.5,-16.53125 0.16016,-8.90444 10.45953,-15.35418 20.3125,-15.125 z" id="path2284" style="fill:#4d4d4d;fill-opacity:1;fill-rule:evenodd;stroke:none"/>
        <path d="m 398.50106,314.83145 -0.15505,102.82693 26.61213,-5.12724 0.0449,-58.30157 c 0.006,-8.68089 12.40554,-18.82451 27.9627,-18.66287 3.30202,-5.97408 9.5087,-21.24219 11.02088,-24.71514 -34.75649,-0.0833 -35.19897,9.98993 -41.24398,14.94517 -0.0631,-9.45285 -0.0213,-15.12741 -0.0213,-15.12741 l -24.2202,4.16213 z" id="path2286" style="fill:#4d4d4d;fill-opacity:1;fill-rule:evenodd;stroke:none"/>
        <path d="m 548.2688,328.33058 c -0.25696,-0.12068 -13.87938,-15.93419 -41.26638,-16.0589 -25.65249,-0.42638 -54.42578,9.51895 -54.88631,52.5328 0.22457,37.81852 27.6402,52.59809 55.0314,52.88627 29.31292,0.30451 40.97654,-18.32947 41.67615,-18.79124 -3.49762,-3.0321 -16.59792,-16.0131 -16.59792,-16.0131 0,0 -8.18236,11.65102 -24.05802,11.79913 -15.87942,0.1512 -29.68245,-12.27325 -29.87805,-29.60905 -0.20349,-17.33595 12.68881,-26.72821 29.99725,-27.48687 14.98466,-0.003 23.6297,9.67334 23.6297,9.67334 l 16.35218,-18.93238 z" id="path2288" style="fill:#4d4d4d;fill-opacity:1;fill-rule:evenodd;stroke:none"/>
        <path d="m 581.8125,278.84375 -25.125,5.90625 0.1875,133.9375 24.75,-4.46875 0.28125,-63.03125 c 0.0529,-6.60927 9.56127,-16.75916 25.4375,-16.4375 15.17973,0.15775 18.57236,10.11767 18.53125,11.375 l 0.4375,72.96875 24.40625,-4.3125 0.0937,-77.375 c 0.1607,-7.44539 -16.30833,-23.16954 -42.78125,-23.28125 -12.58087,0.0202 -19.54815,2.86825 -23.09375,4.96875 -6.06656,4.68565 -12.9998,9.17543 -19.8125,14.90625 6.29809,-8.09099 11.58551,-13.68516 16.75,-17.84375 l -0.0625,-37.3125 z" id="path2290" style="fill:#4d4d4d;fill-opacity:1;fill-rule:evenodd;stroke:none"/>
      </g>
      <g transform="matrix(0.9443373,0,0.01336345,0.9443373,78.345657,-412.48879)" id="g5326" style="fill:#1793d1;fill-opacity:1;stroke:none">
        <path d="m 400.67581,629.79609 7.68167,-1.91575 -0.92851,91.20792 -7.79574,1.32426 1.04258,-90.61643 z" id="path2292" style="fill:#1793d1;fill-opacity:1;fill-rule:evenodd;stroke:none"/>
        <path d="m 421.10266,657.01757 6.75064,-2.9867 -0.86808,65.39931 -6.49779,1.33915 0.61523,-63.75176 z m -1.26059,-23.58316 5.47167,-4.41533 4.42261,4.99952 -5.47558,4.53221 -4.4187,-5.1164 z" id="path2294" style="fill:#1793d1;fill-opacity:1;fill-rule:evenodd;stroke:none"/>
        <path d="m 440.44273,655.82614 7.67755,-1.56201 -0.1573,13.6722 c -0.007,0.58717 4.4194,-15.27364 24.68502,-14.92094 19.67986,0.10952 22.68401,15.34634 22.5291,18.76237 l -0.43759,48.0783 -6.73044,1.45631 0.63316,-47.489 c 0.0974,-1.38684 -2.88144,-13.11441 -16.78906,-13.15754 -13.90509,-0.0404 -23.68364,10.10048 -23.75821,16.57937 l -0.48127,41.83477 -7.80388,2.0313 0.63292,-65.28513 z" id="path2296" style="fill:#1793d1;fill-opacity:1;fill-rule:evenodd;stroke:none"/>
        <path d="m 561.53301,720.20203 -7.6776,1.56186 0.15737,-13.67198 c 0.007,-0.58742 -4.42201,15.27361 -24.68504,14.92086 -19.67983,-0.10944 -22.68399,-15.34626 -22.52908,-18.76229 l 0.43757,-48.07861 8.15674,-1.64226 -0.54644,47.48988 c -0.0149,1.29682 1.36845,13.29979 15.27604,13.3426 13.90511,0.0405 23.76622,-8.37359 24.01453,-21.04416 l 0.43105,-37.46902 7.5978,-1.93195 -0.63294,65.28507 z" id="path2298" style="fill:#1793d1;fill-opacity:1;fill-rule:evenodd;stroke:none"/>
        <path d="m 577.45461,655.28678 -5.42715,4.20017 20.19894,26.93328 -22.39092,31.11622 5.63499,4.226 21.04365,-28.8967 20.8779,29.58159 5.32727,-4.20103 -22.37578,-31.62866 18.56963,-25.5775 -5.53193,-4.73429 -16.92109,23.66778 -19.00551,-24.68686 z" id="path2300" style="fill:#1793d1;fill-opacity:1;fill-rule:evenodd;stroke:none"/>
      </g>
      <path d="m 105.8125,16.625 c -7.39687,18.135158 -11.858304,29.997682 -20.09375,47.59375 5.04936,5.35232 11.247211,11.585364 21.3125,18.625 C 96.210077,78.390904 88.828713,73.920352 83.3125,69.28125 72.7727,91.274163 56.259864,122.60209 22.75,182.8125 49.087628,167.60733 69.504089,158.23318 88.53125,154.65625 87.714216,151.1422 87.2497,147.34107 87.28125,143.375 l 0.03125,-0.84375 c 0.417917,-16.87382 9.195665,-29.84979 19.59375,-28.96875 10.39809,0.88104 18.48041,15.28242 18.0625,32.15625 -0.0786,3.17512 -0.43674,6.22955 -1.0625,9.0625 18.82058,3.68164 39.01873,13.03179 65,28.03125 -5.123,-9.4318 -9.69572,-17.93388 -14.0625,-26.03125 -6.87839,-5.33121 -14.05289,-12.2698 -28.6875,-19.78125 10.05899,2.61375 17.2611,5.62932 22.875,9 C 124.63297,63.338161 121.03766,52.354109 105.8125,16.625 z" transform="matrix(1.1433333,0,0,1.1433333,22.920168,121.64318)" id="path2518" style="fill:#1793d1;fill-opacity:1;fill-rule:evenodd;stroke:none"/>
      <g id="text2634" style="font-size:8.44138241px;font-style:normal;font-weight:normal;fill:#1793d1;fill-opacity:1;stroke:none;font-family:DejaVu Sans Mono">
        <path d="m 685.46692,263.83624 0,-5.32944 -1.99082,0 0,-0.71307 4.7895,0 0,0.71307 -1.99906,0 0,5.32944 -0.79962,0" id="path3945" style="fill:#1793d1;fill-opacity:1"/>
        <path d="m 689.0982,263.83624 0,-6.04251 1.20355,0 1.43026,4.2784 c 0.13189,0.39843 0.22806,0.69658 0.28852,0.89442 0.0687,-0.21983 0.17586,-0.5427 0.3215,-0.96862 l 1.44674,-4.2042 1.07578,0 0,6.04251 -0.77077,0 0,-5.05741 -1.75587,5.05741 -0.72131,0 -1.74763,-5.14396 0,5.14396 -0.77077,0" id="path3947" style="fill:#1793d1;fill-opacity:1"/>
      </g>
      <g id="text2638" style="font-size:8.25130367px;font-style:normal;font-weight:normal;fill:#1793d1;fill-opacity:1;stroke:none;font-family:DejaVu Sans Mono">
        <path d="m 239.84053,313.69965 0,-5.20945 -1.94598,0 0,-0.697 4.68164,0 0,0.697 -1.95404,0 0,5.20945 -0.78162,0" id="path3940" style="fill:#1793d1;fill-opacity:1"/>
        <path d="m 243.39004,313.69965 0,-5.90645 1.17646,0 1.39805,4.18205 c 0.12892,0.38947 0.22293,0.6809 0.28202,0.87429 0.0671,-0.21488 0.1719,-0.53048 0.31426,-0.94681 l 1.41417,-4.10953 1.05155,0 0,5.90645 -0.75341,0 0,-4.94353 -1.71634,4.94353 -0.70506,0 -1.70828,-5.02814 0,5.02814 -0.75342,0" id="path3942" style="fill:#1793d1;fill-opacity:1"/>
      </g>
    </g>
  </g>
</svg>


code:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.0" width="600" height="199.41692" id="svg2424">
  <defs id="defs2426">
    <linearGradient x1="112.49854" y1="6.1372099" x2="112.49853" y2="129.3468" id="path1082_2_" gradientUnits="userSpaceOnUse" gradientTransform="translate(287,-83)">
      <stop id="stop193" style="stop-color:#ffffff;stop-opacity:0" offset="0"/>
      <stop id="stop195" style="stop-color:#ffffff;stop-opacity:0.27450982" offset="1"/>
      <midPointStop offset="0" style="stop-color:#FFFFFF" id="midPointStop197"/>
      <midPointStop offset="0.5" style="stop-color:#FFFFFF" id="midPointStop199"/>
      <midPointStop offset="1" style="stop-color:#000000" id="midPointStop201"/>
    </linearGradient>
    <linearGradient x1="541.33502" y1="104.50665" x2="606.91248" y2="303.14029" id="linearGradient2544" xlink:href="#path1082_2_" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-0.3937741,0,0,0.393752,357.51969,122.00151)"/>
    <linearGradient id="linearGradient3388">
      <stop id="stop3390" style="stop-color:#000000;stop-opacity:0" offset="0"/>
      <stop id="stop3392" style="stop-color:#000000;stop-opacity:0.37113401" offset="1"/>
    </linearGradient>
    <linearGradient x1="490.72305" y1="237.72447" x2="490.72305" y2="183.9644" id="linearGradient4416" xlink:href="#linearGradient3388" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.749107,0,0,0.749107,-35.459862,91.44108)"/>
  </defs>
  <g transform="translate(-34.777313,-129.80241)" id="layer1">
    <g transform="matrix(0.8746356,0,0,0.8746356,14.730518,23.408954)" id="g2424">
      <g transform="matrix(0.6378586,0,0,0.6378586,36.486487,2.17139)" id="g2809" style="fill:#ffffff;fill-opacity:1">
        <path d="m 339.96875,309.09375 c -14.47141,-0.0239 -26.4812,2.94367 -31.125,4.5625 l -4.78125,25.8125 c -0.0116,0.0951 23.79543,-6.34855 34.28125,-5.96875 17.36158,0.62381 18.95948,6.63541 18.65625,14.75 0.29595,0.47462 -4.47933,-7.33192 -19.5,-7.59375 -18.94961,-0.32687 -45.69284,6.70947 -45.65625,35.3125 -0.51086,32.17412 24.03361,41.63882 40.75,41.8125 15.02821,-0.27364 22.0777,-5.69136 25.9375,-8.59375 5.07124,-5.30236 10.87308,-10.63447 16.40625,-17.03125 -5.23567,9.51278 -9.77472,16.0898 -14.5,21.125 l 0,4.25 22.84375,-3.84375 0.15625,-62.09375 c -0.23141,-8.78839 5.04123,-42.41827 -43.46875,-42.5 z m -3.28125,54.0625 c 9.46889,0.12995 20.32788,4.79708 20.34375,16.03125 0.049,10.21821 -12.80005,15.71183 -21.15625,15.625 -8.35976,-0.0868 -19.45093,-6.56982 -19.5,-16.53125 0.16016,-8.90444 10.45953,-15.35418 20.3125,-15.125 z" id="path2284" style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"/>
        <path d="m 398.50106,314.83145 -0.15505,102.82693 26.61213,-5.12724 0.0449,-58.30157 c 0.006,-8.68089 12.40554,-18.82451 27.9627,-18.66287 3.30202,-5.97408 9.5087,-21.24219 11.02088,-24.71514 -34.75649,-0.0833 -35.19897,9.98993 -41.24398,14.94517 -0.0631,-9.45285 -0.0213,-15.12741 -0.0213,-15.12741 l -24.2202,4.16213 z" id="path2286" style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"/>
        <path d="m 548.2688,328.33058 c -0.25696,-0.12068 -13.87938,-15.93419 -41.26638,-16.0589 -25.65249,-0.42638 -54.42578,9.51895 -54.88631,52.5328 0.22457,37.81852 27.6402,52.59809 55.0314,52.88627 29.31292,0.30451 40.97654,-18.32947 41.67615,-18.79124 -3.49762,-3.0321 -16.59792,-16.0131 -16.59792,-16.0131 0,0 -8.18236,11.65102 -24.05802,11.79913 -15.87942,0.1512 -29.68245,-12.27325 -29.87805,-29.60905 -0.20349,-17.33595 12.68881,-26.72821 29.99725,-27.48687 14.98466,-0.003 23.6297,9.67334 23.6297,9.67334 l 16.35218,-18.93238 z" id="path2288" style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"/>
        <path d="m 581.8125,278.84375 -25.125,5.90625 0.1875,133.9375 24.75,-4.46875 0.28125,-63.03125 c 0.0529,-6.60927 9.56127,-16.75916 25.4375,-16.4375 15.17973,0.15775 18.57236,10.11767 18.53125,11.375 l 0.4375,72.96875 24.40625,-4.3125 0.0937,-77.375 c 0.1607,-7.44539 -16.30833,-23.16954 -42.78125,-23.28125 -12.58087,0.0202 -19.54815,2.86825 -23.09375,4.96875 -6.06656,4.68565 -12.9998,9.17543 -19.8125,14.90625 6.29809,-8.09099 11.58551,-13.68516 16.75,-17.84375 l -0.0625,-37.3125 z" id="path2290" style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"/>
      </g>
      <g transform="matrix(0.9443373,0,0.01336345,0.9443373,78.345657,-412.48879)" id="g5326" style="fill:#1793d1;fill-opacity:1;stroke:none">
        <path d="m 400.67581,629.79609 7.68167,-1.91575 -0.92851,91.20792 -7.79574,1.32426 1.04258,-90.61643 z" id="path2292" style="fill:#1793d1;fill-opacity:1;fill-rule:evenodd;stroke:none"/>
        <path d="m 421.10266,657.01757 6.75064,-2.9867 -0.86808,65.39931 -6.49779,1.33915 0.61523,-63.75176 z m -1.26059,-23.58316 5.47167,-4.41533 4.42261,4.99952 -5.47558,4.53221 -4.4187,-5.1164 z" id="path2294" style="fill:#1793d1;fill-opacity:1;fill-rule:evenodd;stroke:none"/>
        <path d="m 440.44273,655.82614 7.67755,-1.56201 -0.1573,13.6722 c -0.007,0.58717 4.4194,-15.27364 24.68502,-14.92094 19.67986,0.10952 22.68401,15.34634 22.5291,18.76237 l -0.43759,48.0783 -6.73044,1.45631 0.63316,-47.489 c 0.0974,-1.38684 -2.88144,-13.11441 -16.78906,-13.15754 -13.90509,-0.0404 -23.68364,10.10048 -23.75821,16.57937 l -0.48127,41.83477 -7.80388,2.0313 0.63292,-65.28513 z" id="path2296" style="fill:#1793d1;fill-opacity:1;fill-rule:evenodd;stroke:none"/>
        <path d="m 561.53301,720.20203 -7.6776,1.56186 0.15737,-13.67198 c 0.007,-0.58742 -4.42201,15.27361 -24.68504,14.92086 -19.67983,-0.10944 -22.68399,-15.34626 -22.52908,-18.76229 l 0.43757,-48.07861 8.15674,-1.64226 -0.54644,47.48988 c -0.0149,1.29682 1.36845,13.29979 15.27604,13.3426 13.90511,0.0405 23.76622,-8.37359 24.01453,-21.04416 l 0.43105,-37.46902 7.5978,-1.93195 -0.63294,65.28507 z" id="path2298" style="fill:#1793d1;fill-opacity:1;fill-rule:evenodd;stroke:none"/>
        <path d="m 577.45461,655.28678 -5.42715,4.20017 20.19894,26.93328 -22.39092,31.11622 5.63499,4.226 21.04365,-28.8967 20.8779,29.58159 5.32727,-4.20103 -22.37578,-31.62866 18.56963,-25.5775 -5.53193,-4.73429 -16.92109,23.66778 -19.00551,-24.68686 z" id="path2300" style="fill:#1793d1;fill-opacity:1;fill-rule:evenodd;stroke:none"/>
      </g>
      <path d="m 105.8125,16.625 c -7.39687,18.135158 -11.858304,29.997682 -20.09375,47.59375 5.04936,5.35232 11.247211,11.585364 21.3125,18.625 C 96.210077,78.390904 88.828713,73.920352 83.3125,69.28125 72.7727,91.274163 56.259864,122.60209 22.75,182.8125 49.087628,167.60733 69.504089,158.23318 88.53125,154.65625 87.714216,151.1422 87.2497,147.34107 87.28125,143.375 l 0.03125,-0.84375 c 0.417917,-16.87382 9.195665,-29.84979 19.59375,-28.96875 10.39809,0.88104 18.48041,15.28242 18.0625,32.15625 -0.0786,3.17512 -0.43674,6.22955 -1.0625,9.0625 18.82058,3.68164 39.01873,13.03179 65,28.03125 -5.123,-9.4318 -9.69572,-17.93388 -14.0625,-26.03125 -6.87839,-5.33121 -14.05289,-12.2698 -28.6875,-19.78125 10.05899,2.61375 17.2611,5.62932 22.875,9 C 124.63297,63.338161 121.03766,52.354109 105.8125,16.625 z" transform="matrix(1.1433333,0,0,1.1433333,22.920168,121.64318)" id="path2518" style="fill:#1793d1;fill-opacity:1;fill-rule:evenodd;stroke:none"/>
      <g id="text2634" style="font-size:8.44138241px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;font-family:DejaVu Sans Mono">
        <path d="m 685.46692,263.83624 0,-5.32944 -1.99082,0 0,-0.71307 4.7895,0 0,0.71307 -1.99906,0 0,5.32944 -0.79962,0" id="path3660" style="fill:#ffffff;fill-opacity:1"/>
        <path d="m 689.0982,263.83624 0,-6.04251 1.20355,0 1.43026,4.2784 c 0.13189,0.39843 0.22806,0.69658 0.28852,0.89442 0.0687,-0.21983 0.17586,-0.5427 0.3215,-0.96862 l 1.44674,-4.2042 1.07578,0 0,6.04251 -0.77077,0 0,-5.05741 -1.75587,5.05741 -0.72131,0 -1.74763,-5.14396 0,5.14396 -0.77077,0" id="path3662" style="fill:#ffffff;fill-opacity:1"/>
      </g>
      <g id="text2638" style="font-size:8.25130367px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;font-family:DejaVu Sans Mono">
        <path d="m 239.84053,313.69965 0,-5.20945 -1.94598,0 0,-0.697 4.68164,0 0,0.697 -1.95404,0 0,5.20945 -0.78162,0" id="path2883" style="fill:#ffffff;fill-opacity:1"/>
        <path d="m 243.39004,313.69965 0,-5.90645 1.17646,0 1.39805,4.18205 c 0.12892,0.38947 0.22293,0.6809 0.28202,0.87429 0.0671,-0.21488 0.1719,-0.53048 0.31426,-0.94681 l 1.41417,-4.10953 1.05155,0 0,5.90645 -0.75341,0 0,-4.94353 -1.71634,4.94353 -0.70506,0 -1.70828,-5.02814 0,5.02814 -0.75342,0" id="path2885" style="fill:#ffffff;fill-opacity:1"/>
      </g>
    </g>
  </g>
</svg>


code:
###############################################################################
# Set default behavior to automatically normalize line endings.
###############################################################################
* text=auto

###############################################################################
# Set default behavior for command prompt diff.
#
# This is need for earlier builds of msysgit that does not have it on by
# default for csharp files.
# Note: This is only used by command line
###############################################################################
#*.cs     diff=csharp

###############################################################################
# Set the merge driver for project and solution files
#
# Merging from the command prompt will add diff markers to the files if there
# are conflicts (Merging from VS is not affected by the settings below, in VS
# the diff markers are never inserted). Diff markers may cause the following
# file extensions to fail to load in VS. An alternative would be to treat
# these files as binary and thus will always conflict and require user
# intervention with every merge. To do so, just uncomment the entries below
###############################################################################
#*.sln       merge=binary
#*.csproj    merge=binary
#*.vbproj    merge=binary
#*.vcxproj   merge=binary
#*.vcproj    merge=binary
#*.dbproj    merge=binary
#*.fsproj    merge=binary
#*.lsproj    merge=binary
#*.wixproj   merge=binary
#*.modelproj merge=binary
#*.sqlproj   merge=binary
#*.wwaproj   merge=binary

###############################################################################
# behavior for image files
#
# image files are treated as binary by default.
###############################################################################
#*.jpg   binary
#*.png   binary
#*.gif   binary

###############################################################################
# diff behavior for common document formats
#
# Convert binary document formats to text before diffing them. This feature
# is only available from the command line. Turn it on by uncommenting the
# entries below.
###############################################################################
#*.doc   diff=astextplain
#*.DOC   diff=astextplain
#*.docx  diff=astextplain
#*.DOCX  diff=astextplain
#*.dot   diff=astextplain
#*.DOT   diff=astextplain
#*.pdf   diff=astextplain
#*.PDF   diff=astextplain
#*.rtf   diff=astextplain
#*.RTF   diff=astextplain

repo_name: nekonyan/rimworld

path: .gitattributes

license: unknown


code:
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore

# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates

# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs

# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/

# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/

# Visual Studio 2017 auto generated files
Generated\ Files/

# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*

# NUNIT
*.VisualState.xml
TestResult.xml

# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c

# Benchmark Results
BenchmarkDotNet.Artifacts/

# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/

# StyleCop
StyleCopReport.xml

# Files built by Visual Studio
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc

# Chutzpah Test files
_Chutzpah*

# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb

# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap

# Visual Studio Trace Files
*.e2e

# TFS 2012 Local Workspace
$tf/

# Guidance Automation Toolkit
*.gpState

# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user

# JustCode is a .NET coding add-in
.JustCode

# TeamCity is a build add-in
_TeamCity*

# DotCover is a Code Coverage Tool
*.dotCover

# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json

# Visual Studio code coverage results
*.coverage
*.coveragexml

# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*

# MightyMoose
*.mm.*
AutoTest.Net/

# Web workbench (sass)
.sass-cache/

# Installshield output folder
[Ee]xpress/

# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html

# Click-Once directory
publish/

# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj

# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/

# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets

# Microsoft Azure Build Output
csx/
*.build.csdef

# Microsoft Azure Emulator
ecf/
rcf/

# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx

# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!?*.[Cc]ache/

# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs

# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk

# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/

# RIA/Silverlight projects
Generated_Code/

# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak

# SQL Server files
*.mdf
*.ldf
*.ndf

# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
*- Backup*.rdl

# Microsoft Fakes
FakesAssemblies/

# GhostDoc plugin setting file
*.GhostDoc.xml

# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/

# Visual Studio 6 build log
*.plg

# Visual Studio 6 workspace options file
*.opt

# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw

# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions

# Paket dependency manager
.paket/paket.exe
paket-files/

# FAKE - F# Make
.fake/

# JetBrains Rider
.idea/
*.sln.iml

# CodeRush personal settings
.cr/personal

# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc

# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config

# Tabs Studio
*.tss

# Telerik's JustMock configuration file
*.jmconfig

# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs

# OpenCover UI analysis results
OpenCover/

# Azure Stream Analytics local run output
ASALocalRun/

# MSBuild Binary and Structured Log
*.binlog

# NVidia Nsight GPU debugger configuration file
*.nvuser

# MFractors (Xamarin productivity tool) working folder
.mfractor/

# Local History for Visual Studio
.localhistory/

# BeatPulse healthcheck temp database
healthchecksdb
/Source/Patches/PawnAnimationPatches/HarmonyPatch_Pawn_DrawTracker.cs
/Source/Patches/PawnAnimationPatches/HarmonyPatch_PawnRotation.cs
/Source/Patches/PawnAnimationPatches/HarmonyPatch_PawnRenderer.cs
/Source/Patches/OtherModPatches/HarmonyPatch_ShowHairWithHats.cs
/Source/Patches/OtherModPatches/HarmonyPatch_FacialAnimation.cs
/Source/Patches/OtherModPatches/HarmonyPatch_DontShaveYourHead.cs
/Source/Patches/OtherModPatches/HarmonyPatch_CSL.cs
/Source/Patches/OtherModPatches/HarmonyPatch_AlienRace.cs
/Source/Patches/ThingAnimationPatches/HarmonyPatch_ThingDrawAt.cs
/Defs/AnimationDefs/Animations_SexToys.xml

path: .gitignore